From fa53d3b7a9711bf70aa247babf9756b39a7f9910 Mon Sep 17 00:00:00 2001 From: Aurinko23 Date: Sat, 19 Apr 2025 00:07:35 +0300 Subject: [PATCH] hw18 add --- bad_input.fastq | 1 + fasstq_filter.py | 69 +++++++++- fastq_test.py | 90 ++++++++++++ input.fastq | 348 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 507 insertions(+), 1 deletion(-) create mode 100644 bad_input.fastq create mode 100644 fastq_test.py create mode 100644 input.fastq diff --git a/bad_input.fastq b/bad_input.fastq new file mode 100644 index 0000000..281b3c7 --- /dev/null +++ b/bad_input.fastq @@ -0,0 +1 @@ +This is a bad fastq input file \ No newline at end of file diff --git a/fasstq_filter.py b/fasstq_filter.py index 6ae9cd7..e951df0 100644 --- a/fasstq_filter.py +++ b/fasstq_filter.py @@ -7,9 +7,39 @@ def GC(sequence): # Older versions have this: from Bio.SeqUtils import GC +import argparse +import logging + +logger = logging.getLogger('my_logger') +logger.setLevel(logging.DEBUG) # Capture all levels + +# Create formatters +formatter = logging.Formatter('%(levelname)s - %(message)s') + +# Handler for DEBUG, INFO, and WARNING +info_handler = logging.FileHandler('info.log') +info_handler.setLevel(logging.DEBUG) +info_handler.addFilter(lambda record: record.levelno <= logging.WARNING) +info_handler.setFormatter(formatter) + +# Handler for ERROR and CRITICAL +error_handler = logging.FileHandler('error.log') +error_handler.setLevel(logging.ERROR) +error_handler.setFormatter(formatter) + +# Add handlers to the logger +logger.addHandler(info_handler) +logger.addHandler(error_handler) + + + def filter_fastq(input_fastq, output_fastq, gc_bounds=(0, 100), length_bounds=(0, 2 ** 32), quality_threshold=0): + if quality_threshold < 0: + logger.error(f"quality_threshold={quality_threshold}, can't be lower then 0, change to 0") + quality_threshold = 0 if not isinstance(gc_bounds, tuple): + logger.info(f'You entered one number {gc_bounds}, it will be interpreted as the upper bound') gc_bounds = (0, gc_bounds) if not isinstance(length_bounds, tuple): @@ -33,4 +63,41 @@ def filter_fastq(input_fastq, output_fastq, gc_bounds=(0, 100), length_bounds=(0 filtered_records.append(record) - SeqIO.write(filtered_records, output_fastq, "fastq") \ No newline at end of file + SeqIO.write(filtered_records, output_fastq, "fastq") + + +def int_or_range(value): + try: + if ',' in value: + parts = value.split(',') + if len(parts) != 2: + raise ValueError + return tuple(int(x.strip()) for x in parts) + return int(value) + except Exception: + raise argparse.ArgumentTypeError(f"Expected int or int range (start,end), got '{value}'") + + +def get_args(): + parser = argparse.ArgumentParser( + prog='My wonderful parser', + description='This tool is needed to parse command line arguments', + epilog='Text at the bottom of help') + + parser.add_argument('-i', "--input", required=True, metavar='path', type=str, help='This is fastq format input file (takes value)') + parser.add_argument('-g', "--gc", type=int_or_range, default=(0, 100), help="Either a single integer (e.g., 5) or a range in the form start,end (e.g., 0,100)") + parser.add_argument('-l', "--lenb", type=int_or_range, default=(0, 2 ** 32), help="Either a single integer (e.g., 5) or a range in the form start,end (e.g., 0, 2 ** 32)") + parser.add_argument('-t', "--thresh", type=int, default=0, help='Threshold value of average read quality for filtering (default is 0, phred33 scale)') + parser.add_argument('-o', "--output", required=True, metavar='path', type=str, help='This is fastq format filtered output file') + return parser.parse_args() + +if __name__ == '__main__': + args = get_args() + # args.gggg + # print(args) + input_fastq=args.input + output_fastq=args.output + gc_bounds=args.gc + length_bounds=args.lenb + quality_threshold=args.thresh + filter_fastq(input_fastq, output_fastq, gc_bounds, length_bounds, quality_threshold) diff --git a/fastq_test.py b/fastq_test.py new file mode 100644 index 0000000..57b26e4 --- /dev/null +++ b/fastq_test.py @@ -0,0 +1,90 @@ +import os +import pytest +from fasstq_filter import filter_fastq + +def test_no_bound(): + try: + filter_fastq("./input.fastq", "./no_bound_output.fastq") + with open('./input.fastq', 'r') as f1, open('./no_bound_output.fastq', 'r') as f2: + lines1 = f1.readlines() + lines2 = f2.readlines() + assert lines1 == lines2, "input file not same as output file" + finally: + if os.path.exists("./no_bound_output.fastq"): + os.remove("./no_bound_output.fastq") + + +@pytest.mark.parametrize( + "params", + [ + ({"length_bounds": 1}), + ({"gc_bounds": 1}), + ({"quality_threshold": 101}), + ] +) +def test_bound_all(params): + try: + filter_fastq("./input.fastq", "./no_bound_all.fastq", **params) + with open('./no_bound_all.fastq', 'r') as f1: + lines1 = f1.readlines() + assert not lines1, "file not empty" + finally: + if os.path.exists("./no_bound_all.fastq"): + os.remove("./no_bound_all.fastq") + + +@pytest.mark.parametrize( + "params_int, params_tuple", + [ + ({"length_bounds": 50}, {"length_bounds": (0, 50)}), + ({"gc_bounds": 50}, {"gc_bounds": (0, 50)}), + ] +) +def test_int_tuple(params_int, params_tuple): + try: + filter_fastq("./input.fastq", "./test_int.fastq", **params_int) + filter_fastq("./input.fastq", "./test_tuple.fastq", **params_tuple) + with open("./test_int.fastq", 'r') as f1, open("./test_tuple.fastq", 'r') as f2: + lines1 = f1.readlines() + lines2 = f2.readlines() + assert lines1 == lines2, "int file not same as tuple file" + finally: + if os.path.exists("./test_int.fastq"): + os.remove("./test_int.fastq") + if os.path.exists("./test_tuple.fastq"): + os.remove("./test_tuple.fastq") + + +def test_input_error(): + try: + filter_fastq("./bad_input.fastq", "./bad_output_file.fastq") + assert "never come here" + except ValueError: + pass + +@pytest.mark.parametrize( + "length_bounds, gc_bounds, quality_threshold", + [ + (0, 50, -11), + ] +) +def test_logger(length_bounds, gc_bounds, quality_threshold): + try: + filter_fastq("./input.fastq", "./outlog.fastq", length_bounds, gc_bounds, quality_threshold) + with open('./error.log', 'r') as f1: + lines1 = f1.readlines() + assert lines1[-1] == "ERROR - quality_threshold=-11, can't be lower then 0, change to 0\n", "wrong log" + finally: + if os.path.exists("./outlog.fastq"): + os.remove("./outlog.fastq") + + +def test_logger(): + try: + filter_fastq("./input.fastq", "./outlog.fastq", 0, 50, -11) + with open('./error.log', 'r') as f1: + lines1 = f1.readlines() + assert lines1[-1] == "ERROR - quality_threshold=-11, can't be lower then 0, change to 0\n", "wrong log" + finally: + if os.path.exists("./outlog.fastq"): + os.remove("./outlog.fastq") \ No newline at end of file diff --git a/input.fastq b/input.fastq new file mode 100644 index 0000000..4444861 --- /dev/null +++ b/input.fastq @@ -0,0 +1,348 @@ +@SRX079804:1:SRR292678:1:1101:21885:21885 1:N:0:1 BH:ok +ACAGCAACATAAACATGATGGGATGGCGTAAGCCCCCGAGATATCAGTTTACCCAGGATAAGAGATTAAATTATGAGCAACATTATTAA ++ +FGGGFGGGFGGGFGDFGCEBB@CCDFDDFFFFBFFGFGEFDFFFF;D@DD>C@DDGGGDFGDGG?GFGFEGFGGEF@FDGGGFGFBGGD +@SRX079804:1:SRR292678:1:1101:24563:24563 1:N:0:1 BH:failed +ATTAGCGAGGAGGAGTGCTGAGAAGATGTCGCCTACGCCGTTGAAATTCCCTTCAATCAGGGGGTACTGGAGGATACGAGTTTGTGTG ++ +BFFFFFFFB@B@A<@D>BDDACDDDEBEDEFFFBFFFEFFDFFF=CC@DDFD8FFFFFFF8/+.2,@7<<:?B/:<><-><@.A*C>D +@SRX079804:1:SRR292678:1:1101:30161:30161 1:N:0:1 BH:failed +GAACGACAGCAGCTCCTGCATAACCGCGTCCTTCTTCTTTAGCGTTGTGCAAAGCATGTTTTGTATTACGGGCATCTCGAGCGAATC ++ +DFFFEGDGGGGFGGEDCCDCEFFFFCCCCCB>CEBFGFBGGG?DE=:6@=>AD?D8DCEE:>EEABE5D@5:DDCA;EEE-DCD +@SRX079804:1:SRR292678:1:1101:47176:47176 1:N:0:1 BH:failed +TGAAGCGTCGATAGAAGTTAGCAAACCCGCGGAACTTCCGTACATCAGACACATTCCGGGGGGTGGGCCAATCCATGATGCCTTTG ++ +FF@FFBEEEEFFEFFD@EDEFFB=DFEEFFFE8FFE8EEDBFDFEEBE+E46.'8.5::EE:?E>A6@?)>;>9D<C9DEBAAB=5C?<@0=A?D@BDB;:BA?BDDFH?B@DCB6BEBDA??AA9. +@SRX079804:1:SRR292678:1:1101:52180:52180 1:N:0:1 BH:failed +TTTTTGGTTTTAGGTCTAACATGTAAGTCTTTAATCTATTTTGAATTAATTTTTGGATGAGGTGTAAGGAAGGGATCCAGTTTC ++ +FEFFFFFF=FEEFDFD>EE:?<5@BFAFCFEE7>C>:/6:2<344DA:6DDCDC>)34773DD?@DBA9B +@SRX079804:1:SRR292678:1:1101:105156:105156 1:N:0:1 BH:ok +ACTGCTGAGCTTAAATGGCGGCAGTCTGACGGTTACCAACGGGGGCACTTCAACCGGTTCGTTAACGGGGAGCGGAGAGCTGA ++ +GFFEGGFGGGGEGGGGGGGGGFDD=DDE7EDD6CD?FEDEE@EBEFEE.DD5DDD@B<7>/0543C?BEE?@@BE@; +@SRX079804:1:SRR292678:1:1101:135168:135168 1:N:0:1 BH:ok +CCTTCCTAAAAATTAAGAATCTTAACAATTAGCAGCACAACCAAAATTATTACCGAAAGGACTTACTCCTCCGCCAAATCCA ++ +GGGEGGGEGGBFFFFFGCFFEGG6AEEEDEEGGFGGCG4EGFFGDFFBGEGFGGFECBDEGGEFGBFF?CGFBFGGGGFGFF +@SRX079804:1:SRR292678:1:1101:149302:149302 1:N:0:1 BH:changed:1 +TAGGGTTGTATTTGCAGATCCATGGCATGCCAAAAAGAACATCGTCCCGTCCAATATCTGCAACATACCAGTTGGTTGGTA ++ +@;CBA=:@;@DBDCDEEE/EEEEEEF@>FBEEB=EFA>EEBD=DAEEEEB9)99>B99BC)@,@<9CDD=C,5;B::?@;A +@SRX079804:1:SRR292678:1:1101:170868:170868 2:N:0:1 BH:failed +CTGCCGAGACTGTTCTCAGACATGGAAAGCTCGATTCGCATACACTCGCTGAGTAAGAGAGTCACACCAAATCACAGATT ++ +E;FFFEGFGIGGFBG;C6D<@C7CDGFEFGFHDFEHHHBBHHFDFEFBAEEEEDE@A2=DA:??C3:@>EEBEEHEFEHHFFHH?FGBGFBBD77B;;C?FFFFGGFED.BBABBG@DBBE +@SRX079804:1:SRR292678:1:1101:190845:190845 1:N:0:1 BH:changed:1 +CCTCAGCGTGGATTGCCGCTCATGCAGGAGCAGATAATCCCTTCGCCATCCCATTAAGCGCCGTTGTCGGTATTCC ++ +FF@FFCFEECEBEC@@BBBBDFBBFFDFFEFFEB8FFFFFFFFEFCEB/>BBA@AFFFEEEEECE;ACD@DBBEEE +@SRX079804:1:SRR292678:1:1101:198993:198993 2:N:0:1 BH:failed +AGTTATTTATGCATCATTCTCATGTATGAGCCAACAAGATAGTACAAGTTTTATTGCTATGAGTTCAGTACAACA ++ +<<<=;@B??@<>@><48876EADEG6B.BB@.?+98204<:<>@?A=@EFEFFFEEFB +@SRX079804:1:SRR292678:1:1101:204480:204480 1:N:0:1 BH:failed +AGTGAGACACCCCTGAACATTCCTAGTAAGACATCTTTGAATATTACTAGTTAGCCACACTTTAAAATGACCCG ++ +<98;<@@@:@CD@BCCDD=DBBCEBBAAA@9???@BCDBCGF=GEGDFGDBEEEEEFFFF=EDEE=DCD@@BBC +@SRX079804:1:SRR292678:1:1101:212327:212327 2:N:0:1 BH:failed +TTACCTCTGCTTTTTCGCCTGTTACTTCTACTAATCCTTCATCTATTGCGAATGGCCCTACTACTGACGAAAT ++ +DBCCC@@;A@BDCCCE>BBED>GDCDBFBFFEBEECFGGD@@BCB<<8@;09746:@@>@EEECEEDE/FEED +@SRX079804:1:SRR292678:1:1101:230386:230386 1:N:0:1 BH:failed +TTCTGATTGGAGTGAGAGTGCCATTTGTTTCGCTGATTGGACGTTGGAAAGCGCCTTGACCTTTGACAGCAG ++ +=BDD=DCDBBCDADD@@B;B@CC7C@B@>=BACDD,=??8DDCDD7CCCCDBDEDBDDDDDEEBDDDBD?DB +@SRX079804:1:SRR292678:1:1101:236093:236093 1:N:0:1 BH:failed +CATCTAACTCTCATTCTAGATTCTTAAGTTGGCTACACTTTGCCGTCATTCTCGGTGGATTAGCTATTGGG ++ +A:@A@;@BB@GGFGG@A@@817729B +@SRX079804:1:SRR292678:1:1101:251912:251912 2:N:0:1 BH:ok +TGTAAATGGAAATGAACCTAATATGTATGCACAAACTATTAAAGCATATCTTGCAAAAGGAGCAATGGCG ++ +GHFDHHHGHHHFFHHGHHHGGGGGGDEFFEGGGGEFHHFHGFGHHHHFHHDDD6@=DCACFFGGEFBBG +@SRX079804:1:SRR292678:1:1101:278698:278698 1:N:0:1 BH:ok +CTAATAATGGTAATTGAACCATAGAAGATAAGTTCATAATGTAATAAATACATCCATAGAGTTATTAA ++ +DDBDBCCCDD@FFFB9<<<@DA=DA@B:@=@@AC@GGFCGECFFDGGCGFFGGFFCEBF9>?@>BDFF +@SRX079804:1:SRR292678:1:1101:295878:295878 1:N:0:1 BH:changed:1 +AATGCAAACAGGATGATATTTGAATCCGTAATACTGTTCTTTCATCATAAATAATTTATGCAGATAC ++ +HHHHHEGFHDGFEGBCBEEEGGGG@EDGCGBBBEGF4?EFDBDDBFE8DEE-E?EE;B@EFC=;FDE +@SRX079804:1:SRR292678:1:1101:306575:306575 1:N:0:1 BH:failed +ATCTTTGAACTTTGTCTCACTTTCCCCCATCTCACCATTCCTCCTGTTCTGTGAACCCCAGTTTCA ++ +E::EA@E<6B8>97:<6084649?@:?EDED=BEBEGGFEDGECECBDEFDDEEGGEDDFFF +@SRX079804:1:SRR292678:1:1101:403661:403661 1:N:0:1 BH:failed +GATGGCTTTGCTTTCTCATTCTCCTCTCCATCGTTCCCATCTTCGCCCTCAGACGCTGATTGAT ++ +EG=DFFDFFDDGDGGGGGFFGGGGBADADCEEE5EC>CCCE6BEEEGGGGCBEGGE@9BCEF;>>D@D +@SRX079804:1:SRR292678:1:1101:425870:425870 1:N:0:1 BH:failed +GTACAGCTCTCCTCGTTACCAGCACATCTTGGACACCCGACGAAGACTTTGACATGCTCCTC ++ +E@EED@EF=D>=EED@D@7DBF +@SRX079804:1:SRR292678:1:1101:429745:429745 1:N:0:1 BH:failed +GGCGATTGTGAAGGCATAAGAGTGGGACATAGTTCAAGTCCAGAACGAATTAAACGCACAA ++ +BB2B=A@A:BFBFFFFF +@SRX079804:1:SRR292678:1:1101:475293:475293 2:N:0:1 BH:ok +TACATTTGATTTCTTTATAAGATTTCTTACTGTAAAATCATCGCTATTTAACAGCTTATT ++ +FHFFFFDC@FGFEDGE?EEDC6EEEDEF?EEEE8EHHGGHFGFFEGGGGBFBDBDEBCBCA +@SRX079804:1:SRR292678:1:1101:511594:511594 1:N:0:1 BH:ok +AGCACAATCAGATTCGCTTATGACGGCGATGAAGAAATTGCGATGAAATGTGAGGTGA ++ +HCHFFHHHGFHBFFFEGFFEFHFEHGBGECHEHB?CDDEFCDBFF9DFCD.BC +@SRX079804:1:SRR292678:1:1101:527839:527839 2:N:0:1 BH:changed:4 +GACATTTCTTTCTGGGAAGGCTTATTAAACGATAAAGATAATGATATACGTTTTGAT ++ +>35/-;,><04%'A.?4?:>BE.DC-@???CE:@EDFDBDG7B;=<)?1.@?2A5<5 +@SRX079804:1:SRR292678:1:1101:547309:547309 1:N:0:1 BH:failed +AGGTCTGCACTGGCTCTTCAGAGCGCAAGCGAGGGAAGAGAAATATAGTGACGCAC ++ +GEGFGFD=FDB8B7DDFFFF@/DC@+2:66>-@>9);<2: +@SRX079804:1:SRR292678:1:1101:570367:570367 1:N:0:1 BH:failed +CTATGGCCACTTTTGTATTCTCGATTGAGGTTATTCGCTCACCCATCTTTTCCAA ++ +FFEE;FFFFBFFFFF<9BEDEBEACDD3DD0B5>>0?:@>FFBEEBEFFFFGCCBCDGIGDGHEFGG=GGGGHFHEHF@FEFE?CGEEEFADEAEC +@SRX079804:1:SRR292678:1:1101:590521:590521 1:N:0:1 BH:failed +CCTCTTCTCTTTCGCGGTCATCTTGGGTTTCGCGCCTTTCTTCTTGACGACAC ++ +EGFDD@FDF=FDFFEEGGBEFDGF=FGAGEEEEEDFBGGEE8EEE@>5;>90< +@SRX079804:1:SRR292678:1:1101:601307:601307 1:N:0:1 BH:changed:1 +TTGGCGTGCTGATGATTATCGGTATCTTCAAAGGCGCGCAGCCTGCGGGCTG ++ +GGGEGFGGEGE:EE>GFFGGGGDCGEBFFF>G=EBFFEC?DFGAD?DDECBE +@SRX079804:1:SRR292678:1:1101:631057:631057 1:N:0:1 BH:failed +CACCATTATCCTATTTCTGAACACATTTGACAGTCACGGCACTAGCATTGG ++ +GGGGGGGGBFGGGEGFGGGGGFGEFFDFFFF?EBFEEDBFGEE@BE;E?E7 +@SRX079804:1:SRR292678:1:1101:654270:654270 1:N:0:1 BH:failed +ATCTTTCTCTCTCTGCTGCATTCTCCGCTTCAGCTCCTCAATTTCAATCA ++ +GGGGGGEDGGFEGDGCGGBCEFGGGGFBFGGEGGGGGEGFCFEEGGFEDB +@SRX079804:1:SRR292678:1:1101:667761:667761 1:N:0:1 BH:failed +CAGCCTTTTGAGGTCGTCTATCGCAGCGTGTCCGCGACGTTTTGTTGCG ++ +GGFGGG=GGGG@GFGGG@GGEGFGGGEGGGFGGEG@EEEDE8EE=E=DE +@SRX079804:1:SRR292678:1:1101:671526:671526 1:N:0:1 BH:ok +CAAGTAGAAGGTTAGCGCCTCTCTGTAAAAGGAGTCAAGCGCTATGTC ++ +HHHHHGHEHHDGGGCGGGGHFGGGGEDGGGGGBEBEBEEEFGHFHFHH +@SRX079804:1:SRR292678:1:1101:685633:685633 2:N:0:1 BH:failed +GCTGTAATGGATCCACTAATTGGGACAGTGGTGGATAAAACGAATAC ++ +DADADCGFEFEEEGEGGEFDEEEEBDAC;C10<9?AGBGGGFF7DFB +@SRX079804:1:SRR292678:1:1101:769626:769626 1:N:0:1 BH:failed +GTATTCCTTGACAGTCGAAAGAATCACTGCTAACCCAGGC ++ +C>5BBCCCD=ACDD@A7@@B@A?B?=8B??EDEEDEBDEE +@SRX079804:1:SRR292678:1:1101:776222:776222 1:N:0:1 BH:failed +AGAACGTACACCCTACGCTAAGCAGTGGCTCCATGCCAA ++ +BGDGGGGFEGGGGEGGGGFGFF6=FCFAFFEE,=C?EDD +@SRX079804:1:SRR292678:1:1101:782183:782183 2:N:0:1 BH:failed +TACGCGTAACGACGTCATAGCCATGACGCTTCAATAAA ++ +D +@SRX079804:1:SRR292678:1:1101:828383:828383 1:N:0:1 BH:failed +AAACCACATATGACATGAGTGACGGGACTAAAGTTC ++ +FFEEFEEB=E,C>CDEEEECEBEEEC?F;BDDDDAE +@SRX079804:1:SRR292678:1:1101:829239:829239 1:N:0:1 BH:ok +TCGATCCTTCTGCCTCAAAGTATACTAGGACGCAT ++ +GGGDFGGBGFFEBFEDCBCDCGGGGBEEE=GE?EE +@SRX079804:1:SRR292678:1:1101:868419:868419 1:N:0:1 BH:ok +ATTCGTCAGGCCCAATAACATCATGAATTTCCAG ++ +DEEEEEEEBDFFFFFFFF8FEED8@FFFBFFEFF +@SRX079804:1:SRR292678:1:1101:892716:892716 2:N:0:1 BH:ok +AATTTACCTAATGGAATCAATGAGGCTACTCCA ++ +@BCBBBCCBCCCCCCCDDAAFFGEEEDBF@EE@ +@SRX079804:1:SRR292678:1:1101:893159:893159 2:N:0:1 BH:ok +TTCTCTGCTTTTCATATCTTGTCATAAAAATT ++ +CBDCDEEEEEBEEEEGDDFDEEEEDGFFEGFE +@SRX079804:1:SRR292678:1:1101:918742:918742 1:N:0:1 BH:failed +CTCTCCATGCACAAAGAATATCACAGCCAAA ++ +EEEBA?@;B@EEE@BEE=?EDDDDADCDA?E +@SRX079804:1:SRR292678:1:1101:923787:923787 2:N:0:1 BH:ok +TTGTGAAGGATGGGATATTAGTGTAGATGA ++ +EEBBEGEEE=BBB<@DCDCGD@D>=DEGEE +@SRX079804:1:SRR292678:1:1101:933189:933189 1:N:0:1 BH:failed +GTCTGCACTATCGAGGGCTGTGCCTTTGC ++ +FEFFDBFF8FE>?DFFFCEBCEEBBEDE6 +@SRX079804:1:SRR292678:1:1101:937136:937136 1:N:0:1 BH:failed +TTTCTTTGGCTTAAAGATAGTTTTAGTC ++ +EFFFEEEEFCBCDDDDE@/E?@@7@@3< +@SRX079804:1:SRR292678:1:1101:940351:940351 1:N:0:1 BH:changed:1 +TGCCGTGGGAATGACAAACAAGCATCC ++ +DECC@GFFBF=EBEAFDFGD?FFF8FF +@SRX079804:1:SRR292678:1:1101:940693:940693 1:N:0:1 BH:failed +CACATTATGAACTATGGGCACTGCAT ++ +EEEGFDEDFEGGGGGFEGBGGGFGGG +@SRX079804:1:SRR292678:1:1101:955819:955819 1:N:0:1 BH:failed +CACCTAGCAGCAACGGACGAGTCAG ++ +GGGGGEEEGGEGGGFGEGG;F@EFF +@SRX079804:1:SRR292678:1:1101:958051:958051 2:N:0:1 BH:ok +TTAATATTTCCATCTGAACTTCGC ++ +EDDBGFEGFGHHFHGGEDEGBGDB +@SRX079804:1:SRR292678:1:1101:996098:996098 1:N:0:1 BH:failed +CTAAGAGAGTTTGTAATGCGGAC ++ +DD=DBDBDC4EFFFD@?CD@ACD +@SRX079804:1:SRR292678:1:1101:1020278:1020278 2:N:0:1 BH:ok +AAAGTGCAGAACATGCAGATAT ++ +D>AC?GDDCD?DDADE@GABDG +@SRX079804:1:SRR292678:1:1101:1022234:1022234 1:N:0:1 BH:ok +GACCTTTCCGCAAGCTGTCGC ++ +HHHHFEHHHHGGHHHGDHEEG +@SRX079804:1:SRR292678:1:1101:1024144:1024144 1:N:0:1 BH:failed +TCCATTATGAAAGAAGAAAA ++ +@A><96:6: +@SRX079804:1:SRR292678:1:1101:1175112:1175112 1:N:0:1 BH:failed +AGGCC ++ +EC8EE +@SRX079804:1:SRR292678:1:1101:1182927:1182927 1:N:0:1 BH:changed:1 +TGAA ++ +GGBH +@SRX079804:1:SRR292678:1:1101:1243474:1243474 1:N:0:1 BH:ok +ACG ++ +EEE