コード例 #1
0
        /// <summary>
        /// Reads the base peak chromatogram for the RAW file
        /// </summary>
        /// <param name="rawFile">
        /// The RAW file being read
        /// </param>
        /// <param name="startScan">
        /// Start scan for the chromatogram
        /// </param>
        /// <param name="endScan">
        /// End scan for the chromatogram
        /// </param>
        /// <param name="outputData">
        /// The output data flag.
        /// </param>
        /// <param name="filter">
        /// The chromatic filter flag.
        /// </param>
        private static void GetChromatogram(IRawDataPlus rawFile, int startScan, int endScan, string filename, string filter = "ms")
        {
            if (IsValidFilter(rawFile, filter) == false)
            {
                Console.WriteLine("# '{0}' is not a valid filter string.", filter);
                return;
            }

            using (System.IO.StreamWriter file =
                       new System.IO.StreamWriter(filename))
            {
                // TODO([email protected]): check mass interval for chromatograms and its dep for diff MS detector types
                // TODO([email protected]): return mass intervals to the R enviroment
                // Define the settings for getting the Base Peak chromatogram
                ChromatogramTraceSettings settingsTIC = new ChromatogramTraceSettings(TraceType.TIC)
                {
                    Filter = filter
                };
                ChromatogramTraceSettings settingsBasePeak = new ChromatogramTraceSettings(TraceType.BasePeak)
                {
                    Filter     = filter,
                    MassRanges = new[] { ThermoFisher.CommonCore.Data.Business.Range.Create(100, 1805) }
                };
                ChromatogramTraceSettings settingsMassRange = new ChromatogramTraceSettings(TraceType.MassRange)
                {
                    Filter     = filter,
                    MassRanges = new[] { ThermoFisher.CommonCore.Data.Business.Range.Create(50, 2000000) }
                };

                // Get the chromatogram from the RAW file.
                var dataTIC       = rawFile.GetChromatogramData(new IChromatogramSettings[] { settingsTIC }, startScan, endScan);
                var dataMassRange = rawFile.GetChromatogramData(new IChromatogramSettings[] { settingsMassRange }, startScan, endScan);
                var dataBasePeak  = rawFile.GetChromatogramData(new IChromatogramSettings[] { settingsBasePeak }, startScan, endScan);

                // Split the data into the chromatograms
                var traceTIC       = ChromatogramSignal.FromChromatogramData(dataTIC);
                var traceMassRange = ChromatogramSignal.FromChromatogramData(dataMassRange);
                var traceBasePeak  = ChromatogramSignal.FromChromatogramData(dataBasePeak);


                if (traceBasePeak[0].Length > 0)
                {
                    // Print the chromatogram data (time, intensity values)
                    file.WriteLine("# TIC chromatogram ({0} points)", traceTIC[0].Length);
                    file.WriteLine("# Base Peak chromatogram ({0} points)", traceBasePeak[0].Length);
                    file.WriteLine("# MassRange chromatogram ({0} points)", traceMassRange[0].Length);

                    file.WriteLine("rt;intensity.BasePeak;intensity.TIC;intensity.MassRange");

                    for (int i = 0; i < traceBasePeak[0].Length; i++)
                    {
                        file.WriteLine("{1:F3};{2:F0};{3:F0};{4:F0}", i, traceBasePeak[0].Times[i], traceBasePeak[0].Intensities[i], traceTIC[0].Intensities[i], traceMassRange[0].Intensities[i]);
                    }
                }
                file.WriteLine();
            }
        }
コード例 #2
0
        public double[][] Data()
        {
            double[][] data = new double[2][];

            // next make a request for the filtered chromatogram.
            // Define settings for XIC
            ChromatogramTraceSettings traceSettings =
                new ChromatogramTraceSettings(TraceType.MassRange)
            {
                Filter     = filterMS,
                MassRanges = new[] { new Range(mass, mass) }
            };

            // create the array of chromatogram settings
            IChromatogramSettings[] allSettings = { traceSettings };

            // set tolerance of +/- whatever ppm
            MassOptions tolerance = new MassOptions()
            {
                Tolerance = ppm, ToleranceUnits = ToleranceUnits.ppm
            };

            // read the chromatogram
            var chroData = rawFile.GetChromatogramData(allSettings, -1, -1, tolerance);

            data[0] = chroData.PositionsArray.ToArray()[0];
            data[1] = chroData.IntensitiesArray.ToArray()[0];

            return(data);
        }
