Beispiel #1
0
        public double GetFramePressureFront(int frameNum)
        {
            var fp = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameParams(frameNum);
            var framepressureFront = fp.GetValueDouble(FrameParamKeyType.PressureFront);

            return(framepressureFront);
        }
Beispiel #2
0
        public void GetFrameDataAllFrameSets()
        {
            Check.Require(ScanSetCollection != null && ScanSetCollection.ScanSetList.Count > 0, "Cannot get frame data. FrameSet collection has not been defined.");

            Console.Write("Loading frame parameters ");
            var dtLastProgress = DateTime.UtcNow;

            if (ScanSetCollection == null)
            {
                return;
            }

            foreach (var scanSet in ScanSetCollection.ScanSetList)
            {
                var frame = (LCScanSetIMS)scanSet;

                var fp = UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFrameParams(frame.PrimaryScanNumber);
                frame.AvgTOFLength            = fp.GetValueDouble(FrameParamKeyType.AverageTOFLength);
                frame.FramePressureUnsmoothed =
                    UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFramePressureForCalculationOfDriftTime(frame.PrimaryScanNumber);

                if (DateTime.UtcNow.Subtract(dtLastProgress).TotalSeconds >= 1)
                {
                    Console.Write(".");
                    dtLastProgress = DateTime.UtcNow;
                }
            }

            Console.WriteLine();
        }
Beispiel #3
0
        public override double GetTime(int frameNum)
        {
            var fp   = UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFrameParams(frameNum);
            var time = fp.GetValueDouble(FrameParamKeyType.StartTimeMinutes);

            return(time);
        }
Beispiel #4
0
        public UIMFRun(string fileName)
            : this()
        {
            Check.Require(File.Exists(fileName), "UIMF file does not exist.");
            Filename = fileName;


            _globalParams = UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetGlobalParams();

            Check.Ensure(_globalParams != null, "UIMF file's Global parameters could not be initialized. Check UIMF file to make sure it is a valid file.");

            var baseFilename = Path.GetFileName(Filename);

            if (baseFilename != null)
            {
                DatasetName = baseFilename.Substring(0, baseFilename.LastIndexOf('.'));
            }
            DataSetPath = Path.GetDirectoryName(fileName);

            MinLCScan = GetMinPossibleLCScanNum();
            MaxLCScan = GetMaxPossibleLCScanNum();

            MinIMSScan = GetMinPossibleIMSScanNum();
            MaxIMSScan = GetMaxPossibleIMSScanNum();

            GetMSLevelInfo();
            ContainsMSMSData = CheckRunForMSMSData();
        }
Beispiel #5
0
        /// <summary>
        /// Returns the MSLevel for the given frame
        /// </summary>
        /// <param name="frameNum">Frame number</param>
        /// <returns>1 for MS1 frames, 2 for MS2 frames, 0 for calibration frames, </returns>
        public override int GetMSLevelFromRawData(int frameNum)
        {
            if (MS1Frames.BinarySearch(frameNum) >= 0)
            {
                return(1);
            }
            if (MS2Frames.BinarySearch(frameNum) >= 0)
            {
                return(2);
            }

            var fp = UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFrameParams(frameNum);

            if (fp.FrameType == DataReader.FrameType.MS1)
            {
                return(1);
            }
            if (fp.FrameType == DataReader.FrameType.MS2)
            {
                return(2);
            }
            if (fp.FrameType == DataReader.FrameType.Calibration)
            {
                return(0);
            }

            return(1);
        }
Beispiel #6
0
 /// <summary>
 /// The total number of frames in the run
 /// </summary>
 /// <returns></returns>
 public int GetNumFrames()
 {
     if (_globalParams == null)
     {
         _globalParams = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetGlobalParams();
     }
     return(_globalParams.NumFrames);
 }
Beispiel #7
0
        public override void Close()
        {
            if (UIMFLibraryAdapter.getInstance(this.Filename).Datareader != null)
            {
                UIMFLibraryAdapter.getInstance(this.Filename).CloseCurrentUIMF();
            }

            base.Close();
        }
Beispiel #8
0
        internal int GetNumScansPerFrame()
        {
            //TODO:  check this and make sure it is correct
            var minFrame = MinLCScan;

            var numScansPerFrame = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameParams(minFrame).Scans;

            return(numScansPerFrame);
        }
