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 Dictionary <int, double> Top80Frac(CentroidStreamCollection centroidStreams, SegmentScanCollection segmentScans, ScanIndex index) { ConcurrentDictionary <int, double> top80 = new ConcurrentDictionary <int, double>(); int chunkSize = Constants.MultiThreading.ChunkSize(index.allScans.Keys.Count()); var batches = index.allScans.Keys.Chunk(chunkSize); Parallel.ForEach(batches, Constants.MultiThreading.Options(), batch => { foreach (int scan in batch) { if (index.allScans[scan].MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS) { top80.AddOrUpdate(scan, centroidStreams[scan].Intensities.FractionOfScansConsumingTotalIntensity(percent: 80), (a, b) => b); } else { top80.AddOrUpdate(scan, segmentScans[scan].Intensities.FractionOfScansConsumingTotalIntensity(percent: 80), (a, b) => b); } } }); var topOut = new Dictionary <int, double>(); foreach (var item in top80) { topOut.Add(item.Key, item.Value); } return(topOut); }
public static Dictionary <int, double> SummedIntensities(CentroidStreamCollection centroidStreams, SegmentScanCollection segmentScans, ScanIndex index) { ConcurrentDictionary <int, double> summedInt = new ConcurrentDictionary <int, double>(); int chunkSize = Constants.MultiThreading.ChunkSize(index.allScans.Keys.Count()); var batches = index.allScans.Keys.Chunk(chunkSize); Parallel.ForEach(batches, Constants.MultiThreading.Options(), batch => { foreach (int scan in batch) { if (index.allScans[scan].MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS) { summedInt.AddOrUpdate(scan, centroidStreams[scan].Intensities.Sum(), (a, b) => b); } else { summedInt.AddOrUpdate(scan, segmentScans[scan].Intensities.Sum(), (a, b) => b); } } }); var sumsOut = new Dictionary <int, double>(); foreach (var item in summedInt) { sumsOut.Add(item.Key, item.Value); } return(sumsOut); }
public static Dictionary <int, Distribution> IntensityDistributions(CentroidStreamCollection centroidStreams, SegmentScanCollection segmentScans, ScanIndex index) { ConcurrentDictionary <int, Distribution> intDist = new ConcurrentDictionary <int, Distribution>(); int chunkSize = Constants.MultiThreading.ChunkSize(index.allScans.Keys.Count()); var batches = index.allScans.Keys.Chunk(chunkSize); Parallel.ForEach(batches, Constants.MultiThreading.Options(), batch => { foreach (int scan in batch) { if (index.allScans[scan].MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS) { intDist.AddOrUpdate(scan, new Distribution(centroidStreams[scan].Intensities), (a, b) => b); } else { intDist.AddOrUpdate(scan, new Distribution(segmentScans[scan].Intensities), (a, b) => b); } } }); Dictionary <int, Distribution> distOut = new Dictionary <int, Distribution>(); foreach (var item in intDist) { distOut.Add(item.Key, item.Value); } return(distOut); }
public static (CentroidStreamCollection centroids, SegmentScanCollection segments) MsData(IRawDataPlus rawFile, ScanIndex index) { rawFile.SelectInstrument(Device.MS, 1); CentroidStreamCollection centroids = new CentroidStreamCollection(); SegmentScanCollection segments = new SegmentScanCollection(); CentroidStream centroid; SegmentedScan segment; var scans = index.allScans; //var lockTarget = new object(); // this is so we can keep track of progress in the parallel loop ProgressIndicator P = new ProgressIndicator(scans.Count(), "Extracting scan data"); P.Start(); foreach (int scan in scans.Keys) { // first get out the mass spectrum if (index.allScans[scan].MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS) { centroid = rawFile.GetCentroidStream(scan, false); centroids[scan] = new CentroidStreamData(centroid); } else { segment = rawFile.GetSegmentedScanFromScanNumber(scan, null); segments[scan] = new SegmentedScanData(segment); } //lock (lockTarget) //{ // P.Update(); //} P.Update(); } P.Done(); return(centroids, segments); }
public static void WriteSearchMGF(WorkflowParameters parameters, CentroidStreamCollection centroids, SegmentScanCollection segments, RetentionTimeCollection retentionTimes, PrecursorMassCollection precursorMasses, PrecursorScanCollection precursorScans, TrailerExtraCollection trailerExtras, MethodDataContainer methodData, ScanIndex index, string rawFileName, bool fixedScans = false) { var pars = parameters.QcParams.SearchParameters; int[] scans = AdditionalMath.SelectRandomScans(scans: index.ScanEnumerators[MSOrderType.Ms2], num: parameters.QcParams.NumberSpectra, fixedScans: parameters.QcParams.FixedScans); string mgfFile = ReadWrite.GetPathToFile(parameters.QcParams.QcSearchDataDirectory, rawFileName, ".mgf"); MgfWriter.WriteMGF(rawFileName, centroids, segments, parameters, retentionTimes, precursorMasses, precursorScans, trailerExtras, methodData, index, outputFile: mgfFile, scans: scans); }
public static ScanMetaDataCollectionDDA AggregateMetaDataDDA(CentroidStreamCollection centroidStreams, SegmentScanCollection segmentScans, MethodDataContainer methodData, PrecursorScanCollection precursorScans, TrailerExtraCollection trailerExtras, PrecursorMassCollection precursorMasses, RetentionTimeCollection retentionTimes, ScanDependentsCollections scanDependents, ScanEventReactionCollection reactions, ScanIndex index) { //ProgressIndicator progress = new ProgressIndicator(index.ScanEnumerators[MSOrderType.Any].Count(), // "Formatting scan meta data"); ScanMetaDataCollectionDDA metaData = new ScanMetaDataCollectionDDA(); int[] scans = index.ScanEnumerators[MSOrderType.Any]; double isoWindow = MetaDataCalculations.Ms1IsoWindow(methodData); Console.WriteLine("Calculating meta data"); Console.WriteLine(" MS1 isolation interference"); metaData.Ms1IsolationInterference = MetaDataCalculations.Ms1Interference(centroidStreams, precursorMasses, trailerExtras, precursorScans, reactions, index); Console.WriteLine(" MS2 scan cycle density"); metaData.MS2ScansPerCycle = MetaDataCalculations.MS2ScansPerCycle(scanDependents, index); Console.WriteLine(" Ion injection time"); metaData.FillTime = MetaDataCalculations.FillTimes(trailerExtras, index); Console.WriteLine(" Duty cycle"); metaData.DutyCycle = MetaDataCalculations.DutyCycle(retentionTimes, index); Console.WriteLine(" Intensity distribution"); metaData.IntensityDistribution = MetaDataCalculations.IntensityDistributions(centroidStreams, segmentScans, index); Console.WriteLine(" Summed intensities"); metaData.SummedIntensity = MetaDataCalculations.SummedIntensities(centroidStreams, segmentScans, index); metaData.FractionConsumingTop80PercentTotalIntensity = MetaDataCalculations.Top80Frac(centroidStreams, segmentScans, index); //Task.WaitAll(); return(metaData); }
public static ScanMetaDataCollectionDIA AggregateMetaDataDIA(CentroidStreamCollection centroidStreams, SegmentScanCollection segmentScans, MethodDataContainer methodData, TrailerExtraCollection trailerExtras, RetentionTimeCollection retentionTimes, ScanIndex index, int maxProcesses) { //ProgressIndicator progress = new ProgressIndicator(index.ScanEnumerators[MSOrderType.Any].Count(), // "Formatting scan meta data"); ScanMetaDataCollectionDIA metaData = new ScanMetaDataCollectionDIA(); int[] scans = index.ScanEnumerators[MSOrderType.Any]; double isoWindow = MetaDataCalculations.Ms1IsoWindow(methodData); Console.WriteLine("Aggregating meta data"); metaData.FillTime = MetaDataCalculations.FillTimes(trailerExtras, index); metaData.DutyCycle = MetaDataCalculations.DutyCycle(retentionTimes, index); metaData.IntensityDistribution = MetaDataCalculations.IntensityDistributions(centroidStreams, segmentScans, index, maxProcesses); metaData.SummedIntensity = MetaDataCalculations.SummedIntensities(centroidStreams, segmentScans, index, maxProcesses); metaData.FractionConsumingTop80PercentTotalIntensity = MetaDataCalculations.Top80Frac(centroidStreams, segmentScans, index, maxProcesses); //Task.WaitAll(); return(metaData); }
public static QuantDataCollection Quantify(CentroidStreamCollection centroidScans, SegmentScanCollection segmentScans, WorkflowParameters parameters, MethodDataContainer methodData, ScanIndex index) { int[] scans = index.ScanEnumerators[index.AnalysisOrder]; QuantDataCollection quantData = new QuantDataCollection(); ProgressIndicator progress = new ProgressIndicator(scans.Length, "Quantifying reporter ions"); string labelingReagents = parameters.ParseParams.LabelingReagents; quantData.LabelingReagents = labelingReagents; foreach (int scan in scans) { if (methodData.QuantAnalyzer == MassAnalyzerType.MassAnalyzerFTMS) { quantData.Add(scan, QuantifyReporters.QuantifyOneScan(centroidScans[scan], labelingReagents)); } else { quantData.Add(scan, QuantifyReporters.QuantifyOneScan(segmentScans[scan], labelingReagents)); } progress.Update(); } progress.Done(); return(quantData); }