public TranscriptRegion(TranscriptRegionType type, ushort id, int start, int end, int cdnaStart, int cdnaEnd) { Type = type; Id = id; Start = start; End = end; CdnaStart = cdnaStart; CdnaEnd = cdnaEnd; }
private static int FindLast(ITranscriptRegion[] regions, TranscriptRegionType desiredType, int startIndex, int endIndex) { for (int i = endIndex; i >= startIndex; i--) { if (regions[i].Type == desiredType) { return(i); } } return(-1); }
public static ITranscriptRegion Read(BufferedBinaryReader reader) { TranscriptRegionType type = (TranscriptRegionType)reader.ReadByte(); ushort id = reader.ReadOptUInt16(); int genomicStart = reader.ReadOptInt32(); int genomicEnd = reader.ReadOptInt32(); int cdnaStart = reader.ReadOptInt32(); int cdnaEnd = reader.ReadOptInt32(); return(new TranscriptRegion(type, id, genomicStart, genomicEnd, cdnaStart, cdnaEnd)); }
private static (int Start, int End) FindDesiredRegionIds(this ITranscriptRegion[] regions, TranscriptRegionType desiredType, int startIndex, int endIndex) { var regionStart = FindFirst(regions, desiredType, startIndex, endIndex); var newStartIndex = regionStart != -1 ? regionStart : startIndex; var regionEnd = FindLast(regions, desiredType, newStartIndex, endIndex); var startId = regionStart == -1 ? -1 : regions[regionStart].Id; var endId = regionEnd == -1 ? -1 : regions[regionEnd].Id; if (endId < startId) { Swap.Int(ref startId, ref endId); } return(startId, endId); }
private static List <MutableTranscriptRegion> AddCoords(this List <MutableTranscriptRegion> regions, TranscriptRegionType targetRegionType, bool onReverseStrand) { for (var regionIndex = 0; regionIndex < regions.Count; regionIndex++) { var region = regions[regionIndex]; if (region.Type != targetRegionType) { continue; } var coords = regions.GetExonCoords(regionIndex, onReverseStrand); region.CdnaStart = coords.CdnaStart; region.CdnaEnd = coords.CdnaEnd; } return(regions); }
private static List <MutableTranscriptRegion> AddIds(this List <MutableTranscriptRegion> regions, IReadOnlyList <IdInterval> intervals, TranscriptRegionType targetRegionType, TranscriptRegionType matchRegionType) { if (intervals == null) { return(regions); } foreach (var region in regions) { if (region.Type != targetRegionType) { continue; } int regionMidPoint = region.Start + (region.End - region.Start >> 1); int index = intervals.BinarySearch(regionMidPoint); if (index < 0) { continue; } var intron = intervals[index]; region.Type = matchRegionType; region.Id = intron.Id; } return(regions); }