Beispiel #9
0
        public override int GetNumMSScans()
        {
            var numFrames = _globalParams.NumFrames;

            var frameParams      = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameParams(1);
            var numScansPerFrame = frameParams.Scans;

            return(numScansPerFrame * numFrames);
        }
Beispiel #10
0
        /// <summary>
        /// Returns the mass spectrum for a specified LC Scanset and a IMS Scanset.
        /// </summary>
        /// <param name="lcScanset"></param>
        /// <param name="imsScanset"></param>
        /// <param name="minMZ"></param>
        /// <param name="maxMZ"></param>
        public override XYData GetMassSpectrum(ScanSet lcScanset, ScanSet imsScanset, double minMZ, double maxMZ)
        {
            Check.Require(imsScanset.GetScanCount() > 0, "Cannot get spectrum. Number of scans in ScanSet is 0");
            Check.Require(lcScanset.GetScanCount() > 0, "Cannot get spectrum. Number of frames in FrameSet is 0");

            var frameLower = lcScanset.getLowestScanNumber();
            var frameUpper = lcScanset.getHighestScanNumber();
            var scanLower  = imsScanset.getLowestScanNumber();
            var scanUpper  = imsScanset.getHighestScanNumber();

            // TODO: If lowest and highest scan numbers are both 0, should we be summing the mass spectrum?

            var frameType = (DataReader.FrameType)GetMSLevel(lcScanset.PrimaryScanNumber);

            try
            {
                // Obtain an instance of the reader
                var uimfReader = UIMFLibraryAdapter.getInstance(Filename).Datareader;

                // Prior to January 2015 the SpectrumCache class in the UIMFReader used Dictionary<int, int> for ListOfIntensityDictionaries
                // This caused some datasets, e.g. EXP-Mix5_1um_pos_19Jan15_Columbia_DI, to run out of memory when caching 10 spectra
                // The UIMFLibrary now uses List<int, int>, which takes up less memory (at the expense having slower lookups by BinNumber, though this does not affect DeconTools' use of the UIMFLibrry)

                uimfReader.SpectraToCache           = 10;
                uimfReader.MaxSpectrumCacheMemoryMB = 750;

                double[] xvals;
                int[]    yvals;
                var      nonZeroLength = uimfReader.GetSpectrum(frameLower,
                                                                frameUpper, frameType, scanLower, scanUpper, minMZ, maxMZ, out xvals, out yvals);

                var xydata = new XYData();

                if (xvals == null || xvals.Length == 0)
                {
                    xydata.Xvalues = null;
                    xydata.Yvalues = null;
                    return(xydata);
                }

                xydata.Xvalues = xvals;
                xydata.Yvalues = yvals.Select <int, double>(i => i).ToArray();

                if (xydata.Xvalues[0] < minMZ || xydata.Xvalues[xydata.Xvalues.Length - 1] > maxMZ)
                {
                    xydata = xydata.TrimData(minMZ, maxMZ);
                }

                return(xydata);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in UIMF GetMassSpectrum: " + ex.Message);
                throw;
            }
        }
Beispiel #11
0
        public double GetFramePressure(int frameNum)
        {
            if (!this._framePressuresUnsmoothed.ContainsKey(frameNum))
            {
                var pressure = UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFramePressureForCalculationOfDriftTime(frameNum);
                this._framePressuresUnsmoothed.Add(frameNum, pressure);
            }

            return(this._framePressuresUnsmoothed[frameNum]);
        }
Beispiel #12
0
        public float GetTIC(int lcScan, int imsScan)
        {
            var frameScans = UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFrameScans(lcScan);
            var query      = (from item in frameScans where item.Scan == imsScan select item.TIC).ToList();

            if (query.Count == 0)
            {
                return(0);
            }

            return((float)query.FirstOrDefault());
        }
Beispiel #13
0
        public double GetDriftTime(int frameNum, int scanNum)
        {
            var fp           = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameParams(frameNum);
            var avgTOFLength = fp.GetValueDouble(FrameParamKeyType.AverageTOFLength);
            var driftTime    = avgTOFLength * (scanNum + 1) / 1e6;  //note that scanNum is zero-based.  Need to add one here

            var framePressure = GetFramePressure(frameNum);

            if (Math.Abs(framePressure) > float.Epsilon)
            {
                driftTime = driftTime * (FramePressureStandard / framePressure);  // correc
            }

            return(driftTime);
        }
