private void PopulateEdgeHitsAndLogBins(int numBins, int adjustedStartPosition, int messySiteWidth, int edgeThreshold, IBinEvidence binEvidence, Dictionary <int, int> edgeHits, Dictionary <int, int> edgeSingleMismatchHits, Dictionary <int, int> edgeIndelHits, Dictionary <int, int> edgeMessyHits, int startPosition, BinConclusions binConclusions, UsableBins usableBins) { for (int binId = 0; binId < numBins; binId++) { var inEdge = false; var binStart = adjustedStartPosition + (binId * messySiteWidth); if (_geminiOptions.LogRegionsAndRealignments) { if (binEvidence.GetAllHits(binId) > 10 && !inEdge) { var binCounts = $"{binId},{inEdge},{binStart},{binStart + messySiteWidth},{binEvidence.GetAllHits(binId)},{usableBins.IsPositionUsable(binStart)},{binEvidence.GetSingleMismatchHit(binId)}," + $"{binConclusions.GetProbableTrueSnvRegion(binId)},{binEvidence.GetIndelHit(binId)},{binConclusions.GetIndelRegionHit(binId)}," + $"{binEvidence.GetMessyHit(binId)},{binConclusions.GetIsMessyEnough(binId)},{binEvidence.GetForwardMessyRegionHit(binId)},{binConclusions.GetFwdMessyStatus(binId)},{binEvidence.GetReverseMessyRegionHit(binId)},{binConclusions.GetRevMessyStatus(binId)},{binEvidence.GetMapqMessyHit(binId)},{binConclusions.GetMapqMessyStatus(binId)}"; // TODO consider writing this to a proper output file if (_geminiOptions.LogRegionsAndRealignments) { Logger.WriteToLog("BINCOUNTS\t" + binCounts); } } } } }
public void ProcessRegions(int messySiteThreshold, double imperfectFreqThreshold, int regionDepthThreshold, double indelRegionFreqThreshold, int binsToExtendTo, float directionalMessThreshold) { for (int i = 0; i < _binEvidence.NumBins; i++) { if (_collectDepth && _binEvidence.GetAllHits(i) == 0) { continue; } if (!_collectDepth && _binEvidence.GetMessyHit(i) == 0 && _binEvidence.GetIndelHit(i) == 0) { continue; } var messyHit = _binEvidence.GetMessyHit(i); var messyRegionHit = _binEvidence.GetMessyHit(i); UpdateDirectionalMessStatus(directionalMessThreshold, messyRegionHit, i); UpdateMapqMessStatus(directionalMessThreshold, i, messyRegionHit); var isMessy = messyHit >= messySiteThreshold; var isProbableSnv = false; if (_collectDepth) { var allHitsHit = (float)_binEvidence.GetAllHits(i); var pctMessy = messyHit / allHitsHit; var pctIndel = _binEvidence.GetIndelHit(i) / allHitsHit; isMessy = pctMessy + pctIndel >= imperfectFreqThreshold && pctIndel >= indelRegionFreqThreshold && allHitsHit >= regionDepthThreshold; isProbableSnv = false; // TODO need to reconsider the below. //isProbableSnv = (_singleMismatchHits[i] / (float)_allHits[i]) > 0.35; } if (isMessy && !isProbableSnv) { SetIsMessyEnoughForSiteAndNeighborsIfNotSnv(binsToExtendTo, i); } const int snvBinsToExtendTo = 3; if (isProbableSnv) { //probableTrueSnvRegions[i] = true; AddProbableSnvHit(i); for (int j = 0; j < snvBinsToExtendTo; j++) { var binIndex = i - j; if (!AddProbableSnvHit(binIndex)) { break; } //if (binIndex >= 0) //{ // probableTrueSnvRegions[binIndex] = true; //} //else //{ // break; //} } for (int j = 0; j < snvBinsToExtendTo; j++) { var binIndex = i + j; if (!AddProbableSnvHit(binIndex)) { break; } //if (binIndex < probableTrueSnvRegions.Length) //{ // probableTrueSnvRegions[binIndex] = true; //} //else //{ // break; //} } } } }