Ejemplo n.º 1
0
        public void importPeaksLargeFileTest2()
        {
            string testFile = textFilename2;

            List <MSPeakResult> peakList = new List <MSPeakResult>();

            PeakImporterFromText importer = new PeakImporterFromText(testFile);
            Stopwatch            sw       = new Stopwatch();

            sw.Start();
            importer.ImportPeaks(peakList);
            sw.Stop();
            Console.WriteLine("Import time = " + sw.ElapsedMilliseconds);
            sw.Reset();
            Assert.AreEqual(4852790, peakList.Count);
            sw.Start();
            List <MSPeakResult> testList = peakList.Where(p => p.MSPeak.XValue > 700.01 && p.MSPeak.XValue < 700.03).ToList();

            sw.Stop();
            Console.WriteLine("test chrom time = " + sw.ElapsedMilliseconds);
            sw.Reset();
            sw.Start();
            List <MSPeakResult> testList2 = peakList.Where(p => p.MSPeak.XValue > 891.01 && p.MSPeak.XValue < 891.03).ToList();

            sw.Stop();
            Console.WriteLine("test chrom time = " + sw.ElapsedMilliseconds);

            reportChromatogram(testList);
        }
Ejemplo n.º 2
0
        public void LoadChromData(Run run)
        {
            if (string.IsNullOrEmpty(ChromSourceDataFilePath))
            {
                ChromSourceDataFilePath = GetPossiblePeaksFile();
            }

            if (string.IsNullOrEmpty(ChromSourceDataFilePath))
            {
                Console.WriteLine("Creating _Peaks.txt file for " + this.Run.DatasetName + " at " + this.Run.DataSetPath);
                IqLogger.Log.Info("Creating _Peaks.txt");
                ChromSourceDataFilePath = CreatePeaksForChromSourceData();
            }
            else
            {
                IqLogger.Log.Info("Using Existing _Peaks.txt");
            }

            IqLogger.Log.Info("Peak Loading Started...");

            var peakImporter = new PeakImporterFromText(ChromSourceDataFilePath, _backgroundWorker);

            peakImporter.ImportPeaks(this.Run.ResultCollection.MSPeakResultList);

            IqLogger.Log.Info("Peak Loading Complete. Number of peaks loaded= " + Run.ResultCollection.MSPeakResultList.Count);
        }
Ejemplo n.º 3
0
        public void BadCorrelationTest1()
        {
            var dataset =
                @"\\protoapps\UserData\Slysz\Standard_Testing\Targeted_FeatureFinding\O16O18_standard_testing\Test1_VladAlz\RawData\Alz_P01_A01_097_26Apr12_Roc_12-03-15.RAW";

            var run = new RunFactory().CreateRun(dataset);

            var peaksDataFile = dataset.ToLower().Replace(".raw", "_peaks.txt");
            var peakImporter  = new PeakImporterFromText(peaksDataFile);

            peakImporter.ImportPeaks(run.ResultCollection.MSPeakResultList);


            double chromToleranceInPPM = 10;
            var    startScan           = 2340;
            var    stopScan            = 2440;

            var smoother = new SavitzkyGolaySmoother(9, 2);

            var testMZVal1 = 719.80349;

            var peakChromGen = new PeakChromatogramGenerator(chromToleranceInPPM);

            run.XYData = peakChromGen.GenerateChromatogram(run, startScan, stopScan, testMZVal1, chromToleranceInPPM);
            run.XYData = smoother.Smooth(run.XYData);

            var chromdata1 = run.XYData.TrimData(startScan, stopScan);

            var testMZVal2 = 722.325;

            run.XYData = peakChromGen.GenerateChromatogram(run, startScan, stopScan, testMZVal2, chromToleranceInPPM);
            run.XYData = smoother.Smooth(run.XYData);

            var chromdata2 = run.XYData.TrimData(startScan, stopScan);



            //chromdata1.Display();
            //Console.WriteLine();
            //chromdata2.Display();

            ChromatogramCorrelatorBase correlator = new ChromatogramCorrelator(3);
            double slope       = 0;
            double intercept   = 0;
            double rsquaredVal = 0;

            correlator.GetElutionCorrelationData(chromdata1, chromdata2, out slope, out intercept, out rsquaredVal);


            Console.WriteLine("slope = \t" + slope);
            Console.WriteLine("intercept = \t" + intercept);
            Console.WriteLine("rsquared = \t" + rsquaredVal);


            for (var i = 0; i < chromdata1.Xvalues.Length; i++)
            {
                Console.WriteLine(chromdata1.Xvalues[i] + "\t" + chromdata1.Yvalues[i] + "\t" + chromdata2.Yvalues[i]);
            }
        }
