public void AddAndGetCollapsedCount_AlleleN(ReadCollapsedType type) { int minQuality = 20; var stateManager = new CollapsedRegionStateManager(false, minQuality); var readpair = ReadTestHelper.CreateProperReadPair("test", 6, type, pos: 10, matePos: 15, minBaseQuality: 30, candidateBases: "N"); // Generate read pairs only contain "N" stateManager.AddAlleleCounts(readpair.Item1); stateManager.AddAlleleCounts(readpair.Item2); Assert.Equal(0, stateManager.GetCollapsedReadCount(10, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(11, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(12, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(13, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(14, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(15, type)); // overlapping Assert.Equal(0, stateManager.GetCollapsedReadCount(16, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(17, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(18, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(19, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(20, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(9, type)); }
public void AddAndGetCollapsedCount_minQuality(ReadCollapsedType type) { int minQuality = 35; var stateManager = new CollapsedRegionStateManager(false, minQuality); var readpair = ReadTestHelper.CreateProperReadPair("test", 6, type, pos: 10, matePos: 15, minBaseQuality: 30); // all base quality less than min quality, no count stateManager.AddAlleleCounts(readpair.Item1); stateManager.AddAlleleCounts(readpair.Item2); Assert.Equal(0, stateManager.GetCollapsedReadCount(10, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(11, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(12, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(13, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(14, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(15, type)); // overlapping Assert.Equal(0, stateManager.GetCollapsedReadCount(16, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(17, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(18, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(19, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(20, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(9, type)); }
public void AddAndGetCollapsedCount_NonCollapsedBAM(ReadCollapsedType type) { int minQuality = 20; // non collapsed BAM (no reco @PG line in BAM header) var stateManager = new RegionStateManager(false, minQuality, expectStitchedReads: true); var readpair = ReadTestHelper.CreateProperReadPair("test", 6, type, pos: 10, matePos: 15); stateManager.AddAlleleCounts(readpair.Item1); stateManager.AddAlleleCounts(readpair.Item2); Assert.Equal(0, stateManager.GetCollapsedReadCount(10, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(11, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(12, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(13, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(14, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(15, type)); // overlapping Assert.Equal(0, stateManager.GetCollapsedReadCount(16, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(17, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(18, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(19, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(20, type)); Assert.Equal(0, stateManager.GetCollapsedReadCount(9, type)); }
public virtual int GetCollapsedReadCount(int position, ReadCollapsedType directionType) { return(0); // default behavior for non-collapsed and/or non-stitched BAM }
public override int GetCollapsedReadCount(int position, ReadCollapsedType directionType) { var region = GetBlock(position, false) as CollapsedRegionState; return(region == null ? 0 : region.GetCollapsedReadCount(position, directionType)); }
public static Tuple <Read, Read> CreateProperReadPair(string nameBase, int sequencelength, ReadCollapsedType type, string chrName = "chr1", int pos = 10, int matePos = 100, byte minBaseQuality = 30, string candidateBases = "ACGT") { Read read1 = null; Read read2 = null; switch (type) { case ReadCollapsedType.SimplexForwardStitched: read1 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), pos, matePosition: matePos, qualityForAll: minBaseQuality); read2 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), matePos, matePosition: pos, isReverseMapped: true, qualityForAll: minBaseQuality); read1.BamAlignment.TagData = GetXDXRTagData($"{sequencelength}S", "FR"); read1.BamAlignment.AppendTagData(GetReadCountsTagData(null, 10)); read2.BamAlignment.TagData = GetXDXRTagData($"{sequencelength}S", "FR"); read2.BamAlignment.AppendTagData(GetReadCountsTagData(null, 10)); break; case ReadCollapsedType.SimplexForwardNonStitched: read1 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), pos, matePosition: matePos, qualityForAll: minBaseQuality); read2 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), matePos, matePosition: pos, isReverseMapped: true, qualityForAll: minBaseQuality); read1.BamAlignment.TagData = GetXDXRTagData($"{null}", "FR"); read1.BamAlignment.AppendTagData(GetReadCountsTagData(null, 10)); read2.BamAlignment.TagData = GetXDXRTagData($"{null}", "FR"); read2.BamAlignment.AppendTagData(GetReadCountsTagData(null, 10)); break; case ReadCollapsedType.SimplexReverseStitched: read1 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), matePos, matePosition: pos, isReverseMapped: true, qualityForAll: minBaseQuality); read2 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), pos, matePosition: matePos, qualityForAll: minBaseQuality); read1.BamAlignment.TagData = GetXDXRTagData($"{sequencelength}S", "RF"); read1.BamAlignment.AppendTagData(GetReadCountsTagData(null, 10)); read2.BamAlignment.TagData = GetXDXRTagData($"{sequencelength}S", "RF"); read2.BamAlignment.AppendTagData(GetReadCountsTagData(null, 10)); break; case ReadCollapsedType.SimplexReverseNonStitched: read1 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), matePos, matePosition: pos, isReverseMapped: true, qualityForAll: minBaseQuality); read2 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), pos, matePosition: matePos, qualityForAll: minBaseQuality); read1.BamAlignment.TagData = GetReadCountsTagData(null, 10); read1.BamAlignment.AppendTagData(GetXDXRTagData($"{null}", "RF")); read2.BamAlignment.TagData = GetReadCountsTagData(null, 10); read2.BamAlignment.AppendTagData(GetXDXRTagData($"{null}", "RF")); break; case ReadCollapsedType.DuplexStitched: read1 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), pos, matePosition: matePos, qualityForAll: minBaseQuality); read2 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), matePos, matePosition: pos, qualityForAll: minBaseQuality); read1.BamAlignment.TagData = GetXDXRTagData($"{sequencelength}S", "RF"); read1.BamAlignment.AppendTagData(GetReadCountsTagData(1, 10)); read2.BamAlignment.TagData = GetXDXRTagData($"{sequencelength}S", "RF"); read2.BamAlignment.AppendTagData(GetReadCountsTagData(1, 10)); break; case ReadCollapsedType.DuplexNonStitched: read1 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), pos, matePosition: matePos, qualityForAll: minBaseQuality); read2 = CreateRead(chrName, RandomBases(sequencelength, candidateBases), matePos, matePosition: pos, qualityForAll: minBaseQuality); read1.BamAlignment.TagData = GetReadCountsTagData(1, 10); read2.BamAlignment.TagData = GetReadCountsTagData(1, 10); break; default: throw new Exception("unknown type"); } Assert.NotNull(read1); Assert.NotNull(read2); read1.BamAlignment.SetIsProperPair(true); read2.BamAlignment.SetIsProperPair(true); read1.BamAlignment.SetIsFirstMate(true); read1.BamAlignment.SetIsSecondMate(false); read2.BamAlignment.SetIsSecondMate(true); read2.BamAlignment.SetIsFirstMate(false); if (read1.Chromosome == read2.Chromosome) { // might not be same as pisces defintion read1.BamAlignment.FragmentLength = Math.Abs(read1.Position - read2.Position); read2.BamAlignment.FragmentLength = Math.Abs(read1.Position - read2.Position); } else { // FragmentLength be 0 if the reads are mapped to diff chrs read1.BamAlignment.FragmentLength = 0; read2.BamAlignment.FragmentLength = 0; } return(new Tuple <Read, Read>(read1, read2)); }