Пример #1
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);
        }
        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());
        }
Пример #3
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();
            }
        }
Пример #4
0
        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");
            }
        }
        /// <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]);
        }
Пример #6
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);
            }
        }
Пример #7
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);
        }
Пример #8
0
        private void UpdateChromatogramData()
        {
            ChromatogramTraceSettings traceSettings;
            MassOptions tolerance = null;
            string      msFilter;

            if (ChroMsLevelComboBox.Text == "MS1" | ChroMsLevelComboBox.SelectedIndex == -1)
            {
                msFilter = "ms";
            }
            else if (ChroMsLevelComboBox.Text == "MS2")
            {
                msFilter = "ms2";
            }
            else if (ChroMsLevelComboBox.Text == "MS3")
            {
                msFilter = "ms3";
            }
            else
            {
                msFilter = String.Empty;
            }

            if (ChroTICRadioButton.Checked)
            {
                traceSettings = new ChromatogramTraceSettings(TraceType.TIC);
            }
            else if (ChroBPRadioButton.Checked)
            {
                traceSettings = new ChromatogramTraceSettings(TraceType.BasePeak);
            }
            else
            {
                if (ChroXICmzTextBox.Text.IsNullOrEmpty() || ChroXICmzTextBox.BackColor == Color.Red || ChroXICmzTextBox.Text == "")
                {
                    traceSettings = new ChromatogramTraceSettings(TraceType.TIC);
                }
                else
                {
                    double da = Convert.ToDouble(ChroXICmzTextBox.Text);

                    traceSettings = new ChromatogramTraceSettings(TraceType.MassRange)
                    {
                        MassRanges = new[] { new Range(da, da) },
                    };

                    if (!chroXICToleranceTextBox.Text.IsNullOrEmpty() && !(chroXICToleranceTextBox.BackColor == Color.Red) && !(chroXICToleranceTextBox.Text == ""))
                    {
                        tolerance = new MassOptions()
                        {
                            Tolerance = Convert.ToDouble(chroXICToleranceTextBox.Text)
                        };

                        if (chroMassTolPPM.Checked)
                        {
                            tolerance.ToleranceUnits = ToleranceUnits.ppm;
                        }
                        else if (chroMassTolDa.Checked)
                        {
                            tolerance.ToleranceUnits = ToleranceUnits.amu;
                        }
                        else
                        {
                            tolerance.ToleranceUnits = ToleranceUnits.mmu;
                        }
                    }
                }
            }

            traceSettings.Filter = msFilter;

            IChromatogramSettingsEx[] allSettings = { traceSettings };

            ChromatogramData = RawData.GetChromatogramDataEx(allSettings, -1, -1, tolerance);
        }
