def test_flag_operations(self): '''Check all the methods involving flags do the right thing''' s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t16\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertTrue(s.is_mapped()) self.assertFalse(s.is_forward_strand()) self.assertFalse(s.is_paired()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t4\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertFalse(s.is_mapped()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t147\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertTrue(s.is_proper_pair()) self.assertTrue(s.is_paired()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t81\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertFalse(s.is_proper_pair()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t87\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertTrue(s.is_first_of_pair()) self.assertFalse(s.is_second_of_pair()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t147\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertFalse(s.is_first_of_pair()) self.assertTrue(s.is_second_of_pair()) self.assertTrue(s.is_mate_mapped()) self.assertEqual(s.query_strand(), '-') s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t0\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertEqual(s.query_strand(), '+') self.assertTrue(s.is_forward_strand()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t95\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertFalse(s.is_mate_mapped()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t95\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertFalse(s.is_duplicate()) s = sam.SamRecord( 'HS4_6280:2:1104:12102:124607\t1089\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ) self.assertTrue(s.is_duplicate())
def test_ref_hit_end_position(self): '''Check that we get the end position of a hit correctly''' s_good = sam.SamRecord( 'ID\t0\tref\t1\t47\t2S10M1I10M1D10M4H\t=\t362\t438\tACGTA\tIIIII') s_bad = sam.SamRecord( 'ID\t4\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\tIIIII') self.assertTrue(s_good.ref_hit_end_position(), 30) with self.assertRaises(sam.Error): s_bad.ref_hit_end_position()
def test_init_SamRecord(self): '''__init__ for SamRecord should do as expected''' testline = 'HS4_6280:2:1104:12102:124607\t99\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' testline_no_tags = 'HS4_6280:2:1104:12102:124607\t99\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF' self.assertEqual(testline, str(sam.SamRecord(testline))) self.assertEqual(testline_no_tags, str(sam.SamRecord(testline_no_tags))) bad_testlines = [ 'HS4_6280:2:1104:12102:124607\t99\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT', 'HS4_6280:2:1104:12102:124607\tAA\tPyYM_01_v1\t1\t47\t2S73M\t=\t362\t438\tTGTTAAAAATATCATTTATATAATATAATTAAAATTATTTATTTTTAGATATTATAATATTATGAATAATAGTAT\tHHHHHHHHHHHHHHHHHHGHHHHHHHHHHHGFHHHHHHHEHHHHHHHFCHFHHHHGFHCHHFHFAFFEFECF@BF\tAS:i:73\tNM:i:1' ] for l in bad_testlines: with self.assertRaises(sam.Error): self.assertEqual(l, str(sam.SamRecord(l)))
def test_to_fastn(self): '''Check conversion to fastq with to_fastq()''' sams = [ sam.SamRecord( 'ID\t0\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\tIIIII'), sam.SamRecord( 'ID\t16\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\tIIIII'), sam.SamRecord( 'ID\t65\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\tIIIII'), sam.SamRecord( 'ID\t129\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\tIIIII'), sam.SamRecord('ID\t0\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\t*'), sam.SamRecord('ID\t16\tref\t1\t47\t2S73M\t=\t362\t438\tACGTA\t*') ] seqs = [ fastn.Fastq('ID', 'ACGTA', 'IIIII'), fastn.Fastq('ID', 'TACGT', 'IIIII'), fastn.Fastq('ID/1', 'ACGTA', 'IIIII'), fastn.Fastq('ID/2', 'ACGTA', 'IIIII'), fastn.Fasta('ID', 'ACGTA'), fastn.Fasta('ID', 'TACGT') ] for i in range(len(sams)): self.assertEqual(seqs[i], sams[i].to_fastn())
WRONG_DIST = 4 WRONG_ORDER = 8 NA = 16 DUP = 32 f = utils.open_file_read(options.infile) lines = f.readlines() utils.close(f) nodes = {} i = 0 for i in range(0, len(lines), 3): flag = int(lines[i]) sam1 = sam.SamRecord(lines[i+1].strip()) sam2 = sam.SamRecord(lines[i+2].strip()) if sam1.id not in nodes: nodes[sam1.id] = set() if sam2.id not in nodes: nodes[sam2.id] = set() if sam1.rname == sam2.rname: if sam1.pos < sam2.pos: if sam1.query_strand() == sam2.query_strand() == '+': nodes[sam1.id].add(sam2.id) elif sam1.query_strand() == sam2.query_strand() == '-':