public static void QcDIA(IRawDataPlus rawFile, WorkflowParameters parameters) { rawFile.SelectInstrument(Device.MS, 1); rawFile.CheckIfBoxcar(); ScanIndex Index = Extract.ScanIndices(rawFile); MethodDataContainer methodData = Extract.MethodData(rawFile, Index); CentroidStreamCollection centroidStreams = new CentroidStreamCollection(); SegmentScanCollection segmentScans = new SegmentScanCollection(); (centroidStreams, segmentScans) = Extract.MsData(rawFile: rawFile, index: Index); TrailerExtraCollection trailerExtras = Extract.TrailerExtras(rawFile, Index); RetentionTimeCollection retentionTimes = Extract.RetentionTimes(rawFile, Index); ScanMetaDataCollectionDIA metaData = MetaDataProcessingDIA.AggregateMetaDataDIA(centroidStreams, segmentScans, methodData, trailerExtras, retentionTimes, Index); RawMetricsDataDIA metrics = MetaDataProcessingDIA.GetMetricsDataDIA(metaData, methodData, rawFile.FileName, retentionTimes, Index); QcDataContainer qcData = new QcDataContainer(); qcData.DIA = metrics; QcDataCollection qcDataCollection = QC.QcWorkflow.LoadOrCreateQcCollection(parameters); QC.QcWorkflow.UpdateQcCollection(qcDataCollection, qcData, methodData, rawFile.FileName); }
public static void UniversalDDA(IRawFileThreadManager rawFileThreadManager, WorkflowParameters parameters, QcDataCollection qcDataCollection) { MethodDataContainer methodData; CentroidStreamCollection centroidStreams; SegmentScanCollection segmentScans; TrailerExtraCollection trailerExtras; PrecursorMassCollection precursorMasses; RetentionTimeCollection retentionTimes; ScanEventReactionCollection reactions; ScanMetaDataCollectionDDA metaData = null; PrecursorPeakCollection peakData = null; int nScans; var staticRawFile = rawFileThreadManager.CreateThreadAccessor(); staticRawFile.SelectInstrument(Device.MS, 1); var err = staticRawFile.FileError; if (err.HasError) { Console.WriteLine("ERROR: {0} reports error code: {1}. The associated message is: {2}", Path.GetFileName(staticRawFile.FileName), err.ErrorCode, err.ErrorMessage); Console.WriteLine("Skipping this file"); Log.Error("{FILE} reports error code: {ERRORCODE}. The associated message is: {ERRORMESSAGE}", Path.GetFileName(staticRawFile.FileName), err.ErrorCode, err.ErrorMessage); return; } //staticRawFile.CheckIfBoxcar(); (ScanIndex Index, PrecursorScanCollection precursorScans, ScanDependentsCollections scanDependents) = Extract.ScanIndicesPrecursorsDependents(rawFileThreadManager, MaxProcesses: parameters.MaxProcesses); nScans = Index.ScanEnumerators[MSOrderType.Ms2].Length; using (var rawFile = rawFileThreadManager.CreateThreadAccessor()) { reactions = Extract.ScanEvents(rawFile, Index); methodData = Extract.MethodData(rawFile, Index); (centroidStreams, segmentScans) = Extract.MsData(rawFile: rawFile, index: Index); trailerExtras = Extract.TrailerExtras(rawFile, Index); precursorMasses = Extract.PrecursorMasses(rawFile, precursorScans, trailerExtras, Index); retentionTimes = Extract.RetentionTimes(rawFile, Index); } if (parameters.ParseParams.Parse | parameters.ParseParams.Quant | parameters.ParseParams.Metrics | parameters.RefineMassCharge | parameters.QcParams.QcDirectory != null) { peakData = AnalyzePeaks.AnalyzeAllPeaks(centroidStreams, retentionTimes, precursorMasses, precursorScans, Index, parameters.MaxProcesses); if (parameters.RefineMassCharge) { MonoIsoPredictor.RefineMonoIsoMassChargeValues(parameters, centroidStreams, precursorMasses, trailerExtras, peakData, precursorScans); } metaData = MetaDataProcessingDDA.AggregateMetaDataDDA(centroidStreams, segmentScans, methodData, precursorScans, trailerExtras, precursorMasses, retentionTimes, scanDependents, reactions, Index, parameters.MaxProcesses); } QuantDataCollection quantData = null; if (parameters.ParseParams.Quant) { quantData = Quantification.Quantify(centroidStreams, segmentScans, parameters, methodData, Index); } RawMetricsDataDDA rawMetrics = null; if (parameters.ParseParams.Metrics | parameters.QcParams.QcDirectory != null) { rawMetrics = MetaDataProcessingDDA.GetMetricsDataDDA(metaData, methodData, staticRawFile.FileName, retentionTimes, Index, peakData, precursorScans, quantData); } if (parameters.ParseParams.Metrics) { MetricsWriter.WriteMatrix(rawMetrics, null, staticRawFile.FileName, parameters.ParseParams.OutputDirectory); } if (parameters.ParseParams.Parse | parameters.ParseParams.Quant) { string matrixFileName = ReadWrite.GetPathToFile(parameters.ParseParams.OutputDirectory, staticRawFile.FileName, "_Matrix.txt"); /* * ParseWriter writerDDA = new ParseWriter(matrixFileName, centroidStreams, segmentScans, metaData, retentionTimes, * precursorMasses, precursorScans, peakData, trailerExtras, Index, quantData); * writerDDA.WriteMatrixDDA(methodData.AnalysisOrder); */ MatrixWriter.ParseQuantDDA(matrixFileName, centroidStreams, segmentScans, metaData, retentionTimes, precursorMasses, precursorScans, peakData, trailerExtras, Index, quantData); } if (parameters.ParseParams.WriteMgf) { //ParseWriter writerMGF = new ParseWriter(centroidStreams, segmentScans, parameters, retentionTimes, precursorMasses, precursorScans, trailerExtras, methodData, Index); //writerMGF.WriteMGF(staticRawFile.FileName); MgfWriter.WriteMGF(staticRawFile.FileName, centroidStreams, segmentScans, parameters, retentionTimes, precursorMasses, precursorScans, trailerExtras, methodData, Index); } if (parameters.ParseParams.Chromatogram != null) { ChromatogramWriter.WriteChromatogram(centroidStreams, segmentScans, retentionTimes, methodData, Index, parameters, staticRawFile.FileName); } if (parameters.QcParams.QcDirectory != null) { qcDataCollection = QC.QcWorkflow.LoadOrCreateQcCollection(parameters); SearchMetricsContainer searchMetrics = new SearchMetricsContainer(staticRawFile.FileName, staticRawFile.CreationDate, methodData); // check if the raw file already exists in the QC data with a different name if (QcWorkflow.CheckIfFilePresentInQcCollection(staticRawFile.FileName, qcDataCollection)) { Log.Information("A file with the same creation date and time as {File} already exists in the QC data", staticRawFile.FileName); Console.WriteLine("A file with the same creation date and time as {File} already exists in the QC data. Skipping to next file.", staticRawFile.FileName); } else { if (parameters.QcParams.PerformSearch) { Search.WriteSearchMGF(parameters, centroidStreams, segmentScans, retentionTimes, precursorMasses, precursorScans, trailerExtras, methodData, Index, staticRawFile.FileName, parameters.QcParams.FixedScans); Search.RunSearch(parameters, methodData, staticRawFile.FileName); searchMetrics = SearchQC.ParseSearchResults(searchMetrics, parameters, staticRawFile.FileName, nScans); } QcDataContainer qcData = new QcDataContainer(); qcData.DDA = rawMetrics; qcData.SearchMetrics = searchMetrics; QC.QcWorkflow.UpdateQcCollection(qcDataCollection, qcData, methodData, staticRawFile.FileName); } } }
static int Run(Dictionary <string, object> opts) { if ((bool)opts["ExampleCommands"] == true) { Examples.CommandLineUsage(); Environment.Exit(0); } if ((bool)opts["ExampleModifications"] == true) { Examples.ExampleMods(); Environment.Exit(0); } List <string> files = new List <string>(); QcDataCollection qcDataCollection = new QcDataCollection(); WorkflowParameters parameters = new WorkflowParameters(opts); if (parameters.InputFiles != null) // did the user give us a list of files? { List <string> problems = new List <string>(); files = parameters.InputFiles.ToList(); // check if the list provided contains only .raw files foreach (string file in files) { if (!file.EndsWith(".raw", StringComparison.OrdinalIgnoreCase)) { problems.Add(file); } } if (problems.Count() == 1) { Console.WriteLine("\nERROR: {0} does not appear to be a .raw file. Invoke '>RawTools --help' if you need help.", problems.ElementAt(0)); Log.Error("Invalid file provided: {0}", problems.ElementAt(0)); //Console.Write("Press any key to exit..."); //Console.ReadKey(); return(1); } if (problems.Count() > 1) { Console.WriteLine("\nERROR: The following {0} files do not appear to be .raw files. Invoke '>RawTools --help' if you need help." + "\n\n{1}", problems.Count(), String.Join("\n", problems)); Log.Error("Invalid files provided: {0}", String.Join(" ", problems)); //Console.Write("Press any key to exit..."); //Console.ReadKey(); return(1); } files = RawFileInfo.RemoveInAcquistionFiles(files); // if the file location(s) are relative, we need to get the absolute path to them files.EnsureAbsolutePaths(); Log.Information("Files to be processed, provided as list: {0}", String.Join(" ", files)); } else if (!String.IsNullOrEmpty(parameters.RawFileDirectory)) // did the user give us a directory? { // if QC is being done, use the QC method snf get the qc data collection at the same time if (parameters.QcParams.QcDirectory != null) { (files, qcDataCollection) = QcWorkflow.GetFileListAndQcFile(parameters, parameters.IncludeSubdirectories); } // if not, the parse method else if (Directory.Exists(parameters.RawFileDirectory)) { files = Directory.GetFiles(parameters.RawFileDirectory, "*.*", SearchOption.TopDirectoryOnly) .Where(s => s.EndsWith(".raw", StringComparison.OrdinalIgnoreCase)).ToList(); } else { Console.WriteLine("ERROR: The provided directory does not appear to be valid."); Log.Error("Invalid directory provided: {0}", parameters.RawFileDirectory); //Console.Write("Press any key to exit..."); //Console.ReadKey(); return(1); } files = RawFileInfo.RemoveInAcquistionFiles(files); // if the file location(s) are relative, we need to get the absolute path to them files.EnsureAbsolutePaths(); Log.Information("Files to be processed, provided as directory: {0}", String.Join(" ", files)); } else { Console.WriteLine("ERROR: At least one of the following arguments is required: -f, -d"); Log.Error("No raw files or directory specified."); return(1); } if (parameters.ParseParams.Quant) { List <string> possible = new List <string>() { "TMT0", "TMT2", "TMT6", "TMT10", "TMT11", "iTRAQ4", "iTRAQ8" }; if (!possible.Contains(parameters.ParseParams.LabelingReagents)) { Console.WriteLine("ERROR: For quantification, the labeling reagent must be one of {TMT0, TMT2, TMT6, TMT10, TMT11, iTRAQ4, iTRAQ8}"); Log.Error("Invalid labeling reagent provided: {0}", parameters.ParseParams.LabelingReagents); //Console.Write("Press any key to exit..."); //Console.ReadKey(); return(1); } } if (parameters.ParseParams.Chromatogram != null) { List <string> possible = new List <string>() { "1", "2", "3", "T", "B" }; foreach (var x in parameters.ParseParams.Chromatogram) { if (!possible.Contains(x.ToString())) { Console.WriteLine("ERROR: Incorrect format for -chro. See help."); Log.Error("Invalid chromatogram argument provided: {Chro}", parameters.ParseParams.Chromatogram); //Console.Write("Press any key to exit..."); //Console.ReadKey(); return(1); } } } System.Diagnostics.Stopwatch singleFileTime = new System.Diagnostics.Stopwatch(); System.Diagnostics.Stopwatch totalTime = new System.Diagnostics.Stopwatch(); totalTime.Start(); foreach (string file in files) { singleFileTime.Start(); Console.WriteLine("\nProcessing: {0}\n", file); //using (IRawDataPlus rawFile = RawFileReaderFactory.ReadFile(fileName:file)) using (IRawFileThreadManager rawFile = RawFileReaderFactory.CreateThreadManager(file)) { if (parameters.ParseParams.OutputDirectory == null) { parameters.ParseParams.OutputDirectory = Path.GetDirectoryName(file); } WorkFlowsDDA.UniversalDDA(rawFile, parameters, qcDataCollection); } singleFileTime.Stop(); Console.WriteLine("\nElapsed time: {0} s", Math.Round(Convert.ToDouble(singleFileTime.ElapsedMilliseconds) / 1000.0, 2)); singleFileTime.Reset(); } if (parameters.LogDump) { Write.LogDump.WriteToDisk(parameters); } totalTime.Stop(); Console.WriteLine("\nTime to process all {0} files: {1}", files.Count(), totalTime.Elapsed); //Console.Write("Press any key to exit..."); //Console.ReadKey(); return(0); }
public static void QcDDA(IRawFileThreadManager rawFileThreadManager, WorkflowParameters parameters) { MethodDataContainer methodData; CentroidStreamCollection centroidStreams; SegmentScanCollection segmentScans; TrailerExtraCollection trailerExtras; PrecursorMassCollection precursorMasses; RetentionTimeCollection retentionTimes; ScanEventReactionCollection reactions; var staticRawFile = rawFileThreadManager.CreateThreadAccessor(); staticRawFile.SelectInstrument(Device.MS, 1); staticRawFile.CheckIfBoxcar(); (ScanIndex Index, PrecursorScanCollection precursorScans, ScanDependentsCollections scanDependents) = Extract.ScanIndicesPrecursorsDependents(rawFileThreadManager); using (var rawFile = rawFileThreadManager.CreateThreadAccessor()) { methodData = Extract.MethodData(rawFile, Index); reactions = Extract.ScanEvents(rawFile, Index); (centroidStreams, segmentScans) = Extract.MsData(rawFile: rawFile, index: Index); trailerExtras = Extract.TrailerExtras(rawFile, Index); precursorMasses = Extract.PrecursorMasses(rawFile, precursorScans, trailerExtras, Index); retentionTimes = Extract.RetentionTimes(rawFile, Index); } PrecursorPeakCollection peakData = AnalyzePeaks.AnalyzeAllPeaks(centroidStreams, retentionTimes, precursorMasses, precursorScans, Index); if (parameters.RefineMassCharge) { MonoIsoPredictor.RefineMonoIsoMassChargeValues(centroidStreams, precursorMasses, trailerExtras, peakData, precursorScans); } ScanMetaDataCollectionDDA metaData = MetaDataProcessingDDA.AggregateMetaDataDDA(centroidStreams, segmentScans, methodData, precursorScans, trailerExtras, precursorMasses, retentionTimes, scanDependents, reactions, Index); RawMetricsDataDDA rawMetrics = MetaDataProcessingDDA.GetMetricsDataDDA(metaData, methodData, staticRawFile.FileName, retentionTimes, Index, peakData, precursorScans); QcDataCollection qcDataCollection = QC.QcWorkflow.LoadOrCreateQcCollection(parameters); SearchMetricsContainer searchMetrics = new SearchMetricsContainer(staticRawFile.FileName, staticRawFile.CreationDate, methodData); if (parameters.QcParams.PerformSearch) { Search.WriteSearchMGF(parameters, centroidStreams, segmentScans, retentionTimes, precursorMasses, precursorScans, trailerExtras, methodData, Index, staticRawFile.FileName, parameters.QcParams.FixedScans); Search.RunSearch(parameters, methodData, staticRawFile.FileName); searchMetrics = SearchQC.ParseSearchResults(searchMetrics, parameters, staticRawFile.FileName); } QcDataContainer qcData = new QcDataContainer(); qcData.DDA = rawMetrics; qcData.SearchMetrics = searchMetrics; QC.QcWorkflow.UpdateQcCollection(qcDataCollection, qcData, methodData, staticRawFile.FileName); staticRawFile.Dispose(); }
public static void WriteQcToTable(this QcDataCollection qcData) { if (File.Exists(Path.Combine(qcData.QcDirectory, "QcDataTable.csv"))) { while (Utilities.ReadWrite.IsFileLocked(Path.Combine(qcData.QcDirectory, "QcDataTable.csv"))) { Console.WriteLine("{0} is in use. Please close the file and press any key to continue.", Path.Combine(qcData.QcDirectory, "QcDataTable.csv")); Console.ReadKey(); } } using (StreamWriter f = new StreamWriter(Path.Combine(qcData.QcDirectory, "QcDataTable.csv"), append: false)) { f.WriteLine("DateAcquired,FileName,Instrument,ExperimentMsOrder,Ms1Analyzer,Ms2Analyzer,Ms3Analyzer,TotalAnalysisTime,TotalScans,NumMs1Scans,NumMs2Scans," + "NumMs3Scans,Ms1ScanRate(/s),Ms2ScanRate(/s),Ms3ScanRate(/s),MeanDutyCycle(s),MeanMs2TriggerRate(/Ms1Scan),Ms1MedianSummedIntensity,Ms2MedianSummedIntensity," + "MedianPrecursorIntensity,MedianMs1IsolationInterence,MedianMs2PeakFractionConsumingTop80PercentTotalIntensity,EsiInstabilityFlags(count),MedianMassDrift(ppm)," + "IdentificationRate(IDs/Ms2Scan),DigestionEfficiency,MissedCleavageRate(/PSM),ModificationFrequencyAtNTerm,ModificationFrequencyAtK,ModificationFrequencyAtX," + "MedianMsFillTime(ms),MedianMs2FillTime(ms),MedianMs3FillTime(ms),WidthAt10%H(s),WidthAt50%H(s),AsymmetryAt10%H,AsymmetryAt50%H," + "PeakCapacity,TimeBeforeFirstExceedanceOf10%MaxIntensity,TimeAfterLastExceedanceOf10%MaxIntensity,FractionOfRunAbove10%MaxIntensity,IdChargeRatio3to2,IdChargeRatio4to2,IdentipyParameters"); } List <DateTime> keys = qcData.QcData.Keys.ToList(); keys.Sort(); using (StreamWriter f = new StreamWriter(Path.Combine(qcData.QcDirectory, "QcDataTable.csv"), append: true)) { foreach (DateTime key in keys) { f.Write(qcData.QcData[key].DateAcquired + ","); f.Write(qcData.QcData[key].RawFile + ","); f.Write(qcData.QcData[key].Instrument + ","); f.Write(qcData.QcData[key].ExperimentMsOrder + ","); f.Write(qcData.QcData[key].Ms1Analyzer + ","); f.Write(qcData.QcData[key].Ms2Analyzer + ","); f.Write(qcData.QcData[key].Ms3Analyzer + ","); f.Write(qcData.QcData[key].GradientTime + ","); f.Write(qcData.QcData[key].TotalScans + ","); f.Write(qcData.QcData[key].NumMs1Scans + ","); f.Write(qcData.QcData[key].NumMs2Scans + ","); f.Write(qcData.QcData[key].NumMs3Scans + ","); f.Write(qcData.QcData[key].Ms1ScanRate / 60 + ","); f.Write(qcData.QcData[key].Ms2ScanRate / 60 + ","); f.Write(qcData.QcData[key].Ms3ScanRate / 60 + ","); f.Write(qcData.QcData[key].MeanDutyCycle + ","); f.Write(qcData.QcData[key].MeanTopN + ","); f.Write(qcData.QcData[key].MedianSummedMs1Intensity + ","); f.Write(qcData.QcData[key].MedianSummedMs2Intensity + ","); f.Write(qcData.QcData[key].MedianPrecursorIntensity + ","); f.Write(qcData.QcData[key].MedianMs1IsolationInterference + ","); f.Write(qcData.QcData[key].MedianMs2FractionConsumingTop80PercentTotalIntensity + ","); f.Write(qcData.QcData[key].NumEsiStabilityFlags + ","); f.Write(qcData.QcData[key].MedianMassDrift + ","); //f.Write(qcData.QcData[key].QuantMeta.medianReporterIntensity + ","); f.Write(qcData.QcData[key].IdentificationRate + ","); f.Write(qcData.QcData[key].DigestionEfficiency + ","); f.Write(qcData.QcData[key].MissedCleavageRate + ","); f.Write(qcData.QcData[key].LabelingEfficiencyAtNTerm + ","); f.Write(qcData.QcData[key].LabelingEfficiencyAtK + ","); f.Write(qcData.QcData[key].LabelingEfficiencyAtX + ","); f.Write(qcData.QcData[key].Ms1FillTime.P50 + ","); f.Write(qcData.QcData[key].Ms2FillTime.P50 + ","); f.Write(qcData.QcData[key].Ms3FillTime.P50 + ","); f.Write(qcData.QcData[key].PeakShape.Width.P10 * 60 + ","); f.Write(qcData.QcData[key].PeakShape.Width.P50 * 60 + ","); f.Write(qcData.QcData[key].PeakShape.Asymmetry.P10 + ","); f.Write(qcData.QcData[key].PeakShape.Asymmetry.P50 + ","); f.Write(qcData.QcData[key].ColumnPeakCapacity + ","); f.Write(qcData.QcData[key].TimeBeforeFirstScanToExceedPoint1MaxIntensity + ","); f.Write(qcData.QcData[key].TimeAfterLastScanToExceedPoint1MaxIntensity + ","); f.Write(qcData.QcData[key].FractionOfRunAbovePoint1MaxIntensity + ","); f.Write(qcData.QcData[key].ChargeRatio3to2 + ","); f.Write(qcData.QcData[key].ChargeRatio4to2 + ","); f.Write(qcData.QcData[key].IdentipyParameters + "\n"); } } Console.WriteLine("Finished writing QC data to csv\n"); }