コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
 public virtual int GetCollapsedReadCount(int position, ReadCollapsedType directionType)
 {
     return(0);  // default behavior for non-collapsed and/or non-stitched BAM
 }
コード例 #5
0
        public override int GetCollapsedReadCount(int position, ReadCollapsedType directionType)
        {
            var region = GetBlock(position, false) as CollapsedRegionState;

            return(region == null ? 0 : region.GetCollapsedReadCount(position, directionType));
        }
コード例 #6
0
        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));
        }