@@ -101,13 +101,8 @@ public void testCountsBySpan(String acc, List<Chunk> chunks, int expectedNumMapp
@DataProvider (name = " testGroups" )
private Object [][] createDataForGroups () {
return new Object [][] {
- {" SRR822962" , new TreeSet<> (Arrays . asList(
- " GS54389-FS3-L08" , " GS57511-FS3-L08" , " GS54387-FS3-L02" , " GS54387-FS3-L01" ,
- " GS57510-FS3-L01" , " GS57510-FS3-L03" , " GS54389-FS3-L07" , " GS54389-FS3-L05" ,
- " GS54389-FS3-L06" , " GS57510-FS3-L02" , " GS57510-FS3-L04" , " GS54387-FS3-L03" ,
- " GS46253-FS3-L03" ))
- },
- {" SRR2096940" , new HashSet<> (Arrays . asList(" SRR2096940" ))}
+ {" SRR1035115" , new TreeSet<> (Arrays . asList(" 15656144_B09YG" , " 15656144_B09MR" ))},
+ {" SRR2096940" , new TreeSet<> (Arrays . asList(" SRR2096940" ))}
};
}
@@ -148,15 +143,17 @@ public void testGroups(String acc, Set<String> groups) {
private Object [][] createDataForReferences () {
return new Object [][] {
// primary alignment only
- {" SRR1063272" , 1 ,
- Arrays . asList(" supercont2.1" , " supercont2.2" , " supercont2.3" , " supercont2.4" ,
- " supercont2.5" , " supercont2.6" , " supercont2.7" , " supercont2.8" ,
- " supercont2.9" , " supercont2.10" , " supercont2.11" , " supercont2.12" ,
- " supercont2.13" , " supercont2.14" ),
- Arrays . asList(2291499 , 1621675 , 1575141 , 1084805 ,
- 1814975 , 1422463 , 1399503 , 1398693 ,
- 1186808 , 1059964 , 1561994 , 774062 ,
- 756744 , 926563 )},
+ {" SRR353866" , 9 ,
+ Arrays . asList(
+ " AAAB01001871.1" , " AAAB01002233.1" , " AAAB01004056.1" , " AAAB01006027.1" ,
+ " AAAB01008846.1" , " AAAB01008859.1" , " AAAB01008960.1" , " AAAB01008982.1" ,
+ " AAAB01008987.1"
+ ),
+ Arrays . asList(
+ 1115 , 1034 , 1301 , 1007 ,
+ 11308833 , 12516315 , 23099915 , 1015562 ,
+ 16222597
+ )},
};
}
@@ -208,67 +205,66 @@ public void testReferences(String acc, int numberFirstReferenceFound, List<Strin
private Object [][] createDataForRowsTest () {
return new Object [][] {
// primary alignment only
- {" SRR1063272 " , 0 , 99 , " SRR1063272 .R.1" ,
- " ACTCGACATTCTGCCTTCGACCTATCTTTCTCCTCTCCCAGTCATCGCCCAGTAGAATTACCAGGCAATGAACCAGGGCCTTCCATCCCAACGGCACAGCA " ,
- " @@CDDBDFFBFHFIEEFGIGGHIEHIGIGGFGEGAFDHIIIIIGGGDFHII;=BF@FEHGIEEH?AHHFHFFFFDC5'5=?CC?ADCD@AC??9BDDCDB< " ,
- 86 , " 101M " , " supercont2.1 " , 60 , true , false },
+ {" SRR2127895 " , 1 , 83 , " SRR2127895 .R.1" ,
+ " CGTGCGCGTGACCCATCAGATGCTGTTCAATCAGTGGCAAATGCGGAACGGTTTCTGCGGGTTGCCGATATTCTGGAGAGTAATGCCAGGCAGGGGCAGGT " ,
+ " DDBDDDDDBCABC@CCDDDC?99CCA:CDCDDDDDDDECDDDFFFHHHEGIJIIGIJIHIGJIJJJJJJJIIJIIHIGJIJJJIJJIHFFBHHFFFDFBBB " ,
+ 366 , " 29S72M " , " gi|152968582|ref|NC_009648.1| " , 147 , true , false , false },
// small SRA archive
{" SRR2096940" , 1 , 16 , " SRR2096940.R.3" ,
" GTGTGTCACCAGATAAGGAATCTGCCTAACAGGAGGTGTGGGTTAGACCCAATATCAGGAGACCAGGAAGGAGGAGGCCTAAGGATGGGGCTTTTCTGTCACCAATCCTGTCCCTAGTGGCCCCACTGTGGGGTGGAGGGGACAGATAAAAGTACCCAGAACCAGAG" ,
" AAAABFFFFFFFGGGGGGGGIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGGGGGFGFFDFFFFFC" ,
- 55627016 , " 167M" , " CM000681.1" , 42 , false , false },
+ 55627016 , " 167M" , " CM000681.1" , 42 , false , false , false },
{" SRR2096940" , 10591 , 4 , " SRR2096940.R.10592" ,
" CTCTGGTTCTGGGTACTTTTATCTGTCCCCTCCACCCCACAGTGGCGAGCCAGATTCCTTATCTGGTGACACAC" ,
" IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII" ,
- - 1 , null , null , - 1 , false , false },
+ - 1 , null , null , - 1 , false , false , false },
// primary and secondary alignments
{" SRR833251" , 81 , 393 , " SRR833251.R.51" ,
" ATGCAAATCCGAATGGGCTATTTGTGGGTACTTGGGCAGGTAAGTAGCTGGCAATCTTGGTCGGTAAACCAATACCCAAGTTCACATAGGCACCATCGGGA" ,
" CCCFFFFFHHHHHIJJJIJJJJJIIJJJGIJIJIIJIJJJDGIGIIJIJIHIJJJJJJGIGHIHEDFFFFDDEEEDDDDDCDEEDDDDDDDDDDDDDBBDB" ,
- 1787186 , " 38M63S" , " gi|169794206|ref|NC_010410.1|" , 11 , true , true },
+ 1787186 , " 38M63S" , " gi|169794206|ref|NC_010410.1|" , 11 , true , true , true },
// local SRA file
{" src/test/resources/htsjdk/samtools/sra/test_archive.sra" , 1 , 99 , " test_archive.R.2" ,
" TGTCGATGCTGAAAGTGTCTGCGGTGAACCACTTCATGCACAGCGCACACTGCAGCTCCACTTCACCCAGCTGACGGCCGTTCTCATCGTCTCCAGAGCCCGTCTGAGCGTCCGCTGCTTCAGAACTGTCCCCGGCTGTATCCTGAAGAC" ,
" BBAABBBFAFFFGGGGGGGGGGGGEEFHHHHGHHHHHFHHGHFDGGGGGHHGHHHHHHHHHHHHFHHHGHHHHHHGGGGGGGHGGHHHHHHHHHGHHHHHGGGGHGHHHGGGGGGGGGHHHHEHHHHHHHHHHGCGGGHHHHHHGBFFGF" ,
- 2811570 , " 150M" , " NC_007121.5" , 60 , true , false }
+ 2811570 , " 150M" , " NC_007121.5" , 60 , true , false , false }
};
}
@Test (dataProvider = " testRows" )
public void testRows (String acc , int recordIndex , int flags , String readName , String bases , String quals , int refStart , String cigar ,
- String refName , int mapQ , boolean hasMate , boolean isSecondaryAlignment ) {
+ String refName , int mapQ , boolean hasMate , boolean isSecondOfPair , boolean isSecondaryAlignment ) {
SAMRecord record = getRecordByIndex(acc, recordIndex, false );
- checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondaryAlignment);
+ checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
}
@Test (dataProvider = " testRows" )
public void testRowsAfterIteratorDetach (String acc , int recordIndex , int flags , String readName , String bases , String quals ,
int refStart , String cigar , String refName , int mapQ , boolean hasMate ,
- boolean isSecondaryAlignment ) {
+ boolean isSecondOfPair , boolean isSecondaryAlignment ) {
SAMRecord record = getRecordByIndex(acc, recordIndex, true );
- checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondaryAlignment);
+ checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
}
@Test (dataProvider = " testRows" )
public void testRowsOverrideValues (String acc , int recordIndex , int flags , String readName , String bases , String quals ,
int refStart , String cigar , String refName , int mapQ , boolean hasMate ,
- boolean isSecondaryAlignment ) {
+ boolean isSecondOfPair , boolean isSecondaryAlignment ) {
SAMRecord record = getRecordByIndex(acc, recordIndex, true );
SAMFileHeader header = record. getHeader();
-
record. setFlags(0 );
record. setReadUnmappedFlag(refStart == - 1 );
record. setReadBases(" C" . getBytes());
record. setBaseQualities(SAMUtils . fastqToPhred(" A" ));
if (refStart == - 1 ) {
- checkSAMRecord(record, 4 , readName, " C" , " A" , refStart, " 1M" , refName, mapQ, false , false );
+ checkSAMRecord(record, 4 , readName, " C" , " A" , refStart, " 1M" , refName, mapQ, false , false , false );
} else {
int sequenceIndex = header. getSequenceIndex(refName);
Assert . assertFalse(sequenceIndex == - 1 );
@@ -288,14 +284,14 @@ public void testRowsOverrideValues(String acc, int recordIndex, int flags, Strin
record. setMappingQuality(mapQ - 1 );
record. setReferenceIndex(sequenceIndex);
- checkSAMRecord(record, 0 , readName, " C" , " A" , refStart - 100 , " 1M" , refName, mapQ - 1 , false , false );
+ checkSAMRecord(record, 0 , readName, " C" , " A" , refStart - 100 , " 1M" , refName, mapQ - 1 , false , false , false );
}
}
@Test (dataProvider = " testRows" )
public void testRowsBySpan (String acc , int recordIndex , int flags , String readName , String bases , String quals ,
int refStart , String cigar , String refName , int mapQ , boolean hasMate ,
- boolean isSecondaryAlignment ) {
+ boolean isSecondOfPair , boolean isSecondaryAlignment ) {
SamReader reader = SamReaderFactory . make(). validationStringency(ValidationStringency . SILENT ). open(
SamInputResource . of(new SRAAccession (acc))
);
@@ -330,13 +326,13 @@ public void testRowsBySpan(String acc, int recordIndex, int flags, String readNa
}
}
- checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondaryAlignment);
+ checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
}
@Test (dataProvider = " testRows" )
public void testRowsByIndex (String acc , int recordIndex , int flags , String readName , String bases , String quals ,
int refStart , String cigar , String refName , int mapQ , boolean hasMate ,
- boolean isSecondaryAlignment ) {
+ boolean isSecondOfPair , boolean isSecondaryAlignment ) {
SamReader reader = SamReaderFactory . make(). validationStringency(ValidationStringency . SILENT ). open(
SamInputResource . of(new SRAAccession (acc))
);
@@ -366,13 +362,15 @@ public void testRowsByIndex(String acc, int recordIndex, int flags, String readN
continue ;
}
- if (currentRecord. getReadName(). equals(readName)) {
+ if (currentRecord. getReadName(). equals(readName)
+ && currentRecord. getNotPrimaryAlignmentFlag() == isSecondaryAlignment
+ && (! hasMate || currentRecord. getSecondOfPairFlag() == isSecondOfPair)) {
record = currentRecord;
break ;
}
}
- checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondaryAlignment);
+ checkSAMRecord(record, flags, readName, bases, quals, refStart, cigar, refName, mapQ, hasMate, isSecondOfPair, isSecondaryAlignment);
}
private SAMRecord getRecordByIndex (String acc , int recordIndex , boolean detach ) {
@@ -401,19 +399,23 @@ private SAMRecord getRecordByIndex(String acc, int recordIndex, boolean detach)
private void checkSAMRecord (SAMRecord record , int flags , String readName , String bases , String quals ,
int refStart , String cigar , String refName , int mapQ , boolean hasMate ,
- boolean isSecondaryAlignment ) {
+ boolean isSecondOfPair , boolean isSecondaryAlignment ) {
Assert . assertNotNull(record, " Record with read id: " + readName + " was not found by span created from index" );
List<SAMValidationError > validationErrors = record. isValid();
Assert . assertNull(validationErrors, " SRA Lazy record is invalid. List of errors: " +
(validationErrors != null ? validationErrors. toString() : " " ));
+ Assert . assertEquals(record. getReadName(), readName);
Assert . assertEquals(new String (record. getReadBases()), bases);
Assert . assertEquals(record. getBaseQualityString(), quals);
Assert . assertEquals(record. getReadPairedFlag(), hasMate);
Assert . assertEquals(record. getFlags(), flags);
Assert . assertEquals(record. getNotPrimaryAlignmentFlag(), isSecondaryAlignment);
+ if (hasMate) {
+ Assert . assertEquals(record. getSecondOfPairFlag(), isSecondOfPair);
+ }
if (refStart == - 1 ) {
Assert . assertEquals(record. getReadUnmappedFlag(), true );
Assert . assertEquals(record. getAlignmentStart(), 0 );
isn't it clear at some point in the code that a connection has been established but that the accession is bad? why not inform the user?