/// <summary> /// Constructor /// </summary> /// <param name="run">LcMsRun (for determining minimum and maximum elution time</param> /// <param name="features">List of features</param> /// <param name="title">Plot title</param> /// <param name="minMass">Minimum mass</param> /// <param name="maxMass">Maximum mass</param> public LcMsFeatureMap(LcMsRun run, IEnumerable<LcMsFeature> features, string title, double minMass, double maxMass) : this(features, title, minMass, maxMass, Math.Max(run.GetElutionTime(run.MinLcScan) - 5, 0), run.GetElutionTime(run.MaxLcScan) + 5) { }
private List<ProductSpectrum> GetMatchedSpectrums(LcMsRun run, IList<int> ms2List ,Tuple<int,double, double, double, double,double> feature, int fileIndex) { var spectrumList = new List<ProductSpectrum>(); var mass = feature.Item2; var minElution = feature.Item3; var maxElution = feature.Item4; var featureId = feature.Item1 - 1; var det = new Tuple<int, double, int>(-1, -1.0, -1); for (var i = 0; i < ms2List.Count; i++) { var scanElutionTime = run.GetElutionTime(ms2List[i]); if (scanElutionTime < minElution || scanElutionTime > maxElution) continue; var spectrum = run.GetSpectrum(ms2List[i]) as ProductSpectrum; var window = spectrum.IsolationWindow; var minMz = window.MinMz - .5; var maxMz = window.MaxMz + .5; var mzTable = GetFeatureMassTable(mass); for (var j = 0; j < mzTable.Length; j++) { var mz = mzTable[j]; if (mz < minMz || mz > maxMz) continue; spectrumList.Add(spectrum); if(!(det.Item1 > -1)) det = new Tuple<int, double, int>(ms2List[i],mz,j+2); break; } _identifiedFeatures[featureId][fileIndex] = det; } return spectrumList; }
private Tuple<int, int> GetMinMaxMs1ScanNum(LcMsRun run, double minTime, double maxTime) { var ms1ScanNums = run.GetMs1ScanVector(); var minScanNum = -1; var maxScanNum = -1; for(var i = 1; i < ms1ScanNums.Length; i++) { var time = run.GetElutionTime(ms1ScanNums[i]); if (minScanNum < 0 && time > minTime) { minScanNum = ms1ScanNums[i - 1]; } if (maxScanNum < 0 && time > maxTime) { maxScanNum = ms1ScanNums[i]; break; } } return new Tuple<int, int>(minScanNum, maxScanNum); }