コード例 #1
0
        protected override void UpdateResultWithChromPeakAndLCScanInfo(TargetedResultBase result, ChromPeak bestPeak)
        {
            var uimfRun = result.Run as UIMFRun;

            result.ChromPeakSelected = bestPeak;

            result.ScanSet = new ScanSet(uimfRun.CurrentScanSet.PrimaryScanNumber);
        }
コード例 #2
0
        public static void writeStandardInfoToResult(TargetedResultDTO tr, TargetedResultBase result)
        {
            if (result.Target == null)
            {
                throw new ArgumentNullException("Cannot create result object. MassTag is null.");
            }

            if (result.Run == null)
            {
                throw new ArgumentNullException("Cannot create result object. Run is null.");
            }


            tr.DatasetName      = result.Run.DatasetName;
            tr.TargetID         = result.Target.ID;
            tr.ChargeState      = result.Target.ChargeState;
            tr.NumMSScansSummed = result.NumMSScansSummed;
            tr.EmpiricalFormula = result.Target.EmpiricalFormula;
            tr.Code             = result.Target.Code;

            tr.IndexOfMostAbundantPeak = result.IsotopicProfile == null ? (short)0 : (short)result.IsotopicProfile.GetIndexOfMostIntensePeak();
            tr.Intensity   = result.IsotopicProfile == null ? 0f : (float)result.IntensityAggregate;
            tr.IntensityI0 = result.IsotopicProfile == null ? 0f : (float)result.IsotopicProfile.GetMonoAbundance();
            tr.IntensityMostAbundantPeak = result.IsotopicProfile == null ? 0f : (float)result.IsotopicProfile.getMostIntensePeak().Height;
            tr.IScore   = (float)result.InterferenceScore;
            tr.MonoMass = result.IsotopicProfile == null ? result.Target.MonoIsotopicMass : result.IsotopicProfile.MonoIsotopicMass;
            tr.MonoMZ   = result.IsotopicProfile == null ? result.Target.MZ : result.IsotopicProfile.MonoPeakMZ;

            tr.MonoMassCalibrated         = result.MonoIsotopicMassCalibrated;
            tr.MassErrorBeforeCalibration = result.MassErrorBeforeAlignment;
            tr.MassErrorAfterCalibration  = result.MassErrorAfterAlignment;


            tr.ScanLC   = result.GetScanNum();
            tr.NET      = (float)result.GetNET();
            tr.NETError = result.Target.NormalizedElutionTime - tr.NET;


            tr.NumChromPeaksWithinTol        = result.NumChromPeaksWithinTolerance;
            tr.NumQualityChromPeaksWithinTol = result.NumQualityChromPeaks;
            tr.FitScore = (float)result.Score;

            if (result.ChromPeakSelected != null)
            {
                var sigma = result.ChromPeakSelected.Width / 2.35;
                tr.ScanLCStart = (int)Math.Round(result.ChromPeakSelected.XValue - sigma);
                tr.ScanLCEnd   = (int)Math.Round(result.ChromPeakSelected.XValue + sigma);
            }

            if (result.FailedResult)
            {
                tr.FailureType = result.FailureType.ToString();
            }

            tr.ErrorDescription = result.ErrorDescription ?? "";
        }
コード例 #3
0
ファイル: O16O18TFFTask.cs プロジェクト: Acedon95/DeconTools
        //public override void FindFeature(DeconTools.Backend.Core.ResultCollection resultColl)
        //{

        //    resultColl.ResultType = Globals.ResultType.O16O18_MASSTAG_RESULT;

        //    MassTagResultBase result = resultColl.GetMassTagResult(resultColl.Run.CurrentMassTag);
        //    if (result == null)
        //    {
        //        result = resultColl.CreateMassTagResult(resultColl.Run.CurrentMassTag);
        //    }

        //    if (result.ScanSet == null)
        //    {
        //        result.ScanSet = resultColl.Run.CurrentScanSet;

        //    }

        //    result.IsotopicProfile = m_featureFinder.FindFeature(resultColl.Run.PeakList, this.TheorFeature, this.ToleranceInPPM, this.NeedMonoIsotopicPeak);
        //    addInfoToResult(result);

        //}

        private void addInfoToResult(TargetedResultBase result)
        {
            if (result.IsotopicProfile != null)
            {
                result.IsotopicProfile.ChargeState      = result.Target.ChargeState;
                result.IsotopicProfile.MonoIsotopicMass = (result.IsotopicProfile.GetMZ() - Globals.PROTON_MASS) * result.Target.ChargeState;
                result.IntensityAggregate = result.IsotopicProfile.getMostIntensePeak().Height;     // may need to change this to sum the top n peaks.
            }

            ((O16O18TargetedResultObject)result).RatioO16O18 = m_quantifier.GetAdjusted_I0_I4_YeoRatio(result.IsotopicProfile, result.Target.IsotopicProfile);

            //((O16O18_TResult)result).RatioO16O18 =  m_quantifier.Get_I0_I4_ratio(result.IsotopicProfile);
        }