Ejemplo n.º 4
0
        public void TraditionalWorkflowTestOrbitrapData_useThrashV1_test2()
        {
            var parameterFile =
                @"\\protoapps\UserData\Slysz\DeconTools_TestFiles\ParameterFiles\LTQ_Orb\LTQ_Orb_SN2_PeakBR1pt3_PeptideBR1_Thrash_scan6000_9000 - oldThrash.xml";

            var run = new RunFactory().CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1);
            var expectedIsosFile  = Path.Combine(run.DataSetPath, run.DatasetName + "_isos.csv");
            var expectedScansFile = Path.Combine(run.DataSetPath, run.DatasetName + "_scans.csv");
            var expectedPeaksFile = Path.Combine(run.DataSetPath, run.DatasetName + "_peaks.txt");

            if (File.Exists(expectedIsosFile))
            {
                File.Delete(expectedIsosFile);
            }
            if (File.Exists(expectedScansFile))
            {
                File.Delete(expectedScansFile);
            }
            if (File.Exists(expectedPeaksFile))
            {
                File.Delete(expectedPeaksFile);
            }

            var parameters = new DeconToolsParameters();

            parameters.LoadFromOldDeconToolsParameterFile(parameterFile);

            //parameters.MSGeneratorParameters.MinLCScan = 6005;
            //parameters.MSGeneratorParameters.MaxLCScan = 6005;


            var workflow = ScanBasedWorkflow.CreateWorkflow(run, parameters);

            workflow.Execute();

            Assert.IsTrue(File.Exists(expectedIsosFile), "Isos file was not created.");
            Assert.IsTrue(File.Exists(expectedScansFile), "Scans file was not created.");
            Assert.IsTrue(File.Exists(expectedPeaksFile), "Peaks file was not created.");

            var isosImporter = new IsosImporter(expectedIsosFile, run.MSFileType);
            var isos         = isosImporter.Import();

            Assert.AreEqual(186, isos.Count);

            var peakImporter = new PeakImporterFromText(expectedPeaksFile);

            var peaklist = new List <MSPeakResult>();

            peakImporter.ImportPeaks(peaklist);

            Assert.AreEqual(809, peaklist.Count);

            var sumIntensities = isos.Select(p => p.IntensityAggregate).Sum();
            //Assert.AreEqual(263499300d, Math.Round(sumIntensities));

            var sumPeakIntensities = peaklist.Select(p => p.Height).Sum();
            //Assert.AreEqual(605170496.0f, sumPeakIntensities);
        }
Ejemplo n.º 5
0
        public void TraditionalWorkflowTestOrbitrapData_DetectPeaksOnly()
        {
            var parameterFile = FileRefs.ParameterFiles.Orbitrap_Scans6000_6050ParamFile;

            var run = new RunFactory().CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1);
            var expectedIsosFile  = Path.Combine(run.DataSetPath, run.DatasetName + "_isos.csv");
            var expectedScansFile = Path.Combine(run.DataSetPath, run.DatasetName + "_scans.csv");
            var expectedPeaksFile = Path.Combine(run.DataSetPath, run.DatasetName + "_peaks.txt");

            if (File.Exists(expectedIsosFile))
            {
                File.Delete(expectedIsosFile);
            }
            if (File.Exists(expectedScansFile))
            {
                File.Delete(expectedScansFile);
            }
            if (File.Exists(expectedPeaksFile))
            {
                File.Delete(expectedPeaksFile);
            }

            var parameters = new DeconToolsParameters();

            parameters.LoadFromOldDeconToolsParameterFile(parameterFile);
            parameters.ScanBasedWorkflowParameters.DeconvolutionType = Globals.DeconvolutionType.None;

            parameters.MSGeneratorParameters.MinLCScan = 6005;
            parameters.MSGeneratorParameters.MaxLCScan = 6005;


            var workflow = ScanBasedWorkflow.CreateWorkflow(run, parameters);

            workflow.Execute();

            Assert.IsTrue(File.Exists(expectedIsosFile), "Isos file was not created.");
            Assert.IsTrue(File.Exists(expectedScansFile), "Scans file was not created.");
            Assert.IsTrue(File.Exists(expectedPeaksFile), "Peaks file was not created.");


            var peakImporter = new PeakImporterFromText(expectedPeaksFile);

            var peaklist = new List <MSPeakResult>();

            peakImporter.ImportPeaks(peaklist);

            Assert.AreEqual(809, peaklist.Count);


            var isosImporter = new IsosImporter(expectedIsosFile, run.MSFileType);
            var isos         = isosImporter.Import();

            Assert.AreEqual(0, isos.Count);
        }
