def write_stats(datadfs, outputfile, names=[]):
    """Call calculation functions and write stats file.

    This function takes a list of DataFrames,
    and will create a column for each in the tab separated output.
    """
    if outputfile == 'stdout':
        output = sys.stdout
    else:
        output = open(outputfile, 'wt')

    stats = [Stats(df) for df in datadfs]
    features = {
        "Number of reads": "number_of_reads",
        "Total bases": "number_of_bases",
        "Total bases aligned": "number_of_bases_aligned",
        "Median read length": "median_read_length",
        "Mean read length": "mean_read_length",
        "Read length N50": "n50",
        "Average percent identity": "average_identity",
        "Median percent identity": "median_identity",
        "Active channels": "active_channels",
        "Mean read quality": "mean_qual",
        "Median read quality": "median_qual",
    }
    max_len = max([len(k) for k in features.keys()])
    try:
        max_num = max(max([len(str(s.number_of_bases)) for s in stats]),
                      max([len(str(n)) for n in names])) + 6
    except ValueError:
        max_num = max([len(str(s.number_of_bases)) for s in stats]) + 6
    output.write("{:<{}}{}\n".format('General summary:', max_len,
                                     " ".join(['{:>{}}'.format(n, max_num) for n in names])))
    for f in sorted(features.keys()):
        try:
            output.write("{f:{pad}}{v}\n".format(
                f=f + ':',
                pad=max_len,
                v=feature_list(stats, features[f], padding=max_num)))
        except KeyError:
            pass
    if all(["quals" in df for df in datadfs]):
        long_features = {
            "Top 5 longest reads and their mean basecall quality score":
            ["top5_lengths", range(1, 6)],
            "Top 5 highest mean basecall quality scores and their read lengths":
            ["top5_quals", range(1, 6)],
            "Number, percentage and megabases of reads above quality cutoffs":
            ["reads_above_qual", [">Q" + str(q) for q in stats[0].qualgroups]],
        }
        for lf in sorted(long_features.keys()):
            output.write(lf + "\n")
            for i in range(5):
                output.write("{}:\t{}\n".format(
                    long_features[lf][1][i], feature_list(stats, long_features[lf][0], index=i)))
def write_stats ( datadfs , outputfile , names = [ ] ) : if outputfile == 'stdout' : output = sys . stdout else : output = open ( outputfile , 'wt' ) stats = [ Stats ( df ) for df in datadfs ] features = { "Number of reads" : "number_of_reads" , "Total bases" : "number_of_bases" , "Total bases aligned" : "number_of_bases_aligned" , "Median read length" : "median_read_length" , "Mean read length" : "mean_read_length" , "Read length N50" : "n50" , "Average percent identity" : "average_identity" , "Median percent identity" : "median_identity" , "Active channels" : "active_channels" , "Mean read quality" : "mean_qual" , "Median read quality" : "median_qual" , } max_len = max ( [ len ( k ) for k in features . keys ( ) ] ) try : max_num = max ( max ( [ len ( str ( s . number_of_bases ) ) for s in stats ] ) , max ( [ len ( str ( n ) ) for n in names ] ) ) + 6 except ValueError : max_num = max ( [ len ( str ( s . number_of_bases ) ) for s in stats ] ) + 6 output . write ( "{:<{}}{}\n" . format ( 'General summary:' , max_len , " " . join ( [ '{:>{}}' . format ( n , max_num ) for n in names ] ) ) ) for f in sorted ( features . keys ( ) ) : try : output . write ( "{f:{pad}}{v}\n" . format ( f = f + ':' , pad = max_len , v = feature_list ( stats , features [ f ] , padding = max_num ) ) ) except KeyError : pass if all ( [ "quals" in df for df in datadfs ] ) : long_features = { "Top 5 longest reads and their mean basecall quality score" : [ "top5_lengths" , range ( 1 , 6 ) ] , "Top 5 highest mean basecall quality scores and their read lengths" : [ "top5_quals" , range ( 1 , 6 ) ] , "Number, percentage and megabases of reads above quality cutoffs" : [ "reads_above_qual" , [ ">Q" + str ( q ) for q in stats [ 0 ] . qualgroups ] ] , } for lf in sorted ( long_features . keys ( ) ) : output . write ( lf + "\n" ) for i in range ( 5 ) : output . write ( "{}:\t{}\n" . format ( long_features [ lf ] [ 1 ] [ i ] , feature_list ( stats , long_features [ lf ] [ 0 ] , index = i ) ) )
Call calculation functions and write stats file.

    This function takes a list of DataFrames,
    and will create a column for each in the tab separated output.