예제 #1
0
 public TrailerExtraIndices(IRawDataPlus rawFile)
 {
     HeaderItem[] header = rawFile.GetTrailerExtraHeaderInformation();
     for (int i = 0; i < header.Length; i++)
     {
         //Console.WriteLine("{0} {1}", header[i].Label, i);
         if (header[i].Label.ToLower().Contains("injection time") & !header[i].Label.ToLower().Contains("reagent"))
         {
             InjectionTime = i;
         }
         if (header[i].Label.ToLower().Contains("master scan") | header[i].Label.ToLower().Contains("master index"))
         {
             MasterScan = i;
         }
         if (header[i].Label.ToLower().Contains("monoisotopic"))
         {
             MonoisotopicMZ = i;
         }
         if (header[i].Label.ToLower().Contains("charge state"))
         {
             ChargeState = i;
         }
         if (header[i].Label.ToLower().Contains("hcd energy") & !header[i].Label.ToLower().Contains("ev"))
         {
             HCDEnergy = i;
         }
         if (header[i].Label.ToLower().Contains("sps"))
         {
             SPSMasses.Add(i);
         }
     }
 }
        public string GetMonoisotopicMz(int scanNumber)
        {
            var trailerFields = rawFile.GetTrailerExtraHeaderInformation();
            var scanTrailer   = rawFile.GetTrailerExtraInformation(scanNumber);

            try
            {
                var idx = trailerFields
                          .Select((item, index) => new
                {
                    name     = item.Label.ToString().CleanRawfileTrailerHeader(),
                    Position = index
                })
                          .First(x => x.name.Contains("MonoisotopicmZ")).Position;


                return(scanTrailer.Values.ToArray()[idx]);
            }
            catch
            {
                return(null);
            }
        }
예제 #3
0
        /// <summary>
        ///    implements
        ///    https://github.com/fgcz/rawrr/issues/43
        /// </summary>
        /// <param name="rawFile"></param>
        /// <param name="filename"></param>
        /// <param name="L"></param>
        public static void WriteCentroidSpectrumAsRcode(this IRawDataPlus rawFile, string filename, List <int> L)
        {
            int count         = 1;
            var trailerFields = rawFile.GetTrailerExtraHeaderInformation();
            int indexCharge   = rawFile.GetIndexOfPattern("Charge State");

            using (System.IO.StreamWriter file =
                       new System.IO.StreamWriter(filename))
            {
                foreach (int scanNumber in L)
                {
                    var scan           = Scan.FromFile(rawFile, scanNumber);
                    var scanStatistics = rawFile.GetScanStatsForScanNumber(scanNumber);
                    var centroidStream = rawFile.GetCentroidStream(scanNumber, false);
                    var scanEvent      = rawFile.GetScanEventForScanNumber(scanNumber);
                    var scanTrailer    = rawFile.GetTrailerExtraInformation(scanNumber);

                    file.WriteLine("e$Spectrum[[{0}]] <- list(", count++);
                    file.WriteLine("\tscan = {0},", scanNumber);
                    file.WriteLine("\trtinseconds = {0},", Math.Round(scanStatistics.StartTime * 60 * 1000) / 1000);
                    if (indexCharge > 0)
                    {
                        file.WriteLine("\tcharge = {0},", int.Parse(scanTrailer.Values.ToArray()[indexCharge]));
                    }
                    else
                    {
                        file.WriteLine("\tcharge = NA,");
                    }

                    try{
                        var reaction0 = scanEvent.GetReaction(0);
                        file.WriteLine("\tpepmass = {0},", reaction0.PrecursorMass);
                    }catch {
                        file.WriteLine("\tpepmass = NA,");
                    }

                    if (scanStatistics.IsCentroidScan && centroidStream.Length > 0)
                    {
                        file.WriteLine("\tmZ = c(" + string.Join(", ", centroidStream.Masses) + "),");
                        file.WriteLine("\tintensity = c(" + string.Join(", ", centroidStream.Intensities) + ")");
                    }
                    else
                    {
                        file.WriteLine("\tmZ = NULL,\n\tintensity = NULL");
                    }
                    file.WriteLine("\t)");
                }
            }
        }