コード例 #4
0
        public static TargetedResultDTO CreateTargetedResult(TargetedResultBase result)
        {
            TargetedResultDTO tr;

            if (result is MassTagResult)
            {
                tr = new UnlabelledTargetedResultDTO();
                writeStandardInfoToResult(tr, result);
                addAdditionalInfo(tr, result as MassTagResult);
            }
            else if (result is O16O18TargetedResultObject)
            {
                tr = new O16O18TargetedResultDTO();
                writeStandardInfoToResult(tr, result);
                addAdditionalInfo(tr, result as O16O18TargetedResultObject);
            }
            else if (result is N14N15_TResult)
            {
                tr = new N14N15TargetedResultDTO();
                writeStandardInfoToResult(tr, result);
                addAdditionalInfo(tr, result as N14N15_TResult);
            }
            else if (result is SipperLcmsTargetedResult)
            {
                tr = new SipperLcmsFeatureTargetedResultDTO();
                writeStandardInfoToResult(tr, result);
                addAdditionalInfo(tr, result as SipperLcmsTargetedResult);
            }
            else if (result is TopDownTargetedResult)
            {
                tr = new TopDownTargetedResultDTO();
                writeStandardInfoToResult(tr, result);
                addAdditionalInfo(tr, result as TopDownTargetedResult);
            }
            else if (result is DeuteratedTargetedResultObject)
            {
                tr = new DeuteratedTargetedResultDTO();
                writeStandardInfoToResult(tr, result);
                addAdditionalInfo(tr, result as DeuteratedTargetedResultObject);
            }
            else
            {
                throw new NotImplementedException();
            }



            return(tr);
        }
コード例 #5
0
        public override ChromCorrelationData CorrelateData(Run run, TargetedResultBase result, int startScan, int stopScan)
        {
            var chromCorrData = CorrelateO16O18Profiles(run, result.IsotopicProfile, startScan, stopScan);

            if (result is O16O18TargetedResultObject o16O18Result)
            {
                if (chromCorrData.CorrelationDataItems.Any())
                {
                    o16O18Result.ChromCorrO16O18SingleLabel = chromCorrData.CorrelationDataItems[0].CorrelationRSquaredVal;
                    o16O18Result.ChromCorrO16O18DoubleLabel = chromCorrData.CorrelationDataItems[1].CorrelationRSquaredVal;
                }
            }

            return(chromCorrData);
        }
コード例 #6
0
        public void TestTargetedWorkflowExecutorMod()
        {
            const string executorParameterFile = @"\\protoapps\UserData\Kaipo\TopDown\test2paramsmod.xml";
            var          executorParameters    = new TopDownTargetedWorkflowExecutorParameters();

            executorParameters.LoadParameters(executorParameterFile);

            string       resultsFolderLocation = Path.Combine(executorParameters.OutputFolderBase, "Results");
            const string testDatasetPath       = @"\\protoapps\UserData\Kaipo\TopDown\test2\Proteus_Peri_intact_ETD.raw";
            const string testDatasetName       = "Proteus_Peri_intact_ETD";

            string expectedResultsFilename = Path.Combine(resultsFolderLocation, testDatasetName + "_quant.txt");

            if (File.Exists(expectedResultsFilename))
            {
                File.Delete(expectedResultsFilename);
            }

            var executor = new TopDownTargetedWorkflowExecutor(executorParameters, testDatasetPath);

            executor.Execute();

            // Output chrom data
            var wf = executor.TargetedWorkflow as TopDownTargetedWorkflow;

            Console.Write("***** chrom data *****\n");
            foreach (var resultData in wf.TargetResults)
            {
                int id = resultData.Key;
                TargetedResultBase result            = resultData.Value;
                double             chromPeakSelected = (result.ChromPeakSelected != null) ? result.ChromPeakSelected.XValue : -1;

                Console.Write("TargetID=" + id + "; ChromPeakSelected=" + chromPeakSelected + "\n");
                for (int i = 0; i < result.ChromValues.Xvalues.Length; i++)
                {
                    Console.Write(result.ChromValues.Xvalues[i] + "\t" + result.ChromValues.Yvalues[i] + "\n");
                }
                Console.Write("\n");
            }
            Console.Write("**********************\n");

            Assert.IsTrue(File.Exists(expectedResultsFilename));

            var importer = new UnlabelledTargetedResultFromTextImporter(expectedResultsFilename);
            TargetedResultRepository repository = importer.Import();

            Assert.AreEqual(9, repository.Results.Count);
        }