Ejemplo n.º 6
0
        public static void GetPeaks(Run run, string expectedPeaksFile, BackgroundWorker bw = null)
        {
            if (bw == null)
            {
                bw = new BackgroundWorker
                {
                    WorkerReportsProgress      = true,
                    WorkerSupportsCancellation = true
                };
            }

            var peakImporter = new PeakImporterFromText(expectedPeaksFile, bw);

            peakImporter.ImportPeaks(run.ResultCollection.MSPeakResultList);

            if (!run.PrimaryLcScanNumbers.Any())
            {
                run.PrimaryLcScanNumbers = FindPrimaryLcScanNumbers(run.ResultCollection.MSPeakResultList);
            }
        }
Ejemplo n.º 7
0
        public void importPeaksFromText()
        {
            string testFile = textFilename;

            List <MSPeakResult> peakList = new List <MSPeakResult>();

            PeakImporterFromText importer = new PeakImporterFromText(testFile);

            importer.ImportPeaks(peakList);

            Assert.AreEqual(1096, peakList[1095].PeakID);
            Assert.AreEqual(6005, peakList[1095].Scan_num);
            Assert.AreEqual(754.37393, (decimal)peakList[1095].MSPeak.XValue);
            Assert.AreEqual(3266908, (decimal)peakList[1095].MSPeak.Height);
            Assert.AreEqual(0.0148, (decimal)peakList[1095].MSPeak.Width);
            Assert.AreEqual(32.92, (decimal)peakList[1095].MSPeak.SN);


            Assert.AreEqual(4088, peakList.Count);
        }