コード例 #3
0
        public double[] GetXIC(double[] massList, double ppmError, string filter = "ms")
        {
            List <double> L = new List <double>();
            List <ChromatogramTraceSettings> settingList = new List <ChromatogramTraceSettings>();

            foreach (var mass in massList)
            {
                double massError = (0.5 * ppmError * mass) / 1000000;
                ChromatogramTraceSettings settings = new ChromatogramTraceSettings(TraceType.MassRange)
                {
                    Filter     = filter,
                    MassRanges = new[] { ThermoFisher.CommonCore.Data.Business.Range.Create(mass - massError, mass + massError) }
                };
                settingList.Add(settings);
            }

            IChromatogramSettings[] allSettings = settingList.ToArray();
            var data   = rawFile.GetChromatogramData(allSettings, this.GetFirstScanNumber(), this.GetLastScanNumber());
            var traces = ChromatogramSignal.FromChromatogramData(data);

            foreach (var t in traces)
            {
                foreach (int j in Enumerable.Range(0, t.Times.Count))
                {
                    L.Add(t.Times[j]);
                    L.Add(t.Intensities[j]);
                }
            }
            return(L.ToArray());
        }
コード例 #4
0
ファイル: fgcz-xic.cs プロジェクト: coreforlife/c4lProteomics
        private static void GetXIC(IRawDataPlus rawFile, int startScan, int endScan, List <double> massList,
                                   double ppmError, string filename)
        {
            List <ChromatogramTraceSettings> settingList = new List <ChromatogramTraceSettings>();


            foreach (var mass in massList)
            {
                double massError = (0.5 * ppmError * mass) / 1000000;
                ChromatogramTraceSettings settings = new ChromatogramTraceSettings(TraceType.MassRange)
                {
                    Filter     = "ms",
                    MassRanges = new[] { Range.Create(mass - massError, mass + massError) }
                };

                settingList.Add(settings);
            }

            IChromatogramSettings[] allSettings = settingList.ToArray();

            var data = rawFile.GetChromatogramData(allSettings, startScan, endScan);

            /// compose JSON string
            string        json = "";
            List <string> L    = new List <string>();

            // Split the data into the chromatograms
            var trace = ChromatogramSignal.FromChromatogramData(data);

            for (int i = 0; i < trace.Length; i++)
            {
                List <double> tTime        = new List <double>();
                List <double> tIntensities = new List <double>();

                for (int j = 0; j < trace[i].Times.Count; j++)
                {
                    if (trace[i].Intensities[j] > 0)
                    {
                        tTime.Add(trace[i].Times[j]);
                        tIntensities.Add(trace[i].Intensities[j]);
                    }
                }
                //  file.WriteLine("\t{\n");

                json = string.Format("\t\"mass\": {0},\n", massList[i]) +
                       string.Format("\t\"rt\": [\n\t\t\t" + string.Join(",\n\t\t\t", tTime) + "\n\t\t],") +
                       string.Format("\n\t\"intensities\": [\n\t\t\t" + string.Join(",\n\t\t\t", tIntensities) + "\n\t\t]");

                L.Add("\t{\n" + json + "\n\t}");
            }

            using (System.IO.StreamWriter file =
                       new System.IO.StreamWriter(filename))
            {
                file.WriteLine("[\n" + string.Join(",\n", L) + "\n]\n");
            }
        }
コード例 #5
0
        /// <summary>
        /// Calculate the precursor peak intensity.
        /// </summary>
        /// <param name="rawFile">the RAW file object</param>
        /// <param name="precursorScanNumber">the precursor scan number</param>
        /// <param name="precursorMass">the precursor mass</param>
        protected static double?CalculatePrecursorPeakIntensity(IRawDataPlus rawFile, int precursorScanNumber,
                                                                double precursorMass)
        {
            double?precursorIntensity = null;

            // Get the scan from the RAW file
            var scan = Scan.FromFile(rawFile, precursorScanNumber);

            // Check if the scan has a centroid stream
            if (scan.HasCentroidStream)
            {
                var centroidStream = rawFile.GetCentroidStream(precursorScanNumber, false);
                if (scan.CentroidScan.Length > 0)
                {
                    for (var i = 0; i < centroidStream.Length; i++)
                    {
                        if (Math.Abs(precursorMass - centroidStream.Masses[i]) < Tolerance)
                        {
                            //Console.WriteLine(Math.Abs(precursorMass - centroidStream.Masses[i]));
                            //Console.WriteLine(precursorMass + " - " + centroidStream.Masses[i] + " - " +
                            //                  centroidStream.Intensities[i]);
                            precursorIntensity = centroidStream.Intensities[i];
                            break;
                        }
                    }
                }
            }
            else
            {
                rawFile.SelectInstrument(Device.MS, 1);

                IChromatogramSettings[] allSettings =
                {
                    new ChromatogramTraceSettings(TraceType.BasePeak)
                    {
                        Filter     = MsFilter,
                        MassRanges = new[]
                        {
                            new Range(precursorMass, precursorMass)
                        }
                    }
                };

                var data = rawFile.GetChromatogramData(allSettings, precursorScanNumber,
                                                       precursorScanNumber);
                var chromatogramTrace = ChromatogramSignal.FromChromatogramData(data);
                if (!chromatogramTrace.IsNullOrEmpty())
                {
                    precursorIntensity = chromatogramTrace[0].Intensities[0];
                }
            }

            return(precursorIntensity);
        }
