/// <summary> /// Given a set canvasSegmentsSet with two alternative segmentation hypothesis (SegmentsSet: SetA and SetB), return log likelihood /// for a segmentation hypothesis specified by segmentsSet. Segmentation hypothesis could typically include segmentation results specified /// by partitioning or annotations of population (common) variants /// </summary> /// <param name="canvasSegmentsSet"></param> /// <param name="samplesInfo"></param> /// <param name="copyNumberModel"></param> /// <param name="segmentsSet"></param> /// <returns></returns> private double GetSegmentSetLogLikelihood(ISampleMap <OverlappingSegmentsRegion> canvasSegmentsSet, ISampleMap <SampleMetrics> samplesInfo, ISampleMap <ICopyNumberModel> copyNumberModel, SegmentsSet segmentsSet) { double segmentSetLogLikelihood = 0; foreach (var sampleId in canvasSegmentsSet.SampleIds) { canvasSegmentsSet[sampleId].SetSet(segmentsSet); } var canvasSegments = new List <ISampleMap <CanvasSegment> >(); int nSegments = canvasSegmentsSet.First().Value.GetSet().Count; for (var canvasSegmentIndex = 0; canvasSegmentIndex < nSegments; canvasSegmentIndex++) { var canvasSegment = new SampleMap <CanvasSegment>(); foreach (var id in canvasSegmentsSet.SampleIds) { canvasSegment.Add(id, canvasSegmentsSet[id].GetSet()[canvasSegmentIndex]); } canvasSegments.Add(canvasSegment); } foreach (var canvasSegment in canvasSegments) { var copyNumbersLikelihoods = _copyNumberLikelihoodCalculator.GetCopyNumbersLikelihoods(canvasSegment, samplesInfo, copyNumberModel, _callerParameters.NumberOfTrimmedBins); var(_, likelihoods) = GetCopyNumbersNoPedigreeInfo(canvasSegment, copyNumbersLikelihoods); segmentSetLogLikelihood += likelihoods.MaximalLogLikelihood; } return(segmentSetLogLikelihood); }
/// <summary> /// Identify variant with the highest likelihood at a given setPosition and assign relevant scores /// </summary> public void CallVariant(ISampleMap <CanvasSegment> canvasSegments, ISampleMap <SampleMetrics> samplesInfo, ISampleMap <ICopyNumberModel> copyNumberModel, PedigreeInfo pedigreeInfo) { var singleSampleLikelihoods = _copyNumberLikelihoodCalculator.GetCopyNumbersLikelihoods(canvasSegments, samplesInfo, copyNumberModel, _callerParameters.NumberOfTrimmedBins); (var pedigreeCopyNumbers, var pedigreeLikelihoods) = GetPedigreeCopyNumbers(pedigreeInfo, singleSampleLikelihoods); var nonPedigreeCopyNumbers = CanvasPedigreeCaller.GetNonPedigreeCopyNumbers(canvasSegments, pedigreeInfo, singleSampleLikelihoods); var mergedCopyNumbers = pedigreeCopyNumbers.Concat(nonPedigreeCopyNumbers).OrderBy(canvasSegments.SampleIds); EstimateQScores(canvasSegments, samplesInfo, pedigreeInfo, singleSampleLikelihoods, pedigreeLikelihoods, mergedCopyNumbers); // TODO: this will be integrated with GetCopyNumbers* on a model level as a part of https://jira.illumina.com/browse/CANV-404 if (CanvasPedigreeCaller.UseAlleleCountsInformation(canvasSegments, _callerParameters.MinAlleleCountsThreshold, _callerParameters.MinAlleleNumberInSegment) && pedigreeInfo.HasFullPedigree()) { AssignMccWithPedigreeInfo(canvasSegments, copyNumberModel, pedigreeInfo); } if (CanvasPedigreeCaller.UseAlleleCountsInformation(canvasSegments, _callerParameters.MinAlleleCountsThreshold, _callerParameters.MinAlleleNumberInSegment) && pedigreeInfo.HasOther()) { AssignMccNoPedigreeInfo(canvasSegments.Where(segment => pedigreeInfo.OtherIds.Contains(segment.SampleId)).ToSampleMap(), copyNumberModel, _genotypes); } }
public void CallVariant(ISampleMap <CanvasSegment> canvasSegments, ISampleMap <SampleMetrics> samplesInfo, ISampleMap <ICopyNumberModel> copyNumberModel, PedigreeInfo pedigreeInfo) { var coverageLikelihoods = _copyNumberLikelihoodCalculator.GetCopyNumbersLikelihoods(canvasSegments, samplesInfo, copyNumberModel); // if number and properties of SNPs in the segment are above threshold, calculate likelihood from SNPs and merge with // coverage likelihood to form merged likelihoods int nBalleles = canvasSegments.Values.First().Balleles.Size(); // If allele information is available (i.e. segment has enough SNPs) merge coverage and allele likelihood obtained by GetGenotypeLogLikelihoods // into singleSampleLikelihoods using JoinLikelihoods function. var singleSampleLikelihoods = CanvasPedigreeCaller.UseAlleleCountsInformation(canvasSegments, _callerParameters.MinAlleleCountsThreshold, _callerParameters.MinAlleleNumberInSegment) ? JoinLikelihoods(GetGenotypeLogLikelihoods(canvasSegments, copyNumberModel, _PhasedGenotypes), coverageLikelihoods, nBalleles) : ConvertToLogLikelihood(coverageLikelihoods); // estimate joint likelihood across pedigree samples from singleSampleLikelihoods using either only coverage or coverage + allele counts (var pedigreeCopyNumbers, var pedigreeLikelihoods) = GetPedigreeCopyNumbers(pedigreeInfo, singleSampleLikelihoods); var nonPedigreeCopyNumbers = CanvasPedigreeCaller.GetNonPedigreeCopyNumbers(canvasSegments, pedigreeInfo, singleSampleLikelihoods); var mergedCopyNumbers = nonPedigreeCopyNumbers.Concat(pedigreeCopyNumbers).OrderBy(canvasSegments.SampleIds); AssignCNandScores(canvasSegments, samplesInfo, pedigreeInfo, singleSampleLikelihoods, pedigreeLikelihoods, mergedCopyNumbers); }