Ejemplo n.º 8
0
        public void CorrelationTest2_UsingExecutorMethod()
        {
            var run = new RunFactory().CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1);

            var peakImporter = new PeakImporterFromText(FileRefs.PeakDataFiles.OrbitrapPeakFile_scans5500_6500);

            peakImporter.ImportPeaks(run.ResultCollection.MSPeakResultList);

            var mt = TestUtilities.GetMassTagStandard(1);

            run.CurrentMassTag = mt;

            var unlabelledTheorGenerator = new JoshTheorFeatureGenerator();

            unlabelledTheorGenerator.GenerateTheorFeature(mt);


            double chromToleranceInPPM = 10;
            var    startScan           = 5460;
            var    stopScan            = 5755;

            var smoother = new SavitzkyGolaySmoother(3, 2);

            var peakChromGen = new PeakChromatogramGenerator(chromToleranceInPPM);

            run.XYData = peakChromGen.GenerateChromatogram(run, startScan, stopScan, mt.IsotopicProfile.Peaklist[0].XValue, chromToleranceInPPM);
            run.XYData = smoother.Smooth(run.XYData);

            var result = run.ResultCollection.GetTargetedResult(mt);

            ChromatogramCorrelatorBase correlator = new ChromatogramCorrelator(3);
            var corrData = correlator.CorrelatePeaksWithinIsotopicProfile(run, mt.IsotopicProfile, startScan, stopScan);

            Debug.Assert(corrData.CorrelationDataItems != null, "corrData.CorrelationDataItems != null");
            Assert.AreEqual(0.98m, (decimal)Math.Round((double)corrData.CorrelationDataItems[1].CorrelationRSquaredVal, 2));

            foreach (var item in corrData.CorrelationDataItems)
            {
                Console.WriteLine(item.CorrelationRSquaredVal);
            }
        }
        private void LoadPeaks()
        {
            try
            {
                _peaksFilename = this.Run.DataSetPath + "\\" + this.Run.DatasetName + "_peaks.txt";

                if (!File.Exists(_peaksFilename))
                {
                    GeneralStatusMessage =
                        "Creating chromatogram data (_peaks.txt file); this is only done once. It takes 1 - 5 min .......";
                    var deconParam = (TargetedWorkflowParameters)Workflow.WorkflowParameters;

                    var peakCreationParameters = new PeakDetectAndExportWorkflowParameters();
                    peakCreationParameters.PeakBR = deconParam.ChromGenSourceDataPeakBR;
                    peakCreationParameters.PeakFitType = Globals.PeakFitType.QUADRATIC;
                    peakCreationParameters.SigNoiseThreshold = deconParam.ChromGenSourceDataSigNoise;

                    var peakCreator = new PeakDetectAndExportWorkflow(Run, peakCreationParameters, _backgroundWorker);
                    peakCreator.Execute();
                }
            }
            catch (Exception ex)
            {
                GeneralStatusMessage = ex.Message;
                return;
            }

            GeneralStatusMessage = "Loading chromatogram data (_peaks.txt file) .......";
            try
            {
                PeakImporterFromText peakImporter = new PeakImporterFromText(_peaksFilename, _backgroundWorker);
                peakImporter.ImportPeaks(this.Run.ResultCollection.MSPeakResultList);
            }
            catch (Exception ex)
            {
                GeneralStatusMessage = ex.Message;
                return;
                //throw new ApplicationException("Peaks failed to load. Maybe the details below will help... \n\n" + ex.Message + "\nStacktrace: " + ex.StackTrace, ex);
            }

            if (Run.ResultCollection.MSPeakResultList != null && Run.ResultCollection.MSPeakResultList.Count > 0)
            {
                int numPeaksLoaded = Run.ResultCollection.MSPeakResultList.Count;
                GeneralStatusMessage = "Chromatogram data LOADED. (# peaks= " + numPeaksLoaded + ")";
            }
            else
            {
                GeneralStatusMessage = "No Chromatogram data!!! Check your _peaks.txt file for correct format.";
            }
        }
        public void InitializeRun(string dataset)
        {
            string runFilename;


            if (this.ExecutorParameters.CopyRawFileLocal)
            {
                ReportGeneralProgress("Started copying raw data to local folder: " + this.ExecutorParameters.FolderPathForCopiedRawDataset);

                var attr = File.GetAttributes(dataset);

                DirectoryInfo sourceDirInfo;
                DirectoryInfo targetDirInfo;
                if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    sourceDirInfo = new DirectoryInfo(dataset);
                    runFilename   = Path.Combine(this.ExecutorParameters.FolderPathForCopiedRawDataset, sourceDirInfo.Name);
                    targetDirInfo = new DirectoryInfo(runFilename);
                    FileUtilities.CopyAll(sourceDirInfo, targetDirInfo);
                    ReportGeneralProgress("Copying complete.");
                }
                else
                {
                    var fileinfo = new FileInfo(dataset);
                    sourceDirInfo = fileinfo.Directory;
                    runFilename   = Path.Combine(this.ExecutorParameters.FolderPathForCopiedRawDataset, Path.GetFileName(dataset));

                    targetDirInfo = new DirectoryInfo(this.ExecutorParameters.FolderPathForCopiedRawDataset);

                    if (!File.Exists(runFilename))
                    {
                        FileUtilities.CopyAll(fileinfo, targetDirInfo);
                        ReportGeneralProgress("Copying complete.");
                    }
                    else
                    {
                        ReportGeneralProgress("Datafile already exists on local drive. Using existing datafile.");
                    }
                }
            }
            else
            {
                runFilename = dataset;
            }

            //create Run
            var rf = new RunFactory();

            Run = rf.CreateRun(runFilename);

            var runInstantiationFailed = (Run == null);

            if (runInstantiationFailed)
            {
                ReportGeneralProgress("Run initialization FAILED. Likely a filename problem. Or missing manufacturer .dlls");
                return;
            }
            else
            {
                ReportGeneralProgress("Run initialized successfully.");
            }


            //Retrieve alignment data if it exists
            CopyAlignmentInfoIfExists();



            //check and load chrom source data (_peaks.txt)
            var peaksFileExists = CheckForPeaksFile();

            if (!peaksFileExists)
            {
                ReportGeneralProgress("Creating _Peaks.txt file for extracted ion chromatogram (XIC) source data ... takes 1-5 minutes");

                CreatePeaksForChromSourceData();
                ReportGeneralProgress("Done creating _Peaks.txt file");
            }
            else
            {
                ReportGeneralProgress("Using existing _Peaks.txt file");
            }


            ReportGeneralProgress("Peak loading started...");


            var baseFileName = Path.Combine(this.Run.DataSetPath, this.Run.DatasetName);

            var possibleFilename1 = baseFileName + "_peaks.txt";

            if (File.Exists(possibleFilename1))
            {
                //create background worker so that updates don't go out to console.
                //BackgroundWorker bw = new BackgroundWorker();
                //bw.WorkerSupportsCancellation = true;
                //bw.WorkerReportsProgress = true;

                //TODO: keep an eye on errors connected to background worker here.
                var peakImporter = new PeakImporterFromText(possibleFilename1, _backgroundWorker);

                peakImporter.ImportPeaks(this.Run.ResultCollection.MSPeakResultList);
            }
            else
            {
                ReportGeneralProgress("CRITICAL FAILURE. Chrom source data (_peaks.txt) file not loaded.");
                return;
            }

            // Grab the primary LC Scan numbers if they are not already filled out
            if (!Run.PrimaryLcScanNumbers.Any())
            {
                Run.PrimaryLcScanNumbers = RunUtilities.FindPrimaryLcScanNumbers(this.Run.ResultCollection.MSPeakResultList);
            }

            ReportGeneralProgress("Peak Loading complete.");
            return;
        }