Beispiel #14
0
        private void GetMSLevelInfo()
        {
            _frameList = new SortedDictionary <int, DataReader.FrameType>(UIMFLibraryAdapter.getInstance(Filename).Datareader.GetMasterFrameList());

            MS1Frames = new List <int>();
            MS2Frames = new List <int>();

            var ms1Frames = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameNumbers(DataReader.FrameType.MS1);

            if (ms1Frames != null && ms1Frames.Length != 0)
            {
                MS1Frames = ms1Frames.ToList();
            }

            var ms2Frames = UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameNumbers(DataReader.FrameType.MS2);

            if (ms2Frames != null && ms2Frames.Length != 0)
            {
                MS2Frames = ms2Frames.ToList();
            }
        }
Beispiel #15
0
        //public void GetDriftTimeProfile(int frameStartIndex, int frameStopIndex, int startScan, int stopScan, double targetMZ, double toleranceInMZ)
        //{
        //    int[] scanValues = null;
        //    int[] intensityVals = null;

        //    UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetDriftTimeProfile(frameStartIndex, frameStopIndex, this.FrameTypeForMS1, startScan, stopScan, targetMZ, toleranceInMZ, ref scanValues, ref intensityVals);

        //    if (scanValues == null || scanValues.Length == 0)
        //    {
        //        this.XYData.Xvalues = null;
        //        this.XYData.Yvalues = null;
        //    }
        //    else
        //    {
        //        this.XYData.Xvalues = scanValues.Select<int, double>(i => i).ToArray();
        //        this.XYData.Yvalues = intensityVals.Select<int, double>(i => i).ToArray();
        //    }

        //}


        public XYData GetDriftTimeProfile(int frameNum, int startScan, int stopScan, double targetMZ, double toleranceInMZ)
        {
            int[] scanValues    = null;
            int[] intensityVals = null;

            UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetDriftTimeProfile(frameNum, frameNum, DataReader.FrameType.MS1, startScan, stopScan, targetMZ, toleranceInMZ, ref scanValues, ref intensityVals);


            var xydata = new XYData();

            if (scanValues == null || scanValues.Length == 0)
            {
                xydata.Xvalues = null;
                xydata.Yvalues = null;
            }
            else
            {
                xydata.Xvalues = scanValues.Select <int, double>(i => i).ToArray();
                xydata.Yvalues = intensityVals.Select <int, double>(i => i).ToArray();
            }

            return(xydata);
        }
Beispiel #16
0
        //public int[][] GetFramesAndScanIntensitiesForAGivenMz(int startFrame, int endFrame, int frameType, int startScan, int endScan, double targetMz, double toleranceInMZ)
        //{
        //    return UIMFLibraryAdapter.getInstance(this.Filename).Datareader.GetFramesAndScanIntensitiesForAGivenMz(startFrame, endFrame, frameType, startScan, endScan, targetMz, toleranceInMZ);
        //}

        ////Anuj added this
        //for now I am converting this dictionary to a frame and scna list, only because the UIMF library already has that method
        //public void GetMassSpectrum(Dictionary<ushort, List<ushort>> frameAndScans, double minMz, double MaxMz)
        //{
        //    List<ushort> frameNumbers = frameAndScans.Keys.ToList<ushort>();
        //    List<List<ushort>> scanNumbers = new List<List<ushort>>();

        //    foreach (ushort frameNum in frameNumbers)
        //    {
        //        List<ushort> scanList = frameAndScans[frameNum];
        //        scanNumbers.Add(scanList);
        //    }

        //    GetMassSpectrum(frameNumbers, scanNumbers, minMz, MaxMz);

        //}

        ////Anuj added this
        //public void GetMassSpectrum(List<ushort> frameNumbers, List<List<ushort>> scanNumbersForFrameNumbers, double minMz, double maxMz)
        //{
        //    List<double> mzList = new List<double>();
        //    List<double> intensityList = new List<double>();
        //    UIMFLibraryAdapter.getInstance(this.Filename).Datareader.SumScansNonCached(frameNumbers, scanNumbersForFrameNumbers, mzList, intensityList, minMz, maxMz);
        //    this.XYData.Xvalues = mzList.ToArray();
        //    this.XYData.Yvalues = intensityList.ToArray();
        //}

        public Stack <int[]> GetDescendingBpiValuesByFramesAndScans()
        {
            return(UIMFLibraryAdapter.getInstance(Filename).Datareader.GetFrameAndScanListByDescendingIntensity());
        }