Пример #9
0
        public static void ReadXic(string rawFilePath, bool base64, XicData xicData)
        {
            IRawDataPlus rawFile;

            using (rawFile = RawFileReaderFactory.ReadFile(rawFilePath))
            {
                if (!rawFile.IsOpen)
                {
                    throw new RawFileParserException("Unable to access the RAW file using the native Thermo library.");
                }

                // Check for any errors in the RAW file
                if (rawFile.IsError)
                {
                    throw new RawFileParserException(
                              $"Error opening ({rawFile.FileError}) - {rawFilePath}");
                }

                // Check if the RAW file is being acquired
                if (rawFile.InAcquisition)
                {
                    throw new RawFileParserException("RAW file still being acquired - " + rawFilePath);
                }

                // Get the number of instruments (controllers) present in the RAW file and set the
                // selected instrument to the MS instrument, first instance of it
                rawFile.SelectInstrument(Device.MS, 1);

                // Get the first and last scan from the RAW file
                var firstScanNumber = rawFile.RunHeaderEx.FirstSpectrum;
                var lastScanNumber  = rawFile.RunHeaderEx.LastSpectrum;

                // Get the start and end time from the RAW file
                var startTime = rawFile.RunHeaderEx.StartTime;
                var endTime   = rawFile.RunHeaderEx.EndTime;

                // Get the mass range from the RAW file
                var minMass = rawFile.RunHeaderEx.LowMass;
                var maxMass = rawFile.RunHeaderEx.HighMass;

                // Update global metadata
                xicData.OutputMeta.base64   = base64;
                xicData.OutputMeta.timeunit = "minutes";

                foreach (var xicUnit in xicData.Content)
                {
                    IChromatogramSettings settings = null;
                    if (!xicUnit.Meta.MzStart.HasValue && !xicUnit.Meta.MzEnd.HasValue)
                    {
                        settings = new ChromatogramTraceSettings()
                        {
                            Filter = xicUnit.Meta.Filter ?? "ms"
                        };
                    }

                    if (!xicUnit.Meta.MzStart.HasValue)
                    {
                        xicUnit.Meta.MzStart = minMass;
                    }

                    if (!xicUnit.Meta.MzEnd.HasValue)
                    {
                        xicUnit.Meta.MzEnd = maxMass;
                    }

                    if (settings == null)
                    {
                        settings = new ChromatogramTraceSettings(TraceType.MassRange)
                        {
                            Filter     = xicUnit.Meta.Filter ?? "ms",
                            MassRanges = new[]
                            {
                                new Range(xicUnit.Meta.MzStart.Value,
                                          xicUnit.Meta.MzEnd.Value)
                            }
                        };
                    }

                    List <int> rtFilteredScans = null;
                    if (!xicUnit.Meta.RtStart.HasValue && !xicUnit.Meta.RtEnd.HasValue)
                    {
                        rtFilteredScans = new List <int>();
                    }

                    if (!xicUnit.Meta.RtStart.HasValue)
                    {
                        xicUnit.Meta.RtStart = startTime;
                    }

                    if (!xicUnit.Meta.RtEnd.HasValue)
                    {
                        xicUnit.Meta.RtEnd = endTime;
                    }

                    IChromatogramData data = null;
                    if (rtFilteredScans == null)
                    {
                        rtFilteredScans = rawFile.GetFilteredScansListByTimeRange(MsFilter,
                                                                                  xicUnit.Meta.RtStart.Value, xicUnit.Meta.RtEnd.Value);

                        if (rtFilteredScans.Count != 0)
                        {
                            data = GetChromatogramData(rawFile, settings, rtFilteredScans[0],
                                                       rtFilteredScans[rtFilteredScans.Count - 1]);
                            if (data != null && data.PositionsArray.Length == 1 && data.PositionsArray[0].Length == 1 &&
                                (Math.Abs(data.PositionsArray[0][0] - startTime) < 0.001 ||
                                 Math.Abs(data.PositionsArray[0][0] - endTime) < 0.001))
                            {
                                Log.Warn(
                                    $"Only the minimum or maximum retention time was returned. This is an indication that the provided retention time range [{xicUnit.Meta.RtStart}-{xicUnit.Meta.RtEnd}] lies outside the max. window [{startTime}-{endTime}]");
                            }
                        }
                        else
                        {
                            Log.Warn(
                                $"No scans found in retention time range [{xicUnit.Meta.RtStart}-{xicUnit.Meta.RtEnd}]. This is an indication that the provided retention time window lies outside the max. window [{startTime}-{endTime}]");
                        }
                    }
                    else
                    {
                        data = GetChromatogramData(rawFile, settings, firstScanNumber, lastScanNumber);
                    }

                    if (data != null)
                    {
                        var chromatogramTrace = ChromatogramSignal.FromChromatogramData(data);
                        if (chromatogramTrace[0].Scans.Count != 0)
                        {
                            if (!base64)
                            {
                                xicUnit.RetentionTimes = chromatogramTrace[0].Times;
                                xicUnit.Intensities    = chromatogramTrace[0].Intensities;
                            }
                            else
                            {
                                xicUnit.RetentionTimes = GetBase64String(chromatogramTrace[0].Times);
                                xicUnit.Intensities    = GetBase64String(chromatogramTrace[0].Intensities);
                            }
                        }
                    }
                }
            }
        }
Пример #10
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(");");
                }
            }
        }