コード例 #1
0
        public List <XYPair> GetIMSScanProfileFromMSFeatures()
        {
            GetMinAndMaxScanIMS(out var scanIMSMinimum, out var scanIMSMaximum);

            var xyPairs = new List <XYPair>();

            for (var imsScan = scanIMSMinimum; imsScan <= scanIMSMaximum; imsScan++)
            {
                float summedIntensityForIMSScan = 0;

                foreach (var imsMsFeature in imsMsFeatureList)
                {
                    summedIntensityForIMSScan +=
                        imsMsFeature.MSFeatureList.Where(p => p.ScanIMS == imsScan).Select(p => (float)p.IntensityUnSummed).Sum       //note: need float due overflow exception from value exceeding int32
                            ();
                }

                var pair = new XYPair(imsScan, summedIntensityForIMSScan);

                xyPairs.Add(pair);
            }


            ConformationDetection.PadXYPairsWithZeros(ref xyPairs, 5);

            return(xyPairs);
        }
コード例 #2
0
        public List <XYPair> GetIMSScanProfileFromRawData(DataReader uimfReader, UIMFData.FrameType frameType, double binWidth, double calibrationSlope, double calibrationIntercept)
        {
            GetMinAndMaxScanLCAndScanIMSAndMSFeatureRep(
                out var scanLCMinimum, out var scanLCMaximum,
                out var scanIMSMinimum, out var scanIMSMaximum, out var msFeatureRep);

            // double currentFWHM = msFeatureRep.Fwhm;
            // var currentMonoMZ = msFeatureRep.MassMonoisotopic/msFeatureRep.Charge + 1.0072649;
            var mzMostAbundantIsotope = msFeatureRep.MassMostAbundantIsotope / msFeatureRep.Charge + 1.00727649;


            ////[gord] the following commented-out code sets the m/z range too wide. Can be removed later
            //List<double> startMZ = new List<double>();
            //List<double> endMZ = new List<double>();

            //// Set ranges over which to look for the original data in the UIMF.
            //double charge = Convert.ToDouble(this.Charge);
            //for (int i = 0; i < 3; i++)
            //{
            //    startMZ.Add(currentMonoMZ + (1.003 * i / charge) - (0.5 * currentFWHM));
            //    endMZ.Add(currentMonoMZ + (1.003 * i / charge) + (0.5 * currentFWHM));
            //}

            //double minMZ = startMZ[0];
            //double maxMZ = endMZ[endMZ.Count - 1];

            //double midPointMZ = (maxMZ + minMZ) / 2;
            //double wideToleranceInMZ = midPointMZ - minMZ;

            var frameMinimum = ScanLCMap.Mapping[scanLCMinimum];
            var frameMaximum = ScanLCMap.Mapping[scanLCMaximum];


            int[] scanValues      = null;
            int[] intensityValues = null;

            var sigma         = msFeatureRep.Fwhm / 2.35;
            var toleranceInMZ = 2 * sigma;     //  this is a +/- value;  so    4* sigma = 95% of a normal distribution

            //Before: a wide m/z was used when generating the drift time profile.
            //uimfReader.GetDriftTimeProfile(frameIndexMinimum, frameIndexMaximum, frameType, scanIMSMinimum, scanIMSMaximum, midPointMZ, wideToleranceInMZ, ref scanValues, ref intensityValues);

            //now:  a narrow m/z range is used when generating the drift time profile
            uimfReader.GetDriftTimeProfile(frameMinimum, frameMaximum, frameType, scanIMSMinimum, scanIMSMaximum, mzMostAbundantIsotope, toleranceInMZ, ref scanValues, ref intensityValues);

            var imsScanProfile = intensityValues.Select((t, i) => new XYPair(scanIMSMinimum + i, t)).ToList();

            ConformationDetection.PadXYPairsWithZeros(ref imsScanProfile, 5);

            return(imsScanProfile);
        }
