Ejemplo n.º 1
0
        private void CalculateTICisolationWindow(RawScan previousFullMS, double precursormz, double window)
        {
            double intensitySum      = 0.0;
            double relativeIntensity = 0.0;

            if (previousFullMS != null)
            {
                double[,] msscan = previousFullMS.Data;
                int    msscanLength = msscan.GetLength(1);
                double lowerbound   = precursormz - window / 2;
                double upperbound   = precursormz + window / 2;
                for (int i = 0; i < msscanLength; i++)
                {
                    if (msscan[0, i] > lowerbound && msscan[0, i] < upperbound)
                    {
                        intensitySum += msscan[1, i];
                    }
                }
                if (intensitySum > 0)
                {
                    relativeIntensity = this.Tic / intensitySum;
                }
            }
            this.IsolationWindowTic         = intensitySum;
            this.IsolationWindowTicRelative = relativeIntensity;
        }
Ejemplo n.º 2
0
 public Ms2Scan(RawScan rawScan, double signalToNoiseThreshold, RawScan previousFullMS) : base(rawScan, signalToNoiseThreshold)
 {
     SetPrecursorMass(rawScan.Precursormz);
     CalculateSignalPartAbove(rawScan.Data, rawScan.Precursormz, IsolationWindow);//parameter here to shift outside precursor window?
     CalculateTICisolationWindow(previousFullMS, rawScan.Precursormz, IsolationWindow);
     IsPrecursorBP(rawScan.Precursormz, rawScan.BasePeakMass);
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Reads raw data. Puts spectra into a thread safe queue. Closes queue when done. Parses the rawfile-log into the statusLog object
        /// </summary>
        /// <param name="raw">Raw file</param>
        /// <param name="rawScanQueue">Thread safe queue</param>
        private void ReadRawFile(IXRawfile5 raw, BlockingCollection <RawScan> rawScanQueue)
        {
            int firstScanNumber = -1;

            raw.GetFirstSpectrumNumber(ref firstScanNumber);
            int lastScanNumber = -1;

            raw.GetLastSpectrumNumber(ref lastScanNumber);

            for (int scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++)
            {
                string scanFilter = null;
                raw.GetFilterForScanNum(scanNumber, ref scanFilter);

                //read scan header into key/value arrays
                object keyRef   = null;
                object valueRef = null;
                int    indexRef = 0;
                raw.GetTrailerExtraForScanNum(scanNumber, ref keyRef, ref valueRef, ref indexRef);
                string[] trailerKeys   = (string[])keyRef;
                string[] trailerValues = (string[])valueRef;

                //read tic and base peak mass using dummy variables
                double tic          = 0.0;
                int    int1         = 0;
                int    int2         = 0;
                int    int3         = 0;
                double double1      = 0.0;
                double double2      = 0.0;
                double double3      = 0.0;
                double basePeakMass = 0.0;
                double double5      = 0.0;
                double double6      = 0.0;
                raw.GetScanHeaderInfoForScanNum(scanNumber, ref int1, ref double1, ref double2, ref double3, ref tic, ref basePeakMass, ref double5, ref int2, ref int3, ref double6);

                //read data (mz,int,...) using dummy variables
                object labels_obj = null;
                object flags_obj  = null;
                raw.GetLabelData(ref labels_obj, ref flags_obj, ref scanNumber);
                double[,] data = (double[, ])labels_obj;

                //read precursorMz
                double precursorMz = 0.0;
                raw.GetPrecursorMassForScanNum(scanNumber, 2, ref precursorMz);

                RawScan rawScan = new RawScan(scanNumber, scanFilter, tic, trailerKeys, trailerValues, data, precursorMz, basePeakMass);
                rawScanQueue.Add(rawScan);

                //read status log
                double rtLog           = 0.0;
                object statuslogKeys   = null;
                object statuslogValues = null;
                int    statuslogN      = 0;
                raw.GetStatusLogForScanNum(scanNumber, ref rtLog, ref statuslogKeys, ref statuslogValues, ref statuslogN);
                statusLog.Add(rtLog, (string[])statuslogKeys, (string[])statuslogValues);
            }
            rawScanQueue.CompleteAdding();
            Log.Information("Read all spectra in base module");
        }
Ejemplo n.º 4
0
        protected void ParseScanHeader(RawScan rawScan)
        {
            double _injectionTime        = 0.0;
            double _ionCountFromRawOvFtT = 0.0;
            double _isolationWidth       = 0.0;
            int    _chargeState          = 0;

            double _ctcd         = 0.0;
            int    _lockMassNo   = 0;
            double _lockMassCorr = 0.0;

            string[] theStringKeys   = (string[])rawScan.TrailerExtraKeys;
            string[] theStringValues = (string[])rawScan.TrailerExtraValues;
            for (int i = 0; i < theStringKeys.Length; i++)
            {
                string trimmed = theStringKeys[i].Trim(new Char[] { ' ', '*', '.', ';', ':' });
                switch (trimmed)
                {
                case "Ion Injection Time (ms)":
                    Double.TryParse(theStringValues[i], out _injectionTime);
                    break;

                case "RawOvFtT":
                    Double.TryParse(theStringValues[i], out _ionCountFromRawOvFtT);
                    break;

                case "Charge State":
                    Int32.TryParse(theStringValues[i], out _chargeState);
                    break;

                case "MS2 Isolation Width":
                    Double.TryParse(theStringValues[i], out _isolationWidth);
                    break;

                case "LM m/z-Correction (ppm)":
                    Double.TryParse(theStringValues[i], out _lockMassCorr);
                    break;

                case "CTCD Comp":
                    Double.TryParse(theStringValues[i], out _ctcd);
                    break;

                case "PrOSA Comp":
                    Double.TryParse(theStringValues[i], out _ctcd);
                    break;
                }
            }
            this.ScanNumber           = rawScan.ScanNumber;
            this.InjectionTime        = _injectionTime;
            this.IonCountFromRawOvFtT = _ionCountFromRawOvFtT;
            this.ChargeState          = _chargeState;
            this.IsolationWindow      = _isolationWidth;
            this.LockMassCorr         = _lockMassCorr;
            this.LockMassNo           = _lockMassNo;
            this.Ctcd = _ctcd;
            this.Tic  = rawScan.Tic;
        }
Ejemplo n.º 5
0
        public MsScan(RawScan rawScan, double signalToNoiseThreshold, List <Tuple <int, double, int> > polymerTargetList, int polymerCount, List <Adduct> adducts, double massError) : base(rawScan, signalToNoiseThreshold)
        {
            Tuple <double, int> maxMz = GetMaxIntensity(rawScan.Data);

            if (maxMz.Item2 > 0)
            {
                List <Tuple <int, double, int> > targetList = new List <Tuple <int, double, int> >();
                targetList.AddRange(polymerTargetList);
                int precursorIndex, adductIndex;
                ExtractAdducts(polymerCount, adducts, maxMz, targetList, out precursorIndex, out adductIndex);
                double[] targetIntensities = GetIntensityByMatching(rawScan, massError, targetList);
                SetPolymersAndAdducts(polymerCount, targetList, precursorIndex, adductIndex, targetIntensities);
            }
            else
            {
                this.Polymer = new double[polymerCount];
                this.Adduct  = new double[adducts.Count];
            }
        }
Ejemplo n.º 6
0
        private static double[] GetIntensityByMatching(RawScan rawScan, double massError, List <Tuple <int, double, int> > targetList)
        {
            double[] targetIntensities = new double[targetList.Count];

            int sortedMzAscendingLength = targetList.Count;

            double[,] msscan = rawScan.Data;
            int msscanLength = msscan.GetLength(1);
            int t            = 0;
            int o            = 0;
            int charge       = (int)(msscan[5, o] + 0.5);

            while (t < sortedMzAscendingLength && o < msscanLength)
            {
                int      specificScan    = o;
                double[] curscan         = new double[] { msscan[0, specificScan], msscan[1, specificScan], msscan[2, specificScan], msscan[3, specificScan], msscan[4, specificScan], msscan[5, specificScan] };
                double   mass_difference = (msscan[0, o] - targetList[t].Item2) / targetList[t].Item2 * 1e6;
                if (Math.Abs(mass_difference) <= massError && targetList[t].Item3 == charge)
                {
                    if (msscan[1, o] > targetIntensities[t])
                    {
                        targetIntensities[t] = msscan[1, o];
                    }
                    t++;
                }
                else if (mass_difference < 0)
                {
                    o++;
                    if (o < msscanLength)
                    {
                        charge = (short)(msscan[5, o] + 0.5);
                    }
                }
                else if (mass_difference >= 0)
                {
                    t++;
                }
            }

            return(targetIntensities);
        }
Ejemplo n.º 7
0
        // Relies on assumption that the rawscans are sorted, i.e. the currentFullMS is set for each ms2 scan
        private Tuple <List <MsScan>, List <Ms2Scan> > ParseSpectra(BlockingCollection <RawScan> rawScanQueue, SettingsForAnalysis fixedSettings)
        {
            List <Tuple <int, double, int> > polymerTargetList = ExtractPolymers(fixedSettings.Polymers);
            List <MsScan>  msScanList    = new List <MsScan>(1000);
            List <Ms2Scan> ms2ScanList   = new List <Ms2Scan>(1000);
            RawScan        currentFullMS = null;

            foreach (RawScan rawScan in rawScanQueue.GetConsumingEnumerable())
            {
                if (rawScan.IsMS2())
                {
                    ms2ScanList.Add(new Ms2Scan(rawScan, fixedSettings.StoNthreshold, currentFullMS));
                }
                else
                {
                    currentFullMS = rawScan;
                    msScanList.Add(new MsScan(rawScan, fixedSettings.StoNthreshold, polymerTargetList, fixedSettings.Polymers.Count, fixedSettings.Adducts, fixedSettings.BaseMassTolerance));
                }
            }
            return(new Tuple <List <MsScan>, List <Ms2Scan> >(msScanList, ms2ScanList));
        }
Ejemplo n.º 8
0
 public MsScanAbstract(RawScan rawScan, double signalToNoiseThreshold)
 {
     ParseScanHeader(rawScan);
     SetSignalToNoiseAsAverageAboveThreshold(signalToNoiseThreshold, rawScan.Data);
 }