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; }
/// <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); }
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); }