Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 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);
        }
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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"));

           
            }

      


        }
Exemplo n.º 13
0
        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"));

              


            }




        }
Exemplo n.º 17
0
        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();
            }
        }