コード例 #1
0
        public PrecursorIon(Sample sample, IEnumerable <Query> queries, double mz, int charge)
        {
            this.MZ      = mz;
            this.Charge  = charge;
            this.Queries = new Queries();
            foreach (Query query in queries)
            {
                if (query.sample == sample)
                {
                    this.Queries.Add(query);
                }
            }

            this.Queries.Sort(Query.AscendingRetentionTimeComparison);
            Dictionary <double, double> dicOfTimeInMsVsIntensityPerMs = new Dictionary <double, double>();
            Dictionary <double, double> dicOfTimeInMsVsIntensityCount = new Dictionary <double, double>();

            PeakTopIntensity = 0.0;
            foreach (Query query in this.Queries)
            {
                double time = query.spectrum.RetentionTimeInMin * 60.0 * 1000.0;
                dicOfTimeInMsVsIntensityPerMs.Add(time, query.spectrum.PrecursorIntensityPerMilliSecond);
                dicOfTimeInMsVsIntensityCount.Add(time, query.spectrum.PrecursorIntensity);
                if (query.spectrum.PrecursorIntensity > PeakTopIntensity)
                {
                    PeakTopIntensity = query.spectrum.PrecursorIntensity;
                }
            }
            this.eCurveIntensityCount = ElutionCurve.Create(dicOfTimeInMsVsIntensityCount);//dicOfTimeInMsVsIntensityPerMs);
            this.eCurveIntensityPerMS = ElutionCurve.Create(dicOfTimeInMsVsIntensityPerMs);
            this.Sample = sample;
        }
コード例 #2
0
        /// <summary>
        /// Computes a curve [precursor observed intensity ; correction so that precursor computed intensity from fragments matches observed intensity]
        /// </summary>
        /// <param name="dbOptions"></param>
        /// <param name="nbProductsToKeep"></param>
        /// <returns></returns>
        private ElutionCurve GetNormalizingCurve(DBOptions dbOptions, int nbProductsToKeep)
        {
            List <CharacterizedPrecursor> Isomers = new List <CharacterizedPrecursor>();

            Isomers.Add(this);

            ElutionCurve curve = new ElutionCurve();

            foreach (Query query in this.Queries)
            {
                double timeInMilliSeconds = query.spectrum.RetentionTimeInMin * 60.0 * 1000.0;

                double underFlow    = 0;
                double percentError = 0;
                double intInTrap    = query.spectrum.PrecursorIntensityPerMilliSecond * query.spectrum.InjectionTime;
                Dictionary <CharacterizedPrecursor, PositionnalIsomerSolver.SolvedResult> finalRatios = PositionnalIsomerSolver.SolveFromSpectrum(Isomers, nbProductsToKeep, query.spectrum.Peaks, dbOptions.productMassTolerance,
                                                                                                                                                  intInTrap, query.spectrum.PrecursorIntensity,
                                                                                                                                                  out underFlow, out percentError, dbOptions.ConSole);

                if (percentError < 0.5 && finalRatios[this].NbFitTimes > 0)
                {
                    double ratio = intInTrap / finalRatios[this].NbFitTimes;
                    if (ratio > 0.5 && ratio < 2)
                    {
                        curve.AddPoint(intInTrap, intInTrap / finalRatios[this].NbFitTimes);
                    }
                }
            }
            curve.Compute(CurveType.LINEAR, true);
            return(curve);
        }
コード例 #3
0
        private double GetNbTimesFit(DBOptions dbOptions, int nbProductsToKeep, double precision, out double area)
        {
            long   nbRatios = 0;
            double nbTimes  = 0;

            area = 0.0;
            List <CharacterizedPrecursor> Isomers = new List <CharacterizedPrecursor>();

            Isomers.Add(this);

            ElutionCurve curve = new ElutionCurve();

            foreach (Query query in this.Queries)
            {
                //double overFlow = 0;
                double underFlow    = 0;
                double percentError = 0;
                Dictionary <CharacterizedPrecursor, PositionnalIsomerSolver.SolvedResult> finalRatios = PositionnalIsomerSolver.SolveFromSpectrum(Isomers, nbProductsToKeep, precision, query.spectrum.Peaks, dbOptions.productMassTolerance,
                                                                                                                                                  query.spectrum.PrecursorIntensityPerMilliSecond * query.spectrum.InjectionTime, out underFlow, out percentError, dbOptions.ConSole);

                if (percentError < 0.5)
                {
                    curve.AddPoint(query.spectrum.RetentionTimeInMin * 1000.0 * 60.0, finalRatios[this].Ratio * query.spectrum.PrecursorIntensityPerMilliSecond);
                    nbTimes += finalRatios[this].NbFitTimes;
                    nbRatios++;
                }
            }
            if (nbRatios > 2 && curve.GetNbPoints() > this.Queries.Count * 0.5)
            {
                curve.Compute();
                if (curve.Area > 0)
                {
                    area = curve.Area;
                }
            }
            return(nbTimes / (double)nbRatios);
        }