コード例 #1
0
        private IEnumerable <XicFeature> CreateXicTargetsYield(IEnumerable <UMCLight> features, double massError)
        {
            int id = 0;

            foreach (var feature in features)
            {
                int minScan = Int32.MaxValue;
                int maxScan = 0;
                foreach (var msFeature in feature.MsFeatures)
                {
                    minScan = Math.Min(minScan, msFeature.Scan);
                    maxScan = Math.Max(maxScan, msFeature.Scan);
                }

                yield return(new XicFeature
                {
                    HighMz = FeatureLight.ComputeDaDifferenceFromPPM(feature.Mz, -massError),
                    LowMz = FeatureLight.ComputeDaDifferenceFromPPM(feature.Mz, massError),
                    Mz = feature.Mz,
                    Feature = feature,
                    Id = id++,
                    EndScan = minScan + ScanWindowSize,
                    StartScan = maxScan - ScanWindowSize,
                    ChargeState = feature.ChargeState
                });
            }
        }
コード例 #2
0
        public void MassMassCalculations(double massX, double massY)
        {
            var ppm        = FeatureLight.ComputeMassPPMDifference(massX, massY);
            var massYdelta = FeatureLight.ComputeDaDifferenceFromPPM(massX, ppm);

            Assert.AreEqual(massY, massYdelta);
        }
コード例 #3
0
        public void MassPPMCalculations(double massX, double ppm, double epsilon)
        {
            var massYdelta = FeatureLight.ComputeDaDifferenceFromPPM(massX, ppm);
            var ppmDelta   = FeatureLight.ComputeMassPPMDifference(massX, massYdelta);

            //Assert.IsTrue( (ppm - ppmDelta) < epsilon);
            Assert.Less(ppm - ppmDelta, epsilon);
        }
コード例 #4
0
        /// <summary>
        /// Creates XIC Targets from a list of UMC Features
        /// </summary>
        /// <param name="features"></param>
        /// <param name="massError"></param>
        /// <returns></returns>
        private List <XicFeature> CreateXicTargets(IEnumerable <UMCLight> features, double massError)
        {
            var allFeatures = new List <XicFeature>();

            // Create XIC Features
            var id = 0;

            // Then for each feature turn it into a new feature
            foreach (var feature in features)
            {
                // Build XIC features from each
                var x = feature.CreateChargeMap();
                foreach (var charge in x.Keys)
                {
                    double maxIntensity = 0;
                    double mz           = 0;
                    var    min          = double.MaxValue;
                    var    max          = double.MinValue;

                    var scanStart = int.MaxValue;
                    var scanEnd   = 0;

                    foreach (var chargeFeature in x[charge])
                    {
                        min       = Math.Min(min, chargeFeature.Mz);
                        max       = Math.Max(max, chargeFeature.Mz);
                        scanStart = Math.Min(scanStart, chargeFeature.Scan);
                        scanEnd   = Math.Min(scanStart, chargeFeature.Scan);

                        if (chargeFeature.Abundance > maxIntensity)
                        {
                            maxIntensity = chargeFeature.Abundance;
                            mz           = chargeFeature.Mz;
                        }
                    }

                    // Clear the ms feature list...because later we will populate it
                    feature.MsFeatures.Clear();

                    var xicFeature = new XicFeature
                    {
                        HighMz      = FeatureLight.ComputeDaDifferenceFromPPM(mz, -massError),
                        LowMz       = FeatureLight.ComputeDaDifferenceFromPPM(mz, massError),
                        Mz          = mz,
                        Feature     = feature,
                        Id          = id++,
                        EndScan     = scanEnd + ScanWindowSize,
                        StartScan   = scanStart - ScanWindowSize,
                        ChargeState = charge
                    };

                    allFeatures.Add(xicFeature);
                }
            }

            return(allFeatures);
        }