コード例 #6
0
        /// <summary>
        /// Get the spectrum intensity.
        /// </summary>
        /// <param name="rawFile">the RAW file object</param>
        /// <param name="precursorScanNumber">the precursor scan number</param>
        protected static double GetPrecursorIntensity(IRawDataPlus rawFile, int precursorScanNumber)
        {
            // Define the settings for getting the Base Peak chromatogram
            var settings = new ChromatogramTraceSettings(TraceType.BasePeak);

            // Get the chromatogram from the RAW file.
            var data = rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, precursorScanNumber,
                                                   precursorScanNumber);

            // Split the data into the chromatograms
            var trace = ChromatogramSignal.FromChromatogramData(data);

            return(trace[0].Intensities[0]);
        }
コード例 #7
0
        private static IChromatogramData GetChromatogramData(IRawDataPlus rawFile, IChromatogramSettings settings,
                                                             int firstScanNumber, int lastScanNumber)
        {
            IChromatogramData data = null;

            try
            {
                data = rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, firstScanNumber,
                                                   lastScanNumber);
            }
            catch (InvalidFilterFormatException ex)
            {
                Log.Warn($"Invalid filter string {settings.Filter}");
            }
            catch (InvalidFilterCriteriaException ex)
            {
                Log.Warn($"Invalid filter string {settings.Filter}");
            }

            return(data);
        }
コード例 #8
0
        /// <summary>
        /// Get and set chromatogram data from the raw file
        /// </summary>
        /// <param name="inputRawFile"></param>
        private void GetChromatogramData(IRawDataPlus inputRawFile)
        {
            try
            {
                //Get mass resolution for the run from the header
                MassResolution = inputRawFile.RunHeaderEx.MassResolution;

                // Find startScan and endScan
                int startScan = inputRawFile.RunHeader.FirstSpectrum;
                int endScan   = inputRawFile.RunHeader.LastSpectrum;

                //Set up settings to extract the data
                ChromatogramTraceSettings traceSettings =
                    new ChromatogramTraceSettings(TraceType.MassRange)
                {
                    Filter     = FILTER_MS,
                    MassRanges = new[] { new Range(LowMass, HighMass) }
                };
                IChromatogramSettings[] allSettings = { traceSettings };

                MassOptions massOptions = new MassOptions()
                {
                    Tolerance = Tolerance, ToleranceUnits = ToleranceUnits
                };
                var chromatogramData = inputRawFile.GetChromatogramData(allSettings, startScan, endScan, massOptions); //get all chromatogram data

                // Get data from the chromatogram
                ScanNumList       = chromatogramData.ScanNumbersArray[0];
                ExactMassList     = chromatogramData.PositionsArray[0];   //get positions  of each scan
                MassIntensityList = chromatogramData.IntensitiesArray[0]; //get list of intensities for scan numbers
            }
            catch (Exception ex)
            {
                Console.Write("Error in accessing chromatogram data: " + ex);
            }
        }
