public LocalizationRecord(string value = "", string hint = "", Source source = Source.Code, PairStatus status = PairStatus.New, string context = "") { Value = value; Hint = hint; Status = status; Source = source; this.context = context; }
public static ReadPair GetPair(string cigar1, string cigar2, uint mapq1 = 30, uint mapq2 = 30, PairStatus pairStatus = PairStatus.Paired, bool singleReadOnly = false, int nm = 0, int read2Offset = 0, int?nm2 = null, string name = null, string basesRaw = "AAAGTTTTCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", int read1Position = 99, string read1Bases = null, string read2Bases = null) { int nmRead2 = nm2 ?? nm; var tagUtils = new TagUtils(); if (nm >= 0) { tagUtils.AddIntTag("NM", nm); } var cigarAln1 = new CigarAlignment(cigar1); var qualities1 = new List <byte>(); for (int i = 0; i < cigarAln1.GetReadSpan(); i++) { qualities1.Add(30); } //var basesRaw = "AAAGTTTTCCCCCCCCCCCC"; var alignment = new BamAlignment { Name = name ?? "hi:1:2:3:4:5:6", RefID = 1, Position = read1Position, Bases = read1Bases ?? basesRaw.Substring(0, (int)cigarAln1.GetReadSpan()), CigarData = cigarAln1, Qualities = qualities1.ToArray(), MapQuality = mapq1 }; alignment.TagData = tagUtils.ToBytes(); if (!singleReadOnly) { alignment.SetIsProperPair(true); alignment.MateRefID = 1; } var pair = new ReadPair(alignment); if (!singleReadOnly) { alignment.SetIsMateUnmapped(false); var tagUtils2 = new TagUtils(); if (nmRead2 >= 0) { tagUtils2.AddIntTag("NM", nmRead2); } var cigarAln2 = new CigarAlignment(cigar2); var qualities2 = new List <byte>(); for (int i = 0; i < cigarAln2.GetReadSpan(); i++) { qualities2.Add(30); } var alignment2 = new BamAlignment { Name = "hi:1:2:3:4:5:6", RefID = 1, Position = read1Position + read2Offset, Bases = read2Bases ?? basesRaw.Substring(read2Offset, (int)cigarAln2.GetReadSpan()), CigarData = cigarAln2, Qualities = qualities2.ToArray(), MapQuality = mapq2 }; alignment2.MateRefID = pair.Read1.RefID; alignment2.SetIsProperPair(true); alignment2.SetIsSecondMate(true); alignment2.SetIsReverseStrand(true); alignment2.TagData = tagUtils2.ToBytes(); pair.AddAlignment(alignment2); } pair.PairStatus = pairStatus; return(pair); }
static void AddToStorage(SortedDictionary <string, LocalizationRecord> storage, string key, string value, string hint, Source source, PairStatus status, string context) { if (string.IsNullOrEmpty(hint)) { hint = "Empty"; } if (storage.ContainsKey(key)) { var hintOld = storage[key].Hint; if (hintOld == "Empty" && hint != "Empty") { storage[key].Hint = hint; } else if (hintOld != hint && hint != "Empty") { UnityEngine.Debug.LogError($"Key {key} hint \"{hint}\" from {context} is not same as hint \"{hintOld}\" from {storage[key].context}"); } return; } storage.Add(key, new LocalizationRecord(value, hint, source, status, context)); }
public void ClearRemoved() { Status &= ~PairStatus.PairRemoved; }
public void SetFinal() { Status |= PairStatus.PairFinal; }
public void SetRemoved() { Status |= PairStatus.PairRemoved; }
public void ClearBuffered() { Status &= ~PairStatus.PairBuffered; }
public void SetBuffered() { Status |= PairStatus.PairBuffered; }
private static StatementPair GetCorrespondingPairByStatementPairs(StatementPair pair1, StatementPair pair2, StatementPair pair3, Conclusion conclusion) { PairStatus status = GetPairResultStatus(pair1, pair2, pair3); switch (status) { case PairStatus.AllAreInvalid: //==>All pair results are invalid return(null); case PairStatus.AllAreValid: //==>All pair results are valid if (CheckCorrespondingPairs(conclusion, pair1.ResultStatement)) //Checking First Pair { return(pair1); } else if (CheckCorrespondingPairs(conclusion, pair2.ResultStatement)) //Checking Second Pair { return(pair2); } else if (CheckCorrespondingPairs(conclusion, pair3.ResultStatement)) //Checking Third Pair { return(pair3); } return(null); case PairStatus.FirstPairAloneIsValid: //==> pair1 result alone is valid if (CheckCorrespondingPairs(conclusion, pair1.ResultStatement)) //Checking First Pair { return(pair1); } return(null); case PairStatus.SecondPairAloneIsValid: //==> pair2 result alone is valid if (CheckCorrespondingPairs(conclusion, pair2.ResultStatement)) //Checking Second Pair { return(pair2); } return(null); case PairStatus.ThirdPairAloneIsValid: //==> pair3 result alone is valid if (CheckCorrespondingPairs(conclusion, pair3.ResultStatement)) //Checking Third Pair { return(pair3); } return(null); case PairStatus.FirstAndSecondPairsAreValid: //==> pair1 & pair2 results are valid if (CheckCorrespondingPairs(conclusion, pair1.ResultStatement)) //Checking First Pair { return(pair1); } else if (CheckCorrespondingPairs(conclusion, pair2.ResultStatement)) //Checking Second Pair { return(pair2); } return(null); case PairStatus.SecondAndThirdPairsAreValid: //==> pair2 & pair3 results are valid if (CheckCorrespondingPairs(conclusion, pair2.ResultStatement)) //Checking Second Pair { return(pair2); } else if (CheckCorrespondingPairs(conclusion, pair3.ResultStatement)) //Checking Third Pair { return(pair3); } return(null); case PairStatus.FirstAndThirdPairsAreValid: //==> pair1 & pair3 results are valid if (CheckCorrespondingPairs(conclusion, pair1.ResultStatement)) //Checking First Pair { return(pair1); } else if (CheckCorrespondingPairs(conclusion, pair3.ResultStatement)) //Checking Third Pair { return(pair3); } return(null); } return(null); }
public ReadPair TryPair(BamAlignment alignment, PairStatus pairStatus = PairStatus.Unknown) { if (_readsProcessed % 100000 == 0) { LogStatus(alignment.RefID + ":" + alignment.Position); } _readsProcessed++; LastRefId = alignment.RefID; var readIndexer = ReadIndexer(alignment); // Check if this read should be blacklisted if (ShouldBlacklistReadIndexer(alignment)) { _blacklistedReads.Add(readIndexer); } // If this read is in the blacklist, or is a read that should be "aggressively" skipped, skip the read. If we've already started tracking a mate, remove it from the mate lookup. if (ShouldSkipAndRemoveWaitingMates(alignment) || _blacklistedReads.Contains(readIndexer)) { _readsAggressivelySkipped++; if (_readsWaitingForMate.ContainsKey(readIndexer)) { _readsWaitingForMate.Remove(readIndexer); } return(null); } if (ShouldSkipRead(alignment)) { _readsSkipped++; return(null); } if (!_readsWaitingForMate.ContainsKey(readIndexer)) { // TODO do we really need to create a new copy here? I think we're already doing it later _readsWaitingForMate.Add(readIndexer, new ReadPair(alignment, readIndexer, GetReadNumber(alignment)) { PairStatus = pairStatus }); return(null); } else { var readPair = _readsWaitingForMate[readIndexer]; readPair.AddAlignment(alignment, GetReadNumber(alignment)); if (!readPair.IsComplete(_requireSupplementaries) || _pairEvaluator.TreatReadPairAsIncomplete(readPair)) { return(null); } _pairsProcessed++; // Check pair and either skip or return pair var shouldSkip = ShouldSkipPair(readPair); if (!shouldSkip || _removeFailedPairs) { _readsWaitingForMate.Remove(readIndexer); // If succeeded, no longer waiting for mate; if failed and we're being strict on failures, remove } if (ShouldWhitelistReadIndexer(alignment, shouldSkip)) { _whitelistedReads.Add(readIndexer); } if (shouldSkip) { _pairsSkipped++; } else { _pairsPaired++; } return(shouldSkip ? null : readPair); } }