public IDictionary <int, IList <MSFeatureLight> > CreateXic(UMCLight feature, double massError, ISpectraProvider provider) { var features = new Dictionary <int, IList <MSFeatureLight> >(); var chargeFeatures = feature.CreateChargeMap(); // For each UMC... foreach (var charge in chargeFeatures.Keys) { // Find the mininmum and maximum features var msFeatures = CreateXic(chargeFeatures[charge], massError, provider); features.Add(charge, new List <MSFeatureLight>()); foreach (var newFeature in msFeatures) { // Here we ask if this is a new MS Feature or old... if (!chargeFeatures.ContainsKey(newFeature.Scan)) { // Otherwise add the new feature newFeature.MassMonoisotopic = feature.MassMonoisotopic; newFeature.DriftTime = feature.DriftTime; newFeature.GroupId = feature.GroupId; } features[charge].Add(newFeature); } } return(features); }
private void UpdateCharges(UMCLight feature) { Charges.Clear(); m_scanMaps = feature.CreateChargeMap(); foreach (var charge in m_scanMaps.Keys) { double mz = 0; var minScan = int.MaxValue; var maxScan = int.MinValue; double maxIntensity = 0; foreach (var msFeature in m_scanMaps[charge]) { minScan = Math.Min(minScan, msFeature.Scan); maxScan = Math.Max(maxScan, msFeature.Scan); if (maxIntensity >= msFeature.Abundance) { continue; } maxIntensity = msFeature.Abundance; mz = msFeature.Mz; } Charges.Add(new ChargeStateViewModel(charge, mz, minScan, maxScan)); } if (Charges.Count <= 0) { return; } SelectedCharge = Charges[0]; }
/// <summary> /// Creates SIC's mapped by charge state for the MS Features in the feature. /// </summary> /// <param name="feature"></param> /// <returns></returns> public static Dictionary <int, List <XYZData> > CreateChargeSICForMonoMass(this UMCLight feature) { var chargeMap = feature.CreateChargeMap(); var sicMap = new Dictionary <int, List <XYZData> >(); foreach (var charge in chargeMap.Keys) { chargeMap[charge].Sort(delegate(MSFeatureLight x, MSFeatureLight y) { return(x.Scan.CompareTo(y.Scan)); } ); var data = chargeMap[charge].ConvertAll(x => new XYZData(x.Scan, x.Abundance, x.MassMonoisotopicAligned)); sicMap.Add(charge, data); } return(sicMap); }
/// <summary> /// Creates SIC's mapped by charge state for the MS Features in the feature. /// </summary> /// <param name="feature"></param> /// <param name="provider">Object that can read data from a raw file or data source.</param> /// <returns></returns> public static Dictionary <int, List <XYZData> > CreateChargeSIC(this UMCLight feature, ISpectraProvider provider) { var chargeMap = feature.CreateChargeMap(); var sicMap = new Dictionary <int, List <XYZData> >(); foreach (var charge in chargeMap.Keys) { chargeMap[charge].Sort(delegate(MSFeatureLight x, MSFeatureLight y) { return(x.Scan.CompareTo(y.Scan)); } ); var data = chargeMap[charge].ConvertAll(x => new XYZData(x.Scan, x.Abundance, x.Mz)); sicMap.Add(charge, data); } if (provider != null) { // Creates an SIC map for a given charge state of the feature. foreach (var charge in sicMap.Keys) { var data = sicMap[charge]; // The data is alread sorted. var minScan = int.MaxValue; var maxScan = int.MinValue; var mzValues = new List <double>(); foreach (var x in data) { mzValues.Add(x.Z); minScan = Math.Min(minScan, Convert.ToInt32(x.X)); maxScan = Math.Max(maxScan, Convert.ToInt32(x.X)); } mzValues.Sort(); double mz = 0; var mid = Convert.ToInt32(mzValues.Count / 2); mz = mzValues[mid]; minScan -= 20; maxScan += 20; // Build the SIC var intensities = new List <XYZData>(); for (var scan = minScan; scan < maxScan; scan++) { var summary = new ScanSummary(); var spectrum = provider.GetRawSpectra(scan, 1, out summary); double intensity = 0; var minDistance = double.MaxValue; var index = -1; for (var i = 0; i < spectrum.Count; i++) { var distance = spectrum[i].X - mz; if (distance < minDistance) { index = i; minDistance = distance; } } if (index >= 0) { intensity = spectrum[index].Y; } var newPoint = new XYZData(scan, intensity, mz); intensities.Add(newPoint); } sicMap[charge] = intensities; } } return(sicMap); }
private void UpdateCharges(UMCLight feature) { Charges.Clear(); m_scanMaps = feature.CreateChargeMap(); foreach (var charge in m_scanMaps.Keys) { double mz = 0; var minScan = int.MaxValue; var maxScan = int.MinValue; double maxIntensity = 0; foreach (var msFeature in m_scanMaps[charge]) { minScan = Math.Min(minScan, msFeature.Scan); maxScan = Math.Max(maxScan, msFeature.Scan); if (maxIntensity >= msFeature.Abundance) continue; maxIntensity = msFeature.Abundance; mz = msFeature.Mz; } Charges.Add(new ChargeStateViewModel(charge, mz, minScan, maxScan)); } if (Charges.Count <= 0) return; SelectedCharge = Charges[0]; }