コード例 #7
0
        private bool resultPassesCriteria(TargetedResultBase result)
        {
            var passesCriteria = true;

            if (result.FailedResult)
            {
                return(false);
            }

            if (result.ChromPeakSelected == null)
            {
                return(false);
            }

            if (result.IsotopicProfile == null)
            {
                return(false);
            }

            if (result.NumQualityChromPeaks > AlignerParameters.NumChromPeaksAllowedDuringSelection)
            {
                return(false);
            }

            if (result.Flags.Count > 0)
            {
                return(false);
            }

            if (result.ChromPeakSelected.Height < AlignerParameters.MinimumChromPeakIntensityCriteria)
            {
                return(false);
            }

            if (result.Score > AlignerParameters.UpperFitScoreAllowedCriteria)
            {
                return(false);
            }

            if (result.InterferenceScore > AlignerParameters.IScoreAllowedCriteria)
            {
                return(false);
            }

            return(passesCriteria);
        }
コード例 #8
0
        private void AddFeatureToResult(TargetedResultBase result, IsotopicProfile iso)
        {
            //TODO:   the IsotopicProfileType is wrong...

            switch (IsotopicProfileType)
            {
            case Globals.IsotopicProfileType.UNLABELED:
                result.IsotopicProfile = iso;
                break;

            case Globals.IsotopicProfileType.LABELED:
                result.AddLabeledIso(iso);
                break;

            default:
                result.IsotopicProfile = iso;
                break;
            }
        }
コード例 #9
0
        protected void AddScoresToPeakQualityData(ChromPeakQualityData pq, TargetedResultBase currentResult)
        {
            if (currentResult.IsotopicProfile == null)
            {
                pq.IsotopicProfileFound = false;
                return;
            }
            else
            {
                pq.IsotopicProfileFound = true;
                pq.Abundance            = currentResult.IntensityAggregate;
                pq.FitScore             = currentResult.Score;
                pq.InterferenceScore    = currentResult.InterferenceScore;
                pq.IsotopicProfile      = currentResult.IsotopicProfile;
                var resultHasFlags = (currentResult.Flags != null && currentResult.Flags.Count > 0);
                pq.IsIsotopicProfileFlagged = resultHasFlags;

                pq.ScanLc = currentResult.Run.CurrentScanSet.PrimaryScanNumber;
            }
        }
コード例 #10
0
 private void ApplyMassCalibration(TargetedResultBase result)
 {
     Result.MonoIsotopicMassCalibrated = Result.GetCalibratedMonoisotopicMass();
     Result.MassErrorBeforeAlignment   = Result.GetMassErrorBeforeAlignmentInPPM();
     Result.MassErrorAfterAlignment    = Result.GetMassErrorAfterAlignmentInPPM();
 }