예제 #4
0
        private static int GetIndexOfPattern(this IRawDataPlus rawFile, string pattern = "Charge State")
        {
            var trailerFields = rawFile.GetTrailerExtraHeaderInformation();

            int idx = -1;

            try
            {
                idx = trailerFields
                      .Select((item, index) => new
                {
                    name     = item.Label.ToString(),
                    Position = index
                })
                      .First(x => x.name.Contains(pattern)).Position;
            }
            catch
            {
            }
            return(idx);
        }
예제 #5
0
        private static int GetChargeIdx(this IRawDataPlus rawFile)
        {
            var trailerFields = rawFile.GetTrailerExtraHeaderInformation();

            int idx_CHARGE = -1;

            try
            {
                idx_CHARGE = trailerFields
                             .Select((item, index) => new
                {
                    name     = item.Label.ToString(),
                    Position = index
                })
                             .First(x => x.name.Contains("Charge State")).Position;
            }
            catch
            {
            }
            return(idx_CHARGE);
        }
예제 #6
0
        /// <summary>
        /// </summary>
        /// <param name="rawFile"></param>
        /// <param name="filename"></param>
        /// <param name="L"></param>
        public static void WriteSpectrumAsRcode(this IRawDataPlus rawFile, string filename, List <int> L)
        {
            int count               = 1;
            var trailerFields       = rawFile.GetTrailerExtraHeaderInformation();
            int indexCharge         = rawFile.GetIndexOfPattern("Charge State");
            int indexMonoisotopicmZ = rawFile.GetIndexOfPattern("MonoisotopicmZ");

            using (System.IO.StreamWriter file =
                       new System.IO.StreamWriter(filename))
            {
                foreach (int scanNumber in L)
                {
                    var basepeakMass      = -1.0;
                    var basepeakIntensity = -1.0;

                    var scanStatistics = rawFile.GetScanStatsForScanNumber(scanNumber);
                    var centroidStream = rawFile.GetCentroidStream(scanNumber, false);
                    var scanTrailer    = rawFile.GetTrailerExtraInformation(scanNumber);
                    var scanEvent      = rawFile.GetScanEventForScanNumber(scanNumber);

                    var scan = Scan.FromFile(rawFile, scanNumber);

                    file.WriteLine("e$Spectrum[[{0}]] <- list(", count++);
                    file.WriteLine("\tscan = {0},", scanNumber);

                    try
                    {
                        basepeakMass      = (scanStatistics.BasePeakMass);
                        basepeakIntensity = Math.Round(scanStatistics.BasePeakIntensity);
                        file.WriteLine("\tbasePeak = c({0}, {1}),", basepeakMass, basepeakIntensity);
                    }
                    catch
                    {
                        file.WriteLine("\tbasePeak = c(NA, NA),");
                    }
                    file.WriteLine("\tTIC = {0},", scanStatistics.TIC.ToString());
                    file.WriteLine("\tmassRange = c({0}, {1}),", scanStatistics.LowMass.ToString(), scanStatistics.HighMass.ToString());
                    file.WriteLine("\tscanType = \"{0}\",", scanStatistics.ScanType.ToString());
                    file.WriteLine("\trtinseconds = {0},", Math.Round(scanStatistics.StartTime * 60 * 1000) / 1000);
                    try
                    {
                        var reaction0 = scanEvent.GetReaction(0);
                        file.WriteLine("\tpepmass = {0},", reaction0.PrecursorMass);
                    }
                    catch
                    {
                        file.WriteLine("\tpepmass = NA,");
                    }

                    if (scanStatistics.IsCentroidScan && centroidStream.Length > 0)
                    {
                        // Get the centroid (label) data from the RAW file for this scan
                        file.WriteLine("\tcentroidStream = TRUE,");

                        file.WriteLine("\tHasCentroidStream = '{0}, Length={1}',", scan.HasCentroidStream, scan.CentroidScan.Length);
                        if (scan.HasCentroidStream)
                        {
                            file.WriteLine("\tcentroid.mZ = c(" + string.Join(", ", scan.CentroidScan.Masses.ToArray()) + "),");
                            file.WriteLine("\tcentroid.intensity = c(" + string.Join(", ", scan.CentroidScan.Intensities.ToArray()) + "),");
                        }

                        file.WriteLine("\ttitle = \"File: {0}; SpectrumID: {1}; scans: {2}\",",
                                       Path.GetFileName(rawFile.FileName),
                                       null,
                                       scanNumber);

                        if (indexMonoisotopicmZ > 0)
                        {
                            file.WriteLine("\tmonoisotopicMz = {0},", Convert.ToDouble(scanTrailer.Values.ToArray()[indexMonoisotopicmZ]));
                        }
                        else
                        {
                            file.WriteLine("\tmonoisotopicMz = NA,");
                        }


                        if (indexCharge > 0)
                        {
                            file.WriteLine("\tcharge = {0},", int.Parse(scanTrailer.Values.ToArray()[indexCharge]));
                        }
                        else
                        {
                            file.WriteLine("\tcharge = NA,");
                        }

                        file.WriteLine("\tmZ = c(" + string.Join(", ", centroidStream.Masses) + "),");
                        file.WriteLine("\tintensity = c(" + string.Join(", ", centroidStream.Intensities) + "),");
                        file.WriteLine("\tnoises = c(" + string.Join(", ", centroidStream.Noises) + "),");
                        file.WriteLine("\tresolutions = c(" + string.Join(", ", centroidStream.Resolutions.ToArray()) + "),");
                        file.WriteLine("\tcharges = c(" + string.Join(", ", centroidStream.Charges) + "),");
                        file.WriteLine("\tbaselines = c(" + string.Join(", ", centroidStream.Baselines) + "),");
                    }
                    else
                    {
                        file.WriteLine("\tcentroidStream = FALSE,");

                        file.WriteLine("\tHasCentroidStream = '{0}, Length={1}',", scan.HasCentroidStream, scan.CentroidScan.Length);
                        if (scan.HasCentroidStream)
                        {
                            file.WriteLine("\tcentroid.mZ = c(" + string.Join(",", scan.CentroidScan.Masses.ToArray()) + "),");
                            file.WriteLine("\tcentroid.intensity = c(" + string.Join(",", scan.CentroidScan.Intensities.ToArray()) + "),");
                        }

                        file.WriteLine("\ttitle = \"File: {0}; SpectrumID: {1}; scans: {2}\",",
                                       Path.GetFileName(rawFile.FileName),
                                       null,
                                       scanNumber);

                        if (indexCharge > 0)
                        {
                            file.WriteLine("\tcharge = {0},", int.Parse(scanTrailer.Values.ToArray()[indexCharge]));
                        }
                        else
                        {
                            file.WriteLine("\tcharge = NA,");
                        }

                        if (indexMonoisotopicmZ > 0)
                        {
                            file.WriteLine("\tmonoisotopicMz = {0},", Convert.ToDouble(scanTrailer.Values.ToArray()[indexMonoisotopicmZ]));
                        }
                        else
                        {
                            file.WriteLine("\tmonoisotopicMz = NA,");
                        }

                        file.WriteLine("\tmZ = c(" + string.Join(",", scan.SegmentedScan.Positions) + "),");
                        file.WriteLine("\tintensity = c(" + string.Join(",", scan.SegmentedScan.Intensities) + "),");
                        // file.WriteLine("\tnoises = c(" + string.Join(",", scan.SegmentedScan.Noises) + "),");
                    }
                    // ============= Instrument Data =============
                    // write scan Trailer
                    var trailerValues = scanTrailer.Values;
                    var trailerLabels = scanTrailer.Labels;
                    var zipTrailer    = trailerLabels.ToArray().Zip(trailerValues, (a, b) => string.Format("\t\"{0}\" = \"{1}\"", a, b));
                    file.WriteLine(string.Join(", \n", zipTrailer));
                    file.WriteLine(")");
                }
            }

            return;
        }