public static TrailerExtraCollection TrailerExtras(IRawDataPlus rawFile, ScanIndex index) { rawFile.SelectInstrument(Device.MS, 1); Log.Information("Extracting trailer extras"); TrailerExtraCollection trailerExtras = new TrailerExtraCollection(); TrailerExtraIndices trailerIndices = new TrailerExtraIndices(rawFile); Double[] spsMasses; var scans = index.ScanEnumerators[MSOrderType.Any]; ProgressIndicator P = new ProgressIndicator(scans.Count(), "Extracting trailer extras"); P.Start(); foreach (int scan in scans) { trailerExtras[scan] = ExtractOneTrailerExtra(rawFile, scan, trailerIndices); P.Update(); } P.Done(); return(trailerExtras); }
private static TrailerExtraData ExtractOneTrailerExtra(IRawDataPlus rawFile, int scan, TrailerExtraIndices indices) { TrailerExtraData trailerExtra = new TrailerExtraData(); Double[] spsMasses; if (indices.InjectionTime != -1) { trailerExtra.InjectionTime = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.InjectionTime)); } if (indices.ChargeState != -1) { trailerExtra.ChargeState = Convert.ToInt32(rawFile.GetTrailerExtraValue(scan, indices.ChargeState)); } if (indices.MonoisotopicMZ != -1) { trailerExtra.MonoisotopicMZ = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.MonoisotopicMZ)); } if (indices.MasterScan != -1) { try { trailerExtra.MasterScan = Convert.ToInt32(rawFile.GetTrailerExtraValue(scan, indices.MasterScan)); } // if that doesn't work the master scan is (hopefully) not applicable, we can leave it at the defaule value of -1 catch (FormatException) { } } if (indices.HCDEnergy != -1) { var hcd = rawFile.GetTrailerExtraValue(scan, indices.HCDEnergy).ToString(); if (hcd != "N/A" & hcd != "" & !hcd.All(x => x == ' ')) { try { trailerExtra.HCDEnergy = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.HCDEnergy)); } catch (FormatException) { } } } if (indices.SPSMasses.Count > 2) // if so, this means with have all SPS masses listed individually { spsMasses = new double[indices.SPSMasses.Count]; for (int i = 0; i < indices.SPSMasses.Count; i++) { spsMasses[i] = Convert.ToDouble(rawFile.GetTrailerExtraValue(scan, indices.SPSMasses[i])); } } if (indices.SPSMasses.Count == 0) // there are no SPS masses { spsMasses = new double[0]; } else // they are broken into two lists of strings, comma delimited { char[] delimiter = { ' ', ',' }; string[] stringsps1 = rawFile.GetTrailerExtraValue(scan, indices.SPSMasses[0]).ToString().Split(delimiter, StringSplitOptions.RemoveEmptyEntries); string[] stringsps2 = rawFile.GetTrailerExtraValue(scan, indices.SPSMasses[1]).ToString().Split(delimiter, StringSplitOptions.RemoveEmptyEntries); double[] sps1 = Array.ConvertAll(stringsps1, Convert.ToDouble); double[] sps2 = Array.ConvertAll(stringsps2, Convert.ToDouble); spsMasses = new double[sps1.Length + sps2.Length]; sps1.CopyTo(spsMasses, 0); sps2.CopyTo(spsMasses, sps1.Length); } trailerExtra.SPSMasses = spsMasses; return(trailerExtra); }