Ejemplo n.º 11
0
        public void TraditionalWorkflowTestOrbitrapData1()
        {
            var parameterFile = FileRefs.ParameterFiles.Orbitrap_Scans6000_6050ParamFile;

            var run = new RunFactory().CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1);
            var expectedIsosFile  = Path.Combine(run.DataSetPath, run.DatasetName + "_isos.csv");
            var expectedScansFile = Path.Combine(run.DataSetPath, run.DatasetName + "_scans.csv");
            var expectedPeaksFile = Path.Combine(run.DataSetPath, run.DatasetName + "_peaks.txt");

            if (File.Exists(expectedIsosFile))
            {
                File.Delete(expectedIsosFile);
            }
            if (File.Exists(expectedScansFile))
            {
                File.Delete(expectedScansFile);
            }
            if (File.Exists(expectedPeaksFile))
            {
                File.Delete(expectedPeaksFile);
            }

            var parameters = new DeconToolsParameters();

            parameters.LoadFromOldDeconToolsParameterFile(parameterFile);
            parameters.ScanBasedWorkflowParameters.DeconvolutionType = Globals.DeconvolutionType.ThrashV1;


            parameters.MSGeneratorParameters.MinLCScan = 6005;
            parameters.MSGeneratorParameters.MaxLCScan = 6005;


            var workflow = ScanBasedWorkflow.CreateWorkflow(run, parameters);

            workflow.Execute();

            Assert.IsTrue(File.Exists(expectedIsosFile), "Isos file was not created.");
            Assert.IsTrue(File.Exists(expectedScansFile), "Scans file was not created.");
            Assert.IsTrue(File.Exists(expectedPeaksFile), "Peaks file was not created.");

            var isosImporter = new IsosImporter(expectedIsosFile, run.MSFileType);
            var isos         = isosImporter.Import();

            Assert.AreEqual(186, isos.Count);

            var peakImporter = new PeakImporterFromText(expectedPeaksFile);

            var peaklist = new List <MSPeakResult>();

            peakImporter.ImportPeaks(peaklist);

            Assert.AreEqual(809, peaklist.Count);

            var sumIntensities = isos.Select(p => p.IntensityAggregate).Sum();

            Assert.AreEqual(266185816d, Math.Round(sumIntensities));

            var sumPeakIntensities = peaklist.Select(p => p.Height).Sum();

            Assert.AreEqual(605170496.0f, sumPeakIntensities);
        }
        private void InitializeRun(string datasetName)
        {
            //Datasets have to all be in the same folder
            //currently works for datasets that have a File reference as
            //opposed to datasets having a Folder reference (Agilent/Bruker)

            DirectoryInfo dirInfo = new DirectoryInfo(_fileInputs.DatasetDirectory);

            var fileInfo = dirInfo.GetFiles(datasetName + ".*");

            if (!fileInfo.Any())
            {
                throw new FileNotFoundException("Run could not be initialized. File not found");
            }

            RunFactory rf = new RunFactory();
            Run = rf.CreateRun(fileInfo.First().FullName);

            bool peaksFileExists = checkForPeaksFile();
            if (!peaksFileExists)
            {
                ReportGeneralProgress("Creating extracted ion chromatogram (XIC) source data... takes 1-5 minutes.. only needs to be done once.");

                CreatePeaksForChromSourceData();
                ReportGeneralProgress("Done creating XIC source data.");
            }

            string baseFileName;
            baseFileName = this.Run.DataSetPath + "\\" + this.Run.DatasetName;

            string expectedPeaksFilename = baseFileName + "_peaks.txt";

            if (File.Exists(expectedPeaksFilename))
            {

                PeakImporterFromText peakImporter = new PeakImporterFromText(expectedPeaksFilename, _backgroundWorker);

                peakImporter.ImportPeaks(this.Run.ResultCollection.MSPeakResultList);
            }
            else
            {
                ReportGeneralProgress(DateTime.Now + "\tCRITICAL FAILURE. Chrom source data (_peaks.txt) file not loaded.");
                return;
            }

            ReportGeneralProgress(DateTime.Now + "\tPeak Loading complete.");
            return;
        }