コード例 #11
0
        public override void Execute(ResultCollection resultList)
        {
            Check.Require(resultList.Run.CurrentMassTag != null, this.Name + " failed. MassTag was not defined.");

            TargetedResultBase currentResult = resultList.GetTargetedResult(resultList.Run.CurrentMassTag);

            if (msgen == null)
            {
                msgen = MSGeneratorFactory.CreateMSGenerator(resultList.Run.MSFileType);
                msgen.IsTICRequested = false;
            }

            TargetBase currentTarget = resultList.Run.CurrentMassTag;

            // Set the MS Generator to use a window around the target so that we do not grab a lot of unecessary data from the UIMF file
            List <MSPeak> theoIsotopicPeakList = currentTarget.IsotopicProfile.Peaklist.Where(x => x.Height > 0.1).OrderBy(x => x.XValue).ToList();

            msgen.MinMZ = theoIsotopicPeakList[0].XValue - 1.1;
            msgen.MaxMZ = theoIsotopicPeakList[theoIsotopicPeakList.Count - 1].XValue + 1.1;

            float normalizedElutionTime;

            if (currentResult.Run.CurrentMassTag.ElutionTimeUnit == Globals.ElutionTimeUnit.ScanNum)
            {
                normalizedElutionTime = resultList.Run.CurrentMassTag.ScanLCTarget / (float)currentResult.Run.GetNumMSScans();
            }
            else
            {
                normalizedElutionTime = resultList.Run.CurrentMassTag.NormalizedElutionTime;
            }

            //collect Chrom peaks that fall within the NET tolerance
            List <ChromPeak> peaksWithinTol = new List <ChromPeak>(); //

            foreach (ChromPeak peak in resultList.Run.PeakList)
            {
                if (Math.Abs(peak.NETValue - normalizedElutionTime) <= Parameters.NETTolerance)     //peak.NETValue was determined by the ChromPeakDetector or a future ChromAligner Task
                {
                    peaksWithinTol.Add(peak);
                }
            }

            List <ChromPeakQualityData> peakQualityList = new List <ChromPeakQualityData>();

            //iterate over peaks within tolerance and score each peak according to MSFeature quality
#if DEBUG
            int tempMinScanWithinTol = resultList.Run.GetScanValueForNET(normalizedElutionTime - Parameters.NETTolerance);
            int tempMaxScanWithinTol = resultList.Run.GetScanValueForNET(normalizedElutionTime + Parameters.NETTolerance);
            int tempCenterTol        = resultList.Run.GetScanValueForNET(normalizedElutionTime);


            Console.WriteLine("SmartPeakSelector --> NETTolerance= " + Parameters.NETTolerance + ";  chromMinCenterMax= " + tempMinScanWithinTol + "\t" + tempCenterTol + "" +
                              "\t" + tempMaxScanWithinTol);
            Console.WriteLine("MT= " + currentResult.Target.ID + ";z= " + currentResult.Target.ChargeState + "; mz= " + currentResult.Target.MZ.ToString("0.000") + ";  ------------------------- PeaksWithinTol = " + peaksWithinTol.Count);
#endif

            currentResult.NumChromPeaksWithinTolerance = peaksWithinTol.Count;
            currentResult.NumQualityChromPeaks         = -1;

            ChromPeak bestChromPeak;
            if (currentResult.NumChromPeaksWithinTolerance > _parameters.NumChromPeaksAllowed)
            {
                bestChromPeak = null;
            }
            else
            {
                foreach (var chromPeak in peaksWithinTol)
                {
                    ChromPeakQualityData pq = new ChromPeakQualityData(chromPeak);
                    peakQualityList.Add(pq);

                    // TODO: Currently hard-coded to sum only 1 scan
                    SetScansForMSGenerator(chromPeak, resultList.Run, 1);

                    //This resets the flags and the scores on a given result
                    currentResult.ResetResult();

                    //generate a mass spectrum
                    msgen.Execute(resultList);

                    //find isotopic profile
                    TargetedMSFeatureFinder.Execute(resultList);

                    //get fit score
                    fitScoreCalc.Execute(resultList);

                    //get i_score
                    resultValidator.Execute(resultList);

                    //collect the results together
                    AddScoresToPeakQualityData(pq, currentResult);

#if DEBUG
                    pq.Display();
#endif
                }

                //run a algorithm that decides, based on fit score mostly.
                bestChromPeak = determineBestChromPeak(peakQualityList, currentResult);
            }

            currentResult.ChromPeakQualityList = peakQualityList;

            SetScansForMSGenerator(bestChromPeak, resultList.Run, Parameters.NumScansToSum);

            UpdateResultWithChromPeakAndLCScanInfo(currentResult, bestChromPeak);
        }
コード例 #12
0
        public void AddResult(TargetedResultBase resultToConvert)
        {
            var result = ResultDTOFactory.CreateTargetedResult(resultToConvert);

            this.Results.Add(result);
        }
コード例 #13
0
 public abstract ChromCorrelationData CorrelateData(Run run, TargetedResultBase result, int startScan, int stopScan);
コード例 #14
0
 protected virtual void UpdateResultWithChromPeakAndLCScanInfo(TargetedResultBase result, ChromPeak bestPeak)
 {
     result.AddSelectedChromPeakAndScanSet(bestPeak, result.Run.CurrentScanSet, IsotopicProfileType);
     result.WasPreviouslyProcessed = true;    //indicate that this result has been added to...  use this to help control the addition of labelled (N15) data
 }