コード例 #9
0
        /// <summary>
        /// Construct the chromatogram element(s)
        /// </summary>
        /// <param name="firstScanNumber">the first scan number</param>
        /// <param name="lastScanNumber">the last scan number</param>
        /// <returns>a list of chromatograms</returns>
        private List <ChromatogramType> ConstructChromatograms(int firstScanNumber, int lastScanNumber)
        {
            var chromatograms = new List <ChromatogramType>();

            // Define the settings for getting the Base Peak chromatogram
            var settings = new ChromatogramTraceSettings(TraceType.BasePeak);

            // Get the chromatogram from the RAW file.
            var data = _rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, firstScanNumber,
                                                    lastScanNumber);

            // Split the data into the chromatograms
            var trace = ChromatogramSignal.FromChromatogramData(data);

            for (var i = 0; i < trace.Length; i++)
            {
                if (trace[i].Length > 0)
                {
                    // Binary data array list
                    var binaryData = new List <BinaryDataArrayType>();

                    var chromatogram = new ChromatogramType
                    {
                        index = i.ToString(),
                        id    = "base_peak_" + i,
                        defaultArrayLength  = 0,
                        binaryDataArrayList = new BinaryDataArrayListType
                        {
                            count           = "2",
                            binaryDataArray = new BinaryDataArrayType[2]
                        },
                        cvParam = new CVParamType[1]
                    };
                    chromatogram.cvParam[0] = new CVParamType
                    {
                        accession = "MS:1000235",
                        name      = "total ion current chromatogram",
                        cvRef     = "MS",
                        value     = ""
                    };

                    // Chromatogram times
                    if (!trace[i].Times.IsNullOrEmpty())
                    {
                        // Set the chromatogram default array length
                        chromatogram.defaultArrayLength = trace[i].Times.Count;

                        var timesBinaryData =
                            new BinaryDataArrayType
                        {
                            binary = GetZLib64BitArray(trace[i].Times)
                        };
                        timesBinaryData.encodedLength =
                            (4 * Math.Ceiling((double)timesBinaryData
                                              .binary.Length / 3)).ToString(CultureInfo.InvariantCulture);
                        timesBinaryData.cvParam =
                            new CVParamType[3];
                        timesBinaryData.cvParam[0] =
                            new CVParamType
                        {
                            accession     = "MS:1000595",
                            name          = "time array",
                            cvRef         = "MS",
                            unitName      = "minute",
                            value         = "",
                            unitCvRef     = "UO",
                            unitAccession = "UO:0000031"
                        };
                        timesBinaryData.cvParam[1] =
                            new CVParamType
                        {
                            accession = "MS:1000523",
                            name      = "64-bit float",
                            cvRef     = "MS",
                            value     = ""
                        };
                        timesBinaryData.cvParam[2] =
                            new CVParamType
                        {
                            accession = "MS:1000574",
                            name      = "zlib compression",
                            cvRef     = "MS",
                            value     = ""
                        };

                        binaryData.Add(timesBinaryData);
                    }

                    // Chromatogram intensities
                    if (!trace[i].Times.IsNullOrEmpty())
                    {
                        // Set the spectrum default array length if necessary
                        if (chromatogram.defaultArrayLength == 0)
                        {
                            chromatogram.defaultArrayLength = trace[i].Intensities.Count;
                        }

                        var intensitiesBinaryData =
                            new BinaryDataArrayType
                        {
                            binary = GetZLib64BitArray(trace[i].Intensities)
                        };
                        intensitiesBinaryData.encodedLength =
                            (4 * Math.Ceiling((double)intensitiesBinaryData
                                              .binary.Length / 3)).ToString(CultureInfo.InvariantCulture);
                        intensitiesBinaryData.cvParam =
                            new CVParamType[3];
                        intensitiesBinaryData.cvParam[0] =
                            new CVParamType
                        {
                            accession     = "MS:1000515",
                            name          = "intensity array",
                            cvRef         = "MS",
                            unitName      = "number of counts",
                            value         = "",
                            unitCvRef     = "MS",
                            unitAccession = "MS:1000131"
                        };
                        intensitiesBinaryData.cvParam[1] =
                            new CVParamType
                        {
                            accession = "MS:1000523",
                            name      = "64-bit float",
                            cvRef     = "MS",
                            value     = ""
                        };
                        intensitiesBinaryData.cvParam[2] =
                            new CVParamType
                        {
                            accession = "MS:1000574",
                            name      = "zlib compression",
                            cvRef     = "MS",
                            value     = ""
                        };

                        binaryData.Add(intensitiesBinaryData);
                    }

                    if (!binaryData.IsNullOrEmpty())
                    {
                        chromatogram.binaryDataArrayList = new BinaryDataArrayListType
                        {
                            count           = binaryData.Count.ToString(),
                            binaryDataArray = binaryData.ToArray()
                        };
                    }

                    chromatograms.Add(chromatogram);
                }
            }

            return(chromatograms);
        }