コード例 #5
0
        public void TestDistanceChangeEuclidean()
        {
            var cluster = new UMCClusterLight();

            cluster.MassMonoisotopic = 500;
            cluster.Net       = .5;
            cluster.Net       = .5;
            cluster.DriftTime = 20;


            var euclid = new EuclideanDistanceMetric <UMCClusterLight>();
            DistanceFunction <UMCClusterLight> func = euclid.EuclideanDistance;

            var    deltaNet       = .01;
            double deltaMassPPM   = 1;
            double deltaDriftTime = 1;

            Console.WriteLine("Mass Diff, Mass Dist, Net, Net Dist, Drift, Drift Dist");

            for (var i = 0; i < 50; i++)
            {
                var clusterD = new UMCClusterLight();
                var clusterN = new UMCClusterLight();
                var clusterM = new UMCClusterLight();

                clusterM.DriftTime        = cluster.DriftTime + deltaDriftTime;
                clusterM.Net              = cluster.Net + deltaNet;
                clusterM.Net              = cluster.Net + deltaNet;
                clusterM.MassMonoisotopic = FeatureLight.ComputeDaDifferenceFromPPM(cluster.MassMonoisotopic,
                                                                                    deltaMassPPM * i);


                clusterN.DriftTime        = cluster.DriftTime + deltaDriftTime;
                clusterN.Net              = cluster.Net + (deltaNet * i);
                clusterN.Net              = cluster.Net + (deltaNet * i);
                clusterN.MassMonoisotopic = FeatureLight.ComputeDaDifferenceFromPPM(cluster.MassMonoisotopic,
                                                                                    deltaMassPPM);


                clusterD.DriftTime        = cluster.DriftTime + (deltaDriftTime * i);
                clusterD.Net              = cluster.Net + deltaNet;
                clusterD.Net              = cluster.Net + deltaNet;
                clusterD.MassMonoisotopic = FeatureLight.ComputeDaDifferenceFromPPM(cluster.MassMonoisotopic,
                                                                                    deltaMassPPM);

                var distM = func(cluster, clusterM);
                var distN = func(cluster, clusterN);
                var distD = func(cluster, clusterD);

                var output = string.Format("{0},{1},{2},{3},{4},{5}", deltaMassPPM * i, distM, deltaNet * i, distN,
                                           deltaDriftTime * i, distD);
                Console.WriteLine(output);
            }
        }
コード例 #6
0
        public void TestDistances()
        {
            var dist = new WeightedEuclideanDistance <UMCClusterLight>();


            var clusterA = CreateCluster(500, .2, 27);
            var clusterB = CreateCluster(500, .2, 27);

            var N         = 50;
            var stepMass  = .5;
            var stepNET   = .001;
            var stepDrift = .01;


            Console.WriteLine("Walk in drift time");
            for (var i = 0; i < N; i++)
            {
                clusterB.DriftTime += stepDrift;
                var distance = dist.EuclideanDistance(clusterA, clusterB);
                Console.WriteLine("{0}, {1}, {3}, {2}", clusterB.DriftTime, clusterB.DriftTime, distance, clusterB.DriftTime - clusterA.DriftTime);
            }

            Console.WriteLine();
            Console.WriteLine("Walk in net ");
            clusterB.DriftTime = 27;

            for (var i = 0; i < N; i++)
            {
                clusterB.Net += stepNET;
                var distance = dist.EuclideanDistance(clusterA, clusterB);
                Console.WriteLine("{0}, {1}, {3}, {2}", clusterB.Net, clusterB.Net, distance, clusterB.Net - clusterA.Net);
            }


            Console.WriteLine();
            Console.WriteLine("Walk in mass ");
            clusterB.Net = .2;
            for (var i = 0; i < N; i++)
            {
                var d = FeatureLight.ComputeDaDifferenceFromPPM(clusterA.MassMonoisotopic, stepMass * i);
                clusterB.MassMonoisotopic = d;
                var distance = dist.EuclideanDistance(clusterA, clusterB);
                Console.WriteLine("{0}, {1}, {3}, {2}", clusterB.MassMonoisotopic,
                                  clusterB.MassMonoisotopic,
                                  distance,
                                  FeatureLight.ComputeMassPPMDifference(clusterA.MassMonoisotopic, clusterB.MassMonoisotopic));
            }
        }
