CanvasSNV.SNVReviewer.ProcessReadBases C# (CSharp) Метод

ProcessReadBases() приватный Метод

Use the CIGAR string to map bases to chromosome positions, and check whether we see the ref base or the variant allele for our variants of interest.
private ProcessReadBases ( BamAlignment read, int nextVariantIndex ) : void
read BamAlignment
nextVariantIndex int
Результат void
        private void ProcessReadBases(BamAlignment read, int nextVariantIndex)
        {
            int position = read.Position;
            int baseIndex = 0;
            int cigarCount = read.CigarData.Count;
            for (int opIndex = 0; opIndex < cigarCount; opIndex++)
            {
                CigarOp cigar = read.CigarData[opIndex];
                switch (cigar.Type)
                {
                    case 'M':
                        // Loop over matches/mismatches:
                        for (int index = 0; index < cigar.Length; index++,position++,baseIndex++)
                        {
                            for (int varIndex = nextVariantIndex; varIndex < this.Variants.Count; varIndex++)
                            {
                                VcfVariant variant = this.Variants[varIndex];
                                // Subtract 1: Vcf positions are 1-based, bam file positions are 0-based:
                                if (variant.ReferencePosition - 1 > position) break;
                                if (variant.ReferencePosition - 1 < position)
                                {
                                    nextVariantIndex++;
                                    continue;
                                }
                                if (read.Qualities[baseIndex] < MinimumBaseQScore) continue; // Skip low-quality base calls.
                                char Base = read.Bases[baseIndex];
                                if (Base == variant.ReferenceAllele[0]) this.ReferenceCounts[varIndex]++;
                                if (Base == variant.VariantAlleles[0][0]) this.VariantCounts[varIndex]++;
                            }
                        }
                        break;
                    case 'S':
                        baseIndex += (int)cigar.Length;
                        break;
                    case 'I':
                        baseIndex += (int)cigar.Length;
                        break;
                    case 'D':
                        position += (int)cigar.Length;
                        break;
                    default:
                        // We don't know how to cope with this CIGAR operation; bail out!
                        return;
                }
            }
        }