コード例 #10
0
        /// <summary>
        /// Get the spectrum intensity.
        /// </summary>
        /// <param name="rawFile">the RAW file object</param>
        /// <param name="precursorScanNumber">the precursor scan number</param>
        /// <param name="precursorMass">the precursor mass</param>
        /// <param name="retentionTime">the retention time</param>
        /// <param name="isolationWidth">the isolation width</param>
        protected static double? GetPrecursorIntensity(IRawDataPlus rawFile, int precursorScanNumber,
            double precursorMass, double retentionTime, double? isolationWidth)
        {
            double? precursorIntensity = null;

            // Get the scan from the RAW file
            var scan = Scan.FromFile(rawFile, precursorScanNumber);

            // Check if the scan has a centroid stream
            if (scan.HasCentroidStream)
            {
                var centroidStream = rawFile.GetCentroidStream(precursorScanNumber, false);
                if (scan.CentroidScan.Length > 0)
                {
                    for (var i = 0; i < centroidStream.Length; i++)
                    {
                        if (Math.Abs(precursorMass - centroidStream.Masses[i]) < Tolerance)
                        {
                            //Console.WriteLine(Math.Abs(precursorMass - centroidStream.Masses[i]));
                            //Console.WriteLine(precursorMass + " - " + centroidStream.Masses[i] + " - " +
                            //                  centroidStream.Intensities[i]);
                            precursorIntensity = centroidStream.Intensities[i];
                            break;
                        }
                    }
                }
            }
            else
            {
                rawFile.SelectInstrument(Device.MS, 1);

                var component = new Component
                {
                    MassRange = new Limit
                    {
                        Low = (double) (precursorMass - isolationWidth / 2),
                        High = (double) (precursorMass + isolationWidth / 2)
                    },
                    RtRange = new Limit
                    {
                        Low = rawFile.RetentionTimeFromScanNumber(precursorScanNumber),
                        High = rawFile.RetentionTimeFromScanNumber(precursorScanNumber)
                    }
                };
                ;

                IChromatogramSettings[] allSettings =
                {
                    new ChromatogramTraceSettings(TraceType.MassRange)
                    {
                        Filter = Component.Filter,
                        MassRanges = new[]
                        {
                            new Range(component.MassRange.Low, component.MassRange.High)
                        }
                    }
                };

                var rtFilteredScans = rawFile.GetFilteredScansListByTimeRange("",
                    component.RtRange.Low,
                    component.RtRange.High);
                var data = rawFile.GetChromatogramData(allSettings, rtFilteredScans[0],
                    rtFilteredScans[rtFilteredScans.Count - 1]);

                var chromatogramTrace = ChromatogramSignal.FromChromatogramData(data);
            }

            return precursorIntensity;
        }
コード例 #11
0
        private static void ExtractIonChromatogramAsRcode(IRawDataPlus rawFile, int startScan, int endScan, List <double> massList,
                                                          double ppmError, string filename, string filter = "ms")
        {
            if (IsValidFilter(rawFile, filter) == false)
            {
                using (System.IO.StreamWriter file =
                           new System.IO.StreamWriter(filename))
                {
                    file.WriteLine("e$error <- \"'{0}' is not a valid filter string.\";", filter);
                }
                return;
            }

            List <ChromatogramTraceSettings> settingList = new List <ChromatogramTraceSettings>();

            foreach (var mass in massList)
            {
                double massError = (0.5 * ppmError * mass) / 1000000;
                ChromatogramTraceSettings settings = new ChromatogramTraceSettings(TraceType.MassRange)
                {
                    Filter     = filter,
                    MassRanges = new[] { ThermoFisher.CommonCore.Data.Business.Range.Create(mass - massError, mass + massError) }
                };

                settingList.Add(settings);
            }

            IChromatogramSettings[] allSettings = settingList.ToArray();

            var data = rawFile.GetChromatogramData(allSettings, startScan, endScan);

            // Split the data into the chromatograms
            var trace = ChromatogramSignal.FromChromatogramData(data);

            using (System.IO.StreamWriter file =
                       new System.IO.StreamWriter(filename))
            {
                file.WriteLine("#R\n");

                for (int i = 0; i < trace.Length; i++)
                {
                    List <double> tTime        = new List <double>();
                    List <double> tIntensities = new List <double>();

                    for (int j = 0; j < trace[i].Times.Count; j++)
                    {
                        //   if (trace[i].Intensities[j] > 0)
                        {
                            tTime.Add(trace[i].Times[j]);
                            tIntensities.Add(trace[i].Intensities[j]);
                        }
                    }

                    file.WriteLine("e$chromatogram[[{0}]] <- list(", i + 1);
                    file.WriteLine("\tfilter = '{0}',", filter);
                    file.WriteLine("\tppm = {0},", ppmError);
                    file.WriteLine("\tmass = {0},", massList[i]);
                    file.WriteLine("\ttimes = c(" + string.Join(",", tTime) + "),");
                    file.WriteLine("\tintensities = c(" + string.Join(",", tIntensities) + ")");
                    file.WriteLine(");");
                }
            }
        }