Пример #1
0
        public void TestEuclideanDistanceForSpatialVectors()
        {
            var v1   = FeatureUtil.makeSpatialVector(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
            var v2   = FeatureUtil.makeSpatialVector(1.0, -1.0, 1.0, -1.0, 1.0, -1.0);
            var dist = SpectralModelBuilder.euclideanDistance(v1, v2);

            Assert.AreEqual(dist, Math.Sqrt(6.0));
        }
Пример #2
0
        public void TestEuclideanDistanceForScalars()
        {
            var h1   = FeatureUtil.makeNum(1.0);
            var h2   = FeatureUtil.makeNum(0.0);
            var dist = SpectralModelBuilder.euclideanDistance(h1, h2);

            Assert.AreEqual(dist, 1.0);
        }
Пример #3
0
        public void SimpleCountableHashTest()
        {
            var o     = BigInteger.One;
            var c     = FeatureUtil.makeFullCVR(1, 1, 1, 1, 1, 1, 1);
            var bvbi  = o | (o << 1) | (o << 2) | (o << 3) | (o << 4) | (o << (20 * 5)) | (o << (20 * 5 + 1));
            var bv    = UInt128.FromBigInteger(bvbi);
            var bv_is = LSHCalc.h7(c);

            Assert.AreEqual(bv, bv_is);
        }
Пример #4
0
        public static IEnumerable <LCIMSMSFeature> CorrectLCIMSMSFeatures(List <LCIMSMSFeature> lcImsMsFeatureEnumerable)
        {
            var massToleranceBase = Settings.MassMonoisotopicConstraint;

            // ReSharper disable once NotAccessedVariable
            var totalFound = 0;

            foreach (var lcimsmsFeature in lcImsMsFeatureEnumerable)
            {
                if (lcimsmsFeature.imsMsFeatureList.Count == 0)
                {
                    continue;
                }

                var averageMass   = lcimsmsFeature.CalculateAverageMonoisotopicMass();
                var massTolerance = massToleranceBase * averageMass / 1000000.0;

                var errorFlagPercentage = lcimsmsFeature.GetFlaggedPercentage();

                var searchForDaErrorQuery = from otherLCIMSMSFeature in lcImsMsFeatureEnumerable
                                            where
                                            Math.Abs(averageMass - otherLCIMSMSFeature.CalculateAverageMonoisotopicMass()) >= (1 - massTolerance) &&
                                            Math.Abs(averageMass - otherLCIMSMSFeature.CalculateAverageMonoisotopicMass()) <= (1 + massTolerance) &&
                                            otherLCIMSMSFeature.imsMsFeatureList.Count > 0
                                            orderby Math.Abs(errorFlagPercentage - otherLCIMSMSFeature.GetFlaggedPercentage()) descending
                                            select otherLCIMSMSFeature;

                foreach (var lcimsmsFeatureToCheck in searchForDaErrorQuery.AsParallel().Where(lcimsmsFeatureToCheck => Math.Abs(errorFlagPercentage - lcimsmsFeatureToCheck.GetFlaggedPercentage()) > 0.3))
                {
                    //bool featuresFitTogether = FeatureUtil.DoLCIMSMSFeaturesFitTogether(lcimsmsFeature, lcimsmsFeatureToCheck);

                    //if (featuresFitTogether)
                    //{
                    if (errorFlagPercentage > lcimsmsFeatureToCheck.GetFlaggedPercentage())
                    {
                        FeatureUtil.MergeLCIMSMSFeatures(lcimsmsFeatureToCheck, lcimsmsFeature);
                    }
                    else
                    {
                        FeatureUtil.MergeLCIMSMSFeatures(lcimsmsFeature, lcimsmsFeatureToCheck);
                    }

                    totalFound++;
                    break;
                    //}
                }
            }

            var newFeatureListQuery = lcImsMsFeatureEnumerable.Where(lcimsmsFeature => lcimsmsFeature.imsMsFeatureList.Count > 0);

            return(newFeatureListQuery.AsEnumerable());
        }
Пример #5
0
        public void AddImsMsFeature(imsMsFeature imsMsFeature)
        {
            var lcScan = imsMsFeature.ScanLC;

            foreach (var otherImsMsFeature in imsMsFeatureList.Where(otherImsMsFeature => otherImsMsFeature.ScanLC == lcScan))
            {
                FeatureUtil.MergeImsMsFeatures(imsMsFeature, otherImsMsFeature);
                imsMsFeatureList.Add(imsMsFeature);
                imsMsFeatureList.Remove(otherImsMsFeature);
                return;
            }

            imsMsFeatureList.Add(imsMsFeature);
        }
Пример #6
0
        public void AddIMSMSFeature(IMSMSFeature imsmsFeature)
        {
            var lcScan = imsmsFeature.ScanLC;

            foreach (var otherIMSMSFeature in IMSMSFeatureList.Where(otherIMSMSFeature => otherIMSMSFeature.ScanLC == lcScan))
            {
                FeatureUtil.MergeIMSMSFeatures(imsmsFeature, otherIMSMSFeature);
                IMSMSFeatureList.Add(imsmsFeature);
                IMSMSFeatureList.Remove(otherIMSMSFeature);
                return;
            }

            IMSMSFeatureList.Add(imsmsFeature);
        }
        public async void SetUpVM(IVideoFrameInputController controller)
        {
            // WinML requires Windows 10 build 17728 or higher to run: https://docs.microsoft.com/en-us/windows/ai/
            if (!MLHelper.IsMLAvailable())
            {
                IsEnabled = false;
                AppService.DisplayDialog(FeatureUtil.GetLocalizedText("WinMLNotAvailableTitle"), FeatureUtil.GetLocalizedText("WinMLNotAvailableDescription"));
                return;
            }

            LogService.Write($"Loading model {ModelFileName}...");
            var modelFile = await FileUtil.GetFileFromInstalledLocationAsync(MLHelper.ModelBasePath + ModelFileName);

            _model = await mnistModel.CreateFromStreamAsync(modelFile);

            _controller             = controller;
            _controller.InputReady += Controller_InputReady;

            IsEnabled = true;
        }
Пример #8
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;
            }
        }