public static IEnumerable <IMSMSFeature> SplitByIMSScan(IEnumerable <IMSMSFeature> imsmsFeatureEnumerable, int maxGap) { var newIMSMSFeatureList = new List <IMSMSFeature>(); foreach (var imsmsFeature in imsmsFeatureEnumerable) { IEnumerable <MSFeature> msFeatureList = imsmsFeature.MSFeatureList.OrderBy(x => x.ScanIMS); IMSMSFeature newIMSMSFeature = null; var scanIMSReference = -99999; foreach (var msFeature in msFeatureList) { if (msFeature.ScanIMS - scanIMSReference > maxGap) { newIMSMSFeature = new IMSMSFeature(imsmsFeature.ScanLC, imsmsFeature.Charge); newIMSMSFeature.AddMSFeature(msFeature); newIMSMSFeatureList.Add(newIMSMSFeature); } else { newIMSMSFeature?.AddMSFeature(msFeature); } scanIMSReference = msFeature.ScanIMS; } } return(newIMSMSFeatureList); }
public static IEnumerable <IMSMSFeature> ClusterByMass(IEnumerable <MSFeature> msFeatureEnumerable) { var imsmsFeatureList = new List <IMSMSFeature>(); var massToleranceBase = Settings.MassMonoisotopicConstraint; var sortByMassQuery = from msFeature in msFeatureEnumerable orderby msFeature.MassMonoisotopic select msFeature; IMSMSFeature imsmsFeature = null; var massReference = double.MinValue; foreach (var msFeature in sortByMassQuery) { var mass = msFeature.MassMonoisotopic; var massTolerance = massToleranceBase * massReference / 1000000; var massToleranceHigh = massReference + massTolerance; var massToleranceLow = massReference - massTolerance; if (mass >= massToleranceLow && mass <= massToleranceHigh && imsmsFeature != null) { imsmsFeature.AddMSFeature(msFeature); } else { imsmsFeature = new IMSMSFeature(msFeature.ScanLC, msFeature.Charge); imsmsFeature.AddMSFeature(msFeature); imsmsFeatureList.Add(imsmsFeature); } massReference = mass; } return(imsmsFeatureList); }