コード例 #7
0
        /// <summary>
        /// Creates an XIC from the m/z values provided.
        /// </summary>
        /// <param name="mz"></param>
        /// <param name="massError"></param>
        /// <param name="minScan"></param>
        /// <param name="maxScan"></param>
        /// <param name="provider"></param>
        /// <returns></returns>
        public IEnumerable <MSFeatureLight> CreateXic(double mz,
                                                      double massError,
                                                      int minScan,
                                                      int maxScan,
                                                      ISpectraProvider provider)
        {
            var newFeatures = new List <MSFeatureLight>();
            var lower       = FeatureLight.ComputeDaDifferenceFromPPM(mz, massError);
            var higher      = FeatureLight.ComputeDaDifferenceFromPPM(mz, -massError);



            for (var i = minScan; i < maxScan; i++)
            {
                List <XYData> spectrum = null;

                try
                {
                    var summary = new ScanSummary();
                    spectrum = provider.GetRawSpectra(i, 0, 1, out summary);
                }
                catch
                {
                }

                if (spectrum == null)
                {
                    continue;
                }

                var data = (from x in spectrum
                            where x.X > lower && x.X < higher
                            select x).ToList();

                var summedIntensity = data.Sum(x => x.Y);


                var newFeature = new MSFeatureLight
                {
                    Scan      = i,
                    Net       = i,
                    Abundance = Convert.ToInt64(summedIntensity)
                };
                newFeatures.Add(newFeature);
            }
            return(newFeatures);
        }
コード例 #8
0
        public void TestCreateDummyDatabase(string databasePath, int totalDatasets, int totalClusters)
        {
            File.Delete(databasePath);
            NHibernateUtil.ConnectToDatabase(databasePath, true);

            IDatasetDAO    datasetCache = new DatasetDAOHibernate();
            IUmcClusterDAO clusterCache = new UmcClusterDAOHibernate();
            IUmcDAO        featureCache = new UmcDAOHibernate();

            // Creating a dataset
            Console.WriteLine("Creating dummy datasets");
            var datasets = new List <DatasetInformation>();
            var total    = totalDatasets;

            for (var i = 0; i < total; i++)
            {
                var dataset = new DatasetInformation();
                dataset.DatasetId   = i;
                dataset.DatasetName = "test" + i;
                datasets.Add(dataset);
            }
            datasetCache.AddAll(datasets);
            datasets.Clear();
            datasets = datasetCache.FindAll();

            // Create features
            Console.WriteLine("Creating features");
            var features = new List <UMCLight>();
            var clusters = new List <UMCClusterLight>();
            var x        = new Random();

            var featureId = 0;

            for (var i = 0; i < totalClusters; i++)
            {
                var N      = x.Next(1, total);
                var charge = x.Next(1, 10);
                var hash   = new HashSet <int>();

                var net  = x.NextDouble();
                var mass = 400 + (1600 * x.NextDouble());
                var dt   = 60 * x.NextDouble();

                for (var j = 0; j < N; j++)
                {
                    var did = -1;
                    do
                    {
                        did = x.Next(0, total);
                        if (!hash.Contains(did))
                        {
                            hash.Add(did);
                            break;
                        }
                    } while (true);


                    var feature = new UMCLight();
                    feature.GroupId                 = did;
                    feature.Id                      = featureId++;
                    feature.ChargeState             = charge;
                    feature.MassMonoisotopic        = FeatureLight.ComputeDaDifferenceFromPPM(mass, 3);
                    feature.MassMonoisotopicAligned = feature.MassMonoisotopic;
                    feature.Net                     = net + .03 * x.NextDouble();
                    feature.NetAligned              = feature.Net;
                    feature.Net                     = feature.Net;
                    feature.DriftTime               = dt;
                    feature.AbundanceSum            = x.Next(100, 200);
                    feature.Abundance               = feature.Abundance;
                    feature.ClusterId               = -1;
                    features.Add(feature);
                }
            }
            featureCache.AddAll(features);
        }