Ejemplo n.º 13
0
        public void CorrelationTest1()
        {
            //TODO: test something

            var run = new RunFactory().CreateRun(FileRefs.RawDataMSFiles.OrbitrapStdFile1);

            var peakImporter = new PeakImporterFromText(FileRefs.PeakDataFiles.OrbitrapPeakFile_scans5500_6500);

            peakImporter.ImportPeaks(run.ResultCollection.MSPeakResultList);

            var mt = TestUtilities.GetMassTagStandard(1);

            run.CurrentMassTag = mt;

            var unlabelledTheorGenerator = new JoshTheorFeatureGenerator();

            unlabelledTheorGenerator.GenerateTheorFeature(mt);


            double chromToleranceInPPM = 10;
            var    startScan           = 5460;
            var    stopScan            = 5755;

            var smoother = new SavitzkyGolaySmoother(3, 2);

            var peakChromGen = new PeakChromatogramGenerator(chromToleranceInPPM);

            run.XYData = peakChromGen.GenerateChromatogram(run, startScan, stopScan, mt.IsotopicProfile.Peaklist[0].XValue, chromToleranceInPPM);
            run.XYData = smoother.Smooth(run.XYData);

            var chromdata1 = run.XYData.TrimData(startScan, stopScan);


            run.XYData = peakChromGen.GenerateChromatogram(run, startScan, stopScan, mt.IsotopicProfile.Peaklist[3].XValue, chromToleranceInPPM);
            run.XYData = smoother.Smooth(run.XYData);

            var chromdata2 = run.XYData.TrimData(startScan, stopScan);

            //chromdata1.Display();
            //Console.WriteLine();
            //chromdata2.Display();

            ChromatogramCorrelatorBase correlator = new ChromatogramCorrelator(3);
            double slope       = 0;
            double intercept   = 0;
            double rsquaredVal = 0;

            correlator.GetElutionCorrelationData(chromdata1, chromdata2, out slope, out intercept, out rsquaredVal);

            Console.WriteLine(mt);

            Console.WriteLine("slope = \t" + slope);
            Console.WriteLine("intercept = \t" + intercept);
            Console.WriteLine("rsquared = \t" + rsquaredVal);


            for (var i = 0; i < chromdata1.Xvalues.Length; i++)
            {
                Console.WriteLine(chromdata1.Xvalues[i].ToString("0") + "\t" + chromdata1.Yvalues[i].ToString("0") + "\t" + chromdata2.Yvalues[i]);
            }
        }
        public void ChromAnalysisForAllSelectedPrecursors()
        {
            var isDataSmoothed = true;

            var numPointsInSmoothing = 9;
            var smoother             = new DeconTools.Backend.ProcessingTasks.Smoothers.SavitzkyGolaySmoother(numPointsInSmoothing, 2);

            var graphGenerator = new BasicGraphControl();

            var thermoFile1 = @"\\protoapps\UserData\Slysz\DeconTools_TestFiles\Orbitrap\QC_Shew_08_04-pt5-2_11Jan09_Sphinx_08-11-18.RAW";
            var run         = new RunFactory().CreateRun(thermoFile1);

            var outputFolderForChromGraphs = @"\\protoapps\DataPkgs\Public\2012\684_DeconMSn_research1\ChromatogramImages";

            if (!Directory.Exists(outputFolderForChromGraphs))
            {
                Directory.CreateDirectory(outputFolderForChromGraphs);
            }

            var scanSetCollection = new ScanSetCollection();
            var scanStart         = run.MinLCScan;
            var scanStop          = run.MaxLCScan;

            scanSetCollection.Create(run, scanStart, scanStop, 1, 1, true);
            var sb = new StringBuilder();

            var expectedPeaksFile = Path.Combine(run.DataSetPath, run.DatasetName + "_peaks.txt");

            if (!File.Exists(expectedPeaksFile))
            {
                var peakCreatorParams = new PeakDetectAndExportWorkflowParameters();
                peakCreatorParams.PeakBR = 1.75;

                var peakCreator = new PeakDetectAndExportWorkflow(run, peakCreatorParams);
                peakCreator.Execute();
            }

            var peakImporter = new PeakImporterFromText(expectedPeaksFile);

            peakImporter.ImportPeaks(run.ResultCollection.MSPeakResultList);

            double ppmTol = 50;
            var    peakChromatogramGenerator = new PeakChromatogramGenerator(ppmTol, Globals.ChromatogramGeneratorMode.MZ_BASED);
            var    scansetList = scanSetCollection.ScanSetList;

            var scanCounter = 0;
            var currentBin  = 0;

            foreach (var scanSet in scansetList)
            {
                run.CurrentScanSet = scanSet;

                var currentScanLevel = run.GetMSLevel(scanSet.PrimaryScanNumber);


                if (currentScanLevel > 1)
                {
                    scanCounter++;
                    var precursorInfo = run.GetPrecursorInfo(scanSet.PrimaryScanNumber);

                    var scanInfo = run.GetScanInfo(scanSet.PrimaryScanNumber);

                    var scanWindowSize = 400;
                    var startScan      = scanSet.PrimaryScanNumber - scanWindowSize / 2;
                    var stopScan       = scanSet.PrimaryScanNumber + scanWindowSize / 2;

                    run.XYData = peakChromatogramGenerator.GenerateChromatogram(run, startScan, stopScan, precursorInfo.PrecursorMZ, ppmTol);

                    if (run.XYData == null)
                    {
                        run.XYData         = new XYData();
                        run.XYData.Xvalues = new double[] { 0, 1, 2 };
                        run.XYData.Yvalues = new double[] { 0, 1, 2 };

                        Console.WriteLine(scanSet.PrimaryScanNumber + "\t" + precursorInfo.MSLevel + "\t" + precursorInfo.PrecursorMZ +
                                          "\t" + precursorInfo.PrecursorScan + "--------- NO XYData!!! -------------");
                    }
                    else
                    {
                        if (isDataSmoothed)
                        {
                            run.XYData = smoother.Smooth(run.XYData);
                        }
                    }

                    Console.WriteLine(scanSet.PrimaryScanNumber + "\t" + precursorInfo.MSLevel + "\t" + precursorInfo.PrecursorMZ +
                                      "\t" + precursorInfo.PrecursorScan);

                    graphGenerator.GenerateGraph(run.XYData.Xvalues, run.XYData.Yvalues);

                    var line = graphGenerator.GraphPane.CurveList[0] as LineItem;
                    line.Line.IsVisible = true;
                    line.Symbol.Size    = 2;
                    line.Symbol.Type    = SymbolType.Circle;

                    graphGenerator.GraphPane.XAxis.Title.Text          = "scan";
                    graphGenerator.GraphPane.YAxis.Title.Text          = "intensity";
                    graphGenerator.GraphPane.XAxis.Scale.MinAuto       = true;
                    graphGenerator.GraphPane.YAxis.Scale.MinAuto       = false;
                    graphGenerator.GraphPane.YAxis.Scale.Min           = 0;
                    graphGenerator.GraphPane.XAxis.Scale.FontSpec.Size = 12;
                    graphGenerator.AddVerticalLineToGraph(scanSet.PrimaryScanNumber, 3);
                    graphGenerator.AddAnnotationRelativeAxis(scanInfo, 0.3, 0.1);

                    if (scanCounter > 500)
                    {
                        currentBin++;
                        scanCounter = 0;
                    }
                    var currentOutputFolder = Path.Combine(outputFolderForChromGraphs, "bin" + currentBin);
                    if (!Directory.Exists(currentOutputFolder))
                    {
                        Directory.CreateDirectory(currentOutputFolder);
                    }


                    var baseFilename = Path.Combine(currentOutputFolder,
                                                    scanSet.PrimaryScanNumber.ToString().PadLeft(5, '0') + "_mz" + precursorInfo.PrecursorMZ);

                    string outputGraphFilename;

                    string outputXYData;

                    if (isDataSmoothed)
                    {
                        outputGraphFilename = baseFilename + "_smoothed_chrom.png";
                        outputXYData        = baseFilename + "_smoothed_xydata.txt";
                    }
                    else
                    {
                        outputXYData        = baseFilename + "_xydata.txt";
                        outputGraphFilename = baseFilename + "_chrom.png";
                    }


                    graphGenerator.SaveGraph(outputGraphFilename);
                    TestUtilities.WriteToFile(run.XYData, outputXYData);
                }
            }

            Console.WriteLine(sb.ToString());
        }
        private void LoadPeaks()
        {
            try
            {
                _peaksFilename = Path.Combine(this.Run.DataSetPath, this.Run.DatasetName + "_peaks.txt");
                var fiPeaksFile = new FileInfo(_peaksFilename);
                if (!fiPeaksFile.Exists)
                {
                    var alternatePeaksFilePath = Path.Combine(System.IO.Path.GetTempPath(), this.Run.DatasetName + "_peaks.txt");
                    if (File.Exists(alternatePeaksFilePath))
                    {
                        _peaksFilename = alternatePeaksFilePath;
                        fiPeaksFile = new FileInfo(_peaksFilename);
                    }
                }

                if (_recreatePeaksFile || !fiPeaksFile.Exists)
                {
                    _recreatePeaksFile = false;

                    // Make sure we have write access to the folder with the dataset file
                    try
                    {
                        using (var swPeaksfile = new StreamWriter(new FileStream(fiPeaksFile.FullName, FileMode.Create, FileAccess.Write)))
                        {
                            swPeaksfile.WriteLine("Test");
                        }
                    }
                    catch (UnauthorizedAccessException)
                    {
                        // Create the _peaks.txt file in the user's temprorary folder
                        _peaksFilename = Path.Combine(System.IO.Path.GetTempPath(), this.Run.DatasetName + "_peaks.txt");
                        fiPeaksFile = new FileInfo(_peaksFilename);
                    }

                    fiPeaksFile.Refresh();
                    if (fiPeaksFile.Exists)
                        fiPeaksFile.Delete();

                    GeneralStatusMessage =
                        "Creating chromatogram data (_peaks.txt file); this is only done once. It takes 1 - 5 min .......";

                    var peakCreationParameters = new PeakDetectAndExportWorkflowParameters();
                    peakCreationParameters.PeakBR = ChromSourcePeakDetectorPeakBr;
                    peakCreationParameters.PeakFitType = Globals.PeakFitType.QUADRATIC;
                    peakCreationParameters.SigNoiseThreshold = ChromSourcePeakDetectorSigNoise;
                    peakCreationParameters.OutputFolder = fiPeaksFile.Directory.FullName;

                    var peakCreator = new PeakDetectAndExportWorkflow(Run, peakCreationParameters, _backgroundWorker);
                    peakCreator.Execute();
                }
            }
            catch (Exception ex)
            {
                GeneralStatusMessage = ex.Message;
                return;
            }

            GeneralStatusMessage = "Loading chromatogram data (_peaks.txt file) .......";
            try
            {
                PeakImporterFromText peakImporter = new PeakImporterFromText(_peaksFilename, _backgroundWorker);
                peakImporter.ImportPeaks(this.Run.ResultCollection.MSPeakResultList);
            }
            catch (Exception ex)
            {
                GeneralStatusMessage = ex.Message;
                return;
                //throw new ApplicationException("Peaks failed to load. Maybe the details below will help... \n\n" + ex.Message + "\nStacktrace: " + ex.StackTrace, ex);
            }

            if (Run.ResultCollection.MSPeakResultList != null && Run.ResultCollection.MSPeakResultList.Count > 0)
            {
                int numPeaksLoaded = Run.ResultCollection.MSPeakResultList.Count;
                GeneralStatusMessage = "Chromatogram data LOADED. (# peaks= " + numPeaksLoaded + ")";
            }
            else
            {
                GeneralStatusMessage = "No Chromatogram data!!! Check your _peaks.txt file for correct format.";
            }
        }