private void AnnotateAltAllele(VariantFeature variant, VariantAlternateAllele altAllele, Transcript transcript) { // handle upstream or downstream transcripts if (!Overlap.Partial(transcript.Start, transcript.End, altAllele.Start, altAllele.End)) { return; } var ta = new TranscriptAnnotation { AlternateAllele = altAllele, HasValidCdnaCodingStart = false, HasValidCdsStart = false }; MapCdnaCoordinates(transcript, ta, altAllele); _pianoVariant.CreateAnnotationObject(transcript, altAllele); GetCodingAnnotations(transcript, ta, _compressedSequence); var consequence = new Consequences(new VariantEffect(ta, transcript, variant.InternalCopyNumberType)); consequence.DetermineVariantEffects(variant.InternalCopyNumberType); _pianoVariant.FinalizeAndAddAnnotationObject(transcript, ta, consequence.GetConsequenceStrings()); }
private List <MutableGene> GetValidGenes(MutableGene seedGene, List <MutableGene> genes, out int start, out int end) { var validGenes = new List <MutableGene>(); start = seedGene.Start; end = seedGene.End; foreach (var gene in genes) { if (gene.Invalid || seedGene.OnReverseStrand != gene.OnReverseStrand || seedGene.ReferenceIndex != gene.ReferenceIndex || !Overlap.Partial(start, end, gene.Start, gene.End)) { continue; } validGenes.Add(gene); if (gene.Start < start) { start = gene.Start; } if (gene.End > end) { end = gene.End; } } return(validGenes); }
private static MutableGene GetFlattenedGene(MutableGene seedGene, List <MutableGene> genesWithSameGeneId, int overlapStart, int overlapEnd) { var flattenedGene = MutableGene.Clone(seedGene); bool useOverlap = overlapStart != -1 && overlapEnd != -1; foreach (var gene in genesWithSameGeneId) { if (gene.Invalid || flattenedGene.OnReverseStrand != gene.OnReverseStrand || flattenedGene.ReferenceIndex != gene.ReferenceIndex) { continue; } if (useOverlap && !Overlap.Partial(overlapStart, overlapEnd, gene.Start, gene.End)) { continue; } if (!useOverlap && !Overlap.Partial(flattenedGene.Start, flattenedGene.End, gene.Start, gene.End)) { continue; } UpdateCoordinates(gene, flattenedGene); gene.Invalid = true; } return(flattenedGene); }
private static bool HasCds(CdnaCoordinateMap exon, int codingRegionStart, int codingRegionEnd) { if (codingRegionStart == -1 || codingRegionEnd == -1) { return(false); } return(Overlap.Partial(exon.GenomicStart, exon.GenomicEnd, codingRegionStart, codingRegionEnd)); }
/// <summary> /// constructor /// </summary> public FeatureVariantEffects(ReferenceAnnotationInterval feature, VariantType vt, int refBegin, int refEnd, bool isSV, VariantType internalCopyNumberType) { _isSV = isSV; _completelyOverlaps = Overlap.Complete(feature.Start, feature.End, refBegin, refEnd); _overlaps = Overlap.Partial(feature.Start, feature.End, refBegin, refEnd); _completelyWithin = refBegin >= feature.Start && refEnd <= feature.End; _lossOrDeletion = vt == VariantType.copy_number_loss || vt == VariantType.deletion || internalCopyNumberType == VariantType.copy_number_loss; _gainOrDuplication = vt == VariantType.copy_number_gain || vt == VariantType.duplication || vt == VariantType.tandem_duplication || internalCopyNumberType == VariantType.copy_number_gain; _isInsertionDeletion = vt == VariantType.indel; _isInsertion = vt == VariantType.insertion; }
public void AddCustomIntervals(List <ICustomInterval> overlappingCustomIntervals) { if (overlappingCustomIntervals == null) { return; } foreach (var customInterval in overlappingCustomIntervals) { if (Overlap.Partial(this, customInterval)) { CustomIntervals.Add(customInterval); } } }
public int Extract() { var count = 0; var interval = _reader.GetNextCustomInterval(); while (interval != null) { if (Overlap.Partial(interval.Start, interval.End, _begin, _end)) { _writer.WriteInterval(interval); count++; } interval = _reader.GetNextCustomInterval(); } _writer.Dispose(); return(count); }