コード例 #15
0
        protected virtual ChromPeak determineBestChromPeak(List <ChromPeakQualityData> peakQualityList, TargetedResultBase currentResult)
        {
            //flagging algorithm checks for peak-to-the-left. This is ok for peptides whose first isotope
            //is most abundant, but not good for large peptides in which the mono peak is of lower intensity.
            var goodToFilterOnFlaggedIsotopicProfiles = currentResult.Target.IsotopicProfile.GetIndexOfMostIntensePeak() < 5;


            var filteredList1 = (from n in peakQualityList
                                 where n.IsotopicProfileFound &&
                                 n.FitScore < 1 && n.InterferenceScore < 1
                                 select n).ToList();


            if (goodToFilterOnFlaggedIsotopicProfiles)
            {
                filteredList1 = filteredList1.Where(p => p.IsIsotopicProfileFlagged == false).ToList();
            }

            ChromPeak bestpeak;

            currentResult.NumQualityChromPeaks = filteredList1.Count;

            if (filteredList1.Count == 0)
            {
                bestpeak = null;
                currentResult.FailedResult = true;
                currentResult.FailureType  = DeconTools.Backend.Globals.TargetedResultFailureType.ChrompeakNotFoundWithinTolerances;
            }
            else if (filteredList1.Count == 1)
            {
                bestpeak = filteredList1[0].Peak;
            }
            else
            {
                filteredList1 = filteredList1.OrderBy(p => p.FitScore).ToList();

                var numCandidatesWithLowFitScores = filteredList1.Count(p => p.FitScore < _parameters.UpperLimitOfGoodFitScore);
                currentResult.NumQualityChromPeaks = numCandidatesWithLowFitScores;


                var diffFirstAndSecondFitScores = Math.Abs(filteredList1[0].FitScore - filteredList1[1].FitScore);

                var differenceIsSmall = (diffFirstAndSecondFitScores < 0.05);
                if (differenceIsSmall)
                {
                    if (_parameters.MultipleHighQualityMatchesAreAllowed)
                    {
                        if (filteredList1[0].Abundance >= filteredList1[1].Abundance)
                        {
                            bestpeak = filteredList1[0].Peak;
                        }
                        else
                        {
                            bestpeak = filteredList1[1].Peak;
                        }
                    }
                    else
                    {
                        bestpeak = null;
                        currentResult.FailedResult = true;
                        currentResult.FailureType  = DeconTools.Backend.Globals.TargetedResultFailureType.TooManyHighQualityChrompeaks;
                    }
                }
                else
                {
                    bestpeak = filteredList1[0].Peak;
                }
            }

            return(bestpeak);
        }
コード例 #16
0
        protected virtual ChromPeak determineBestChromPeak(List <ChromPeakQualityData> peakQualityList, TargetedResultBase currentResult)
        {
            var filteredList1 = (from n in peakQualityList
                                 where n.IsotopicProfileFound == true &&
                                 n.FitScore < 1 && n.InterferenceScore < 1
                                 select n).ToList();

            ChromPeak bestpeak;

            currentResult.NumQualityChromPeaks = filteredList1.Count;

            if (filteredList1.Count == 0)
            {
                bestpeak = null;
                currentResult.FailedResult = true;
                currentResult.FailureType  = DeconTools.Backend.Globals.TargetedResultFailureType.ChrompeakNotFoundWithinTolerances;
            }
            else if (filteredList1.Count == 1)
            {
                bestpeak = filteredList1[0].Peak;
            }
            else
            {
                filteredList1 = filteredList1.OrderBy(p => p.FitScore).ToList();

                var diffFirstAndSecondFitScores = Math.Abs(filteredList1[0].FitScore - filteredList1[1].FitScore);

                var differenceIsSmall = (diffFirstAndSecondFitScores < 0.05);
                if (differenceIsSmall)
                {
                    if (_parameters.MultipleHighQualityMatchesAreAllowed)
                    {
                        if (filteredList1[0].Abundance >= filteredList1[1].Abundance)
                        {
                            bestpeak = filteredList1[0].Peak;
                        }
                        else
                        {
                            bestpeak = filteredList1[1].Peak;
                        }
                    }
                    else
                    {
                        bestpeak = null;
                        currentResult.FailedResult = true;
                        currentResult.FailureType  = DeconTools.Backend.Globals.TargetedResultFailureType.TooManyHighQualityChrompeaks;
                    }
                }
                else
                {
                    bestpeak = filteredList1[0].Peak;
                }
            }

            // If any of the peaks were good, then we want to make sure to not consider the result an error.
            // I added this because if the last peak checked had an error, the entire result was still flagged as having an error.
            if (bestpeak != null)
            {
                currentResult.FailedResult = false;
                currentResult.FailureType  = DeconTools.Backend.Globals.TargetedResultFailureType.None;
            }

            return(bestpeak);
        }
コード例 #17
0
 public static void CreateTargetedResult(TargetedResultBase result, TargetedResultDTO resultLight)
 {
     writeStandardInfoToResult(resultLight, result);
 }
コード例 #18
0
 public override ChromCorrelationData CorrelateData(Run run, TargetedResultBase result, int startScan, int stopScan)
 {
     {
         return(CorrelatePeaksWithinIsotopicProfile(run, result.IsotopicProfile, startScan, stopScan));
     }
 }