Exemplo n.º 1
0
        // second instance method is for ITMS data
        public static QuantData QuantifyOneScan(SegmentedScanData segmentedScan, string labelingReagent)
        {
            (string[] Labels, double[] Masses)reporters = new LabelingReagents().Reagents[labelingReagent];
            QuantData quantData = new QuantData();

            int index;

            for (int i = 0; i < reporters.Masses.Length; i++)
            {
                double mass    = reporters.Masses[i];
                int[]  indices = segmentedScan.Positions.FindAllIndex1((x) =>
                {
                    if (Math.Abs(x - mass) / mass * 1e6 < 10)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                });
                if (indices.Length > 1)
                {
                    double[] massDiff = new double[indices.Length];
                    for (int ix = 0; ix < indices.Length; ix++)
                    {
                        massDiff[ix] = Math.Abs(segmentedScan.Positions[indices[ix]] - mass);
                    }

                    index = Array.Find(indices, (x) => { return(massDiff[x] == massDiff.Min()); });

                    quantData.Add(reporters.Labels[i], new ReporterIon(segmentedScan.Positions[index],
                                                                       segmentedScan.Intensities[index], massDiff[index] / mass * 1e6));
                }
                else
                {
                    if (indices.Length == 1)
                    {
                        index = indices[0];
                        var diff = Math.Abs(segmentedScan.Positions[index] - mass);
                        quantData.Add(reporters.Labels[i], new ReporterIon(segmentedScan.Positions[index],
                                                                           segmentedScan.Intensities[index], diff / mass * 1e6));
                    }
                    else
                    {
                        quantData.Add(reporters.Labels[i], new ReporterIon(0, 0, 0));
                    }
                }
            }
            return(quantData);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        public static void WriteMGF(RawDataCollection rawData, IRawDataPlus rawFile, string outputDirectory, double cutoff = 0, int[] scans = null, double intensityCutoff = 0.01)
        {
            double intCutoff = 0;
            string fileName  = ReadWrite.GetPathToFile(outputDirectory, rawData.rawFileName, ".mgf");

            MassAnalyzerType ms2MassAnalyzer = rawData.methodData.MassAnalyzers[MSOrderType.Ms2];

            List <Operations> operations = new List <Operations> {
                Operations.ScanIndex, Operations.MethodData, Operations.TrailerExtras, Operations.RetentionTimes
            };

            if (ms2MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS)
            {
                operations.Add(Operations.Ms2CentroidStreams);
            }
            else
            {
                operations.Add(Operations.Ms2SegmentedScans);
            }

            CheckIfDone.Check(rawData, rawFile, operations);

            const int BufferSize = 65536;                                                         // 64 Kilobytes

            using (StreamWriter f = new StreamWriter(fileName, false, Encoding.UTF8, BufferSize)) //Open a new file, the MGF file
            {
                // if the scans argument is null, use all scans
                if (scans == null)
                {
                    scans = rawData.scanIndex.ScanEnumerators[MSOrderType.Ms2];
                }

                ProgressIndicator progress = new ProgressIndicator(scans.Count(), String.Format("Writing MGF file"));

                foreach (int i in scans)
                {
                    f.WriteLine("\nBEGIN IONS");
                    f.WriteLine("RAWFILE={0}", rawData.rawFileName);
                    f.WriteLine("TITLE=Spectrum_{0}", i);
                    f.WriteLine("SCAN={0}", i);
                    f.WriteLine("RTINSECONDS={0}", rawData.retentionTimes[i]);
                    f.WriteLine("PEPMASS={0}", rawData.trailerExtras[i].MonoisotopicMZ);
                    f.WriteLine("CHARGE={0}", rawData.trailerExtras[i].ChargeState);

                    if (ms2MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS)
                    {
                        CentroidStreamData centroid = rawData.centroidStreams[i];

                        if (centroid.Intensities.Length > 0)
                        {
                            intCutoff = centroid.Intensities.Max() * intensityCutoff;
                        }
                        else
                        {
                            intCutoff = 0;
                        }

                        for (int j = 0; j < centroid.Masses.Length; j++)
                        {
                            //f.WriteLine(Math.Round(centroid.Masses[j], 4).ToString() + " " + Math.Round(centroid.Intensities[j], 4).ToString());
                            if (centroid.Masses[j] > cutoff & centroid.Intensities[j] > intCutoff)
                            {
                                f.WriteLine("{0} {1}", Math.Round(centroid.Masses[j], 5), Math.Round(centroid.Intensities[j], 4));
                            }
                        }
                    }
                    else
                    {
                        SegmentedScanData segments = rawData.segmentedScans[i];

                        if (segments.Intensities.Length > 0)
                        {
                            intCutoff = segments.Intensities.Max() * intensityCutoff;
                        }
                        else
                        {
                            intCutoff = 0;
                        }

                        for (int j = 0; j < segments.Positions.Length; j++)
                        {
                            if (segments.Positions[j] > cutoff & segments.Intensities[j] > intCutoff)
                            {
                                f.WriteLine("{0} {1}", Math.Round(segments.Positions[j], 5), Math.Round(segments.Intensities[j], 4));
                            }
                        }
                    }

                    f.WriteLine("END IONS");

                    progress.Update();
                }
                progress.Done();
            }
            Utilities.ConsoleUtils.ClearLastLine();
        }