public void doAlignmentTest1() { RunFactory rf = new RunFactory(); Run run = rf.CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1); string deconToolsResultFile = @"D:\Temp\output7\targetedFeatures.txt"; UnlabelledTargetedResultFromTextImporter importer = new UnlabelledTargetedResultFromTextImporter(deconToolsResultFile); TargetedResultRepository repo = importer.Import(); string massTagFile = @"\\protoapps\UserData\Slysz\Data\MassTags\qcshew_standard_file_allMassTags.txt"; MassTagCollection mtc = new MassTagCollection(); MassTagFromTextFileImporter mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); NETAndMassAligner aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.MassTagList); aligner.Execute(run); Assert.IsNotNull(run.AlignmentInfo); Assert.IsNotNull(run.AlignmentInfo.marrNETFncTimeInput); Assert.AreEqual(2273.0f, run.AlignmentInfo.marrNETFncTimeInput[0]); float testScan = 6005; float testNET1 = run.AlignmentInfo.GetNETFromTime(testScan); Assert.AreEqual(0.3253423m, (decimal)testNET1); }
public void ExportNET_andMass_AlignmentDataTest1() { string exportNETFilename = Path.Combine(FileRefs.OutputFolderPath, "exportedNETAlignmentInfo1.txt"); string exportMassFilename = Path.Combine(FileRefs.OutputFolderPath, "exportedMassAlignmentInfo1.txt"); RunFactory rf = new RunFactory(); Run run = rf.CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1); string deconToolsResultFile = @"D:\Temp\output7\targetedFeatures.txt"; UnlabelledTargetedResultFromTextImporter importer = new UnlabelledTargetedResultFromTextImporter(deconToolsResultFile); TargetedResultRepository repo = importer.Import(); string massTagFile = @"\\protoapps\UserData\Slysz\Data\MassTags\qcshew_standard_file_allMassTags.txt"; MassTagCollection mtc = new MassTagCollection(); MassTagFromTextFileImporter mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); NETAndMassAligner aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.MassTagList); aligner.Execute(run); NETAlignmentInfoToTextExporter exporter = new NETAlignmentInfoToTextExporter(exportNETFilename); exporter.ExportAlignmentInfo(run.AlignmentInfo); MassAlignmentInfoToTextExporter massInfoexporter = new MassAlignmentInfoToTextExporter(exportMassFilename); massInfoexporter.ExportAlignmentInfo(run.AlignmentInfo); }
public void doAlignmentTest1() { var rf = new RunFactory(); var run = rf.CreateRun(DeconTools.UnitTesting2.FileRefs.RawDataMSFiles.OrbitrapStdFile1); var deconToolsResultFile = Path.Combine(FileRefs.ImportedData, "QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18_targetedFeatures.txt"); var importer = new UnlabelledTargetedResultFromTextImporter(deconToolsResultFile); var repo = importer.Import(); var massTagFile = @"\\protoapps\UserData\Slysz\Data\MassTags\qcshew_standard_file_allMassTags.txt"; var mtc = new TargetCollection(); var mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); var aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.TargetList); aligner.Execute(run); float testScan = 6005; var testNET1 = run.NetAlignmentInfo.GetNETValueForScan((int)testScan); //note - this is Multialign's Assert.AreEqual(0.3253423m, (decimal)testNET1); }
public void ExportNET_andMass_AlignmentDataTest1() { var exportNETFilename = Path.Combine(FileRefs.OutputFolderPath, "exportedNETAlignmentInfo1.txt"); var exportMassFilename = Path.Combine(FileRefs.OutputFolderPath, "exportedMassAlignmentInfo1.txt"); var rf = new RunFactory(); var run = rf.CreateRun(DeconTools.UnitTesting2.FileRefs.RawDataMSFiles.OrbitrapStdFile1); var deconToolsResultFile = Path.Combine(FileRefs.ImportedData, "QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18_targetedFeatures.txt"); var importer = new UnlabelledTargetedResultFromTextImporter(deconToolsResultFile); var repo = importer.Import(); var massTagFile = @"\\protoapps\UserData\Slysz\Data\MassTags\qcshew_standard_file_allMassTags.txt"; var mtc = new TargetCollection(); var mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); var aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.TargetList); aligner.Execute(run); var exporter = new NETAlignmentInfoToTextExporter(exportNETFilename); exporter.ExportAlignmentInfo(run.AlignmentInfo); var massInfoexporter = new MassAlignmentInfoToTextExporter(exportMassFilename); massInfoexporter.ExportAlignmentInfo(run.AlignmentInfo); }
public void importerTest1() { var importedResultFile = Path.Combine(FileRefs.OutputFolderPath, "UnlabelledTargetedResultsExporterOutput1.txt"); var importer = new UnlabelledTargetedResultFromTextImporter(importedResultFile); var repo = importer.Import(); Assert.IsNotNull(repo); Assert.IsTrue(repo.Results.Count > 0); var testResult1 = repo.Results[0]; Assert.AreEqual("QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18", testResult1.DatasetName); Assert.AreEqual(24698, testResult1.TargetID); Assert.AreEqual(3, testResult1.ChargeState); Assert.AreEqual(5880, testResult1.ScanLC); Assert.AreEqual(5876, testResult1.ScanLCStart); Assert.AreEqual(5888, testResult1.ScanLCEnd); Assert.AreEqual(0.3160, (decimal)testResult1.NET); Assert.AreEqual(1, testResult1.NumChromPeaksWithinTol); Assert.AreEqual(2311.07759, (decimal)testResult1.MonoMass); Assert.AreEqual(771.36647, (decimal)testResult1.MonoMZ); Assert.AreEqual(8247913, (decimal)testResult1.Intensity); Assert.AreEqual(0.0119, (decimal)testResult1.FitScore); Assert.AreEqual(0, (decimal)testResult1.IScore); }
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); }
public void copyToLocalTest1() { var executorParameterFile = @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\basicTargetedWorkflowExecutorParameters_CopyToLocalTestCase2.xml"; var datasetPath = @"\\protoapps\UserData\Slysz\DeconTools_TestFiles\QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18.RAW"; var testDatasetName = "QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18"; var executorParameters = new BasicTargetedWorkflowExecutorParameters(); executorParameters.LoadParameters(executorParameterFile); var expectedResultsFilename = Path.Combine(executorParameters.OutputFolderBase, "Results", testDatasetName + "_results.txt"); if (File.Exists(expectedResultsFilename)) { File.Delete(expectedResultsFilename); } TargetedWorkflowExecutor executor = new BasicTargetedWorkflowExecutor(executorParameters, datasetPath); executor.Execute(); Assert.IsTrue(File.Exists(expectedResultsFilename)); var importer = new UnlabelledTargetedResultFromTextImporter(expectedResultsFilename); var repository = importer.Import(); Assert.AreEqual(10, repository.Results.Count); var result1 = repository.Results[2]; Assert.AreEqual(24702, result1.TargetID); Assert.AreEqual(3, result1.ChargeState); Assert.AreEqual(8112, result1.ScanLC); //Dataset MassTagID ChargeState Scan ScanStart ScanEnd NET NumChromPeaksWithinTol NumQualityChromPeaksWithinTol MonoisotopicMass MonoMZ IntensityRep FitScore IScore FailureType //QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18 24702 3 8119 8112 8124 0.4172 2 1 2920.53082 974.51755 1379489 0.1136 0.0000 }
public void ensureAlignment_was_executed() { var run = new RunFactory().CreateRun(DeconTools.UnitTesting2.FileRefs.RawDataMSFiles.OrbitrapStdFile1); var alignmentFeaturesFile = @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\AlignmentInfo\QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18_READONLY_alignedFeatures.txt"; var importer = new UnlabelledTargetedResultFromTextImporter(alignmentFeaturesFile); var repo = importer.Import(); var massTagFile = @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\Unlabelled\Targets\QCShew_Formic_MassTags_Bin10_all.txt"; var mtc = new TargetCollection(); var mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); var parameters = new NETAndMassAlignerParameters(); var aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.TargetList); var scan = 7835; var theorMZ = 780.08485; //massTagID = 24701 (+3) var obsMZ = 780.0824; var netBeforeAlignment = run.NetAlignmentInfo.GetNETValueForScan(scan); var mzBeforeAlignment = run.GetAlignedMZ(obsMZ); aligner.Execute(run); var netAfterAlignment = run.NetAlignmentInfo.GetNETValueForScan(scan); var mzAfterAlignment = run.GetAlignedMZ(obsMZ); Console.WriteLine("NET before alignment = " + netBeforeAlignment); Console.WriteLine("NET after alignment = " + netAfterAlignment); Console.WriteLine("Theor MZ = " + theorMZ); Console.WriteLine("MZ before alignment = " + mzBeforeAlignment); Console.WriteLine("MZ after alignment = " + mzAfterAlignment); Console.WriteLine("PPMDiff before alignment = " + (theorMZ - mzBeforeAlignment) / theorMZ * 1e6); Console.WriteLine("PPMDiff after alignment = " + (theorMZ - mzAfterAlignment) / theorMZ * 1e6); }
public void TestTargetedWorkflowExecutor() { const string executorParameterFile = @"\\protoapps\UserData\Kaipo\TopDown\test2params.xml"; var executorParameters = new TopDownTargetedWorkflowExecutorParameters(); executorParameters.LoadParameters(executorParameterFile); string resultsFolderLocation = Path.Combine(executorParameters.OutputFolderBase, "IqResults"); 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); string proteinSeq = @"A.VDKTNPYALMEDAAQKTFDKLKTEQPEIRKNPELLREIVQQELLPYVHIKYAGALVLGPYYRNATPAQRDAYFAAFKDYLAQVYGQALAMYEGQEYRIEPAKPFADKSNLTIRVTIIDKNGRPPVRLDFQWRKNSKTGEWQAYDMIAEGVSMITTKQNEWSDILSAKGVDGLTKQLEISAKTPITLDEKK."; executor.Targets.TargetList = executor.Targets.TargetList.Where(p => p.Code == proteinSeq).ToList(); 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(1, repository.Results.Count); //// expected results as tuples in format: <target id, charge state, scan lc> //var expectedResults = new HashSet<Tuple<long, int, int>> //{ // new Tuple<long, int, int>(1, 8, 1583), // new Tuple<long, int, int>(2, 23, 2643), // new Tuple<long, int, int>(3, 21, 1853), // new Tuple<long, int, int>(4, 14, 2303), // new Tuple<long, int, int>(5, 17, 2339), // new Tuple<long, int, int>(6, 26, 4630), // new Tuple<long, int, int>(7, 26, 3583), // new Tuple<long, int, int>(8, 7, 3709), // new Tuple<long, int, int>(9, 42, 3439), //}; //foreach (TargetedResultDTO result in repository.Results) //{ // expectedResults.Remove(new Tuple<long, int, int>(result.TargetID, result.ChargeState, result.ScanLC)); //} //Assert.IsEmpty(expectedResults); }
public override void Execute() { if (string.IsNullOrEmpty(ExecutorParameters.TargetsFilePath)) { throw new ApplicationException("Processing failed. TargetsFilePath is empty. Check your parameter file."); } if (!File.Exists(ExecutorParameters.TargetsFilePath)) { throw new FileNotFoundException("File not found error for the TargetsFilePath. Check your parameter file for " + ExecutorParameters.TargetsFilePath); } TargetedResultFromTextImporter resultImporter = new UnlabelledTargetedResultFromTextImporter(ExecutorParameters.TargetsFilePath); var allresults = resultImporter.Import(); var resultsSortedByDataset = allresults.Results.OrderBy(p => p.DatasetName); var totalResults = resultsSortedByDataset.Count(); ResultRepository.Clear(); //iterate over results var resultCounter = 0; foreach (var result in resultsSortedByDataset) { resultCounter++; _currentResult = result; if (result.DatasetName != _currentDatasetName) { if (Run != null) { Run.Close(); } InitializeRun(result.DatasetName); if (Run == null) { throw new ApplicationException("Error initializing dataset. (Run is null)"); } _currentDatasetName = Run.DatasetName; } SetCurrentWorkflowTarget(result); try { this.TargetedWorkflow.Execute(); ResultRepository.AddResult(this.TargetedWorkflow.Result); } catch (Exception ex) { var errorString = "Error on MT\t" + result.TargetID + "\tchargeState\t" + result.ChargeState + "\t" + ex.Message + "\t" + ex.StackTrace; ReportProcessingProgress(errorString, resultCounter); throw; } var progressString = "Processed " + resultCounter + " of " + totalResults; if (_backgroundWorker != null) { if (_backgroundWorker.CancellationPending) { return; } } ReportProcessingProgress(progressString, resultCounter); } }
public void Issue0725_AlignmentProblemsTest1() { var run = new RunFactory().CreateRun(@"D:\Data\Orbitrap\Issue0725_badAlignment\QC_Shew_10_03-2_100min_06May10_Tiger_10-04-08.RAW"); var alignmentFeaturesFile = run.Filename.Replace(".RAW", "_alignedFeatures.txt"); var importer = new UnlabelledTargetedResultFromTextImporter(alignmentFeaturesFile); var repo = importer.Import(); var massTagFile = @"\\protoapps\UserData\Slysz\Data\QCShew_MassiveTargeted\MassTags\QCShew_Formic_MassTags_for_alignment.txt"; var mtc = new TargetCollection(); var mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); var parameters = new NETAndMassAlignerParameters(); var aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.TargetList); var sb = new StringBuilder(); sb.Append("mtid\tscanLC\ttheorMZ\tobsMZ\talignedMZ\tppmErrorBefore\tppmErrorAfter\n"); parameters.MassCalibrationWindow = 50; parameters.MassCalibrationNumMassDeltaBins = 100; int[] massCalXSliceValues = { 3, 6, 9, 10, 12, 15,18,20 }; //int[] massCalXSliceValues = { 6 }; foreach (var xsliceVal in massCalXSliceValues) { var ppmErrorsBefore = new List<double>(); var ppmErrorsAfter = new List<double>(); parameters.MassCalibrationNumXSlices = (short)xsliceVal; aligner.AlignerParameters = parameters; aligner.Execute(run); foreach (var result in repo.Results) { var mt = mtc.TargetList.Where(p => p.ID == result.TargetID).Where(p => p.ChargeState == result.ChargeState).First(); var theorMZ = mt.MZ; var obsMZ = result.MonoMZ; double scan = result.ScanLC; var alignedMZ = run.GetAlignedMZ(obsMZ, scan); var ppmErrorBefore = (theorMZ - obsMZ) / theorMZ * 1e6; var ppmErrorAfter = (theorMZ - alignedMZ) / theorMZ * 1e6; double theorNET = mt.NormalizedElutionTime; double obsNET = result.NET; var alignedNET = run.NetAlignmentInfo.GetNETValueForScan((int) scan); sb.Append(result.TargetID + "\t" + result.ScanLC + "\t" + theorMZ.ToString("0.00000") + "\t" + obsMZ.ToString("0.00000") + "\t" + alignedMZ.ToString("0.00000") + "\t" + ppmErrorBefore.ToString("0.0") + "\t" + ppmErrorAfter.ToString("0.0") + "\t" + theorNET.ToString("0.0000") + "\t" + obsNET.ToString("0.0000") + "\t" + alignedNET.ToString("0.0000")); //sb.Append(result.MassTagID + "\t" + result.ScanLC + "\t" + theo sb.Append(Environment.NewLine); ppmErrorsAfter.Add(ppmErrorAfter); ppmErrorsBefore.Add(ppmErrorBefore); } // Console.WriteLine(sb.ToString()); //Console.WriteLine(); //Console.WriteLine(); //Console.WriteLine("Average ppm error before alignment = " + filterWithGrubbsApplied(ppmErrorsBefore).Average().ToString("0.00")); //Console.WriteLine("Average ppm error after alignment = " + filterWithGrubbsApplied(ppmErrorsAfter).Average().ToString("0.00")); //Console.WriteLine(); //Console.WriteLine(); Console.WriteLine(xsliceVal + "\t" + filterWithGrubbsApplied(ppmErrorsBefore).Average().ToString("0.00") + "\t" + filterWithGrubbsApplied(ppmErrorsAfter).Average().ToString("0.00")); } }
public void AlignmentParameterTesting1() { var run = new RunFactory().CreateRun(DeconTools.UnitTesting2.FileRefs.RawDataMSFiles.OrbitrapStdFile1); var alignmentFeaturesFile = @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18_READONLY_alignedFeatures.txt"; var importer = new UnlabelledTargetedResultFromTextImporter(alignmentFeaturesFile); var repo = importer.Import(); var massTagFile = @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\Unlabelled\Targets\QCShew_Formic_MassTags_Bin10_all.txt"; var mtc = new TargetCollection(); var mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); var parameters = new NETAndMassAlignerParameters(); var aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.TargetList); var sb = new StringBuilder(); sb.Append("theorMZ\tobsMZ\talignedMZ\tppmErrorBefore\tppmErrorAfter\n"); parameters.MassCalibrationWindow = 50; parameters.MassCalibrationNumMassDeltaBins = 100; int[]massCalXSliceValues = {3,6,9,12,15,20,30,50}; foreach (var xsliceVal in massCalXSliceValues) { var ppmErrorsBefore = new List<double>(); var ppmErrorsAfter = new List<double>(); parameters.MassCalibrationNumXSlices =(short)xsliceVal; aligner.AlignerParameters = parameters; aligner.Execute(run); foreach (var result in repo.Results) { var mt = mtc.TargetList.Where(p => p.ID == result.TargetID).Where(p => p.ChargeState == result.ChargeState).First(); var theorMZ = mt.MZ; var obsMZ = result.MonoMZ; double scan = result.ScanLC; var alignedMZ = run.GetAlignedMZ(obsMZ, scan); var ppmErrorBefore = (theorMZ - obsMZ) / theorMZ * 1e6; var ppmErrorAfter = (theorMZ - alignedMZ) / theorMZ * 1e6; sb.Append(result.TargetID + "\t" + result.ScanLC + "\t" + theorMZ.ToString("0.00000") + "\t" + obsMZ.ToString("0.00000") + "\t" + alignedMZ.ToString("0.00000") + "\t" + ppmErrorBefore.ToString("0.0") + "\t" + ppmErrorAfter.ToString("0.0")); sb.Append(Environment.NewLine); ppmErrorsAfter.Add(ppmErrorAfter); ppmErrorsBefore.Add(ppmErrorBefore); } Console.WriteLine(xsliceVal + "\t" + ppmErrorsBefore.Average().ToString("0.00") + "\t"+ ppmErrorsAfter.Average().ToString("0.00")); //Console.WriteLine(sb.ToString()); //Console.WriteLine(); //Console.WriteLine(); //Console.WriteLine("Average ppm error before alignment = " + ppmErrorsBefore.Average().ToString("0.00")); //Console.WriteLine("Average ppm error after alignment = " + ppmErrorsAfter.Average().ToString("0.00")); } }
public void Execute() { Check.Require(_run != null, "Run has not been defined."); //Use Features file if it exists; if not, find the quality Features List <MassTagResultBase> resultsPassingCriteria; _targetedResultRepository = new TargetedResultRepository(); if (ImportedFeaturesFilename == null || ImportedFeaturesFilename.Length == 0) { Check.Require(_run.ResultCollection.MSPeakResultList != null && _run.ResultCollection.MSPeakResultList.Count > 0, "Dataset's Peak-level data is empty. This is needed for chromatogram generation."); resultsPassingCriteria = FindTargetsThatPassCriteria(); _targetedResultRepository.AddResults(resultsPassingCriteria); if (AreFeaturesSavedToTextFile) { string outputfolder; if (ExportAlignmentFolder == null || ExportAlignmentFolder.Length == 0) { outputfolder = _run.DataSetPath; } else { outputfolder = ExportAlignmentFolder; } string exportTargetedFeaturesFile = Path.Combine(outputfolder, _run.DatasetName + "_alignedFeatures.txt"); UnlabelledTargetedResultToTextExporter exporter = new UnlabelledTargetedResultToTextExporter(exportTargetedFeaturesFile); exporter.ExportResults(_targetedResultRepository.Results); } } else { //load them from the Features file UnlabelledTargetedResultFromTextImporter importer = new UnlabelledTargetedResultFromTextImporter(ImportedFeaturesFilename); TargetedResultRepository repo = importer.Import(); _targetedResultRepository.Results = repo.Results; } //do alignment NETAndMassAligner aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(_targetedResultRepository.Results); aligner.SetReferenceMassTags(this.MassTagList); aligner.Execute(this._run); //save the alignment data if (IsAlignmentInfoExported) { string outputfolder; if (ExportAlignmentFolder == null || ExportAlignmentFolder.Length == 0) { outputfolder = _run.DataSetPath; } else { outputfolder = ExportAlignmentFolder; } string exportNETAlignmentFilename = Path.Combine(outputfolder, _run.DatasetName + "_NETAlignment.txt"); string exportMZAlignmentFilename = Path.Combine(outputfolder, _run.DatasetName + "_MZAlignment.txt"); MassAlignmentInfoToTextExporter mzAlignmentExporter = new MassAlignmentInfoToTextExporter(exportMZAlignmentFilename); mzAlignmentExporter.ExportAlignmentInfo(_run.AlignmentInfo); NETAlignmentInfoToTextExporter netAlignmentExporter = new NETAlignmentInfoToTextExporter(exportNETAlignmentFilename); netAlignmentExporter.ExportAlignmentInfo(_run.AlignmentInfo); } }
public void targetedWorkflow_withTargetedAlignment_test() { var executorParameterFile = baseFolder + @"\Parameters\QCShew_OrbiStandard_workflowExecutorParameters.xml"; var executorParameters = new BasicTargetedWorkflowExecutorParameters(); executorParameters.LoadParameters(executorParameterFile); var resultsFolderLocation = Path.Combine(executorParameters.OutputFolderBase, "Results"); var testDatasetPath = baseFolder + @"\QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18.RAW"; var testDatasetName = "QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18"; var expectedResultsFilename = Path.Combine(resultsFolderLocation, testDatasetName + "_results.txt"); if (File.Exists(expectedResultsFilename)) { File.Delete(expectedResultsFilename); } var rawFileInfo = new FileInfo(testDatasetPath); var mzalignmentFile = Path.Combine(rawFileInfo.DirectoryName, testDatasetName + "_mzAlignment.txt"); var netAlignmentFile = Path.Combine(rawFileInfo.DirectoryName, testDatasetName + "_netAlignment.txt"); if (File.Exists(mzalignmentFile)) { File.Delete(mzalignmentFile); } if (File.Exists(netAlignmentFile)) { File.Delete(netAlignmentFile); } TargetedWorkflowExecutor executor = new BasicTargetedWorkflowExecutor(executorParameters, testDatasetPath); executor.Execute(); Assert.IsTrue(File.Exists(expectedResultsFilename)); var importer = new UnlabelledTargetedResultFromTextImporter(expectedResultsFilename); var repository = importer.Import(); Assert.AreEqual(10, repository.Results.Count); var result1 = repository.Results[0]; Assert.AreEqual(24702, result1.TargetID); Assert.AreEqual(3, result1.ChargeState); Assert.AreEqual(8627, result1.ScanLC); //Assert.AreEqual(0.41724m, (decimal)Math.Round(result1.NET, 5)); //Assert.AreEqual(0.002534m, (decimal)Math.Round(result1.NETError, 6)); //Assert.AreEqual(2920.53082m, (decimal)Math.Round(result1.MonoMass, 5)); //Assert.AreEqual(2920.53879m, (decimal)Math.Round(result1.MonoMassCalibrated, 5)); //Assert.AreEqual(-2.33m, (decimal)Math.Round(result1.MassErrorInPPM, 2)); //Dataset MassTagID ChargeState Scan ScanStart ScanEnd NET NumChromPeaksWithinTol NumQualityChromPeaksWithinTol MonoisotopicMass MonoMZ IntensityRep FitScore IScore FailureType //QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18 24702 3 8119 8112 8124 0.4172 2 1 2920.53082 974.51755 1379489 0.1136 0.0000 }
public void targetedWorkflow_noAlignment() { //TODO: fix test - it is using previous data for alignment //TODO: make JIRA issue so we can see chromatogram, etc. var executorParameterFile = baseFolder + @"\Parameters\QCShew_OrbiStandard_workflowExecutorParameters.xml"; var executorParameters = new BasicTargetedWorkflowExecutorParameters(); executorParameters.LoadParameters(executorParameterFile); var resultsFolderLocation = executorParameters.OutputFolderBase + "\\Results"; var testDatasetPath = baseFolder + @"\QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18.RAW"; var testDatasetName = "QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18"; var expectedResultsFilename = Path.Combine(resultsFolderLocation, testDatasetName + "_results.txt"); if (File.Exists(expectedResultsFilename)) { File.Delete(expectedResultsFilename); } var rawFileInfo = new FileInfo(testDatasetPath); //delete alignment files var mzalignmentFile = Path.Combine(rawFileInfo.DirectoryName, testDatasetName + "_mzAlignment.txt"); var netAlignmentFile = Path.Combine(rawFileInfo.DirectoryName, testDatasetName + "_netAlignment.txt"); if (File.Exists(mzalignmentFile)) { File.Delete(mzalignmentFile); } if (File.Exists(netAlignmentFile)) { File.Delete(netAlignmentFile); } executorParameters.TargetedAlignmentIsPerformed = false; //no targeted alignment TargetedWorkflowExecutor executor = new BasicTargetedWorkflowExecutor(executorParameters, testDatasetPath); executor.Execute(); Assert.IsTrue(File.Exists(expectedResultsFilename)); var importer = new UnlabelledTargetedResultFromTextImporter(expectedResultsFilename); var repository = importer.Import(); Assert.AreEqual(10, repository.Results.Count); var result1 = repository.Results[0]; Assert.AreEqual(24702, result1.TargetID); Assert.AreEqual(3, result1.ChargeState); Assert.AreEqual(8637, result1.ScanLC); //TODO: confirm/fix this NET value //Assert.AreEqual(0.41724m, (decimal)Math.Round(result1.NET, 5)); // Assert.AreEqual(0.002534m, (decimal)Math.Round(result1.NETError, 6)); //Assert.AreEqual(974.52068m, (decimal)Math.Round(result1.MonoMZ, 5)); //Assert.AreEqual(2920.53082m, (decimal)Math.Round(result1.MonoMass, 5)); //Assert.AreEqual(2920.53733m, (decimal)Math.Round(result1.MonoMassCalibrated, 5)); //Assert.AreEqual(-1.83m, (decimal)Math.Round(result1.MassErrorInPPM, 2)); }
public void AlignmentParameterTesting2() { var run = new RunFactory().CreateRun(@"D:\Data\Orbitrap\Subissue01\QC_Shew_10_01-pt5-1_8Feb10_Doc_09-12-24.RAW"); var alignmentFeaturesFile = @"\\protoapps\UserData\Slysz\Data\QCShew_MassiveTargeted\AlignmentInfo\QC_Shew_10_01-pt5-1_8Feb10_Doc_09-12-24_alignedFeatures.txt"; var importer = new UnlabelledTargetedResultFromTextImporter(alignmentFeaturesFile); var repo = importer.Import(); var massTagFile = @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\Unlabelled\Targets\QCShew_Formic_MassTags_Bin10_all.txt"; var mtc = new TargetCollection(); var mtimporter = new MassTagFromTextFileImporter(massTagFile); mtc = mtimporter.Import(); var parameters = new NETAndMassAlignerParameters(); var aligner = new NETAndMassAligner(); aligner.SetFeaturesToBeAligned(repo.Results); aligner.SetReferenceMassTags(mtc.TargetList); var sb = new StringBuilder(); sb.Append("mtid\tscanLC\ttheorMZ\tobsMZ\talignedMZ\tppmErrorBefore\tppmErrorAfter\n"); parameters.MassCalibrationWindow = 20; parameters.MassCalibrationNumMassDeltaBins = 100; // int[] massCalXSliceValues = { 3, 6, 9, 12, 15 }; int[] massCalXSliceValues = { 15 }; foreach (var xsliceVal in massCalXSliceValues) { var ppmErrorsBefore = new List<double>(); var ppmErrorsAfter = new List<double>(); parameters.MassCalibrationNumXSlices = (short)xsliceVal; aligner.AlignerParameters = parameters; aligner.Execute(run); foreach (var result in repo.Results) { var mt = mtc.TargetList.Where(p => p.ID == result.TargetID).Where(p => p.ChargeState == result.ChargeState).First(); var theorMZ = mt.MZ; var obsMZ = result.MonoMZ; double scan = result.ScanLC; var alignedMZ = run.GetAlignedMZ(obsMZ, scan); var ppmErrorBefore = (theorMZ - obsMZ) / theorMZ * 1e6; var ppmErrorAfter = (theorMZ - alignedMZ) / theorMZ * 1e6; sb.Append(result.TargetID + "\t" + result.ScanLC + "\t" + theorMZ.ToString("0.00000") + "\t" + obsMZ.ToString("0.00000") + "\t" + alignedMZ.ToString("0.00000") + "\t" + ppmErrorBefore.ToString("0.0") + "\t" + ppmErrorAfter.ToString("0.0")); sb.Append(Environment.NewLine); ppmErrorsAfter.Add(ppmErrorAfter); ppmErrorsBefore.Add(ppmErrorBefore); } Console.WriteLine(sb.ToString()); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Average ppm error before alignment = " + ppmErrorsBefore.Average().ToString("0.00")); Console.WriteLine("Average ppm error after alignment = " + ppmErrorsAfter.Average().ToString("0.00")); Console.WriteLine(); Console.WriteLine(); Console.WriteLine(xsliceVal + "\t" + ppmErrorsBefore.Average().ToString("0.00") + "\t" + ppmErrorsAfter.Average().ToString("0.00")); } }
public override void Execute() { List <TargetedResultBase> resultsPassingCriteria; _targetedResultRepository = new TargetedResultRepository(); var featuresAreImportedFromFile = !string.IsNullOrEmpty(AlignerParameters.ImportedFeaturesFilename); if (featuresAreImportedFromFile) { //load them from the Features file var importer = new UnlabelledTargetedResultFromTextImporter(AlignerParameters.ImportedFeaturesFilename); var repo = importer.Import(); _targetedResultRepository.Results = repo.Results; } else { Check.Require(Run.ResultCollection.MSPeakResultList != null && Run.ResultCollection.MSPeakResultList.Count > 0, "Dataset's Peak-level data is empty. This is needed for chromatogram generation."); //execute targeted feature finding to find the massTags in the raw data _workflow = new BasicTargetedWorkflow(Run, AlignerParameters); var netGrouping = 0.2; double chromTolerance = 5; //in ppm var progressString = "First trying to find alignment targets using narrow mass tolerances.... "; ReportProgress(0, progressString); var firstPassResults = FindTargetsThatPassSpecifiedMassTolerance(netGrouping, chromTolerance); if (firstPassResults.Count < 10) { //try another netGrouping netGrouping = 0.3; chromTolerance = 20; progressString = "Couldn't find enough. Now trying wider mass tolerance = " + chromTolerance; ReportProgress(0, progressString); var secondPassResults = FindTargetsThatPassSpecifiedMassTolerance(netGrouping, chromTolerance); firstPassResults.AddRange(secondPassResults); } if (firstPassResults.Count < 10) { netGrouping = 0.4; chromTolerance = 50; progressString = "Ok this is a tough one. Now going even wider. Mass tolerance = " + chromTolerance; ReportProgress(0, progressString); var thirdPassResults = FindTargetsThatPassSpecifiedMassTolerance(netGrouping, chromTolerance); firstPassResults.AddRange(thirdPassResults); } var ppmErrors = getMassErrors(firstPassResults); var filteredUsingGrubbsPPMErrors = MathUtilities.filterWithGrubbsApplied(ppmErrors); var canUseNarrowTolerances = executeDecisionOnUsingTightTolerances(filteredUsingGrubbsPPMErrors); if (canUseNarrowTolerances) { var avgPPMError = filteredUsingGrubbsPPMErrors.Average(); var stdev = MathUtilities.GetStDev(filteredUsingGrubbsPPMErrors); var tolerance = Math.Abs(avgPPMError) + 2 * stdev; this.AlignerParameters.ChromGenTolerance = (int)Math.Ceiling(tolerance); this.AlignerParameters.MSToleranceInPPM = (int)Math.Ceiling(tolerance); progressString = "STRICT_Matches_AveragePPMError = \t" + avgPPMError.ToString("0.00") + "; Stdev = \t" + stdev.ToString("0.00000"); ReportProgress(0, progressString); progressString = "NOTE: using the new PPMTolerance= " + this.AlignerParameters.ChromGenTolerance; ReportProgress(0, progressString); _workflow = new BasicTargetedWorkflow(Run, AlignerParameters); } else { double avgPPMError = 0; double stdev = 0; if (filteredUsingGrubbsPPMErrors.Count != 0) { avgPPMError = filteredUsingGrubbsPPMErrors.Average(); stdev = MathUtilities.GetStDev(filteredUsingGrubbsPPMErrors); } progressString = "STRICT_Matches_AveragePPMError = \t" + avgPPMError.ToString("0.00") + "; Stdev = \t" + stdev.ToString("0.00000"); ReportProgress(0, progressString); progressString = "Cannot use narrow ppm tolerances during NET/Mass alignment. Either the massError was too high or couldn't find enough strict matches."; ReportProgress(0, progressString); // find a way to work with datasets with masses way off but low stdev } resultsPassingCriteria = FindTargetsThatPassCriteria(); _targetedResultRepository.AddResults(resultsPassingCriteria); } var canDoAlignment = _targetedResultRepository.Results.Count > 0; if (canDoAlignment) { doAlignment(); } }