コード例 #3
0
        public void Execute()
        {
            {
                Logger.Log("Total number of MS Features in _isos.csv file = " + m_isosReader.NumOfUnfilteredMSFeatures);
                Logger.Log("Total number of MS Features we'll consider = " + m_isosReader.MSFeatureList.Count);
                Logger.Log("Creating IMS-MS Features...");

                var filteredMSFeatureList = m_isosReader.MSFeatureList;

                var imsmsfeatureBag = new ConcurrentBag <IMSMSFeature>();

                if (Settings.UseCharge)
                {
                    var groupByScanLCAndChargeQuery = from msFeature in filteredMSFeatureList
                                                      group msFeature by new { msFeature.ScanLC, msFeature.Charge } into newGroup
                    select newGroup;

                    Parallel.ForEach(groupByScanLCAndChargeQuery, msFeatureGroup =>
                    {
                        var imsmsFeatureList = ClusterMSFeatures.ClusterByMass(msFeatureGroup);

                        foreach (var imsmsFeature in imsmsFeatureList)
                        {
                            imsmsfeatureBag.Add(imsmsFeature);
                        }
                    });
                }
                else
                {
                    var groupByScanLCQuery = from msFeature in filteredMSFeatureList
                                             group msFeature by msFeature.ScanLC into newGroup
                                             select newGroup;

                    Parallel.ForEach(groupByScanLCQuery, msFeatureGroup =>
                    {
                        var imsmsFeatureList = ClusterMSFeatures.ClusterByMass(msFeatureGroup);

                        foreach (var imsmsFeature in imsmsFeatureList)
                        {
                            imsmsfeatureBag.Add(imsmsFeature);
                        }
                    });
                }

                Logger.Log("Total Number of Unfiltered IMS-MS Features = " + imsmsfeatureBag.Count);
                //Logger.Log("Filtering out short IMS-MS Features...");

                //IEnumerable<IMSMSFeature> imsmsFeatureEnumerable = FeatureUtil.FilterByMemberCount(imsmsfeatureBag);
                //imsmsfeatureBag = null;

                //Logger.Log("Total Number of Filtered IMS-MS Features = " + imsmsFeatureEnumerable.Count());
                Logger.Log("Creating LC-IMS-MS Features...");

                var lcimsmsFeatureBag = new ConcurrentBag <LCIMSMSFeature>();

                if (Settings.UseCharge)
                {
                    var groupByChargeQuery = from imsmsFeature in imsmsfeatureBag
                                             group imsmsFeature by imsmsFeature.Charge into newGroup
                                             select newGroup;

                    Parallel.ForEach(groupByChargeQuery, imsmsFeatureGroup =>
                    {
                        var lcimsmsFeatureList = ClusterIMSMSFeatures.ClusterByMassAndScanLC(imsmsFeatureGroup);

                        foreach (var lcimsmsFeature in lcimsmsFeatureList)
                        {
                            lcimsmsFeatureBag.Add(lcimsmsFeature);
                        }
                    });
                }
                else
                {
                    var lcimsmsFeatureList = ClusterIMSMSFeatures.ClusterByMassAndScanLC(imsmsfeatureBag);

                    foreach (var lcimsmsFeature in lcimsmsFeatureList)
                    {
                        lcimsmsFeatureBag.Add(lcimsmsFeature);
                    }
                }

                Logger.Log("Total Number of LC-IMS-MS Features = " + lcimsmsFeatureBag.Count);

                IEnumerable <LCIMSMSFeature> lcimsmsFeatureEnumerable;

                if (Settings.IMSDaCorrectionMax > 0 && !Settings.FilterFlaggedData)
                {
                    Logger.Log("Executing Dalton Correction Algorithm on LC-IMS-MS Features...");

                    var daCorrectedLCIMSMSFeatureBag = new ConcurrentBag <LCIMSMSFeature>();
                    var lcimsmsFeatureListBag        = new ConcurrentBag <IEnumerable <LCIMSMSFeature> >();

                    if (Settings.UseCharge)
                    {
                        var groupByChargeQuery2 = from lcimsmsFeature in lcimsmsFeatureBag
                                                  group lcimsmsFeature by lcimsmsFeature.Charge into newGroup
                                                  select newGroup;

                        Parallel.ForEach(groupByChargeQuery2, lcimsmsFeatureGroup =>
                        {
                            IEnumerable <IEnumerable <LCIMSMSFeature> > returnList = FeatureUtil.PartitionFeaturesByMass(lcimsmsFeatureGroup);

                            foreach (var lcimsmsFeatureList in returnList)
                            {
                                lcimsmsFeatureListBag.Add(lcimsmsFeatureList);
                            }
                        });
                    }
                    else
                    {
                        IEnumerable <IEnumerable <LCIMSMSFeature> > returnList = FeatureUtil.PartitionFeaturesByMass(lcimsmsFeatureBag);

                        foreach (var lcimsmsFeatureList in returnList)
                        {
                            lcimsmsFeatureListBag.Add(lcimsmsFeatureList);
                        }
                    }

                    Parallel.ForEach(lcimsmsFeatureListBag, lcimsmsFeatureGroup =>
                    {
                        var lcimsmsFeatureList = DaltonCorrection.CorrectLCIMSMSFeatures(lcimsmsFeatureGroup);

                        foreach (var lcimsmsFeature in lcimsmsFeatureList)
                        {
                            daCorrectedLCIMSMSFeatureBag.Add(lcimsmsFeature);
                        }
                    });

                    lcimsmsFeatureEnumerable = daCorrectedLCIMSMSFeatureBag;

                    Logger.Log("Total Number of Dalton Corrected LC-IMS-MS Features = " + lcimsmsFeatureEnumerable.Count());
                }
                else
                {
                    lcimsmsFeatureEnumerable = lcimsmsFeatureBag;
                }

                Logger.Log("Filtering LC-IMS-MS features based on Member Count...");
                lcimsmsFeatureEnumerable = FeatureUtil.FilterByMemberCount(lcimsmsFeatureEnumerable);
                Logger.Log("Total Number of Filtered LC-IMS-MS Features = " + lcimsmsFeatureEnumerable.Count());

                Logger.Log("Splitting LC-IMS-MS Features by LC Scan...");
                lcimsmsFeatureEnumerable = FeatureUtil.SplitLCIMSMSFeaturesByScanLC(lcimsmsFeatureEnumerable);
                if (!Settings.UseConformationDetection)
                {
                    lcimsmsFeatureEnumerable = FeatureUtil.FilterSingleLCScan(lcimsmsFeatureEnumerable);
                }
                Logger.Log("New Total Number of Filtered LC-IMS-MS Features = " + lcimsmsFeatureEnumerable.Count());

                if (Settings.UseConformationDetection)
                {
                    Logger.Log("Conformation Detection...");
                    lcimsmsFeatureEnumerable = ConformationDetection.DetectConformationsUsingRawData(lcimsmsFeatureEnumerable.ToList());
                    //lcimsmsFeatureEnumerable = FeatureUtil.FilterSingleLCScan(lcimsmsFeatureEnumerable);
                    lcimsmsFeatureEnumerable = FeatureUtil.FilterByMemberCount(lcimsmsFeatureEnumerable);
                    Logger.Log("New Total Number of LC-IMS-MS Features = " + lcimsmsFeatureEnumerable.Count());
                }

                lcimsmsFeatureEnumerable = FeatureUtil.SortByMass(lcimsmsFeatureEnumerable);

                Logger.Log("Creating filtered Isos file...");

                var msFeatureListOutput = new List <MSFeature>();
                foreach (var lcimsmsFeature in lcimsmsFeatureEnumerable)
                {
                    if (Settings.FilterIsosToSinglePoint)
                    {
                        var msFeatureRep = lcimsmsFeature.GetMSFeatureRep();
                        msFeatureListOutput.Add(msFeatureRep);
                    }
                    else
                    {
                        foreach (var imsmsFeature in lcimsmsFeature.IMSMSFeatureList)
                        {
                            msFeatureListOutput.AddRange(imsmsFeature.MSFeatureList);
                        }
                    }
                }

                var isosWriter = new IsosWriter(msFeatureListOutput, m_isosReader.ColumnMap);

                Logger.Log("Writing output files...");
                FeatureUtil.WriteLCIMSMSFeatureToFile(lcimsmsFeatureEnumerable);

                LCimsmsFeatures = lcimsmsFeatureEnumerable;
            }
        }