예제 #1
0
        private static void WritePScans(string fileName,
                                        IRawDataPlus raw,
                                        List <PScan> scans)
        {
            var enumerator = raw.GetFilteredScanEnumerator(" ");

            foreach (var scanNumber in enumerator) // note in my tests serial is faster than Parallel.Foreach() (this involves disk access, so it makes sense)
            {
                //trailer iinformation is extracted via index
                var    trailers      = raw.GetTrailerExtraValues(scanNumber);
                var    trailerLabels = raw.GetTrailerExtraInformation(scanNumber);
                object chargeState   = 0;
                for (int i = 0; i < trailerLabels.Labels.Length; i++)
                {
                    if (trailerLabels.Labels[i] == "Charge State:")
                    {
                        chargeState = raw.GetTrailerExtraValue(scanNumber, i);
                        break;
                    }
                }
                var scanFilter = raw.GetFilterForScanNumber(scanNumber);
                var scanStats  = raw.GetScanStatsForScanNumber(scanNumber);

                CentroidStream centroidStream = new CentroidStream();

                //check for FT mass analyzer data
                if (scanFilter.MassAnalyzer == MassAnalyzerType.MassAnalyzerFTMS)
                {
                    centroidStream = raw.GetCentroidStream(scanNumber, false);
                }
                //check for IT mass analyzer data
                if (scanFilter.MassAnalyzer == MassAnalyzerType.MassAnalyzerITMS)
                {
                    var scanData = raw.GetSimplifiedScan(scanNumber);
                    centroidStream.Masses      = scanData.Masses;
                    centroidStream.Intensities = scanData.Intensities;
                }

                var msOrder = raw.GetScanEventForScanNumber(scanNumber).MSOrder;

                if (msOrder == MSOrderType.Ms)
                {
                    var pscan = GetPScan(scanStats, centroidStream, 1, fileName, Convert.ToInt32(chargeState));
                    scans.Add(pscan);
                }
                if (msOrder == MSOrderType.Ms2)
                {
                    var precursorMz = raw.GetScanEventForScanNumber(scanNumber).GetReaction(0).PrecursorMass;
                    var pscan       = GetPScan(scanStats, centroidStream, 2, fileName, precursorMz, Convert.ToInt32(chargeState));
                    scans.Add(pscan);
                }

                var t = raw.GetTrailerExtraValues(scanNumber);
            }

            WriteScans(scans, fileName);
        }
예제 #2
0
        private static TrailerExtraData ExtractOneTrailerExtra(IRawDataPlus rawFile, int scan, TrailerExtraIndices indices)
        {
            TrailerExtraData trailerExtra = new TrailerExtraData();

            Double[] spsMasses;

            if (indices.InjectionTime != -1)
            {
                trailerExtra.InjectionTime = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.InjectionTime));
            }

            if (indices.ChargeState != -1)
            {
                trailerExtra.ChargeState = Convert.ToInt32(rawFile.GetTrailerExtraValue(scan, indices.ChargeState));
            }

            if (indices.MonoisotopicMZ != -1)
            {
                trailerExtra.MonoisotopicMZ = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.MonoisotopicMZ));
            }

            if (indices.MasterScan != -1)
            {
                try
                {
                    trailerExtra.MasterScan = Convert.ToInt32(rawFile.GetTrailerExtraValue(scan, indices.MasterScan));
                }
                // if that doesn't work the master scan is (hopefully) not applicable, we can leave it at the defaule value of -1
                catch (FormatException)
                {
                }
            }

            if (indices.HCDEnergy != -1)
            {
                var hcd = rawFile.GetTrailerExtraValue(scan, indices.HCDEnergy).ToString();
                if (hcd != "N/A" & hcd != "" & !hcd.All(x => x == ' '))
                {
                    try
                    {
                        trailerExtra.HCDEnergy = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.HCDEnergy));
                    }
                    catch (FormatException)
                    {
                    }
                }
            }

            if (indices.SPSMasses.Count > 2) // if so, this means with have all SPS masses listed individually
            {
                spsMasses = new double[indices.SPSMasses.Count];
                for (int i = 0; i < indices.SPSMasses.Count; i++)
                {
                    spsMasses[i] = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.SPSMasses[i]));
                }
            }
            if (indices.SPSMasses.Count == 0) // there are no SPS masses
            {
                spsMasses = new double[0];
            }
            else // they are broken into two lists of strings, comma delimited
            {
                char[]   delimiter  = { ' ', ',' };
                string[] stringsps1 = rawFile.GetTrailerExtraValue(scan, indices.SPSMasses[0]).ToString().Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
                string[] stringsps2 = rawFile.GetTrailerExtraValue(scan, indices.SPSMasses[1]).ToString().Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
                double[] sps1       = Array.ConvertAll(stringsps1, Convert.ToDouble);
                double[] sps2       = Array.ConvertAll(stringsps2, Convert.ToDouble);
                spsMasses = new double[sps1.Length + sps2.Length];
                sps1.CopyTo(spsMasses, 0);
                sps2.CopyTo(spsMasses, sps1.Length);
            }
            trailerExtra.SPSMasses = spsMasses;
            return(trailerExtra);
        }