From 08a77d637bc1da4a7e4a15ab3ccd5c54a7d26d78 Mon Sep 17 00:00:00 2001 From: "heting.zhao" Date: Tue, 21 Feb 2023 10:13:21 +0000 Subject: [PATCH 01/23] ZSPACE-12104 Extend metadata. --- MainClass.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MainClass.cs b/MainClass.cs index 7ece9cf..19df55a 100644 --- a/MainClass.cs +++ b/MainClass.cs @@ -51,10 +51,10 @@ public static void Main(string[] args) private static void XicParametersParsing(string[] args) { XicParameters parameters = new XicParameters(); - string singleFile = null; + string singleFile = "D:\\ht\\testdata\\Columbo-PM-22-291-MetIDEFatePhoto-07092022-MA-04B.raw"; string fileDirectory = null; string outputFile = null; - string outputDirectory = null; + string outputDirectory = "D:\\ht\\testdata"; string logFormatString = null; var optionSet = new OptionSet From d52ba2fe3f5e122348a2cf3c0cf38dccc759623c Mon Sep 17 00:00:00 2001 From: "heting.zhao" Date: Wed, 22 Feb 2023 05:53:37 +0000 Subject: [PATCH 02/23] ZSPACE-12104 Update txt content. --- Writer/MetadataWriter.cs | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index e7554ce..989dde0 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -299,12 +299,14 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la // Get the start and end time from the RAW file var startTime = rawFile.RunHeaderEx.StartTime; var endTime = rawFile.RunHeaderEx.EndTime; + string filePath = rawFile.FileName; // File Properties var output = new List { "#FileProperties", "RAW file path=" + rawFile.FileName, + "RAW file name=" + rawFile.FileName.Substring(0, rawFile.FileName.LastIndexOf(".")).Remove(0, rawFile.FileName.LastIndexOf("\\") + 1), "RAW file version=" + rawFile.FileHeader.Revision, "Creation date=" + rawFile.FileHeader.CreationDate }; @@ -415,6 +417,53 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la output.Add("Sample dilution factor=" + rawFile.SampleInformation.DilutionFactor); } + if (rawFile.SampleInformation.IstdAmount != 0) + { + output.Add("Istd Amount=" + rawFile.SampleInformation.IstdAmount); + } + + if (!rawFile.SampleInformation.CalibrationLevel.IsNullOrEmpty()) + { + output.Add("Calibration Level=" + rawFile.SampleInformation.CalibrationLevel); + } + + if (!rawFile.SampleInformation.InstrumentMethodFile.IsNullOrEmpty()) + { + output.Add("Instrument Method=" + rawFile.SampleInformation.InstrumentMethodFile); + } + + if (rawFile.SampleInformation.SampleWeight != 0) + { + output.Add("Sample Weight=" + rawFile.SampleInformation.SampleWeight); + } + + if (!rawFile.SampleInformation.ProcessingMethodFile.IsNullOrEmpty()) + { + output.Add("Processing Method=" + rawFile.SampleInformation.ProcessingMethodFile); + } + + if (!rawFile.SampleInformation.Path.IsNullOrEmpty()) + { + output.Add("Path=" + rawFile.SampleInformation.Path); + } + + string[] userLabels = rawFile.UserLabel; + string[] userTexts = rawFile.SampleInformation.UserText; + if (!userLabels.IsNullOrEmpty() && !userTexts.IsNullOrEmpty()) + { + if (userLabels.Length > userTexts.Length) + { + throw new RawFileParserException(); + } + for (int i = 0; i < userLabels.Length; i++) + { + if (!userTexts[i].IsNullOrEmpty()) + { + output.Add(userLabels[i] + "=" + userTexts[i]); + } + } + } + // Write the meta data to file File.WriteAllLines(_metadataFileName, output.ToArray()); } From 84519e85b92d981e7e6debd4018911ec9a10912c Mon Sep 17 00:00:00 2001 From: "heting.zhao" Date: Wed, 22 Feb 2023 07:46:09 +0000 Subject: [PATCH 03/23] ZSPACE-12104 Update json content. --- Writer/MetadataWriter.cs | 55 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index 989dde0..14e2b8c 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -152,7 +152,9 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last var metadata = new Metadata(); // File Properties - metadata.addFileProperty(new CVTerm("NCIT:C47922", "NCIT", "Pathname", rawFile.FileName)); + string filePath = rawFile.FileName; + metadata.addFileProperty(new CVTerm("NCIT:C47922", "NCIT", "Pathname", filePath)); + metadata.addFileProperty(new CVTerm("NCIT:*****************", "NCIT", "File Name", filePath.Substring(0, filePath.LastIndexOf(".")).Remove(0, filePath.LastIndexOf("\\") + 1))); metadata.addFileProperty(new CVTerm("NCIT:C25714", "NCIT", "Version", rawFile.FileHeader.Revision.ToString())); metadata.addFileProperty(new CVTerm("NCIT:C69199", "NCIT", "Content Creation Date", @@ -280,6 +282,53 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last rawFile.SampleInformation.DilutionFactor.ToString(CultureInfo.InvariantCulture))); } + if (!rawFile.SampleInformation.Path.IsNullOrEmpty()) + { + metadata.addSampleProperty(new CVTerm("AFQ:**********************", "AFO", "Path", rawFile.SampleInformation.Path)); + } + + if (!rawFile.SampleInformation.InstrumentMethodFile.IsNullOrEmpty()) + { + metadata.addSampleProperty(new CVTerm("AFQ:******************", "AFO", "Instrument Method", rawFile.SampleInformation.InstrumentMethodFile)); + } + + if (rawFile.SampleInformation.IstdAmount != 0) + { + metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Istd Amount", rawFile.SampleInformation.IstdAmount.ToString())); + } + + if (!rawFile.SampleInformation.CalibrationLevel.IsNullOrEmpty()) + { + metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Calibration Level", rawFile.SampleInformation.CalibrationLevel)); + } + + if (!rawFile.SampleInformation.ProcessingMethodFile.IsNullOrEmpty()) + { + metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Processing Method", rawFile.SampleInformation.ProcessingMethodFile)); + } + + if (rawFile.SampleInformation.SampleWeight != 0) + { + metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Processing Method", rawFile.SampleInformation.SampleWeight.ToString())); + } + + string[] userLabels = rawFile.UserLabel; + string[] userTexts = rawFile.SampleInformation.UserText; + if (!userLabels.IsNullOrEmpty() && !userTexts.IsNullOrEmpty()) + { + if (userLabels.Length > userTexts.Length) + { + throw new RawFileParserException(); + } + for (int i = 0; i < userLabels.Length; i++) + { + if (!userTexts[i].IsNullOrEmpty()) + { + metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", userLabels[i], userTexts[i])); + } + } + } + // Write the meta data to file var json = JsonConvert.SerializeObject(metadata); @@ -305,8 +354,8 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la var output = new List { "#FileProperties", - "RAW file path=" + rawFile.FileName, - "RAW file name=" + rawFile.FileName.Substring(0, rawFile.FileName.LastIndexOf(".")).Remove(0, rawFile.FileName.LastIndexOf("\\") + 1), + "RAW file path=" + filePath, + "RAW file name=" + filePath.Substring(0, filePath.LastIndexOf(".")).Remove(0, filePath.LastIndexOf("\\") + 1), "RAW file version=" + rawFile.FileHeader.Revision, "Creation date=" + rawFile.FileHeader.CreationDate }; From c4df029cc43112f2ccb4517797acdc541dd8d58e Mon Sep 17 00:00:00 2001 From: "heting.zhao" Date: Fri, 24 Feb 2023 01:07:26 +0000 Subject: [PATCH 04/23] Remove reduncant properties. Squash 4 commits --- MainClass.cs | 4 +-- Writer/MetadataWriter.cs | 66 ++++++++++++++++------------------------ 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/MainClass.cs b/MainClass.cs index 19df55a..7ece9cf 100644 --- a/MainClass.cs +++ b/MainClass.cs @@ -51,10 +51,10 @@ public static void Main(string[] args) private static void XicParametersParsing(string[] args) { XicParameters parameters = new XicParameters(); - string singleFile = "D:\\ht\\testdata\\Columbo-PM-22-291-MetIDEFatePhoto-07092022-MA-04B.raw"; + string singleFile = null; string fileDirectory = null; string outputFile = null; - string outputDirectory = "D:\\ht\\testdata"; + string outputDirectory = null; string logFormatString = null; var optionSet = new OptionSet diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index 14e2b8c..f1911a4 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -152,9 +152,7 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last var metadata = new Metadata(); // File Properties - string filePath = rawFile.FileName; - metadata.addFileProperty(new CVTerm("NCIT:C47922", "NCIT", "Pathname", filePath)); - metadata.addFileProperty(new CVTerm("NCIT:*****************", "NCIT", "File Name", filePath.Substring(0, filePath.LastIndexOf(".")).Remove(0, filePath.LastIndexOf("\\") + 1))); + metadata.addFileProperty(new CVTerm("NCIT:C47922", "NCIT", "Pathname", rawFile.FileName)); metadata.addFileProperty(new CVTerm("NCIT:C25714", "NCIT", "Version", rawFile.FileHeader.Revision.ToString())); metadata.addFileProperty(new CVTerm("NCIT:C69199", "NCIT", "Content Creation Date", @@ -229,20 +227,20 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last // Sample Data if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("MS:1000002", "MS", "sample name", + metadata.addSampleProperty(new CVTerm("MS:1000002", "MS", "Sample Name", rawFile.SampleInformation.SampleName)); } if (!rawFile.SampleInformation.SampleId.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("MS:1000001", "MS", "sample number", + metadata.addSampleProperty(new CVTerm("MS:1000001", "MS", "Sample Number", rawFile.SampleInformation.SampleId)); } if (!rawFile.SampleInformation.SampleType.ToString().IsNullOrEmpty() && !rawFile.SampleInformation.SampleType.ToString().Equals("Unknown")) { - metadata.addSampleProperty(new CVTerm("NCIT:C25284", "NCIT", "Type", + metadata.addSampleProperty(new CVTerm("NCIT:C25284", "NCIT", "Sample Type", rawFile.SampleInformation.SampleType.ToString())); } @@ -260,13 +258,13 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last if (rawFile.SampleInformation.SampleVolume != 0) { - metadata.addSampleProperty(new CVTerm("MS:1000005", "MS", "sample volume", + metadata.addSampleProperty(new CVTerm("MS:1000005", "MS", "Sample Volume", rawFile.SampleInformation.SampleVolume.ToString(CultureInfo.InvariantCulture))); } if (rawFile.SampleInformation.InjectionVolume != 0) { - metadata.addSampleProperty(new CVTerm("AFR:0001577", "AFO", "injection volume setting", + metadata.addSampleProperty(new CVTerm("AFR:0001577", "AFO", "Injection Volume", rawFile.SampleInformation.InjectionVolume.ToString(CultureInfo.InvariantCulture))); } @@ -278,38 +276,33 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last if (rawFile.SampleInformation.DilutionFactor != 0) { - metadata.addSampleProperty(new CVTerm("AFQ:0000178", "AFO", "dilution factor", + metadata.addSampleProperty(new CVTerm("AFQ:0000178", "AFO", "Dilution Factor", rawFile.SampleInformation.DilutionFactor.ToString(CultureInfo.InvariantCulture))); } - if (!rawFile.SampleInformation.Path.IsNullOrEmpty()) - { - metadata.addSampleProperty(new CVTerm("AFQ:**********************", "AFO", "Path", rawFile.SampleInformation.Path)); - } - if (!rawFile.SampleInformation.InstrumentMethodFile.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFQ:******************", "AFO", "Instrument Method", rawFile.SampleInformation.InstrumentMethodFile)); + metadata.addSampleProperty(new CVTerm("AFR:0002045", "AFO", "Device Acquisition Method", rawFile.SampleInformation.InstrumentMethodFile)); } if (rawFile.SampleInformation.IstdAmount != 0) { - metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Istd Amount", rawFile.SampleInformation.IstdAmount.ToString())); + metadata.addSampleProperty(new CVTerm("", "", "Internal Standard Amount", rawFile.SampleInformation.IstdAmount.ToString())); } if (!rawFile.SampleInformation.CalibrationLevel.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Calibration Level", rawFile.SampleInformation.CalibrationLevel)); + metadata.addSampleProperty(new CVTerm("AFR:0001849", "AFO", "Calibration Level", rawFile.SampleInformation.CalibrationLevel)); } if (!rawFile.SampleInformation.ProcessingMethodFile.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Processing Method", rawFile.SampleInformation.ProcessingMethodFile)); + metadata.addSampleProperty(new CVTerm("AFR:0002175", "AFO", "Data Processing Method", rawFile.SampleInformation.ProcessingMethodFile)); } if (rawFile.SampleInformation.SampleWeight != 0) { - metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", "Processing Method", rawFile.SampleInformation.SampleWeight.ToString())); + metadata.addSampleProperty(new CVTerm("", "", "Sample Weight", rawFile.SampleInformation.SampleWeight.ToString())); } string[] userLabels = rawFile.UserLabel; @@ -324,7 +317,7 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last { if (!userTexts[i].IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFQ:****************", "AFO", userLabels[i], userTexts[i])); + metadata.addSampleProperty(new CVTerm("", "", userLabels[i], userTexts[i])); } } } @@ -348,14 +341,12 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la // Get the start and end time from the RAW file var startTime = rawFile.RunHeaderEx.StartTime; var endTime = rawFile.RunHeaderEx.EndTime; - string filePath = rawFile.FileName; // File Properties var output = new List { "#FileProperties", - "RAW file path=" + filePath, - "RAW file name=" + filePath.Substring(0, filePath.LastIndexOf(".")).Remove(0, filePath.LastIndexOf("\\") + 1), + "RAW File Path=" + rawFile.FileName, "RAW file version=" + rawFile.FileHeader.Revision, "Creation date=" + rawFile.FileHeader.CreationDate }; @@ -422,53 +413,53 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty()) { - output.Add("Sample name=" + rawFile.SampleInformation.SampleName); + output.Add("Sample Name=" + rawFile.SampleInformation.SampleName); } if (!rawFile.SampleInformation.SampleId.IsNullOrEmpty()) { - output.Add("Sample id=" + rawFile.SampleInformation.SampleId); + output.Add("Sample Number=" + rawFile.SampleInformation.SampleId); } if (!rawFile.SampleInformation.SampleType.ToString().IsNullOrEmpty() && !rawFile.SampleInformation.SampleType.ToString().Equals("Unknown")) { - output.Add("Sample type=" + rawFile.SampleInformation.SampleType); + output.Add("Sample Type=" + rawFile.SampleInformation.SampleType); } if (!rawFile.SampleInformation.Comment.IsNullOrEmpty()) { - output.Add("Sample comment=" + rawFile.SampleInformation.Comment); + output.Add("Comment=" + rawFile.SampleInformation.Comment); } if (!rawFile.SampleInformation.Vial.IsNullOrEmpty()) { - output.Add("Sample vial=" + rawFile.SampleInformation.Vial); + output.Add("Vial=" + rawFile.SampleInformation.Vial); } if (rawFile.SampleInformation.SampleVolume != 0) { - output.Add("Sample volume=" + rawFile.SampleInformation.SampleVolume); + output.Add("Sample Volume=" + rawFile.SampleInformation.SampleVolume); } if (rawFile.SampleInformation.InjectionVolume != 0) { - output.Add("Sample injection volume=" + rawFile.SampleInformation.InjectionVolume); + output.Add("Injection Volume=" + rawFile.SampleInformation.InjectionVolume); } if (rawFile.SampleInformation.RowNumber != 0) { - output.Add("Sample row number=" + rawFile.SampleInformation.RowNumber); + output.Add("Sample Row Number=" + rawFile.SampleInformation.RowNumber); } if (rawFile.SampleInformation.DilutionFactor != 0) { - output.Add("Sample dilution factor=" + rawFile.SampleInformation.DilutionFactor); + output.Add("Dilution Factor=" + rawFile.SampleInformation.DilutionFactor); } if (rawFile.SampleInformation.IstdAmount != 0) { - output.Add("Istd Amount=" + rawFile.SampleInformation.IstdAmount); + output.Add("Internal Standard Amount=" + rawFile.SampleInformation.IstdAmount); } if (!rawFile.SampleInformation.CalibrationLevel.IsNullOrEmpty()) @@ -478,7 +469,7 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la if (!rawFile.SampleInformation.InstrumentMethodFile.IsNullOrEmpty()) { - output.Add("Instrument Method=" + rawFile.SampleInformation.InstrumentMethodFile); + output.Add("Device Acquisition Method=" + rawFile.SampleInformation.InstrumentMethodFile); } if (rawFile.SampleInformation.SampleWeight != 0) @@ -488,12 +479,7 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la if (!rawFile.SampleInformation.ProcessingMethodFile.IsNullOrEmpty()) { - output.Add("Processing Method=" + rawFile.SampleInformation.ProcessingMethodFile); - } - - if (!rawFile.SampleInformation.Path.IsNullOrEmpty()) - { - output.Add("Path=" + rawFile.SampleInformation.Path); + output.Add("Data Processing Method=" + rawFile.SampleInformation.ProcessingMethodFile); } string[] userLabels = rawFile.UserLabel; From 7e64b28edfe45adceae07d987c70f93afefba4ba Mon Sep 17 00:00:00 2001 From: "Heting.Zhao" Date: Mon, 27 Feb 2023 06:23:44 +0000 Subject: [PATCH 05/23] Solve code review issues. Squash 2 Solve code review issues. --- Writer/MetadataWriter.cs | 65 +++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 37 deletions(-) diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index f1911a4..c76cd7a 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -227,20 +227,20 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last // Sample Data if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("MS:1000002", "MS", "Sample Name", + metadata.addSampleProperty(new CVTerm("MS:1000002", "MS", "sample name", rawFile.SampleInformation.SampleName)); } if (!rawFile.SampleInformation.SampleId.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("MS:1000001", "MS", "Sample Number", + metadata.addSampleProperty(new CVTerm("MS:1000001", "MS", "sample number", rawFile.SampleInformation.SampleId)); } if (!rawFile.SampleInformation.SampleType.ToString().IsNullOrEmpty() && !rawFile.SampleInformation.SampleType.ToString().Equals("Unknown")) { - metadata.addSampleProperty(new CVTerm("NCIT:C25284", "NCIT", "Sample Type", + metadata.addSampleProperty(new CVTerm("NCIT:C25284", "NCIT", "Type", rawFile.SampleInformation.SampleType.ToString())); } @@ -258,13 +258,13 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last if (rawFile.SampleInformation.SampleVolume != 0) { - metadata.addSampleProperty(new CVTerm("MS:1000005", "MS", "Sample Volume", + metadata.addSampleProperty(new CVTerm("MS:1000005", "MS", "sample volume", rawFile.SampleInformation.SampleVolume.ToString(CultureInfo.InvariantCulture))); } if (rawFile.SampleInformation.InjectionVolume != 0) { - metadata.addSampleProperty(new CVTerm("AFR:0001577", "AFO", "Injection Volume", + metadata.addSampleProperty(new CVTerm("AFR:0001577", "AFO", "injection volume setting", rawFile.SampleInformation.InjectionVolume.ToString(CultureInfo.InvariantCulture))); } @@ -276,53 +276,48 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last if (rawFile.SampleInformation.DilutionFactor != 0) { - metadata.addSampleProperty(new CVTerm("AFQ:0000178", "AFO", "Dilution Factor", + metadata.addSampleProperty(new CVTerm("AFQ:0000178", "AFO", "dilution factor", rawFile.SampleInformation.DilutionFactor.ToString(CultureInfo.InvariantCulture))); } if (!rawFile.SampleInformation.InstrumentMethodFile.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFR:0002045", "AFO", "Device Acquisition Method", rawFile.SampleInformation.InstrumentMethodFile)); + metadata.addSampleProperty(new CVTerm("AFR:0002045", "AFO", "device acquisition method", rawFile.SampleInformation.InstrumentMethodFile)); } if (rawFile.SampleInformation.IstdAmount != 0) { - metadata.addSampleProperty(new CVTerm("", "", "Internal Standard Amount", rawFile.SampleInformation.IstdAmount.ToString())); + metadata.addSampleProperty(new CVTerm("", "", "internal standard amount", rawFile.SampleInformation.IstdAmount.ToString())); } if (!rawFile.SampleInformation.CalibrationLevel.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFR:0001849", "AFO", "Calibration Level", rawFile.SampleInformation.CalibrationLevel)); + metadata.addSampleProperty(new CVTerm("AFR:0001849", "AFO", "calibration level", rawFile.SampleInformation.CalibrationLevel)); } if (!rawFile.SampleInformation.ProcessingMethodFile.IsNullOrEmpty()) { - metadata.addSampleProperty(new CVTerm("AFR:0002175", "AFO", "Data Processing Method", rawFile.SampleInformation.ProcessingMethodFile)); + metadata.addSampleProperty(new CVTerm("AFR:0002175", "AFO", "data processing method", rawFile.SampleInformation.ProcessingMethodFile)); } if (rawFile.SampleInformation.SampleWeight != 0) { - metadata.addSampleProperty(new CVTerm("", "", "Sample Weight", rawFile.SampleInformation.SampleWeight.ToString())); + metadata.addSampleProperty(new CVTerm("AFR:0001982", "AFO", "sample weight", rawFile.SampleInformation.SampleWeight.ToString())); } string[] userLabels = rawFile.UserLabel; string[] userTexts = rawFile.SampleInformation.UserText; if (!userLabels.IsNullOrEmpty() && !userTexts.IsNullOrEmpty()) { - if (userLabels.Length > userTexts.Length) - { - throw new RawFileParserException(); - } for (int i = 0; i < userLabels.Length; i++) { - if (!userTexts[i].IsNullOrEmpty()) + if (i < userTexts.Length && !userTexts[i].IsNullOrEmpty()) { metadata.addSampleProperty(new CVTerm("", "", userLabels[i], userTexts[i])); } } } - // Write the meta data to file var json = JsonConvert.SerializeObject(metadata); json.Replace("\r\n", "\n"); @@ -346,7 +341,7 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la var output = new List { "#FileProperties", - "RAW File Path=" + rawFile.FileName, + "RAW file path=" + rawFile.FileName, "RAW file version=" + rawFile.FileHeader.Revision, "Creation date=" + rawFile.FileHeader.CreationDate }; @@ -413,86 +408,82 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty()) { - output.Add("Sample Name=" + rawFile.SampleInformation.SampleName); + output.Add("Sample name=" + rawFile.SampleInformation.SampleName); } if (!rawFile.SampleInformation.SampleId.IsNullOrEmpty()) { - output.Add("Sample Number=" + rawFile.SampleInformation.SampleId); + output.Add("Sample id=" + rawFile.SampleInformation.SampleId); } if (!rawFile.SampleInformation.SampleType.ToString().IsNullOrEmpty() && !rawFile.SampleInformation.SampleType.ToString().Equals("Unknown")) { - output.Add("Sample Type=" + rawFile.SampleInformation.SampleType); + output.Add("Sample type=" + rawFile.SampleInformation.SampleType); } if (!rawFile.SampleInformation.Comment.IsNullOrEmpty()) { - output.Add("Comment=" + rawFile.SampleInformation.Comment); + output.Add("Sample comment=" + rawFile.SampleInformation.Comment); } if (!rawFile.SampleInformation.Vial.IsNullOrEmpty()) { - output.Add("Vial=" + rawFile.SampleInformation.Vial); + output.Add("Sample vial=" + rawFile.SampleInformation.Vial); } if (rawFile.SampleInformation.SampleVolume != 0) { - output.Add("Sample Volume=" + rawFile.SampleInformation.SampleVolume); + output.Add("Sample volume=" + rawFile.SampleInformation.SampleVolume); } if (rawFile.SampleInformation.InjectionVolume != 0) { - output.Add("Injection Volume=" + rawFile.SampleInformation.InjectionVolume); + output.Add("Sample injection volume=" + rawFile.SampleInformation.InjectionVolume); } if (rawFile.SampleInformation.RowNumber != 0) { - output.Add("Sample Row Number=" + rawFile.SampleInformation.RowNumber); + output.Add("Sample row number=" + rawFile.SampleInformation.RowNumber); } if (rawFile.SampleInformation.DilutionFactor != 0) { - output.Add("Dilution Factor=" + rawFile.SampleInformation.DilutionFactor); + output.Add("Sample dilution factor=" + rawFile.SampleInformation.DilutionFactor); } if (rawFile.SampleInformation.IstdAmount != 0) { - output.Add("Internal Standard Amount=" + rawFile.SampleInformation.IstdAmount); + output.Add("Internal standard amount=" + rawFile.SampleInformation.IstdAmount); } if (!rawFile.SampleInformation.CalibrationLevel.IsNullOrEmpty()) { - output.Add("Calibration Level=" + rawFile.SampleInformation.CalibrationLevel); + output.Add("Calibration level=" + rawFile.SampleInformation.CalibrationLevel); } if (!rawFile.SampleInformation.InstrumentMethodFile.IsNullOrEmpty()) { - output.Add("Device Acquisition Method=" + rawFile.SampleInformation.InstrumentMethodFile); + output.Add("Device acquisition method=" + rawFile.SampleInformation.InstrumentMethodFile); } if (rawFile.SampleInformation.SampleWeight != 0) { - output.Add("Sample Weight=" + rawFile.SampleInformation.SampleWeight); + output.Add("Sample weight=" + rawFile.SampleInformation.SampleWeight); } if (!rawFile.SampleInformation.ProcessingMethodFile.IsNullOrEmpty()) { - output.Add("Data Processing Method=" + rawFile.SampleInformation.ProcessingMethodFile); + output.Add("Data processing method=" + rawFile.SampleInformation.ProcessingMethodFile); } string[] userLabels = rawFile.UserLabel; string[] userTexts = rawFile.SampleInformation.UserText; if (!userLabels.IsNullOrEmpty() && !userTexts.IsNullOrEmpty()) { - if (userLabels.Length > userTexts.Length) - { - throw new RawFileParserException(); - } for (int i = 0; i < userLabels.Length; i++) { - if (!userTexts[i].IsNullOrEmpty()) + if (i < userTexts.Length && !userTexts[i].IsNullOrEmpty()) { output.Add(userLabels[i] + "=" + userTexts[i]); } From 233fbb20b9759abe33cdd747804cd81c51a2d5ef Mon Sep 17 00:00:00 2001 From: "MEMBER\\Heting.Zhao" Date: Thu, 2 Mar 2023 15:45:24 +0800 Subject: [PATCH 06/23] ZSPACE-12467 Check if the file is MS type. --- RawFileParser.cs | 24 +++-- Writer/MetadataWriter.cs | 224 +++++++++++++++++++++------------------ 2 files changed, 132 insertions(+), 116 deletions(-) mode change 100644 => 100755 RawFileParser.cs diff --git a/RawFileParser.cs b/RawFileParser.cs old mode 100644 new mode 100755 index 8ac667d..c233af1 --- a/RawFileParser.cs +++ b/RawFileParser.cs @@ -136,18 +136,22 @@ private static void ProcessFile(ParseInput parseInput) // Get the number of instruments (controllers) present in the RAW file and set the // selected instrument to the MS instrument, first instance of it - rawFile.SelectInstrument(Device.MS, 1); - - rawFile.IncludeReferenceAndExceptionData = !parseInput.ExData; + var firstScanNumber = -1; + var lastScanNumber = -1; + if (rawFile.GetInstrumentCountOfType(Device.MS) != 0) + { + rawFile.SelectInstrument(Device.MS, 1); + rawFile.IncludeReferenceAndExceptionData = !parseInput.ExData; - // Get the first and last scan from the RAW file - var firstScanNumber = rawFile.RunHeaderEx.FirstSpectrum; - var lastScanNumber = rawFile.RunHeaderEx.LastSpectrum; + // Get the first and last scan from the RAW file + firstScanNumber = rawFile.RunHeaderEx.FirstSpectrum; + lastScanNumber = rawFile.RunHeaderEx.LastSpectrum; - // Check for empty file - if (lastScanNumber < 1) - { - throw new RawFileParserException("Empty RAW file, no output will be produced"); + // Check for empty file + if (lastScanNumber < 1) + { + throw new RawFileParserException("Empty RAW file, no output will be produced"); + } } if (parseInput.MetadataFormat != MetadataFormat.NONE) diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index c76cd7a..5de86a2 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -46,73 +46,72 @@ public MetadataWriter(ParseInput parseInput) /// public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber) { - // Get the start and end time from the RAW file - var startTime = rawFile.RunHeaderEx.StartTime; - var endTime = rawFile.RunHeaderEx.EndTime; - - for (var scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++) + if(rawFile.SelectMsData()) { - var time = rawFile.RetentionTimeFromScanNumber(scanNumber); - - // Get the scan filter for this scan number - var scanFilter = rawFile.GetFilterForScanNumber(scanNumber); + for (var scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++) + { + var time = rawFile.RetentionTimeFromScanNumber(scanNumber); - // Get the scan event for this scan number - var scanEvent = rawFile.GetScanEventForScanNumber(scanNumber); + // Get the scan filter for this scan number + var scanFilter = rawFile.GetFilterForScanNumber(scanNumber); - // Keep track of the number of MS spectra - if (msTypes.ContainsKey(scanFilter.MSOrder.ToString())) - { - var value = msTypes[scanFilter.MSOrder.ToString()]; - value += 1; - msTypes[scanFilter.MSOrder.ToString()] = value; - } - else - msTypes.Add(scanFilter.MSOrder.ToString(), 1); + // Get the scan event for this scan number + var scanEvent = rawFile.GetScanEventForScanNumber(scanNumber); - if (time > maxTime) - maxTime = time; - if (time < minTime) - minTime = time; + // Keep track of the number of MS spectra + if (msTypes.ContainsKey(scanFilter.MSOrder.ToString())) + { + var value = msTypes[scanFilter.MSOrder.ToString()]; + value += 1; + msTypes[scanFilter.MSOrder.ToString()] = value; + } + else + msTypes.Add(scanFilter.MSOrder.ToString(), 1); - if (scanFilter.MSOrder == MSOrderType.Ms2) - { - fragmentationTypes.Add(ParseActivationType(scanFilter.GetActivation(0))); + if (time > maxTime) + maxTime = time; + if (time < minTime) + minTime = time; - if (scanEvent.ScanData == ScanDataType.Centroid || (scanEvent.ScanData == ScanDataType.Profile)) + if (scanFilter.MSOrder == MSOrderType.Ms2) { - try - { - var reaction = scanEvent.GetReaction(0); - var precursorMass = reaction.PrecursorMass; - if (precursorMass > maxMz) - maxMz = precursorMass; - if (precursorMass < minMz) - minMz = precursorMass; - } - catch (ArgumentOutOfRangeException) - { - Log.Warn("No reaction found for scan " + scanNumber); - _parseInput.NewWarn(); - } + fragmentationTypes.Add(ParseActivationType(scanFilter.GetActivation(0))); - // trailer extra data list - var trailerData = rawFile.GetTrailerExtraInformation(scanNumber); - for (var i = 0; i < trailerData.Length; i++) + if (scanEvent.ScanData == ScanDataType.Centroid || (scanEvent.ScanData == ScanDataType.Profile)) { - if (trailerData.Labels[i] == "Charge State:") + try + { + var reaction = scanEvent.GetReaction(0); + var precursorMass = reaction.PrecursorMass; + if (precursorMass > maxMz) + maxMz = precursorMass; + if (precursorMass < minMz) + minMz = precursorMass; + } + catch (ArgumentOutOfRangeException) { - if (int.Parse(trailerData.Values[i]) > maxCharge) - maxCharge = int.Parse(trailerData.Values[i]); + Log.Warn("No reaction found for scan " + scanNumber); + _parseInput.NewWarn(); + } - if (int.Parse(trailerData.Values[i]) < minCharge) - minCharge = int.Parse(trailerData.Values[i]); + // trailer extra data list + var trailerData = rawFile.GetTrailerExtraInformation(scanNumber); + for (var i = 0; i < trailerData.Length; i++) + { + if (trailerData.Labels[i] == "Charge State:") + { + if (int.Parse(trailerData.Values[i]) > maxCharge) + maxCharge = int.Parse(trailerData.Values[i]); + + if (int.Parse(trailerData.Values[i]) < minCharge) + minCharge = int.Parse(trailerData.Values[i]); + } } } } } } - + if (minCharge == 100000000000000) { minCharge = 0; @@ -145,10 +144,6 @@ public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastSca /// private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber) { - // Get the start and end time from the RAW file - var startTime = rawFile.RunHeaderEx.StartTime; - var endTime = rawFile.RunHeaderEx.EndTime; - var metadata = new Metadata(); // File Properties @@ -164,19 +159,23 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last } // Instrument Properties - metadata.addInstrumentProperty(new CVTerm("MS:1000494", "MS", "Thermo Scientific instrument model", - rawFile.GetInstrumentData().Model)); - metadata.addInstrumentProperty(new CVTerm("MS:1000496", "MS", "instrument attribute", - rawFile.GetInstrumentData().Name)); - metadata.addInstrumentProperty(new CVTerm("MS:1000529", "MS", "instrument serial number", - rawFile.GetInstrumentData().SerialNumber)); - metadata.addInstrumentProperty(new CVTerm("NCIT:C111093", "NCIT", "Software Version", - rawFile.GetInstrumentData().SoftwareVersion)); - if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty()) + if (rawFile.SelectMsData()) { - metadata.addInstrumentProperty(new CVTerm("AFR:0001259", "AFO", "firmware version", - rawFile.GetInstrumentData().HardwareVersion)); + metadata.addInstrumentProperty(new CVTerm("MS:1000494", "MS", "Thermo Scientific instrument model", + rawFile.GetInstrumentData().Model)); + metadata.addInstrumentProperty(new CVTerm("MS:1000496", "MS", "instrument attribute", + rawFile.GetInstrumentData().Name)); + metadata.addInstrumentProperty(new CVTerm("MS:1000529", "MS", "instrument serial number", + rawFile.GetInstrumentData().SerialNumber)); + metadata.addInstrumentProperty(new CVTerm("NCIT:C111093", "NCIT", "Software Version", + rawFile.GetInstrumentData().SoftwareVersion)); + if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty()) + { + metadata.addInstrumentProperty(new CVTerm("AFR:0001259", "AFO", "firmware version", + rawFile.GetInstrumentData().HardwareVersion)); + } } + // MS Data foreach (KeyValuePair entry in msTypes) @@ -208,21 +207,30 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last maxMz.ToString(CultureInfo.InvariantCulture))); // Scan Settings - metadata.addScanSetting(new CVTerm("MS:1000016", "MS", "scan start time", - startTime.ToString(CultureInfo.InvariantCulture))); - metadata.addScanSetting(new CVTerm("MS:1000011", "MS", "mass resolution", - rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture))); - metadata.addScanSetting(new CVTerm("UO:0000002", "MS", "mass unit", - rawFile.GetInstrumentData().Units.ToString())); - metadata.addScanSetting(new CVTerm("PRIDE:0000478", "PRIDE", "Number of scans", - rawFile.RunHeaderEx.SpectraCount.ToString())); - metadata.addScanSetting(new CVTerm("PRIDE:0000479", "PRIDE", "MS scan range", - firstScanNumber + ":" + lastScanNumber)); - metadata.addScanSetting(new CVTerm("PRIDE:0000484", "PRIDE", "Retention time range", - startTime + ":" + endTime)); - metadata.addScanSetting(new CVTerm("PRIDE:0000485", "PRIDE", "Mz range", - rawFile.RunHeaderEx.LowMass + ":" + rawFile.RunHeaderEx.HighMass)); - metadata.addScanSetting(fragmentationTypes); + // Get the start and end time from the RAW file + + if (rawFile.SelectMsData()) + { + var runHeader = rawFile.RunHeader; + var runHeaderEx = rawFile.RunHeaderEx; + var startTime = runHeaderEx.StartTime; + var endTime = runHeaderEx.EndTime; + metadata.addScanSetting(new CVTerm("MS:1000016", "MS", "scan start time", + startTime.ToString(CultureInfo.InvariantCulture))); + metadata.addScanSetting(new CVTerm("MS:1000011", "MS", "mass resolution", + runHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture))); + metadata.addScanSetting(new CVTerm("UO:0000002", "MS", "mass unit", + rawFile.GetInstrumentData().Units.ToString())); + metadata.addScanSetting(new CVTerm("PRIDE:0000478", "PRIDE", "Number of scans", + runHeaderEx.SpectraCount.ToString())); + metadata.addScanSetting(new CVTerm("PRIDE:0000484", "PRIDE", "Retention time range", + startTime + ":" + endTime)); + metadata.addScanSetting(new CVTerm("PRIDE:0000485", "PRIDE", "Mz range", + runHeaderEx.LowMass + ":" + runHeaderEx.HighMass)); + metadata.addScanSetting(fragmentationTypes); + metadata.addScanSetting(new CVTerm("PRIDE:0000479", "PRIDE", "MS scan range", + firstScanNumber + ":" + lastScanNumber)); + } // Sample Data if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty()) @@ -333,10 +341,6 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last /// private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber) { - // Get the start and end time from the RAW file - var startTime = rawFile.RunHeaderEx.StartTime; - var endTime = rawFile.RunHeaderEx.EndTime; - // File Properties var output = new List { @@ -351,20 +355,23 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la } // Instrument Properties - output.Add("#InstrumentProperties"); - output.AddRange(new List + if (rawFile.SelectMsData()) + { + output.Add("#InstrumentProperties"); + output.AddRange(new List { $"Instrument model=[MS, MS:1000494, Thermo Scientific instrument model, {rawFile.GetInstrumentData().Model}]", "Instrument name=" + rawFile.GetInstrumentData().Name, $"Instrument serial number=[MS, MS:1000529, instrument serial number, {rawFile.GetInstrumentData().SerialNumber}]", $"Software version=[NCIT, NCIT:C111093, Software Version, {rawFile.GetInstrumentData().SoftwareVersion}]", } - ); - if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty()) - { - output.Add("Firmware version=" + rawFile.GetInstrumentData().HardwareVersion); + ); + if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty()) + { + output.Add("Firmware version=" + rawFile.GetInstrumentData().HardwareVersion); + } } - + // MS Data output.Add("#MsData"); foreach (KeyValuePair entry in msTypes) @@ -389,20 +396,25 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la ); // Scan Settings - output.AddRange(new List - { - "#ScanSettings", - $"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}", - $"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]", - "Units=" + rawFile.GetInstrumentData().Units, - $"Number of scans={rawFile.RunHeaderEx.SpectraCount}", - $"Scan range={firstScanNumber};{lastScanNumber}", - $"Time range={startTime.ToString(CultureInfo.InvariantCulture)};{endTime.ToString(CultureInfo.InvariantCulture)}", - $"Mass range={rawFile.RunHeaderEx.LowMass.ToString(CultureInfo.InvariantCulture)};{rawFile.RunHeaderEx.HighMass.ToString(CultureInfo.InvariantCulture)}", - "Fragmentation types=" + String.Join(", ", fragmentationTypes.Select(f => f.value)) - } - ); - + if (rawFile.SelectMsData()) + { + // Get the start and end time from the RAW file + var startTime = rawFile.RunHeaderEx.StartTime; + var endTime = rawFile.RunHeaderEx.EndTime; + output.AddRange(new List + { + "#ScanSettings", + $"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}", + $"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]", + "Units=" + rawFile.GetInstrumentData().Units, + $"Number of scans={rawFile.RunHeaderEx.SpectraCount}", + $"Scan range={firstScanNumber};{lastScanNumber}", + $"Time range={startTime.ToString(CultureInfo.InvariantCulture)};{endTime.ToString(CultureInfo.InvariantCulture)}", + $"Mass range={rawFile.RunHeaderEx.LowMass.ToString(CultureInfo.InvariantCulture)};{rawFile.RunHeaderEx.HighMass.ToString(CultureInfo.InvariantCulture)}", + "Fragmentation types=" + String.Join(", ", fragmentationTypes.Select(f => f.value)) + } + ); + } // Sample Data output.Add("#SampleData"); From 5b653dfb77d1188456f89bb83d3cbbd3d69b399c Mon Sep 17 00:00:00 2001 From: "MEMBER\\Heting.Zhao" Date: Tue, 4 Apr 2023 10:14:21 +0800 Subject: [PATCH 07/23] ZSPACE-12730 Try to close the underlying stream. --- Writer/MzMlSpectrumWriter.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index c830677..040b5a3 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -587,8 +587,16 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc if (_doIndexing) { - cryptoStream.Flush(); - cryptoStream.Close(); + try + { + cryptoStream.Flush(); + cryptoStream.Close(); + } + catch (System.ObjectDisposedException e) + { + // Cannot access a closed file. CryptoStream was already closed when closing _writer + Log.Warn($"Warning: {e.Message}"); + } } } From a32c99c51fec6dd09746d0aae5252912503ea032 Mon Sep 17 00:00:00 2001 From: caetera Date: Wed, 17 May 2023 15:24:05 +0200 Subject: [PATCH 08/23] Negative isolation window in SPS + propagate isolation window for all SPS masses --- Writer/MzMlSpectrumWriter.cs | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index c830677..0335378 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -2166,6 +2166,7 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE //if isolation width was not found in the trailer, try to get one from the reaction if (isolationWidth == null) isolationWidth = reaction.IsolationWidth; + if (isolationWidth < 0) isolationWidth = null; var precursor = new PrecursorType { @@ -2384,6 +2385,51 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE spectrumRef = spectrumRef }; + //Isolation window for SPS masses is the same as for the first precursor + SPSPrecursor.isolationWindow = + new ParamGroupType + { + cvParam = new CVParamType[3] + }; + + SPSPrecursor.isolationWindow.cvParam[0] = + new CVParamType + { + accession = "MS:1000827", + name = "isolation window target m/z", + value = SPSMasses[n].ToString(CultureInfo.InvariantCulture), + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + }; + if (isolationWidth != null) + { + var offset = isolationWidth.Value / 2 + reaction.IsolationWidthOffset; + SPSPrecursor.isolationWindow.cvParam[1] = + new CVParamType + { + accession = "MS:1000828", + name = "isolation window lower offset", + value = (isolationWidth.Value - offset).ToString(CultureInfo.InvariantCulture), + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + }; + SPSPrecursor.isolationWindow.cvParam[2] = + new CVParamType + { + accession = "MS:1000829", + name = "isolation window upper offset", + value = offset.ToString(CultureInfo.InvariantCulture), + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + }; + } + // Selected ion MZ only SPSPrecursor.selectedIonList.selectedIon[0] = new ParamGroupType From 3dd4ec75083352e11ccd12cce1c8c8109e8516fc Mon Sep 17 00:00:00 2001 From: Michael Lazear Date: Wed, 17 May 2023 16:23:30 -0700 Subject: [PATCH 09/23] Write isolationWindow/selectedIon for PRM data --- Writer/MzMlSpectrumWriter.cs | 155 +++++++++++++++++++++++++++++++++-- 1 file changed, 147 insertions(+), 8 deletions(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index c830677..3d1fbc8 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -1359,14 +1359,7 @@ private SpectrumType ConstructMSSpectrum(int scanNumber) } else { - spectrum.precursorList = new PrecursorListType - { - count = "0", - precursor = new PrecursorType[0] - }; - - Log.Error($"Failed finding precursor for {scanNumber}"); - ParseInput.NewError(); + spectrum.precursorList = ConstructPRMPrecursorList(scanEvent, charge, isolationWidth); } } else @@ -2424,6 +2417,152 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE } + /// + /// Populate the precursor list element for PRM/MS2-only datasets (No MS1 scans) + /// + /// the scan event + /// the charge from trailer + /// the isolation width value from trailer + /// the precursor list + private PrecursorListType ConstructPRMPrecursorList(IScanEventBase scanEvent, int? charge, double? isolationWidth) + { + List precursors = new List(); + + + int msLevel = (int)scanEvent.MSOrder; + IReaction reaction = scanEvent.GetReaction(0); + double precursorMz = reaction.PrecursorMass; + + //if isolation width was not found in the trailer, try to get one from the reaction + if (isolationWidth == null) isolationWidth = reaction.IsolationWidth; + + var precursor = new PrecursorType + { + selectedIonList = + new SelectedIonListType { count = "1", selectedIon = new ParamGroupType[1] }, + }; + + precursor.selectedIonList.selectedIon[0] = new ParamGroupType(); + + var ionCvParams = new List + { + new CVParamType + { + name = "selected ion m/z", + value = precursorMz.ToString(CultureInfo.InvariantCulture), + accession = "MS:1000744", + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + } + }; + + if (charge != null) + { + ionCvParams.Add(new CVParamType + { + name = "charge state", + value = charge.ToString(), + accession = "MS:1000041", + cvRef = "MS" + }); + } + precursor.selectedIonList.selectedIon[0].cvParam = ionCvParams.ToArray(); + + precursor.isolationWindow = + new ParamGroupType + { + cvParam = new CVParamType[3] + }; + + precursor.isolationWindow.cvParam[0] = + new CVParamType + { + accession = "MS:1000827", + name = "isolation window target m/z", + value = precursorMz.ToString(CultureInfo.InvariantCulture), + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + }; + if (isolationWidth != null) + { + var offset = isolationWidth.Value / 2 + reaction.IsolationWidthOffset; + precursor.isolationWindow.cvParam[1] = + new CVParamType + { + accession = "MS:1000828", + name = "isolation window lower offset", + value = (isolationWidth.Value - offset).ToString(CultureInfo.InvariantCulture), + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + }; + precursor.isolationWindow.cvParam[2] = + new CVParamType + { + accession = "MS:1000829", + name = "isolation window upper offset", + value = offset.ToString(CultureInfo.InvariantCulture), + cvRef = "MS", + unitCvRef = "MS", + unitAccession = "MS:1000040", + unitName = "m/z" + }; + } + + // Activation + var activationCvParams = new List(); + if (reaction != null) + { + if (reaction.CollisionEnergyValid) + { + activationCvParams.Add( + new CVParamType + { + accession = "MS:1000045", + name = "collision energy", + cvRef = "MS", + value = reaction.CollisionEnergy.ToString(CultureInfo.InvariantCulture), + unitCvRef = "UO", + unitAccession = "UO:0000266", + unitName = "electronvolt" + }); + } + + if (!OntologyMapping.DissociationTypes.TryGetValue(reaction.ActivationType, out var activation)) + { + activation = new CVParamType + { + accession = "MS:1000044", + name = "Activation Method", + cvRef = "MS", + value = "" + }; + } + + activationCvParams.Add(activation); + } + + precursor.activation = + new ParamGroupType + { + cvParam = activationCvParams.ToArray() + }; + + precursors.Add(precursor); + + return new PrecursorListType + { + count = precursors.Count.ToString(), + precursor = precursors.ToArray() + }; + + } + private int GetParentFromScanString(string scanString) { var result = _filterStringIsolationMzPattern.Match(scanString); From b4c28a1bab3d30d22790181dc62ba9b6ea447d1d Mon Sep 17 00:00:00 2001 From: caetera Date: Mon, 12 Jun 2023 18:29:06 +0200 Subject: [PATCH 10/23] Refactor PRM precursor lists Added virtual precursor at index -1 that is employed for PRM scans; When precursor scan cannot be determined, trying to report at least the minimal information --- Writer/MzMlSpectrumWriter.cs | 281 +++++++++++------------------------ Writer/PrecursorInfo.cs | 2 +- 2 files changed, 90 insertions(+), 193 deletions(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index 3d1fbc8..8b2ec98 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -68,6 +68,8 @@ public MzMlSpectrumWriter(ParseInput parseInput) : base(parseInput) _mzMlNamespace.Add(string.Empty, "http://psi.hupo.org/ms/mzml"); _doIndexing = ParseInput.OutputFormat == OutputFormat.IndexMzML; _osOffset = Environment.NewLine == "\n" ? 0 : 1; + _precursorScanNumbers[""] = -1; + _precursorTree[-1] = new PrecursorInfo(); } /// @@ -1275,7 +1277,7 @@ private SpectrumType ConstructMSSpectrum(int scanNumber) }); // Keep track of scan number for precursor reference - _precursorScanNumbers[""] = scanNumber; + _precursorScanNumbers[""] = -1; _precursorTree[scanNumber] = new PrecursorInfo(); } @@ -1312,54 +1314,52 @@ private SpectrumType ConstructMSSpectrum(int scanNumber) _precursorScanNumber = GetParentFromScanString(result.Groups[1].Value); } - if (_precursorScanNumber > 0) + //finding precursor scan failed + if (_precursorScanNumber == -2) { + Log.Warn($"Cannot find precursor scan for scan# {scanNumber}"); + _precursorTree[-2] = new PrecursorInfo(0, msLevel, FindLastReaction(scanEvent, msLevel), new PrecursorType[0]); + } - try + try + { + try //since there is no direct way to get the number of reactions available, it is necessary to try and fail { - try //since there is no direct way to get the number of reactions available, it is necessary to try and fail + scanEvent.GetReaction(_precursorTree[_precursorScanNumber].ReactionCount); + } + catch (ArgumentOutOfRangeException ex) + { + Log.Debug($"Using Tribrid decision tree fix for scan# {scanNumber}"); + //Is it a decision tree scheduled scan on tribrid? + if (msLevel == _precursorTree[_precursorScanNumber].MSLevel) { - scanEvent.GetReaction(_precursorTree[_precursorScanNumber].ReactionCount); + _precursorScanNumber = GetParentFromScanString(result.Groups[1].Value); } - catch (ArgumentOutOfRangeException ex) + else { - Log.Debug($"Using Tribrid decision tree fix for scan# {scanNumber}"); - //Is it a decision tree scheduled scan on tribrid? - if (msLevel == _precursorTree[_precursorScanNumber].MSLevel) - { - _precursorScanNumber = GetParentFromScanString(result.Groups[1].Value); - } - else - { - throw new RawFileParserException( - $"Tribrid decision tree fix failed - cannot get reaction# {_precursorTree[_precursorScanNumber].ReactionCount} from {scanEvent.ToString()}", - ex); - } + throw new RawFileParserException( + $"Tribrid decision tree fix failed - cannot get reaction# {_precursorTree[_precursorScanNumber].ReactionCount} from {scanEvent.ToString()}", + ex); } - - // Construct and set the precursor list element of the spectrum - spectrum.precursorList = - ConstructPrecursorList(_precursorScanNumber, scanEvent, charge, monoisotopicMz, isolationWidth, - SPSMasses, out var reactionCount); - - //save precursor information for later reference - _precursorTree[scanNumber] = new PrecursorInfo(_precursorScanNumber, msLevel, reactionCount, spectrum.precursorList.precursor); } - catch (Exception e) - { - var extra = (e.InnerException is null) ? "" : $"\n{e.InnerException.StackTrace}"; - - Log.Warn($"Failed creating precursor list for scan# {scanNumber} - precursor information for this and dependent scans will be empty\nException details:{e.Message}\n{e.StackTrace}\n{extra}"); - ParseInput.NewWarn(); - _precursorTree[scanNumber] = new PrecursorInfo(_precursorScanNumber, 1, 0, new PrecursorType[0]); + // Construct and set the precursor list element of the spectrum + spectrum.precursorList = + ConstructPrecursorList(_precursorScanNumber, scanEvent, charge, monoisotopicMz, isolationWidth, + SPSMasses, out var reactionCount); - } - + //save precursor information for later reference + _precursorTree[scanNumber] = new PrecursorInfo(_precursorScanNumber, msLevel, reactionCount, spectrum.precursorList.precursor); } - else + catch (Exception e) { - spectrum.precursorList = ConstructPRMPrecursorList(scanEvent, charge, isolationWidth); + var extra = (e.InnerException is null) ? "" : $"\n{e.InnerException.StackTrace}"; + + Log.Warn($"Failed creating precursor list for scan# {scanNumber} - precursor information for this and dependent scans will be empty\nException details:{e.Message}\n{e.StackTrace}\n{extra}"); + ParseInput.NewWarn(); + + _precursorTree[scanNumber] = new PrecursorInfo(_precursorScanNumber, 1, 0, new PrecursorType[0]); + } } else @@ -1884,6 +1884,45 @@ private SpectrumType ConstructMSSpectrum(int scanNumber) return spectrum; } + private int FindLastReaction(IScanEvent scanEvent, int msLevel) + { + int lastReactionIndex = msLevel - 2; + + //iteratively trying find the last available index for reaction + while(true) + { + try + { + scanEvent.GetReaction(lastReactionIndex + 1); + } + catch (ArgumentOutOfRangeException) + { + //stop trying + break; + } + + lastReactionIndex++; + } + + //supplemental activation flag is on -> one of the levels (not necissirily the last one) used supplemental activation + //check last two activations + if (scanEvent.SupplementalActivation == TriState.On) + { + var lastActivation = scanEvent.GetReaction(lastReactionIndex).ActivationType; + var beforeLastActivation = scanEvent.GetReaction(lastReactionIndex - 1).ActivationType; + + if ((beforeLastActivation == ActivationType.ElectronTransferDissociation || beforeLastActivation == ActivationType.ElectronCaptureDissociation) && + (lastActivation == ActivationType.CollisionInducedDissociation || lastActivation == ActivationType.HigherEnergyCollisionalDissociation)) + return lastReactionIndex - 1; //ETD or ECD followed by HCD or CID -> supplemental activation in the last level (move the last reaction one step back) + else + return lastReactionIndex; + } + else //just use the last one + { + return lastReactionIndex; + } + } + private SpectrumType ConstructPDASpectrum(int scanNumber, int instrumentNumber) { // Get each scan from the RAW file @@ -2146,20 +2185,24 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE // Get precursors from earlier levels var prevPrecursors = _precursorTree[precursorScanNumber]; - var spectrumRef = ""; + string spectrumRef = null; int msLevel = (int)scanEvent.MSOrder; IReaction reaction = null; var precursorMz = 0.0; reactionCount = prevPrecursors.ReactionCount; - spectrumRef = ConstructSpectrumTitle((int)Device.MS, 1, precursorScanNumber); reaction = scanEvent.GetReaction(reactionCount); - - precursorMz = reaction.PrecursorMass; //if isolation width was not found in the trailer, try to get one from the reaction if (isolationWidth == null) isolationWidth = reaction.IsolationWidth; - + + precursorMz = reaction.PrecursorMass; + + if (precursorScanNumber > 0) + { + spectrumRef = ConstructSpectrumTitle((int)Device.MS, 1, precursorScanNumber); + } + var precursor = new PrecursorType { selectedIonList = @@ -2196,7 +2239,7 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE }); } - if (selectedIonMz > ZeroDelta) + if (selectedIonMz > ZeroDelta && precursorScanNumber > 0) { var selectedIonIntensity = CalculatePrecursorPeakIntensity(_rawFile, precursorScanNumber, reaction.PrecursorMass, isolationWidth, ParseInput.NoPeakPicking.Contains(msLevel - 1)); @@ -2417,156 +2460,10 @@ private PrecursorListType ConstructPrecursorList(int precursorScanNumber, IScanE } - /// - /// Populate the precursor list element for PRM/MS2-only datasets (No MS1 scans) - /// - /// the scan event - /// the charge from trailer - /// the isolation width value from trailer - /// the precursor list - private PrecursorListType ConstructPRMPrecursorList(IScanEventBase scanEvent, int? charge, double? isolationWidth) - { - List precursors = new List(); - - - int msLevel = (int)scanEvent.MSOrder; - IReaction reaction = scanEvent.GetReaction(0); - double precursorMz = reaction.PrecursorMass; - - //if isolation width was not found in the trailer, try to get one from the reaction - if (isolationWidth == null) isolationWidth = reaction.IsolationWidth; - - var precursor = new PrecursorType - { - selectedIonList = - new SelectedIonListType { count = "1", selectedIon = new ParamGroupType[1] }, - }; - - precursor.selectedIonList.selectedIon[0] = new ParamGroupType(); - - var ionCvParams = new List - { - new CVParamType - { - name = "selected ion m/z", - value = precursorMz.ToString(CultureInfo.InvariantCulture), - accession = "MS:1000744", - cvRef = "MS", - unitCvRef = "MS", - unitAccession = "MS:1000040", - unitName = "m/z" - } - }; - - if (charge != null) - { - ionCvParams.Add(new CVParamType - { - name = "charge state", - value = charge.ToString(), - accession = "MS:1000041", - cvRef = "MS" - }); - } - precursor.selectedIonList.selectedIon[0].cvParam = ionCvParams.ToArray(); - - precursor.isolationWindow = - new ParamGroupType - { - cvParam = new CVParamType[3] - }; - - precursor.isolationWindow.cvParam[0] = - new CVParamType - { - accession = "MS:1000827", - name = "isolation window target m/z", - value = precursorMz.ToString(CultureInfo.InvariantCulture), - cvRef = "MS", - unitCvRef = "MS", - unitAccession = "MS:1000040", - unitName = "m/z" - }; - if (isolationWidth != null) - { - var offset = isolationWidth.Value / 2 + reaction.IsolationWidthOffset; - precursor.isolationWindow.cvParam[1] = - new CVParamType - { - accession = "MS:1000828", - name = "isolation window lower offset", - value = (isolationWidth.Value - offset).ToString(CultureInfo.InvariantCulture), - cvRef = "MS", - unitCvRef = "MS", - unitAccession = "MS:1000040", - unitName = "m/z" - }; - precursor.isolationWindow.cvParam[2] = - new CVParamType - { - accession = "MS:1000829", - name = "isolation window upper offset", - value = offset.ToString(CultureInfo.InvariantCulture), - cvRef = "MS", - unitCvRef = "MS", - unitAccession = "MS:1000040", - unitName = "m/z" - }; - } - - // Activation - var activationCvParams = new List(); - if (reaction != null) - { - if (reaction.CollisionEnergyValid) - { - activationCvParams.Add( - new CVParamType - { - accession = "MS:1000045", - name = "collision energy", - cvRef = "MS", - value = reaction.CollisionEnergy.ToString(CultureInfo.InvariantCulture), - unitCvRef = "UO", - unitAccession = "UO:0000266", - unitName = "electronvolt" - }); - } - - if (!OntologyMapping.DissociationTypes.TryGetValue(reaction.ActivationType, out var activation)) - { - activation = new CVParamType - { - accession = "MS:1000044", - name = "Activation Method", - cvRef = "MS", - value = "" - }; - } - - activationCvParams.Add(activation); - } - - precursor.activation = - new ParamGroupType - { - cvParam = activationCvParams.ToArray() - }; - - precursors.Add(precursor); - - return new PrecursorListType - { - count = precursors.Count.ToString(), - precursor = precursors.ToArray() - }; - - } - private int GetParentFromScanString(string scanString) { - var result = _filterStringIsolationMzPattern.Match(scanString); - var parts = Regex.Split(result.Groups[1].Value, " "); + //var result = _filterStringIsolationMzPattern.Match(scanString); + var parts = Regex.Split(scanString, " "); //find the position of the first (from the end) precursor with a different mass //to account for possible supplementary activations written in the filter @@ -2584,7 +2481,7 @@ private int GetParentFromScanString(string scanString) return _precursorScanNumbers[parentFilter]; } - return -1; //unsuccessful parsing + return -2; //unsuccessful parsing } /// diff --git a/Writer/PrecursorInfo.cs b/Writer/PrecursorInfo.cs index 2189369..535f9ee 100644 --- a/Writer/PrecursorInfo.cs +++ b/Writer/PrecursorInfo.cs @@ -5,7 +5,7 @@ /// public class PrecursorInfo { - //for future use + //Current MSLevel public int MSLevel { get; } //precursor scan number, 0 - means not a precursor From 5b89ded4d3d6a2d1eeb88193cc003179637a6c55 Mon Sep 17 00:00:00 2001 From: caetera Date: Mon, 3 Jul 2023 19:24:20 +0200 Subject: [PATCH 11/23] Fix for precursor scan --- Writer/MzMlSpectrumWriter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index 3d379f2..cae5dce 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -1285,7 +1285,7 @@ private SpectrumType ConstructMSSpectrum(int scanNumber) }); // Keep track of scan number for precursor reference - _precursorScanNumbers[""] = -1; + _precursorScanNumbers[""] = scanNumber; _precursorTree[scanNumber] = new PrecursorInfo(); } From 233b89831ec5f7413c1326bf0dcd7ea8529acabc Mon Sep 17 00:00:00 2001 From: caetera Date: Mon, 3 Jul 2023 19:49:29 +0200 Subject: [PATCH 12/23] Update Ontology for new instrument types --- Writer/OntologyMapping.cs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Writer/OntologyMapping.cs b/Writer/OntologyMapping.cs index 35f78d2..66b02c4 100644 --- a/Writer/OntologyMapping.cs +++ b/Writer/OntologyMapping.cs @@ -68,6 +68,15 @@ public static class OntologyMapping value = "" } }, + { + MassAnalyzerType.MassAnalyzerMRTOF, new CVParamType + { + accession = "MS:1003379", + name = "asymmetric track lossless time-of-flight analyzer", + cvRef = "MS", + value = "" + } + }, { MassAnalyzerType.Any, new CVParamType { @@ -543,6 +552,15 @@ public static class OntologyMapping value = "" } }, + { + "ORBITRAP ASCEND", new CVParamType + { + accession = "MS:1003356", + name = "Orbitrap Ascend", + cvRef = "MS", + value = "" + } + }, { "ORBITRAP EXPLORIS 120", new CVParamType { @@ -570,6 +588,15 @@ public static class OntologyMapping value = "" } }, + { + "ORBITRAP ASTRAL", new CVParamType + { + accession = "MS:1003378", + name = "Orbitrap Astral", + cvRef = "MS", + value = "" + } + }, { "EXACTIVE", new CVParamType { @@ -730,6 +757,8 @@ public static List GetDetectors(string instrumentAccession) case "MS:1002732": // ORBITRAP ECLIPSE case "MS:1003029": + // ORBITRAP ASCEND + case "MS:1003356": // ORBITRAP ID-X case "MS:1003112": detectors = new List @@ -768,6 +797,8 @@ public static List GetDetectors(string instrumentAccession) case "MS:1003094": // ORBITRAP EXPLORIS 480 case "MS:1003028": + // ORBITRAP ASTRAL + case "MS:1003378": detectors = new List { new CVParamType From 2b9e28f463ff6a6f81341f1e24fe496bf2343267 Mon Sep 17 00:00:00 2001 From: caetera Date: Mon, 14 Aug 2023 18:36:15 +0200 Subject: [PATCH 13/23] Astral model --- RawFileParser.cs | 1 + Writer/MzMlSpectrumWriter.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/RawFileParser.cs b/RawFileParser.cs index c233af1..48b476a 100755 --- a/RawFileParser.cs +++ b/RawFileParser.cs @@ -138,6 +138,7 @@ private static void ProcessFile(ParseInput parseInput) // selected instrument to the MS instrument, first instance of it var firstScanNumber = -1; var lastScanNumber = -1; + if (rawFile.GetInstrumentCountOfType(Device.MS) != 0) { rawFile.SelectInstrument(Device.MS, 1); diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index cae5dce..3207c19 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -240,7 +240,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteStartElement("referenceableParamGroup"); _writer.WriteAttributeString("id", "commonInstrumentParams"); - var instrumentModel = OntologyMapping.getInstrumentModel(instrumentData.Name); + var instrumentModel = OntologyMapping.getInstrumentModel(instrumentData.Model); SerializeCvParam(instrumentModel); SerializeCvParam(new CVParamType From 5845b730a0dd3a8edbf69f4388f33fa0b8e49a02 Mon Sep 17 00:00:00 2001 From: caetera Date: Mon, 14 Aug 2023 20:04:18 +0200 Subject: [PATCH 14/23] Smallfix Unifying changes in metadata and instrument configurations parsing; check against NCName --- Writer/MetadataWriter.cs | 28 +++++++++++++++------------- Writer/MzMlSpectrumWriter.cs | 35 ++++++++++++++++++----------------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index 5de86a2..a8b5bc8 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -61,9 +61,7 @@ public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastSca // Keep track of the number of MS spectra if (msTypes.ContainsKey(scanFilter.MSOrder.ToString())) { - var value = msTypes[scanFilter.MSOrder.ToString()]; - value += 1; - msTypes[scanFilter.MSOrder.ToString()] = value; + msTypes[scanFilter.MSOrder.ToString()] += 1; } else msTypes.Add(scanFilter.MSOrder.ToString(), 1); @@ -95,17 +93,21 @@ public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastSca } // trailer extra data list - var trailerData = rawFile.GetTrailerExtraInformation(scanNumber); - for (var i = 0; i < trailerData.Length; i++) + try + { + var trailerData = new ScanTrailer(rawFile.GetTrailerExtraInformation(scanNumber)); + int? charge = trailerData.AsPositiveInt("Charge State:"); + + if (charge.HasValue && charge.Value > maxCharge) + maxCharge = charge.Value; + + if (charge.HasValue && charge.Value < minCharge) + minCharge = charge.Value; + } + catch (Exception ex) { - if (trailerData.Labels[i] == "Charge State:") - { - if (int.Parse(trailerData.Values[i]) > maxCharge) - maxCharge = int.Parse(trailerData.Values[i]); - - if (int.Parse(trailerData.Values[i]) < minCharge) - minCharge = int.Parse(trailerData.Values[i]); - } + Log.WarnFormat("Cannot load trailer infromation for scan {0} due to following exception\n{1}", scanNumber, ex.Message); + _parseInput.NewWarn(); } } } diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index 3207c19..5c3a2f5 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -16,7 +16,6 @@ using ThermoFisher.CommonCore.Data.Business; using ThermoFisher.CommonCore.Data.FilterEnums; using ThermoFisher.CommonCore.Data.Interfaces; -using ThermoRawFileParser.Util; using ThermoRawFileParser.Writer.MzML; using zlib; @@ -251,7 +250,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = instrumentData.SerialNumber }); _writer.WriteEndElement(); // referenceableParamGroup - _writer.WriteEndElement(); // referenceableParamGroupList + _writer.WriteEndElement(); // referenceableParamGroupList // SoftwareList _writer.WriteStartElement("softwareList"); @@ -269,6 +268,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteEndElement(); // software _writer.WriteEndElement(); // softwareList + Log.Debug("Populating instrument configurations"); PopulateInstrumentConfigurationList(firstScanNumber, lastScanNumber, instrumentModel); // DataProcessingList @@ -309,8 +309,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc // Run _writer.WriteStartElement("run"); - //TODO: validate id against NCName - _writer.WriteAttributeString("id", ParseInput.RawFileNameWithoutExtension); + _writer.WriteAttributeString("id", GetNCName(ParseInput.RawFileNameWithoutExtension)); _writer.WriteAttributeString("defaultInstrumentConfigurationRef", "IC1"); _writer.WriteAttributeString("startTimeStamp", XmlConvert.ToString(_rawFile.CreationDate, XmlDateTimeSerializationMode.Utc)); @@ -378,8 +377,6 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc Serialize(serializer, spectrum); - Log.Debug("Spectrum added to list of spectra -- ID " + spectrum.id); - index++; } } @@ -628,6 +625,18 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc } } + private string GetNCName(string filename) + { + string result = Regex.Replace(filename, @"[^\d\w\.\-]+", "_"); + + if (Regex.IsMatch(result, @"^\d")) + { + result = $"_{result}"; + } + + return result; + } + private string GetTotalScanNumber() { // Save the last selected instrument @@ -674,11 +683,8 @@ private string GetTotalScanNumber() private void PopulateInstrumentConfigurationList(int firstScanNumber, int lastScanNumber, CVParamType instrumentModel) { - // Go over the first scans until an MS2 scan is encountered - // to collect all mass analyzer and ionization types - var encounteredMs2 = false; - var scanNumber = firstScanNumber; - do + // Go over scan filters to collect all mass analyzer and ionization types + for (int scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++) { // Get the scan filter for this scan number try @@ -715,10 +721,6 @@ private void PopulateInstrumentConfigurationList(int firstScanNumber, int lastSc _massAnalyzers.Add(scanFilter.MassAnalyzer, "IC" + (_massAnalyzers.Count + 1)); } - if (scanFilter.MSOrder == MSOrderType.Ms2) - { - encounteredMs2 = true; - } } catch (Exception) { @@ -734,8 +736,7 @@ private void PopulateInstrumentConfigurationList(int firstScanNumber, int lastSc } } - scanNumber++; - } while (!encounteredMs2 && scanNumber <= lastScanNumber); + } // Add a default analyzer if none were found if (_massAnalyzers.Count == 0) From fef936020f38fba3116f40f11ff36c846434eff9 Mon Sep 17 00:00:00 2001 From: caetera Date: Thu, 24 Aug 2023 19:13:02 +0200 Subject: [PATCH 15/23] Expected runtime (PR166) --- Writer/MetadataWriter.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Writer/MetadataWriter.cs b/Writer/MetadataWriter.cs index a8b5bc8..663ec13 100644 --- a/Writer/MetadataWriter.cs +++ b/Writer/MetadataWriter.cs @@ -213,12 +213,13 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last if (rawFile.SelectMsData()) { - var runHeader = rawFile.RunHeader; var runHeaderEx = rawFile.RunHeaderEx; var startTime = runHeaderEx.StartTime; var endTime = runHeaderEx.EndTime; metadata.addScanSetting(new CVTerm("MS:1000016", "MS", "scan start time", startTime.ToString(CultureInfo.InvariantCulture))); + metadata.addScanSetting(new CVTerm("", "", "expected runtime", + runHeaderEx.ExpectedRunTime.ToString(CultureInfo.InvariantCulture))); metadata.addScanSetting(new CVTerm("MS:1000011", "MS", "mass resolution", runHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture))); metadata.addScanSetting(new CVTerm("UO:0000002", "MS", "mass unit", @@ -388,8 +389,8 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la output.AddRange(new List { - "MS min charge=" + minCharge.ToString(CultureInfo.InvariantCulture), - "MS max charge=" + maxCharge.ToString(CultureInfo.InvariantCulture), + $"MS min charge={minCharge.ToString(CultureInfo.InvariantCulture)}", + $"MS max charge={maxCharge.ToString(CultureInfo.InvariantCulture)}", $"MS min RT={minTime.ToString(CultureInfo.InvariantCulture)}", $"MS max RT={maxTime.ToString(CultureInfo.InvariantCulture)}", $"MS min MZ={minMz.ToString(CultureInfo.InvariantCulture)}", @@ -407,6 +408,7 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la { "#ScanSettings", $"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}", + $"Expected runtime={rawFile.RunHeaderEx.ExpectedRunTime.ToString(CultureInfo.InvariantCulture)}", $"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]", "Units=" + rawFile.GetInstrumentData().Units, $"Number of scans={rawFile.RunHeaderEx.SpectraCount}", From f95e92c18d8666b61cdab4f8e4ce6aaf8ea0e1be Mon Sep 17 00:00:00 2001 From: caetera Date: Thu, 7 Sep 2023 20:17:12 +0200 Subject: [PATCH 16/23] Reimplementing #157 --- Writer/MzMlSpectrumWriter.cs | 403 +++++++++++++++++++++++------------ 1 file changed, 261 insertions(+), 142 deletions(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index 5c3a2f5..1e0d02a 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -141,30 +141,33 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteStartElement("fileDescription"); // fileContent _writer.WriteStartElement("fileContent"); - // MS1 - SerializeCvParam(new CVParamType - { - accession = "MS:1000579", - name = "MS1 spectrum", - cvRef = "MS", - value = "" - }); - // MSn - SerializeCvParam(new CVParamType - { - accession = "MS:1000580", - name = "MSn spectrum", - cvRef = "MS", - value = "" - }); - // Ion current chromatogram - SerializeCvParam(new CVParamType + if (_rawFile.HasMsData) { - accession = "MS:1000810", - name = "ion current chromatogram", - cvRef = "MS", - value = "" - }); + // MS1 + SerializeCvParam(new CVParamType + { + accession = "MS:1000579", + name = "MS1 spectrum", + cvRef = "MS", + value = "" + }); + // MSn + SerializeCvParam(new CVParamType + { + accession = "MS:1000580", + name = "MSn spectrum", + cvRef = "MS", + value = "" + }); + // Ion current chromatogram + SerializeCvParam(new CVParamType + { + accession = "MS:1000810", + name = "ion current chromatogram", + cvRef = "MS", + value = "" + }); + } // Other detector data if (ParseInput.AllDetectors) @@ -193,6 +196,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = "" }); } + //TODO FID chromatogram as ion current } _writer.WriteEndElement(); // fileContent @@ -230,27 +234,33 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteEndElement(); // sourceFileList _writer.WriteEndElement(); // fileDescription - var instrumentData = _rawFile.GetInstrumentData(); + //default instrument model + var instrumentModel = new CVParamType(); - // ReferenceableParamGroupList - _writer.WriteStartElement("referenceableParamGroupList"); - _writer.WriteAttributeString("count", "1"); - // ReferenceableParamGroup - _writer.WriteStartElement("referenceableParamGroup"); - _writer.WriteAttributeString("id", "commonInstrumentParams"); + if (_rawFile.HasMsData) + { + var instrumentData = _rawFile.GetInstrumentData(); - var instrumentModel = OntologyMapping.getInstrumentModel(instrumentData.Model); - SerializeCvParam(instrumentModel); + // ReferenceableParamGroupList + _writer.WriteStartElement("referenceableParamGroupList"); + _writer.WriteAttributeString("count", "1"); + // ReferenceableParamGroup + _writer.WriteStartElement("referenceableParamGroup"); + _writer.WriteAttributeString("id", "commonInstrumentParams"); - SerializeCvParam(new CVParamType - { - cvRef = "MS", - accession = "MS:1000529", - name = "instrument serial number", - value = instrumentData.SerialNumber - }); - _writer.WriteEndElement(); // referenceableParamGroup - _writer.WriteEndElement(); // referenceableParamGroupList + instrumentModel = OntologyMapping.getInstrumentModel(instrumentData.Model); + SerializeCvParam(instrumentModel); + + SerializeCvParam(new CVParamType + { + cvRef = "MS", + accession = "MS:1000529", + name = "instrument serial number", + value = instrumentData.SerialNumber + }); + _writer.WriteEndElement(); // referenceableParamGroup + _writer.WriteEndElement(); // referenceableParamGroupList + } // SoftwareList _writer.WriteStartElement("softwareList"); @@ -269,7 +279,19 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteEndElement(); // softwareList Log.Debug("Populating instrument configurations"); - PopulateInstrumentConfigurationList(firstScanNumber, lastScanNumber, instrumentModel); + if (_rawFile.HasMsData) + { + PopulateInstrumentConfigurationList(firstScanNumber, lastScanNumber, instrumentModel); + } + else //TODO Fake instrument configuration + { + _writer.WriteStartElement("instrumentConfigurationList"); + _writer.WriteAttributeString("count", "1"); + _writer.WriteStartElement("instrumentConfiguration"); + _writer.WriteAttributeString("id", "IC1"); + _writer.WriteEndElement(); // instrumentConfiguration + _writer.WriteEndElement(); // instrumentConfigurationList + } // DataProcessingList _writer.WriteStartElement("dataProcessingList"); @@ -289,7 +311,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = "" }); _writer.WriteEndElement(); // processingMethod - if (ParseInput.NoPeakPicking.Count < ParseInput.AllLevels.Count) + if (_rawFile.HasMsData && ParseInput.NoPeakPicking.Count < ParseInput.AllLevels.Count) { _writer.WriteStartElement("processingMethod"); _writer.WriteAttributeString("order", "1"); @@ -314,70 +336,78 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteAttributeString("startTimeStamp", XmlConvert.ToString(_rawFile.CreationDate, XmlDateTimeSerializationMode.Utc)); _writer.WriteAttributeString("defaultSourceFileRef", SourceFileId); + + //indices + int index = 0; + int lastScanProgress; + // SpectrumList _writer.WriteStartElement("spectrumList"); _writer.WriteAttributeString("count", GetTotalScanNumber()); _writer.WriteAttributeString("defaultDataProcessingRef", "ThermoRawFileParserProcessing"); - serializer = _factory.CreateSerializer(typeof(SpectrumType)); + if (_rawFile.HasMsData) + { + serializer = _factory.CreateSerializer(typeof(SpectrumType)); - // MS Spectra - var index = 0; - var lastScanProgress = 0; + // MS Spectra + index = 0; + lastScanProgress = 0; - Log.Info(String.Format("Processing {0} MS scans", +(1 + lastScanNumber - firstScanNumber))); + Log.Info(String.Format("Processing {0} MS scans", +(1 + lastScanNumber - firstScanNumber))); - for (var scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++) - { - if (ParseInput.LogFormat == LogFormat.DEFAULT) + for (var scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++) { - var scanProgress = (int) ((double) scanNumber / (lastScanNumber - firstScanNumber + 1) * 100); - if (scanProgress % ProgressPercentageStep == 0) + if (ParseInput.LogFormat == LogFormat.DEFAULT) { - if (scanProgress != lastScanProgress) + var scanProgress = (int)((double)scanNumber / (lastScanNumber - firstScanNumber + 1) * 100); + if (scanProgress % ProgressPercentageStep == 0) { - Console.Write("" + scanProgress + "% "); - lastScanProgress = scanProgress; + if (scanProgress != lastScanProgress) + { + Console.Write("" + scanProgress + "% "); + lastScanProgress = scanProgress; + } } } - } - SpectrumType spectrum = null; + SpectrumType spectrum = null; - try - { - spectrum = ConstructMSSpectrum(scanNumber); - } - catch (Exception ex) - { - Log.Error($"Scan #{scanNumber} cannot be processed because of the following exception: {ex.Message}\n{ex.StackTrace}"); - ParseInput.NewError(); - } + try + { + spectrum = ConstructMSSpectrum(scanNumber); + } + catch (Exception ex) + { + Log.Error($"Scan #{scanNumber} cannot be processed because of the following exception: {ex.Message}\n{ex.StackTrace}"); + ParseInput.NewError(); + } - var level = spectrum != null ? int.Parse(spectrum.cvParam.Where(p => p.accession == "MS:1000511").First().value) : 0; - - if (spectrum != null && ParseInput.MsLevel.Contains(level)) //applying MS level filter - { - spectrum.index = index.ToString(); - if (_doIndexing) + var level = spectrum != null ? int.Parse(spectrum.cvParam.Where(p => p.accession == "MS:1000511").First().value) : 0; + + if (spectrum != null && ParseInput.MsLevel.Contains(level)) //applying MS level filter { - // flush the writers before getting the position - _writer.Flush(); - Writer.Flush(); - if (spectrumOffSets.Count != 0) + spectrum.index = index.ToString(); + if (_doIndexing) { - spectrumOffSets.Add(spectrum.id, Writer.BaseStream.Position + 6 + _osOffset); - } - else - { - spectrumOffSets.Add(spectrum.id, Writer.BaseStream.Position + 7 + _osOffset); + // flush the writers before getting the position + _writer.Flush(); + Writer.Flush(); + if (spectrumOffSets.Count != 0) + { + spectrumOffSets.Add(spectrum.id, Writer.BaseStream.Position + 6 + _osOffset); + } + else + { + spectrumOffSets.Add(spectrum.id, Writer.BaseStream.Position + 7 + _osOffset); + } } - } - Serialize(serializer, spectrum); + Serialize(serializer, spectrum); - index++; + index++; + } } } @@ -499,7 +529,9 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteEndElement(); // chromatogramList } - _writer.WriteEndElement(); // run + _writer.Flush(); + _writer.WriteEndElement(); // run + _writer.Flush(); _writer.WriteEndElement(); // mzML if (_doIndexing) @@ -511,22 +543,26 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc // IndexList _writer.WriteStartElement("indexList"); - var indexCount = chromatograms.IsNullOrEmpty() ? 1 : 2; + var indexCount = ((spectrumOffSets.Count > 0) ? 1 : 0) + (chromatograms.IsNullOrEmpty() ? 0 : 1); _writer.WriteAttributeString("count", indexCount.ToString()); // Index - _writer.WriteStartElement("index"); - _writer.WriteAttributeString("name", "spectrum"); - var spectrumOffsetEnumerator = spectrumOffSets.GetEnumerator(); - while (spectrumOffsetEnumerator.MoveNext()) - { - // Offset - _writer.WriteStartElement("offset"); - _writer.WriteAttributeString("idRef", spectrumOffsetEnumerator.Key.ToString()); - _writer.WriteString(spectrumOffsetEnumerator.Value.ToString()); - _writer.WriteEndElement(); // offset - } + + if (spectrumOffSets.Count > 0) + { + _writer.WriteStartElement("index"); + _writer.WriteAttributeString("name", "spectrum"); + var spectrumOffsetEnumerator = spectrumOffSets.GetEnumerator(); + while (spectrumOffsetEnumerator.MoveNext()) + { + // Offset + _writer.WriteStartElement("offset"); + _writer.WriteAttributeString("idRef", spectrumOffsetEnumerator.Key.ToString()); + _writer.WriteString(spectrumOffsetEnumerator.Value.ToString()); + _writer.WriteEndElement(); // offset + } - _writer.WriteEndElement(); // index + _writer.WriteEndElement(); // index + } if (!chromatograms.IsNullOrEmpty()) { @@ -643,21 +679,23 @@ private string GetTotalScanNumber() var lastSelectedInstrument = _rawFile.SelectedInstrument; var numScans = 0; - _rawFile.SelectInstrument(Device.MS, 1); + if (_rawFile.HasMsData) + { + _rawFile.SelectInstrument(Device.MS, 1); - var levelFilter = _rawFile.GetFilterFromString(""); + var levelFilter = _rawFile.GetFilterFromString(""); - foreach (var level in ParseInput.MsLevel) - { - levelFilter.MSOrder = (MSOrderType) level; + foreach (var level in ParseInput.MsLevel) + { + levelFilter.MSOrder = (MSOrderType)level; - var filteredScans = _rawFile.GetFilteredScansListByScanRange(levelFilter, - _rawFile.RunHeader.FirstSpectrum, _rawFile.RunHeader.LastSpectrum); + var filteredScans = _rawFile.GetFilteredScansListByScanRange(levelFilter, + _rawFile.RunHeader.FirstSpectrum, _rawFile.RunHeader.LastSpectrum); - numScans += filteredScans.Count; + numScans += filteredScans.Count; + } } - if (ParseInput.AllDetectors) { for (int nrI = 1; nrI < _rawFile.GetInstrumentCountOfType(Device.Pda) + 1; nrI++) @@ -668,7 +706,7 @@ private string GetTotalScanNumber() } // Return instrument to last selected one - if (lastSelectedInstrument != null) + if (lastSelectedInstrument.InstrumentIndex >= 1) _rawFile.SelectInstrument(lastSelectedInstrument.DeviceType, lastSelectedInstrument.InstrumentIndex); return numScans.ToString(); @@ -846,45 +884,53 @@ private List ConstructChromatograms(int firstScanNumber, int l { var chromatograms = new List(); - // MS chromatograms - // Reselect MS device - _rawFile.SelectInstrument(Device.MS, 1); - // Define the settings for getting the Base Peak chromatogram - var settings = new ChromatogramTraceSettings(TraceType.BasePeak); + //common variables + ChromatogramTraceSettings settings; + IChromatogramData data; + ChromatogramSignal[] trace; - // Get the chromatogram from the RAW file. - var data = _rawFile.GetChromatogramData(new IChromatogramSettings[] {settings}, -1, -1); + if (_rawFile.HasMsData) + { + // MS chromatograms + // Reselect MS device + _rawFile.SelectInstrument(Device.MS, 1); + // Define the settings for getting the Base Peak chromatogram + settings = new ChromatogramTraceSettings(TraceType.BasePeak); - // Split the data into the chromatograms - var trace = ChromatogramSignal.FromChromatogramData(data); + // Get the chromatogram from the RAW file. + data = _rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, -1, -1); - for (var i = 0; i < trace.Length; i++) - { - if (trace[i].Length > 0) + // Split the data into the chromatograms + trace = ChromatogramSignal.FromChromatogramData(data); + + for (var i = 0; i < trace.Length; i++) { - // CV Data for Base Peak Chromatogram - var chroType = new CVParamType + if (trace[i].Length > 0) { - accession = "MS:1000628", - name = "basepeak chromatogram", - cvRef = "MS", - value = "" - }; + // CV Data for Base Peak Chromatogram + var chroType = new CVParamType + { + accession = "MS:1000628", + name = "basepeak chromatogram", + cvRef = "MS", + value = "" + }; - var intensType = new CVParamType - { - accession = "MS:1000515", - name = "intensity array", - cvRef = "MS", - unitName = "number of counts", - value = "", - unitCvRef = "MS", - unitAccession = "MS:1000131" - }; + var intensType = new CVParamType + { + accession = "MS:1000515", + name = "intensity array", + cvRef = "MS", + unitName = "number of counts", + value = "", + unitCvRef = "MS", + unitAccession = "MS:1000131" + }; - var chromatogram = TraceToChromatogram(trace[i], "BasePeak_" + i.ToString(), chroType, intensType); + var chromatogram = TraceToChromatogram(trace[i], "BasePeak_" + i.ToString(), chroType, intensType); - chromatograms.Add(chromatogram); + chromatograms.Add(chromatogram); + } } } @@ -992,8 +1038,7 @@ private List ConstructChromatograms(int firstScanNumber, int l if (channelName.ToLower().Contains("pressure")) { - settings = new ChromatogramTraceSettings(TraceType.StartPCA2DChromatogramTraces + channel + - 1); + settings = new ChromatogramTraceSettings(TraceType.StartAnalogChromatogramTraces + channel + 1); data = _rawFile.GetChromatogramData(new IChromatogramSettings[] {settings}, -1, -1); @@ -1030,6 +1075,80 @@ private List ConstructChromatograms(int firstScanNumber, int l } } } + + var channelNameIndex = 0; + + for (int nrI = 1; nrI < _rawFile.GetInstrumentCountOfType(Device.MSAnalog) + 1; nrI++) + { + _rawFile.SelectInstrument(Device.MSAnalog, nrI); + + var instData = _rawFile.GetInstrumentData(); + + for (int channel = 0; channel < instData.ChannelLabels.Length; channel++) + { + var channelName = instData.ChannelLabels[channel]; + + if (channelName.IsNullOrEmpty()) + { + channelName = $"Channel{channelNameIndex++}"; + } + + settings = new ChromatogramTraceSettings(TraceType.StartAnalogChromatogramTraces + channel + 1); + data = _rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, -1, -1); + trace = ChromatogramSignal.FromChromatogramData(data); + + for (var i = 0; i < trace.Length; i++) + { + // CV Data for Chromatogram + var chroType = new CVParamType + { + accession = "MS:1000626", + name = "chromatogram type", + cvRef = "MS", + value = $"{channelName} chromatogram" + }; + + var intensType = new CVParamType + { + accession = "MS:1000786", + name = "non-standard data array", + cvRef = "MS", + unitName = "unit", + value = instData.Units.ToString(), + unitCvRef = "UO", + unitAccession = "UO:0000000" + }; + + if (instData.Units.ToString().ToLower().Contains("absorbance")) + { + chroType = new CVParamType + { + accession = "MS:1000812", + name = "absorption chromatogram", + cvRef = "MS", + value = $"{channelName} chromatogram" + }; + + intensType = new CVParamType + { + accession = "MS:1000515", + name = "intensity array", + cvRef = "MS", + unitName = "absorbance unit", + value = instData.Units.ToString(), + unitCvRef = "UO", + unitAccession = "UO:0000269" + }; + } + + var chromatogram = TraceToChromatogram(trace[i], + String.Format("MSAD#{0}_{1}_{2}", nrI, channelName.Replace(" ", "_"), i), + chroType, intensType); + + chromatograms.Add(chromatogram); + } + } + } } return chromatograms; From d8767040177c3b26f396f7cd0d577520ce8bc63a Mon Sep 17 00:00:00 2001 From: caetera Date: Mon, 11 Sep 2023 16:06:57 +0200 Subject: [PATCH 17/23] Thermo assemblies 5.0.0.93 --- ThermoRawFileParser.csproj | 8 +- Writer/OntologyMapping.cs | 2 +- packages.config | 4 +- ...hermoFisher.CommonCore.Data.5.0.0.93.nupkg | Bin 0 -> 340443 bytes .../ThermoFisher.CommonCore.Data.dll | Bin 0 -> 406016 bytes .../ThermoFisher.CommonCore.Data.xml | 29149 ++++++++++++++ ...er.CommonCore.RawFileReader.5.0.0.93.nupkg | Bin 0 -> 410594 bytes .../ThermoFisher.CommonCore.RawFileReader.dll | Bin 0 -> 650752 bytes .../ThermoFisher.CommonCore.RawFileReader.xml | 31493 ++++++++++++++++ 9 files changed, 60649 insertions(+), 7 deletions(-) create mode 100644 packages/ThermoFisher.CommonCore.Data.5.0.0.93/ThermoFisher.CommonCore.Data.5.0.0.93.nupkg create mode 100644 packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.dll create mode 100644 packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.xml create mode 100644 packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/ThermoFisher.CommonCore.RawFileReader.5.0.0.93.nupkg create mode 100644 packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.RawFileReader.dll create mode 100644 packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.RawFileReader.xml diff --git a/ThermoRawFileParser.csproj b/ThermoRawFileParser.csproj index 536b601..10d73f4 100644 --- a/ThermoRawFileParser.csproj +++ b/ThermoRawFileParser.csproj @@ -176,11 +176,11 @@ - - packages\ThermoFisher.CommonCore.Data.5.0.0.88\lib\ThermoFisher.CommonCore.Data.dll + + packages\ThermoFisher.CommonCore.Data.5.0.0.93\lib\netstandard2.0\ThermoFisher.CommonCore.Data.dll - - packages\ThermoFisher.CommonCore.RawFileReader.5.0.0.88\lib\ThermoFisher.CommonCore.RawFileReader.dll + + packages\ThermoFisher.CommonCore.RawFileReader.5.0.0.93\lib\netstandard2.0\ThermoFisher.CommonCore.RawFileReader.dll packages\zlib.net.1.0.4.0\lib\zlib.net.dll diff --git a/Writer/OntologyMapping.cs b/Writer/OntologyMapping.cs index 66b02c4..c679d53 100644 --- a/Writer/OntologyMapping.cs +++ b/Writer/OntologyMapping.cs @@ -69,7 +69,7 @@ public static class OntologyMapping } }, { - MassAnalyzerType.MassAnalyzerMRTOF, new CVParamType + MassAnalyzerType.MassAnalyzerASTMS, new CVParamType { accession = "MS:1003379", name = "asymmetric track lossless time-of-flight analyzer", diff --git a/packages.config b/packages.config index 010dc8f..2bfb52b 100644 --- a/packages.config +++ b/packages.config @@ -27,7 +27,7 @@ - - + + \ No newline at end of file diff --git a/packages/ThermoFisher.CommonCore.Data.5.0.0.93/ThermoFisher.CommonCore.Data.5.0.0.93.nupkg b/packages/ThermoFisher.CommonCore.Data.5.0.0.93/ThermoFisher.CommonCore.Data.5.0.0.93.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..48aa0e8b4366bb34b728bd3edd80bf4dd8c3f6f1 GIT binary patch literal 340443 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ý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

yr^!r%%F;zv_K^P` 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 Hx8DB%UA-_P literal 0 HcmV?d00001 diff --git a/packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.dll b/packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.dll new file mode 100644 index 0000000000000000000000000000000000000000..c21eee40fdcbe39e3ed85e8918b7fce25a40772a GIT binary patch literal 406016 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

^b1xbpPkK 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

M7yPzhUcs9M?-r~tIJnti&5mkzS+iNq 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�$9{m(@ZEmA>!b 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 literal 0 HcmV?d00001 diff --git a/packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.xml b/packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.xml new file mode 100644 index 0000000..ff68fe1 --- /dev/null +++ b/packages/ThermoFisher.CommonCore.Data.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.Data.xml @@ -0,0 +1,29149 @@ + + + + ThermoFisher.CommonCore.Data + + + +

+ Encapsulates information about AnalogInstrument. + + + + + Initializes a new instance of the class. + + + + + Defines the analog instrument data header for analog devices + + + + + + Gets or sets the number of channels. + + + + + Gets or sets the start time. + + + + + Gets or sets the tic. + + + + + Specifies how positive and negative values are handled + + + + + Return all data + + + + + Return strictly positive data (not zero) + + + + + Return zero and above + + + + + Class to get various statistics from raw data. + Intended to gather data for bar charts. + + + + + Gets or sets the scan filter string (sets "ScanFilter"). + + + + + Gets or sets the compound names, for filtering chromatograms. + + + + + Gets or sets the maximum number of unique strings which are shown as a bar category, + for "text string" diagnostic items. + Any additional strings are displayed as a bar labeled "Other". + Valid range: 3-1000 + Default: 10 + + + + + Create an analyzer for raw data. + + the (open) raw file + + + + Calculate the band size (bin size) needed to divide all data values into a given number of bands. + The bands would usually represent "bars on a histogram". + + Data to analyze + Number of bands needed + The width of each band + + + + Gets the common average (mean) of a set of values, defined as 0 for "null or empty" data sets + + The data to analyze + the average + + + + Gets the modal band of a set of data, by grouping into a fixed number of bands. + + data to analyze + The number of bands (groups) used to split the data + the center of the modal band (from 0 to bands-1). 0 for null or empty data + + + + Find the average delta between values in an array. + + the data + The average of the delta (d[x+1]-d[x]) + + + + Find the deltas between values in an array. + + the data + The average of the delta (d[x+1]-d[x]) + + + + Find the average delta between start times of scans matching a filter (minutes). + + The average of the delta (d[x+1]-d[x]) in the start times + + + + Find the delta between start times of scans matching a filter (minutes). + + The the deltas (d[x+1]-d[x]) in the start times + + + + Gets the scan number and start time of scans matching a filter + + All scans which match this filter and their times. + + + + Get a chromatogram from a filter + + The chromatogram + + + + Find the RT of all scans + + the RT of every scan in a raw file + + + + Find scan durations,in seconds. + + the set of durations, in seconds. returns "new double[0] if there is no MS data + + + + Find scan durations, for files which do not have "ElapsedKey" + + the set of durations + + + + Find scan durations, for files which do have "ElapsedKey" + + scan filter + index into trailer extra for time key + the set of durations in seconds + + + + Determine if this is a data type which needs banding. + Small types (such as byte) can be mapped to a small array of results. + For example: "unsigned byte" has only 256 states, so: + we can collect data about each state. + But: Float has infinite states, so must be banded. + Note that "int" sometimes can handle all states, depending on the + range of values, so is not considered "large" here + + + true if this is a large numeric type + + + + Find a trend for the given trailer item + + index into trailer extra for required item + Determines how positive, zero and negative data are handled. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for fasle/off/no + + + + Find a trend for the given status item. Calling code should select a device with a status log first. + + index into status log for required item + Determines how positive, zero and negative data are handled. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for false/off/no + + + + Find a trend for the given status item. Calling code should select a device with a status log first. + + index into status log for required item + Determines how positive, zero and negative data are handled. + First record in the log to inspect. This is intended for incremental log reading (real time data). + The value is updated to the next needed record number, such that repeated calls get new information as it arrives. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for false/off/no. + If there are no further records after "startRecord" or all records are "NaN" the result will be an empty array. + + + + Find a trend for the given trailer item + + index into trailer extra for required item + Determines how positive, zero and negative data are handled. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for fasle/off/no + + + + Find a trend for the given status item. Calling code should select a device with a status log first. + + index into trailer extra for required item + Determines how positive, zero and negative data are handled. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for false/off/no. + If there are no further records after "startRecord" or all records are "NaN" the result will be an empty array. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for fasle/off/no + + + + Find a trend for the given status item. Calling code should select a device with a status log first. + + index into trailer extra for required item + Determines how positive, zero and negative data are handled. + First record in the log to inspect. This is intended for incremental log reading (real time data). + The value is updated to the next needed record number, such that repeated calls get new information as it arrives. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for false/off/no. + If there are no further records after "startRecord" or all records are "NaN" the result will be an empty array. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for fasle/off/no + + + + Get a status numeric value from a status log + + Index of the item in status log header + status log format for this item + stats log record index + Time of this log entry + list of names for "string" items + The max number of unique strings accepted + The numeric value for this log entry + + + + Get a status numeric value from a sorted status log + + Index of the item in status log header + status log format for this item + stats log record index + Time of this log entry + list of names for "string" items + The max number of unique strings accepted + The numeric value for this log entry + + + + Return a numeric value from any generic data type. + Numeric types (double,int etc.) return the encoded number. + String types "count unique string states" and return a state number. + + generic record format + data to decode + For string data: unique strings found so far + Max unique strings to accept + the value from this log entry + + + + Return a numeric value from any countable generic data type. + Numeric types (short, byte etc.) return the encoded number. + String types "count unique string states" and return a state number. + + data to decode + For string data: unique strings found so far + Max unique strings to accept + the value from this log entry + + + + Silently ensure MaxTextCategories is in bounds, and fix if not + + the fixed max + + + + Get names for know "enum" formats. + + format of this field + string version of values + + + + Find a trend for the given status log item. Calling code should select a device with a status log first. + + index into trailer extra for required item + Determines how positive, zero and negative data are handled. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for fasle/off/no + + + + Find a trend for the given trailer item + + index into trailer extra for required item + Determines how positive, zero and negative data are handled. + the set of values. Items which are (True, false) or (On,Off)or (yes,no) return 1 for true/on/yes and 0 for fasle/off/no + + + + Decode only small (countable) values from logs. + + Format of this field + Value to decode + Categories found so far + maximum number of categories + The log value + + + + Get a small (countable state) status log value trend, based on + index into the status log fields. + + Index of field to read + Filtering rule + Format of the log + The log value + + + + Ensure that all trend items have a valid value. + Assign values with "no saved name" as a category "other", valued 1 above the known names. + + The set of names found (categories) in the log + The data for the trend plot + The names for the numbered categories. + + + + + Find the durations of scans, and bin them into a number of "millisecond" bands, ready for a histogram plot. + + number of bands + analysis of scan times (milliseconds) + + + + Get banded data for a bar chart. + + data to map into bands + requested number of bands + banded data for a bar chart + + + + Get banded data for a chart (histogram). If the data has a small enough range of values, + then all values have their own bar. + Each bar represents "the count of values within a given band". + + Data to band + If there are too many unique data values (> maxBands) then + the data becomes banded (grouped) into this many bands + The maximum number of unique categories before that data must be banded + The banded data + + + + Class to keep trace of numeric value (bar number) for each text string found in a log + + + + + Name found in the log + + + + + Assigned bar number + + + + + Autofilter extensions for raw files + + + + + Create an enhanced autofilter for this raw file + + raw file + enhanced auto filter + + + + Create an enhanced autofilter for this raw file, uing cans over a specific time range. + + raw file + start retention time + end retention time + enhanced auto filter + + + + This class extends the functions of "auto filter". + On construction, the "auto filter" list is obtained from the MS detector. + methods are then called to construct a list of filters based on this data. + The list can be searched for "items matching a given filter rule". + + + + + Adds the "empty filter" to the list. + + + + + Searches for the activation types used. + Adds "Activation type" to the list, for MS/MS data (MS2 or above). + This can find CID, HCD, ETD, UVPD + + + + + Creates a filter from a string and adds it + + + + + + Adds "ms order filters" to the list + this includes ms, ms2 etc up to ms10 + if any ms/ms is found msn is also added. + + When true (default): if any ms/ms is found "MSn" is also added. + + + + Gets or sets a value indicating whether compound names should be included. + This only has an effect if the "Name" property is set for at least one filter. + Results which have names are shown in sorted (alpha) order. + Any other filters, which do not have a name, are then added after the + named items, in the original "auto filter" order. + If a name appears for more than one filter, then an entry is created + which only contains a compound name, such that a chromatogram + can be created based on all data identified for that compound. + Note that this "name only" list is excluded when a "unique filter list" is + requested with a specific subset filter. + + + + + Gets or sets a separator which appears between a compound name and a filter. + + + + + Add all unique filter groups (auto filter). + + If this is not empty: The filters must all contan this sub-filter. + For example "d" for "only return data dependent" + + + + Remove "CV" from filters, such that filters which have CV at different values are merged. + + + + + Create am emhaced auto filter for a raw file + + + indicates whether time limits are used for the + "auto filter" request from the raw file. + If this is true: + Only scans from minTime to maxTime are used + else: all scans are used + the minimum retention time for getting a set of filters from the raw file. + Only applied when applyTimeLimits is set. + the maximum retention time for getting a set of filters from the raw file. + Only applied when applyTimeLimits is set. + + + + remove "CV" from all filters + + Filter to consolidate + Updated list + + + + The auto sampler information. + + + + + Gets or sets the tray index, -1 for "not recorded" + + + + + Gets or sets the vial index, -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray. + -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray, across the tray. + -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray, down the tray. + -1 for "not recorded" + + + + + Gets or sets the shape. + If this property returns "Invalid", no other values in this object + contain usable information. + Invalid data can occur for older raw file formats, before auto sampler data was added. + + + + + Gets the tray shape as a string + + + + + Gets or sets the tray name. + + + + + Parameters for the Avalon integrator + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Initializes a new instance of the class. + + + Integrator events to copy + + + + + + + Results of banding algorithm. + Data for a bar chart + + + + + Gets or sets the number of bands. + + + + + Gets or sets the width of a band. + + + + + Calculates the range of a given band + + band whose range is needed + The range of value in this band + + + + Gets or sets the center of each band + + + + + Gets or sets the data (height of the bar) for each band + + + + + Gets or sets a value indicating whether this data got banded. + For example: If a data set was integer, and contained "charges 1 to 7" then all 7 + original data categories can be returned. + If data is "double from 1..02-9000.6" then there are no fixed categories, and the data + will be "sampled" into bands. + + + + + The cached scan provider. + + + + + Initializes a new instance of the class. + + + The capacity. + + + + + Get scan from a scan number. + + + The raw data. + + + The scan number. + + + The scan at that scan number, or null if the scan number is out of range. + + + + + The get scan at time. + + + The raw file. + + + The time. + + + The scan nearest the given time. + + Thrown on null raw file + + + + + Data for the calibration curve. + Included and excluded points, fitted curve and equation text. + This is designed to help creating calibration curve plots. + + + + + The _excluded. + + + + + The _external excluded. + + + + + The _external included. + + + + + The included. + + + + + The points. + + + + + The equation. + + + + + The percent cv. + + + + + The coefficient of determination (R squared). + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + + + The regression. + + + The current calibration levels. + + + The historic calibration levels. + + + The is internal standard. + + + + + Gets or sets the equation text from the regression calculation. + + + + + Gets the excluded replicates from current sequence data + + + + + Covert points to read only. + + + The points. + + + The collection of points + + + + + Gets the excluded replicates from current sequence data + + + + + Gets the excluded replicates from previously acquired data + + + + + Gets the excluded replicates from previously acquired data + + + + + Gets the included replicates from previously acquired data + + + + + Gets the included replicates from previously acquired data + + + + + Gets the fitted line + + + + + Gets the included replicates from current sequence data + + + + + Gets the included replicates from current sequence data + + + + + Gets or sets a value indicating whether the fitted line is empty + The curve data needs to be plotted as appropriate for + an internal standard: Centered on the set of points, + + + + + Gets or sets the percentage coefficient of variance from the first calibration level. + + + + + Gets or sets the percentage relative standard deviation from the first calibration level. + + + + + Gets the fitted line + + + + + Gets or sets the RSquared value from the regression calculation (-1 if not valid) + + + + + Create data for a calibration curve report from a replicate table. + + + The replicates for one component + + + Calibration replicates from the current sequence + + + If set: the data is for an internal standard, + and does not contain a line of fit + + + X,Y points for included, excluded and fitted line + + + + + Create data for a calibration curve report from a replicate table. + + + The replicates for one component + + + Calibration replicates from the current sequence + + + X,Y points for included, excluded and fitted line + + + + + Create data for a calibration curve report from a replicate table. + + + The replicates for one component + + + Calibration replicates from the current sequence + + + Calibration replicates from previous sequences + + + X,Y points for included, excluded and fitted line + + + + + Create data for a calibration curve report from a replicate table. + + + The replicates for one component + + + Calibration replicates from the current sequence + + + Calibration replicates from previous sequences + + + If set: the data is for an internal standard, + and does not contain a line of fit + + + X,Y points for included, excluded and fitted line + + + + + Create data for a calibration curve report from a replicate table. + This version does not support "stats" for ISTD curves. + + + The replicates for one component + + + Calibration replicates from the current sequence + + + X,Y points for included, excluded and fitted line + + + + + Create data for a calibration curve report from a replicate table. + This version does not support "stats" for ISTD curves. + + + The replicates for one component + + + Calibration replicates from the current sequence + + + Calibration replicates from previous sequences + + + If set: the data is for an internal standard, + and does not contain a line of fit + + + X,Y points for included, excluded and fitted line + + + + + Create a table of points to draw on a calibration curve + + + Replicate table to convert into points + + + if true, create points for the included data, else create points for the excluded data + + + The list of points to plot + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + 2 + + + + Find the max amount in the supplied points + + + The points. + + + The max amount. + + + + + Find the relative standard deviation + + + The calibration levels. + + + The RSD. + + + + + class to represent calibration data, as may be drawn on a plot. + + + + + Gets or sets the amount (x) on calibration curve + + + + + Gets or sets the response (y) for the amount + + + + + Gets or sets the a key to identify this point. For example, a file name. + + + + + Gets or sets the a second key to identify this point. For example, a compound name. + + + + + Test that two points are equal + + first point to compare + second point to compare + true if they have the same contents + + + + Test that two spec points are not equal + + first point to compare + second point to compare + true if they do not have the same contents + + + + Test two points for equality + + + point to compare + + + true if they are equal + + + + + Gets a hash code Object.GetHashCode + + + The has code Object.GetHashCode + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + 2 + + + + Defines interfaces for a calibration level. + + + + + Gets or sets the name for this calibration level + + + + + Gets or sets the amount of calibration compound (usually a concentration) for this level + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current level. + + + + This class defines a calibration level. + Each level has an amount BaseAmount and a name + + + + + A values very close to zero + + + + + Anticipated amount of target compound in calibration of QC standard. + + + + + Name for this calibration level + + + + + Gets or sets the name for this calibration level + + + + + Gets or sets the amount of calibration compound (usually a concentration) for this level + + + + + Initializes a new instance of the class. + Create a copy of a calibration level + + + Level to copy + + + + + Initializes a new instance of the class. + Default construction of calibration level + + + + + Initializes a new instance of the class. + + + A name associated with the level + + + The amount of calibration compound (usually a concentration) for this level + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current level. + + + + Centroid data making a second stream with profile scan. + + + + + this allows base peak mass and base peak intensity to search for the base value on first use + + + + + Intensity of largest peak (valid when _basePeakFound) + + + + + Mass of largest peak + + + + + Noise of largest peak (valid when _basePeakFound) + + + + + Resolution of largest peak (valid when _basePeakFound) + + + + + Mass calibration coefficients + + + + + Creates a new instance of CentroidStream + + + + + Deep copy constructor + + + + + + Gets or sets the list of baseline at each peak + + + + + Gets the intensity of most intense peak + + + + + Gets the mass of most intense peak + + + + + Gets the noise of most intense peak + + + + + Gets the resolution of most intense peak + + + + + Gets or sets the list of charge calculated for peak + + + + + Gets or sets the calibration Coefficients + + + + + Gets or sets the coefficients count. + + + + + Gets or sets the flags for the peaks (such as reference) + + + + + Gets or sets the list of Intensities for each centroid + + + + + Gets or sets the number of centroids + + + + + Gets or sets the list of masses of each centroid + + + + + Gets or sets the list of noise level near peak + + + + + Gets or sets resolution of each peak + + + + + Gets or sets the scan Number + + + + + Return the largest intensity (base value) in the ranges supplies + + Ranges of masses + If the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + Largest intensity in all ranges + + + + Clears all the data. + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + Make a deep clone of this object. + + An object containing all data in this, and no shared references + + + + Get the list centroids. + + + The centroids in the scan + + + + + Convert the data for a given peak in this stream into a LabelPeak + + + The index of the peak to convert. + + + Extracted data for the selected peak + + + + + Convert the data into LabelPeak objects + + An array of LabelsPeaks, converted from this class + + + + Forces re-computation of Base peaks , intensities. + + + + + Convert data into this object from an array of LabelPeaks + + Data to populate the class + true on success. False if the labels peaks are null or empty + + + + Sum all masses within the ranges + + List of ranges to sum + If the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + Sum of intensities in all ranges + + + + Sum all masses within the ranges + + List of ranges to sum + If the ranges have equal mass values, + then tolerance is subtracted from low and added to high to search for matching masses + Sum of intensities in all ranges + + + + Convert to simple scan. + Even though this class implements ISimpleScanAccess, + there can be an advantage in doing this conversion, as when this object goes out of scope + the converted object only holds the mass and intensity refs, and will need less memory. + + + The . + + + + + Convert to segmented scan. + This feature is intended for use where an application or algorithm in "SegmentedScan" format, + such as typical centroid data from ITMS, but the data in this scan came from an FTMS detector, + which would have the profile data in "SegmentedScan" and the centroid data in this object. + Data from this object is duplicated (deep copy), + such that changing values in the returned object will not affect data in + this object. + + + The . + + + + + Convert to Scan. + This feature is intended for use where an application or algorithm needs data in "Scan" format, + with centroid information in the "SegmentedScan" property of the Scan. + (such as typical centroid data from ITMS), but the data in this scan came from an FTMS detector, + which would have the profile data in "SegmentedScan" and the centroid data in this object. + The data is first converted to SegmentedScan format (using ToSegmentedScan) then a new Scan is made + containing that data (with no data in "CentroidStream). + Data from this object is duplicated (deep copy), + such that changing values in the returned object will not affect data in + this object. + This initializes the returned scan's "ScanStatistics" based on the returned mass and intensity data. + If the (optional) originalScanStats parameter is included, information from + that is used to initialize RT, scan number and other fields + which cannot be calculated from this data. + The only values updated in the scan statistics are "BasePeakMass" and "BasePeakIntenity". + All other values are either as copied from the supplied parameter, or defaults. + Application should set any other values needed in the Scan, + such as "ScansCombined, ToleranceUnit, MassResolution", + which cannot be determined from the supplied parameters. + + If this is supplied, the scan statistics are initialized as a deep clone + of the supplied object (so that RT etc. get preserved) then the values of BasePeakMass and + BasePeakIntensity are updated from this object + + The . + + + + + Find the mass limits of this data + + + + + + Test if this is a valid object (all streams are not null. All data has same length) + + + true if the object has valid data in it. + + + + + Test if this is a valid object (all streams are not null. All data has same length) + + is thrown if this instance does not contain valid data. + + + + Internal method, used to truncate long arrays + + The size to "resize" to + + + + Change the size of an array. This exists because "Array.Resize" cannot be directly called on an array property. + + + The original data. + + + The new size. + + + The resized options + + + + + Change the size of an array. This exists because "Array.Resize" cannot be directly called on an array property. + + + The original data. + + + The new size. + + + The resized array. + + + + + Find the most intense peak + + + + + Find the largest value in a given mass range, and combine with the value passed in. + + + The mass range to analyze + + + The base value so far. + + + The largest of the base value passed in, and the base value in this mass range. + + + + + Create a label peak from data at a given index. + + + The label index. + + + The . + + + + + Calculate the sum of intensities, for peaks within a mass range, and add to previous sum + + + The sum so far + + + The mass range. + + + This sum passed in, plus the sum of intensities of all peaks in range. + + + + + slice the data, using a set of mass ranges. + + Ranges of data to include + sA scan which only has data in the requested ranges + + + + The chromatogram aggregator. + This can join together chromatograms form batches of scans, + and return to caller when complete + + + + + Gets or sets the number of batches of scans, that sub-divide this chromatogram. + + + + + Gets the generator. + + + + + Initializes a new instance of the class. + + + The tool to create chromatograms. + + The scan numbers and retention times + Method called when the chromatogram is complete + + + + Get the aggregator ready to hold result for "Batches" of data + + + + + Called when a signal is ready. + That is: A set of scans has been combined to make a chromatogram. + When the final batch is delivered, the chromatogram is sent to the client. + + + The batch number (which part of the overall chromatogram is this?). + + + The signal. + + + + + Collate the signals + + + The joined signals + + + + + The chromatogram batch generator. + This provides any number of chromatograms to a caller, + using multiple threads. + + + + + Gets or sets the available scans. + + + + + Gets or sets the scan reader. + Given a scan number, + Return the spectral data and scan event + + + + + Gets or sets the scan reader, for multiple scans + Given a scan number array, + Return the spectral data and scan event. + Note: May be null, in which case "ScanReader" will be used. + + + + + Gets or sets the scans in chromatogram batch. + An optimal value will depend on the experiment type. + For example: for SRM, with 20 or less centroid peaks per scan, this can be larger. + For full scan experiments, with 500 or more centroids per scan, this may need to be smaller, especially on + a 32 bit process. + Default 400 for 32 bit, 1600 for 64 bit. Suggested range 100 to 3000. + Setting this larger may increase efficiency (fewer small tasks to perform, in raw data with 100k scans), + but is at the cost of possible increased memory usage for scans. + This is intentionally "short". Values above 10,000 for this are discouraged, as that could + lead to significant memory overheads, and possibly less efficient thread management. + + + + + Gets or sets a value indicating whether the chromatograms have a strict time range. + By default, the retention time range of a chromatogram is considered as a "display range", + such that the first value before the range, and the first value after the range is included + in the data, permitting a continuous line, if plotted, to the edge of the time window. + If this property is true, then only points which are within the supplied RT range are returned. + + + + + The minimum permitted number of threads to work on generating chromatograms. + + + + + Gets or sets the maximum number of consumer threads to make. + In other words: The maximum number of chromatograms the caller will + be given to process in parallel. + Default: Environment.ProcessorCount. + Minimum : MinConsumerThreads + + + + + Gets or sets the maximum work backlog, which controls how much + work is kept in the pipeline, waiting for threads to become available. + Default: 5 for 32 bit process, 20 for 64 bit. + Setting a larger value may cause data reading from a raw file to be completed earlier, + but at the expense of more memory overheads. + + + + + Gets or sets a value indicating whether accurate precursor mass testing is done. + If not: a tolerance of 0.4 AMU is used. + All data dependent tests are done with 0.4 AMU tolerance. + + + + + Gets or sets the precision (decimal places) + + + + + Initializes a new instance of the class. + + + + + Generate chromatograms, returning the in progress tasks, + which are processing the chromatograms. + This permits async generation of chromatograms. + This method returns after all required scan data has been + read, and all work to process the chromatograms is queued. + (The implied raw data file can be closed, as ScanReader will not be called again). + + + The chromatogram deliveries. + These define the chromatogram settings, and a callback which will occur + as soon as the data for that chromatogram is ready. + + + The in progress tasks. Assuming the result is saved as "taskList" Use "Task.WaitAll(taskList)" + to wait for processing of these chromatograms to complete. + + + + + Process all items in a work list. + + + The work item list. + + + + + Add work to the work list. + If there are insufficient background workers, assign more. + + Collection of work + New job to add + + + + Add a worker thread. + + + The work. + + + + + Create partial chromatogram definitions, ordered by start scan. + + requested chromatograms + Ordered partial chromatograms + + + + Create work items. + + + The work request list, ordered by start scan. + + + The target work list. + + + + + Publish pending list of work, which has the same scan range + + + The pending item list. + + + The work. + + + + + Generate the chromatogram chunks, for all work items that this thread sees. + + + The work items. + + + + + The work item. + This consists of: + The requested chromatogram. + The set of scans needed to make a chromatogram. + + + + + Initializes a new instance of the class. + Create a work item, ready to make chromatograms from scans + + + The tool to read scans + + + The parameters for the chromatogram chunk + + + + + Gets the fragment. + + + + + Gets or sets the scans. + + + + + Process this work + + + + + Gets or sets the scan events interface, which can be used to optimize filtering, if provided. + This interface may be obtained from IRawDataPlus (ScanEvents property). + + + + + Class to find which scans belong in the RT range of a chromatogram. + This includes the feature that scans may be "entirely within" a given range, or go one scan beyond, + such that the range is extended allowing a chromatogram plot can be generated over the entire range. + + + + + Gets or sets the available scans. + + + + + Gets or sets a value indicating whether the chromatograms have a strict time range. + By default, the retention time range of a chromatogram is considered as a "display range", + such that the first value before the range, and the first value after the range is included + in the data, permitting a continuous line, if plotted, to the edge of the time window. + If this property is true, then only points which are within the supplied RT range are returned. + + + + + Find scan index for a given retention time. + + + The time. + + + The index into the scan table for this time. + + + + + Find the scan index range for chromatogram, based on the retention time range. + + + The RT range of the chromatogram. + + + The start and end index (items 1 and 2). + + + + + Class to analyze chromatogram requests, creating an ordered table + of partial chromatograms, which can be used to optimize data reading for + chromatogram generation. + + + + + Gets or sets the scans in chromatogram batch. + An optimal value will depend on the experiment type. + For example: for SRM, with 20 or less centroid peaks per scan, this can be larger. + For full scan experiments, with 500 or more centroids per scan, this may need to be smaller, especially on + a 32 bit process. + Default 400 for 32 bit, 1600 for 64 bit. Suggested range 100 to 3000. + Setting this larger may increase efficiency (fewer small tasks to perform, in raw data with 100k scans), + but is at the cost of possible increased memory usage for scans. + This is intentionally "short". Values above 10,000 for this are discouraged, as that could + lead to significant memory overheads, and possibly less efficient thread management. + + + + + Gets or sets a value indicating whether accurate precursor mass testing is done. + If not: a tolerance of 0.4 AMU is used. + All data dependent tests are done with 0.4 AMU tolerance. + + + + + Gets or sets the precision (decimal places) + + + + + Gets or sets the scan events interface, which can be used to optimize filtering, if provided. + This interface may be obtained from IRawDataPlus (ScanEvents property). + + + + + Create ordered chromatograms. + Creates a "time ordered" set of partial chromatogram requests, + which can then be used for efficient chromatogram generation, + by making a single pass over raw data. + + + The chromatograms to be delivered. + + + The ordered set of chromatogram requests. + + + + + Create requests for one chromatogram. + + + The requests. + + + The delivery. + + + + + Add a batch of scans. + + + The requests. + + + The aggregator. + + + The start scan index. + + + The end scan index. + + Set if this is the final batch for a chromatogram + + + + The chromatogram fragment request. + A request to make a section of the overall chromatogram. + + + + + Gets or sets a value indicating whether this is empty. + Empty implies that the raw file has no scans in the RT range. + + + + + Gets or sets the aggregator, which collates a set of partial chromatograms. + + + + + Gets or sets the batch. + This is the batch index with the results table of the aggregator + + + + + Gets or sets the start scan index. + + + + + Gets or sets the end scan index. + + + + + Gets or sets a value indicating whether this is a final section of a chromatogram. + + + + + Make a chromatogram from a batch of scans + + The scans + + + + The SignalConvert interface. + Defines an object which can be converted to signal + + + + + Convert to signal. + The object implementing this would have the required intensity information, + but limited other data (such as RT values) which can be pulled from "scans". + + + The scans. + + + The . + + + + + Gets the number of points in this data + + + + + The chromatogram generator factory. + + + + + Create a chromatogram generator. + This configures the generator for optimal performance in checking scans. + as there may be over 1000 components over 100k scans, that is 10m or more scan + filtering tests (most of which fail). So: optimize that test + use "for" and arrays (not foreach and IEnumerable) etc. + + + The request. + + In this mode a tolerance matching for precursors is "accurate" (based on the precision value), + except for data dependent scans. + For all "non accurate" precursor selections, and for all data dependent scans a default (wide) tolerance is used. + number of decimal places for masses in filter + scan events interface, which can be used to optimize filtering, if provided. + This interface may be obtained from IRawDataPlus (ScanEvents property). + + The . + + + + + The compressed chromatogram. + This holds a "double intensity" and a "shot index offset" for each scan + in the chromatogram, that is 10 bytes. + Al alternative (scan number 4 bytes. plus RT 8 bytes, plus intensity 8 bytes is twice as much memory 20bytes). + The data is expanded up on request. + With 1k unfiltered chromatograms, over 100k scans, this saves 1k*100k*10=1GB ram. + + + + + Convert to signal. + The object implementing this would have the required intensity information, + but limited other data (such as RT values) which can be pulled from "scans". + + + The scans. + + + The . + + + + + Gets the length. + + + + + Initializes a new instance of the class. + + + The first index. + + + The index offsets. + + + The intensities. + + + + + Create a chromatogram from a set of scans, with no filtering + + + + + Initializes a new instance of the class. + + + The request. + + + + + Create a chromatogram. + + + The scans. + + + An interface to create a signal from the intensities which are calculated. + Null if no scans. + + + + + Create a chromatogram from a set of scans + + + + + Initializes a new instance of the class. + + + The request. + + + + + Create a chromatogram. + + + The scans. + + + An interface to create a signal from the intensities which are calculated. + Null if no scans passed the filter. + + + + + Create a chromatogram from a set of scans, where a filter is used for scan selection. + + + + + Initializes a new instance of the class. + + + The request. + + In this mode a tolerance matching for precursors is "accurate" (based on the precision value), + except for data dependent scans. + For all "non accurate" precursor selections, and for all data dependent scans a default (wide) tolerance is used. + number of decimal places for masses in filter + scan events interface, which can be used to optimize filtering, if provided. + This interface may be obtained from IRawDataPlus (ScanEvents property). + + + + Create a chromatogram. + + + The scans. + + + An interface to create a signal from the intensities which are calculated. + Null if no scans passed the filter. + + + + + The ChromatogramGenerator interface. + + + + + Create a chromatogram. + + + The scans. + + + An interface to create a signal from the intensities which are calculated. + Null if no scans passed the filter. + + + + + Class to create objects to efficiently generate chromatogram points. + + + + + create an object to efficiently generate chromatogram points. + This analyzes the given arguments, and returns an interface which can most efficiently + generate the chromatograms + + Retention time range for this chromatogram + Method of selecting scans to be included + Methods to generate points from scans + Object to make chromatogram points + + + + Standard properties for chromatogram point builders + + + + + Gets or sets the retention time range. + Only scans within this range are included. + + + + + Gets or sets the scan selector, which determines if a scan is in the chromatogram, or not + + + + + Implementation of IChromatogramRequest, + which can generate chromatogram points for mass ranges. + Version which supports multiple mass ranges. + This version sums values for the listed ranges + + + + + Gets a value indicating whether this point type needs "scan data". + Always true for this type. + + + + + Gets or sets the point requests. + These determine how chromatogram points are created from a scan, + by adding or subtracting data form multiple mass ranges. + + + + + Gets the value for scan. + This function returns the chromatogram value for a scan. + For example: An XIC from the scan data. + + + The scan. + + + The chromatogram value of this scan. + + + + + create an object to efficiently generate chromatogram points. + This analyzes the given arguments, and returns an interface which can most efficiently + generate the chromatograms. + This version will find the "max value" from each of the supplied point requests (base peak) + + Retention time range for this chromatogram + Method of selecting scans to be included + Methods to generate points from scans + Object to make chromatogram points + + + + This chromatogram request finds base peak mass and intensity data. + It can return data for the full file or a mass range + + + + + Gets or sets a value indicating whether all data in the scan is used + + + + + Get os sets the mass range analyzed, when not "AllData" + + + + + Finds the Mass and Intsenty of the base peak + + + touple containin mass, intensity + + + + Create a request to make an "base peak" mass chromatogram, based on a mass range. + That is: returns the mass of most intense peak over a given range. + + + The low mass. + + + The high mass. + + + The . + + + + + create an object to efficiently generate chromatogram points. + This analyzes the given arguments, and returns an interface which can most efficiently + generate the chromatograms. + This version will find the "max value" from each of the supplied point requests (base peak) + + Retention time range for this chromatogram + Method of selecting scans to be included + Methods to generate points from scans + Object to make chromatogram points + + + + Implementation of IChromatogramRequest, + which can generate chromatogram points for mass ranges. + Version which supports multiple mass ranges. + This version finds the Max of the values for all range (base peak) + + + + + Gets a value indicating whether this point type needs "scan data". + Always true for this type. + + + + + Gets or sets the point requests. + These determine how chromatogram points are created from a scan, + by adding or subtracting data form multiple mass ranges. + + + + + Gets the value for scan. + This function returns the chromatogram value for a scan. + For example: An XIC from the scan data. + + + The scan. + + + The chromatogram value of this scan. + + + + + Implementation of IChromatogramRequest, + which can generate chromatogram points for mass ranges. + Version which supports multiple mass ranges. + This version finds the Max of the values for all range (base peak) + + + + + Gets a value indicating whether this point type needs "scan data". + Always true for this type. + + + + + Gets or sets the point requests. + These determine how chromatogram points are created from a scan, + by adding or subtracting data form multiple mass ranges. + + + + + Gets the value for scan. + This function returns the chromatogram value for a scan. + For example: An XIC from the scan data. + + + The scan. + + + The chromatogram value of this scan. + + + + + Implementation of IChromatogramRequest, + which can generate chromatogram points for mass ranges. + Simplified version for one mass range. + + + + + Gets a value indicating whether this point type needs "scan data". + Always true for this type. + + + + + Gets or sets the point requests + Determine how a chromatogram point is created from a scan. + + + + + Gets the value for scan. + This function returns the chromatogram value for a scan. + For example: An XIC from the scan data. + + + The scan. + + + The chromatogram value of this scan. + + + + + Implementation of IChromatogramRequest, + which can generate chromatogram points for mass ranges. + Simplified version for one mass range, and no scaling + + + + + Gets a value indicating whether this point type needs "scan data". + Always true for this type. + + + + + Gets or sets the point requests + Determine how a chromatogram point is created from a scan. + + + + + Gets the value for scan. + This function returns the chromatogram value for a scan. + For example: An XIC from the scan data. + + + The scan. + + + The chromatogram value of this scan. + + + + + Request to create a point in a chromatogram, based on mass/intensity data in a scan. + Use the static methods to make common chromatogram types. + + + + + Gets or sets a value indicating whether all data + in the scan is used, or just a mass range. + + + + + Gets or sets the scale. + This can be 1 to "add data in a mass range" or + -1 to "subtract data a mass range", + or any other value to apply scaling to a range. + + + + + Gets or sets the mass range. + If an application has a center mass +/ tolerance, + then the static method may be useful to format the range. + + + + + Gets or sets the rule for how a chromatogram point is created from a mass range. + + + + + + + + Create a request to make an "XIC" chromatogram, based on one ion plus mass tolerance. + + + The mass. + + + The tolerance. + + + The tolerance mode. + + + The . + + + + + Create a request to make an "XIC" chromatogram, based on a mass range + + + The low mass. + + + The high mass. + + + The . + + + + + Create a request to make a "TIC" chromatogram. + + + The . + + + + + Create a request to make a "base peak in scan" chromatogram. + + + The . + + + + + Create a request to make an "base peak" chromatogram, based on a mass range. + That is: returns the most intense peak over a given range. + + + The low mass. + + + The high mass. + + + The . + + + + + Create a request to make an "base peak" mass chromatogram, based on a mass range. + That is: returns the mass of most intense peak over a given range. + + + The low mass. + + + The high mass. + + + The . + + + + + Create a request to make a "mass of base peak in scan" chromatogram. + + + The . + + + + + Initializes a new instance of the class. + + + + + Calculate tolerance factor, applied to supplied tolerance value, based on mode. + + + The mass. + + + The mode. + + + The factor to apply. + + + + + Create a request to make a "neutral fragment" chromatogram. + If this is a "fixed fragment" based on a given MS/MS scan filter, + the lowMass is positive, and the range is assumed to be "filter MS/MS mass - neutral mass". + If the chromatogram has no MS/MS mass, then + the lowMass = -neural -0.5 and the highMass is -neutral +0.5 + To get amass range for a given scan, + the MS/MS mass from that scan's event must be added to both low and high masses + + Low mass of range + High mass of range + Mass tolerance (applied to precursor in target scan). Defaults to 0.5 amu when null + Interface to generate a neural fragment chromatogram point + + + + This represents the data for a chromatogram + + + + + Convert chromatogram signals to ChromatogramDataPlus interface + + An array of signals + interface to chromatogram data + + + + Create a Chromatogram signal, from time and intensity arrays + + array of retention times + array of intensities at each time + The constructed signal, or null if either of the inputs are null, or the inputs are not the same length + + + + Create a Chromatogram signal, from time, intensity and scan arrays + + array of retention times + array of intensities at each time + array of scan numbers for each time + The constructed signal, or null if either of the inputs are null, or the inputs are not the same length + + + + Create a Chromatogram signal, from time, intensity, scan and base peak arrays + + array of retention times + array of intensities at each time + array of scan numbers for each time + Array of base peak masses for each time + The constructed signal, or null if either of the inputs are null, or the inputs are not the same length + + + + Create an array of signals from . The Interface + + describes data read from a file (if using IRawData). This constructor converts to an array of type Signal, + simplifying use of individual chromatograms with Peak integration. + + data (usually read from file) to convert into signals + The constructed signals, or null if the input is null + + + + Create chromatogram data interface from . The Interface + describes data read from a file (if using IRawData). + + data (usually read from file) to convert into signals + The constructed signals, or null if the input is null + + + + The wrapped chromatogram data. + + + + + Initializes a new instance of the class. + + + The data to wrap + + + + + Gets the base peak array. + + + + + Gets the intensities array. + + + + + Gets the length. + + + + + Gets the positions array. + + + + + Gets the scan numbers array. + + + + + The signal times. + + + + + The signal base peak masses. + + + + + The signal intensities. + + + + + The signal scans. + + + + + Gets or sets the signal times. + + The signal times. + + + + Gets the times. + + + + + Gets or sets the signal intensities. + + The signal intensities. + + + + Gets the intensities. + + The signal intensities. + + + + Gets or sets the signal scans. + + The signal scans. + + + + Gets the signal scans. + + The signal scans. + + + + Gets or sets the signal base peak masses. + + The signal times. + + + + Gets the signal base peak masses. + + The signal base peak masses. May be null (should not be used) when HasBasePeakData returns false + + + + Gets the time at the end of the signal + + + + + Gets the time at the start of the signal + + + + + Gets the time range. + + + + + Gets the number of points in the signal + + + + + Gets a value indicating whether there is any base peak data in this signal + + + + + Creates a new object that is a (deep) copy of the current instance. + + + A new object that is a copy of this instance. + + + + + covert array to multi dimension. + + + The data. + + + The converted array. + + + + + covert array to multi dimension. + + + The data. + + + The converted array. + + + + + Gets times in minutes for each chromatogram + + + + + Gets the scan numbers for data points in each chromatogram + + + + + Gets the intensities for each chromatogram + + + + + Gets the number of chromatograms in this object + + + + + Test if the signal is valid + + True if both times and intensities have been set, and are the same length + + + + Initializes a new instance of the class. + + Clone from this interface + + + + Initializes a new instance of the class. + + + The times. + + + The intensities. + + + + + Initializes a new instance of the class. + + + The times. + + + The intensities. + + + The scans. + + + + + Initializes a new instance of the class. + + + The times. + + + The intensities. + + + The scans. + + + The base peaks. + + + + + Initializes a new instance of the class. + + + + + Test if the data is contained in valid arrays of the same size + + + The times. + + + The intensities. + + + True if both times and intensities have been set, and are the same length + + + + + Test if the data is contained in valid arrays of the same size + + + The times. + + + The intensities. + + + The scans. + + + True if all of times intensities and scans have been set, and are the same length + + + + + Test if the data is contained in valid arrays of the same size + + + The times. + + + The intensities. + + + The scans. + + + The base Peaks. + + + True if all of times intensities and scans have been set, and are the same length + + + + + Add a delay to all times. This is intended to support "detector delays" where + multiple detector see the same sample at different times. + + + The delay. + + + + + Setting to define a chromatogram Trace. + + + + + The delay in minutes. + + + + + The scan filter. + + + + + The fragment mass. + + + + + Flag for including reference and exception peaks. + + + + + The mass ranges. + + + + + The trace. + + + + + Initializes a new instance of the class. + Default constructor creates a new instance of ChromatogramSettings + + + + + Initializes a new instance of the class. + Constructor creates a new instance of ChromatogramSettings and + sets the type of trace to construct. + + + The type of trace to construct; see for possible values + + + + + Initializes a new instance of the class. + Constructor creates a new instance of ChromatogramSettings based on a read only interface + + + Access to the read only parameters + + + + + Initializes a new instance of the class. + Initialize settings for a mass chromatogram. Makes "TraceType.MassRange" + + + scan filter + + + The mass range(s) + + + + + Initializes a new instance of the class. + Initialize settings for a mass chromatogram. Makes "TraceType.MassRange" + + + scan filter + + + The mass range(s) + + + + + Initializes a new instance of the class. + Clones available data from the supplied interface. + + + The chromatogram settings. + + + + + copy range. + + + from (old value). + + + The index. + + + + + Gets or sets the compound names. + + + + + Gets or sets the delay in minutes. + + Floating point delay in minutes + + + + Gets or sets the filter used in searching scans during trace build + + + + + Gets or sets the fragment mass for neutral fragment filters. + + Floating point fragment mass for neutral fragment filters + + + + Gets or sets a value indicating whether reference and exception peaks are included + in this chromatogram trace + + + + + Gets or sets the number of mass ranges, or wavelength ranges for PDA. + + + If is MassRange then mass range values are used to build trace. + + Numeric count of mass ranges + + + + Gets or sets the mass ranges. + + + If is MassRange then mass range values are used to build trace. + + Array of mass ranges + + + + Gets or sets the type of trace to construct + + see for more details + + + + Convert from interface chromatogram settings. + Note: This method is available as static converter, not + a constructor overload, to avoid ambiguity with exiting overloads. + + + The settings. + + + The . + + + + + Copies all of the items to from this object into the returned object. + + + The clone. + + + + + Gets a range value at 0-based index. + + + Use to find out the count of mass ranges. + + + If is MassRange then mass range values are used to build trace. + + + Index at which to retrieve the range + + + value at give index + + + + + Sets a range value at 0-based index. + + + Set count of mass ranges using before setting any mass ranges. + + + If is MassRange then mass range values are used to build trace. + + + Index at which new range value is to be set + + + New value to be set + + + + + Defines the definitions required to reading the data files. + + + + + Low Resolution spectrum packet type. + + + + + Low Resolution spectrum packet type2. + + + + + High Resolution spectrum packet type. + + + + + Spectrum profileIndex type. + + + + + FTMS data type (centroids) + + + + + FTMS data type (profiles) + + + + + Compressed profile format for MAT95 + + + + + Compressed profile format for MAT95 (high-res) + + + + + LowResolution Spectrum Type (early quantum version). + Also referred to as LR_SP_TYPE3 in some parts of FileIO. + Used for centroid data from quantum about 2000, 2001 instruments. + + + + + LowResolution Spectrum Type. + Also referred to as LR_SP_TYPE4 in some parts of FileIO. + Used for centroid data from quantum and some other post 2002 instruments. + + + + + Profile Spectrum Type + + + + + Profile Spectrum Type2 + + + + + Profile Spectrum Type3 + + + + + Mass profile scan type + + + + + PDA UV discrete channel packet type + + + + + PDA UV discrete channel index header type + + + + + PDA UV scanned spectrum header packet type + + + + + PDA UV scanned spectrum header index header type + + + + + UV channel packet type + + + + + LT combined data type (profiles). + + + + + LT Combined Centroids. + + + + + Bitwise left shift operator, to get high 16 bits. + + Number to shift + the high 16 bits of a 32 bit value + + + + Get the low 16 bits of a 32 bit value. + + Number to mask + The low 16 bits + + + + Helper function to identifying the profile scan based on the given packet type. + + packet type + True if this is a profile packet type + + + + EH - The reason for the separation of packet type into profile/centroid and scan type is to + support legacy LCQ code that utilized the packet type to determine whether or not a scan + is profile or centroid. This becomes a problem with data converted from ICIS, for example, + which may store profile data in the centroid packet format. Setting this value is only necessary + where profile or centroid is written to a packet type that is not assumed to be of that + data type. + + + + + default is to use the packet type to determine profile/centroid + + + + + Centroid type + + + + + profile type. + + + + + The default scan provider. + + + + + Get a scan from a scan number. + + + The raw data. + + + The scan number. + + + The scan at "scan number" + + + + + The get scan at time. + + + The raw file. + + + The time. + + + The scan nearest to the given time. + + + + + This static factory class provides method to create a device method for an instrument method. + + + + + Creates the device method. + + Optional: Data for the device + The IDeviceMethod instance. + name;Device method name cannot be empty. + + + + Creates the device method factory. + + Device method writer factory object. + + + + IsotopeConsolidation - which function will be used for isotope consolidation + + + + + RemoveAllIsotopes - use function that strips all the isotopes during processing + + + + + KeepNonBaseIsotopes - use function that keeps non-base isotopes in the formula + + + + + Settings for the elemental compositions (formula searching) algorithm + + + + + Gets or sets a value indicating whether all features of elemental composition should be used. When false, all other settings are ignored + and results of searches should be returned as an empty collection. + + + + + Gets or sets the Lowest mass for use in mono isotopic mass searching + + + + + Gets or sets the Highest mass for mono isotopic mass searching + + + + + Gets or sets a value indicating whether to use the calculated mono isotopic mass, otherwise use the mass passed in. + Applies when "CalculateCompositionForMass" is called. + + + + + Gets or sets the minimum percentage threshold from the base peak for the mono isotopic mass + + + + + Gets or sets the tolerance (in amu) around the value to set limits when searching for mono isotopic mass. + Mass of mono isotopic peak must be within a limit of: + -MonoIsotopicSearchMassThreshold to +MonoIsotopicSearchMassThreshold + from the mass of a spectral peak. + + + + + Gets or sets the center of search range for mono isotopic mass + as a delta from the mass of a peak being analyzed + + + + + Gets or sets a string representation of the centroiding algorithm (for use on the UI) + + + + + Gets or sets a string representation of Missing Penalty Mode (for use in UI) + + + + + Gets or sets String representation of the SpectralFitNormalizationMode (for use in UI) + + + + + Gets or sets a string representation of (for use in UI) + + + + + Gets or sets a string representation of (for use in UI) + + + + + Gets or sets a value which determines how the masses are compared. + + + + + Gets or sets a value which determines the maximum error in mass for something to pass tolerance, in the selected units. + + + + + Gets or sets a value which determines how the fragment masses are compared. + + + + + Gets or sets a value which determines the maximum error in MSMS mass for something to pass tolerance, in the selected units. + + + + + Gets or sets the charge state of the fragmented ion + + + + + Gets or sets the String representation of (for use in UI) + + + + + Gets or sets a collection of elemental isotopes, and mix/max expected counts in formulae + + + + + Gets or sets a value indicating whether the element abundance table "Representative" should be use. + If it is not set, the "Protein" abundance table should be used. + + + + + Gets or sets a value indicating whether elemental compositions to be based on fitting against the supplied scan + + + + + Gets or sets a value indicating whether calibration reference data should be included in the scan. + + + + + Gets or sets the penalty (in units of spectral distance) that is + applied to a missing packet. A packet is missing if it exists in the theoretical pattern (above threshold) + but is not found in the measured spectrum (or too far away) + + + + + Gets or sets a value indicating whether the distances are normalized to have a max of 1.0 per packet (TrueDistance=false) + or of 1.414 (sqrt(2.0) per packet (TrueDistance=true) + + + + + Gets or sets a threshold which determines the smallest packets that are processed. It is applied to the + theoretical isotope pattern of an elemental composition candidate. Note that it is + not applied to the input spectrum. + Therefore a small pattern (BPI of pattern is smaller than 100% of input pattern + intensity) may still give good fits. + + + + + Gets or sets a value indicating whether the intensity error is taken absolute. This means that an intensity + that is expected to be 10% but is 9% has an error of 1%. If false, the + intensity error is taken relative. This means that an intensity that is + expected to be 10% but is 9% has an error of 10%. + + + + + Gets or sets a value indicating whether the spectral distance of an isotope packet is scaled with its intensity. + I.e: the intensity deviation of a small packet counts less + than the same deviation of a large packet. + see also WeightMassErrorByAbundance property. + + + + + Gets or sets a value indicating whether the spectral distance of an isotope packet is scaled with its intensity. + I.e: the mass deviation of a small packet counts less + than the same deviation of a large packet. + See also WeightIntensityErrorByAbundance property. + + + + + Gets or sets the error in units of standard deviation that is defined to give a 100% Spectral + Identity value. Together with the property ZeroFitExpectedError, these + two values define the scale of a 0 to 100 % error. + + + + + Gets or sets the error in units of standard deviation that is defined to give a 0% Spectral + Identity value. Together with the property HundredFitExpectedError, these + two values define the scale of a 0 to 100 % error. + + + + + Gets or sets The expected intensity error in units of standard deviation. + A standard deviation is defined such that 68% of all events are in the range X ± stddev. + 95% of all events are in the range X± 2*stddev + + + + + Gets or sets the expected mass error in units of standard deviation. + A standard deviation is defined such that 68% of all events are in the range X ± stddev. + 95% of all events are in the range X± 2*stddev. + + + + + Gets or sets the charge of the mass for which an + elemental composition is to be calculated. + + + + + Gets or sets the number of elemental compositions + that are to be saved. If the number of fits + found is bigger than "Best", only the best + "Best" ( judged by their deviation from the + specified mass) are saved in the result array. + + + + + Gets or sets the centroid algorithm that is used to calculate isotope + pattern masses from their isotopic distribution + + + + + Gets or sets The lowest acceptable RDB for a formula + Note that this property returns the RDB value for instances that contain + absolute RDB values. It returns RDB / 100 amu for instances that contain relative values. + Rather use GetRDB_LimitLow(). That one works for both absolute and relative limits + + + + + Gets or sets maximum RDB (ring double bond equivalence) for returned formulae. + + + + + Validates the ElementalCompositionParameters values + + + if parameters are invalid + + + + + Gets or sets the resolution that is used to calculate the theoretical isotope patterns. + This should be the same resolution with which the measured spectrum was acquired. + + + + + Gets or sets a value which determines if the nitrogen rule should be used. NitrogenRule enum for details + + + + + Gets or sets the theoretical and measured isotope for the Spectral Distance calculation, + patterns must be normalized. There are three different normalization modes available. + + + + + Gets or sets a value indicating whether to use auto dynamic range, for spectral distance + isotope simulations. If this is true (default) then the property "DynamicRange" is automatically adjusted, + each time spectral distance is calculated, based on the value of the theoretical peak intensity threshold, + which may also be auto calculated, or set to + depending on the value of . + + + + + Gets or sets a value indicating whether to apply dynamic A0 recalibration for spectral distance. + It is set to false by default. + + + + + Gets or sets MSMS SignalToNoise threshold for MSMS spectral processing + + + + + Gets or sets SpectralFit score cutoff for which formulas MSMS ranking will not be computed - will be set as 1 + + + + + Gets or sets which function will be used for isotope consolidation - 0 - RemoveAllIsotopes, 1 -KeepNonBaseIsotopes + + + + + Gets or sets the weight applied to Spectral Fit in the re-ranking algorithm + + + + + Gets or sets the weight applied to MsCoverage in the re-ranking algorithm + + + + + Gets or sets the weight applied to MsMsCoverage in the re-ranking algorithm + + + + + Gets or sets the weight applied to PatternCoverageWeight in the re-ranking algorithm + + + + + Gets or sets the weight applied to MsMsShiftMeasure in the re-ranking algorithm + + + + + Gets or sets a value indicating whether or not re-ranking will be performed + + + + + Creates a default list of elements for searching + + + + + A single possible result (formula) for elemental composition of a mass + + + + + The _mass. + + + + + The _combined fit. + + + + + The _delta mass. + + + + + The _formula. + + + + + The _pattern fit. + + + + + The RDB equivalents. + + + + + The _spectral distance. + + + + + The _mass deviation. + + + + + The _score. + + + + + The _composition. + + + + + The _isotopePackets + + + + + Gets or sets the fit value in percent. + + + + + Gets or sets the Elemental composition formula, with subscript style digits for elemental quantities. + This formula defines the istope of the peak which was matched with the sample. + + + + + Gets or sets the Elemental composition formula, with subscript style digits for elemental quantities. + This is the formula which contains the peak from the sample as one of it's istopes. + It can be used to redraw the isotope plot. + + + + + Gets or sets the mass of Composition (the mass of the calculated formula) + + + + + Gets or sets the combined fit factor [range from 0% to 100%]. This is a linear + combination between pattern fit and mass deviation. + + + + + Gets or sets the difference between the mass of the formula and the mass being searched. + This is the mass difference in amu "mass to search for" - "mass of this formula". + + + + + Gets or sets the elemental formula (plain text) + + + + + Gets or sets the fit factor [range from 0% to 100%] that indicates fit between theoretical and + measured isotope pattern. + + + + + Gets or sets the calculated RDB for the found formula + + + + + Gets or sets the Spectral Distance. This is the distance between a theoretical + and a measured isotope pattern of n packets in an n-dimensional space. + + + + + Gets or sets the deviation in mass, using the same tolerance mode used when searching + + + + + Gets or sets the IsotopePackets. + + + + + Gets or sets the number of peaks matched to an isotope by spectral distance algorithm, + that is: All peaks which contributed to the scoring (even if the peak was out of mass and intensity + tolerance box). + + + + + Gets or sets the number of isotopes in the pattern tested for match against sample peaks + + + + + Gets or sets the number of isotopes in the pattern which were matched + against a sample peak, and were within mass/intensity tolerance limits + + + + + Gets or sets the number of isotopes where there is at least one sample peak + within 10* mass tolerance + + + + + Gets or sets the coverage of experimental spectrum by isotopic pattern + + + + + Gets or sets the coverage of theoretical spectrum by isotopic pattern + + + + + Gets or sets the computed coverage of MsMs spectrum + + + + + Gets or sets the computed measure of matches with average shift comparing to the precursor shift + + + + + Gets or sets the number of matched peaks in MSMS spectrum + + + + + Gets or sets the list of matched fragments + + + + + Gets or sets Combined score used for re-ranking results based on supplied weights + + + + + Gets or sets Rank of the candidate formula based on Combined score + + + + + isotope packet + + + + + Gets or sets Mass of theoretical isotope + + + + + Gets or sets Mass of measured centroid + + + + + Gets or sets Intensity of theoretical isotope + + + + + Gets or sets Intensity of measured centroid + + + + + Gets or sets the index into the original scan for the matched peak + + + + + Gets or sets a value indicating whether Theory has a close match with Measured + + + + + Gets or sets the match mode. Defines the quality of the match. + + + + + Initializes a new instance of the class. + default constructor + + + + + Initializes a new instance of the class. + constructor + + + The intensityMeasured + + + The intensityTheory + + + The massMeasured + + + The massTheory + + + The matched + + + + + Class containing assignments of formulas to masses to the fragmentation spectrum + + + + + Gets or sets mass in fragmentation spectrum + + + + + Gets or sets formula matched to the Mass in the fragmentation spectrum + + + + + Gets or sets DeltaMass of assigned formula from the observed m/z + + + + + Gets or sets Intensity of the fragment + + + + + Gets or sets Signal to noise ratio of the fragment + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + + assigned mass + assigned formula + + + + Initializes a new instance of the class + + assigned mass + assigned formula + observed delta mass + observed intensity + observed signal to noise + + + + Initializes a new instance of the class. + default constructor + + + + + Initializes a new instance of the class. + Construct from values. (Faster than constructing and setting properties, as property setters in this + class may be instrumented with change notification). + + + Sets CombinedFit property + + + Sets DeltaMass property + + + Sets Formula property + + + Sets Mass property + + + Sets MassDeviation property + + + Sets PatternFit property + + + Sets RdbEquivalents property + + + Sets SpectralDistance property + + + Sets Score property + + + Sets MatchedPeaks property + + + Sets NoPenaltyPeaks property + + + Sets BroadSearchMatches property + + + Sets IsotopesTested property + + + Sets Composition property. The is the isotope composition matched to the experminal peak + + + + + Add isotope packet into the ElementalCompositionResult + + + The intensityMeasured + + + The intensityTheory + + + The massMeasured + + + The massTheory + + + The matched + + How the isotope was matched (within the mass and intensity limits) + Index of the matched peak in the original scan + + + + Compares only the formula for equality + + + The Result who's formula is compared. + + + True if equal + + + + + A collection of element subsets. + Used to supply data to the elemental composition algorithm. + + + + + Add an element to the end of the collection. + + + Element to add + + + + + Add an element, keeping the list in nominal mass order. + + + Element to add + + + + + Remove all element subsets with a given sign + + + If the subset has this sign, it is removed + + + + + Reset the "UseRatio" flag for all subsets in the collection to a given value. + + + Value to set all "UseRatio" flags. + + + + + Test if there is any in the collection with a given sign + + + Sign to look for + + + true if at least one in this collection has the given Sign + + + + + Reset the "in use" flag for all subsets in the collection to a given value. + + + Value to set all "in use" flags. + + + + + Defines an isotope of an element, and quantity limits of that isotope. + This is an input parameter to elemental composition searching. + + + + + + The chemical symbol. + + + + + The min abs count of this isotope. + + + + + The max abs count of this isotope + + + + + The min relative count of this isotope. + + + + + The max relative count of this isotope + + + + + If "relative" values (ratios) should be used. + + + + + Is this isotope used? + + + + + The nominal mass + + + + + The isotope mass. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct from all possible settings + (Obsolete form, use initializer, as many of the values have the same type, + and this is not "order safe"). + + + The sign. + + + The mass. + + + The nominal. + + + The min Abs. + + + The max Abs. + + + The min Relative. + + + The max Relative. + + + The use Ratio. + + + The in Use. + + + + + Gets or sets the chemical symbol for the element + + + + + Gets or sets the maximum count of this isotope in returned formula + + + + + Gets or sets the maximum count of this element in the returned formula + + + + + Gets or sets the maximum count of this isotope in returned formulae + + + + + Gets or sets the minimum count of this isotope in returned formulae + + + + + Gets or sets the minimum relative amount of this isotope + + + + + Gets or sets the maximum relative amount of this isotope + + + + + Gets or sets the nominal mass of this isotope + + + + + Gets the isotope including its nominal mass. For example "12 C" or "13 C". + + + + + Gets or sets the exact mass of the isotope + + + + + Gets or sets a value indicating whether this element is used for searching. + + + + + Gets or sets a value indicating whether the "Relative" min and max count of isotopes is used. + + + + + Enumeration of possible bar code status values + + + + + NotRead status. + + + + + Read status. + + + + + Unreadable status. + + + + + Error status. + + + + + Wait status. + + + + + Enumeration of sample types + + + + + Unknown sample + + + + + Blank sample + + + + + QC sample + + + + + Standard Clear (None) sample + + + + + Standard Update (None) sample + + + + + Standard Bracket (Open) sample + + + + + Standard Bracket Start (multiple brackets) sample + + + + + Standard Bracket End (multiple brackets) sample + + + + + Program sample + + + + + A sample which only contains solvent + + + + + Blank which includes internal standard only. + + + + + Matrix sample with known amounts of surrogates + + + + + Matrix sample with known amounts of target. + + + + + Data acquisition device + + + + + No instrument + + + + + Mass spectrometer + + + + + Data collected from an analog input connected to a mass spectrometer. + + + + + An A to D device + + + + + UV/Vis detector + + + + + PDA (UV detector) + + + + + Unknown detector type or instrument which collects only status + + + + + Enumeration of trace types, for chromatograms. + Note: legacy C++ file reader does not support + analog trace numbers above "4" or UV above "channel D". + Traces are organized in blocks of 10 + For example: + + StartAnalogChromatogramTraces=10 (not a valid trace type, just a limit) + Analog1 to Analog8 = 11 to 18 + EndAnalogChromatogramTraces =19 (not a valid trace type, just a limit) + Next block: + StartPDAChromatogramTraces = 20 + Etc. + + + + + + Marks the start of the MS trace types (this enum value +1) + + + + + Chromatogram summing between two masses + + + + + Total Ion Current + + + + + Largest peak in scan (or mass range in scan) + + + + + Neutral fragment + + + + + Marks the end of the MS trace types (this enum value -1) + + + + + Marks the start of the Analog trace types (this enum value +1) + + + + + Analog channel 1 + + + + + Analog channel 2 + + + + + Analog channel 3 + + + + + Analog channel 4 + + + + + Analog channel 5 + + + + + Analog channel 6 + + + + + Analog channel 6 + + + + + Analog channel 6 + + + + + Marks the end of the Analog trace types (this enum value -1) + + + + + Marks the start of the PDA trace types (this enum value +1) + + + + + Sum of values over a range of wavelengths + + + + + Average of all values in PDA scan + + + + + Largest value in scan (or wavelength range in scan) + + + + + Marks the end of the PDA trace types (this enum value -1) + + + + + Marks the start of the UV trace types (this enum value +1) + + + + + UV Channel A + + + + + UV Channel B + + + + + UV Channel C + + + + + UV Channel D + + + + + UV Channel E + + + + + UV Channel F + + + + + UV Channel G + + + + + UV Channel H + + + + + Marks the end of the UV trace types (this enum value -1) + + + + + A to D converter channels start at this +1 + + + + + A to D channel 1 + + + + + A to D channel 2 + + + + + A to D channel 3 + + + + + A to D channel 3 (old naming convention) + use "A2DChannel3" in new code + + + + + A to D channel 4 + + + + + A to D channel 4 (old naming convention) + use "A2DChannel4" in new code + + + + + A to D channel 5 + + + + + A to D channel 6 + + + + + A to D channel 7 + + + + + A to D channel 8 + + + + + A to D converter channels end at this -1 + + + + + Marks the start of all trace types (this enum value -1) + + + + + enumeration for data type for the fields used by + records of TuneData, StatusLog, TrailerExtra + These are upper case names, so that they don't clash with standard + type names. + + + + Null data type. No data is available (just a label) + + + character data type (1 byte) + + + true/false data type/ Similar to boolean, 1 byte of data displayed as True or False + + + Yes/No data type. 1 byte of data displayed as Yes or No + + + ON/OFF data type. 1 byte of data displayed as On or Off + + + unsigned char data type + + + short data type + + + unsigned short data type + + + + long data type + Note: this is referred as a long (4-byte) in C++. It's not the same size as long in C#. + + + + + unsigned log data type + Note: this is referred as an unsigned long (4-byte) in C++. It's not the same size as unsigned long in C#. + + + + float data type + + + double data type + + + string data type (single byte chars) + + + string data type (wide chars, unicode) + + + + enumeration of all initial and Timed events. + Note. The Threshold and Bunch Factor parameters are the most important ones + in controlling peak detection. + + + + + No peak detector event + + + + + Directly related to the RMS noise in the chromatogram, + this is Threshold, the fundamental control used for peak detection. + Set the threshold at the start of a peak + + + + + Directly related to the RMS noise in the chromatogram, + this is Threshold, the fundamental control used for peak detection. + Set the threshold at the end of a peak. + + + + + Controls the area cutoff. + Any peaks with a final area less than the area threshold will not be detected. + This control is in units of area for the data. + + + + + The peak to peak resolution threshold controls how much peak overlap must be present + before two or more adjacent peaks create a peak cluster. + Peak clusters will have a baseline drop instead of valley to valley baselines. + This is specified as a percent of peak height overlap. + + + + + Permit detection of a negative going peak. + Automatically resets after a negative peak has been found. + + + + + The Bunch Factor is the number of points grouped together during peak detection. + It controls the bunching of chromatographic points during integration and does not + affect the final area calculation of the peak. + The Bunch Factor must be an integer between 1 and 6; + a high bunch factor groups peaks into clusters. + + + + + Controls how closely the baseline should follow the overall shape of the chromatogram. + A lower tension traces the baseline to follow changes in the chromatogram more closely. + A high baseline tension follows the baseline less closely, + over longer time intervals. Set in minutes. + + + + + Using this event, you can tangent skim any peak clusters. + By default, it chooses the tallest peak in a cluster as the parent. + You can also identify which peak in the cluster is the parent. + Tangent skim peaks are detected on either side (or both sides) of the parent peak. + Tangent skim automatically resets at the end of the peak cluster. + + + + + Allows peak shoulders to be detected (peaks which are separated by an inflection rather than a valley) + Sets a threshold for the derivative. + + + + + Disables peak shoulder detection. + + + + + Stop detecting peaks, until the next on event. + + + + + Start detecting peaks again. + + + + + Force the following peaks to be treated as a cluster (single peak). + + + + + End the forced clustering of peaks. + + + + + Prevent any peaks from being clustered. + + + + + Permit clusters to occur again. + + + + + Determines if ion ratio checks are based on an absolute or relative window, from the expected percentage. + + + + + Window is an absolute % range. For example: 50% +/- absolute 10% gives 40-60% + + + + + Window is a relative range, for example: 50% +/ relative 10% gives 45%-55%. + + + + + Defines electrical polarity + + + + + Positive charge + + + + + Negative charge + + + + + Specifies how the valley between resolved peaks is measured (in what units) + + + + + Peaks are measured at full with half maximum. + This implies that two close peaks will both hit half maximum at the valley, + and is equivalent to 100% valley height (no valley), or just starting to be resolved. + + + + + Valley between two resolved peaks is 10% of peak height. + Used for most accurate mass instruments. + + + + + The shape of the peaks to simulate, when making a profile out of an isotope pattern. + + + + + Create Profile with a Gaussian peak shape. + (Legacy mode, as used in common core 2.0) + + + + + Create profile with a cosine peak shape + + + + + Create profile with a triangular peak shape + + + + + Create profile with a Lorentzian peaks shape + + + + + Use: Updated Gaussian table + This table is designed to allow slightly higher + precision in simulation and higher performance + + + + + Specifies a method of calculation centroids from a profile. + + + + + used in LCQ, TSQ, Quantum + + + + + Austin tweaking of TSQ algorithm + + + + + used in MAT95 and DFS products + + + + + used in Orbitrap and FT analyzers + + + + + Specifies units for measuring mass tolerance. + Tolerance is used to determine if a results should be kept, + in formula search. If the exact mass of a formula is not within tolerance + of a measured mass from an instrument, then the formula is not considered a valid result. + + + + + No tolerance mode + + + + + Atomic mass units (or Daltons) + + + + + Milli Mass Units (1/1000 Dalton) + + + + + Parts Per Million + + + + + If a packet of a theoretical pattern is not found in the measured pattern, this causes + a penalty. This enum defines the magnitude of the penalty + + + + + The penalty is one standard deviation + + + + + The penalty is four standard deviations + + + + + The penalty is sixteen standard deviations + + + + + The penalty is the spectral distance to the closest packet + + + + + The penalty is selected automatically. According to S/N + + + + + The penalty is selected automatically. According to S/N and ion statistic + + + + + For the Spectral Distance calculation, the theoretical and measured isotope + patterns must be normalized. There are three different normalization modes available. + + + + + Base peak normalization means that base + peak intensities are assumed to be identical. + + + + + If the mode is LINEAR, both theoretical and measured + spectrum are normalized such that the sum of their + intensity differences is minimized. + + + + + If the mode is QUADRATIC, both theoretical and measured + spectrum are normalized such that the sum of their + squared intensity differences is minimized. + + + + + The N-Rule builds on the fact that any compound + containing C,H,O,N,S elements has an even number + of N atoms if its molecular weight is even and + has an odd number of N atoms if its molecular + weight is odd. So if you want possible elemental + compositions for an molecular ion that has an even + mass, it makes no sense to display elemental composition + candidates with an odd number of N-atoms. + + + + + No limitations are imposed on results based on this rule. + + + + + For the EvenElectronIons mode, elemental compositions + containing N-atoms are only displayed if their RDB + ( Ring and double bond equivalent ) has an integer value + ( -1.0 0.0 1.0 2.0 … ); compositions containing N-atoms + with an RDB value of -0.5 0.5 1.5.. are not displayed. + + + + + For the OddElectronIons mode, elemental compositions + containing N-atoms are only displayed if their RDB + ( Ring and double bond equivalent ) has an non-integer value + ( -0.5 0.5 1.5.. ); compositions containing N-atoms + with an RDB value of -1.0 0.0 1.0 2.0 … are not displayed. + + + + + Units of data from a UV or analog devices (if known). + + + + + No units or unknown units + + + + + straight AU + + + + + Milli AU + + + + + micro AU + + + + + Units are Volts + + + + + Units are Millivolts + + + + + micro volts + + + + + Gives orientation whether or not a packet is inside the expected mass and intensity window (= Expectation rectangle) + If it is outside: it tells where the packet lies: + North: intensity too big. + South: Intensity too small + West: Mass too low. + East: Mass too big. + + + + + Unknown or not initialized yet + + + + + Packet has lower mass and higher intensity than expected + + + + + Packet has lower mass than expected but correct intensity + + + + + Packet has lower mass and lower intensity than expected + + + + + Packet has correct mass but lower intensity than expected + + + + + Packet has higher mass and lower intensity than expected + + + + + Packet has correct intensity but mass but higher mass than expected + + + + + Packet has higher mass and higher intensity than expected + + + + + Packet has correct mass and higher intensity than expected + + + + + Packet is inside expected error limits + + + + + The spectrum packet types. + Internally, within raw files, these are defined simply as "a short integer packet type" + These are then mapped to "constants". + It is possible that types may be returned by from raw data, or other transmissions, which + are outside of this range. + These types define original compression formats from instruments. + Note that most data values are returned as "double", when using IRawDataPlus + regardless of the compressed file format used. + + + + + No packet type is being specified. + This can be used as a method parameter to mean "use default". + This value is not valid when in a data record within a raw file. + + + + + Format for basic profiles (especially: 1990s San Jose instruments). + Packet Type 0. + + + + + Format for low resolution centroids (especially: 1990s San Jose instruments). + Packet Type 1. + + + + + Format for high resolution centroids (especially: 1990s San Jose instruments). + Packet Type 2. + + + + + Profile index. + Index into multiple segment profile data. Legacy flag, not returned within scans. + Packet Type 3. + + + + + Compressed accurate mass spectrum, legacy mass lab instruments. + Packet type 4 + + + + + Standard accurate mass spectrum, legacy mass lab instruments. + Packet type 5 + + + + + Standard uncalibrated spectrum, legacy mass lab instruments. + Packet type 6 + + + + + Accurate Mass Profile Spectrum, legacy mass lab instruments. + Packet type 7 + + + + + PDA UV discrete channel packet type. + Packet type 8 + + + + + PDA UV discrete channel index header type. + (Typical for multi channel UV) + Packet type 9 + + + + + PDA UV scanned spectrum header packet type + (Typical diode array detector format) + Packet type 10 + + + + + PDA UV scanned spectrum header index header type + Packet type 11. + + + + + UV channel packet type + Packet type 12 + + + + + MS Analog channel packet type + Packet type 13 + + + + + Profile spectrum type 2. Older San Jose instruments (LCQ) format. + Packet type 14. + + + + + Low resolution spectrum type 2. Older San Jose instruments (LCQ) format. + Packet type 15. + + + + + Profile spectrum type 2. Quantum format. + Packet type 16. + + + + + Low resolution spectrum type 3. Quantum format. + Packet type 17. + + + + + Linear Trap (centroids). + This format may also return extended data from "Centroid stream". + Packet type 18. + + + + + Linear Trap (profiles). + This format may also return extended data from "Centroid stream". + Packet type 19. + + + + + FTMS data type (centroids) + This format may also return extended data from "Centroid stream". + Packet type 20. + + + + + FTMS data type (profiles) + This format may also return extended data from "Centroid stream". + Packet type 21. + + + + + Compressed profile format for MAT95 (high-res) + Packet type 22. + + + + + Compressed profile format for MAT95 + Packet type 23. + + + + + Low Resolution Packet type 4 (Quantum) Centroid + Flags + Packet type 24. + + + + + Not a known type + + + + + Specifies a sequence bracket type. + This determines which groups of samples use the same calibration curve. + + + + + No bracket type specified. + + + + + Standards are Overlapped with adjacent brackets. + + + + + There is no bracketing. All samples in a sequence are a single group with one calibration curve. + + + + + Multiple groups which are not overlapped (do not share standards). + + + + + Groups of samples are automatically determined, based on sample types of each row. + + + + + Event list, includes both initial events and timed events. + Initial events are similar to properties of the peak detector. + They are always at the start of the list, and are not time triggered. + Timed events modify the initial values for a limited duration, + or control special features, such a detecting the next peak as "negative". + The additional functions are intended to assist in editing the list. + The initial events are at the start of the list + The timed events are in order + + + + + Gets the List of time events + + + + + Count the number of timed (as opposed to initial) events + + The number of timed events + + + + Step past any initial events, and find the first time event + + The node for the first timed event + + + + Find the first event matching a specific event code + + The code to search for + (returned) the number of the event in the list + The node containing the first event matching the supplied event code + + + + Find the first event matching a specific event code and kind + + Initial or timed version + The code to search for + (returned) the number of the event in the list + The node containing the first event matching the supplied event code + + + + Creates the initial default events for the collection + + + + + Make a copy of the current event collection + + A copy of the event collection + + + + Extends the "Scan" object to provide charge envolope information, + which is available from certain instrumnets. + + + + + Creates a new ExtendedScan from a Scan. + All extended data is empty + + + + + + Make a deep clone of this extended scan. + + + An object containing all data in the input, and no shared references + + + + + Default constructor for Extended Scan + + + + + Create an extended scan object from a file and a scan number. + + + File to read from + + + Scan number to read + + + The scan read, or null of the scan number if not valid + + + + + read extended scan data from file. + + + The raw file. + + + The scan number. + + + The stats. + + + + + Return a slice of a scan which only contains data within the supplied mass Range or ranges. + For example: For a scan with data from m/z 200 to 700, and a single mass range of 300 to 400: + This returns a new scan containing all data with the range 300 to 400. + All annotaion and charge envolope data is discarded, as peaks whcih make up envelopes are + not guranteed to be in any slice. + + The mass ranges, where data should be retained. When multiple ranges are supplied, + all data which is in at least one range is included in the returned scan + If this is true, then the scan will reset the + scan's mass range to the bounds of the supplied mass ranges + This setting only applies when the scan has both profile and centroid data. + If true: When there isa centroid near the start or end of a range, and the first or + final "above zero" section of the profile includes that peak, then the profile is extended, to include the points + which contribute to that peak. A maximum of 10 points may be added + A copy of the scan, with only the data in the supplied ranges + + + + Gets centroids with additional charge envelope information (when available) + + + + + Gets a value indicating whether charge envelope data + was recorded for this scan + + + + + Gets additional annotations per peak, related to change envelopes + + + + + Gets the change envelopes. This include overall information + about the envelope, plus the set of included peaks, + + + + + The file header. + + + + + Gets or sets the creator Id. The creator Id is the full text user name of the user + when the file is created. + + + + + Gets or sets the creator Login name. + The creator login name is the user name of the user + when the file is created, as entered at the "user name, password" screen in windows. + + + + + Gets or sets the creator Id. The creator Id is the full text user name of the user + when the file is created. + + + + + Gets or sets the creator Login name. + The creator login name is the user name of the user + when the file is created, as entered at the "user name, password" screen in windows. + + + + + Gets or sets the type of the file. + If the file is not recognized, the value of the FileType will be set to "Not Supported" + + + + + Gets or sets the file format revision + Note: this does not refer to revisions of the content. + It defines revisions of the binary files structure. + + + + + Gets or sets the file creation date in local time. + + + + + Gets or sets the modified date in local time. + File changed audit information (most recent change) + + + The modified date. + + + + + Gets or sets the number of times modified. + + + The number of times the file has been modified. + + + + + Gets or sets the number of times calibrated. + + + The number of times calibrated. + + + + + Gets or sets the file description. + User's narrative description of the file, 512 unicode characters (1024 bytes) + + + The file description. + + + + + Provides a means of reading headers from Xcalibur files. + + + + + Creates the reader. + + File header reader factory object + + + + Read a file header. + The file header contents are returned. The file is not kept open. + + Name of file to read + Access to the contents of the file header. + + + + This class is designed to allow iteration + through MS data in a file, based on a filter. + To use this, first open a raw file then + create this object based on the open file. + To process all the matching scans: + + FilteredScans scans=new FilteredScans(myFile,"MS2"); + int next=scans.NextSpectrumNumber; + while(next > 0) + { + scans.MoveSpectrumPosition (next); + var scan=myFile.GetSegmentedScanFromScanNumber(next,null); + //process the scan, then move to the next + next=scans.NextSpectrumNumber; + } + + + + + + Test if the file is open + + + True if it is open. + + + + + Set the filter used for iterating over spectra. + This can be used with the method to iterate over scans with a certain filter + + an object containing the Filter to be used for iterating over spectra + + + + Initializes a new instance of the class. + Creates an iterator to step through the selected file + + + The file. + + + The scan filter. + + + + + Move the iterator to the start of the list. + Permitting this loop to process all matching scans + + int next = iterate.MoveFirst(); + int count = 0; + + while (next > 0) + { + // add your application code to + // fetch and process scan "next" + // end of application code block + + iterate.SpectrumPosition = next; + count++; + next = iterate.NextSpectrumNumber; + } + + + The first valid spectrum number, or -1 if not scans match the given filter + + + + Move the iterator to the end of the list + + The last valid spectrum number, or -1 if not scans match the given filter + + + + Gets the filter used for iterating over spectra, in string form. + This can be used with the method to iterate over scans with a certain filter + + + + + Gets the Previous Spectrum, matching the filter + returns the previous spectrum number in file. 0 if there is no file open + + + + + Gets the Next Spectrum, matching the filter + returns the next spectrum number in file. 0 if there is no file open + + + + + Sets the CurrentSpectrumNumber to the new Spectrum Number + The Set property has no return value + + + + + Gets a value indicating whether there may be spectra before the current scan. + Note that this does not check if this scan matches the filter. + returns true if there is an Previous spectrum in file. Otherwise false + + + + + Gets a value indicating whether there are more scans after the current scan + Note that this does not check if this scan matches the filter. + returns true if there is an Next spectrum in file. Otherwise false + + + + + The filter extensions. + These are internal, as they are only + supported for use by the ScanEventHelper class. + + + + + Calculate the filter mass resolution. + + + The filter. + + + The . + + + + + Calculates the number of masses, corrected for multiple activations. + + + The filter. + + + The . + + + + + Test if the compensation voltage value is valid. + + + The filter. + + + The i. + + + The . + + + + + Defines a combination of plain text and interface defintions of filters. + + + + + Gets a Standard (parsable) text form of the filter. This does not include any compound names. + + + + + Gets the scan filer (as accessable fields) + + + + + Gets a string which combines the compound name and the filter text. + + + + + Gets the compound name + + + + + Creates a new instance of FilterWithString, parsing the filter based on + a supplied raw file. + + The raw data, used to parse this filter + The text form of the filter + + + + Creates a new instance of FilterWithString. + + + + + Gets a value indicating whether this object only has a compound name, + and does not have any filter text or filter interface defined. + When this is set: Only the Name property should be used. + + + + + Results of the find algorithm + + + + + Gets or sets the scan number for this result + + + + + Gets or sets the scan number predicted for this peak + + + + + Gets or sets the retention time of the peak which has been found + + + + + Gets or sets a score based on both forward and reverse matching factors + + + + + Gets or sets the score from forward search + + + + + Gets or sets the score from reverse search + + + + + Gets or sets the intensity of the supplied chromatogram at this result + + + + + Gets or sets the score from Match algorithm. + + + + + Gets or sets the peak found for this result + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + + An exact copy of the current collection. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Copy constructor + + + object to copy + + + + + Settings for the spectrum find algorithm. + This algorithm validates a detected peak, + by proving that the masses in the supplied spectrum for the peak + maximize near the peak. + + + + + Gets or sets the forward threshold for find algorithm. + + + + + Gets or sets the match threshold for find algorithm + + + + + Gets or sets the reverse threshold for find algorithm + + + + + Gets or sets the spec points. + + The spec points. + + + + Gets the spec points. + + The spec points. + + + + Get a copy of the find spectrum + + + A copy of the find spectrum. + + + + + Update the spectrum (for the find algorithm) + + The spectrum to find + + + + + The forward threshold. + + + + + The match threshold. + + + + + The reverse threshold. + + + + + The find spectrum. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Make a copy of this object + + a copy of this object + + + + User parameters for the Genesis peak integration algorithm. + These settings determine how the chromatogram is integrated. + + + + + Gets or sets a value indicating whether to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets or sets the expected peak width (seconds). + This controls the minimum width that a peak is expected to have (seconds) + if valley detection is enabled. The property is expressed as a window. + With valley detection enabled, + any valley points nearer than [expected width]/2 + to the top of the peak are ignored. + If a valley point is found outside the expected peak width, + Genesis terminates the peak at that point. + Genesis always terminates a peak when the signal reaches the baseline, + independent of the value set for the ExpectedPeakWidth. + + + + + Gets or sets the percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets or sets the edge detection Signal to Noise threshold. + This displayed as "S/N Threshold" in product UI. + Larger values cause peaks to become narrower. + A peak is considered ended if the following condition is met: + height <= (BaseNoise * SignalToNoiseThreshold)) + Where BaseNoise is the calculated noise on the fitted baseline, + and height is the height above baseline. + + + + + Gets or sets the Tailing Factor, which controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the is true. + The valid range is 0.5 through 9.0. + + + + + Gets or sets a value indicating whether to perform base to base integration + + + + + Gets or sets a value determining how far down from the peak apex a valley must be. + The peak edge is set to values below this defined ratio. + This test assumes an edge of a peak is found when the baseline adjusted height of the edge is less than + the ratio of the baseline adjusted apex height and the peak S/N cutoff ratio. + If the S/N at the apex is 500 and the peak S/N cutoff value is 200, + Genesis defines the right and left edges of the peak when the S/N reaches a value less than 200. + Range: 50.0 to 10000.0. + Technical equation:if height < (1/PeakSignalToNoiseRatioCutoff)*height(apex) => valley here + + + + + Gets or sets the percentage of the valley bottom + that the peak trace can rise above a baseline (before or after the peak). + If the trace exceeds RisePercent, + Genesis applies valley detection peak integration criteria. + This method drops a vertical line from the apex of the valley between unresolved + peaks to the baseline. + The intersection of the vertical line and the baseline defines the end of the first + peak and the beginning of the second peak. + This test is applied to both the left and right edges of the peak. + The RisePercent criteria is useful for integrating peaks with long tails. + Useful range: 0.1 to 50 + + + + + Gets or sets a value determining how deep a valley must be. + The range is 1.0 to 100.0. for valley detection. + Technical equation:height(here +/- VALLEY_WIDTH) > ValleyDepth*SNR+height(here) => valley here + + + + + Gets or sets a value indicating whether to enable RMS noise calculation. + If not set, noise is calculated peak to peak. + It is set by default. + + + + + Gets or sets the Baseline noise tolerance. + controls how the baseline is drawn in the noise data. + The higher the baseline noise tolerance value, + the higher the baseline is drawn through the noise data. + The valid range is 0.0 to 100.0 + + + + + Gets or sets the minimum number of scans that Genesis uses to calculate a baseline. + A larger number includes more data in determining an averaged baseline. + The valid range is 2 to 100.0. + + + + + Gets or sets a factor which controls the width of the RMS noise band above and below the peak detection baseline + and is applied to the raw RMS noise values to raise the effective RMS noise during peak detection. + The left and right peak boundaries are assigned above the noise and, therefore, + closer to the peak apex value in minutes. + This action effectively raises the peak integration baseline above the RMS noise level. + Range: 0.1 to 10.0. + Default: 2.0. + + + + + Gets or sets the minutes between background scan recalculations. + Baseline is refitted each time this interval elapses. + + + + + Gets or sets the smallest permitted signal to noise ratio. + Peaks are rejected if they have a lower signal to noise ratio than this. + + + + + Gets or sets the lowest permitted percentage of the largest peak. + Do not return peaks which are less than this % of the highest peak above baseline. + + + + + Gets or sets a value indicating whether peaks are filtered by relative signal height + + + + + Constrain the width of the peak. Default false + + + + + Expected peak width (seconds). default 0.0 + + + + + Percent of the total peak height (100%) that a signal needs to be above the baseline. Default 5%. + + + + + edge detection Signal to Noise threshold. default 0.5 + + + + + which controls how Genesis integrates the tail of a peak. default 1.0 + + + + + perform base to base integration? default false + + + + + how far down from the peak apex a valley must be. default 200 + + + + + percentage of the valley bottom + that the peak trace can rise above a baseline (before or after the peak). default 10% + + + + + How deep a valley must be. default 1.0 + + + + + Should noise be calculated as RMS? default true + + + + + The higher the baseline noise tolerance value, + the higher the baseline is drawn through the noise data. default 10.0 + + + + + minimum number of scans that Genesis uses to calculate a baseline. default 16. + + + + + controls the width of the RMS noise band above and below the peak detection baseline. default 2.0 + + + + + minutes between background scan recalculations. default 5.0 + + + + + The smallest permitted signal to noise ratio. Default 0.5. range in UI 0.0 to 999. + + + + + lowest permitted percentage of the largest peak. Default 10.0. + + + + + peaks are filtered by relative signal height? default false. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Initializes a new instance of the class. + Maps settings from an Xcalibur processing method. + + + The access. + + + + + make a copy of this object + + A copy of this object + + + + Defines the format of a log entry, including label (name of the field), data type, and numeric formatting. + + + + + Gets or sets the display label for the field. + For example: If this a temperature, this label may be "Temperature" and the DataType may be "GenericDataTypes.FLOAT" + + + + + Gets or sets the data type for the field + + + + + Gets or sets the precision, if the data type is float or double, + or string length of string fields. + + + + + Gets or sets a value indicating whether a number should be displayed in scientific notation + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The label. + Type of the data. + The string length or precision. + This indicates whether a number should be displayed in scientific notation. Optional parameter has a default value = false. + + + + Gets a value indicating whether this is considered numeric data. + This is the same test as performed for StatusLogPlottableData". + Integer types: short and long (signed and unsigned) and + floating types: float and double are defined as numeric. + + + + + Tests whether this is a variable header. + A "variable header", if present as the first field in a table of + headers, defines that each record has a variable number of valid fields. + The first field in each data record will then be converted to "validity flags" + which determine which of the fields in a data record have valid values. + + + The number of fields in the header. + + + True if this specifies that "variable length" records are used. + + + + + Re-formats the specified value per the current header's settings. + + + The value, as a string. + + + The formatted value. + + + + + Format a bool string based on the header. + + + The value to format. + + + The true string value. + + + The false string value. + + + The formatted bool value. + + + + + Format a numeric value. + + + The value to format. + + + The formatted numeric value. + + + + + The centroid peak interface. + + + + + Gets or sets mass. + + + + + Gets or sets intensity. + + + + + Gets or sets resolution. + + + + + Gets or sets base Line. + + + + + Gets or sets noise. + + + + + Gets or sets charge. + + + + + Gets or sets Peak Options Flag. + + + + + Gets or sets the signal to noise. + + + + + Methods for creating a value for one scan in a chromatogram. + + + + + Sum all masses within the ranges + + + List of ranges to sum + + + If the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + + + Sum of intensities in all ranges + + + + + Return the largest intensity (base value) in the ranges supplied + + + Ranges of positions (masses, wavelengths) + + + If the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + + + Largest intensity in all ranges + + + + + User parameters for the ICIS peak integration algorithm. + These settings determine how the chromatogram is integrated. + + + + + Gets or sets the number of scans. + Each scan is checked to see if it should be considered a baseline scan. + This is determined by looking at a number of scans (BaselineWindow) before + and after the a data point. If it is the lowest point in the group it will be + marked as a "baseline" point. + Range: 1 - 500 + Default: 40 + + + + + Gets or sets the Noise level multiplier. + This determines the peak edge after the location of the possible peak, + allowing the peak to narrow or broaden without affecting the baseline. + Range: 1 - 500 + Default multiplier: 5 + + + + + Gets or sets the noise level multiplier (a minimum S/N ratio). + This determines the potential peak signal threshold. + Range: 1 - 1000 + Default multiplier: 10 + + + + + Gets or sets a value indicating whether to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets or sets the percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets or sets the tailing factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the ConstrainPeak is true. + The valid range is 0.5 through 9.0. + + + + + Gets or sets the minimum number of scans required in a peak. + Range: 0 to 100. + Default: 3. + + + + + Gets or sets the minimum separation in scans between the apexes of two potential peaks. + This is a criterion to determine if two peaks are resolved. + Enter a larger number in a noisy environment when the signal is bouncing around. + Range: 1 to 500. + Default: 10 scans. + + + + + Gets or sets the number of scans on each side of the peak apex to be allowed. + Range: 0 to 100. + Default: 0 scans. + 0 specifies that all scans from peak-start to peak-end are to be included in the area integration. + + + + + Gets or sets the number of scans past the peak endpoint to use in averaging the intensity. + Range: 0 to 100. + Default: 5 scans. + + + + + Gets or sets a value indicating whether noise is calculated using an RMS method + + + + + Gets or sets a value which determines how the ICIS peak detector determines which signals are noise. + The selected points can determine a noise level, or be fed into an RMS calculator, + depending on the RMS setting. + + + + + The _baseline window. + + + + + The _area noise factor. + + + + + The _peak noise factor. + + + + + The _constrain peak width. + + + + + The _peak height percentage. + + + + + The _tailing factor. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + make a copy of this object + + a copy of this object + + + + Contains common instrument information. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the type of the device. + + + + + Gets or sets the base URI. + + + + + Gets or sets the name of the instrument + + + + + Gets or sets the Model of instrument + + + + + Gets or sets the Serial number of instrument + + + + + Gets or sets the Software version of instrument + + + + + Gets or sets the Hardware version of instrument + + + + + Gets or sets Units of UV or analog data (not used for MS instruments) + + + + + Gets or sets the run header of the instrument. + + + + + Gets or sets the list of auto filters. + + + + + Gets or sets the list of instrument methods. + + + + + Gets or sets the tune data for the instrument + + + + + Gets or sets the Status log data for the instrument + + + + + Gets or sets the segment event table for the current instrument + + + + + Gets or sets names for channels (for UV or analog data) + + + + + Data about an instrument, for example, instrument name + + + + + Gets or sets the name of the instrument + + + + + Gets or sets the model of instrument + + + + + Gets or sets the serial number of instrument + + + + + Gets or sets the software version of instrument + + + + + Gets or sets the hardware version of instrument + + + + + Gets or sets the Names for the channels, for UV or analog data: + + + + + Gets or sets the units of the Signal, for UV or analog + + + + + Gets or sets additional information about this instrument. + + + + + Gets or sets Device suggested label of X axis + + + + + Gets or sets Device suggested label of Y axis (name for units of data, such as "°C") + + + + + Gets or sets a value indicating whether the instrument is valid. + + + + + Gets a value indicating whether this file has accurate mass precursors + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct by copying fields from interface + + + Interface to copy from + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + 2 + + + + Test if this is a TSQ quantum series file. + Such files may have more accurate precursor mass selection. + + True if this is a raw file from a TSQ Quantum + + + + This static factory class provides methods for exporting instrument method from a raw file + + + + + Creates the instrument method exporter with an input raw file name. + It returns an interface which can be used to export an instrument method from a raw file. + + Example: + using (var exporter = InstrumentMethodExporterFactory.ReadFile(rawFile)) + { + if (!exporter.HasError && exporter.HasInstrumentMethod) + { + exporter.ExportInstrumentMethod("Export instrument method file name", false); + } + } + + + Name of the raw file. + Interface object for exporting the instrument method. + + + + create a reader for instrument methods + + + A factory to read instrument methods. + + + + + Provides a means of opening instrument methods. + + + + + create a reader for instrument methods + + + A factory to read instrument methods. + + + + + Read an instrument method. + The file contents are returned. The file is not kept open. + Because this reads a file, try catch is suggested around this activity. + Caller must test IsError after opening to obtain any detected error conditions in the file. + + Name of file to read + Access to the contents of the file. + + + + Instrument Method Writer Extension Methods + + + + + Creates a device section with the given device name and writes the binary data + and text data to it. If the same device name is already exist, it will get + overwritten. + + The instrument method writer object. + The instrument method in binary format. + The instrument method in text string. + The device name + True if + + + + This static factory class provides methods to create an instrument method writer for creating/updating an instrument method file. + + + + + Creates the instrument method writer with an input file name. + The method should open a file if it exists and loads the data into internal structure and then close the file; + otherwise, a new in-memory method file should be created (since it's in-memory, the data isn't persisted to a file yet). + After editing the device method, caller should use either the "Save" or "SaveAs" method to persist the data to a file. + + Name of the instrument method file. + Instrument method writer object. + Null or empty file name argument. + + + + Because there is no input file name, this method will create an "Unnamed" in-memory instrument method + file (since it's in-memory, the data isn't persisted to a file yet). + After editing the device method, caller should use the "SaveAs" method with a valid file name to save the data to a file. + + Instrument method writer object. + + + + Creates the instrument method writer factory. + + Instrument method writer factory object. + + + + Defines which instrument is selected in a file. + + + + + Initializes a new instance of the class. + + Index of the instrument. + Type of the device. + + + + Gets the Stream number (instance of this instrument type). + Stream numbers start from 1 + + + + + Gets the Category of instrument + + + + + A Metadata class represents key/value pair of Index and InstrumentType of an instrument in the raw file. + + + + + Gets or sets the index of the Instrument. + + + + + Gets or sets the type of the instrument. + + + + + Holds the results of integrating a single chromatogram. + The results are a peak list and the chromatogram data. + + + + + Gets or sets the data read from the raw file + + + + + Gets or sets the peaks found in the chromatogram + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + 2 + + + + Setting for all peak integrators, plus selection of integrator to use + + + + + Gets or sets settings for Avalon integrator + + + + + Gets or sets settings for genesis integrator + + + + + Gets or sets settings for ICIS integrator + + + + + Gets or sets choice of integrator to use + + + + + Gets Avalon. + + + + + Gets Genesis. + + + + + Gets ICIS settings. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Constructor, which should be used when not serializing, with the parameter set "true" + + + When true: default events are added to the Avalon integrator. + This is not needed when the object is about to be used by a serializer, as in that + case the initial settings will already be in the serialized object + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Initializes a new instance of the class. + + + The access. + + + + + Make a deep copy of this object + + + deep copy of peak detection settings + + + + + Events are either at the start of peak detection (Initial) or part way through the data (Timed) + + + + + Event value before any peak detection begins. + + + + + An event which occurs at a specific time in the chromatogram. + + + + + Class for initial and timed events. + Includes the event, any attributes and the event time. + + + + + Initializes a new instance of the class. + Create an empty event + + + + + Gets or sets the event which is occurring (for example "start cluster") + + + + + Gets or sets a value which determines if this is an initial value, or a timed event. + + + + + Gets or sets the event time. + If this is a timed event, this is the time the event occurs, in minutes. + + + + + Gets or sets the first data value associated with the event + + + + + Gets or sets the second data value associated with the event + + + + + Set the initial value of a timed event. + This sets an event at time=0. + + + The event being programmed + + + initial value of the event + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + + An exact copy of the current collection. + + + + + Exception filter string with invalid format + + + + + Initializes a new instance of the class. + Basic analysis exception, no specified reason. + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + Trapped inner exception + + + + + Initializes a new instance of the class. + Construct an exception, with serialization. + + + Data to serialize this object + + + Stream for serializing + + + + + Parameters to the Ion Ratio confirmation algorithm, for a single mass. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Constructor, which should be used when not serializing, with the parameter set "true" + + + When true: default events are added to the Avalon integrator. + This is not needed when the object is about to be used by a serializer, as in that + case the initial settings will already be in the serialized object + + + + + The construct. + + + The initialize. + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Initializes a new instance of the class. + + + The access to mass test. + + Peak integration settings + Smoothing settings + + + + Gets or sets the smoothing data for the ion ratio peak calculation. + This is the only interaction with m_smoothingPoints. This class is only + a place holder. Other users of this class will fill this data item and + use the settings. + + The smoothing points. + + + + Gets the integration choice item. This is the only interaction + with m_integrationChoice. This class is only a place holder. Other + users of this class will fill this data item and use the settings. + + The integration choice item. + + + + Gets or sets the integration choice item. This is the only interaction + with m_integrationChoice. This class is only a place holder. Other + users of this class will fill this data item and use the settings. + + The integration choice item. + + + + Gets the smoothing data for the ion ratio peak calculation. + This is the only interaction with m_smoothingPoints. This class is only + a place holder. Other users of this class will fill this data item and + use the settings. + + The smoothing points. + + + + Gets or sets mass to be tested + + + + + Gets or sets the Expected ratio + The ratio of the qualifier ion response to the component ion response. + Range: 0 - 200% + + + + + Gets or sets a Window determine how accurate the match must be + The ratio must be +/- this percentage. + + + + + Copy all settings from this object to another + + + Destination of copy + + + + + Copy all settings to this object from another + + + Source of copy + + + + + Copies the base values. + Creates a deep copy. + + + Cloned object + + + + + Ion Ratio Confirmation settings + + + + + Gets or sets Qualifier Ion Coelution + The time the retention time can vary from the expected retention time for the ion to still be considered confirmed. + Units: minutes + Bounds: 0.000 - 0.100 + + + + + Gets or sets a value indicating whether this Ion Ratio Confirmation is enabled. + + true if enable; otherwise, false. + + + + Gets or sets the type of the windows. + + The type of the windows. + + + + Gets or sets the qualifier ions. + + The qualifier ions. + + + + Gets the qualifier ions. + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Initializes a new instance of the class. + + + The component. + + + + + This class encapsulates the results of an ion ratio test for one ion. + + + + + Gets or sets a value indicating whether the coelution test has passed for this ion + + + + + Gets or sets the results of the coelution test + targetCompoundPeak.Apex.RetentionTime - ion.Apex.RetentionTime; + + + + + Gets or sets the measured ion ratio, as a percentage + (qualifierIonResponse * 100) / targetCoumpoundResponce + + + + + Gets or sets the Window in absolute % used to bound this test + + + + + Gets or sets a value indicating whether the ratio test passed for this ion + + + + + Gets or sets the Mass which was tested + + + + + Gets or sets The peak which was found in the IRC chromatogram + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current Result. + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Copy constructor + + + Object to copy + + + + + The Reaction interface. + Defines a reaction for fragmenting an ion (an MS/MS stage). + + + + + Gets the precursor mass (mass acted on) + + + + + Gets the collision energy of this reaction + + + + + Gets the isolation width of the precursor mass + + + + + Gets a value indicating whether precursor range is valid. + If this is true, then is still the center of + the range, but the values and + define the limits of the precursor mass range + + + + + Gets the start of the precursor mass range (only if ) + + + + + Gets the end of the precursor mass range (only if ) + + + + + Gets a value indicating whether collision energy is valid. + + + + + Gets the activation type. + + + + + Gets a value indicating whether this is a multiple activation. + In a table of reactions, a multiple activation is a second, or further, + activation (fragmentation method) applied to the same precursor mass. + Precursor mass values should be obtained from the original activation, and may not + be returned by subsequent multiple activations. + + + + + Gets the isolation width offset. + + + + + Methods to read a scan from a file + + + + + Create a scan object from a file and a scan number. + + + File to read from + + + Scan number to read + + + The scan read, or null of the scan number if not valid + + + + + Create a scan object from a file and a retention time. + + + File to read from + + + time of Scan number to read + + + The scan read, or null if no scan was read + + + + + Will be used with Channel labels. Currently not implemented. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The source to copy the values from. + + + + Gets or sets the index. + + + + + Gets or sets the label text. + + + + + Label Peak Information. + + + + + Initializes a new instance of the class. + Default Constructor. + + + + + Gets or sets mass. + + + + + Gets or sets intensity. + + + + + Gets or sets resolution. + + + + + Gets or sets base Line. + + + + + Gets or sets noise. + + + + + Gets or sets charge. + + + + + Gets or sets Peak Options Flag. + + + + + Gets or sets the signal to noise. + + + + + This class defines table of replicates for a calibration level + + + + + Initializes a new instance of the class. + Default construction of replicates + + + + + Initializes a new instance of the class. + Create a new replicate table for a calibration level. + + + Level to base this replicate table on + + + + + Initializes a new instance of the class. + Create a new replicate table for a calibration level. + + + Level to base this replicate table on + + + + + Gets or sets the Replicate Collection. + + + + + Gets the number of replicates for this level + + + + + Gets the replicates of this calibration level + + + + + array access operator to return Replicate array element. + + Index into the array + The requested replicate + + + + array access operator to return Replicate array element. + + Index into the array + The requested replicate + + + + Add a replicate to the list of replicates. + If the supplied replicate has keys which match a + keyed item in the current collection, then the matching record is replaced. + + An additional replicate of this calibration level + + + + Add a replicate collection to the list of replicates. + If any of the supplied replicates has keys which match a + keyed item in the current collection, then the matching record is replaced. + + The collection to add + + + + Add all replicates from this collection to the list of replicates. + This addition only succeeds if the collections have the same calibration level + If any of the supplied replicates has keys which match a + keyed item in the current collection, then the matching record is replaced. + + The replicates to add + + true if the collection was added, + false if the calibration levels do not match. + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current sample. + + + + Count all included/excluded replicates. + + The included and excluded counts are incremented by the number of included + and excluded points. These counters are not set to zero, + allowing this method to be called repeatedly, for example to count + replicates for all levels. + + + (updated) included counter + (updated) excluded counter + + + + delete all replicates from the list of replicates. + + + + + Finds the replicate with amount and response. + + Amount to match + Response to match + the matching replicate + + + + Find the first replicate which matches the given key, and has no second key + + Key to find + Found replicate, or null + + + + Find the replicate which matches a given key and + + First key (for example file or sample name) + Key for this peak (for example component name) + The replicate which matches a given key and peak key, or null if not found. + + + + Find the replicate which matches a the keys in a given replicate + + replicate to match + The matching replicate, or null if not found. + + + + Return the highest included response. Any excluded points are ignored. + + The highest response included in the calibration curve + + + + Return the lowest included response. Any excluded points are ignored. + + The lowest response included in the calibration curve + + + + Update the count of included and excluded replicates. + + The included counter is incremented if this is an included + point, otherwise the excluded counter is incremented. These counters are not set to zero, + allowing this method to be called repeatedly, for example to count + replicates for all calibration levels. + + + Replicate to count + (updated) included counter + (updated) excluded counter + + + + The results of finding a single peak from a list. + This includes the peak that is found, how it was found, + and in the case of spectral searching, the spectral search results. + + + + + Gets or sets the peak which best matches the location rules. + + + + + Gets the peak which best matches the location rules. + + + + + Gets or sets a record of how this peak was found. + The find results are only valid when this is set to "Spectrum". + + + + + Gets or sets a value indicating whether RT adjustments could be made to the RT reference. + This flag is only meaningful when RT reference adjustments are made based on + a reference peak (see the locate class). + If a valid reference peak is supplied, then the expected RT can be adjusted based on the reference. + If no reference peak is found (a null peak) then the expected RT cannot be adjusted, and this flag will be false. + + + + + Gets or sets the Find Results. + When using spectrum LocateMethod this will contain the best matching peaks and find scores. + + + + + Gets the peak which best matches the location rules. + + The results for this peak, or empty list + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Copy constructor + + + The object to copy + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current collection. + + + + Holds the results of locating a single peak from chromatogram. + The results are a and the chromatogram data. + + + + + Gets or sets the data read from the raw file + + + + + Gets or sets the peaks found in the chromatogram + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + 2 + + + + Copy these results + + Object to fill with the results + + + + Represents a single log. + + + + + Gets or sets the labels in this log. + + + + + Gets or sets the values in this log. + + + + + Gets or sets the length of the log. + + + + + Information returned when a peak baseline is manually adjusted on a chromatogram + + + + + Gets or sets x (time) of new baseline start point (left of peak) + + + + + Gets or sets x (time) of new baseline end point (right of peak) + + + + + Gets or sets y (intensity) of new baseline start point (left of peak) + + + + + Gets or sets y (intensity) of new baseline end point (right of peak) + + + + + Copy this object + + copy of object + + + + Contains the options for displaying and calculating the masses. + + + + + The initial tolerance. + + + + + The initial precision. + + + + + The initial tolerance units. + + + + + Initializes a new instance of the class. + Default Constructor + + + + + Initializes a new instance of the class. + Parameter Constructor + + + tolerance value + + + units of tolerance value + + + precision (decimal places) + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Gets or sets the tolerance value. + + The tolerance. + + + + Gets or sets the precision (decimal places). + + + + + Gets or sets the tolerance units. + + + + + Gets the tolerance string of the current toleranceUnits setting. + + + + + Gets the tolerance string from the enumeration strings resource. + + + The tolerance units. + + + The tolerance units as a string. + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current object. + + + + Get the tolerance window around a specific mass + + + Mass about which window is needed + + + The distance (in amu) from the mass which is within tolerance. + For example: myWindow=GetToleranceAtMass(myMass); + accept data between "myMass-myWindow" and "myMass+myWindow" + + + + + Contains the generic header definitions of the Status log header, Trailer extra header and Tune header. + If caller is not intended to use any one of these headers, caller should either pass a null argument or zero length array. + i.e. TrailerExtraHeaders = null or TrailerExtraHeaders = new IHeaderItem[0] + + + + + + Initializes a new instance of the class. + + + + + Gets or sets the status log headers. + Optional property, it has a default value of no header items (zero length array) + + + The status log headers. + + + + + Gets or sets the trailer extra headers. + Optional property, it has a default value of no header items (zero length array) + + + The trailer extra headers. + + + + + Gets or sets the tune headers. + Optional property, it has a default value of no header items (zero length array) + + + The tune headers. + + + + + Information about the mass spec device data stream + + + + + Initializes a new instance of the class. + Default field values: + Comment1 = ""; + Comment2 = ""; + ExpectedRunTime = 0; + MassResolution = 0.5; + Precision = 2; + + + + + Gets or sets the expected run time. The value should be greater than zero. + The expected run time. All devices MUST do this so that the real-time update can display a sensible Axis. + + + The expected run time. + + + + + Gets or sets the mass resolution (width of the half peak). + Optional property, it has a default value of 0.5. + + + The mass resolution. + + + + + Gets or sets the first comment about this data stream. + Optional property, it has a default value of empty string. + The comment is for "Sample Name" in Chromatogram view title (max 39 chars). + + + The comment1. + + + + + Gets or sets the second comment about this data stream. + Optional property, it has a default value of empty string. + This comment is for "Comment" in Chromatogram view title (max 63 chars). + + + The comment2. + + + + + Gets or sets the number of digits of precision suggested for formatting masses. + Optional property, it has a default value of 2. + + + The precision. + + + + + Class which includes the coefficients for + mass calibration from a particular scan, and means to convert between mass and frequency + + + + + Gets or sets the coefficient 1. + + + + + Gets or sets the coefficient 2. + + + + + Gets or sets the coefficient 3. + + + + + Gets or sets the base frequency. + + + + + Gets or sets the delta frequency. + + + + + Converts the given frequency to it's corresponding mass. + + sample number to convert + converted mass. + + + + Converts the given mass to frequency. + + The mass to convert + converted frequency + + + + Gets or sets the highest mass. + + + + + Gets or sets the (largest) segment range of the scans processed. + + + + + General math routines + + + + + Calculates the discrete Fourier transform of a set of real-valued data points. + + Calculates the FFT of a set of dataPointsCount real-valued data points. + The routine replaces the input data stored in data[0..dataPointsCount-1] + by the positive frequency half of its complex Fourier transform. + The real-valued first and last components of the complex transform + are returned as elements data[0] and data[1], respectively. + dataPointsCount MUST be a power of 2. + This routine also calculates the inverse transform of a complex + data array if it is the transform of real data (the result in this + case must be multiplied with 2/n). + + + + The input array of real-valued data points. + + + The number of data points in the array (must be a power of 2). + + + Flag indicating to calculate the FFT (sign=1) or the inverse FFT (sign=-1). + + + + + Calculates the discrete Fourier transform of a set of data points. + + Calculates the discrete Fourier transform of a set of data points. + The routine replaces data[0..2*dataPointsCount-1] by its discrete Fourier + transform, if sign is input as 1; or replaces data[0..2*dataPointsCount-1] + by dataPointsCount times its inverse discrete Fourier transform, if sign + is input as -1. + data is a complex array of length dataPointsCount or (i.e. dataPointsCount real/imaginary + pairs, which make up dataPointsCount array elements), equivalently, a real + array of length 2*dataPointsCount. + dataPointsCount MUST be an integer power of 2. + + + + Data to transform, as real and imaginary pairs (index 0= real, 1=imaginary etc.) + + + Number of valid points in the data. + + Sign of the data + + + + + Swap array elements + + + The array to swap. + + + The source + + + The destination. + + + + + Encapsulates information about MSAnalogInstrument. + + + + + Initializes a new instance of the class. + + + + + Represents the MassSpec instrument. + + + + + Initializes a new instance of the class. + + + + + The MS instrument data. + This class provides a default implementation of IMsInstrumentData + + + + + Gets or sets the centroid data. It's a second stream with profile scan. + + + + + Gets or sets the event data. + + + + + Gets or sets the frequencies (for LT/FT). + + + + + Gets or sets the noise data. + + + + + Gets or sets or sets the scan data. + + + + + Gets or sets the statistics data. + + + + + Initialize MS Instrument data from a scan and a scan event. + + + The scan. + + + The scan event. + + + The . + + + + + Class to manage the MS order information in a filter. + Simplifies the reaction tables into one entry per MS/MS stage. + + + + + Initializes a new instance of the class. + Construct an MS Order table from a filter or event + + + filter or event to analyze + + + + + Gets the reaction data for all MS/MS stages + + + + + create reactions table + + Data from raw file + Table of reactions + + + + Create a list of MS/MS stages (one per parent) + + Reactions, which may have multiple per stage + + + + format the MS order. + + + The scan filter. + + + + + The MS reaction. + This is reaction to fragment a precursor mass. + Reactions are used for MS/MS, Parent and Neutral scan types. + + + + + Gets or sets the precursor mass (mass acted on). + For a product ion scan, this would be a parent mass. + For a parent ion scan, this would be the fragment mass. + If this is a multiple reaction, this value is not used. + + + + + Gets or sets the collision energy of this reaction + + + + + Gets or sets the isolation width of the precursor mass + + + + + Gets or sets a value indicating whether precursor range is valid. + If this is true, then is still the center of + the range, but the values and + define the limits of the precursor mass range + + + + + Gets or sets the start of the precursor mass range (only if ) + + + + + Gets or sets the end of the precursor mass range (only if ) + + + + + Gets or sets a value indicating whether collision energy is valid. + When not valid "CollisionEnergy" should not be tested or displayed. + + + + + Gets or sets the activation type. + This defines how an ion is fragmented. + + + + + Gets or sets a value indicating whether this is a multiple activation. + In a table of reactions, a multiple activation is a second, or further, + activation (fragmentation method) applied to the same precursor mass. + Precursor mass values should be obtained from the original activation, and may not + be returned by subsequent multiple activations. + + + + + Gets or sets the isolation width offset. + + + + + Defines one stage of MS/MS, which may have multiple reactions. + For a parent or neutral scan, one stage is required. + For an MS/MS scan, one stage per MS/MS level is needed. + For example: define 2 stages for an MS3 experiment. + Each stage must have one or more reactions. + + + + + Gets or sets the set of reactions done at an MS stage. + There must be at least one reaction for a valid stage. + The first reaction of a stage must not have the MultipleActivation property set. + Subsequent reactions of a stage must have the MultipleActivation property set. + + + + + Gets the precursor mass for this MS/MS stage. + This is the precursor mass of the first reaction, and is defined as "0" + if no reactions have been added yet. + + + + + Initializes a new instance of the class. + Construct an MS stage from a list of reactions + + + Reactions for this stage + + + + + Contains objects containing data, related to "MS data systems". + Used as an interchange between various common core DLLs. + Several types are just "default get/set" implementations of interfaces + Some types have business logic in them. + + + + + A request for a Neutral loss chromatogram + + + + + Gets or sets tolerance applied to precursor mass + + + + + Find the data for one scan. + + + The scan, including header and scan event. + + + The chromatogram point value for this scan. + + + + + Exception for data reading. Thrown when a newer file format is detected. + This is usually because an appliction has been compiled against an older generation file reader DLL. + The application must be upgraded to use newer tools, which can decode this file. + + + + + Initializes a new instance of the class. + Basic analysis exception, no specified reason. + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + Trapped inner exception + + + + + Initializes a new instance of the class. + Construct an exception, with serialization. + + + Data to serialize this object + + + Stream for serializing + + + + + Defines noise and baseline at a given mass + (Part of support for reading orbitrap data) + + + + + Gets or sets the mass. + + + + + Gets or sets the noise. + + + + + Gets or sets the baseline. + + + + + Exception for raw data reading. Called when a Device specific method is made + without first selecting a Device. For example: requesting a chromatogram + + + + + Initializes a new instance of the class. + Basic analysis exception, no specified reason. + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + Trapped inner exception + + + + + Initializes a new instance of the class. + Construct an exception, with serialization. + + + Data to serialize this object + + + Stream for serializing + + + + + Exception for raw data reading. Called when a MS specific method is made + without first selecting the MS data. + For example: Requesting "scan filters" from UV data. + These should all be handled in the code (never intentionally thrown to caller) + + + + + Initializes a new instance of the class. + Basic analysis exception, no specified reason. + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + Trapped inner exception + + + + + Initializes a new instance of the class. + Construct an exception, with serialization. + + + Data to serialize this object + + + Stream for serializing + + + + + Factory to create objects which make MS chromatograms in parallel. + Chromatograms are delivered on threads, such that action methods to perform + peak integration etc. can be performed in parallel, and while other chromatograms, + if they end at a later time, are still being generated from the raw file + Chromatograms are generated from scans read from the raw file. + Each scan is read only once. + Data from the scans is reduced to mass and intensity information only, to reduce memory consumed. + If the data is "FT format" with a set of supplied centroids, then the data is generated from + the centroids only (no profiles are read from the raw file). + If the data is not FT format then the regular "segmented scan" data is used. + Scans are read in increasing scan number order. + Scans which are outside of the required ranges to build the chromatograms are not read. + Methods to "get chromatograms" are not called directly on supplied raw data interfaces. + This also supports async reading from multiple raw files, as the returned information is a thread array, + which the caller must sync (with "WaitAll") to complete operations on a given file. + + + + + Attach data sources to a Chromatogram batch generator (for MS chromatograms), + based in data available via IRawDataPlus. + This method has an IO overhead, as it configures a ChromatogramBatchGenerator, with a table + of "scan number and RT", which is read from the raw data. + It requires that the "rawData" interface supplied has an efficient implementation of RetentionTimeFromScanNumber. + + + Tool to generate chromatograms + + + The raw data. + + + Thrown if there is no available MS data. + + + + + Create the list of all MS scans. + + + The data. + + + The list of scan headers. + + + + + Defines an implementation of "IScanWithSimpleData", + + + + + Gets or sets the scan event. + + + + + Gets or sets the data. + + + + + The fast scan from raw data class, which supplies code needed for the + chromatogram batch generator to get from the IRawDataPlus interface. + Enhanced version uses methods which only return mass and intensity data. + + + + + Initializes a new instance of the class. + + + The raw data. + + + + + The scan reader. + + + The scan index, to the available scans. + + + The . + + + + + Encapsulates information about PDA Instrument. + + + + + Initializes a new instance of the class. + + + + + Defines the PDA scan header and wavelength settings + + + + + Gets or sets the start time. + + + + + Gets or sets the TIC. + + + + + Gets or sets the long wavelength. + + + + + Gets or sets the short wavelength. + + + + + Gets or sets the wave length step. + + + + + Gets or sets the Absorbance Unit's scale. + + + + + This class encapsulates a peak. (the result of peak detection) + + + + + Initializes a new instance of the class. + default constructor + + + + + Initializes a new instance of the class. + copy constructor + + + The peak to copy from. + + + + + Create by copying a peak. + + + The peak to copy. + + + + + Gets or sets the list of peaks that have been merged + + + + + Gets the list of peaks that have been merged + + + + + Gets a value which determines how signal to noise has been calculated. + When this returns .Value, a numeric value can + be obtained from . + + + + + Gets the signal to noise ratio. If is .Value, then this property returns the signal to noise ratio. + Otherwise this should not be used. Use .ToString() instead. + + + + + Gets or sets the position, height, baseline at left limit + + + + + Gets or sets the position, height, baseline at peak apex + + + + + Gets or sets the position, height, baseline at right limit + + + + + Gets or sets the Integrated peak area + + + + + Gets or sets the Mass of the base peak from the apex scan. + + + + + Gets or sets the Mass to charge ratio of peak. + + + + + Gets or sets the expected RT after making any RT adjustments. + + + + + Gets or sets the Noise measured in detected peak (for signal to noise calculation) + + + + + Gets or sets a value indicating whether the "Noise" value was calculated by an RMS algorithm. + + + + + Gets or sets the scan number at peak apex. + The apex of the peak corresponds to a particular signal. + This gives the scan number of that signal. + If no scan numbers are sent with the peak detection signal, then + the scan number = "signal index at apex +1". + Note that there is no guarantee that left and right edges will always be exactly on a scan, even + though most peak detectors behave that way, so this is not added as a property of + + + + + Gets or sets a Name for this peak (for example, compound name) + + + + + Gets or sets the number of scans integrated + + + + + Gets or sets a value which describes why the peak started. It is only set by the Genesis Detector. + + + + + Gets or sets a value which describes why the peak ended. It is only set by the Genesis Detector. + + + + + Gets or sets a value indicating whether this is a valid peak. + Peaks are assumed to have valid data, but may be marked invalid by + an integrator, if failing certain tests. + Invalid peaks should never be returned to a calling application + by an integrator algorithm. + Invalid peaks must never be: Drawn in a plot, listed in a report etc. + An application should indicate "Peak not found" when a peak is flagged as "Invalid". + + + + + Gets or sets a value indicating whether this is saturated. + + true when integration/mass range has saturation. + + + + Gets or sets a value indicating whether valley detection was used when detecting this peak. + + + + + Gets or sets the Direction of peak (Positive or Negative) + + + + + Gets or sets the chi-squared error in fitting the peak. + + + + + Gets or sets the calculated width, or 'gamma_r'. + + + + + Gets or sets the calculated intensity, or 'gamma_A'. + + + + + Gets or sets the calculated position, or 'gamma_t0'. + + + + + Gets or sets the calculated fourth parameter for gamma (gamma_M) or EMG functions. + + + + + Gets or sets the peak shape used in the fitting procedure. + + + + + Gets or sets the number of data points used in the fit. + + + + + Find baseline height for a peak at specified time + + Retention time to use for interpolation + Interpolated baseline height at + + + + Gets or sets a value indicating whether calculated values (such as height) may return negative numbers. + If false: negative calculated numbers are returned as 0 + + + + + Gets or sets peak Purity. + + + + + Gets Low time from peak purity calculation + + + + + Gets High time from peak purity calculation + + + + + Gets or sets the Low value of the retention time range, after a peak purity calculation. + + + + + Gets or sets the High value of the retention time range, after a peak purity calculation.. + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current Peak. + + + + Class to hold chromatogram settings of a peak + + + + + Initializes a new instance of the class. + Constructor for PeakChromatogramSettings + + + + + Initializes a new instance of the class. + Construct this object from read only interface + + The settings to copy from + + + + + Gets or sets the scan filter. + This determines which scans are included in the chromatogram. + + + + + Gets the chromatogram settings. + This defines how data for a chromatogram point is constructed from a scan. + + + + + Gets the chromatogram settings + When there is a trace operator set, + This defines how data for a chromatogram point is constructed from a scan for the chromatogram + to be added or subtracted. + + + + + Gets or sets the chromatogram settings. + This defines how data for a chromatogram point is constructed from a scan. + + + + + Gets or sets the chromatogram settings + When there is a trace operator set, + This defines how data for a chromatogram point is constructed from a scan for the chromatogram + to be added or subtracted. + + + + + Gets or sets the device type. + This defines which data stream within the raw file is used. + + + + + Gets the instrument index (starting from 1). + For example: "3" for the third UV detector. + + + + + Gets or sets the trace operator. + If the operator is not "None" then a second chromatogram can be added to or subtracted from the first. + + + + + Create a deep copy of this object + + Copy of object + + + + These settings detail how a peak is to be identified from the + list of possible peaks found by integrating a chromatogram. + The peak is expected at a certain time, which may be adjusted using a retention time reference. + The peak is then selected from possible peaks within a window around the selected time. + + + + + Gets or sets a value indicating whether retention time should be adjusted based on a reference peak. + + + + + Gets or sets the expected time, as in the method (before any adjustments) + + + + + Gets or sets a value which determine how a single peak is found from the list of + returned peaks from integrating the chromatogram. + For example: Highest peak in time window. + + + + + Gets or sets the window, centered around the peak, in minutes. + The located peak must be within a window of expected +/- width. + + + + + Gets or sets a setting which is used to restrict the chromatogram. + Only scans within the range "adjusted expected RT" +/- Window are processed. + For example: a 1 minute window setting implies 2 minutes of data. + + + + + Gets or sets settings for finding a peak based on spectral fit + + + + + Gets settings for finding a peak based on spectral fit + + + + + Gets or sets a rejection parameter for peaks + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + make a copy of this object + + a copy of this object + + + + A record of the signal at a certain point in a detected peak. + For example, the Apex. + + + + + Initializes a new instance of the struct. + Create A new point on a detected peak + + + Retention time at this point + + + The signal height at this point above the baseline (signal.intensity - baseline) + + + baseline height at retentionTime + + + + + Gets or sets the retention time at this point, in minutes. + + + + + Gets or sets the intensity minus baseline at RT + + + + + Gets or sets the baseline height at RT + + + + + Test that two peak points are equal + + first point to compare + second point to compare + true if they have the same contents + + + + Test that two peak points are not equal + + first point to compare + second point to compare + true if they do not have the same contents + + + + Test two peaks for equality + + + peak to compare + + + true if they are equal + + + + + Object.GetHashCode + + The hash code + + + + Settings PDA peak purity calculations + + + + + Gets or sets the % of the detected baseline. + + + + + Gets or sets a value indicating whether to compute Peak Purity. + + + + + Gets or sets a value indicating whether to use the enclosed wavelength range, not the total scan + + + + + Gets or sets the high limit of the scan over which to compute + + + + + Gets or sets the low limit of the scan over which to compute + + + + + Gets or sets the max of a scan must be greater than this to be included + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Make a copy of this object + + a copy of this object + + + + Defines a peak which has included system suitability results. + + + + + Initializes a new instance of the class. + Initializes from a peak and system suitability results. + This clones data from the passed in interfaces. + + + The peak. + + + The suitability results. + + + + + Gets or sets the suitability results. + + + + + Gets the resolution of the peak (from other peaks) + + + + + Gets a value indicating whether the resolution test passed + + + + + Gets a value indicating whether the symmetry test passed + + + + + Gets a value indicating whether the peak width test passed + + + + + Gets a value indicating whether the peak tailing test passed + + + + + Gets a value indicating whether the column overload test passed + + + + + Gets a value indicating whether the signal to noise test passed + + + + + Gets a value indicating whether the saturation test passed + + + + + Gets a value indicating whether the concave peak test passed + + + + + Gets a value indicating whether the baseline clipping test passed + + + + + Gets a value indicating whether the following values have been calculated: + PassedResolutionChecks, MeasuredResolution + + + + + Gets a value indicating whether the following values have been calculated: + PassedSymmetryChecks + + + + + Gets a value indicating whether the following values have been calculated: + PassedPeakWidth, PassedTailing, PassedColumnOverload, PassedNoise, PassedSaturated, + PassedConcave, PassedBaselineClipped + + + + + Gets a value indicating whether the ResolutionCheck was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the SymmetryCheck was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the PeakWidth test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Tailing test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the ColumnOverload test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Noise test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Saturated test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Concave test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the BaselineClipped test was performed, and the results of the test, when run. + + + + + Defines a precursor mass, and means of fragmenting it + + + + + Gets or sets the mass of the precursor + + + + + Gets or sets the method used to fragment the precursor + + + + + Gets or sets the level of activation to fragment the precursor + + + + + Gets or sets the precision of this value (number of decimal places found when parsing) + + + + + Compares the current object with another object of the same type. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + Value + Meaning + Less than zero + This object is less than the parameter. + Zero + This object is equal to . + Greater than zero + This object is greater than . + + + An object to compare with this object. + + + + + Provides a means of opening processing methods. + + + + + create reader. + + + The reader + + + + + Read a processing method. + The file contents are returned. The file is not kept open. + + Name of file to read + Access to the contents of the file. + + + + This class defines a QC level. + This is based on a calibration level, with a name and expected amount (base amount) + The QC level add a TestPercent and a means of testing + + + + + Gets or sets the QC test standard: 100 * (yobserved-ypredicted)/ypreditced + + + + + Initializes a new instance of the class. + Create a copy of a QC level + + + Level to copy + + + + + Test if an amount passes the QC test for this level + + + The calculated amount for the QC + + + true if the QC test passes, within tolerance + + + + + Initializes a new instance of the class. + Default construction of QC level + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current level. + + + + Initializes a new instance of the class. + Create a quality control level + + + A name associated with the level + + + The amount of calibration compound (usually a concentration) for this level + + + QC test standard: 100 * (yobserved-ypredicted)/ypreditced + + + + + A range of double Low, High. + + + + + Implements the operator ==. + + The first. + The second. + The result of the operator. + + + + Implements the operator !=. + + The first. + The second. + The result of the operator. + + + + Create an immutable (constant) range from center and delta, such that the range is center +/- delta. + + + The center. + + + The delta. + + + The . + + + + + Create an immutable (constant) range from low and high. + + + The low. + + + The high. + + + The range. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + Construct a range from limits + + + low limit of range + + + High limit of range + + + + + Initializes a new instance of the class. + Construct a range from another range, adding a tolerance if ends are the same + + + range to copy + + + If limits are same (with 1e-10) + this is subtracted from low and added to high of the new range + + + + + Initializes a new instance of the class. + Construct a range from another range, adding a tolerance if ends are the same + (within 1.0E-10). + + + range to copy + + + If limits are same (within 1e-10) + the tolerance is subtracted from low and added to high of the new range + + + + + Initializes a new instance of the class. + Construct a range from another range. + + + range to copy + + + + + Gets or sets the low end of range + + + + + Gets or sets the high end of range + + + + + Test for inclusion. + + + The value. + + + True if in range + + + + + Compares the current object with another object of the same type. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + Value + Meaning + Less than zero + This object is less than the parameter. + Zero + This object is equal to . + Greater than zero + This object is greater than . + + An object to compare with this object. + + + + + Indicates whether this instance and a specified object are equal. + + Another object to compare to. + + true if and this instance are the same type and represent the same value; otherwise, false. + + + + + Returns the hash code for this instance. + + + A 32-bit signed integer that is the hash code for this instance. + + + + + Factory to produce immutable ranges of double + + + + + Create an immutable (constant) range from low and high. + + + The low. + + + The high. + + + The range. + + + + + Create an immutable (constant) range from center and delta, such that the range is center +/- delta. + + + The center. + + + The delta. + + + The . + + + + + Construct a range from another range, adding a tolerance if ends are the same + (within 1.0E-10). + + + range to copy + + + If limits are same (within 1e-10) + the tolerance is subtracted from low and added to high of the new range + + + + + Construct a range from another range, adding a tolerance if ends are the same + + + range to copy + + + If limits are same (with 1e-10) + this is subtracted from low and added to high of the new range + + + + + Encapsulates raw file data. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the date when this data was created + + + + + Gets or sets the name of acquired file (excluding path) + + + + + Gets or sets the name of person creating data + + + + + Gets or sets the xml schema version for this file. + + + + + Gets or sets all instrument names. + + + + + Gets or sets the information about the sample. + + + + + Gets or sets the MS instruments. + + + + + Gets or sets the UV instruments. + + + + + Gets or sets the PDA instruments. + + + + + Gets or sets the PDA instruments. + + + + + Gets or sets the PDA instruments. + + + + + Gets or sets the instrument types map. This metadata is used to support GetInstrumentTypes method. + + + + + Gets or sets the list of instrument methods. + + + + + Gets The number of instruments (data streams) in this file. + + + + + get the number of instruments (data streams) of a certain classification. + For example: the number of UV devices which logged data into this file + + + The device type to count + + + The number of devices of this type + + + + + Class to read raw files + New code should not use this class directly. + Use only the static class: "RawFileReaderFactory" + Catch exceptions from the construction, which will be thrown if + the DLLs are missing. + Call the "OpenFile" method to open a raw file. + The returned interface from OpenFile is "IRawDataPlus". + The IRawDataPlus interface implements the IRawData interface, + so the returned object can also be passed to code expecting IRawData. + + + + + Initializes a new instance of the class. + + + + + Initialize: Load the required DLLs. + + + + + Open the requested raw file + + Name of file to open + Interface to read the raw data + + + + Class to read raw files, using 64 bit technology. + Call the "ReadFile" method to open a raw file. + The returned interface from ReadFile is "IRawDataPlus". + The IRawDataPlus interface implements the IRawData interface, + so the returned object can also be passed to code expecting IRawData. + To access data for the same file from multiple threads, see + + + + + create a thread manager. + + + The thread manager + + + + + create reader. + + + The factory + + + + + Open a raw file for reading. + + Name of file to read + Access to the contents of the file. + + + + Open a raw file for reading, creating a manager tool, such that + multiple threads can access the same open file. + + Name of file to read + Access to the contents of the file. + + + + A replicate is a measurement of a single calibration peak in 1 file. + + + + + Gets or sets the amount of target compound in calibration or QC standard. + + + + + Gets or sets the response of this sample, for example: Ratio of target peak area to ISTD peak area + + + + + Gets or sets the retention time of this replicate, for drift calculations + + + + + Gets or sets a value indicating whether to exclude this data point from the calibration curve. + + + + + Gets or sets the first key name associated with this replicate (for example a file name) + + + + + Gets or sets the second key name associated with this replicate (for example a peak or compound name) + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + An exact copy of the current Replicate. + + + + Exception for raw data reading. Called when a Chromatogram reading method is made + without first selecting a devices with chromatographic data. For example: requesting a chromatogram + from a device of type "Other" (such a an auto sampler). + + + + + Initializes a new instance of the class. + Basic analysis exception, no specified reason. + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + + + Initializes a new instance of the class. + Exception, with reason as text, which application can display or log + + + Reason for exception + + + Trapped inner exception + + + + + Initializes a new instance of the class. + Construct an exception, with serialization. + + + Data to serialize this object + + + Stream for serializing + + + + + The run header. + + + + + Gets or sets the number for the first scan in this stream (usually 1) + + + + + Gets or sets the number for the last scan in this stream + + + + + Gets or sets the time of first scan in file + + + + + Gets or sets the time of last scan in file + + + + + Gets or sets the lowest recorded mass in file + + + + + Gets or sets the highest recorded mass in file + + + + + Gets or sets the mass resolution value recorded for the current instrument. + The value is returned as one half of the mass resolution. + For example, a unit resolution controller would return a value of 0.5. + + + + + Gets or sets the expected acquisition run time for the current instrument. + double ExpectedRunTime { get; } + + + + Gets or sets the max integrated intensity. + + + + + Gets or sets the max intensity. + + + + + Gets or sets the tolerance unit. + + + + + Encapsulates various information about sample. + + + + + Max number of user text column count (20) + + + + + Initializes a new instance of the class. + + + + + Gets or sets the comment about sample (from user). + + + + + Gets or sets the Code to identify sample. + + + + + Gets or sets the description of sample. + + + + + Gets or sets the vial or well form auto sampler. + + + + + Gets or sets the amount of sample injected. + + + + + Gets or sets bar code from scanner (if attached). + + + + + Gets or sets the bar code status. + + + + + Gets or sets a name to identify the Calibration or QC level associated with this sample. + Empty if this sample does not contain any calibration compound. + + + + + Gets or sets the bulk dilution factor (volume correction) of this sequence row. + + + + + Gets or sets the instrument method filename of this sequence row. + + + + + Gets or sets the name of acquired file (excluding path). + + + + + Gets or sets the name of calibration file. + + + + + Gets or sets the ISTD amount of this sequence row. + + + + + Gets or sets the row number. + + + + + Gets or sets the path to original data. + + + + + Gets or sets the processing method filename of this sequence row. + + + + + Gets or sets the type of the sample. + + + + + Gets or sets the sample volume of this sequence row. + + + + + Gets or sets the sample weight of this sequence row. + + + + + Gets or sets the collection of user text. + + + + + Create a deep copy of the current object. + + A deep copy of the current object. + + + + Class to represent a scan + + + + + Initializes a new instance of the class. + Default construction. + + + + + Initializes a new instance of the class. + Overload for processed data (such as averaged or subtracted) + + + The converter from mass to frequency (used by FT data averaging and exporting). + + Optional: Noise and baseline table + + + + Copy scan data. This protected method is inteded for derived object use only. + It is not a "deep clone" of a scan. + + Scan to copy + + + + Gets or sets A second data stream for the scan + + + + + Gets A second data stream for the scan + + + + + Gets a value indicating whether this scan has a centroid stream. + + + + + Gets a value indicating whether this scan has a noise table. + This will be true only if the scan was constructed with the overload containing this table. + Note that this is not related to having "noise and baseline" values with centroid stream data. + This is a separate table, used for spectrum averaging and subtraction of orbitrap data + + + + + Gets or sets a value indicating whether the User Tolerance value is being used. + + + + + Gets or sets the mass resolution for all scan arithmetic operations + + + + + Gets or sets a value indicating whether, when requesting "Preferred data", the centroid stream will be returned. + For example "", "". + If this property is false, or there is no centroid stream, then these methods will return + the data from . For greater efficiency, callers should cache the return of "". + Typically data processing, such as elemental compositions, should use these methods. + + + + + Gets peak flags (such as saturated) for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Mass of base peak default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Noise of base peak for default data stream (usually centroid stream, if present). + Falls back to zero if centroid stream is not preferred or not present + + + + + Gets Resolution of base peak for default data stream (usually centroid stream, if present). + Falls back to zero if centroid stream is not preferred or not present + + + + + Gets peak flags (such as saturated) for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Intensity for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets the Mass for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Noises for default data stream (usually centroid stream, if present). + Returns an empty array if centroid stream is not preferred or not present + + + + + Gets Baselines for default data stream (usually centroid stream, if present). + Returns an empty array if centroid stream is not preferred or not present + + + + + Gets Resolutions for default data stream (usually centroid stream, if present). + Returns an empty array if centroid stream is not preferred or not present + + + + + Gets or sets the number of scans which were combined to create this scan. + For example: By the scan averager. + This can be zero if this is a "scan read from a file" + + + + + Gets or sets Header information for the scan + + + + + Gets Header information for the scan + + + + + Gets or sets Type of scan (for filtering) + + + + + Gets or sets The data for the scan + + + + + Gets The data for the scan + + + + + Gets or sets IScanSubtract interface pointer. + + Interface to perform subtraction + + + + Gets or sets IScanAdd interface. + This delegates addition of FT profile scans. + + Interface to perform addition + + + + Gets or sets the Tolerance value. + + + + + Get or sets a value indicating whether scan + and - operators will merge data from scans + which were not scanned over a similar range. + Only applicable when scans only have a single segment. + By default: Scans are considered incompatible if: + The span of the scanned mass range differs by 10% + The start or end of the scanned mass range differs by 10% + If this is set as "true" then any mass ranges will be merged. + + + + + Create a scan object from a file and a retention time. + + + File to read from + + + time of Scan number to read + + + The scan read, or null of the scan number if not valid + + + + + test if 2 scans can be averaged or subtracted. + + + Returned as "true" if all segments are the same + + + Current scan object + + + The scan to possibly add + + + true if scans can be merged + + + + + Create an object which can be used to read scans from a file, with optional caching. + This is valuable if repeated operations (such as averaging) are expected over the same region of data. + Scans returned from each call are unique objects, even if called repeatedly with the same scan number. + + + Number of scans cached. + When set to 1 or more, this creates a FIFO, keeping track of the most recently read scans. + If a scan in the FIFO is requested again, it is pulled from the cache. + If a scan is not in the cache, then a new scan is read from the file. + If the cache is full, the oldest scan is dropped. The newly read scan is that added to the FIFO cache. + If size is set to 0, this makes a trivial object + with no overheads, that directly gets scans from the file. + + + Object to read scans from a file + + + + + Create a scan object from a file and a scan number. + + + File to read from + + + Scan number to read + + + The scan read, or null of the scan number if not valid + + + + + Merge the two scans. + + current scan object(this). + scan object to merge. + returns the sum of two scans. + + + + Averages the two scans. + + scan object to average. + divider (or) common factor. + returns the average scan. + + + + Subtract method for MS data. + + current scan object. + scan object to subtract. + returns the subtracted scan object. + + + + Converts the segmented scan to centroid scan. + Used to centroid profile data. + + + The scan to centroid + + The centroided version of the scan + + + + Make a deep clone of this scan. + + + An object containing all data in the input, and no shared references + + + + + Deep Copy all data from another scan into this scan. + Intended to assist in cloning derived objects. + + + + + Return a slice of a scan which only contains data within the supplied mass Range or ranges. + For example: For a scan with data from m/z 200 to 700, and a single mass range of 300 to 400: + This returns a new scan containing all data with the range 300 to 400. + + The mass ranges, where data should be retained. When multiple ranges are supplied, + all data which is in at least one range is included in the returned scan + If this is true, then the scan will reset the + scan's mass range to the bounds of the supplied mass ranges + This setting only applies when the scan has both profile and centroid data. + If true: When there isa centroid near the start or end of a range, and the first or + final "above zero" section of the profile includes that peak, then the profile is extended, to include the points + which contribute to that peak. A maximum of 10 points may be added + A copy of the scan, with only the data in the supplied ranges + + + + Order mass ranges by lowest mass. + + + + + + + + generate frequency table for this scan. + This method only applied to "FT" format scans + which have mass to frequency calibration data. + When a scan in constructed from processing algorithms, such + as averaging, a frequency to mass converter is used to + create this scan. This same converter can be used to create + a frequency table, which would be needed when writing averaged (or subtracted) data to a raw file. + + + The frequency table. + + + + + Generates a "noise and baseline table". + This table is only relevant to FT format data. + For other data, an empty list is returned. + This table is intended for use when exporting processed (averaged, subtracted) scans to a raw file. + If this scan is the result of a calculation such as "average of subtract" it may be constructed using + an overload which includes a noise and baseline table. + If so: that tale is returned. + Otherwise, a table is generated by extracting data from the scan. + + + The nose and baseline data + + + + + The add centroids. + + + The current scan. + + + The input scan. + + + + + Addition of FTMS centroid scans (called by operator +=) + + + current scan object(this). + + + scan to right of + operator (that) + + + The sum of the two scans + + + + + The add scan stats. + + + The left scan. + + + The right scan. + + + The scan stats. + + + The base height. + + + The base mass. + + + + + The add segment. + + + The left scan. + + + The left segment. + + + The right segment. + + + The segment number. + + + The result scan segments. + + + The base height. + + + The base mass. + + + The process segments. + + + + + Add segments. + + + The _identical flag. + + + The left scan. + + + The right scan. + + + The process segments. + + + The sum of the two scans, which is also in "leftScan". + + + + + The append peak. + + + The results. + + + The new peak. + + + The mass fuzz (tolerance). + + + + + Determine if this is a basic profile type. + + + The packet type. + + + True if it is basic profile type. + + + + + Attempt to find the tolerance factor, from the base peak of a scan + return "true" on fail. + + + The centroid count. + + + The centroid stream. + + + The base mass. + + + The tolerance factor. + + + The is orbitrap data. + + + The calculated tolerance factor. + + + + + Returns the default tolerance factor. + + + flag to Check if we have LTQ-FT or Orbitrap data + + + The calculate default tolerance factor. + + + + + The calculate mass fuzz. + + + The current scan. + + + The left centroid. + + + The right centroid. + + + The tolerance factor. + + + The is orbitrap data. + + + The left iterator. + + + The right iterator. + + + The process segments. + + + The calculated mass fuzz. + + + + + Calculates the Mass tolerance for centroid peak. + + + current mass tolerance value. + + + tolerance factor + + + previous mass tolerance value + + + flag to check if we have LTQ-FT or Orbitrap data. + + + tolerance unit + + + The calculate mass fuzz for centroid peak. + + + + + Calculates the Mass tolerance for profile peak. + + + current mass tolerance value. + + + tolerance factor + + + previous mass tolerance value + + + flag to check if we have LTQ-FT or Orbitrap data. + + + tolerance unit + + + The calculated mass fuzz for profile peak. + + + + + Calculates the tolerance factor + + + CentroidStream object + + + calculates the tolerance factor at specified index. + + + flag to Check if we have LTQ-FT or Orbitrap data + + + The calculate tolerance factor for labels. + + + + + Calculate total scan size. + + + The segments. + + + The total scan size. + + + + + Check for identical. + + + The identical flag. + + + The current scan object. + + + The input scan object. + + + The number of segments found + + + + + The combine peaks. + + + The left. + + + The right. + + + + + The convert centroid stream tolerance. + + + The current scan. + + + The centroid stream. + + + The counter. + + + The use peak width as mass fuzz. + + + The resolution factor. + + + The converted centroid stream tolerance. + + + + + Create an empty centroid stream. + + + The size. + + + The scan number. + + + A centroid stream which has "size" data packets. + + + + + Create a segmented scan. + + + The number of peaks in the scan. + + + The created scan + + + + + Assuming that the methods ReplaceScanDataArrays and UpdateSegmentSizes + have already been called, the result scan + is formatted ready to accept new data + Merge the data from the results of adding each segment + + + The scan. + + + The segments. + + + + + The fill segment range. + + + The left segment. + + + The right segment. + + + The output segmented scan. + + + + + find segment start packet index number. + + + The left segment. + + + The right segment. + + + The iterator. + + + The count of peaks before this segment in the left scan. + + + The count of peaks before this segment in the right scan. + + + + + Fix the length of segment tables after a merge + + + scan which will contain a merge + + + segments which are result of addition + + + + + The get subtracted index. + + + The current scan. + + + The right scan. + + + The output peak count. + + + The base height. + + + The base mass. + + + Index of the subtracted scan + + + + + get the sum index. + + + The current scan. + + + The right scan. + + + The output peak count. + + + The base height. + + + The base mass. + + + The scan index data for the summed scans + + + + + get the tolerance factor. + + + The current scan. + + + The right scan. + + + The left centroid. + + + The right centroid. + + + The right centroid count. + + + Get the tolerance factor. + + + The is orbitrap data. + + + The left centroid count. + + + The tolerance factor. + + + + + Test if is known profile type. + + + The packet type. + + + true if this is known to be profile + + + + + The merge segments. + + + The scan. + + + The all results. + + + + + Order the segment ranges of the scan, and order the "allResults" table to match + This is part of the process to centroid a scan + when this is done, it is more efficient to combine "allResults" into a single segment + + + The scan ranges. + + + The all results. + + + The segment range table + + + + + Addition of SegmentedScan's. + this case for profile data,which matches with identical or similar segments. + + + set if the flags have the same segments + + + left scan of addition "left + right" + + + right scan of addition "left + right" + + + + + Added for supporting addition of FTMS profile points + + + + + + + + Index into input data + + Mass Tolerance + + + + + Adds the two CentroidSteam's + + + Current position in the output buffer + + + previous output CentroidStream. + + + current CentroidStream. + + + index. + + + mass value. + + + + + The put peak. + + + The result count. + + + The out put. + + + The in put. + + + The position. + + + The mass fuzz. + + + The process segments. + + + + + Adds the two segmented scan. + + + index into output array + + + previous output peak. + + + current peak object. + + + index. + + + mass value. + + + + + The remove zeros. + + + The stream. + + + The new size. + + + + + The remove zeros. + + + The scan. + + + The new size. + + + + + create the arrays for the scan, with a new length + + + The scan. + + + The total. + + + + + Create a new scan out of the data in resultScanSegments + in the private method, the scan is assumed to have valid segment ranges + and the correct size of the segment tables + only the data for the segments needs to be replaced + + + The scan. + + + The segments. + + + + + Scale the label intensities by a common factor. + + + common factor + + + CentroidStream object to scale. + + + returns the scaled Centroid Stream object. + + + + + Search for the base peak resolution. + + + base mass value + + + CentroidStream object to search. + + + peak value. + + + The search base peak index. + + + + + Select only non zero values from an array. + + + The values. + + + The array of non zero values + + + + + The sub centroids. + + + The current scan. + + + The input scan. + + + + + The sub ft centroid data. + + + The current scan. + + + The right scan. + + + The subtracted scan + + + + + Subtract FT Profile Data + + + The object subtract from this + + + + + The result of the subtraction of the two scans + + + + + Add FT Profile Data + + + The object subtract from this + + + + + The result of the subtraction of the two scans + + + + + The sub label. + + + The output index. + + + The out put. + + + The input. + + + The position. + + + The mass fuzz. + + + + + Subtract a background peak. + + + The output (foreground scan) counter. + + + The output (foreground scan). + + + The input (background scan). + + + The input (background scan) counter. + + + The mass fuzz (tolerance). + + + + + subtract profile data, with segmented scans + + + The identical flag. + + + The current scan. + + + The input scan. + + + + + The subtract segment. + + + The left scan. + + + The left segment. + + + The right segment. + + + The segment number. + + + The result scan segments. + + + The base height. + + + The base mass. + + + + + The subtract segments. + + + The identical flag. + + + The left scan. + + + The right scan. + + + The subtraction result + + + + + Try to merge similar scans. + + + The current scan object. + + + The input scan object. + + + The both centroids. + + + The counter. + + + The can merge. + + + True if can merge similar scans. + + + + + The update segment sizes. + + + The scan. + + + The segments. + + + + + The validate centroid scan. + + + The stream. + + + + + + + The validate segmented scan. + + + The scan. + + + + + Convert tolerance into mass. + + + The prof. + + + The positions. + + + The converted tolerance. + + + + + Find peaks in the current segment (part of centroiding) + + The scan segment (SIM/SRM range) + + + + + The read from file. + + + The raw file. + + + The scan number. + + + The stats. + + + + + The fragment result. + + + + + Gets or sets Intensity. + + + + + Gets or sets Mass. + + + + + Gets or sets Options. + + + + + Helper class for parallel chromatogram generation. + This object pulls data from constructor data into the required + properties to meet the interface. + This object can be used over 1 billion times when generating chromatograms + from a sequence of raw files (especially the scan event helper), + so all data is pulled into properties. + This object can then be used as a "class" rather than "interface" + permitting the compiler to inline. + + + + + Initializes a new instance of the class. + + + The scan. + + + The scan index. + + + + + Gets the header, wrapper from supplied interface. + + + + + Gets the index. + + + + + Gets the scan event helper. + + + + + Gets the data. + + + + + Gets the scan event + + + + + Provides a means of averaging scans + + + + + Create a factory, which can be used to average scans. + + + The tool to average + + + + + Create a scan averaging tool, for use with a specific raw file. + This can then be use to average selected scans from the file. + Processing of scan filters, and default values for tolerance + also use the supplied raw data interface. + + Access to data to be averaged + Interface to perform averaging + + + + Defines an extended centroid scan (FTMS data), which includes analysis of charge envelopes. + + + + + Gets a value indicating whether charge envelope data + was recorded for this scan + + + + + Gets additional annotations per peak, related to change envelopes + + + + + Gets the change envelopes. This include overall information + about the envelope, plus the set of included peaks, + + + + + All isotopes just having a different charge will be grouped together in a charge envelope. Due + to calculation restrictions it is quite likely that there are further peaks which theoretically + be part of the same charge envelope, but where noise level, neighborhood, hardware limitations + keep those peaks unassigned. + This interfaces has statistics about a charge envelope, but not the contributing peaks. + + + + + This is the monoisotopic mass that a particular peak belongs to. The value is + a calculated one, it is very likely that this cannot be seen at all in the spectrum. + But it is the reference point of all members of one charge envelope. + + Note that the value becomes 0 if the value is not isotopically resolved. See also and + + + + Keep in mind that depending on instrument calibration this value may not exactly match a calculated mass. + + + + + + This cross-correlation factor is the maximum of all cross-correlation values + over all averagines. An averagine is a statistical model of the isotope distribution + of the same molecule at a given charge. The observed peaks within the spectrum are fitted + to the model, the overlap is calculated by a cross-correlation that only takes the intensities + into account. + + The averagine model is strongly linked to peptide analysis. As an example, averagine + mass distribution for pesticides are totally different. + + + Cross-correlation factors vary in the range 0 to 1. 0 will be set if + is also 0. In this case, the fit was unsuccessful. The value is also 0 if + is set. + + + + + + This is the index to the top peak centroid in the centroid list coming with the same scan. + One can use this to get access to the mass of the so called top peak. + + + The top peak is that peak in a charge envelope that fulfills two requirements in this order: 1) never being considered + to be part of another charge envelope, and 2) having the highest abundance. + + + + + Return whether this charge envelope was created using isotopically resolved species. + + For isotopically resolved peaks the + is set. If not resolved, only an average mass is returned. + + + + + + When peaks are non-isotopically resolved (see ), + this value contains the average mass of all species in the envelope, otherwise it contains 0. + + + + + Defines a set of peaks which are part of a charge envelope + + + + + Gets or sets the collection of peaks in this charge envelopes + + + + + Gets or sets the index into the centroids for the top peak + + + + + Data about a single peak within a charge envelope. + + This grouping has a separate structure explained in . While presentation to CC consumers + may be different, the (at least Orbitrap-)generated data structure allocates one 16-bit value for each centroid. + + + + + + Returns true if the peak is a monoisotopic peak, false otherwise. + + + + + Returns true if the conditions below met, false otherwise. + + The top peak is that peak in a charge envelope that fulfills two requirements in this order: + 1) never being considered to be part of another charge envelope, and + 2) having the highest abundance. + + + + + + Returns true if the peak and its charge envelope have further isotope sibling (according to averagine model, etc). + + Note that a charge envelope must be considered non-isotopically resolved if at least one of its peaks has this flag "false", + and it can be considered an error if some peaks of an envelope have this flag set and other peaks not. + + + + + + Advanced Peak Detection on (FT) scans allow to better calculate charges of peaks. This is done by finding correlations + of peaks. If found, the assumption is considered valid that these peaks belong to the same species of a molecule, but + with different charges. + + This grouping has a separate structure explained in . While presentation to CC consumers + may be different, the (at least Orbitrap-)generated data structure allocates one 16-bit value for each centroid. + + + The 16-bit value contains three bits and an index number into an array of s which also come + with the same scan. + TODO + This is an interface. Implementation details ( such as "structure is 16 bit") are not meaningful here. + Describe instead "What information is presented to the consumer". + Using IPeakAnnotation you can ??? + + + + + + Returns null if information is not available (as with non-APD annotated Orbitrap spectra or unresolved peaks), + the index to the corresponding otherwise. Values out of range must not exist and should be checked + in advance. + + + + + Defines data which explains how charges are calculated. + ChargeEnvelopes contains summary information about each detected envelope. + CentroidAnnotations can be used to determine which charge envelope (if any) a peak belongs to. + + + + + Gets or sets a flag indicating whether there are charge envelopes. + + + + + Gets a value indicating whether this is valid "charge envelope" data, when decoded from a raw file. + Raw files have diagnostic sections of potentially unknown formats, so it is possible that, even though some data exists, it + cannot be decoded as charge envelopes. + + + + + Gets summary informtion the "charge envelopes". Purpose needs to be detailed? + + + + + Gets the "Centroid Annotations". Purpose needs to be detailed? + + + + + This class can be ued to decode instrument specific additional data saved with a scan. + + + + + Obtain the annotations for a specific scan + + The raw file + scan number + Annotations for this scan + + + + Read centroid data for a scan, with annotations (where available). + These annotations are set by the charge calculator in some instruments. + + The raw file + scan number + set if reference and exception peaks should be returned + The extended scan + + + + Read centroid data for a scan, with annotations (where available). + These annotations are set by the charge calculator in some instruments. + This version returns an internal type + + The raw file + scan number + set if reference and exception peaks should be returned + The extended scan + + + + An extension of centroids which includes: + Peak charge envelopes. + Annotations for each centroid + + + + + Created an extended centroid stream by making a copy of the base data + + + + + + Gets or sets the annotation about charge envelopes for each peak + + + + + Gets or sets a value indicating whether charge envelope data + was recorded for this scan + + + + + This class converts the byte array within the debug section of an Orbitrap scan to a list + of centroid annotations. Those annotations may point to charge envelopes, they also become + available. + + + + + Gets or sets a flag indicating whether there are charge envelopes. + + + + + Gets or sets a value indicating whether this is valid data. + It is valid, even if there is no data available. + It is invalid if data has been found, but cannot be decoded. + + + + + Get access to the charge envelopes. It is an empty array if no APD data has been calculated + or if unfolding the binary data shows errors. + + Returns the charge envelopes of the scan + + + + Get access to the centroid peak annotations. It is an empty array if no APD data has been calculated + or if unfolding the binary data shows errors. + + Returns the peak annotations of the scan + + + + This class defines the characteristics of an Orbitrap debug subsegment. + + The debug section according to unified_data_format.html has the format: + + + Type Meaning + + + Uint32 Or'd combination of all debug sub-section flags + some extra bits + SubSection defined below + SubSection further sub-sections, end defined by overall length of debug section + + + + + The debug sub-section according to unified_data_format.html has the format: + + + Type Meaning + + + Uint32 Content flags (0x100 = transients, 0x80000 for extensions, see below) + UInt32 Count of 32-bit word of this sub-section + UInt32[] Content depending on sub-section + + + + + The APD extensions and all other extensions have an UInt32 specifier as first 32-bit word what data follows. The specifiers are: + + + Value Meaning + + + 1 transients (effectively not in use) + 2 Annotations (array of 16-bit values for each centroid) + 3 ChargeEnvelopes (array of those) + + + + + The APD annotations section is an array or annotation elements, each consisting of 16-bit values, one for each centroid. For an + odd number of centroids, there exists a further 16-bit value of unknown content. Each annotation has a format described in + class description of . + + + The APD charge envelopes section is an array or charge envelopes. Each charge envelopes has a format described in + class description of . + + + + + + What type of sub-segment do we have? + + + + + According to unified_data_format.html, DBUGCON definition, the 9th LSB bit + is a send_transient section. + + + + + This value is reserved for extensions of the debug section. Sub-segments have a further indicator + describing the packet type. + + + + + This debug segment extension is an array of s. + + + + + This debug segment extension is an array of s. + + + + + This is the offset into the byte array to which this structure belongs. + + + + + Access to the size of data in section without headers in 32-bit words. + + + + + What kind of debug sub-segment is contained in this sub-segment? + + + + + This structure is one element of the annotations . The format is: + + + + Bit Meaning + + + 0-12 (LSB) Index into array of charge envelopes (0x1FFF=no envelope) + 13 Flag IsNonIsotopicallyResolved + 14 Flag IsClusterTop + 15 Flag IsMonoisotopic + + + + + + + + Implementation of + + + + + Implementation of + + + + + Implementation of + + + + + Not resolved + + + + + Implementation of + + + + + This structure is one element of the charge envelopes . The format is: + + + + Type Meaning + + + double Usually monoisotopic mass (with respect to instrument accuracy), can be average mass + float Cross-correlation of applied model (like averagine), can be 0 for various reasons + (U)Int32 Index into centroid list of peak being most abundant in this envelope + + + + + + + + Access to the stored mass, which is either the monoisotopic mass or rge average mass, depending on flags of the annotation section. + + + + + Cross-correlation in the range [0 - 1] of the fitting of the envelope. + + + + + Index into the array of centroids. The indexed centroid is the most abundant of all centroids belonging to this envelope. + + Orbitrap format never uses addresses more than 2**30 peaks, so no need for uint. + + + + + + This class implements . It bases on a stored Orbitrap data block. + + + + + Initialize a and assign the structure on which it bases. + + Data structure containing its core values + + + + Returns the monoisotopic mass for a model-fitted envelope and all species belonging to + this envelope with respect to the mass accuracy or 0 if resolved non-isotopically. + See . + + + + + Cross-correlation value of the model fitting in the range 0-1. Value remains 0 for non-isotopically + resolved peaks or unsuccessful fittings. + + + + + Index into centroid list to the most abundant centroid within this envelope. The value can be used + for grouping. + + + + + Returns true if at least one peak belonging to the charge envelope was non-isotopically resolved. + + Call the setter for each in order to detect non-isotopically resolved peaks. + + + + + + Returns true if at least one peak belonging to the charge envelope was non-isotopically resolved. + + Call the setter for each in order to detect non-isotopically resolved peaks. + + + + + + Returns 0 for a model-fitted envelope or the average mass if resolved non-isotopically. + See . + + + + + category of tokens with a scan filter + + + + + A mass range token. + + + + + A generic token (a string, such as "Full"). + + + + + A data format ("p" or "c"). + + + + + A polarity token ("+" or "-"). + + + + + An MS order token. + + + + + A parent mass. + + + + + A data dependent token "d". + + + + + Describes a scan, based on interpreting filter strings. + This class need not be serialized or cloned, as it is intended to be "read only" + All information can be kept as a string. Call FromString to initialize this. + This class is designed for use where filter information is + only available as a string (such as with implementations of IRawData) + Newer code (with IRawDataPlus) should use IScanFilter for details about filters. + + + + + Gets or sets the Polarity, Positive or Negative ions + + + + + Gets or sets a value indicating whether this scan depends on data in previous scans + + + + + Gets or sets a value indicating whether the scan is centroid format (else profile) + + + + + Gets the precursor masses and their means of activation + + + + + Gets or sets the MS or MS/MS order (for example 2 for MS/MS) + + + + + Gets or sets the Mass Ranges scanned + + + + + Gets or sets a value indicating whether this is an MSX scan type + + + + + Gets or sets the tolerance used when matching mass ranges. + It is initialized to 0.0005. + On parsing a string (using the FromString method), this is set based on the precision of the "low mass value" from the string. + For example, for a mass range of "34.256 - 41.365" the precision is determined to be 3 decimal places + and the tolerance is initialized to "0.0005" which will match items which have the same "3 decimals places". + It is assumed that all values in a parsed string have the same mass precision. + + + + + Create a scan definition from a filter strings. The string is formatted as a list of text tokens, separated by spaces. + Most tokens can be any text, apart from some specifically parsed items: + + + Positive + - Negative + d data dependant + c Centroid + p Profile + [Ranges] scanned ranges, for example [100.1-300.2,556.8-901.4] + + + + String to parse + + + Scan definition which matches the string + + + + + Sort the filters in alphabetic and numeric order of appropriate fields. + It is assumed that the supplied list has been automatically generated, and + therefore filters with the same parameters will have those in the same order + in the string. + + + Items to sort + + + A sorted list of the filters + + + + + Sort the filters in alphabetic and numeric order of appropriate fields. + Compact the filters, so that filters which match within tolerance are eliminated. + This is designed to take input from "Auto filter" or similar methods. + It is not designed to take a "user generated list". + It is assumed that the supplied list has been automatically generated, and + therefore filters with the same parameters will have those in the same order + in the string. + + + Items to sort + + + Tolerance for matching precursor masses. + If this is zero, then the tolerance is based on the number of precision digits entered in the text + + + A sorted list of the filters + + + + + Initializes a new instance of the class. + Default constructor + + + + + The list of sub strings (tokens) in the supplied filter text + + + The tokens. + + + + + Convert to a text string + + + String form of the filter + + + + + Strip a number. Removes a number from the start of the supplied string. + + + The string, which should start with a number. + + + The number of decimal places found in the string. + + + The stripped number. + + + + + Parse definitions. + + + The filters. + + + The parsed scan definitions + + + + + Convert definitions to strings. + + + The definitions. + + + The strings for each scan definition + + + + + Create a unique list of definitions, from a list which may have duplicates. + + + The definitions. + + + The precursor mass tolerance. + + + The list of unique definitions + + + + + Match a generic token + + + Token to look for + + + List of all tokens in the scan filter + + + True if the token is found + + + + + Read the activation code string. + + + The string being parsed. + + + The precursor to update. + + + + + Find ranges from token. + + + The item. + + + The parsed. + + + The mass ranges + + + + + Create from a string. + + + The string to create from. + + + + + Add the MS order. + + + The number of parent masses expected before this call. + + + The item. + + + The number of parent masses expected after parsing the MS order. + + + + + Add initial mass range. + + + The item to parse. + + + The mass ranges found so far. + + + True if more mass ranges are expected. + + + + + Add a single char item. + + + The item to add. + + + + + Add a mass range. + + + The item containing a range. + + + The mass ranges found so far. + + + True if more mass ranges are expected. + + + + + Add a parent mass. + + + The number of parent masses expected. + + + The item. + + + The next token. + + + True if more parent masses are expected. + + + + + Add a token. + + + The token. + + + The token class. + + + + + Test if a scan type "passes the filter", that is the scan + type is the same as, or is a superset of the scan definition. + + + The type of the scan which needs to be checked + + + true if the supplied scan has passed a filter against this scan definition + + + is out of range. + + + + + Test if a scan type "passes the filter", that is the scan + type is the same as, or is a superset of this scan definition. + The exact test is: All tokens in "this" must be present in "scanTypeFilter". + + + The type of the scan which needs to be checked + + + Mass tolerance used to match MS/MS precursors + + + true if the supplied scan has passed a filter against this scan definition + + + + + Test for a matching token. + Test that the token from "the tokens in this" is contained within "scan type to check" + + + The scan type to check (for being a superset of "this"). + + + The token to look for, in "scan type to check" + + + The tokens of the scan being tested. + + + The precursor mass tolerance. + + + True if there is a match + + + thrown if the token is not valid + + + + + Match precursors. + + + The scan type filter. + + + The precursor mass tolerance. + + + True if precursors match. + + + + + Get comparison tolerance. + + + The precursor mass tolerance. + + + The precursor. + + + The other precursor. + + + The comparison tolerance. + + + + + match the ranges. + + + The filter. + + + The tolerance. + + + True if ranges match. + + + + + Compares the current object with another object of the same type. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + An object to compare with this object. + + + + + Compares the current Ranges with another object's Ranges. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + An object to compare with this object. + + + + + Compares the current object's Precursors with another object's Precursors. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + An object to compare with this object. + + + + + The scan event builder. + This class permits a scan event to be built, by adding + MS/MS reactions, mass ranges etc. + It can be used as a helper to log MS data into a raw file. + This builder does not support parsing from a filter string, + or conversion to filter string format. + The "ToString" method provides basic .Net object formatting only. + The builder may be constructed as default or from IScanEvent or IScanFilter. + + + + + Initializes a new instance of the class. + + + Copies data from the supplied event. + + + + + Initializes a new instance of the class. + Note that this constructor makes a best case mapping between filter and event + Some items specific to filter (such as "MassPrecision") cannot be preserved. + Event only features (such as "IsCustom") are initialized to defaults. + applications using this feature should test use cases. + + + Copies data from the supplied filter. + + + + + copy base interface items. + + + The other. + + + + + Initializes a new instance of the class. + Most properties are initialized to "Any" (feature not used). + Numeric values have defaults (0), apart from ScanTypeIndex + which is set to "-1" for undefined. + + + + + Gets or sets the accurate mass setting. + + + + + Gets or sets Compensation Voltage Option setting. + Composition voltage is exclusive with source fragmentation, + so only one may be active. + + + + + Gets or sets Compensation Voltage type setting. + Composition voltage is exclusive with source fragmentation, + so only one may be active. + When set to SingleValue a value must be added using AddSourceFragmentationInfo. + When set to Ramp two values must be added using AddSourceFragmentationInfo. + When set to SIM, there must be one value added per (scanned) mass range. + + See for possible values + + + + Gets or sets the corona scan setting. + + + + + Gets or sets the dependent scan setting. + A scan is "dependent" if the scanning method is based + on analysis of data from a previous scan. + + + + + Gets or sets the detector scan setting. + + See for possible values + + + + Gets or sets the detector value. + + Floating point detector value + + + + Gets or sets the electron capture dissociation setting. + + + + + Gets or sets the electron capture dissociation value. + + Floating point electron capture dissociation value + + + + Gets or sets the electron transfer dissociation setting. + + + + + Gets or sets the electron transfer dissociation value. + + Floating point electron transfer dissociation value + + + + Gets or sets the enhanced scan setting. + + + + + Gets or sets the field free region setting. + + See for possible values + + + + Gets or sets the higher energy CID setting. + + + + + Gets or sets the higher energy CID value. + + Floating point higher energy CID value + + + + Gets or sets the ionization mode scan setting. + + See for possible values + + + + Gets or sets a value indicating whether this is a custom event. + A custom event implies that any scan derived from this event could be different. + The scan type must be inspected to determine the scanning mode, and not the event. + + + + + Gets a value indicating whether this event is valid. + + + + + Gets the number expected SID values. + + + The number of values + + + + + Gets the number expected CV values. + + + The number of values + + + + + Gets or sets the lock scan setting. + + + + + Gets or sets the mass analyzer scan setting. + + See for possible values + + + + Gets the mass calibrator count. + + + + + Gets the number of (precursor) masses + + The size of mass array + + + + Gets the number of mass ranges for final scan + + The size of mass range array + + + + Gets or sets the scan MS/MS power setting. + + See for possible values + + + + Gets or sets the Multi notch (Synchronous Precursor Selection) type + + + + + Gets or sets the multi-photon dissociation setting. + + + + + Gets or sets the multi-photon dissociation value. + + Floating point multi-photon dissociation value + + + + Gets or sets the Multiplex type + + + + + Gets or sets MultiStateActivation type setting. + + + + + Gets or sets the event Name. + + + + + Gets or sets the parameter a. + + + + + Gets or sets the parameter b. + + + + + Gets or sets the parameter f. + + + + + Gets or sets the parameter r. + + + + + Gets or sets the parameter v. + + + + + Gets or sets the photo ionization setting. + + + + + Gets or sets the polarity of the scan. + + See for possible values + + + + Gets or sets the pulsed dissociation setting. + + + + + Gets or sets the pulsed dissociation value. + + Floating point pulsed dissociation value + + + + Gets or sets the scan data format (profile or centroid). + + + + + Gets or sets the scan type setting. + + See for possible values + + + + Gets or sets encoded form of segment and scan event number. + + HIWORD == segment, LOWORD == scan type + + + + Gets or sets the sector scan setting. Applies to 2 sector (Magnetic, electrostatic) Mass spectrometers, or hybrids. + + See for possible values + + + + Gets or sets source fragmentation scan setting. + + + + + Gets the total amount of source fragmentation information. + This is all data for SID and CV, and is internally needed to + support IScanEvent. + To separately count the number of SID vales and CV values, use + SourceFragmentationValueCount and CompensationVoltageValueCount + + The size of source fragmentation info array + + + + Gets the number of Source Fragmentation values. + + The size of source fragmentation values array + + + + Gets the number of Compensation Voltage Fragmentation values. + + The size of Compensation Voltage values array + + + + Gets the source fragmentation mass range count. + + + + + Gets or sets the source fragmentation type. + source fragmentation is exclusive with Composition voltage, + so only one may be active. + When set to SingleValue a value must be added using AddSourceFragmentationInfo. + When set to Ramp two values must be added using AddSourceFragmentationInfo. + When set to SIM, there must be one value added per (scanned) mass range. + + See for possible values + + + + Gets or sets supplemental activation type setting. + + + + + Gets or sets the turbo scan setting. + + + + + Gets or sets the ultra scan setting. + + + + + Gets or sets the wide band scan setting. + + + + + add a mass calibrator. + + + The calibrator to add. + + + + + Adds a set of mass calibrators. + + + The calibrators to add. + + + + + Adds a mass range. + + + The mass range. + + + + + Adds a set of mass ranges. + + + The mass ranges to add. + + + + + Adds an MS stage. + For example: for an MS3 scan, 2 MS stages should be added, + with the 2 required precursor masses. + Each stage may have one or more reactions. + Neutral Loss, Neutral Gain and Parent have 1 stage. + For multiplex mode, each multiplexed precursor should be added as + a separate stage. + + + The stage. + + + + + Gets an MS stage. + For example: for an MS3 scan, there will be 2 MS stages + with the 2 required precursor masses. + Each stage may have one or more reactions. + Neutral Loss, Neutral Gain and Parent have 1 stage. + + + The index. + + + The stage at the given index + + + + + Gets the MS stage count. + + + + + Add a source fragmentation value. + This is for "source fragmentation (sid) + and is only used when "SourceFragmentation" has + been enabled. Add one value for "Single value" mode or two values + for "Ramp" mode of the enabled feature. + For SIM mode, add one value per target mass range. + + + The value. + + + + + Add a compensation voltage value. This is for "compensation voltage (cv)" + and used only when "CompensationVoltage" has + been enabled. Add one value for "Single value" mode or two values + for "Ramp" mode of the enabled feature. + For SIM mode, add one value per target mass range. + + + The value. + + + + + Adds a source fragmentation mass range. + + + The mass range to add. + + + + + Clears the mass calibrators list. + + + + + clear the list of mass ranges. + + + + + Resets the list of MS/MS stages. + This may be needed if an event is cloned from another event, + but the new object needs different MS/MS stages. + + + + + Clears the source fragmentation values. + + + + + Clears the Compensation Voltage values. + + + + + Clears the source fragmentation mass ranges list. + + + + + Retrieves activation type at 0-based index. + + + Use to get the count of activations. + + + Index of activation to be retrieved + + + activation of MS step; + See for possible values + + + + + Retrieves precursor(collision) energy value for MS step at 0-based index. + + + Use to get the count of energies. + + + Index of precursor(collision) energy to be retrieved + + + precursor(collision) energy of MS step + + + + + Retrieves precursor(collision) energy validation flag at 0-based index. + + + Use to get the count of precursor(collision) energy validations. + + + Index of precursor(collision) energy validation to be retrieved + + + precursor(collision) energy validation of MS step; + See for possible values + + + + + Gets the first precursor mass. + This is only valid data where "GetPrecursorRangeValidity" returns true for the same index. + + + The index. + + + The first mass + + + + + Retrieves multiple activations flag at 0-based index of masses. + + + Use to get the count of masses. + + + Index of flag to be retrieved + + + true if mass at given index has multiple activations; false otherwise + + + + + Gets the isolation width. + + + The index. + + + The isolation width + + + + + Gets the isolation width offset. + + + The index. + + + The isolation width offset + + + + + Gets the last precursor mass. + This is only valid data where "GetPrecursorRangeValidity" returns true for the same index. + + + The index. + + + The last mass + + + + + Retrieves mass value for MS step at 0-based index. + + + Use to get the count of mass values. + + + Index of mass value to be retrieved + + + Mass value of MS step + + Will be thrown when index >= MassCount + + + + Gets the mass calibrator, at a given index. + + + The index, which should be from 0 to MassCalibratorCount -1 + + + The mass calibrator. + + Thrown when requesting calibrator above count + + + + Retrieves mass range for final scan at 0-based index. + + + Use to get the count of mass ranges. + + + Index of mass range to be retrieved + + + Mass range for final scan at 0-based index + + Will be thrown when index >= MassRangeCount + + + + Determine if a precursor range is valid. + + + The index. + + + true if valid + + + + + Gets the reaction data for the mass at 0 based index. + Descries how a particular MS/MS precursor mass is fragmented. + Equivalent to calling GetMass, GetEnergy, GetPrecursorRangeValidity, GetFirstPrecursorMass + GetLastPrecursorMass, GetIsolationWidth, GetIsolationWidthOffset, GetEnergyValid + GetActivation, GetIsMultipleActivation. + Depending on the implementation of the interface, this call may be more efficient + than calling several of the methods listed. + + index of reaction + reaction details + + + + Retrieves a source fragmentation value at 0-based index. + + + Index of source fragmentation value to be retrieved + + + Source Fragmentation value at 0-based index + + Will be thrown when index >= SourceFragmentationValueCount + + + + Retrieves a compensation voltage value at 0-based index. + + + Index of compensation voltage value to be retrieved + + + Compensation Voltage value at 0-based index + + Will be thrown when index >= CompensationVoltageValueCount + + + + Retrieves a source fragmentation info value at 0-based index. + + + Use to get the count of source + fragmentation info values. + + + Index of source fragmentation info to be retrieved + + + Source Fragmentation info value at 0-based index + + Will be thrown when index >= SourceFragmentationInfoCount + + + + Get the source fragmentation mass range, at a given index. + + + The index. + + + The mass range. + + + + + copy mass calibrators from another event. + + + The other event. + + + + + copy MS/MS stages from another event. + + + The event from which data is copied from. + + + + + Adds a set of MS stages. + + + The stages. + + + + + copy scanned mass ranges from another event. + + + The other event. + + + + + copy source fragmentation info from another event. + + + The other event. + + + + + copy source fragmentation mass ranges from another event. + + + The other event. + + + + + copy various tables from another event. + + + The other event. + + + + + copy various tables from another event base. + + + The other event. + + + + + This class adds extended features to the Scan Event interface. + It acts as a "helper class" rather than "extension methods" + so that it can hold certain state information. + A common use case is: + Scan event information is read from a raw file. + Multiple uses are made of this + (for example, testing if this scan should participate in 1000s chromatograms). + This class can organize information from the scan event, + such that "filter comparisons" or other work with events and filters + are more efficient. There is a very small overhead in constructing this object, + which still keeps the original interface reference in its construction factory. + The class is designed for thread safe testing. + TestScanAgainstFilter or TestScanAgainstNames may be called on multiple threads. + + + + + The match tolerance for comparing two energy values + + + + + The instrument mass resolution (used in determining if mass ranges match up or not) + + + + + Gets the scan event which was used to construct this object. + If the object was created from IScanFilter, this will be null + + + + + Test if two tri-states are different. + + + The state 1. + + + The state 2. + + + True if "filter failed to match" + + + + + Initializes a new instance of the class. + + + The scan event. + + Event code from scan index, -1 (default) if not known + + + + Thread safe initialize + + + + + Gets or sets the reactions. + + + + + create reactions table + + + + + The scan event helper factory creates a ScanEventHelper from a scanEvent interface. + + + The scan event. + + event code (form scan index). -1 for "not known" + + The . + + + + + This scan event helper factory creates a ScanEventHelper from an IScanFilter interface. + This constructor permits an application to test if a scan filter contains another filter. + The contructed object from this method is considered a "scan" and another scan filter can be tested against it, + using "TestScan". Example: Crreate this from "+ d". You can test that "+" or "d" filters match this + (return true from TestScanAgainstFilter). + + + The scan filter. + + + The . + + + + + Test if activation is set for any reaction. + + + The activation type. + + + The . + + + + + Test scan against component or compound names. + + + The names. + + + True if the scan should be included + + + + + Test that this scan (event) passes the supplied scan filter. + + + The filter Helper. + + + The . + + + + + test a scan against a filter. + + + The filter helper. + + + true, if the scan passes the filter + + Thrown on invalid filter rule + + + + + Test electron capture dissociation. + + + The filter. + + + The . + + + + + Test multi photon dissociation. + + + The filter. + + + The . + + + + + Test against compensation voltage. + + + The filter. + + + The . + + + + + Test against source fragmentation. + + + The filter. + + + The . + + + + + Test scan against meta filter. + + + The filter. + + + The . + + + + + Check the parent masses. + + + The filter. + + + The filter helper. + + + The . + + + + + Get the compensation voltage value. + + + The index. + + The number of source fragmentation values, + (which are before CV values in the table) + + The . + + + + + Test of the multiplex precursor conditions match. + + + The scan filter. + + + The filter helper. + + + True if matched + + + + + Get the number of compensation voltage values. + + + The . + + + + + Test if the precursor conditions match. + + + The scan filter. + + The filter helper (optimized filter data) + + The precursor mass. + + + The . + + + + + This class constructs a table of "segments and events". + Because this implements IScanEvents this class + can then be used to record the "method scan events" into a raw file. + The information can be organized as a set of segments, + with a set of events per segment. + The segments were designed to represent "time slices of a chromatogram" + though no time bounds are required by this object. + Many instruments just create a flat table (1 segment with all the events). + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + Copy from another sets of events + + + The other events (to copy). + + + + + Add a segment. + + + The events for this segment. + + + + + Gets the number segments. + + + + + Gets the number of events in a specific segment (0 based) + + The segment number + The number of events in this segment + + + + Get an event, indexed by the segment and event numbers (zero based). + + + The segment. + + + The event number. + + + The event. + + + + + Get an event, using indexed event number (zero based). + This gets events from all segments in order, + use "ScanEvents" to get the total count of events. + + + The event Number. + + + The event. + + + + + Gets the total number of scan events, in all segments + + + + + The scan filter helper. + Analyses a filter to save time on filter to scan comparisons. + This is done by making a list of rules to apply. + Uses properties, which can be inlined for high performance. + Does not implement any interfaces, to avoid slowdown of virtual calls. + (properties may be use billions of times for filter against scan comparisons). + Used for high performance (parallel) chromatogram generation. + + + + + The no meta filter. + + + + + The instrument mass resolution (used in determining if mass ranges match up or not) + + + + + Gets the filter. + + + + + Gets the rules, which have been found in the supplied filter. + For example, a filter text of "ms !d" includes 2 rules + 1: The MS order must be one. + 2: The scan must not be dependent + + + + + Gets the MS order. + + + + + Gets a value indicating whether "multiplex" is in the "On" state + + + + + Gets a value indicating whether the MS order is any value other than "MS". + + + + + Gets the mass resolution. + + + + + Gets the multi activation corrected mass count. + + + + + Gets a value indicating whether the filter has multiple reactions. + + + + + Gets a value indicating whether the filter's "dependent" flag is in the "on" tristate. + + + + + Gets a value indicating whether the filter has any masses. + + + + + Gets a value indicating whether this object can keep + track of "already tested" scan events. + To enable it: Call InitializeAvailableEvents, + with the result of "IRawDataPlus.ScanEvents" + + + + + Determines if an event was tested, and the test results. + + + + + This has never been tested + + + + + This event has been tested, but failed + + + + + Event tested, and passed the filter + + + + + Sets the table of "known scan events" + This can be used to optimize filtering + + Planned scan events. This interface may be obtained from IRawDataPlus (ScanEvents property) + + + + Initializes a new instance of the class. + + + The filter. + + In this mode a tolerance matching for precursors is "accurate" (based on the precision value), + except for data dependent scans. + For all "non accurate" precursor selections, and for all data dependent scans a default (wide) tolerance is used. + number of decimal places for masses in filter + + + + Gets a value indicating whether the filter resolution was set to "Accurate precursor value". + Else it will be "DefaultFilterMassResolution" + + + + + Gets the precursor tolerance (half of MassResolution) + + + + + Record the match result for a scan type segment/event) + + + Result for this segment and event number + + + Segment number for this scan event + + + Event number for this scan event + + + + + Determine if this scan type has already been tested, and find the result + + Segment number for this scan event + Event number for this scan event + state of the scan type test + + + + This class holds information needed to select a scan, using either a filer or a compound name. + Static methods are available to construct common versions. + + + + + Gets or sets a value indicating whether the "scan filter" will be used as a selection mechanism. + ScanFilter must never be null when this returns true. + + + + + Gets or sets the scan filter. + If UseFilter is false, or this is null, it is not used as a selection mechanism. + + + + + Gets or sets the name. + This is the component or compound name list to filter against. + If this is null or empty, it is not used as a selection mechanism. + + + + + Create a selector which selects by filter string, based on a specific data source + + + The filter. + + + The . + + + + + Create a selector which selects by filter string, based on a specific compound name + + + The compound name. + + + The . + + + + + Create a selector which selects all scans (no filtering) + + + The . + + + + + Summary information about a scan. + + + + + Initializes a new instance of the class. + + + The source to copy the values from. + + If set, make a "deep copy" which will evaluate any lazy items and ensure no internal source references + + source is null. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the indication of data format used by this scan. + See also SpectrumPacketType for decoding to an enum. + + + + + Gets the packet format used in this scan. (read only). + Value can be set using the "PacketType" property. + + + + + Gets or sets the highest mass in scan + + + + + Gets or sets the lowest mass in scan + + + + + Gets or sets the longest wavelength in PDA scan + + + + + Gets or sets the shortest wavelength in PDA scan + + + + + Gets or sets the intensity of highest peak in scan + + + + + Gets or sets the mass of largest peak in scan + + + + + Gets or sets the total Ion Current for scan + + + + + Gets or sets the time at start of scan (minutes) + + + + + Gets or sets the Number of point in scan + + + + + Gets or sets the number of + channels acquired in this scan, if this is UV or analog data, + + + + + Gets or sets the number of the scan + + + + + Gets or sets the event (scan type) number within segment + + + + + Gets or sets the time segment number for this event + + + + + Gets or sets a value indicating whether this scan contains centroid data (else profile) + + + + + Gets or sets the frequency. + + + + + Gets or sets a value indicating whether is uniform time. + + + + + Gets or sets the absorbance unit scale. + + + + + Gets or sets the wave length step. + + + + + Gets or sets a lazy mechanism returning a string defining the scan type. + + + + + Gets or sets a String defining the scan type, for filtering + + + + + Gets or sets the cycle number. + + Cycle number used to associate events within a scan event cycle. + For example, on the first cycle of scan events, all the events + would set this to '1'. On the second cycle, all the events would + set this to '2'. This field must be set by devices if supporting + compound names for filtering. However, it may be set in all + acquisitions to help processing algorithms. + + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + Copy all fields + + + Copy into this object + + If set, make a "deep copy" which will evaluate any lazy items and ensure no internal source references + + + + Produce a deep copy of an object. + Must not contain any references into the original. + + + A deep clone of all objects in this + + + + + Defines a scan with mass range segments. + + + + + Initializes a new instance of the class. + Default constructor; sets the size of data arrays to 0. + + + + + Create a scan from simple X,Y data. This method creates a scan with one segment. + For efficiency, the references to the mass and intensity data are maintained within the + constructed object. If this is not desired, clone the mass and intensity + arrays on calling this constructor. + Masses are assumed to be in ascending order. + + Mass data for the scan + Intensity data for the scan + A scan with one segment + masses is null. + intensities is null. + Intensities must have same length as masses + + + + Sum all masses within the ranges + + List of ranges to sum + If the ranges have equal mass values, + then tolerance is subtracted from low and added to high to search for matching masses + Sum of intensities in all ranges + + + + Sum all masses within the ranges + + List of ranges to sum + If the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + Sum of intensities in all ranges + + + + Return the largest intensity (base value) in the ranges supplies + + Ranges of positions + The largest intensity in all ranges + If the ranges have equal mass values, + then tolerance is subtracted from low and added to high to search for matching masses + Sum of intensities in all ranges + + + + Return the largest intensity (base value) in the ranges supplied + + Ranges of positions (masses, wavelengths) + If the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + Largest intensity in all ranges + + + + Get the largest value in a range + + + The fixed range. + + + The base value so far. + + + The largest of, the passed in base value and the base value in the range. + + + + + Test if this is a valid object (all streams are not null. All data has same length) + + + True if valid. + + + + + Test if this is a valid object (all streams are not null. All data has same length) + + is thrown if this instance does not contain valid data. + + + + Gets the Mass ranges for each scan segment + + + + + Gets or sets the Mass ranges for each scan segment + + + + + Gets or sets The number of segments + + + + + Gets or sets the number of data points in each segment + + + + + Gets SegmentLengths. + + + + + Gets or sets the positions (mass or wavelength) for each point in the scan + + + + + Gets or sets the Intensity (or absorbance) values for each point in the scan + + + + + Gets or sets flags, such as "saturated" for each peak. + + + + + Gets or sets the The size of the position and intensity arrays. + The number of peaks in the scan (total for all segments) + + + + + Gets or sets the he number of this scan. + + + + + Sum all intensities of peaks within the ranges + + + The sum so far. + + + The fixed Range. + + + Sum of intensities in all ranges + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + Make a deep clone of this object. + + An object containing all data in this, and no shared references + + + + Find the index of the first packet in a segment + + segment number (starting from 0) + the index of the first packet in a segment + + + + Change the defined length of the scan (for internal use only) + + new scan size + + + + Convert to simple scan. + This permits calling code to free up references to unused parts of the scan data. + + + The . + + + + + Return only data within the supplied ranges. + This internal method can assume that the ranges are in mass order, and do not overlap. + + ranges of data to include + if set, then this scan is profile data. + Zeros are added to terminate sliced profiles + If this is set: + There must be a valid centroid stream. + Profile points near a centroid must be included, even if outside of the range. + + Centroid data, which may be used to extend profiles so that + points which contribute to the centroid are shown + A new scan, with data in the desired ranges only + + + + Sequence File Writer Extension Methods + + + + + Retrieves the user label at given 0-based label index. + + The sequence file access interface object. + Index of user label to be retrieved + String containing the user label at given index + + + + Provides a means of opening sequences. + + + + + Creates the sequence file reader. + + Sequence file reader factory object + + + + Read a sequence. + The file contents are returned. The file is not kept open. + + Name of file to read + Access to the contents of the file. + + + + This static factory class provides methods to create and open existing sequence file. + + + + + Creates the sequence file writer. + + Name of the file. + True open an existing sequence file with read/write privilege; false to create a new unique sequence file + Sequence file writer object + + + + Creates the UV type of device factory. + + UV type of device factory object + + + + Checks the file exists. + + Name of the in-acquisition raw file. + Device writer can't attach the raw file that doesn't exist. + + + + A simple mass and intensity scan. + Represents a scan as two simple array objects + This format only creates two objects, + and uses much less memory that "array of class with mass and intensity". + + + + + Gets or sets the masses. + + + + + Gets or sets the intensities. + + + + + Basic implementation of a simple scan header, with scan number and time. + + + + + Gets or sets the retention time. + + + + + Gets or sets the scan number. + + + + + A collection of scans, designed to slide forwards through a raw file. + + + + + Initializes a new instance of the class. + + + The spectrum reader. + + Optional: Reader for batch of scans. + If not supplied, spectrumReader is used. + Table of scan number and RT of scans in raw file + + + + return data within scan range. + + + The start scan. + + + The end scan. + + + A ref copy of the scans in range. + + + + + Load all the scans in a range. + + + The start scan index. + + + The end scan index. + + + + + A simple scan with header. + + + + + Gets or sets the scan. + + + + + Gets or sets the header. + + + + + Settings for smoothing algorithm, useful for chromatograms etc. + + + + + Initializes a new instance of the class. + default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Gets or sets the number of points for smoothing the chromatogram + + + + + Gets or sets the number of times to repeat smoothing + + + + + Gets or sets the envelope shape used by smoothing algorithm + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + class to represent spectrum data + + + + + Gets or sets Intensity of spectral peak + + + + + Gets or sets Mass of spectral peak + + + + + Test that two spec points are equal + + first point to compare + second point to compare + true if they have the same contents + + + + Test that two spec points are not equal + + first point to compare + second point to compare + true if they do not have the same contents + + + + Test two points for equality + + + point to compare + + + true if they are equal + + + + + Object.GetHashCode + + Object.GetHashCode + + + + Stores the Status log for an instrument + + + + + Gets or sets the header information for the status log + + + + + Gets or sets the array of values for the status logs for the current instrument + + + + + Stores one record of status log values + + + + + Gets or sets the RetentionTime for this log entry + + + + + Gets or sets the array of status log values + + + + + Results of running system suitability tests + + + + + Gets or sets the resolution of the peak (from other peaks) + + + + + Gets or sets a value indicating whether the resolution test passed + + + + + Gets or sets a value indicating whether the symmetry test passed + + + + + Gets or sets a value indicating whether the peak width test passed + + + + + Gets or sets a value indicating whether the peak tailing test passed + + + + + Gets or sets a value indicating whether the column overload test passed + + + + + Gets or sets a value indicating whether the signal to noise test passed + + + + + Gets or sets a value indicating whether the saturation test passed + + + + + Gets or sets a value indicating whether the concave peak test passed + + + + + Gets or sets a value indicating whether the baseline clipping test passed + + + + + Gets or sets a value indicating whether the following values have been calculated: + PassedResolutionChecks, MeasuredResolution + + + + + Gets or sets a value indicating whether the following values have been calculated: + PassedSymmetryChecks + + + + + Gets or sets a value indicating whether the following values have been calculated: + PassedPeakWidth, PassedTailing, PassedColumnOverload, PassedNoise, PassedSaturated, + PassedConcave, PassedBaselineClipped + + + + + Gets a value which determines if the ResolutionCheck was performed, and the results of the test, when run. + + + + + Gets a value which determines if the SymmetryCheck was performed, and the results of the test, when run. + + + + + Gets a value which determines if the PeakWidth test was performed, and the results of the test, when run. + + + + + Gets a value which determines if the Tailing test was performed, and the results of the test, when run. + + + + + Gets a value which determines if the ColumnOverload test was performed, and the results of the test, when run. + + + + + Gets a value which determines if the Noise test was performed, and the results of the test, when run. + + + + + Gets a value which determines if the Saturated test was performed, and the results of the test, when run. + + + + + Gets a value which determines if the Concave test was performed, and the results of the test, when run. + + + + + Gets a value which determines if the BaselineClipped test was performed, and the results of the test, when run. + + + + + Initializes a new instance of the class. + Default constructor + + + + + Initializes a new instance of the class. + Copy constructor + + + The access. + + + + + Return tri-state test status, based on if a test has been run, and the test results + + + true if a test has been run + + + The results of the test (if run) ignored otherwise + + + A status of not tested, when the test is not run, or the pass/fail result when the test has been run + + + + + Make a copy of the system suitability results + + + The . + + + + + Parameters for the system suitability algorithm + + + + + Gets or sets a value indicating whether resolution checks will be performed + + + + + Gets or sets a threshold value which determines if a peak's resolution or ok or not. + The default value is 90%. + Resolution is defined as the ratio: + 100 × V/P + where: + V = depth of the Valley: the difference in intensity from the chromatogram at the apex of the target peak + to the lowest point in the valley between the target peak and a neighboring peak + P = Peak height: the height of the target peak, above the peak's baseline + + + + + Gets or sets a value indicating whether peak symmetry checks are to be performed. + Symmetry is determined at a specified peak height + and is a measure of how even-sided a peak is + about a perpendicular dropped from its apex. + + + + + Gets or sets the Peak Height at which symmetry is measured. + The default value is 50%. You can enter any value within the range 0% to 100%. + + + + + Gets or sets the Symmetry Threshold + The SOP defined Symmetry Threshold is > 70% at 50% peak height. + This represents a realistic practical tolerance for capillary GC data. + You can enter any value within the range 0% to 100%. + The default value is 80% at 50% peak height. + The algorithm determines symmetry at the SymmetryPeakHeight + For the purposes of the test, a peak is considered symmetrical if: + (Lesser of L and R) × 100 / (Greater of L and R) > Symmetry Threshold % + where: + L = the distance from the left side of the peak to + the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to + the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets or sets a value indicating whether peak classification checks are to be run + + + + + Gets or sets the Peak Height at which suitability tests the width of target peaks. + You can enter any value within the range 0% to 100%. The default value is 50%. + + + + + Gets or sets the minimum peak width, at the specified peak height, for the peak width suitability test. + The default value is 1.8. You can set any value in the range 0 to 30 seconds. + + + + + Gets or sets the maximum peak width, at the specified peak height, for the peak width suitability test. + The default value is 3.6. You can set any value in the range 0 to 30 seconds. + + + + + Gets or sets the Peak Height at which the algorithm measures the tailing of target peaks. + The default SOP value is 10%. You can enter any value within the range 0% to 100%. + + + + + Gets or sets the failure threshold for the tailing suitability test. + The default SOP defined failure threshold is %lt 2 at 10% peak height. The valid range is 1 to 50. + Tailing is calculated at the value defined in . + For the purposes of the test, a peak is considered to be excessively tailed if: + + R / L > Failure Threshold % + where: + L = the distance from the left side of the peak to the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets or sets the Peak Height at which the algorithm measures column overloading. + The default SOP value is 50%. You can enter any value within the range 0% to 100%. + + + + + Gets or sets the failure threshold value for the column overload suitability test. + The default SOP defined threshold is 1.5 at 50% peak height. The valid range is 1 to 20. + A peak is considered to be overloaded if: + + L / R > Failure Threshold % + where: + L = the distance from the left side of the peak to the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets or sets the Number of Peak Widths for Noise Detection testing parameter for + the baseline clipping system suitability test. + The default value is 1.0 and the permitted range is 0.1 to 10. + A peak is considered to be baseline clipped if there is no signal + (zero intensity) on either side of the peak within the specified + number of peak widths. The range is truncated to the quantitation window + if the specified number of peak widths extends beyond the window’s edge. + + + + + Gets or sets the threshold for system suitability testing + of the signal-to-noise ratio. The default value is 20 and the + permitted range is 1 to 500. The algorithm calculates the signal-to-noise ratio + within the quantitation window using only baseline signal. + Any extraneous, minor, detected peaks are excluded from the calculation. + + + + + Initializes a new instance of the class. + default constructor + + + + + Initializes a new instance of the class. + Construct instance from interface, by cloning all settings + + + Interface to clone + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + 2 + + + + Class to create accessors for raw a raw file, for multiple threads. + + + + + Initializes a new instance of the class. + To use this: Construct an interface "IRawDataPlus". + Construct this object from the IRawDataPlus. + Call to make a separate object for each thread to use. + After all threads are completed, + and the raw file is no longer needed, dispose of the original IRawDataPlus. + + + The file. + + + + + Initializes a new instance of the class. + To use this: Construct an interface "IRawDataPlus". + Construct this object from the IRawDataPlus. + Call to make a separate object for each thread to use. + After all threads are completed, + and the raw file is no longer needed, dispose of the original IRawDataPlus. + + + The file. + + + + + Create an accessor for one thread to use. Call this method once for each thread you plan to create. + + + An interface to read data, which should be used by a single thread. + + + + + Select instrument. + This private method keeps track of the selected instrument within the raw data. + When a thread is using a different instrument than the last thread's call, + then the IO library selected instrument is changed. + If all threads use one instrument (such as MS), then this will + not result in multiple calls to the IO library. + + + The instrument type. + + + The instrument index. + + + + + Include reference and exception data. + Remembers the state of this from previous calls, and + only sets this to the IO library when changed from the last call. + + + The include reference and exception data. + + + + + Request the object to keep a cache of the listed item. + Setting the caching to "zero" disables further caching. + + + Item to cache + + + Limit of number of items to cache + + + (optional, default false) if set True, all values returned from the cache are unique (cloned) references. + By default, the cache just keeps references to the objects + + + + + Clear items in the cache + + + item type to clear + + + + + Count the number currently in the cache + + + Item type to count + + + The number of items in this cache + + + + + The raw file thread accessor. + This class is a private thread safe wrapper. + It works by using the "parent" object as a lock object for all threads. + In addition, the parent manages all state of the underlying wrapped interface. + This object also wraps enumerators and iterators fully, to protect against detector changes + from other threads. + + + + + Initializes a new instance of the class. + + + The thread safe raw file access. + + + + + Capture that the parent object's selected device + + + + + Ensure that the parent object has the expected device selected + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + + Get a scan number from a retention time + + + Retention time (minutes) + + + Scan number in the data stream for this time + + + + + Gets the current instrument's run header + + + + + Gets the number of instrument methods in this file. + + + + + Gets the name of the computer, used to create this file. + + + + + Gets additional (binary) data from a scan. + The format of this data is custom (per instrument) and can be decoded into + objects by a specific decoder for the detector type. + + Scan whose data is needed + + + + + + + Get the scan statistics for a scan. + + + scan number + + + Statistics for scan + + + + + Gets the segmented scan from scan number. It will also fill object, if any supplied. + + + The scan number. + + + statistics for the scan + + + The segmented scan + + + + + Test if a scan is centroid format + + + Number of the scan + + + True if the scan is centroid format + + + + + Gets the filter strings for this file. + + A string for each auto filter from the raw file + + + + Gets an instrument method. + + + The index. + + + A text version of the method + + + + + Gets the definition of the selected instrument. + + data about the selected instrument, for example the instrument name + + + + Get a string representing the scan type (for filtering). + For more complete tests on filters, the returned string + can be converted to a ScanDefinition, + by using the static constructor ScanDefinition.FromString(string scanType). + If the RT is known, and not the scan number, use ScanNumberFromRetentionTime + to convert the time to a scan number. + Example: + ScanDefinition definition=ScanDefinition.FromString(GetScanType(ScanNumberFromRetentionTime(time)); + + + Scan number whose type is needed + + + Type of scan, in string format. + To compare individual filter fields, the ScanDefinition class can be used. + + ScanDefinition + + + + Get the retention time (minutes) from a scan number + + + Scan number + + + Retention time (start time) of scan + + + + + Get the centroids saved with a profile scan + + + Scan number + + + determines if peaks flagged as ref should be returned + + + centroid stream for specified . + + + + + Gets the status log for retention time. + + + The retention time. + + + object containing status log information. + + + + + returns the number of entries n the current instrument's status log + + + The . + + + + + Returns the header information for the current instrument's status log + + + The headers (list of prefixes for the strings). + + + + + Returns the Status log values for the current instrument + + + Index into table of status logs + + + true if they should be formatted (recommended) + + + The status log values. + + + + + Gets the tune data. + + + tune data index + + + object containing tune data for specified . + + + + + return the number of tune data entries + + + The . + + + + + Return the header information for the current instrument's tune data + + + The headers/>. + + + + + return tune data values for the specified index + + + index into tune tables + + + true if formatting should be done + + + The tune data>. + + + + + Gets the path to original data. + + + + + Gets the name of acquired file (excluding path). + + + + + Choose the data stream from the data source. + + + Type of instrument + + + Stream number + + + + + Gets the instrument as last set by a call to . + If this has never been set, returns null. + + + + + Gets the date when this data was created. + + + + + Gets the name of person creating data. + + + + + Gets various details about the sample (such as comments). + + + + + Gets the number of instruments (data streams) in this file. + + + + + Gets a value indicating whether the last file operation caused an error. + + + + + Gets a value indicating whether the file is being acquired (not complete). + + + + + get the number of instruments (data streams) of a certain classification. + For example: the number of UV devices which logged data into this file. + + + The device type to count + + + The number of devices of this type + + + + + Create a chromatogram from the data stream + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + Chromatogram points + + + + + Create a chromatogram from the data stream + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + For mass range or base peak chromatograms, + if the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + + + Chromatogram points + + + + + The the device type for an instrument data stream + + + The data stream + + + The device at type the index + + + + + Gets names of all instruments stored in the raw file's copy of the instrument method file. + + + The instrument names. + + + + + Gets a value indicating whether the data file was successfully opened + + + + + Gets or sets a value indicating whether reference and exception peaks should be returned (by default they are not) + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + Gets the trailer extra header information. This is common across all scan numbers + + + The headers. + + + + + Gets the Trailer Extra values for the specified scan number. + If = true, then the values will be formatted as per the header settings + + + scan whose trailer data is needed + + + true if the data should be formatted + + + The strings representing trailer data>. + + + + + returns the (unformatted) Trailer Extra value for a specific field in the specified scan number. + The object type depends on the field type, as returned by + + Numeric values (where the header for this filed returns "True" for IsNumeric + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + CHAR and UCHAR types are returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + scan who's data is needed + zero based filed number in the record, as per header + Value of requested field + + + + Returns the (unformatted) Trailer Extra values for all field in the specified scan number. + The object types depend on the field types, as returned by + GetTrailerExtraHeaderInformation. + This offers higher performance, where numeric values are needed, + as it avoids translation to and from strings. + It is also designed for efficient copy of data from one file to another. + + Numeric values (where the header for this field returns "True" for IsNumeric) + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + Char type is returned as "sbyte". + Uchar type is returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + + scan who's data is needed + Values of all fields + Thrown if the selected device is not of type MS + + + + Returns the (unformatted) Tune Data values for all fields in the specified record number. + The object types depend on the field types, as returned by + GetTuneDataHeaderInformation. + This is designed for efficient copy of data from one file to another. + + Numeric values (where the header for this field returns "True" for IsNumeric) + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + Char type is returned as "sbyte". + Uchar type is returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + + zero bases index into tune records who's data is needed + Values of all fields + Thrown if the selected device is not of type MS + + + + Gets the (raw) status log data at a given index in the log. + Deigned for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "GetStatusLogEntriesCount() -1") + Log data at the given index + + + + Gets the (raw) status log data at a given retention time in the log. + Designed for efficiency, this method does not convert logs to display string format. + + Retention time/ + Log data at the given time + + + + Get the advanced LT/FT formats data, such as the noise data, baseline data and frequencies + + The scan number. + + Returns an IAdvancedPacketData object which contains noise data, baseline data and frequencies for specified . + It might return empty arrays for scans which do not have these data. + + Thrown if the selected device is not of type MS + + + + Gets the array of headers and values for this scan number. The values are formatted as per the header settings. + + + The scan for which this information is needed + + + Extra information about the scan + + + + + Gets the segment event table for the current instrument + + A two dimensional array of events. The first index is segment index (segment number-1). + The second is event index (event number -1) within the segment. + + + + Request the object to keep a cache of the listed item. + Setting the caching to "zero" disables further caching. + + + Item to cache + + + Limit of number of items to cache + + + (optional, default false) if set True, all values returned from the cache are unique (cloned) references. + By default, the cache just keeps references to the objects + + + + + Clear items in the cache + + + item type to clear + + + + + Count the number currently in the cache + + + Item type to count + + + The number of items in this cache + + + + + Gets the raw file header. + + + + + Gets the file error state. + + + + + Gets extended the run header details. + + + + + Gets the auto sampler information. + + + + + Calculate the filters for this raw file, and return as an array + + Auto generated list of unique filters + + + + Calculate the filters for this raw file within the range of scans supplied, and return as an array. + + First scan to analyze + Last scan to analyze + + Auto generated list of unique filters + + + + + Get the filter for a scan number. + + + The scan number. + + + The . + + + + + Get a filter interface from a string. + + + The filter string. + + + An interface representing the filter fields, converted from the supplied string. + + + + + Get a filter interface from a scan event interface. + Permits filtering to be done based on programmed events, such as + an item from the "ScanEvents" table, + or from constructed data using . + This method initializes the filter based on the current raw file + (for example: mass precision) + + + The event data. + + + An interface representing the filter fields, converted from the supplied event. + + Thrown if the selected device is not of type MS + + + + Get a filter interface from a string, with a given mass precisions + + + The filter string. + + Precisions of masses (number of decimal places) + + An interface representing the filter fields, converted from the supplied string. + + + + + Obtain an interface to iterate over a scans which match a specified filter. + The iterator is initialized at "scan 0" such that "GetNext" will return the first matching scan in the file. + This is a low level version of + + Filter, which all returned scans match. + This filter may be created from a string using + An iterator which can step back and forth over scans matching a given filter. + + + + Get filtered scan enumerator. + + The filter, which all enumerated scans match. + This filter may be created from a string using + + + An enumerator which can be used to "foreach" over all scans in a file, which match a given filter. + Note that each "step" through the enumerator will access further data from the file. + To get a complete list of matching scans in one call, the "ToArray" extension can be called, + but this will result in a delay as all scans in the file are analyzed to return this array. + For fine grained iterator control, including "back stepping" use + + + + + Get filtered scan enumerator. + + + The filter, which all enumerated scans match. + This filter may be created from a string using + + + The start Time. + + + The End Time. + + + An enumerator which can be used to "foreach" over all scans in a time range, which match a given filter. + Note that each "step" through the enumerator will access further data from the file. + To get a complete list of matching scans in one call, the "ToArray" extension can be called, + but this will result in a delay as all scans in the time range are analyzed to return this array. + For fine grained iterator control, including "back stepping" use + + + + + Gets a value indicating whether this file has an instrument method. + + + + + Export the instrument method to a file. + + + The method file path. + + + Force over write. If true, and file already exists, attempt to delete existing file first. + If false: UnauthorizedAccessException will occur if there is an existing read only file. + + True if the file was saved. False, if no file was saved, for example, + because there is no instrument method saved in this raw file. + + + + + Gets a value indicating whether this file has MS data. + + + + + Gets the scan events. + + + + + Gets the set of user labels + + + + + Gets the scan event details for a scan + + + The scan number. + + + The interface, to get detailed information about a scan. + + + + + Gets the scan event as a string for a scam + + + The scan number. + + + The event as a string. + + + + + Gets an entry from the instrument error log. + + + Zero based index. + The number of records available is RunHeaderEx.ErrorLogCount + An interface to read a specific log entry + + + + Gets the labels and index positions of the status log items which may be plotted. + That is, the numeric items. + Labels names are returned by "Key" and the index into the log is "Value". + + + + + Gets the status log data, from all log entries, based on a specific position in the log. + For example: "position" may be selected from one of the key value pairs returned from + in order to create a trend plot of a particular value. + The interface returned has an array of retention times and strings. + If the position was selected by using , then the strings may be converted "ToDouble" to get + the set of numeric values to plot. + + + The position within the list of available status log values. + + + An interface containing the times and logged values for the selected status log field. + + + + + Get all instrument friendly names from the instrument method. + + + The instrument friendly names"/>. + + + + + Get scan dependents. + Returns a list of scans, for which this scan was the parent. + + + The scan number. + + + The filter precision decimals. + + + Information about how data dependant scanning was performed. + + + + + Gets the unique compound names as arrays of strings. + + + The Compound Names. + + + + + Gets the unique compound names as arrays of strings by given filter. + + + The scan Filter. + + + The compound names"/>. + + + + + Get the scan filters which match a compound name. + When implemented against raw files, this may have a performance impact on applications. + For files which have a programmed event table, this will be fast, + as the information can be taken directly from the events. + If there is no event table, then event data is checked for every scan in the file (slower). + + + The compound name. + + + The array of matching scan filters (in string format). + + + + + Create a chromatogram from the data stream. + Extended version: + Parameters include option for component names. + Includes base peak data for each scan. + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + For mass range or base peak chromatograms, + if the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses. + For example: with 5 ppm tolerance, the caller can pass a single mass value (same low and high) for each mass range, + and get chromatograms of those masses +/- 5 ppm. + + + Chromatogram points + + + + + Create a chromatogram from the data stream. + Extended version: + Parameters include option for component names. + Includes base peak data for each scan. + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + Chromatogram points + + + + + Test if a scan passes a filter. + If all matching scans in a file are required, consider using or + + the scan number + the filter to test + True if this scan passes the filter + + + + The filtered scan iterator wrapper. + must wrap this, to set device correctly each call + + + + + Initializes a new instance of the class. + + + The raw file thread accessor. + + + The filter. + + + + + Gets the filter which was used to construct this + + + + + Gets the previous scan number, which matches the filter. + Returns 0 if there is no open file. + + + + + Gets the next scan number, which matches the filter. + Returns 0 if there is no open file. + + + + + Sets the iterator's position. + This scan number does not have to match the given filter. + This can be used to find next or previous matching scan, from a given scan. + + + + + Gets a value indicating whether there are possible previous scans before the current scan. + This does not guarantee that another matching scan exists. It simply tests that the current iterator position + is not the first scan in the file. + + + + + Gets a value indicating whether there are possible next scans after the current scan. + This does not guarantee that another matching scan exists. It simply tests that the current iterator position + is not the last scan in the file. + + + + + This method is similar to GetSegmentedScanFromScanNumber in the IRawData interface. + The method returns only the mass and intensity values from + the scan data for a scan. + Values for flags etc. are not returned, saving data space and improving efficiency. + This method never returns "reference and exception peak" data. + The method is designed for improved performance in custom XIC generators. + + The scan whose mass intensity data are needed + Mass and intensity values from the scan. + + + + This method is similar to GetCentroidStream in the IRawData interface. + The method returns only the mass and intensity values from + the "centroid stream" data for a scan. This is also known as "Label Stream" + Values for flags etc. are not returned, saving data space and improving efficiency. + This method never returns "reference and exception peak" data. + The method is designed for improved performance in custom XIC generators. + + The scan who's mass intensity data are needed + Mass and intensity values from the scan "centroid data". + + + + When deciding what data should be read from a scan, centroids or regular scan + (or if the data is needed at all) + scan event data is needed. + This method permits events to be read as a block for a range of scans, + which may reduce overheads involved in requesting one by one. + Potentially, in some data models, the same "event" may apply to several scans + so it is permissible for the same reference to appear multiple times. + + The first scan whose event is needed + The last scan + An array of scan events + + + + + + + + + + Gets the (raw) status log data at a given index in the sorted log. + The form of the log removes duplicate and out of order times + Designed for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "GetStatusLogEntriesCount() -1") + Log data at the given index + + + + Data structure used internally by scan definition + + + + + Gets or sets the token. + + + + + Gets or sets the token class. + + + + + Compares the current token with another token + + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + + + Value + Meaning + + + Less than zero + This object is less than the parameter. + + + Zero + This object is equal to . + + + Greater than zero + This object is greater than . + + + + + An object to compare with this object. + + TokenClass is out of range. + + + + The compare generic. + + + The other. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: + + + Value + Meaning + + + -1 + This object is less than the parameter. + + + Zero + This object is equal to . + + + 1 + This object is greater than . + + + + + + + + Stores the trailer extra values for a scan within an instrument + + + + + Gets or sets the scan Number + + + + + Gets or sets the array of trailer extra values for a scan within an instrument + + + + + Stores the header and tune data record values for an instrument + + + + + Gets or sets the array of headers for Tune data + + + + + Gets or sets the tune data values for an instrument + + + + + Stores one set of tune data values for an instrument + + + + + Gets or sets the index number of the tune record + + + + + Gets or sets the array of tune data values for an instrument + + + + + Encapsulates information about UVInstrument. + + + + + Initializes a new instance of the class. + + + + + Defines the UV instrument data header for UV type devices + + + + + Gets or sets the frequency. + The Frequency will be ignored by Analog devices + + + + + Gets or sets a value indicating whether is uniform time. + If the Uniform flag is TRUE (time is uniform by frequency ) then there is NO time value. ex. "intensity, time" + The IsUniformTime will be ignored by Analog devices + + + + + Gets or sets the number of channels. + + + + + Gets or sets the start time. + + + + + Gets or sets the tic. + + + + + Copies the specified source. + Copy all the non static fields of the current object to the new object. + Since all the fields are value type, a bit-by-bit copy of the field is performed. + + Create a copy of the same object type + + + + The ScanWithSimpleData interface. + Defines very basic MS data and intensity, plus the event for the scan. + + + + + Gets the scan event. + + + + + Gets the data. + + + + + ICommonCoreDataObject is an interface that for CommonCoreData objects. It allows for clearing the dirty flags during a save operation. + For example, before saving your data object that implements CommonCoreDataObject, cast it to a ICommonCoreDataObject and set + IsDirty to false. All data objects that implement the abstract class CommonCoreDataObject implement the ICommonCoreDataObject interface as well. + + + + + Provides a custom deep equality operation when checking for equality. + + The value to compare. + True if objects are equal + + + + Performs the default settings for the data object. This can be overridden in each data object that implements the interface to perform + initialization settings. + + + + + CommonCoreData object is an abstract class. It includes a deep equals feature/> + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Compares this object with another. + Traverse the set of member variables to compare against the object that was passed in. + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + The parameter is null. + + + + Provides a custom deep equality operation when checking for equality. + + The value to compare. + True if the items are equal, false if they are not. + + + + Compares this object with another. + Traverse the set of member variables to compare against the object that was passed in. + + object to compare with + if true, compare sub-objects + true if equal + + + + Performs the default settings for the data object. This can overridden in each data object that implements the interface to perform + initialization settings. + + + + + CoreDataElementAttribute is used in the custom deep equals operation. This attribute allows a user to specify whether or not to include a + property in the equals operation. + + + + + Gets or sets a value indicating whether this is ignore. + + true if ignore; otherwise, false. + + + + Initializes a new instance of the class and sets the Ignore property to false. + + + + + The comparer. + + + Type of objects compared + + + + + Initializes a new instance of the class. + + + The comparison. + + + + + Compare x and y. + + + The x. + + + The y. + + + The standard comparison result (from IComparer). + + + + + Make a thread safe cache of the "n" most recently used copies of an object. + For example: If different parts of an application are likely to read the same data from a file + multiple times, this can be used to reduce the file operations. + + Type of item to cache + + + + + Obtain a record from a data source, based on an index + Example: Scan from raw file, based on scan number. + + + Index of object + + + Object read from data source + + + + + Initializes a new instance of the class. + + + Maximum number of items in the cache. Oldest items are discarded when the cache is full + + + Delegate to read a new item, when not in the cache. + + + + + The queue item. + + + + + Gets or sets Index. + + + + + Gets or sets Value. + + + + + Get an item from the cache, or from the data reader (if not cached). + Automatically caches new items, discarding oldest items. + + + Record number + + + item from the cache. May be "null" if this item is not in the cache, and the reader has no value for this index + + + + + Gets the number of cached items + + + + + Gets the maximum number of cached items + + + + + Gets or sets a value indicating whether all items returned from the cache are Deep Cloned. + If true: Items found in the cache are deep cloned. New items read are saved in the cache as a deep clone, + such that the item returned to the caller is never the same as any reference in the cache. + If false: references are saved in and returned from the cache without any clone. + + + + + Empty the cache + + + + + Determine how the calibration curve is weighted + + + + + This allows you to weight all calibration data points equally during the + least-squares regression calculation of the calibration curve. + + + + + This allows you to specify a weighting of 1/X for + all calibration data points during + the least-squares regression calculation of the calibration curve. + Calibrants are weighted by the inverse of their quantity. + + + + + This allows you to specify a weighting of 1/X^2 for + all calibration data points during the + least-squares regression calculation of the calibration curve. + Calibrants are weighted by the inverse of the square of their quantity. + + + + + This allows you to specify a weighting of 1/Y for + all calibration data points during the least-squares + regression calculation of the calibration curve. + Calibrants are weighted by the inverse of their response (or response ratio). + + + + + This allows you to specify a weighting of 1/Y^2 for + all calibration data points during the least-squares + regression calculation of the calibration curve. + Calibrants are weighted by the inverse of + the square of their response (or response ratio). + + + + + This allows you to specify a weighting of 1/s^2 for all calibration + data points during the least-squares regression calculation of the calibration curve. + Calibrants at a given level are weighted by the inverse of the standard deviation of + their responses (or response ratios). For this weighting factor to be used, + there must be two or more replicates at each level. + If only one calibrant is available for any level, 1/s^2 weighting cannot be used. + + + + + Treatment of calibration curve origin + + + + + The origin is included (as an extra point) on the calibration curve. + + + + + The origin is not added to the curve + + + + + The curve is forced through the origin + + + + + The Regression algorithm used + + + + + A linear (first order) polynomial least-squares fit of the experimental data using slope and intercept coefficients: + Y = mX + B + where m is the slope of the curve and B is the intercept point on the Y-axis. + + + + + A linear polynomial least-squares fit of the experimental data of the following mathematical form: + log10[Y] = m log10[X] + B + where m is the slope of the curve and B is the intercept point on the Y-axis. + + + + + A calibration curve which calculates a quadratic (second order) polynomial + least-squares fit of the experimental data using the following mathematical form: + Y = AX2 + BX + C, where A, B, and C are the polynomial coefficients. + At least three calibration levels are required for this curve fit type. + + + + + A calibration curve which calculates a quadratic (second order) + polynomial least-squares fit of the experimental data using the following mathematical form: + log [Y] = A log [X2] + B log [X] + C + where A, B, and C are the polynomial coefficients. + Note: ignore/force/include origin options are not used with this Regression algorithm type. + + + + + Locally Weighted regression always kicks out replicates at + either the lowest or highest level. With points + at only three levels, a loess regression is + discontinuous at the mid-point between the + lowest and highest level. + + + + + A calibration type in which the response factor is calculated + for replicates at all calibration levels and then averaged. + The amount in a sample can then be calculated by dividing + the response by the average response factor. + + + + + A calibration curve in which data at each calibration level are averaged. + This averaging results in a single averaged data point at each calibration level. + Averaged calibration points are plotted by connecting adjacent points with straight lines. + This calibration curve can be used with one or more calibration levels. + Calibration supports ignore/force origin options for this calibration curve type. + + + + + A calibration curve in which a cubic polynomial curve is fit between each + pair of calibration levels such that the slopes of the separate cubic polynomial + curves match at common calibration curve points. + Calibration supports ignore/force origin options for this calibration curve type. + Note: At least four calibration levels are required for this type of curve fit. + If the origin is forced, only three calibration levels are required. + + + + + Defines why the peak detector has determined that a peak has started or ended + + + + + edge intensity intercepted baseline + 05.*noise value. + + + + + edge fits at least one of the three valley criteria. + + + + + reserved for manually entered integration limits. + + + + + edge reached the peak constraint percentage height. + + + + + edge reached the tailing factor RT limit before the STRIPE height. + + + + + Tilt is as in a pinball machine, something bad happened, + such as hitting the edge of the survey window. + + + + + Determines how signal to noise is reported + + + + + No noise value has been calculated + + + + + No detected noise + + + + + Use SignalToNoise property to get the value + + + + + Determines how a component peak has been selected from a set of possible peaks + + + + + search was by spectral fit. + + + + + search was by largest peak in the search window. + + + + + search was by nearest retention time. + + + + + search was by spectral purity. + + + + + peak was detected by the generic chromatogram peak detector. + + + + + Peak was reworked from the original (for example manual) + + + + + Determines is the peak is rising, or inverted + + + + + Peak rises, like a mountain + + + + + Peak is inverted (like a valley) + + + + + An algorithm for peak detection. + + + + + The genesis peak detection algorithm. + + + + + The ICIS peak detection algorithm + + + + + The avalon peak detection algorithm + + + + + The parameterless peak detection algorithm + + + + + Represents the results of an optional test. + + + + + Failed Test + + + + + Passed Test + + + + + Not Tested + + + + + This specifies a smoothing envelope shape. + + + + + Smooth with equal weights. + + + + + Smooth with a gaussian weighting envelope. + + + + + The units that you can associate with mass tolerance + + + + + millimass units: a unit of mass equal to 0.001 atomic mass unit, used in physics + and chemistry. This unit is also called the millidalton (mDa). The millimass unit + is an SI unit, but its proper SI symbol is mu, not the older symbol mmu + + + + + parts-per-million: a concentration, a unit of proportion equal to 10^-6. + + + + + atomic mass units: the unit of mass used by chemists and physicists for measuring + the masses of atoms and molecules. Early in the nineteenth century, scientists + discovered that each chemical element is composed of atoms, and that each chemical + compound is composed of molecules in which atoms are combined in a fixed way. The + definition of the unified atomic mass unit as 1/12 the mass of the most common atoms + of carbon, known as carbon-12 atoms. (Most elements are mixtures of atoms which have + different masses because they contain different numbers of neutrons; these varieties + are called isotopes.) Careful experiments have measured the size of this unit; the + currently accepted value (1998) is 1.660 538 73 x 10-24 grams. (This number equals 1 + divided by Avogadro's number; see mole.) In addition, 1 amu equals approximately + 931.494 MeV (see electron volt). In biochemistry, the atomic mass unit is called + the dalton (Da). + + + + + Mode of handling multiple chromatogram traces (from the same filtered scans) + + + + + There is only one chromatogram + + + + + The two chromatograms are summed + + + + + The second chromatogram is subtracted from the first + + + + + Determines how void time is calculated + + + + + A value is specified + + + + + The time of the first peak in the void chromatogram is used. + + + + + Determines how the ICIS peak detector determines which signals are noise. + + + + + A single pass algorithm to determine the noise level. + + + + + A multiple pass algorithm to determine the noise level. + In general, this algorithm is more accurate in analyzing the noise than the INCOS Noise algorithm, + but it takes longer. + + + + + Features which can be set per peak, such as "reference compound" + + + + No peak flags + + + Saturation flag (signal over ADC limit) + + + Fragmentation flag (peak split by centroider) + + + Merged flag (peaks combined by centroider) + + + Exception peak flag (part of reference, but not used by calibration) + + + Reference peak flag (hi-res internal reference compound) + + + Mathematically modified packet + + + High resolution SIM lock mass + + + + Determines how much of the the chromatogram is used. + Data outside of the calculated window is ignored + + + + + Do not restrict the chromatogram + + + + + The chromatogram processed is restricted by the baseline and noise window + + + + + Static class used to convert enumeration values to custom strings. + This class is necessary because there is no mechanism to override the ToString() method + for enumerations. + + + To get the customized string for an enumeration value, a program must call the static method + EnumFormat.ToString(value) and not value.ToString(). + + + + + Gets the display text for an enumeration value. + + + A string is searched for in three places, in this order: + A custom string specified by SetCustomString(). + A string resource in the resource file (enum namespace).Enumerations named + (type name).(enum name). + From the DisplayTextAttribute for the enumeration value. + If no value is found, the standard string representation of the enumeration is returned. + + The enumeration value for which to obtain the text string. + The string for the enumeration value. + + + + Sets a custom string for an enumeration value. + This will override any string set with a DisplayTextAttribute. + + The enumeration value for which to set the custom text string. + The custom text string for this enumeration value. + + + + Extension methods. + Includes extensions to several types and interfaces defined in this DLL, + plus some extensions to common .Net types. + + + + + Determines whether [the specified source] [is null or empty] . + + Type parameter + + + The source. + + + if [the specified source] [is null or empty]; otherwise, . + + + + + Test if a value is within range + + + The range. + + + The value. + + + True if the value is within or equal to the range limits (closed range). + + + + + find the first data value which is equal to or after start + (for example, first value within a tolerance range). + Similar to Array.Binary search, but faster + as does not need to call comparer functions + + + Array of increasing data (for example masses in a scan) + + + Position to look for (for example start of X axis range) + + + The first value after start, or -1 if there are no points after start + + + + + Create the ion chromatogram value from a scan data + which is the sum of the intensities of all masses between given limits. + These limits are typically calculated (elsewhere) based on a known mass +/- tolerance. + + + The scan data. + + + The low mass limit. + + + The high mass limit. + + + The summed intensities. + + + + + Create the ion chromatogram value from a centroid stream, + which is the largest of the positive intensities of all masses between given limits. + These limits are typically calculated (elsewhere) based on a known mass +/- tolerance. + If there are no peaks in range, or all data in range has negative intensities, zero is returned. + + + The centroids. + + + The low mass limit. + + + The high mass limit. + + + The largest positive peak intensity within limits, or zero if there are no positive values within limits. + + + + + Create the ion chromatogram value from a scan, + which is mass of the largest of the positive intensities of all masses between given limits. + These limits are typically calculated (elsewhere) based on a known mass +/- tolerance. + If there are no peaks in range, or all data in range has negative intensities, zero is returned. + + + The centroids. + + + The low mass limit. + + + The high mass limit. + + + The mass of the peak with the largest positive peak intensity within limits, + or zero if there are no positive values within limits. + + + + + Create the ion chromatogram value from a scan, + which is mass of the largest of the positive intensities of all masses between given limits. + These limits are typically calculated (elsewhere) based on a known mass +/- tolerance. + If there are no peaks in range, or all data in range has negative intensities, zero is returned. + + + The centroids. + + + The low mass limit. + + + The high mass limit. + + + The mass of the peak with the largest positive peak intensity within limits, + or zero if there are no positive values within limits. + + + + + Create the ion chromatogram value from a scan, + which is mass of the largest of the positive intensities of all masses between given limits. + These limits are typically calculated (elsewhere) based on a known mass +/- tolerance. + If there are no peaks in range, or all data in range has negative intensities, zero is returned. + + + The centroids. + + + The mass of the peak with the largest positive peak intensity within limits, + or zero if there are no positive values within limits. + + + + + Create the ion chromatogram value from a scan, + which is mass of the largest of the positive intensities of all masses between given limits. + These limits are typically calculated (elsewhere) based on a known mass +/- tolerance. + If there are no peaks in range, or all data in range has negative intensities, zero is returned. + + + The centroids. + + + The mass of the peak with the largest positive peak intensity within limits, + or zero if there are no positive values within limits. + + + + + Perform binary search on IList + + + The list. + + + The value. + + + The comparer. + + + Type of items in list + + + The index of the found item, or compliment of the next item after the supplied value. + + + Thrown if arguments are null + + + + + Test if a raw file has MS data. + + + The raw data. + + + True if the file has MS data + + + + + Test if a raw file has MS data, and select the MS detector, if available. + + + The raw data. + + + True if the MS data has been selected. + False if the file does not have MS data. + + + + + Get a filtered scan enumerator, to obtain the collection of scans matching given filter rules. + Gets scans within the given time range. + + + The raw data. + + + The filter. + + + The start Time. + + + The end Time. + + + The collection of scans + + + + + Calculate the filters for this raw file for scans within the time range supplied. + + the raw data + start of time window + end of time window + + Auto generated list of unique filters + + + + + Calculate the compound names for this raw file for scans within the time range supplied. + + the raw data + start of time window + end of time window + + Array of compound names within the supplied time range + + + + + Get the scans included in the time range + + raw file + start time of range + end time of range + first scan in range + last scan in range + True if scans numbers are returned + + + + Get a filtered scan enumerator, to obtain the collection of scans matching given filter rules. + + + The raw data. + + + The filter. + + + The collection of scans + + + + + Get a scan enumerator, to obtain the collection of scans matching a given compound. + + + The raw data. + + + The filter. + + + The collection of scans + + + + + Test is a scan is of a given compound + + raw file + scan number + compound name + true if this is a scan of the compound + + + + Get a scan enumerator, to obtain the collection of scans matching a given compound, within a given time range + + + The raw data. + + + The compound name. + + + The start Time. + + + The end Time. + /// + The collection of scans within the supplied time range, which have this compound name + + + + + Test if a scan passes a filter. + This extension is provided for improved efficiency + where the same filter string needs to be used to test multiple scans, + without repeating the parsing. + Parsing can be done using: GetFilterFromString(string filter), + with the IRawDataPlus interface. + Also consider using + when processing all scans in a file. + + + The raw data. + + the scan number + the filter to test + + True if this scan passes the filter + + + + + Test if a scan passes a filter. + This extension is provided for improved efficiency + where the same filter string needs to be used to test multiple scans, + without repeating the parsing. Consider using one of the overloads of BuildFilterHelper() + Parsing can be done using: GetFilterFromString(string filter), + with the IRawDataPlus interface. + Also consider using + when processing all scans in a file. + + + The raw data. + + the scan number + the filter to test + + True if this scan passes the filter + + + + + Constructs an object which has an analysis of the selections being made by + a scan filter. Improves efficiency when validating many scans against a filter. + Filter precision is automatically set, based on the file. + + + The raw data. + + the filter to analyze + + Helper, to efficiently validate scans. + + + + + Constructs an object which has an analysis of the selections being made by + a scan filter. Improves efficiency when validating many scans against a filter. + + + The raw data. + + the filter to analyze + Precision of filter + + Helper, to efficiently validate scans. + + + + + Constructs an object which has an analysis of the selections being made by + a scan filter. Improves efficiency when validating many scans against a filter. + Filter precision is automatically set from the raw file. + + + The raw data. + + the filter to analyze + + Helper, to efficiently validate scans. + + + + + Constructs an object which has an analysis of the selections being made by + a scan filter. Improves efficiency when validating many scans against a filter. + + + The raw data. + + the filter to analyze + Filter Precision + + Helper, to efficiently validate scans. + + + + + Format ionization mode, based on the scan filter string format. + + + The raw data. + + + The mode to format. + + + The . + + + + + Format activation type, based on the scan filter string format. + + + The raw data. + + + The mode to format. + + + The . + + + + + Format mass analyzer, based on the scan filter string format. + + + The raw data. + + + The analyzer to format. + + + The . + + + + + Get the mass tolerance and precision values from a raw file + + Raw file + The default tolerance and filter precision + + + + Enumerate over a range of scans + + File to read from + start of scan range + final scan in scan range + An enumerator for a collection of scans + + + + Enumerate over a set of scans + + File to read from + Numbers for the scans + An enumerator for a collection of scans + + + + Gets the average of scans between the given times, which match a filter string. + + File to read from + + start time + + + end time + + + filter string + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + the averaged scan. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Gets the average of scans between the given times, which match a compound name. + + File to read from + + start time + + + end time + + + compound name + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + the averaged scan. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Gets the average of scans between the given scan numbers, which match a compound name. + + File to read from + + start scan number + + + end scan number + + + compound name + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + the averaged scan. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Gets the average of scans between the given scan numbers, which match a filter string. + + + File to read from + + + start scan + + + end scan + + + filter string + + + mass tolerance settings. If not supplied, these are default from the raw file + + + The average Options (for FT format data). + + + the averaged scan. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Create a scan averager. + + + The data. + + + The average options. + + + The . + + + + + Gets the average of scans between the given times, which match the supplied filter rules. + + File to read from + + start time + + + end time + + + filter rules + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + the averaged scan. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Gets the average of scans between the given scan numbers, which match the supplied filter rules. + + File to read from + + start scan + + + end scan + + + filter rules + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + the averaged scan. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Calculates the average spectra based upon the list supplied. + The application should filter the data before making this code, to ensure that + the scans are of equivalent format. The result, when the list contains scans of + different formats (such as linear trap MS centroid data added to orbitrap MS/MS profile data) is undefined. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + File to read from + + list of scans to average + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + Merge segments, even if mass ranges are not similar. + Only applies to data with 1 mass segment + + The average of the listed scans. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Calculates the averaged and subtracted spectra based upon the lists supplied. + The application should filter the data before making this code, to ensure that + the scans in both lists are of equivalent format. The result, when the lists contains scans of + different formats (such as linear trap MS centroid data added to orbitrap MS/MS profile data) is undefined. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + File to read from + + foreground scans: list of scans to average + + background scans: list of scans which are averaged, and then subtracted from the averaged foreground scans + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + The average of the listed scans. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Calculates the averaged and subtracted spectra based upon the lists supplied. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + File to read from + + time range to average. + + + time ranges to subtract. The sets of scans matching the filter in each of these time ranges + are joined to define the background. + + + Filter to apply for averaging + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + The average of the listed scans. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Calculates the averaged and subtracted spectra based upon the lists supplied. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + File to read from + + time range to average. + + + time ranges to subtract. The sets of scans matching the filter in each of these time ranges + are joined to define the background. + + + Filter to apply for averaging + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + The average of the listed scans. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Calculates the averaged and subtracted spectra based upon the lists supplied, + which include the named compound. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + File to read from + + time range to average. + + + time ranges to subtract. The sets of scans matching the filter in each of these time ranges + are joined to define the background. + + + Compound to select scans for averaging + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + The average of the listed scans. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Get the list of scans which conatin a given copound, in the range + "nearest scan time to range.Low" to "nearest scan time to range.High" + + Raw file + Compound name to match against scan event + Retention Time range + + + + + Creates a list of all scans in the given range, which pass a filter string + + The raw file. + The filter. + The start scan number. + The end scan number. + List of filtered scan numbers + + + + Creates a list of all scans in the given range, which have a component name + + The raw file. + The compound. + The start scan number. + The end scan number. + List of filtered scan numbers + + + + Creates a list of all scans in the given range, which pass the supplied filter rules. + + The raw file. + The filter. + The start scan number. + The end scan number. + List of filtered scan numbers + + + + Creates a list of all scans in the given time range, which pass the supplied filter rules. + + The raw file. + The filter. + The start time. + The end time. + List of filtered scan numbers + + + + Creates a list of all scans in the given time range, which pass the supplied filter rules. + This version returds scans from the "nearest scan to start time" to "nearest scan to end time". + + The raw file. + The filter. + The time range. + List of filtered scan numbers + + + + Creates a list of all scans in the given time range, which pass the supplied filter rules. + This version returds scans from the "first scan >= start time" to "last scan Less or equal to end time". + + The raw file. + The filter. + The time range. + List of filtered scan numbers + + + + Creates a list of all scans in the given time range, which pass a filter + + The raw file. + The filter. + The start time. + The end time. + List of filtered scan numbers + + + + Convert a time range to a the nearest scan range + + + The raw File. + + + The time range. + + + The scan range of the nearest scans to the start and end times + + + + + Convert a time range to am inlcuded scan range, + include scans which are within or equal to the time limits supplied. + + + The raw File. + + + The time range. + + + The scan range of the lowest and highest scans in the time range supplied, + including scans at the boundary times. + + + + + Creates a list of all scans in the given scan range, which pass a filter + + + The sample raw file. + + + The start scan number. + + + The end scan number. + + + The (analyzed) filter. + + + The list of matching scans. + + + + + Creates a list of all scans in the given scan range, which pass a filter + + + The sample raw file. + + + The start scan number. + + + The end scan number. + + + The (analyzed) filter. + + + The list of matching scans. + + + + + Calculates the average spectra based upon the list supplied. + The application should filter the data before making this code, to ensure that + the scans are of equivalent format. The result, when the list contains scans of + different formats (such as linear trap MS centroid data added to orbitrap MS/MS profile data) is undefined. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + File to read from + + list of ScanStatistics + + mass tolerance settings. If not supplied, these are default from the raw file + + The average Options (for FT format data). + + + The average of the listed scans. Use Scan.ScansCombined to find how many scans were averaged. + + + + + Subtracts the background scan from the foreground scan + + File to read from + Foreground data (Left of "scan-scan" operation + Background data (right of"scan-scan" operation) + The result of foreground-background + + + + Test if this file has variable trailers. + Calling code must select and MS data stream first. + If this is true, then the number of items returned in each scan for "trailer extra" can vary. + + + The raw data. + + + True, if the trailer extra records are variable sized. + + + + + Test if a set of headers defines "variable sized records". + + + The headers. + + + True, if the records controlled by these headers are variable sized. + + + + + Get trailer extra data for scan with validation. + Gets the "trailer extra" custom scan data in object form. + + The application should select MS data before calling this. + For example, If the string "Ion Time" is found at index 3 in the + headers with format "double", and an application needs to read this double value + from scan 19, then the application can first test if item[3] is valid in scan 19, by + inspecting the returned boolean array (result.Item1[3]). + If this array element is "true" then the "Ion Time" (double) value in the returned object array + at index 3 may be used. If result.Item1[3] is false, then this value is not available. + So: If producing a chart of this value, the retention time of this scan should be + omitted from the data series. (Do not record "0" for a missing value). + Argument exceptions may be returned by the underlying file, if (for example) the scan number + is out of range. + + + The raw file. + + + The scan number. + + + The headers as read by IRawDataPlus.GetTrailerExtraHeaderInformation. + When processing multiple scans, it is more efficient for an application + to request this data once, and supply it to each call. + Instruments may have fixed record sizes. Having read the headers, an application + may call this bool hasVariableRecords = headers.HasVariableRecords(); + and if this returns "false" then there is no need to call this extension, + as all values will be valid in all scans. + + + A tuple, whose first element is an array of valid flags, and second is the exact data + returned from GetTrailerExtraValues, for the supplied scan. + + + + + Contains enumerations used for scan filters and scan events. + + + + + Specifies polarity of scan. + + + + + Scan is negative ion + + + + + Scan is positive ion + + + + + Accept any type of scan polarity. + + + + + Specifies data type of scan. + + + + + Centroid format data + + + + + Profile format data + + + + + When filtering: accept any state of this feature + + + + + Specifies how source fragmentation values are interpreted. + + + + + No numeric value: e.g. SID + + + + + A single value: e.g. SID=40 + + + + + A ramp: e.g. SID=40-50 + + + + + SIM: e.g. SIM [100@40, 200@50] + + + + + Accept any value + + + + + Specifies scan mode in scans. + + + + + A full scan. + + + + + A zoom scan. + + + + + A SIM (selected Ion Monitoring) scan. + + + + + A SRM (Selected Reaction Monitoring) scan. + + + + + A CRM (Continuous Reaction Monitoring) scan. + + + + + any scan. + + + + + A Q1 MS scan (first quad of triple). + + + + + A Q3 MS scan (third quad of triple). + + + + + The feature state. + By default: On. + This tri-state enum is designed for filtering + + + + + The on state. + The feature is used + + + + + The off state. The feature is not used. + + + + + The any state. When filtering, match any state of this feature. + + + + + Specifies scan power in scans. + + + + Constant Neutral Gain scan(ICIS Data Only) + + + Constant Neutral Loss scan(ICIS Data Only) + + + Parent scan(ICIS Data Only) + + + Any scan power + + + basic MS + + + MS^2 (MS/MS) + + + order MS^3 + + + order MS^4 + + + order MS^5 + + + order MS^6 + + + order MS^7 + + + order MS^8 + + + order MS^9 + + + order MS^10 + + + + Specifies ionization mode in scans. + + + + + Mode is electron impact. + + + + + Mode is chemical ionization. + + + + + Mode is fast atom bombardment. + + + + + Mode is electro spray. + + + + + Mode is atmospheric pressure chemical ionization. + + + + + Mode is nano spray. + + + + + Mode is thermo spray. + + + + + Mode is field desorption. + + + + + Mode is matrix assisted laser desorption ionization. + + + + + Mode is glow discharge. + + + + + Mode is any (For filtering only). + If reported by an instrument: Mode was not recorded by instrument. + + + + + Paper spray ionization. + + + + + Card nanospray ionization. + + + + + The extension ionization mode 1. + + + + + The extension ionization mode 2. + + + + + The extension ionization mode 3. + + + + + The extension ionization mode 4. + + + + + The extension ionization mode 5. + + + + + The extension ionization mode 6. + + + + + The extension ionization mode 7. + + + + + The extension ionization mode 8. + + + + + The extension ionization mode 9. + + + + + The ion mode is beyond known types. + + + + + Specifies inclusion or exclusion of the detector value. + + + + + The detector value valid. + + + + + Any detector value (for filtering). + + + + + The detector value is not valid. + + + + + Specifies precursor(collision) energy validation type. + + + + + Energy value is valid + + + + + Not valid (accept any when filtering) + + + + + Specifies type of mass analyzer in scans. + + + + + Ion trap + + + + + Triple quad + + + + + Single quad + + + + + Time of flight + + + + + Fourier Transform + + + + + Magnetic sector + + + + + Match any type + + + + + Asymmetric Track Lossless (ASTRAL) + AS T + + + + + Specifies type of sector scan. + + + + + Magnetic sector scan + + + + + Electrostatic sector scan + + + + + Match any sector scan + + + + + Specifies type of field free region in scans. + + + + + First Field Free Region + + + + + Second Field Free Region + + + + + Accept any Field Free Region + + + + + Specifies compensation voltage type. + + + + + No numeric value: e.g. SID + + + + + A single value: e.g. SID=40 + + + + + A ramp: e.g. SID=40-50 + + + + + SIM: e.g. SIM [100@40, 200@50] + + + + + Accept any value + + + + + The activation types are used to link a specific precursor mass with an activation type. + There are 26 possible mode values, including some reserved values. + + + + + Collision induced dissociation + + + + + Multi-photon dissociation. + + + + + Electron-capture dissociation (ECD) is a method of fragmenting gas phase ions + for tandem mass spectrometric analysis (structural elucidation). + + + + + Pulsed-Q Dissociation (PQD) is a proprietary fragmentation technique that eliminates the low mass cut-off + for Thermo Scientific™ linear ion trap mass spectrometers, + facilitating the use of isobaric mass tags for quantitation of proteins. + + + + + Electron transfer dissociation (ETD). + ETD induces fragmentation of cations (e.g. peptides or proteins) by transferring electrons to them. + + + + + Higher-energy collisional dissociation. + + + + + Match any activation type + + + + + SA activation + + + + + Proton transfer reaction + + + + + Negative electron transfer dissociation + + + + + Negative Proton-transfer-reaction + + + + + Ultra Violet Photo Dissociation + + + + + Mode a (reserved) . + + + + + Mode b (reserved) . + + + + + Mode c (reserved) . + + + + + Mode d (reserved) . + + + + + Mode e (reserved) . + + + + + Mode a (reserved) . + + + + + Mode g (reserved) . + + + + + Mode h (reserved) . + + + + + Mode i (reserved) . + + + + + Mode J (reserved) . + + + + + Mode K (defined as NegativeProtonTransferReaction). + + + + + Mode L (reserved). + + + + + Mode M (reserved). + + + + + Mode N (reserved). + + + + + Mode O (reserved). + + + + + Mode P (reserved). + + + + + Mode Q (reserved). + + + + + Mode R (reserved). + + + + + Mode S (reserved). + + + + + Mode T (reserved). + + + + + Mode U (reserved). + + + + + Mode V (reserved). + + + + + Mode W (reserved). + + + + + Mode X (reserved). + + + + + Mode Y (reserved). + + + + + Mode Z (reserved). + + + + + end of list + + + + + Determines how accurate mass calibration was done. + + + + + Calibration is internal (calibration compound mixed with injected data). + + + + + Calibration is external (calibration compound used on a previous injection). + + + + + No recorded accurate mass calibration. + + + + + Access to basic data about a replicate + As defined in Xcalibur PMD + + + + + Gets the amount of target compound in calibration or QC standard. + + + + + Gets the Ratio of target peak height to ISTD peak height in result file. + + + + + Gets the Ratio of target peak area to ISTD peak area in result file. + + + + + Gets a value indicating whether to exclude this data point from calibration curve. + + + + + Gets the raw file name for the replicate + + + + + A replicate is a measurement of a single calibration peak in 1 file. + This interfaces defines required features of a replicate for the regression code. + A calibration system needs to implement at least this information + (typically from a calibration table and peak integration results). + The real class "Replicate" implements this. + + + + + Gets the amount of target compound in calibration or QC standard. + + + + + Gets the response of this sample, for example: Ratio of target peak area to ISTD peak area + + + + + Gets or sets a value indicating whether this data point should be excluded from the calibration curve. + + + + + Gets the key name associated with this replicate (for example a file name) + + + + + Gets the second key name associated with this replicate (for example a compound name) + + + + + Implementation of ICloneable.Clone method. + Creates deep copy of this instance. + + + An exact copy of the current Replicate. + + + + + Interface to pass replicate information to curve fitting methods + + + + + Gets the replicates of this calibration level + + + + + Gets the number of replicates for this level + + + + + Gets or sets the amount of calibration compound (usually a concentration) for this level + + + + + array access operator to return Replicate array element. + + Index into the array + The requested replicate + + + + Count all included/excluded replicates. + + The included and excluded counts are incremented by the number of included + and excluded points. These counters are not set to zero, + allowing this method to be called repeatedly, for example to count + replicates for all levels. + + + (updated) included counter + (updated) excluded counter + + + + Read only access to a calibration level. + + + + + Gets the name for this calibration level + + + + + Gets the amount of calibration compound (usually a concentration) for this level + + + + + interface to read QC level settings + + + + + Gets the QC test standard: 100 * (yobserved-ypredicted)/ypreditced + + + + + Import format for Xcalibur PMD + + + + + Gets replicate data, as saved in a PMD file + + + + + Interface to read replicate information + + + + + Gets the replicates of this calibration level + + + + + Gets the number of replicates for this level + + + + + Gets an array access operator to return Replicate array element. + + Index into the array + The requested replicate + + + + This interface represents replicate information after preforming calibration calculations + and determining statistics. These statistics are may be used to annotate calibration curves. + + + + + Gets or sets the calculated % RSD for a replicate table + + + + + Gets or sets the calculated % RSD for a replicate table + + + + + Gets the average value of the response factor + + + + + Statistics calculated from a replicate table + + + + + Gets the calculated % RSD for a replicate table + + + + + Gets the calculated % CV for a replicate table + + + + + Gets the average retention time of all peaks added to the replicate table + + + + + Gets the average response factor (or average response for ISTD) + + + + + Gets a value indicating whether the calibration or QC level was "found" + + + + + This interface represents replicate information after preforming calibration calculations + and determining statistics. These statistics are may be used to annotate calibration curves. + + + + + Read only access to Results of running system suitability tests + + + + + Gets the resolution of the peak (from other peaks) + + + + + Gets a value indicating whether the resolution test passed + + + + + Gets a value indicating whether the symmetry test passed + + + + + Gets a value indicating whether the peak width test passed + + + + + Gets a value indicating whether the peak tailing test passed + + + + + Gets a value indicating whether the column overload test passed + + + + + Gets a value indicating whether the signal to noise test passed + + + + + Gets a value indicating whether the saturation test passed + + + + + Gets a value indicating whether the concave peak test passed + + + + + Gets a value indicating whether the baseline clipping test passed + + + + + Gets a value indicating whether the following values have been calculated: + PassedResolutionChecks, MeasuredResolution + + + + + Gets a value indicating whether the following values have been calculated: + PassedSymmetryChecks + + + + + Gets a value indicating whether the following values have been calculated: + PassedPeakWidth, PassedTailing, PassedColumnOverload, PassedNoise, PassedSaturated, + PassedConcave, PassedBaselineClipped + + + + + Gets a value indicating whether the ResolutionCheck was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the SymmetryCheck was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the PeakWidth test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Tailing test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the ColumnOverload test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Noise test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Saturated test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the Concave test was performed, and the results of the test, when run. + + + + + Gets a value indicating whether the BaselineClipped test was performed, and the results of the test, when run. + + + + + This interfaces encapsulates access to the results of an ion ratio test for one ion. + + + + + Gets a value indicating whether the co-elution test has passed for this ion + + + + + Gets the results of the co-elution test + targetCompoundPeak.Apex.RetentionTime - ion.Apex.RetentionTime; + + + + + Gets the measured ion ratio, as a percentage + (qualifierIonResponse * 100) / targetCoumpoundResponce + + + + + Gets a window in absolute % used to bound this test + + + + + Gets a value indicating whether the ratio test passed for this ion + + + + + Gets the mass which was tested + + + + + Gets the peak which was found in the IRC chromatogram + + + + + Read only access to mass options + + + + + Gets the tolerance value. + + The tolerance. + + + + Gets the units of precision. + + The precision. + + + + Gets the tolerance units. + + The tolerance units. + + + + Gets the tolerance string of the current m_toleranceUnits setting. + + The tolerance string. + + + + Get the tolerance window around a specific mass + + + Mass about which window is needed + + + The distance (in amu) from the mass which is within tolerance. + For example: myWindow=GetToleranceAtMass(myMass); + accept data between "myMass-myWindow" and "myMass+myWindow" + + + + + Read only access to chromatogram trace settings + + + + + Gets the type of trace to construct + + see for more details + + + + Gets a value indicating whether reference and exception peaks are included. + in this chromatogram trace + + + + + Gets the filter used in searching scans during trace build + + + + + Gets the delay in minutes. + + Floating point delay in minutes + + + + Gets the fragment mass for neutral fragment filters. + + Floating point fragment mass for neutral fragment filters + + + + Gets the mass ranges. + + + If is MassRange then mass range values are used to build trace. + + Array of mass ranges + + + + Gets the number of mass ranges. + + + If is MassRange then mass range values are used to build trace. + + Numeric count of mass ranges + + + + Gets a range value at 0-based index. + + + Use to find out the count of mass ranges. + + + If is MassRange then mass range values are used to build trace. + + + Index at which to retrieve the range + + + value at give index + + + + + Gets the Compound Names. + + + + + Read only access to peak chromatogram settings + + + + + Gets the scan filter. + This determines which scans are included in the chromatogram. + + + + + Gets the chromatogram settings. + This defines how data for a chromatogram point is constructed from a scan. + + + + + Gets the chromatogram settings + When there is a trace operator set, + This defines how data for a chromatogram point is constructed from a scan for the chromatogram + to be added or subtracted. + + + + + Gets the device type. + This defines which data stream within the raw file is used. + + + + + Gets the instrument index (starting from 1). + For example: "3" for the third UV detector. + + + + + Gets the trace operator. + If the operator is not "None" then a second chromatogram can be added to or subtracted from the first. + + + + + Readonly access to a peak + + + + + Gets a list of peaks that have been merged + + + + + Gets a value which determines how signal to noise has been calculated. + When the returns .Value, a numeric value can + be obtained from . + + + + + Gets the Signal To Noise ratio. + If is .Value, then this property returns the signal to noise ratio. + Otherwise this should not be used. Use .ToString() instead. + + + + + Gets the position, height, baseline at left limit + + + + + Gets the position, height, baseline at peak apex + + + + + Gets the position, height, baseline at right limit + + + + + Gets the integrated peak area + + + + + Gets the mass of the base peak from the apex scan. + + + + + Gets the mass to charge ratio of peak. + + + + + Gets the expected RT after making any RT adjustments. + + + + + Gets the noise measured in detected peak (for signal to noise calculation) + + + + + Gets a value indicating whether the "Noise" value was calculated by an RMS algorithm. + + + + + Gets the apex of the peak corresponds to a particular signal. + This gives the scan number of that signal. + If no scan numbers are sent with the peak detection signal, then + the scan number = "signal index at apex +1". + Note that there is no guarantee that left and right edges will always be exactly on a scan, even + though most peak detectors behave that way, so this is not added as a property of + + + + + Gets the name for this peak (for example, analyte name) + + + + + Gets the number of scans integrated + + + + + Gets the left edge type. This describes why the peak started. It is only set by the Genesis Detector. + + + + + Gets the right edge type. This describes why the peak ended. It is only set by the Genesis Detector. + + + + + Gets a value indicating whether the peak is Valid. + Peaks are assumed to have valid data, but may be marked invalid by + an integrator, if failing certain tests. + Invalid peaks should never be returned to a calling application + by an integrator algorithm. + + + + + Gets a value indicating whether this is saturated. + + true when integration/mass range has saturation. + + + + Gets a value indicating whether valley detection was used when detecting this peak. + + + + + Gets the direction of peak (Positive or Negative) + + + + + Gets the chi-squared error in fitting the peak. + + + + + Gets the calculated width, or 'gamma_r'. + + + + + Gets the calculated intensity, or 'gamma_A'. + + + + + Gets the calculated position, or 'gamma_t0'. + + + + + Gets the calculated 4th parameter for gamma (gamma_M) or EMG functions. + + + + + Gets the peak shape used in the fitting procedure. + + + + + Gets the number of data points used in the fit. + + + + + Gets purity of the peak + + + + + Gets the low time from peak purity calculation + + + + + Gets the high time from peak purity calculation + + + + + Read only access to a located peak + + + + + Gets the peak which best matches the location rules. + + + + + Gets how this peak was found. + The find results are only valid when this is set to "Spectrum". + + + + + Gets a value indicating whether RT adjustments could be made to the RT reference. + This flag is only meaningful when RT reference adjustments are made based on + a reference peak (see the locate class). + If a valid reference peak is supplied, then the expected RT can be adjusted based on the reference. + If no reference peak is found (a null peak) then the expected RT cannot be adjusted, and this flag will be false. + + + + + Gets the find results. When using spectrum LocateMethod this will contain the best matching peaks and find scores. + + + + + Read only access to smoothing settings + + + + + Gets the number of points for smoothing the chromatogram + + + + + Gets the number of times to repeat smoothing + + + + + Gets the envelope shape used by smoothing algorithm + + + + + Read only access to system suitability settings + + + + + Gets a value indicating whether resolution checks will be performed + + + + + Gets the Resolution Threshold. + The threshold value determines if a peak's resolution or ok or not. + The default value is 90%. + Resolution is defined as the ratio: + 100 × V/P + where: + V = depth of the Valley: the difference in intensity from the chromatogram at the apex of the target peak + to the lowest point in the valley between the target peak and a neighboring peak + P = Peak height: the height of the target peak, above the peak's baseline + + + + + Gets a value indicating whether peak symmetry checks are to be performed. + Symmetry is determined at a specified peak height + and is a measure of how even-sided a peak is + about a perpendicular dropped from its apex. + + + + + Gets the Peak Height at which symmetry is measured. + The default value is 50%. You can enter any value within the range 0% to 100%. + + + + + Gets the Symmetry Threshold. + The SOP defined Symmetry Threshold is > 70% at 50% peak height. + This represents a realistic practical tolerance for capillary GC data. + You can enter any value within the range 0% to 100%. + The default value is 80% at 50% peak height. + The algorithm determines symmetry at the SymmetryPeakHeight + For the purposes of the test, a peak is considered symmetrical if: + (Lesser of L and R) × 100 / (Greater of L and R) > Symmetry Threshold % + where: + L = the distance from the left side of the peak to + the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to + the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets a value indicating whether peak classification checks are to be run + + + + + Gets the Peak Height at which the suitability calculator tests the width of target peaks. + You can enter any value within the range 0% to 100%. The default value is 50%. + + + + + Gets the minimum peak width, at the specified peak height, for the peak width suitability test. + The default value is 1.8. You can set any value in the range 0 to 30 seconds. + + + + + Gets the maximum peak width, at the specified peak height, for the peak width suitability test. + The default value is 3.6. You can set any value in the range 0 to 30 seconds. + + + + + Gets the Peak Height at which the algorithm measures the tailing of target peaks. + The default SOP value is 10%. You can enter any value within the range 0% to 100%. + + + + + Gets the failure threshold for the tailing suitability test. + The default SOP defined failure threshold is %lt 2 at 10% peak height. The valid range is 1 to 50. + Tailing is calculated at the value defined in . + For the purposes of the test, a peak is considered to be excessively tailed if: + + R / L > Failure Threshold % + where: + L = the distance from the left side of the peak to the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets the Peak Height at which the algorithm measures column overloading. + The default SOP value is 50%. You can enter any value within the range 0% to 100%. + + + + + Gets the failure threshold value for the column overload suitability test. + The default SOP defined threshold is 1.5 at 50% peak height. The valid range is 1 to 20. + A peak is considered to be overloaded if: + + L / R > Failure Threshold % + where: + L = the distance from the left side of the peak to the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets the Number of Peak Widths for Noise Detection testing parameter for + the baseline clipping system suitability test. + The default value is 1.0 and the permitted range is 0.1 to 10. + A peak is considered to be baseline clipped if there is no signal + (zero intensity) on either side of the peak within the specified + number of peak widths. The range is truncated to the quantitation window + if the specified number of peak widths extends beyond the window’s edge. + + + + + Gets the threshold for system suitability testing + of the signal-to-noise ratio. The default value is 20 and the + permitted range is 1 to 500. The algorithm calculates the signal-to-noise ratio + within the quantitation window using only baseline signal. + Any extraneous, minor, detected peaks are excluded from the calculation. + + + + + Read only access to Ion ratio settings + + + + + Gets the time the retention time can vary from the expected retention time for the ion to still be considered confirmed. + Units: minutes + Bounds: 0.000 - 0.100 + + + + + Gets a value indicating whether this Ion Ratio Confirmation is enabled. + + true if enable; otherwise, false. + + + + Gets the type of the windows. + + The type of the windows. + + + + Gets the qualifier ions. + + The qualifier ions. + + + + Method information for an Ion Ratio Test + + + + + Gets the Mass to be tested + + + + + Gets the Expected ratio + The ratio of the qualifier ion response to the quan ion response. + Range: 0 - 200% + + + + + Gets the Window to determine how accurate the match must be + The ratio must be +/- this percentage. + + + + + Read only access to Ion Ration Confirmation masses + + + + + Gets the smoothing data for the ion ratio peak calculation. + + The smoothing points. + + + + Gets the integration choice item. This is the only interaction + with m_integrationChoice. This class is only a place holder. Other + users of this class will fill this data item and use the settings. + + The integration choice item. + + + + Read only access to avalon setting + + + + + Count the number of timed (as opposed to initial) events + + + The number of timed events + + + + + Step past any initial events, and find the first time event + + + The node for the first timed event + + + + + Find the first event matching a specific event code + + + The code to search for + + + (returned) the number of the event in the list + + + The node containing the first event matching the supplied event code + + + + + Find the first event matching a specific event code and kind + + + Initial or timed version + + + The code to search for + + + (returned) the number of the event in the list + + + The node containing the first event matching the supplied event code + + + + + Gets the list of time events + + + + + read only access to Genesis Settings + + + + + Gets a value indicating whether to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the minimum width that a peak is expected to have (seconds) + if valley detection is enabled. The property is expressed as a window. + With valley detection enabled, + any valley points nearer than [expected width]/2 + to the top of the peak are ignored. + If a valley point is found outside the expected peak width, + Genesis terminates the peak at that point. + Genesis always terminates a peak when the signal reaches the baseline, + independent of the value set for the ExpectedPeakWidth. + + + + + Gets the percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the Signal To Noise Threshold. + A peak is considered ended if the following condition is met: + height <= (BaseNoise * SignalToNoiseThreshold)) + Where BaseNoise is the calculated noise on the fitted baseline, + and height is the height above baseline. + + + + + Gets the Tailing Factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the is true. + The valid range is 0.5 through 9.0. + + + + + Gets a value indicating whether Valley Detection is performed. This parameter must be set to true when performing base to base integration + + + + + Gets the Peak Signal To Noise Ratio Cutoff. + The peak edge is set to values below this defined S/N. + This test assumes an edge of a peak is found when the baseline adjusted height of the edge is less than + the ratio of the baseline adjusted apex height and the peak S/N cutoff ratio. + If the S/N at the apex is 500 and the peak S/N cutoff value is 200, + Genesis defines the right and left edges of the peak when the S/N reaches a value less than 200. + Range: 50.0 to 10000.0. + Technical equation:if height < (1/PeakSignalToNoiseRatioCutoff)*height(apex) => valley here + + + + + Gets the percentage of the valley bottom + that the peak trace can rise above a baseline (before or after the peak). + If the trace exceeds RisePercent, + Genesis applies valley detection peak integration criteria. + This method drops a vertical line from the apex of the valley between unresolved + peaks to the baseline. + The intersection of the vertical line and the baseline defines the end of the first + peak and the beginning of the second peak. + This test is applied to both the left and right edges of the peak. + The RisePercent criteria is useful for integrating peaks with long tails. + Useful range: 0.1 to 50 + + + + + Gets the S/N range is 1.0 to 100.0. for valley detection. + Technical equation:height(here +/- VALLEY_WIDTH) > ValleyDepth*SNR+height(here) => valley here + + + + + Gets a value indicating whether noise is calculated using RMS. + If not set, noise is calculated peak to peak. + + + + + Gets the Baseline Noise Tolerance which controls how the baseline is drawn in the noise data. + The higher the baseline noise tolerance value, + the higher the baseline is drawn through the noise data. + The valid range is 0.0 to 100.0 + + + + + Gets the minimum number of scans that Genesis uses to calculate a baseline. + A larger number includes more data in determining an averaged baseline. + The valid range is 2 to 100.0. + + + + + Gets the Baseline Noise Rejection Factor + This factor controls the width of the RMS noise band above and below the peak detection baseline + and is applied to the raw RMS noise values to raise the effective RMS noise during peak detection. + The left and right peak boundaries are assigned above the noise and, therefore, + closer to the peak apex value in minutes. + This action effectively raises the peak integration baseline above the RMS noise level. + Range: 0.1 to 10.0. + Default: 2.0. + + + + + Gets the number of minutes between background scan recalculations. + Baseline is refitted each time this interval elapses. + + + + + Gets the Base (minimum) Signal To Noise Ratio. + Peaks are rejected if they have a lower signal to noise ratio than this. + + + + + Gets the lowest acceptable percentage of the largest peak. + Do not return peaks which are less than this % of the highest peak above baseline. + + + + + Gets a value indicating whether to enable filtering of peaks by relative signal height + + + + + Read only access to ICIS Settings + + + + + Gets the number of scans in the baseline window. + Each scan is checked to see if it should be considered a baseline scan. + This is determined by looking at a number of scans (BaselineWindow) before + and after the a data point. If it is the lowest point in the group it will be + marked as a "baseline" point. + Range: 1 - 500 + Default: 40 + + + + + Gets a noise level multiplier. + This determines the peak edge after the location of the possible peak, + allowing the peak to narrow or broaden without affecting the baseline. + Range: 1 - 500 + Default multiplier: 5 + + + + + Gets a noise level multiplier (a minimum S/N ratio). + This determines the potential peak signal threshold. + Range: 1 - 1000 + Default multiplier: 10 + + + + + Gets a value indicating whether to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the Tailing Factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the ConstrainPeak is true. + The valid range is 0.5 through 9.0. + + + + + Gets the minimum number of scans required in a peak. + Range: 0 to 100. + Default: 3. + + + + + Gets the minimum separation in scans between the apexes of two potential peaks. + This is a criterion to determine if two peaks are resolved. + Enter a larger number in a noisy environment when the signal is bouncing around. + Range: 1 to 500. + Default: 10 scans. + + + + + Gets the number of scans on each side of the peak apex to be allowed. + Range: 0 to 100. + Default: 0 scans. + 0 specifies that all scans from peak-start to peak-end are to be included in the area integration. + + + + + Gets the number of scans past the peak endpoint to use in averaging the intensity. + Range: 0 to 100. + Default: 5 scans. + + + + + Gets a value indicating whether noise is calculated using an RMS method + + + + + Gets an enum which indicates how the ICIS peak detector determines which signals are noise. + The selected points can determine a noise level, or be fed into an RMS calculator, + depending on the RMS setting. + + + + + Read only access to integration settings + + + + + Gets Settings for Avalon integrator + + + + + Gets Settings for genesis integrator + + + + + Gets Settings for Icis integrator + + + + + Gets the choice of integrator to use + + + + + Read only access to Peak Purity Settings + + + + + Gets the % of the detected baseline for which we want to compute PeakPurity + + + + + Gets a value indicating whether we want to compute Peak Purity + + + + + Gets a value indicating whether we want to use + the enclosed wavelength range, not the total scan + + + + + Gets the high limit of the scan over which to compute + + + + + Gets the low limit of the scan over which to compute + + + + + Gets the max of a scan must be greater than this to be included + + + + + Read only access to Peak Location Settings + + + + + Gets a value indicating whether the retention time should be adjusted based on a reference peak. + + + + + Gets the expected time, as in the method (before any adjustments) + + + + + Gets a value which determine how a single peak is found from the list of + returned peaks from integrating the chromatogram. + For example: Highest peak in time window. + + + + + Gets the window, centered around the peak, in minutes. + The located peak must be within a window of expected +/- width. + + + + + Gets the baseline and noise window. + This setting is used to restrict the chromatogram. + Only scans within the range "adjusted expected RT" +/- Window are processed. + For example: a 1 minute window setting implies 2 minutes of data. + + + + + Gets the settings for finding a peak based on spectral fit + + + + + Gets the signal to noise rejection parameter for peaks + + + + + Read only access to find results + + + + + Gets the scan number for this result + + + + + Gets the scan number predicted for this peak + + + + + Gets the retention time of the peak which has been found + + + + + Gets the score based on both forward and reverse matching factors + + + + + Gets score from forward search + + + + + Gets score from reverse search + + + + + Gets the intensity of the supplied chromatogram at this result + + + + + Gets score from Match algorithm. + + + + + Gets the peak found for this result + + + + + Read only access to + + + + + Gets the forward threshold for find algorithm. + + + + + Gets the match threshold for find algorithm + + + + + Gets the reverse threshold for find algorithm + + + + + Gets the spec points. + + The spec points. + + + + Get a copy of the find spectrum + + + The spectrum to find + + + + + Read only access to instrument data + + + + + Gets or sets the name of the instrument + + + + + Gets or sets the model of the instrument + + + + + Gets or sets the serial number of the instrument + + + + + Gets or sets the software version of the instrument + + + + + Gets or sets the hardware version of the instrument + + + + + Gets or sets the names of the channels, for UV or analog data. + + + + + Gets or sets the units of the Signal, for UV or analog + + + + + Gets or sets the flags. + The purpose of this field is to contain flags separated by ';' that + denote experiment information, etc. For example, if a file is acquired + under instrument control based on an experiment protocol like an ion + mapping experiment, an appropriate flag can be set here. + Legacy LCQ MS flags: + 1. TIM - total ion map + 2. NLM - neutral loss map + 3. PIM - parent ion map + 4. DDZMAP - data dependent zoom map + + + + + Gets or sets the device suggested label of X axis + + + + + Gets or sets the device suggested label of Y axis (name for units of data, such as "°C") + + + + + Gets or sets a value indicating whether any other properties in this interface contain valid data. + This is to support legacy files only. Early versions of the raw file did not have "instrument data", + Data migration to current formats is automatic in raw file reading tools, + leading to a data structure being returned to a caller with "all defaults" and "empty strings" + plus the IsValid set to false. + + + + + The filter rule. + A scan filter has a list of rules to apply. + + + + + Apply the meta filter. + + + + + Apply the data dependent On filter. + + + + + Apply the data dependent Off filter. + + + + + Apply the supplemental activation filter. + + + + + Apply the multi state activation filter. + + + + + Apply the wideband filter. + + + + + Apply the polarity filter. + + + + + Apply the scan data filter. + + + + + Apply the ionization mode filter. + + + + + Apply the corona filter. + + + + + Apply the lock filter. + + + + + Apply the field free region filter. + + + + + Apply the ultra filter. + + + + + Apply the enhanced filter. + + + + + Apply the parameter a filter. + + + + + Apply the parameter b filter. + + + + + Apply the parameter f filter. + + + + + Apply the multi notch filter. + + + + + Apply the multiple photon dissociation filter. + + + + + Apply the parameter v filter. + + + + + Apply the parameter R filter. + + + + + Apply the electron capture dissociation filter. + + + + + Apply the photo ionization filter. + + + + + Apply the source fragmentation filter. + + + + + Apply the source fragmentation type filter. + + + + + Apply the compensation voltage filter. + + + + + Apply the compensation volt type filter. + + + + + Apply the detector filter. + + + + + Apply the mass analyzer type filter. + + + + + Apply the sector scan filter. + + + + + Apply the turbo scan filter. + + + + + Apply the scan mode filter. + + + + + Apply the multiplex filter. + + + + + Apply The MS order filter. + + + + + Apply the scan type index filter. + + + + + Apply the accurate mass filter. + + + + + For advanced data LT/FT formats only. It currently uses for exporting mass spec data to raw file. + This will typically be used from an application. + + + + + Gets the noise data + + + + + Gets the frequencies. + The values are for computing mass from frequency during exporting mass spec on compressing. + + + + + Gets the centroid data (label peaks) information. Only FT type packets have label peaks, others no. + + + + + Provides methods to write Analog devices data. + Note: The following functions should be called before acquisition begins: + 1. Write Instrument Info + 2. Write Instrument Expected Run Time + 3. Write Status Log Header + If caller is not intended to use the status log data, pass a null argument or zero length array. + ex. WriteStatusLogHeader(null) or WriteStatusLogHeader(new IHeaderItem[0]) + + + + + Writes the Analog instrument data and index into the disk. This is the + simplest format of data we write to a raw file. + + The Analog instrument data. + Index of the Analog instrument scan (scan header). + True if scan data and index are written to disk successfully, False otherwise + + + + Defines the instrument data index for analog type devices + + + + + Gets the number of channels. + + + + + The auto sampler tray shape. + + + + + Vials or wells are arranged in a rectangle on the tray + + + + + Vials are arranged in a circle. + + + + + Vials are staggered on odd numbered positions on the tray. + + + + + Vials are staggered on even numbered positions on the tray. + + + + + The layout is unknown. + + + + + The layout information is invalid. No other tray layout data should be displayed. + + + + + The AutoSamplerInformation interface. + + + + + Gets or sets the tray index, -1 for "not recorded" + + + + + Gets or sets the vial index, -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray. + -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray, across the tray. + -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray, down the tray. + -1 for "not recorded" + + + + + Gets or sets the shape. + If this property returns "Invalid", no other values in this object + contain usable information. + Invalid data can occur for older raw file formats, before auto sampler data was added. + + + + + Gets the tray shape as a string + + + + + Gets or sets the tray name. + + + + + Provides methods to write common device information + 1. Instrument information + 2. Instrument expected run time + 3. Status log header + 4. Status log + 5. Error log + + + + + Writes the instrument comments. + These are device run header fields - comment1 and comment2. They are part of the Chromatogram view title (Sample Name and Comment). + These fields can be set only once. + + The comment1 for "Sample Name" in Chromatogram view title (max 39 chars). + The comment2 for "Comment" in Chromatogram view title (max 63 chars). + True if comment1 and comment2 are written to disk successfully, false otherwise. + + + + Write the Instrument ID info to the raw data file. The + Instrument ID must be written to the raw file before any data can be + acquired. + + The instrument identifier. + True if instrument id is written to disk successfully, False otherwise + + + + Write the expected run time. All scanning devices must do this so + that the real-time update can display a sensible Axis. + A device of type "Other" has no scans, and so this + is optional information in that case. + + The run time. + True if expected run time is written to disk successfully, False otherwise + + + + Write the Status Log Header (format) info to the raw data file. + If caller is not intended to use the status log data, pass a null argument or zero length array. + ex. WriteStatusLogHeader(null) or WriteStatusLogHeader(new IHeaderItem[0]) + + The log header. + True if status log header is written to disk successfully, False otherwise + + + + If any Status Log details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The retention time. + The status data stores in byte array. + True if status log entry is written to disk successfully, False otherwise + + + + If any Status Log details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The retention time. + The data stores in object array. + True if status log entry is written to disk successfully, False otherwise + + + + Write an error log to the raw data file. + + The retention time. + The error log. + True if error log entry is written to disk successfully, False otherwise + + + + Defines the base format for a instrument data index. + + + + + Gets the start time. + + + + + Gets the tic. + + + + + Data ready to be written to a raw file, with most values in byte array format. + Note that scan statistics is provided as an in interface, as properties need to be inspected + in order to write the binary data + + + + + Get the definition of how the analyzer is scanned + + + + + Gets general information about about this scan + + + + + gets all data ro record for a scan + + + + + for certain formats, gets additional index record count + + + + + gets Index records for some profile formats + + + + + Read only access to calibration curve + + + + + Gets the fitted line + + + + + Gets the included replicates from current sequence data + + + + + Gets the excluded replicates from current sequence data + + + + + Gets the included replicates from previously acquired data + + + + + Gets the excluded replicates from previously acquired data + + + + + Gets the RSquared value from the regression calculation (-1 if not valid) + + + + + Gets the equation text from the regression calculation. + + + + + Gets the percentage coefficient of variance from the first calibration level. + + + + + Gets the percentage relative standard deviation from the first calibration level. + + + + + Gets a value indicating whether the fitted line is empty + The curve data needs to be plotted as appropriate for + an internal standard: Centered on the set of points, + + + + + Read only access to a calibration curve point + + + + + Gets the amount (x) on calibration curve + + + + + Gets the response (y) for the amount + + + + + Gets the a key to identify this point. For example, a file name. + + + + + Gets the a second key to identify this point. For example, a compound name. + + + + + Read only access to centroid stream + + + + + Gets the scan Number + + + + + Gets the number of centroids + + + + + Gets the coefficients count. + + + + + Gets the calibration Coefficients + + + + + Gets resolution of each peak + + + + + Gets the list of baseline at each peak + + + + + Gets the list of noise level near peak + + + + + Gets the list of charge calculated for peak + + + + + Gets the flags for the peaks (such as reference) + + + + + Get the data as one object per peaks. + Note: This may copy data into an array on each call, and should therefore + not be called multiple times on the same scan, for performance reasons. + + + The array of . + + + + + The ChromatogramBatchGenerator interface. + Defines a way for an application to request multiple chromatograms. + + + + + Generate chromatograms, returning the in progress tasks, + which are processing the chromatograms. + This permits async generation of chromatograms. + This method returns after all required scan data has been + read, and all work to process the chromatograms is queued. + + + The chromatogram deliveries. + These define the chromatogram settings, and a callback which will occur + as soon as the data for that chromatogram is ready. + + + The in progress tasks. Assuming the result is saved as "taskList" Use "Task.WaitAll(taskList)" + to wait for processing of these chromatograms to complete. + + + + + Gets or sets a value indicating whether the chromatograms have a strict time range. + By default, the retention time range of a chromatogram is considered as a "display range", + such that the first value before the range, and the first value after the range is included + in the data, permitting a continuous line, if plotted, to the edge of the time window. + If this property is true, then only points which are within the supplied RT range are returned. + + + + + Gets or sets the number of consumer threads to make. + In other words: The maximum number of chromatograms the caller will + be given to process in parallel. + Default: Environment.ProcessorCount + + + + + Gets or sets the maximum work backlog, which controls how much + work is kept in the pipeline, waiting for consumer threads to become available. + Suggested default: 10. + Setting a larger value will cause data reading from a raw file to be completed earlier, + but at the expense of more memory overheads. + + + + + Gets or sets the scan reader. + Given a scan number, + Return the spectral data and scan event + + + + + Gets or sets the parallel scan reader. + If null, then ScanReader will always be used. + Given a scan number, + Return the spectral data and scan event + + + + + Gets or sets the available scans. + + + + + Gets or sets a value indicating whether accurate precursor mass testing is done. + If not: a tolerance of 0.4 AMU is used. + All data dependent tests are done with 0.4 AMU tolerance. + + + + + Gets or sets the precision (decimal places). + If set to "-1" (default) then the precision values must be + set individually (in the scan selectors) + + + + + Gets or sets the scan events interface, which can be used to optimize filtering, if provided. + This interface may be obtained from IRawDataPlus (ScanEvents property). + + + + + Interface to return base peak data with a chromatogram. + + + + + Gets Base Peak masses for each chromatogram + + + + + Defines data read for a set of chromatograms + First index = chromatogram number. + Second index = data value within chromatogram. + + + + + Gets Times in minutes for each chromatogram + + + + + Gets Scan numbers for data points in each chromatogram + + + + + Gets Intensities for each chromatogram + + + + + Gets The number of chromatograms in this object + + + + + Extended chromatogram data: Includes base peak information. + For PDA data: Base value is "Wavelength of max" for a "spectrum max" chromatogram. + + + + + The ChromatogramDelivery interface. + This permits a caller to request a chromatogram, + and have a method called, when the chromatogram is ready. + + + + + Gets the request. Parameters for the chromatogram. + + + + + The method to call when the chromatogram is generated. + + + The generated chromatogram. + + + + + Defines how data for a given mass range is included + in a chromatogram. + + + + + Gets or sets a value indicating whether all data + in the scan is used, or just a mass range. + + + + + Gets or sets the scale. + This can be 1 to "add data in a mass range" or + -1 to "subtract data a mass range", + or any other value to apply scaling to a range. + + + + + Gets or sets the mass range. + If an application has a center mass +/ tolerance, + then it a setter in a derived object could be used to convert to + a range of mass. + + + + + Gets or sets the rule for how a chromatogram point is created from a mass range. + + + + + Find the data for one scan. + + + The scan, including header and scan event. + + + The chromatogram point value for this scan. + + + + + The chromatogram point mode. + How a chromatogram point is calculated from data in a mass range. + + + + + Sum all intensities in a mass range + + + + + Get the max intensity in a mass range + + + + + Get the mass of the largest intensity value in the mass range + + + + + Neutral fragment: + When the low mass value is negative: + This scan's Parent mass is added to both low and high, to make a mass range. + which will represent "parent - a given neutral fragment". + When the low mass value if positive, the mass range is not adjusted, as this has been + already calculated as "filter mass - neutral fragment mass". + Typically: This can be used with a filter of "MS2", to get + a neutral fragment chromatogram, for all MS/MS data which has a given fragment. + + + + + The ChromatogramRequest interface. + Defines how chromatogram data is created from a set of scans + + + + + Gets a value indicating whether this point type needs "scan data". + This value may not change, but the current compiler does not permit a "read-only" tag. + If all request for one file return false, the code can save time by never reading scan data. + In any request that returns "false" from this, the ValueForScan should not access the "Data" property of the supplied scan. + + + + + Gets the retention time range. + Only scans within this range are included. + + + + + Gets the scan selector, which determines if a scan is in the chromatogram, or not + + + + + Gets the value for scan. + This function returns the chromatogram value for a scan. + For example: An XIC from the scan data. + Can use values from the scan data or index. + + + The scan. + + + The chromatogram value of this scan. + + + + + Settings required to read a chromatogram from a data stream + + + + + Gets the detector delay + + + + + Gets A text definition of the scan filter + + + + + Gets the Neutral fragment mass + + + + + Gets a value indicating whether to Include reference peaks in the chromatogram + + + + + Gets the Number of mass ranges + + + + + Gets the Mass ranges + + + + + Gets a value which determines where the chromatogram comes from (TIC, mass range) etc. + + + + + The Chromatogram Settings Extended interface, for platform 3.0 raw files. + + + + + Gets or sets the compound names. + + + + + Read-only access to a chromatogram + + + + + Gets the times. + + The signal times. + + + + Gets the intensities. + + The signal intensities. + + + + Gets the signal scans. + + The signal scans. + + + + Gets the base peak masses. + + The base peak masses. + + + + Gets the time at the end of the signal + + + + + Gets the time at the start of the signal + + + + + Gets the number of points in the signal + + + + + Gets a value indicating whether there is any base peak data in this signal + + + + + Test if this is valid data (arrays are same length) + + True if this is valid data + + + + This inteface extends the functions of "auto filter". + methods are called to construct a list of filters based on internal data + of the class which implements this. Inital data is, for example, + the results of "auto filter" on a raw file. + The list can be searched for "items matching a given filter rule". + + + + + Gets the results of the enhanced auto filter. + these results are initailly empty, and et extended + as "Add" methods are called. + + + + + Searches for the activation types used. + Adds "Activation type" to the list, for MS/MS data (MS2 or above). + This can find CID, HCD, ETD, UVPD + + + + + Adds the "empty filter" to the list. + + + + + Adds "ms order filters" to the list + this includes ms, ms2 etc up to ms5 + if any ms/ms is found msn is also added. + + When true (default): if any ms/ms is found msn is also added. + + + + Add all unique filter groups (auto filter). + + If this is not empty: The filters must all contan this sub-filter. + For example "d" for "only return data dependent" + + + + Merge filters which differ only by CV. + Because there is no speciic CV value, the merged filters will not show + the code CV. + + + + + Gets or sets a value indicating whether compound names shoud be included. + This only has an effect if the "Name" property is set for at least one filter. + Results which have names are shown in sorted (alpha) order. + Any other filters, which do not have a name, are then added after the + named items, in the original "auto filter" order. + If a name appaers for more than one filter, then an entry is created + which only contains a compound name, such that a chromatogram + can be created based on all data identified for that compound. + Note that this "name only" list is excluded when a "unique filter list" is + requested with a specific subset filter. + + + + + Gets or sets a separator which appears between a compound name and a filter. + + + + + The ErrorLogEntry interface. + + + + + Gets the retention time. + + + + + Gets the error message. + + + + + Additional data about a scan. + This data may include Transients (raw detector data) and other instrument specific data blocks. + + + + + Gets the header for the extended data. The format of this is instrument specific. + + + + + Gets the transient data for this scan, in an instrument specific (unknown) format. This may be very large. + Fo performance reasons: Applications should not attempt to access this, unless needed by an algorithm. + Note that this is not commonly included in raw files. + + + + + Gets additional data blocks for a scan. + + + + + Defines a block of instrument specific data + + + + + Get the block header, which needs to be decoded as defined by the instrument. + This will identify the meaning of the data. + + + + + Gets the data within this block + + + + + Defines a transient segment for a scan + + + + + Gets the transient segment header, which need to be used by instrument specific code. + This header is defined as "32 1 bit flags" and not a countable (integer) value. + + + + + Gets the transient data, as defined for the instrument. + + + + + Interface to retrieve error messages, which have been + trapped by the underlying file reader. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + Applications should not continue with processing data from any file which indicates an error. + + + + + Gets a value indicating whether this file has detected a warning. + If this is false: Other warning properties in this interface have no meaning. + + + + + Gets the error code number. + Typically this is a windows system error number. + The lowest valid windows error is: 0x00030200 + Errors detected within our files will have codes below 100. + + + + + Gets the error message. + For "unknown exceptions" this may include a stack trace. + + + + + Gets the warning message. + + + + + RawFile Classification + + + + + The indeterminate. + + + + + The standard raw. + + + + + The master scan number raw. + + + + + The type of the file. + + + + + The unknown file type + + + + + The experiment method + + + + + The sample list (sequence) + + + + + The processing method + + + + + The raw file + + + + + The tune method + + + + + The results file + + + + + The Quan file + + + + + The calibration file + + + + + The instrument method file + + + + + The XQN file + + + + + The layout file (may be combined with other file type) + + + + + The method editor layout + + + + + The sample list editor layout + + + + + The processing method edit layout + + + + + The Qual Browser layout + + + + + The tune layout + + + + + The results layout + + + + + Information available from Xcalibur file headers.. + + + + + Gets or sets the creator Id. The creator Id is the full text user name of the user + when the file is created. + + + + + Gets or sets the creator Login name. + The creator login name is the user name of the user + when the file is created, as entered at the "user name, password" screen in windows. + + + + + Gets or sets the creator Id. The creator Id is the full text user name of the user + when the file is created. + + + + + Gets or sets the creator Login name. + The creator login name is the user name of the user + when the file is created, as entered at the "user name, password" screen in windows. + + + + + Gets or sets the type of the file. + If the file is not recognized, the value of the FileType will be set to "Not Supported" + + + + + Gets or sets the file format revision + Note: this does not refer to revisions of the content. + It defines revisions of the binary files structure. + + + + + Gets or sets the file creation date. + + + + + Gets or sets the modified date. + File changed audit information (most recent change) + + + The modified date. + + + + + Gets or sets the number of times modified. + + + The number of times the file has been modified. + + + + + Gets or sets the number of times calibrated. + + + The number of times calibrated. + + + + + Gets or sets the file description. + User's narrative description of the file, 512 unicode characters (1024 bytes) + + + The file description. + + + + + Subset of the IFileHeader interface, it's for restricting + changes to the file header object during raw file creation. + This will prevent errors, such as changing the FileType to other + instead of RawFile and Revision # to 0 instead of 66 (file struct version). + This would allow application to change the creator name/id and file + description values, instead of the default value. + The current default values for: + File description = string.Empty + WhoCreatedId = Environment.UserName (who is currently logged on to the Wins) + WhoCreatedLogon = Environment.UserName + + + + + Gets the creator Id. The creator Id is the full text user name of the user + when the file is created. + + + + + Gets the creator Login name. + The creator login name is the user name of the user + when the file is created, as entered at the "user name, password" screen in windows. + + + + + Gets the file description. + User's narrative description of the file, 512 unicode characters (1024 bytes) + + + The file description. + + + + + The FilteredScanIterator interface. + + + + + Gets the string form of the filter which was used to construct this iterator + + + + + Gets the previous scan number, which matches the filter. + Returns 0 if there is no open file. + If there are no additional scans matching the filter, returns -1. + + + + + Gets the next scan number, which matches the filter. + Returns 0 if there is no open file. + If there are no additional scans matching the filter, returns -1. + + + + + Sets the iterator's position. + This scan number does not have to match the given filter. + This can be used to find next or previous matching scan, from a given scan. + Assuming the first scan is 1, a value of 0 will reset the iterator to + start of file. + A value of "Last scan number +1" can be used to reset to + iterate backwards from the end of the file. + + + + + Gets a value indicating whether there are possible previous scans before the current scan. + This does not guarantee that another matching scan exists. It simply tests that the current iterator position + is not the first scan in the file. + + + + + Gets a value indicating whether there are possible next scans after the current scan. + This does not guarantee that another matching scan exists. It simply tests that the current iterator position + is not the last scan in the file. + + + + + Defines a combination of plain text and interface defintions of filters. + + + + + Gets a Standard (parsable) text form of the filter. This does not include any compound names. + + + + + Gets the scan filer (as accessable fields) + + + + + Gets a value indicating whether this object only has a compound name, + and does not have any filter text or filter interface defined. + When this is set: Only the Name property should be used. + + + + + Gets the compound name + + + + + Gets a string which combines the compound name and the filter text. + + + + + Defines the format of a log entry, including label (name of the field), data type, and numeric formatting. + + + + + Gets or sets the data type for the header item. + ex. Char, TrueFalse, YesNo, UShort, Long, etc. + + + The type of the data. + + + + + Gets or sets the header label. + + + The label. + + + + + Gets or sets the precision, if the data type is float or double, + or string length of string fields. + + + The string length or precision. + + + + + Gets or sets a value indicating whether a number should be displayed in scientific notation. + + + true if this instance is scientific notation; otherwise, false. + + + + + Interfaces to read an instrument method from a raw file and to export it + to a file. + + + + + Export the instrument method to a file. + Because of the many potential issues with this, use with care, especially if + adding to a customer workflow. + Try catch should be used with this method. + Not all implementations may support this (some may throw NotImplementedException). + .Net exceptions may be thrown, for example if the path is not valid. + Not all instrument methods can be exported, depending on raw file version, and how + the file was acquired. If the "instrument method file name" is not present in the sample information, + then the exported data may not be a complete method file. + Not all exported files can be read by an instrument method editor. + Instrument method editors may only be able to open methods when the exact same list + of instruments is configured. + Code using this feature should handle all cases. + + + The output instrument method file path. + + + Force over write. If true, and file already exists, attempt to delete existing file first. + If false: UnauthorizedAccessException will occur if there is an existing read only file. + + True if the file was saved. False, if no file was saved, for example, + because there is no instrument method saved in this raw file. + + + + Gets names of all instruments, which have a method stored in the raw file's copy of the instrument method file. + These names are "Device internal names" which map to storage names within + an instrument method, and other instrument data (such as registry keys). + Use "GetAllInstrumentFriendlyNamesFromInstrumentMethod" to get display names for instruments. + + + The instrument names. + + + + + Gets a value indicating whether the underlying raw file has instrument method. + + + + + Gets the errors. + + + + + Gets a value indicating whether any error occurred at open/read the raw file. + + + + + Interface to read an instrument method (meth) file. + + + + + Gets the file header for the method + + + + + Gets the data for of all devices in this method. + Keys are the registered device names. + A method contains only the "registered device name" + which may not be the same as the "device display name" (product name). + Instrument methods do not contain device product names. + + + + + Gets the file error state. + + + + + Gets a value indicating whether the last file operation caused a recorded error. + If so, there may be additional information in FileError + + + + + + Gets a value indicating whether a file was successfully opened. + Inspect "FileError" when false + + + + + This interface permits access data for a particular instrument in an instrument method. + + + + + Gets the plain text form of an instrument method + + + + + Gets all streams for this instrument, apart from the "Text" stream. + Typically an instrument has a stream called "Data" containing the method in binary or XML. + Other streams (private to the instrument) may also be created. + + + + + Provides methods to create/update an instrument method file. + Instrument method file contains one or more device methods. Each device creates + create its own storage (here's called Device Method) for storing device specific information. + ---- + Existing layout of an instrument method file. + Instrument Method File + --- + --- Device Methods + --- + SIIXcalibur (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + SimulationMS (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + TNG-Calcium (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + Header (Method stream - byte array) + ---- + Example of creating an instrument method file: + 1. Create a new instrument method file with an input file name (The writer will create a "Named" in-memory instrument method file.) + writer = InstrumentMethodWriterFactory.CreateInstrumentMethodWriter("NewInstrumentMethodFileName.meth"); + -- + writer.UpdateFileHeaderDescription("A new instrument method file."); + -- + -- Calls the "GetDevices" method to get an empty list of devices (a dictionary object). + -- Once you receive the list, you can start adding new device method. + devices = writer.GetDevices(); + -- + -- Create a device method object (IDeviceMethod) + newDeviceMethod = DeviceMethodFactory.CreateDeviceMethod(); + -- + -- Adds method streams - Text, Data, etc. + -- Call the "GetStreamBytes" method to get an empty list of streams (a dictionary object). + -- Once you receive the list, you can start adding new method stream. + -- + newStreams = newDeviceMethod.GetStreamBytes(); + newStreams.Add("Text", stream value in byte array); + newStreams["Data"] = stream value in byte array; + -- + -- Here's a shortcut for adding a "Text" stream, use the "MethodText" property. + newDeviceMethod.MethodText = "Test string."; + -- + -- adds the newly created device method to the list of devices. + devices.Add(name, newDeviceMethod); + -- + -- persists the data to a file. The file name is given during the writer creation. + writer.Save(); + + + + + Gets a value indicating whether this instrument method file has detected an error. + + + + + Gets the error message. + + + + + Gets the instrument method file name. + + + + + Gets the file header for the instrument method file + + + + + Updates the file header field - "Description". + + The description. + + + + Update the instrument method file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + A default FileHeader is created with every new writer instance. + Possible to only update creator and user values. + + + The file header object with values to use. + + + + + Get the list of device methods which are currently defined in this instrument method. + Returns an empty list, if this is a newly created instrument method. + --- + In order to add/update device method, caller should first call this to get the list of devices. + Once you've the list, you can start adding a new device method or editing/removing an existing device method. + + The list of device methods. + + + + Saves the instrument methods to the file. + If this is an "Unnamed" instrument method writer, caller should use "SaveAs" method with the output + file name; otherwise ArgumentNullException will be thrown. + + True if save successfully; otherwise false. + name;@The name cannot be empty. + + + + Save this instrument methods to a file. + It should overwrite the instrument methods file if the file exists; otherwise, a + new file should be created. + + File name of the instrument method. + True if save successfully; otherwise false. + name;@The name cannot be empty. + + + + Provides functions to create/update a device method. + The device methods are for each configured instrument and stored in instrument method file. + Each device method contains two or more streams. + One calls "Data", stores a private representation of the method, in a binary or XML format. + Second calls "Text, stores an Unicode text description of the method. + Other streams may also be created, that are private to the device, i.e. TNG-Calcium has "Header" stream. + Format: + TNG-Calcium (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + Header (Method stream - byte array) + + + + + Gets or sets the "Text" plain text (unicode) form of an device method. + This property provides a shortcut to get/set the "Text" stream. + Accessing the property, returns empty string if the "Text" stream does not exist; otherwise, it will retrieve the stream + from the StreamBytes list. + Updating the property, overwrite the existing content of the "Text stream if it already exists; otherwise, it + will add the "Text" stream to the StreamBytes list. + + + + + Gets all stream data names for this device storage. + Typically an instrument has a stream called "Data" containing the method in binary or XML + and "Text" contains the plain text form of the method. + Other streams (private to the instrument) may also be created. + --- + In order to add/update the stream, caller should first call this to get the list of streams. + Once you've the list, you can start adding a new stream or editing/removing an existing method stream. + --- + If the stream is set to null, during the save operation, it'll save as zero length stream. + + Device stream names + + + + Provides methods to write mass spec device data. + The "PrepareForRun" method should be called during the prepare for run state, before the data acquisition begins. + The rest of the methods will be used for data logging. + + + + + Gets a value indicating whether the PrepareForRun method has been called. + + True if the PrepareForRun method has been called; otherwise, false. + + + + + This method should be called (when creating an acquisition file) during the "Prepare for run" state. + It may not be called multiple times for one device. It may not be called after any of the data logging calls have been made. + It will perform the following operations: + 1. Write instrument information + 2. Write run header information + 3. Write status log header + 4. Write trailer extra header + 5. Write tune data header + 6. Write run header information - expected run time, comments, mass resolution and precision. + 7. Write method scan events. + + The instrument ID. + The generic data headers. + The run header information. + Method scan events + True if all the values are written to disk successfully, false otherwise. + + + + Write an error log to a raw file. + + The retention time. + The error log. + True if error log entry is written to disk successfully, False otherwise + + + + If any Status Log details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The retention time. + The status data stores in byte array. + True if status log entry is written to disk successfully, False otherwise + + + + If any Status Log details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The retention time. + The data stores in object array. + True if status log entry is written to disk successfully, False otherwise + + + + If any trailer extra details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the object array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The trailer extra data stores in object array. + True if trailer extra data is written to disk successfully, False otherwise + + + + If any Trailer Extra details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The trailer extra data stores in byte array. + True if trailer extra entry is written to disk successfully, False otherwise + + + + If any tune details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the object array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The tune data stores in object array. + True if tune data is written to disk successfully, False otherwise + + + + If any tune data details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The tune data stores in byte array. + True if tune data entry is written to disk successfully, False otherwise + + + + This method is designed for exporting mass spec scanned data to a file (mostly used by the Application). + It converts the input scanned data into the compressed packet format and also generates a profile index + if needed by the specified packet type. + Overall, it writes the mass spec data packets, scan index (scan header) and trailer scan event if it is provided, + to a file. + This method will branch to the appropriate packet methods to compress the data block before being written to disk. + + The transferring data that are going to be saved to a file. + True if mass spec data packets are written to disk successfully; false otherwise. + + + + This method is designed for mass spec device data writing. + To provide fast data writing, this method writes the mass spec data packets directly to file (without performing + any data validation and data compression) by the specified packet type. + All data validation and data compression currently are done in the instrument driver. + + The binary block of data to write. + Type of the packet. + True if mass spec data packets are written to disk successfully, false otherwise. + + + + This method is designed for mass spec device data writing. + It writes the mass spec scan index (a.k.a scan header) and trailer scan event (if it's available) to the disk. + + Index of the mass spec scan. + The trailer scan event [optional]. + True if scan index and trailer scan event (if it's available) are written to disk successfully, false otherwise. + + + + The IMassSpecGenericDataHeaders interface which contains the generic headers definitions that are going to be written to a raw file. + If caller is not intended to use any one of these headers, caller should either pass a null argument or zero length array. + i.e. TrailerExtraHeaders = null or TrailerExtraHeaders = new IHeaderItem[0] + + + + + Gets the trailer extra headers. + + + The trailer extra headers. + + + + + Gets the status log headers. + + + The status log headers. + + + + + Gets the tune headers. + + + The tune headers. + + + + + Information about the mass spec device data stream. + + + + + Gets or sets the expected run time. + The expected run time. All devices MUST do this so that the real-time update can display a sensible Axis. + + + The expected run time. + + + + + Gets the mass resolution (width of the half peak). + Optional field, it has a default value of 0.5. + + + The mass resolution. + + + + + Gets the first comment about this data stream. + Optional field, it has a default value of empty string. + The comment is for "Sample Name" in Chromatogram view title (max 39 chars). + + + The comment1. + + + + + Gets the second comment about this data stream. + Optional field, it has a default value of empty string. + This comment is for "Comment" in Chromatogram view title (max 63 chars). + + + The comment2. + + + + + Gets the number of digits of precision suggested for formatting masses. + Optional field, it has a default value of 2. + + + The precision. + + + + + Binary (byte array) data from the generic headers of a mass spectrometer. + + + + + Packed trailer extra headers + + + + + Packed status log headers + + + + + Packed tune headers + + + + + Defines access to data which can be written to an MS instrument, for one scan. + This format will typically be used from an application. + + + + + Gets the event data. + + + + + Gets the statistics data. + + + + + Gets the scan data. + + + + + Gets the noise data. + + + The noise data. + + + + + Gets the centroid data, it's a second stream with profile scan. + + + The centroid data. + + + + + Gets the frequencies (for LT/FT). + + + The frequencies. + + + + + Defines noise from FT profile + + + + + Gets or sets the mass + + + + + Gets or sets the noise + + + + + Gets or sets the baseline + + + + + Provides methods to log information from "other" devices. + That is: devices which have no scan data, just status (diagnostics) or errors. + For example: pump pressure, sampled every second. + Note: The following functions should be called before acquisition begins: + 1. Write Instrument Info + 2. Write Instrument Expected Run Time + 3. Write Status Log Header + If caller is not intended to use the status log data, pass a null argument or zero length array. + ex. WriteStatusLogHeader(null) or WriteStatusLogHeader(new IHeaderItem[0]) + + + + + Data for a scan, converted into byte arrays + + + + + Gets or sets the converted scan event + + + + + Gets or sets the converted scan stats + + + + + Gets or sets the converted scan data + + + + + Gets the number of profile index records + + + + + Gets the profile index records + + + + + Provides methods to write PDA type devices data. + Note: The following functions should be called before acquisition begins: + 1. Write Instrument Info + 2. Write Instrument Expected Run Time + 3. Write Status Log Header + If caller is not intended to use the status log data, pass a null argument or zero length array. + ex. WriteStatusLogHeader(null) or WriteStatusLogHeader(new IHeaderItem[0]) + + + + + Writes both the PDA instrument data and index into the disk. This is the + simplest format of data we write to a raw file. + + The PDA instrument data. + Index of the PDA instrument scan. + True if scan data and index are written to disk successfully, False otherwise + + + + Defines the scan header for PDA + + + + + Gets the long wavelength. + For UV device only, it will be ignored by Analog devices + + + + + Gets the short wavelength. + For UV device only, it will be ignored by Analog devices + + + + + Gets the wave length step. + + + + + Gets the Absorbance Unit's scale. + + + + + Interface to read a processing method (PMD) file. + + + + + Gets the file header for the processing method + + + + + Gets the file error state. + + + + + Gets a value indicating whether the last file operation caused an error + + + + + + Gets a value indicating whether a file was successfully opened. + Inspect "FileError" when false + + + + + Gets some global settings from a PMD + These settings apply to all components in the quantitation section. + Some settings affect qualitative processing. + + + + + Gets the "Standard report" settings from a processing method + + + + + Gets peak detection settings (Qualitative processing) + + + + + Gets Spectrum Enhancement settings (Qualitative processing) + + + + + Gets options for NIST library search + + + + + Gets constraints for NIST library search + + + + + Gets the list of reports + + + + + Gets the list of programs + + + + + Gets the list of reports + + + + + Gets additional options about the peak display (peak labels etc). + + + + + Gets setting for PDA peak purity + + + + + Gets the list of compounds. + This includes all integration, calibration and other settings + which are specific to each component. + + + + + Gets the raw file name, which was used to design this method + + + + + Gets or sets the (global) mass tolerance and precision settings for the method. + When reading a file "get" will return the values saved in a PMD + Set can be used to override values, such that when a filter + is presented as text, alternative (detector) mass precision is used. + + + + + Gets the "View type" saved in a PMD file + + + + + Possible ways in which calibration standards are used + + + + + Internal standards (in the same raw file) + + + + + External standards (in a different raw file) + + + + + Determines whether calibration is performed on concentration or amount + + + + + Calibrate using concentration + + + + + Calibrate using amount + + + + + View to show when opening a PMD file. + Part of PMD file data, but may not be currently used + + + + + Show method summary + + + + + Show component identification + + + + + Show calibration review + + + + + Show peak detection + + + + + Possible types of chromatography + + + + + Gas Chromatography + + + + + Liquid Chromatography + + + + + Determines reporting unit of concentration + + + + + Report as concentration + + + + + Report as amount + + + + + Determines how void time is calculated. + + + + + A specific time is entered for void time + + + + + First qualitative peak defines void time + + + + + This interface permits reading of the "Options" structure + from an Xcalibur processing method. + + + + + Gets a value indicating whether the standards are internal or external. + + + + + Gets a value indicating whether calibration is performed on concentration or amount + + + + + Gets a value determining how void time is calculated. + + + + + Gets a value determining whether amounts or concentrations are reported. + + + + + Gets a value determining how chromatography was performed. + + + + + Gets a value indicating whether outliers (on a cal curve) should be rejected. + + + + + Gets the added time of void volume, where void time is set to "Value" + + + + + Gets the permitted % deviation from an expected standard amount. + + + + + Gets the search window for the expected time of a peak. + + + + + Gets the minimum number of expected scans in a baseline + Genesis: MinScansInBaseline + + + + + Gets a scale factor for the noise level in chromatographic peaks. + + + + + Gets the limit on baseline noise + + + + + Gets the background width (scans) + + + + + Gets the baseline noise rejection factor + + + + + Gets a value indicating whether the "alternate Percent RDS calculation" should be performed. + + + + + Gets a value indicating whether there was a "manual change" to calibration levels. + + + + + Gets the low intensity cutoff + + + + + Read the table of dilution levels + + The dilution levels + + + + Gets a copy of the dilution target component factors table + + The dilution target component factors table + + + + Access to Dilution Level data from PMD file (obsolete? subset of a calibration level) + + + + + Gets Anticipated amount of target compound in calibration of QC standard. + + + + + Gets QC test standard: 100 * (yobserved-ypredicted)/ypreditced + + + + + Gets the level name + + + + + Access to the Dilution Target Component (subset of a calibration level). + + + + + Gets Anticipated amount of target component. + + + + + Gets the target component name. + + + + + Determines how the Chromatogram Analysis report is formatted + + + + + Format by component + + + + + Use default formatting + + + + + This set of flags gives a table of possible "standard" or built in reports. + Available choices in the UI, and actual report content depend on the application. + Some where probably never offered, or only applied to legacy LCQ data system. + + + + + Gets a value indicating whether the Analysis Unknown report is needed + + + + + Gets a value indicating whether the Component Unknown report is needed + + + + + Gets a value indicating whether the Method Unknown report is needed + + + + + Gets a value indicating whether the Log Unknown report is needed + + + + + Gets a value indicating whether the Analysis Calibration report is needed + + + + + Gets a value indicating whether the Component Calibration report is needed + + + + + Gets a value indicating whether the Method Calibration report is needed + + + + + Gets a value indicating whether the Log Calibration report is needed + + + + + Gets a value indicating whether the Analysis QC report is needed + + + + + Gets a value indicating whether the Component QC report is needed + + + + + Gets a value indicating whether the Method QC report is needed + + + + + Gets a value indicating whether the Log QC report is needed + + + + + Gets a value indicating whether the Analysis Other report is needed + + + + + Gets a value indicating whether the Component Other report is needed + + + + + Gets a value indicating whether the Method Other report is needed + + + + + Gets a value indicating whether the Log Other report is needed + + + + + Gets a value indicating whether the Sample Information report is needed + + + + + Gets a value indicating whether the Run Information report is needed + + + + + Gets a value indicating whether the Chromatogram report is needed + + + + + Gets a value indicating whether the PeakComponent report is needed + + + + + Gets a value indicating whether the Tune report is needed + + + + + Gets a value indicating whether the Experiment report is needed + + + + + Gets a value indicating whether the Processing report is needed + + + + + Gets a value indicating whether the Status report is needed + + + + + Gets a value indicating whether the Error report is needed + + + + + Gets a value indicating whether the Audit report is needed + + + + + Gets a value indicating whether the Open Access report is needed + + + + + Gets a value indicating which of the two types of chromatogram analysis report is needed. + + + + + Gets a value indicating whether the Survey report is needed + + + + + Gets a value indicating whether to include a signature line in reports + + + + + Defines how a percentage is used (for filtering) + + + + + Percentage of the largest peak + + + + + Percentage of the peak identified as a component + + + + + Defines how peak limits are applied + + + + + Base limits on peak area + + + + + Base limits on peak height + + + + + Access to settings which defines a manual noise feature (for peak integration) + + + + + Gets a value indicating whether manual noise should be used + + + + + Gets the manual noise region (time range in minutes) + + + + + Gets the manual noise region (intensity range) + These values are not used by Xcalibur + + + + + Defines settings for the maximizing masses algorithm + + + + + Gets the number of masses required to maximize + + + + + Gets the percentage of masses which must maximize + + + + + Gets the box filter width for Mass-Maximizing detection + + + + + Gets the number of scans in the max-masses window + + + + + Gets the minimum peak separation (time) for Mass-Maximizing detection + + + + + Gets the number of scans averaged for a background + + + + + Interface to specify returning + a limited number of "most intense" peaks. + + + + + Gets a value indicating whether peak limits are enabled + + + + + Gets a value indicating whether to Select top peak by area or height + + + + + Gets the number of "top peaks" to select + + + + + Gets a value indicating whether "relative peak height threshold" is enabled + + + + + Gets the percent of the largest peak, which is used for filtering + peak detection results, when "IsRelativePeakEnabled" + + + + + Gets a the "percent of component peak" (limit) + Only valid when PeakPercent is set to PercentOfComponentPeak + + + + + Gets a value indicating how peak percentages are specified + (unused in product Xcalibur) + + + + + Settings for genesis integrator (as read from Xcalibur PMD file) + + + + + Gets a value indicating whether a peak's width (the tail) must be constrained. + This flag allows you to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the width of a typical peak in seconds. + This controls the minimum width that a peak is expected to have + if valley detection is enabled. + Integrator converts this to expectedPeakHalfWidth (minutes) by dividing by 120. + With valley detection enabled, + any valley points nearer than the expectedPeakHalfWidth (which is [expected width]/2) + to the top of the peak are ignored. + If a valley point is found outside the expected peak width, + Genesis terminates the peak at that point. + Genesis always terminates a peak when the signal reaches the baseline, + independent of the value set for the expectedPeakHalfWidth. + + + + + Gets a constraint on peak height. + The percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the minimum acceptable signal to noise of a peak. + Genesis ignores all chromatogram peaks that have signal-to-noise values + that are less than the S/N Threshold value + + + + + Gets the peak tailing factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the is true. + The valid range is 0.5 through 9.0. + + + + + Gets a value indicating whether valley detection is performed. + This parameter must be set to true when performing base to base integration + + + + + Gets the multiplier of the valley bottom + that the peak trace can rise above a baseline (before or after the peak). + If the trace exceeds ValleyThreshold, + Genesis applies valley detection peak integration criteria. + This method drops a vertical line from the apex of the valley between unresolved + peaks to the baseline. + The intersection of the vertical line and the baseline defines the end of the first + peak and the beginning of the second peak. + This test is applied to both the left and right edges of the peak. + The ValleyThreshold criteria is useful for integrating peaks with long tails. + Useful range: 1.001 to 1.5 + Note: Appears on product UI converted from factor to percentage as "Rise percentage". + For example: 1.1 = 10% + Code tests similar to the following: + if ((currentSignal-baseline) > ((valleyBottom-baseline) * ValleyThreshold)) + { + side of peak has bottomed out, and risen above minimum + } + + + + + + Gets or the S/N range is 1.0 to 100.0. for valley detection. + Technical equation:height(here +/- VALLEY_WIDTH) > ValleyDepth*SNR+height(here) => valley here + + + + + Gets a value indicating whether to enable RMS noise calculation. + If not set, noise is calculated peak to peak. + It is set by default. + + + + + Gets a noise limit, where the code stops attempting to find a better baseline. + controls how the baseline is drawn in the noise data. + The higher the baseline noise tolerance value, + the higher the baseline is drawn through the noise data. + The valid range is 0.0 to 1.0. + + + + + Gets the minimum number of scans that Genesis uses to calculate a baseline. + A larger number includes more data in determining an averaged baseline. + The valid range is 2 to 100. + + + + + Gets a factor which controls the width of the RMS noise band above and below the peak detection baseline + and is applied to the raw RMS noise values to raise the effective RMS noise during peak detection. + The left and right peak boundaries are assigned above the noise and, therefore, + closer to the peak apex value in minutes. + This action effectively raises the peak integration baseline above the RMS noise level. + Range: 0.1 to 10.0. + Default: 2.0. + + + + + Gets the number of minutes between background scan recalculations. + Baseline is refitted each time this interval elapses. + + + + + Gets a limit for the "baseline signal to noise ratio". + A peak is considered ended if the following condition is met: + height <= (BaseNoise * BaseSignalToNoiseRatio)) + Where BaseNoise is the calculated noise on the fitted baseline, + and height is the height above baseline. + + + + + Gets the minimum acceptable percentage of the largest peak. + Do not return peaks which have a height less than this % of the highest peak above baseline. + + + + + Gets a value indicating whether filtering of peaks is by relative signal height + + + + + Gets the Peak Signal ToNoise Ratio Cutoff. + The peak edge is set to values below this defined S/N. + This test assumes an edge of a peak is found when the baseline adjusted height of the edge is less than + the ratio of the baseline adjusted apex height and the peak S/N cutoff ratio. + If the S/N at the apex is 500 and the peak S/N cutoff value is 200, + Genesis defines the right and left edges of the peak when the S/N reaches a value less than 200. + Range: 50.0 to 10000.0. + Technical equation:if height < (1/PeakSignalToNoiseRatioCutoff)*height(apex) => valley here + + + + + Defines a reader for importing the peak detection settings from a PMD file. + In UI, This may be separately displayed in tabs as chromatogram settings, and settings + for various integrators. + + + + + Gets the settings for the ICIS integrator + + + + + Gets the settings for the Genesis integrator + Note: This property is under review. + May return an alternative interface + + + + + Gets the settings for creating a chromatogram + + + + + Gets the manual noise range settings + + + + + Gets settings for the maximizing masses algorithm + Note: This algorithm is not used by product "Xcalibur" + + + + + Gets settings to limit (filter) the list of returned peaks + after integration + + + + + Gets a value indicating whether peak detection is enabled. + Note: This property is not used in product "Xcalibur" + + + + + Gets the number of smoothing points, for background analysis + This setting is common to all integrators + + + + + Gets the width of display window for the peak (in seconds) + This is for presentation only + + + + + Gets the time range, over which qualitative processing is done. + Only peaks detected within this range are processed further + (for example, library searched) + + + + + Gets the Algorithm to use (Genesis, ICIS etc.) + + + + + Gets Number of decimals used in defining mass values + + + + + Gets tolerance used for mass + + + + + Gets units of mass tolerance + + + + + Gets the component name + + + + + Gets the scan filter, as an interface. + This same data is available in string form + in the ChromatogramSettings property + + + + + Gets the (avalon) integrator events + + + + + Defines how spectrum enhancement is done + + + + + Refine the spectrum + + + + + Combine spectra + + + + + Threshold the data + + + + + Determines how spectra are subtracted + + + + + Subtract at a peak + + + + + Subtract: not at a peak + + + + + Read access to parameters for spectrum enhancements + + + + + Gets a value indicating whether the refine (combine) section enabled + + + + + Gets a value indicating we using refine, combine or threshold + + + + + Gets the refine window size + + + + + Gets he refine noise threshold + + + + + Gets the combine take points across peak top + + + + + Gets the combine background scaling factor + + + + + Gets the Region 1 method: at peak or use previous + + + + + Gets the start point before the peak top + + + + + Gets the previous points in background + + + + + Gets Region 2 method: at peak or use next + + + + + Gets Points after peak top + + + + + Gets the nNext point in background + + + + + Gets the cut off threshold + + + + + Defines how NIST search is done + Refer to NIST documentation for details. + + + + + Perform NIST identity search + + + + + Perform NIST similarity search + + + + + NIST search identity mode + Refer to NIST documentation for details. + + + + + Normal identity search mode + + + + + Quick identity search mode + + + + + Penalize identity search mode + + + + + NISY search similarity mode. + Refer to NIST documentation for details. + + + + + Simple similarity mode + + + + + Hybrid similarity mode + + + + + Neutral Loss similarity mode + + + + + Interface to access NIST library search options + + + + + Gets the similarity setting for NIST search + + + + + Gets the identity mode for NIST search + + + + + Gets the type of NIST search + + + + + Gets the molecular weight + + + + + Gets a value indicating whether search with Molecular Weight is enabled + + + + + Gets a value indicating whether reverse search is enabled + + + + + Gets a value indicating whether to append to the user library + + + + + Gets the search molecular weight + + + + + Gets the maximum number of reported search hits + + + + + Gets the match factor + + + + + Gets the reverse match factor + + + + + Gets the Probability Percent (match limit) + + + + + Gets the name of the user library (for append operation) + + + + + Gets the list of libraries to search + + + + + Gets a value indicating whether mass defect should be applied + + + + + Gets the mass defect for the low mass + + + + + Gets the mass defect for the High mass + + + + + Gets the mass at which "DefectAtMass1" applies + + + + + Gets the mass at which "DefectAtMass2" applies + + + + + Method of element constraint + + + + + All elements + + + + + Some elements + + + + + Gets the method of ion constraints + + + + + Absolute ion constraint + + + + + Relative ion constraint + + + + + Interface to read NIST library search constraints + + + + + Gets a value indicating whether molecular weight constraint is enabled + + + + + Gets the minimum molecular weight + + + + + Gets the maximum molecular weight + + + + + Gets a value indicating whether name fragment constraint is enabled + + + + + Gets the name fragment constraint + + + + + Gets a value indicating whether DB constraint is enabled + + + + + Gets a value indicating whether Fine constraint is enabled + + + + + Gets a value indicating whether EPA (Environmental Protection Agency) constraint is applied + + + + + Gets a value indicating whether NIH (National Institute of Health) constraint is applied + + + + + Gets a value indicating whether TSCA (Toxic Substances Control Act) constraint is applied + + + + + Gets a value indicating whether USP (United States Pharmacopoeia) constraint is applied + + + + + Gets a value indicating whether EINECS (European Inventory of Existing Commercial Chemical Substances) constraint is applied + + + + + Gets a value indicating whether RTECS (Registry of Toxic Effects of Chemical Substances) constraint is applied + + + + + Gets a value indicating whether HODOC (Handbook of Data on Organic Compounds) constraint is applied + + + + + Gets a value indicating whether IR constraint is applied + + + + + Gets a value indicating whether Elements constraint is applied + + + + + Gets the Element constraint + + + + + Gets the element constraint method (used when ElementsEnabled) + + + + + Gets a value indicating whether Ion Constraints are enabled + + + + + Gets the method of Ion Constraints (used when IonConstraintsEnabled) + + + + + Gets the Ion Constraints (see NIST documentation for details) + + + + + Gets the individual element constraints (limits on specific elements) + + + + + Determines how an element limit is applied + + + + + Element count must be greater than a specified value + + + + + Element count must be less than a specified value + + + + + Element count must equal the supplied value + + + + + Interface to read an ion constraint. + See NIST documentation for details. + + + + + Gets the method of ion constraint + + + + + Gets the mass to charge ratio of the constraint + + + + + Gets the from value of the constraint + + + + + Gets the To value of the constraint + + + + + A method of ion constraint, for NIST library search + + + + + Default value + + + + + Normal ion constraint + + + + + Constrain by loss of ion + + + + + Constrain by rank + + + + + Constrain by max mass + + + + + Interface to read individual constraints + See NIST documentation for details + + + + + Gets the condition on this element (greater, less or equal to value) + + + + + Gets the comparison value for this element constraint. + Used in a a test as per "ElementCondition" + + + + + Gets the element to constrain + + + + + Defines the output of an Xcalibur report + + + + + No report output + + + + + Report creates txt + + + + + Report creates word doc + + + + + Report creates HTML + + + + + Report creates PDF file + + + + + Report creates Rtf file + + + + + Report creates XLS file (spreadsheet) + + + + + Determines what data types are enabled for a report + + + + + Gets a value indicating whether report is enabled for standards + + + + + Gets a value indicating whether report is enabled for QCs + + + + + Gets a value indicating whether report is enabled for Unknowns + + + + + Gets a value indicating whether report is enabled for Other sample types + + + + + Interface to read Xcalibur report settings + + + + + Gets a value indicating whether report is enabled + + + + + Gets the file save format of the report + + + + + Gets the name of the report + + + + + Interface to read Xcalibur sample report settings + } + + + + Defines what happens to a program in a PMD file + + + + + The program is run (exe) + + + + + The program is run as an excel macro + + + + + No action + + + + + Data is exported, using the specified export type + + + + + Specifies a data export format + + + + + Export a spreadsheet file (XLS) + + + + + Export as text + + + + + Export comma separated values (CSV) + + + + + Interface to read Xcalibur program settings + + + + + Gets a value indicating whether report is enabled + + + + + Gets the name of the program + + + + + Gets parameters to the program + + + + + Gets the action of this program (such as run exe, or export) + + + + + Gets a value indicating whether to synchronize this action. + If false, other programs may be run in parallel with this. + + + + + Gets the file save format of the export + + + + + Additional display options (for Xcalibur PMD file) + + + + + Gets a value which extends (display) width so that peak is shown "not at edge" + + + + + Gets a value indicating whether to label peaks with RT + + + + + Gets a value indicating whether to label peaks with scan number + + + + + Gets a value indicating whether to label peaks with area + + + + + Gets a value indicating whether to label peaks with base peak + + + + + Gets a value indicating whether to label peaks with height + + + + + Gets a value indicating whether to label peaks with internal standard response + + + + + Gets a value indicating whether to label peaks with signal to noise + + + + + Gets a value indicating whether to label peaks with saturation + + + + + Gets a value indicating whether to rotate peak label text + + + + + Gets a value indicating whether to draw a box around peak labels + + + + + Read only access to Calibration And Quantification Threshold Limits + + + + + Gets the carry over limit threshold. + + The carry over limit threshold. + + + + Gets the detection limit threshold. + + The detection limit threshold. + + + + Gets the linearity limit threshold. + + The linearity limit threshold. + + + + Gets the quantitation limit threshold. + + The quantitation limit threshold. + + + + Gets the R squared threshold. + + The R squared threshold. + + + + Gets the limit of reporting + A value should only be reported if it is >= the limit of reporting. + This value is used to calculate the ReportingLimitPassed flag. + + + + + Read only access to Detection Threshold Limits + + + + + Gets the Area limit threshold. + + The Area limit threshold. + + + + Gets the height limit threshold. + + The height limit threshold. + + + + Interface to read component data, as imported from an + Xcalibur PMD file + + + + + Gets the settings for a manual noise region + + + + + Gets settings for the ICIS peak integrator + + + + + Gets settings for the genesis peak integrator + + + + + Gets settings for peak location (expected retention time) + + + + + Gets settings for the spectral find algorithm. + + + + + Gets settings for creating the component chromatogram + + + + + Gets the filter for this component as an interface. + Note that a filter is also a property of IPeakChromatogramSettingsAccess, + available a string, formatted to the mass precision of the component. + + + + + Gets component calibration settings (including level tables) + + + + + Gets settings for the system suitability algorithm + + + + + Gets settings for the PDA peak purity algorithm + + + + + Gets the (avalon) integrator events + + + + + Gets the settings for Ion Ration Confirmation + + + + + Gets mass tolerance for this component + + + + + Gets the name of this component + + + + + Gets (custom) keys about this component + This is treated as a comment field. + Not used for any "built-in" calculations + but may be used to annotate reports etc. + + + + + Gets a value indicating whether this is used as a RT Reference for another component. + + + + + Gets the retention time reference component. + Adjust the retention time, using this component as a reference + + + + + Gets the number of points to be averaged in peak detection and integration. + + + + + Gets the suggested view width for displaying the chromatogram (minutes) + + + + + Gets a value which determines which peak detector to use with the component + + + + + Gets "Fit Threshold" defined as + Min fit threshold (0-1.0) for detection by spectral fit. + This value is believed to be not currently used in Xcalibur code (may be for an older fit algorithm)? + Returned for completeness only. + + + + + Gets the calibration and quantification data. + + + + + Gets the detection threshold limits. + + + + + How relative response is measured + + + + + Use the ratio of height of peaks to find responses + + + + + Use the ratio of peak areas to find responses + + + + + Determines if this component is a standard or a target + + + + + A compound which is being quantitated + + + + + An internal standard reference, to calculate area or height ratios (responses). + + + + + Read only access to CalibrationSettings + + + + + Gets the target compound settings. + + The target compound settings. + + + + Gets the internal standard settings. + + The internal standard settings. + + + + Gets a value which determines if this component is a target compound or an internal standard + + + + + Read only access to CalibrationTargetCompoundSettings + + + + + Gets the table of calibration levels + + + + + Gets the table of QC levels + + + + + Gets the calibration curve fitting method + + + + + Gets the weighting for calibration curve + + + + + Gets the calibration curve origin mode + + + + + Gets a value which determines how the response should be measured (using either peak height or peak area). + + + + + Gets the Unit for calibration + + + + + Gets the name of the internal standard for this component + + + + + Gets the isotopic contribution of the internal standard to the target compound + + + + + Gets the isotopic contribution of the target compound to the internal standard + + + + + Read only access to CalibrationInternalStandardSettings + + + + + Gets the amount of internal standard. Not used in any calculation yet. + + + + + Gets the units for the internal standard + + + + + Defines how ion ratio tests are performed + (as found in Xcalibur PMD files) + + + + + Use a weighted average test + + + + + Use a simple average test + + + + + Use a standard + + + + + Manual test settings + + + + + Defines ion ratio window, as found in Xcalibur PMD files + + + + + Test relative to target percent + + + + + Absolute window around target percent + + + + + Defines ion ratio settings, as imported from Xcalibur PMD file + + + + + Gets a value indicating whether IRC tests are enabled + + + + + Gets the "standard" used + + + + + Gets the Ion Ratio method + + + + + Gets the ion ratio window type + + + + + Gets the qualifier ion coelution limits (minutes) + + + + + Gets the table of masses for ion ratio testing + + + + + Read only access to a range + + + + + Gets the Low end of range + + + + + Gets the high end of the range + + + + + Specific items which can be cached + + + + + Cache CentroidStream objects + + + + + Cache ScanStatistics objects + + + + + Cache ScanType objects + + + + + Cache SegmentedScan objects + + + + + Caching feature which can be supported by objects implementing IRawData + + + + + Request the object to keep a cache of the listed item. + Setting the caching to "zero" disables further caching. + + + Item to cache + + + Limit of number of items to cache + + + (optional, default false) if set True, all values returned from the cache are unique (cloned) references. + By default, the cache just keeps references to the objects + + + + + Clear items in the cache + + + item type to clear + + + + + Count the number currently in the cache + + + Item type to count + + + The number of items in this cache + + + + + Interface to supply data from a raw data stream. + This is intended to permit the data to be read from any file format. + + + + + Get the nearest scan number to a retention time + + + Retention time (minutes) + + + Scan number in the selected instrument which is closest to this time. + If there are no scans, -1 is returned. + + + + + Gets the current instrument's run header. + The run header records information related to all data acquired by + this instrument (such as the highest scan number "LastSpectrum") + + + + + Gets the number of instruments which have saved method data, within the + instrument method embedded in this file. + + + + + Get the scan statistics for a scan. + For example: The retention time of the scan. + + + scan number + + + Statistics for scan + + + + + Gets scan data for the given scan number. It will also fill object, if any supplied. + For most detector types, this is the only data for the scan, and contains either + profile or centroid information (depending on the type of scan performed). + For Orbitrap data (FT packet formats), this returns the first set of data for the scan (typically profile). + The second set of data (centroids) are available from the GetCentroidStream method. + The "Segmented" format is used for SIM and SRM modes, where there may be multiple + mass ranges (segments) of a scan. + Full scan data has only one segment. + + + The scan number. + + + statistics for the scan + + + The segmented scan + + Thrown if no device has been selected + + + + Test if a scan is centroid format + + + Number of the scan + + + True if the scan is centroid format + + Thrown if no device has been selected + + + + Gets the filter strings for this file. + This analyses all scans types in the file. + It may take some time, especially with data dependent files. + Filters are grouped, within tolerance (as defined by the MS detector). + + A string for each auto filter from the raw file + Thrown if this is called without first selecting an MS detector + + + + Gets a text form of an instrument method, for a specific instrument. + + + The index into the count of available instruments. + The property "InstrumentMethodsCount", + determines the valid range of "index" for this call. + + + A text version of the method. Some instruments do not log this data. + Always test "string.IsNullOrEmpty" on the returned value. + + + + + Gets the definition of the selected instrument. + + data about the selected instrument, for example the instrument name + + + + Get a string representing the scan type (for filtering). + For more complete tests on filters, consider using the IScanFilter interface. + If reading data using IRawDataPlus, you may use + A filter string (possibly entered from the UI) may be parsed using + If the RT is known, and not the scan number, use ScanNumberFromRetentionTime + to convert the time to a scan number. + + + Scan number whose type is needed + + + Type of scan, in string format. + To compare individual filter fields, the ScanDefinition class can be used. + + + + Thrown if the selected device is not of type MS + + + + Get the retention time (minutes) from a scan number + + + Scan number + + + Retention time (start time) of scan + + Thrown if no device has been selected + + + + Get the centroids saved with a profile scan. + This is only valid for data types which support + multiple sets of data per scan (such as Orbitrap data). + This method does not "Centroid profile data". + + + Scan number + + + determines if peaks flagged as ref should be returned + + + centroid stream for specified . + + Thrown if the selected device is not of type MS + + + + Gets the status log nearest to a retention time. + + + The retention time. + + + object containing status log information. + + Thrown if no device has been selected + + + + returns the number of entries in the current instrument's status log + + + The number of available status log entries. + + + + + Returns the header information for the current instrument's status log. + This defines the format of the log entries. + + + The headers (list of prefixes for the strings). + + Thrown if no device has been selected + + + + Returns the Status log values for the current instrument, + for the given status record. + This is most likely for diagnostics or archiving. + Applications which need logged data near a scan should use “GetStatusLogForRetentionTime”. + Note that this does not return the “labels” for the fields. + + Index into table of status logs + true if they should be formatted as per the + data definition for this field (recommended for display). + Unformatted values may be returned with default precision (for float or double) + Which may be better for graphing or archiving + + The status log values. + + Thrown if no device has been selected + + + + Gets a text form of the instrument tuning method, at a given index. + The number of available tune methods can be obtained from GetTuneDataCount. + + + tune data index + + + object containing tune data for specified . + + Thrown if the selected device is not of type MS + + + + Return the number of tune data entries. + Each entry describes MS tuning conditions, used to acquire this file. + + + The number of tune methods saved in the raw file>. + + Thrown if the selected device is not of type MS + + + + Return the header information for the current instrument's tune data. + This defines the fields used for a record which defines how the instrument was tuned. + This method only applies to MS detectors. These items can be paired with the "TuneDataValues" + to correctly display each tune record in the file. + + + The headers/>. + + Thrown if the selected device is not of type MS + + + + Return tune data values for the specified index. + This method only applies to MS detectors. + This contains only the data values, and not the headers. + + + index into tune tables + + + true if formatting should be done. + Normally you would set “ifFormatted” to true, + to format based on the precision defined in the header. + Setting this to false uses default number formatting. + This may be better for diagnostic charting, + as numbers may have higher precision than the default format. + + + The tune data + + Thrown if the selected device is not of type MS + + + + Gets the path to original data. + A raw file may have been moved or translated to other formats. + This property always returns the path (folder) where the file was created (acquired) + + + + + Gets the name of acquired file (excluding path). + + + + + Choose the data stream from the data source. + This must be called before reading data from a detector (such as chromatograms or scans). + You may call to determine if there is at + least one instrument of the required device type. + + + Type of instrument + + + Stream number (1 based) + + + + + Gets the instrument as last set by a call to . + If this has never been set, returns null. + + + + + Gets the date when this data was created. + + + + + Gets the name of person creating data. + + + + + Gets various details about the sample (such as comments). + + + + + Gets the number of instruments (data streams) in this file. + For example, a file with an MS detector and a 4 channel UV may have an instrument + count of 2. To find out how many instruments there are of a particular category + call with the desired instrument type. + Instrument count related methods could, for example, be used to format + a list of instruments available to select in the UI of an application. + To start reading data from a particular instrument, call . + + + + + + Gets a value indicating whether the last file operation caused an error. + + + + + Gets a value indicating whether the file is being acquired (not complete). + + + + + Get the number of instruments (data streams) of a certain classification. + For example: the number of UV devices which logged data into this file. + + + The device type to count + + + The number of devices of this type + + + + + Create a chromatogram from the data stream + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + Chromatogram points + + + Thrown if the selected device is of a type that does not support chromatogram generation + + Thrown if filters are sent (for MS chromatograms) which cannot be parsed + + + + Create a chromatogram from the data stream + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + For mass range or base peak chromatograms, + if the ranges have equal low and high mass values (within 1.0E-6), + then are used to determine a band + subtracted from low and added to high to search for matching masses. + if this is set to "null" then the tolerance is defaulted to +/- 0.5. + + + Chromatogram points + + + Thrown if the selected device is of a type that does not support chromatogram generation + + Thrown if filters are sent (for MS chromatograms) which cannot be parsed + + + + Gets the device type for an instrument data stream + + + The data stream + + + The device at type the index + + + + + Gets names of all instruments, which have a method stored in the raw file's copy of the instrument method file. + These names are "Device internal names" which map to storage names within + an instrument method, and other instrument data (such as registry keys). + Use "GetAllInstrumentFriendlyNamesFromInstrumentMethod" (in IRawDataPlus) to get display names + for instruments. + + + The instrument names. + + + + + Gets a value indicating whether the data file was successfully opened. + + + + + Gets or sets a value indicating whether reference and exception peaks + should be returned (by default they are not). + Reference and exception peaks are internal mass calibration data within a scan. + + + + + Re-read the current file, to get the latest data. + Only meaningful when the raw file is InAcquisition when opened, + or on the last refresh call. After acquisition is completed + further calls have no effect. + + For example, the value of "LastSpectrum" in the Run Header of a detector may be 60 after a refresh call. + Even after new scans become acquired, this value will remain at 60, from the application's view of the data, + until RefreshViewOfFile is called again. If GetRunHeader is called again, the number of scans may now be + a larger value, such as 100 + + + true, if refresh was OK. + + + + + Gets the trailer extra header information. This is common across all scan numbers. + This defines the format of additional data logged by an MS detector, at each scan. + For example, a particular detector may wish to record "analyzer 3 temperature" at each scan, + for diagnostic purposes. Since this is not a defined field in "ScanHeader" it would be created + as a custom "trailer" field for a given instrument. The field definitions occur only once, + and apply to all trailer extra records in the file. In the example given, + only the numeric value of "analyzer 3 temperature" would be logged with each scan, + without repeating the label. + + + The headers defining the "trailer extra" record format. + + Thrown if the selected device is not of type MS + + + + Gets the Trailer Extra values for the specified scan number. + If = true, then the values will be formatted as per the header settings. + + + scan whose trailer data is needed + + + true if the data should be formatted + + + The strings representing trailer data. + + Thrown if the selected device is not of type MS + + + + Gets the array of headers and values for this scan number. + The values are formatted as per the header settings. + + + The scan for which this information is needed + + + Extra information about the scan + + Thrown if the selected device is not of type MS + + + + Gets the segment event table for the current instrument. + This table indicates planned scan types for the MS detector. + It is usually created from an instrument method, by the detector. + With data dependent or custom scan types, this will not be a complete + list of scan types used within the file. + If this object implements the derived IRawDataPlus interface, then + This same data can be obtained in object format (instead of string) with the IRawDataPlus + property "ScanEvents" + + A two dimensional array of events. The first index is segment index (segment number-1). + The second is event index (event number -1) within the segment. + Thrown if the selected device is not of type MS + + + + The RawDataPlus interface. Provides access to raw data. + This extends IRawData, adding new features which were introduced at "Platform 3.0" + plus access to some additional content from earlier raw file versions. + This is a disposable interface, as an implementation may hold an active file, + database or other protocol connection. + Many interfaces returned from implementations of this interface may rely + on an active file, database or protocol connection. + Do not dispose of this object until interfaces (especially enumerators) + returned from it are no longer in use. + All value type returns from this interface are safe against the underlying file being closed. + + + + + Gets the raw file header. + + + + + Gets the file error state. + + + + + Gets extended the run header details. + All properties of the returned interface which end in "Count" may return -1 + if that counter is not valid for the selected device type. For example: TuneDataCount when called on Device.Other + + Thrown if no device has been selected + + + + Gets the auto sampler (tray) information. + + + + + Calculate the filters for this raw file, and return as an array. + + Auto generated list of unique filters + Thrown if the selected device is not of type MS + + + + Calculate the filters for this raw file within the range of scans supplied, and return as an array. + + First scan to analyze + Last scan to analyze + + Auto generated list of unique filters + + + + + Get the filter (scanning method) for a scan number. + This returns the scanning method in the form of a filter rule set, so + that it can be used to select similar scans (for example in a chromatogram). + This method is only defined for MS detectors. + Calling for other detectors or with no selected detector is a coding + error which may result in a null return or exceptions, depending on the implementation. + + + The scan number. + + + The . + + Thrown if the selected device is not of type MS + + + + Get a filter interface from a string. Parses the supplied string to a set of filtering rules. + + + The filter string. + + + An interface representing the filter fields, converted from the supplied string. + If the string is not a valid format, this may return null. + + Thrown if the selected device is not of type MS + + + + Get a filter interface from a scan event interface. + Permits filtering to be done based on programmed events, such as + an item from the "ScanEvents" table, + or from constructed data using . + This method initializes the filter based on the current raw file + (for example: mass precision) + + + The event data. + + + An interface representing the filter fields, converted from the supplied event. + + Thrown if the selected device is not of type MS + + + + Get a filter interface from a string, with a given mass precision. + Parses the supplied string. + + + The filter string. + + Precisions of masses (number of decimal places) + + An interface representing the filter fields, converted from the supplied string. + If the string is not a valid format, this may return null. + + Thrown if the selected device is not of type MS + + + + Obtain an interface to iterate over a scans which match a specified filter. + The iterator is initialized at "scan 0" such that "GetNext" will return the first matching scan in the file. + This is a low level version of + + Filter, which all returned scans match. + This filter may be created from a string using + An iterator which can step back and forth over scans matching a given filter. + Thrown if the selected device is not of type MS + + + + Get a filtered scan enumerator, to obtain the collection of scans matching given filter rules. + + The filter, which all enumerated scans match. + This filter may be created from a string using + + + An enumerator which can be used to "foreach" over all scans in a file, which match a given filter. + Note that each "step" through the enumerator will access further data from the file. + To get a complete list of matching scans in one call, the "ToArray" extension can be called, + but this will result in a delay as all scans in the file are analyzed to return this array. + For fine grained iterator control, including "back stepping" use + + Thrown if the selected device is not of type MS + + + + Get a filtered scan enumerator, to obtain the collection of scans matching given filter rules, + over a given time range. + + + The filter, which all enumerated scans must match. + This filter may be created from a string using + + + The start Time. + + + The End Time. + + + An enumerator which can be used to "foreach" over all scans in a time range, which match a given filter. + Note that each "step" through the enumerator will access further data from the file. + To get a complete list of matching scans in one call, the "ToArray" extension can be called, + but this will result in a delay as all scans in the time range are analyzed to return this array. + For fine grained iterator control, including "back stepping" use + + Thrown if the selected device is not of type MS + + + + Gets a value indicating whether this file has an instrument method. + + + + + Gets a value indicating whether this file has MS data. + + + + + Gets the scan events. + This is the set of events which have been programmed in advance of + collecting data (based on the MS method). + This does not analyze any scan data. + + Thrown if the selected device is not of type MS + + + + Gets the set of user labels. These are labels for "user columns" in the sample information. + + + + + Gets the scan event details for a scan. Determines how this scan was programmed. + + + The scan number. + + + The interface, to get detailed information about a scan. + + Thrown if the selected device is not of type MS + + + + Gets the scan event as a string for a scan. + + + The scan number. + + + The event as a string. + + Thrown if the selected device is not of type MS + + + + Gets an entry from the instrument error log. + + + Zero based index. + The number of records available is RunHeaderEx.ErrorLogCount + An interface to read a specific log entry + Thrown if no device has been selected + + + + Gets the labels and index positions of the status log items which may be plotted. + That is, the numeric items. + Index is a zero based index into the log record (the array returned by GetStatusLogHeaderInformation) + Labels names are returned by "Key" and the index into the log record is "Value". + + Thrown if no device has been selected + + + + Gets the status log data, from all log entries, based on a specific position in the log record. + For example: "position" may be selected from one of the key value pairs returned from + in order to create a trend plot of a particular value. + The interface returned has an array of retention times and strings. + If the position was selected by using , then the strings may be converted "ToDouble" to get + the set of numeric values to plot. + + + The position within the list of available status log values. + + + An interface containing the times and logged values for the selected status log field. + + Thrown if no device has been selected + + + + Get all instrument friendly names from the instrument method. + These are the "display names" for the instruments. + + + The instrument friendly names. + + + + + Export the instrument method to a file. + Because of the many potential issues with this, use with care, especially if + adding to a customer workflow. + Try catch should be used with this method. + Not all implementations may support this (some may throw NotImplementedException). + .Net exceptions may be thrown, for example if the path is not valid. + Not all instrument methods can be exported, depending on raw file version, and how + the file was acquired. If the "instrument method file name" is not present in the sample information, + then the exported data may not be a complete method file. + Not all exported files can be read by an instrument method editor. + Instrument method editors may only be able to open methods when the exact same list + of instruments is configured. + Code using this feature should handle all cases. + + + The method file path. + + + Force over write. If true, and file already exists, attempt to delete existing file first. + If false: UnauthorizedAccessException will occur if there is an existing read only file. + + True if the file was saved. False, if no file was saved, for example, + because there is no instrument method saved in this raw file. + + + + + Get scan dependents. + Returns a list of scans, for which this scan was the parent. + + + The scan number. + + + The filter precision decimals. + + + Information about how data dependent scanning was performed. + + Thrown if the selected device is not of type MS + + + + Gets the unique compound names as arrays of strings. + + + The Compound Names. + + Thrown if the selected device is not of type MS + + + + Gets the unique compound names within the range of scans supplied, and return as an array. + + First scan to analyze + Last scan to analyze + + The Compound Names. + + Thrown if the selected device is not of type MS + + + + Gets the unique compound names as arrays of strings by given filter. + + + The scan Filter. + + + The compound names. + + Thrown if the selected device is not of type MS + + + + Get the scan filters which match a compound name. + When implemented against raw files, this may have a performance impact on applications. + For files which have a programmed event table, this will be fast, + as the information can be taken directly from the events. + If there is no event table, then event data is checked for every scan in the file (slower). + + + The compound name. + + + The array of matching scan filters (in string format). + + Thrown if the selected device is not of type MS + + + + Get the scan filters which match each compound name. + When implemented against raw files, this may have a performance impact on applications. + For files which have a programmed event table, this will be fast, + as the information can be taken directly from the events. + If there is no event table, then event data is checked for every scan in the file (slower). + + The compound names. + + The arrays of matching scan filters (in string format) for each compound. + + + + + Create a chromatogram from the data stream. + Extended version: + Parameters include option for component names. + Includes base peak data for each scan. + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + For mass range or base peak chromatograms, + if the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses. + For example: with 5 ppm tolerance, the caller can pass a single mass value (same low and high) for each mass range, + and get chromatograms of those masses +/- 5 ppm. + + + Chromatogram points + + + Thrown if the selected device is of a type that does not support chromatogram generation + + Thrown if filters are sent (for MS chromatograms) which cannot be parsed + + + + Create a chromatogram from the data stream. + Extended version: + Parameters include option for component names. + Includes base peak data for each scan. + + + Definition of how the chromatogram is read + + + First scan to read from. -1 for "all data" + + + Last scan to read from. -1 for "all data" + + + Chromatogram points + + + Thrown if the selected device is of a type that does not support chromatogram generation + + Thrown if filters are sent (for MS chromatograms) which cannot be parsed + + + + Test if a scan passes a filter. + If the set of "all matching scans in a file" is required, consider using or + + the scan number + the filter to test + True if this scan passes the filter + Thrown if the selected device is not of type MS + + + + Returns the (unformatted) Trailer Extra value for a specific field in the specified scan number. + The object type depends on the field type, as returned by + GetTrailerExtraHeaderInformation. + This offers higher performance, where numeric values are needed, + as it avoids translation to and from strings. + + Numeric values (where the header for this field returns "True" for IsNumeric) + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + Char type is returned as "sbyte". + Uchar type is returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + + scan who's data is needed + zero based field number in the record, as per header + Value of requested field + Thrown if the selected device is not of type MS + + + + Returns the (unformatted) Trailer Extra values for all field in the specified scan number. + The object types depend on the field types, as returned by + GetTrailerExtraHeaderInformation. + Uses for this include efficient copy of data from one file to another, as + it eliminates translation of numeric data to and from strings. + + Numeric values (where the header for this field returns "True" for IsNumeric) + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + Char type is returned as "sbyte". + Uchar type is returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + + scan who's data is needed + Values of all fields + Thrown if the selected device is not of type MS + + + + Returns the (unformatted) Tune Data values for all fields in the specified record number. + The object types depend on the field types, as returned by + GetTuneDataHeaderInformation. + Uses for this include efficient copy of data from one file to another, as + it eliminates translation of numeric data to and from strings. + + Numeric values (where the header for this field returns "True" for IsNumeric) + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + Char type is returned as "sbyte". + Uchar type is returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + + zero based index into tune records who's data is needed + Values of all fields + Thrown if the selected device is not of type MS + + + + Gets the (raw) status log data at a given index in the log. + Deigned for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "RunHeaderEx.StatusLogCount -1 )) + Log data at the given index + Thrown if no device has been selected + + + + Gets the (raw) status log data at a given retention time in the log. + Designed for efficiency, this method does not convert logs to display string format. + + Retention time/ + Log data at the given time + Thrown if no device has been selected + + + + Get the advanced LT/FT formats data, such as the noise data, baseline data, label peaks and frequencies + Common uses include: + An application exporting mass spectra to a new raw file. + Special calculations on scans (including averaging, recalibration etc.) + + The scan number. + + Returns an IAdvancedPacketData object which contains noise data, baseline data, label peaks and frequencies for specified . + It might return empty arrays for scans which do not have these data. + + Thrown if the selected device is not of type MS + + + + Gets the name of the computer, used to create this file. + + + + + Interface to define low level access to a status log entry. + This interface is intended for operations which need efficient access to + the data, without intermediate string formatting. + + + + + Gets the time stamp of this log entry. + + + + + Gets the values for this log entry. + Returns the (unformatted) Status Log Data values for + all fields in the log. + The object types depend on the field types, as returned by + GetStatusLogHeaderInformation. + These values are in the same order as the headers. + Uses for this include efficient copy of data from one file to another, as + it eliminates translation of numeric data to and from strings. + + Numeric values (where the header for this field returns "True" for IsNumeric) + can always be cast up to double. + The integer numeric types SHORT and USHORT are returned as short and ushort. + The integer numeric types LONG and ULONG are returned as int and uint. + All logical values (Yes/No, True/false, On/Off) are returned as "bool", + where "true" implies "yes", "true" or "on". + Char type is returned as "sbyte". + Uchar type is returned as "byte". + String types WCHAR_STRING and CHAR_STRING types are returned as "string". + + + + + + Defines an object which can create accessors for multiple threads to access the same raw data. + + + + + This interface method creates a thread safe access to raw data, for use by a single thread. + Each time a new thread (async call etc.) is made for accessing raw data, this method must be used to + create a private object for that thread to use. + This interface does not require that the application performs any locking. + In some implementations this may have internal locking (such as when based on a real time file, which is continually changing in size), + and in some implementations it may be lockless. + + An interface which can be used by a thread to access raw data + + + + Defines managed access to raw data, for multiple threads. + An object implementing this interface "owns" the underlying raw data, and will close any associated file + when disposed. All created thread accessors must no longer be in used, when this object is disposed. + + + + + Defines additional raw data access methods, including diagnostic data in FT format scans. + + + + + Gets additional (binary) data from a scan. + The format of this data is custom (per instrument) and can be decoded into + objects by a specific decoder for the detector type. + + + Scan whose data is needed + + + + Gets additional data from a scan, formatted as a series of data blocks. + The format of this data is custom (per instrument) and can be decoded into + objects by a specific decoder for the detector type. + If the data is not in a detectable "data block" format, then this data is returned as "Not valid". + Data of a format not known to this interface may be retrieved by using + + Scan whose data is needed + + + + Gets the (raw) status log data at a given index in the sorted log. + This form of the log removes duplicate and out of order times + Designed for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "GetStatusLogEntriesCount() -1") + Log data at the given index + + + + The IRawDataExtended interface. Provides access to raw data. + This extends IRawDataPlus, adding "IRawDataExtensions". + This is a disposable interface, as an implementation may hold an active file, + database or other protocol connection. + Many interfaces returned from implementations of this interface may rely + on an active file, database or protocol connection. + Do not dispose of this object until interfaces (especially enumerators) + returned from it are no longer in use. + All value type returns from this interface are safe against the underlying file being closed. + + + + + The Raw File Writer interface. + Used for writing raw files to disk. + Upon creating an instance of IRawFileWriter, the raw file name is provided and checked for existence. + If that file name already exists, the new instance creates a raw file name appended with a unique date time stamp. + Many methods return true on success, and false on fail. + The IFileError interface can be used to get error information. + HasError is set on that interface for a non recoverable error, and the ErrorMessage is set + to one or more lines of error data. + If there is an error, the WarningMessage contains a multiple line diagnostic log. + This may contain information and warning lines. + HasWarning is set if at least one line of the log contains a warning. + + + + + Gets a value indicating whether an error occurred during writing. + + + + + Gets or sets a value indicating whether the writer should save changes. True by default. + If false when a save is called, data will not be written to disk and any data written previously will remain unchanged. + The writer will still need to be disposed regardless of ShouldSaveChanges status. + + + + + Gets the raw file name being written. + + + + + Gets the calculated checksum for this raw file. Only calculated after a save has occurred. + + + + + Refresh view of the raw file. Reloads the RawFileInfo object and the virtual controllers run headers from shared memory. + Does not read actual data from any temporary files. + + + True if successfully reloaded internal memory buffers. + + + + + Gets the set of devices currently connected to the raw file. + This data is only updated after calling "RefreshViewOfFile". + Devices may be added by external processes (especially during data acquisition). + + An array of device types. The length of the array is equal to the number of detectors + which have registered with the raw file. + Some device may have incomplete registration at the time of the call. + In this case "Device.None" is recorded + + + + Update the raw file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + A default FileHeader is created with every new writer instance. + + + The file header object with values to use. + + + + + Update the raw file auto sampler information with the auto sampler information values passed in. + Only updates object values in memory, does not write to disk. + + + The auto sampler information. + + + True if successfully updated auto sampler information values. + If false: Check errors. + + + + + Update the raw file sequence row with the sample information values passed in. + Only updates object values in memory, does not write to disk. + + + The sequence Row Sample Information. + + + True if successfully updated raw file values. + If false: Check errors (IFileError). + + + + + Update creator logon value for the raw file being written. + + + The creator logon. + + + True if successfully updated value. + If false: Check errors (IFileError). + + + + + Update creator id value for the raw file being written. + + + The creator id. + + + True if successfully updated value. + If false: Check errors (IFileError). + + + + + Update all user labels for the raw file being written. + Max 5 labels. If array parameter is > 5 then all values are ignored. + + + The user label. + + + True if successfully updated value. + If false: Check errors (IFileError). + + + + + Update specific user label value at index for the raw file being written. + + + The user label. + + + The index into labels array to update. + + + True if successfully updated value. + If false: Check errors (IFileError). + + + + + Update creation date for the raw file being written. + + + The creation date. + + + True if successfully updated value. + If false: Check errors (IFileError). + + + + + Adds an audit data entry to the audit trail list of the raw file. + + + The time changed. + + + What changed by integer value. + + + The comment. + + + The . + True if successfully updated value. + If false: Check errors (IFileError). + + + + + Saves the instrument method into the raw file + + The instrument method file path. + List of virtual instrument storage names. + List of virtual instrument descriptions. + + [Optional] it has a default value of true. + The should be deleted flag indicating whether the temporary instrument method should be removed after the raw file writer is closed. + + True if instrument method successfully saved to raw file. + If false: Check errors (IFileError). + + + + Saves raw file to disk with current values. Should be called after all updates are finished. + + + True only if saving part of the raw file for the acquisition raw file. + On partial save, only raw file header, auto sampler information, sequence row information, and raw file info are written. No scan data written. + + + True if file successfully written to disk. + If false: Check errors (IFileError). + + + + + Defines a way to get an MS scan, which is + permitted to hold a reference to the internal (unmanaged) data + of a scan. This can be an advantage when an application + needs several parts of a scan. A disadvantage is that is must be disposed. + + + + + Gets the scan index + + + + + Reads the segmented scan (centroid or profile data) + + Interface to read the scan + + + + This method is similar to + GetSegmentedScanFromScanNumber or GetSimplifiedCentroids in the IRawData interface. + The method returns only the mass and intensity values from + the scan data for a scan, reading form the centroids if FT data is available. + Values for flags etc. are not returned, saving data space and improving efficiency. + The method is designed for improved performance in custom XIC generators. + + Mass and intensity values from the scan. + + + + Gets the FT centroids + + Interface to read the centroids + + + + Gets the noise data for the FT scan + + Noise data for this raw scan + + + + Gets the scan filter + + Interface to read the filter + + + + Gets the scan event + + Interface to read the scan event + + + + Gets a value indicating whether this is an FT formatted MS scan. + + + + + General interface to regression calculations (calibration curves) + Specific instances of this can be generated by using the factory: Calibration.CreateCalibrationCurve + + + + + Find the predicted amount given a response ratio + + The response ratio of the peak being measured + The calculated amount for this response ratio + + + + Find the response ratio which represents a calculated amount. + This is the inverse of the calculation needed for quantitation. + + The known amount + The response ratio which would represent this amount + + + + Gets a statistical result from a regression calculation. + For curves not supporting this, return -1 + + + + + Gets the calibration equation (such as "y=mx+c") + + + + + Gets a value indicating whether this regression is fitted correctly. + After constructing a calibration object, it can only be used if "Ok". + For example: if there are no calibration levels, Ok will be false. + + + + + Create a table of data to plot on a calibration curve + + The number of calibration curve points to supply + If useMaxValue is true, plotting is performed between 0 and the + larger of the base amount of the largest level and maxValue. + Maximum value for the curve (if useMaxValue is set) + The generated curve data, or null if there are insufficient required points specified + + + + Gets the highest X value on the calibration curve + + + + + Gets the highest Y value on the calibration curve + + + + + Information about this device stream + + + + + Gets the count of recorded spectra + + + + + Gets the count of status log entries + + + + + Gets the count of tune data entries + + + + + Gets the count of error log entries + + + + + Gets the count of "scan events" + + + + + Gets the count of "trailer extra" records. + Typically, same as the count of scans. + + + + + Gets a value indicating whether this file is being created. + 0: File is complete. All other positive values: The file is in acquisition. + Negative values are undefined. + + + + + Gets the mass resolution of this instrument. + + + + + Gets the expected data acquisition time. + + + + + Gets the tolerance units + + + + + Gets the number of digits of precision suggested for formatting masses + in the filters. + + + + + Gets the first comment about this data stream. + + + + + Gets the second comment about this data stream. + + + + + Gets the first spectrum (scan) number (typically 1). + + + + + Gets the last spectrum (scan) number. + If this is less than 1, then there are no scans acquired yet. + + + + + Gets the time of first scan in file + + + + + Gets the time of last scan in file + + + + + Gets the lowest recorded mass in file + + + + + Gets the highest recorded mass in file + + + + + Gets the max intensity. + + + + + Gets the max integrated intensity. + + + + + The SampleInformation interface. + + + + + Gets or sets the comment about sample (from user). + + + + + Gets or sets the Code to identify sample. + + + + + Gets or sets the description of sample. + + + + + Gets or sets the vial or well form auto sampler. + + + + + Gets or sets the amount of sample injected. + + + + + Gets or sets bar code from scanner (if attached). + + + + + Gets or sets the bar code status. + + + + + Gets or sets a name to identify the Calibration or QC level associated with this sample. + Empty if this sample does not contain any calibration compound. + + + + + Gets or sets the bulk dilution factor (volume correction) of this sequence row. + + + + + Gets or sets the instrument method filename of this sequence row. + + + + + Gets or sets the name of acquired file (excluding path). + + + + + Gets or sets the name of calibration file. + + + + + Gets or sets the ISTD amount of this sequence row. + + + + + Gets or sets the row number. + + + + + Gets or sets the path to original data. + + + + + Gets or sets the processing method filename of this sequence row. + + + + + Gets or sets the type of the sample. + + + + + Gets or sets the sample volume of this sequence row. + + + + + Gets or sets the sample weight of this sequence row. + + + + + Gets or sets the collection of user text. + + + + + Access to data in a scan + + + + + Gets or sets a value indicating whether, when requesting "Preferred data", the centroid stream will be returned. + For example "", "". + If this property is false, or there is no centroid stream, then these methods will return + the data from . For greater efficiency, callers should cache the return of "". + Typically data processing, such as elemental compositions, should use these methods. + + + + + Gets the Mass for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Resolutions for default data stream (usually centroid stream, if present). + Returns an empty array if centroid stream is not preferred or not present + + + + + Gets Noises for default data stream (usually centroid stream, if present). + Returns an empty array if centroid stream is not preferred or not present + + + + + Gets Intensity for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets peak flags (such as saturated) for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Mass of base peak default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets Resolution of base peak for default data stream (usually centroid stream, if present). + Falls back to zero if centroid stream is not preferred or not present + + + + + Gets Noise of base peak for default data stream (usually centroid stream, if present). + Falls back to zero if centroid stream is not preferred or not present + + + + + Gets peak flags (such as saturated) for default data stream (usually centroid stream, if present). + Falls back to data if centroid stream is not preferred or not present + + + + + Gets The data for the scan + + + + + Gets A second data stream for the scan + + + + + Gets a value indicating whether this scan has a centroid stream. + + + + + Gets or Header information for the scan + + + + + Gets Type of scan (for filtering) + + + + + Gets the Tolerance value. + + + + + Gets the mass resolution for all scan arithmetic operations + + + + + Gets a value indicating whether the User Tolerance value is being used. + + + + + Access to extdnded scans, which may conain charge envelope data. + + + + + Gets centroids with additional charge envelope information (when available) + + + + + Interface to provide algorithms to add scans. + + + + + Creates a sum of two scans. + + The first scan. + The second scan + The sum"first+second" + + + + Caching of scans, which may be provided by an averager + + + + + Gets or sets the maximum number of scans kept in a cache. + Setting ScansCached >0 will enable caching of recently read scans. + This is useful if averaging multiple overlapping ranges of scans. + + + + + Options which can be used to control the Ft / Orbitrap averaging + + + + + The default maximum number of peaks that may have charge determinations. + + + + + Gets or sets the maximum number of ions which are sent to the charge pattern calculation (starting from most intense) + + + + + Gets or sets a value indicating whether parallel code may be used for resampling and merging scans. + Tuning option: Permit separate threads to be used for resampling profiles. + + + + + Gets or sets the maximum number of scans which can be merged at once. + This feature is currently not yet implemented, and the value is ignored. + When MergeInParallel is enabled: this restricts the number of scans which are merged in each group. + Setting this too large may result in more memory allocation for "arrays of results to merge" + Default: 10 + + + + + Gets or sets the minimum number of Re-sample tasks per thread. + Tuning parameter when MergeInParallel is set. + Each scan is analyzed: Determining mass regions which contain non-zero data, + and re-sampling the intensity data aligned to a set of output bins. + After all scans have been re-sampled, the re-sampled data has to be merged into the final output. + Creating re-sampled data for profiles is a fairly fast task. It may be inefficient to queue workers to + created the merged data for each scan in the batch. + Setting this >1 will reduce threading overheads, when averaging small batches of scans with low intensity peaks. + Default: 2. + This feature only affects the re-sampling, as the final merge of the re-sampled data is single threaded. + + + + + Gets or sets a value indicating whether to use the noise and baseline table. + When set: The averaging algorithm calculates average noise based + on a noise table obtained (separately) from the raw file. + The "IRawData" interface doe not have methods to obtain + this "noise and baseline table" from the raw file. + So: The scan averaging algorithm (by default) uses noise information + saved with centroid peaks when calculating the averaged noise. + This option is only effective when data is read via the IRawDataPlus interface. + + + + + Initializes a new instance of the class. + default constructor + + + + + The ScanCreator interface. + + + + + create segmented scan. + + + The index into the supplied table of scans (on initialize) + + + The . + + when index is outside of the scan numbers array + + + + + Create a centroid stream. + + + The index into the supplied table of scans (on construction) + + + The . + + when index is outside of the scan numbers array + + + + + Initialize the scan creator. + This provides the set of scans which will be requested. + This must only be called once. + + + The scan numbers. + + + The cache limit. + + + + + Interface to provide algorithms to average and subtract scans. + + + + + Gets or sets the scan reader. + + + + + Gets the average scan between the given times. + + + start time + + + end time + + + filter string + + mass tolerance settings. If not supplied, these are default from the raw file + + the averaged scan. + + + + + Gets the average scan between the given times. + + + start time + + + end time + + + filter string + + mass tolerance settings. If not supplied, these are default from the raw file + + the averaged scan. + + + + + Gets the average scan between the given times. + + + start scan + + + end scan + + + filter string + + mass tolerance settings. If not supplied, these are default from the raw file + + the averaged scan. + + + + + Gets the average scan between the given times. + + + start scan + + + end scan + + + filter string + + mass tolerance settings. If not supplied, these are default from the raw file + + the averaged scan. + + + + + Calculates the average spectra based upon the list supplied. + The application should filter the data before making this code, to ensure that + the scans are of equivalent format. The result, when the list contains scans of + different formats (such as linear trap MS centroid data added to orbitrap MS/MS profile data) is undefined. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + + list of ScanStatistics + + mass tolerance settings. If not supplied, these are default from the raw file + + The average of the listed scans. + + + + + Calculates the average spectra based upon the list supplied. + The application should filter the data before making this code, to ensure that + the scans are of equivalent format. The result, when the list contains scans of + different formats (such as linear trap MS centroid data added to orbitrap MS/MS profile data) is undefined. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + + list of scans to average + + mass tolerance settings. If not supplied, these are default from the raw file + + Merge data from scans + which were not scanned over a similar range. + Only applicable when scans only have a single segment. + By default: Scans are considered incompatible if: + The span of the scanned mass range differs by 10% + The start or end of the scanned mass range differs by 10% + If this is set as "true" then any mass ranges will be merged. + Default: false + + + The average of the listed scans. + + + + + Subtracts the background scan from the foreground scan + + Foreground data (Left of "scan-scan" operation + Background data (right of"scan-scan" operation) + (optional) mass tolerance settings. If not supplied, values set in "foreground" are used + The result of foreground-background + + + + Interface to provide algorithms to average scans. + + + + + Gets or sets Options For FT/Orbitrap data. + + + + + Gets the average scan between the given times. + Mass tolerance is taken from default values in the raw file + + + start time + + + end time + + + filter string + + + the averaged scan. + + + + + Gets the average scan between the given times. + + + start time + + + end time + + + filter string + + + mass tolerance + + + unit of tolerance + + + returns the averaged scan. + + + + + Gets the average scan between the given scan numbers. + Mass tolerance is taken from default values in the raw file + + + start scan + + + end scan + + + filter string + + + returns the averaged scan. + + + + + Gets the average scan between the given scan numbers. + This finds the list all scans over the scan range, which pass the supplied filter. + The scans are then averaged, as described by + + + start scan of the range to average + + + end scan of the range to average + + + Filter string. Only scans passing this filter are averaged. + + + mass tolerance, used to merge close peaks. + + + unit of tolerance + + + returns the averaged scan. + + + + + Calculates the average spectra based upon the list supplied. + The application should filter the data before making this code, to ensure that + the scans are of equivalent format. The result, when the list contains scans of + different formats (such as linear trap MS centroid data added to orbitrap MS/MS profile data) is undefined. + If the first scan in the list contains "FT Profile", + then the FT data profile is averaged for each + scan in the list. The combined profile is then centroided. + If the first scan is profile data, but not orbitrap data: + All scans are summed, starting from the final scan in this list, moving back to the first scan in + the list, and the average is then computed. + For simple centroid data formats: The scan stats "TIC" value is used to find the "most abundant scan". + This scan is then used as the "first scan of the average". + Scans are then added to this average, taking scans alternatively before and after + the apex, merging data within tolerance. + + + list of ScanStatistics + + + The average of the listed scans. + + + + + The ScanDependentDetails interface. + + + + + Gets the index of the scan. + + + The index of the scan. + + + + + Gets the filter string. + + + The filter string. + + + + + Gets the precursor array. + + + The precursor mass array. + + + + + Gets the isolation width array. + + + The isolation width array. + + + + + The ScanDependents interface. + Result of call to "GetScanDependents" + Provides a set of scan numbers which were created form a particular master scan. + + + + + Gets or sets the type of the raw file instrument. + + + The type of the raw file instrument. + + + + + Gets or sets the scan dependent detail array. + + + The scan dependent detail array. + + + + + The ScanEvent interface. + Determines how scans are done. + + + + + Convert to string. + + + The converted scanning method. + + + + + Gets the accurate mass setting. + + + + + Gets a value indicating whether this event is valid. + + + + + Gets a value indicating whether this is a custom event. + A custom event implies that any scan derived from this event could be different. + The scan type must be inspected to determine the scanning mode, and not the event. + + + + + Gets the source fragmentation mass range count. + + + + + Get the source fragmentation mass range, at a given index. + + + The index. + + + The mass range. + + + + + Gets the mass calibrator count. + + + + + Get the mass calibrator, at a given index. + + + The index, which should be from 0 to MassCalibratorCount -1 + + + The mass calibrator. + + Thrown when requesting calibrator above count + + + + The IScanEventBase interface defines scanning features + which are common to "scan events" and "scan filters". + + + + + Gets the scan data format (profile or centroid). + + + + + Gets the polarity of the scan. + + See for possible values + + + + Gets the scan MS/MS power setting. + + See for possible values + + + + Gets the dependent scan setting. + A scan is "dependent" if the scanning method is based + on analysis of data from a previous scan. + + + + + Gets source fragmentation scan setting. + + + + + Gets the source fragmentation type setting. + + See for possible values + + + + Gets the scan type setting. + + See for possible values + + + + Gets the turbo scan setting. + + + + + Gets the ionization mode scan setting. + + See for possible values + + + + Gets the corona scan setting. + + + + + Gets the detector validity setting. + The property only contains valid information + when this is set to "DetectorType.Valid" + + See for possible values + + + + Gets the detector value. + This should only be used when valid. + + Floating point detector value + + + + Gets the wideband scan setting. + + + + + Gets the mass analyzer scan setting. + + See for possible values + + + + Gets the sector scan setting. Applies to 2 sector (Magnetic, electrostatic) Mass spectrometers, or hybrids. + + See for possible values + + + + Gets the lock scan setting. + + + + + Gets the field free region setting. + + See for possible values + + + + Gets the ultra scan setting. + + + + + Gets the enhanced scan setting. + + + + + Gets the multi-photon dissociation setting. + + + + + Gets the multi-photon dissociation value. + + Floating point multi-photon dissociation value + + + + Gets the electron capture dissociation setting. + + + + + Gets the electron capture dissociation value. + + Floating point electron capture dissociation value + + + + Gets the photo ionization setting. + + + + + Gets pulsed dissociation setting. + + + + + Gets the pulsed dissociation value. + + Floating point pulsed dissociation value + + + + Gets the electron transfer dissociation setting. + + + + + Gets the electron transfer dissociation value. + + Floating point electron transfer dissociation value + + + + Gets the higher energy CID setting. + + + + + Gets the higher energy CID value. + + Floating point higher energy CID value + + + + Gets the Multiplex type + + + + + Gets the parameter a. + + + + + Gets the parameter b. + + + + + Gets the parameter f. + + + + + Gets the Multi notch (Synchronous Precursor Selection) type + + + + + Gets the parameter r. + + + + + Gets the parameter v. + + + + + Gets the event Name. + + + + + Gets supplemental activation type setting. + + + + + Gets MultiStateActivation type setting. + + + + + Gets Compensation Voltage Option setting. + + + + + Gets Compensation Voltage type setting. + + See for possible values + + + + Gets encoded form of segment and scan event number. + + HIWORD == segment, LOWORD == scan type + + + + Gets number of (precursor) masses + + The size of mass array + + + + Gets the reaction data for the mass at 0 based index. + Descries how a particular MS/MS precursor mass is fragmented. + Equivalent to calling GetMass, GetEnergy, GetPrecursorRangeValidity, GetFirstPrecursorMass + GetLastPrecursorMass, GetIsolationWidth, GetIsolationWidthOffset, GetEnergyValid + GetActivation, GetIsMultipleActivation. + Depending on the implementation of the interface, this call may be more efficient + than calling several of the methods listed. + + index of reaction + reaction details + + + + Retrieves mass value for MS step at 0-based index. + + + Use to get the count of mass values. + + + Index of mass value to be retrieved + + + Mass value of MS step + + Will be thrown when index >= MassCount + + + + Retrieves precursor(collision) energy value for MS step at 0-based index. + + + Use to get the count of energies. + + + Index of precursor(collision) energy to be retrieved + + + precursor(collision) energy of MS step + + + + + Determine if a precursor range is valid. + + + The index. + + + true if valid + + + + + Gets the first precursor mass. + This is only valid data where "GetPrecursorRangeValidity" returns true for the same index. + + + The index. + + + The first mass + + + + + Gets the last precursor mass. + This is only valid data where "GetPrecursorRangeValidity" returns true for the same index. + + + The index. + + + The last mass + + + + + Gets the isolation width. + + + The index. + + + The isolation width + + + + + Gets the isolation width offset. + + + The index. + + + The isolation width offset + + + + + Retrieves precursor(collision) energy validation flag at 0-based index. + + + Use to get the count of precursor(collision) energy validations. + + + Index of precursor(collision) energy validation to be retrieved + + + precursor(collision) energy validation of MS step; + See for possible values + + + + + Retrieves activation type at 0-based index. + + + Use to get the count of activations. + + + Index of activation to be retrieved + + + activation of MS step; + See for possible values + + + + + Retrieves multiple activations flag at 0-based index of masses. + + + Use to get the count of masses. + + + Index of flag to be retrieved + + + true if mass at given index has multiple activations; false otherwise + + + + + Gets the number of mass ranges for final scan + + The size of mass range array + + + + Retrieves mass range for final scan at 0-based index. + + + Use to get the count of mass ranges. + + + Index of mass range to be retrieved + + + Mass range for final scan at 0-based index + + Will be thrown when index >= MassRangeCount + + + + Gets the number of source fragmentation info values + + The size of source fragmentation info array + + + + Retrieves a source fragmentation info value at 0-based index. + + + Use to get the count of source + fragmentation info values. + + + Index of source fragmentation info to be retrieved + + + Source Fragmentation info value at 0-based index + + Will be thrown when index >= SourceFragmentationInfoCount + + + + The ScanEvents interface. + + + + + Gets the number segments. + + + + + Gets the number of events in a specific segment (0 based) + + The segment number + The number of events in this segment + + + + Get an event, indexed by the segment and event numbers (zero based). + + + The segment. + + + The event number. + + + The event. + + + + + Get an event, using indexed event number (zero based). + This gets events from all segments in order, + use "ScanEvents" to get the total count of events. + + + The event Number. + + + The event. + + + + + Gets the total number of scan events, in all segments + + + + + The filter rule for accurate mass. + + + + + Accurate mass mode off + + + + + Accurate mass mode on + + + + + Accurate mass mode is internal (reference or lock peak in this scan) + + + + + Accurate mass mode is external (no reference in this scan) + + + + + Accept any accurate mass mode + + + + + Specified whether the source fragmentation info is valid. + + + + + The fragmentation is "energy" + + + + + No specific type. + + + + + Meta Filter + + + + + No meta filter + + + + + HCD meta filter + + + + + ETD meta filter + + + + + CID meta filter + + + + + UVPD meta filter. + + + + + The ScanFilter interface defines a set of rules for selecting scans. + For example: Testing if a scan should be included in a chromatogram. + Many if the rules include an "Any" choice, which implies that this rule + will not be tested. + Testing logic is included in the class + The class contains methods related to filters, the filter helper and raw data. + + + + + Gets the accurate mass filter rule. + + + + + Gets or sets the mass precision, which is used to format the filter (in ToString). + + + + + Gets or sets additional instrument defined filters (these are bit flags). + See enum MetaFilterType. + + + + + Gets the number of unique masses, taking into account multiple activations. + For example: If this is MS3 data, there are two "parent masses", + but they may have multiple reactions applied. + If the first stage has two reactions, then there are a total of + 3 reactions, for the 2 "unique masses" + + + + + Gets or sets an array of values which determines if the source fragmentation values are valid. + + + + + Get source fragmentation info valid, at zero based index. + + + The index. + + + The . + + + + + Convert an index to multiple activation index. + Converts a simple mass index to the index to the unique mass, + taking into account multiple activations. + + + The index to convert. + + + The index of the unique mass. + + + + + Gets or sets the locale name. + This can be used to affect string conversion. + + + + + Convert to string. + Mass values are converted as per the precision. + + + The . + + + + + Retrieves a compensation voltage (cv) value at 0-based index. + + + Use to get the count of + compensation voltage values. + + + Index of compensation voltage to be retrieved + + + Compensation voltage value (cv) at 0-based index + + + + + Gets the number of compensation voltage values. + This is the number of values related to cv mode. + 1 for "single value", 2 for "ramp" and 1 per mass range for "SIM". + + + + + Gets the number of Source Fragmentation values. + This is the number of values related to sid mode. + 1 for "single value", 2 for "ramp" and 1 per mass range for "SIM". + + + + + Retrieves a source fragmentation value (sid) at 0-based index. + + + Use to get the count of + source fragmentation values. + + + Index of source fragmentation value to be retrieved + + + Source Fragmentation Value (sid) at 0-based index + + + + + Gets or sets the scan data type (centroid or profile) filtering rule. + + + + + Gets or sets the polarity (+/-) filtering rule. + + See for possible values + + + + Gets or sets the scan power or MS/MS mode filtering rule, such as MS3 or Parent scan. + + See for possible values + + + + Gets or sets the dependent scan filtering rule. + + + + + Gets or sets source fragmentation scan filtering rule. + + + + + Gets or sets the source fragmentation type filtering rule. + + See for possible values + + + + Gets or sets the scan type filtering rule. + + See for possible values + + + + Gets or sets the mass analyzer scan filtering rule. + + See for possible values + + + + Gets or sets the detector scan filtering rule. + + See for possible values + + + + Gets or sets the turbo scan filtering rule. + + + + + Gets or sets the ionization mode filtering rule. + + See for possible values + + + + Gets or sets the corona scan filtering rule. + + + + + Gets or sets the detector value. + This is used for filtering when the Detector filter is enabled. + + Floating point detector value + + + + Gets or sets the wideband filtering rule. + + + + + Gets or sets the sector scan filtering rule. + + See for possible values + + + + Gets or sets the lock scan filtering rule. + + + + + Gets or sets the field free region filtering rule. + + See for possible values + + + + Gets or sets the ultra scan filtering rule. + + + + + Gets or sets the enhanced scan filtering rule. + + + + + Gets or sets the multi-photon dissociation filtering rule. + + + + + Gets or sets the multi-photon dissociation value. + + Floating point multi-photon dissociation value + + + + Gets or sets the electron capture dissociation filtering rule. + + + + + Gets or sets the electron capture dissociation value. + + Floating point electron capture dissociation value + + + + Gets or sets the photo ionization filtering rule. + + + + + Gets or sets pulsed dissociation filtering rule. + + + + + Gets or sets the pulsed dissociation value. + Only applies when the PulsedQDissociation rule is used. + + Floating point pulsed dissociation value + + + + Gets or sets the electron transfer dissociation filtering rule. + + + + + Gets or sets the electron transfer dissociation value. + Only used when the "ElectronTransferDissociation" rule is used. + + Floating point electron transfer dissociation value + + + + Gets or sets the higher energy CID filtering rule. + + + + + Gets or sets the higher energy CID value. + Only applies when the "HigherEnergyCiD" rule is used. + + + + + Gets or sets the Multiplex type filtering rule. + + + + + Gets or sets the parameter a filtering rule.. + + + + + Gets or sets the parameter b filtering rule.. + + + + + Gets or sets the parameter f filtering rule.. + + + + + Gets or sets the SPS (Synchronous Precursor Selection) Multi notch filtering rule. + + + + + Gets or sets the parameter r filtering rule.. + + + + + Gets or sets the parameter v filtering rule.. + + + + + Gets or sets the event Name. Used for "compound name" filtering. + + + + + Gets or sets supplemental activation type filter rule. + + + + + Gets or sets MultiStateActivation type filtering rule. + + + + + Gets or sets Compensation Voltage filtering rule. + + + + + Gets or sets Compensation Voltage type filtering rule. + + See for possible values + + + + Defines a method of parsing a scan filter. + This could be used for UI validation of scan filter text, without an + open raw file. + + + + + Gets or sets the precision expected for collision energy + + + + + Gets or sets the precision expected for mass values + + + + + Parse a string, returning the scan filter codes. + + String to parse + Filters in the supplied string, or null if the string cannot be parsed. + The string can be considered incorrect if there are too many digits in a numeric value + or too many digits after the decimal point, for a mass or energy. + + + + + Read only access to scan statistics + + + + + Gets the intensity of highest peak in scan + + + + + Gets the mass of largest peak in scan + + + + + Gets the highest mass in scan + + + + + Gets the lowest mass in scan + + + + + Gets the Number of points in scan + + + + + Gets the indication of data format used by this scan + + + + + Gets the event (scan type) number within segment + + + + + Gets the number of the scan + + + + + Gets the time segment number for this event + + + + + Gets the time at start of scan (minutes) + + + + + Gets the total Ion Current for scan + + + + + Defines information which can select a scan. + For example: Determine if a scan should be included in a chromatogram. + + + + + Gets or sets a value indicating whether the "scan filter" will be used as a selection mechanism. + + + + + Gets or sets the scan filter. + If UseFilter is false, or this is null, it is not used as a selection mechanism. + + + + + Gets or sets the name. + This is the component or compound name list to filter against. + If this is null or empty, it is not used as a selection mechanism. + + + + + Read only access to scan statistics + Extends data from the index. + + + + + Gets the longest wavelength in PDA scan + + + + + Gets the shortest wavelength in PDA scan + + + + + Gets the number of + channels acquired in this scan, if this is UV or analog data, + + + + + Gets a value indicating whether this scan contains centroid data (else profile0 + + + + + Gets a String defining the scan type, for filtering + + + + + Gets the frequency. + + + + + Gets a value indicating whether is uniform time. + + + + + Gets the absorbance unit scale. + + + + + Gets the wave length step. + + + + + Gets the cycle number. + + Cycle number used to associate events within a scan event cycle. + For example, on the first cycle of scan events, all the events + would set this to '1'. On the second cycle, all the events would + set this to '2'. This field must be set by devices if supporting + compound names for filtering. However, it may be set in all + acquisitions to help processing algorithms. + + + + + + Interface to provide algorithms to subtract scans. + + + + + Creates a difference of two scans. + + The scan containing signal. + The scan containing background + The difference "foregroundScan-backgroundScan" + + + + Interface for Access to the data in a segmented scan + + + + + Gets the number of segments + + + + + Gets the number of data points in each segment + + + + + Gets Intensities for each peak + + + + + Gets Masses or wavelengths for each peak + + + + + Gets Flagging information (such as saturated) for each peak + + + + + Gets the Mass ranges for each scan segment + + + + + Interface to read a sequence (SLD) file. + + + + + Gets the file header for the sequence + + + + + Gets the file error state. + + + + + Gets a value indicating whether the last file operation caused an error + + + + + + Gets a value indicating whether true if a file was successfully opened. + Inspect "FileError" when false + + + + + Gets additional information about a sequence + + + + + Gets the set of samples in the sequence + + + + + Interface to get information about a sequence + + + + + Gets the display width of each sequence column + + + + + Gets the column order (see home page?) + + + + + Gets the sequence bracket type. + This determines which groups of samples use the same calibration curve. + + + + + Gets the set of column names for application specific columns + + + + + Gets a description of the auto-sampler tray + + + + + Gets the user configurable column names + + + + + Provides methods to create and write samples to a sequence file. + + + + + Gets the file header for the sequence + + + + + Gets the file error state. + + + + + Gets a value indicating whether the last file operation caused an error + + + + + + Gets or sets additional information about a sequence + + + + + Gets the set of samples in the sequence + + + + + Gets the name of the sequence file. + + + + + Gets or sets the sequence bracket type. + This determines which groups of samples use the same calibration curve. + + + + + Gets or sets a description of the auto-sampler tray + + + + + Sets the user label at given 0-based label index. + + + SampleInformation.MaxUserTextColumnCount determines the maximum number of user + column labels. + + Index of user label to be set + New string value for user label to be set + true if successful; false otherwise + + + + Retrieves the user label at given 0-based label index. + + + SampleInformation.MaxUserTextColumnCount determines the maximum number of user + column labels. + + Index of user label to be retrieved + String containing the user label at given index + + + + Update the sequence file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + A default FileHeader is created with every new writer instance. + + + The file header object with values to use. + + + + + Saves Sequence data to disk. + + True saved data to disk; false otherwise. + + + + Defines signal to noise calculation measurements + which may be shown on a peak label or tabulated. + + + + + Gets the noise classification, which must be + checked to see if a valid noise value is available. + + + + + Gets the peak retention time. + + + + + Gets the peak width at half height above baseline + + + + + Gets the peak area. + + + + + Gets the height of the signal (i.e. peak height above baseline). + + + + + Gets the peak baseline value determined by the noise slope and intercept values. + + + + + Gets the start time of the peak (i.e. peak left extent) + + + + + Gets the end time of the peak (i.e. peak right extent) + + + + + Gets the start time of the noise determination range. + + + + + Gets the end time of the noise determination range. + + + + + Gets the minimum intensity of noise points. + + + + + Gets the Maximum intensity of noise points. + + + + + Gets the noise part of the signal to noise estimation. + + + + + Gets the slope of the fitted line. + + + + + Gets the offset of the fitted line. + + + + + Gets the ratio of the signal to noise estimation ( divided by ). + + + + + The SimpleScanAccess interface. + Defines the most basic data of a scan (mass and intensity) + + + + + Gets the list of masses of each centroid + + + + + Gets the list of Intensities for each centroid + + + + + The SimpleScanHeader interface. + Defines minimal data about a scan (its number and retention time) + + + + + Gets the retention time. + + + + + Gets the scan number. + + + + + Define a combination of both scan and header + + + + + Gets the scan header + + + + + Gets the scan data + + + + + Gets the event, which defines how this scan was created + + + + + Provides methods to return scan data, or centroid scan data as just mass and intensity values + + + + + This method is similar to GetSegmentedScanFromScanNumber in the IRawData interface. + The method returns only the mass and intensity values from + the scan data for a scan. + Values for flags etc. are not returned, saving data space and improving efficiency. + This method never returns "reference and exception peak" data. + The method is designed for improved performance in custom XIC generators. + + The scan whose mass intensity data are needed + Mass and intensity values from the scan. + + + + This method is similar to GetCentroidStream in the IRawData interface. + The method returns only the mass and intensity values from + the "centroid stream" data for a scan. This is also known as "Label Stream" + Values for flags etc. are not returned, saving data space and improving efficiency. + The method is designed for improved performance in custom XIC generators. + + The scan whose mass intensity data are needed + Mass and intensity values from the scan "centroid data". + + + + This method permits events to be read as a block for a range of scans, + which may reduce overheads involved in requesting one by one. + Events define how scans were acquired. + Potentially, in some data models, the same "event" may apply to several scans + so it is permissible for the same reference to appear multiple times. + + The first scan whose event is needed + The last scan + An array of scan events + + + + Log of a particular status value, over time + + + + + Gets the retention times for each value (x values to plot) + + + + + Gets the values logged for each time (the trended data, y values to plot). + + + + + Provides methods to write UV devices data. + Note: The following functions should be called before acquisition begins: + 1. Write Instrument Info + 2. Write Instrument Expected Run Time + 3. Write Status Log Header + If caller is not intended to use the status log data, pass a null argument or zero length array. + ex. WriteStatusLogHeader(null) or WriteStatusLogHeader(new IHeaderItem[0]) + + + + + Writes both the UV type of the instrument data and the index into the disk. + This is the simplest format of data we write to a raw file since it doesn't have any + profile indexing and there is no segmentation of the data. + + The UV type of instrument scan data. + The UV type of the scan index. + True if scan data and index are written to disk successfully, False otherwise + + + + Defines the instrument data index for UV type devices + + + + + Gets the number of channels. + + + + + Gets the frequency. + For UV device only, it will be ignored by Analog devices + + + + + Gets a value indicating whether is uniform time. + For UV device only, it will be ignored by Analog devices + + + + + Copies the specified source. + Copy all the non-static fields of the current object to the new object. + Since all the fields are value type, a bit-by-bit copy of the field is performed. + + Create a copy of the same object type + + + + Contains interfaces to data, related to "MS data systems". + Includes some enums used within these interfaces + Used as an interchange between various common core DLLs. + + + + + Interface supporting type safe deep cloning of objects + + Type to clone + + + + + Produce a deep copy of an object. + Must not contain any references into the original. + + The deep cloned object + + + + + Make a cache of the "n" most recently used copies of an object. + For example: If different parts of an application are likely to read the same data from a file + multiple times, this can be used to reduce the file operations. + + Type of object in the cache + + + + + Obtain a record from a data source, based on an index + Example: Scan from raw file, based on scan number. + + + Index of object + + + Object read from data source + + + + + Initializes a new instance of the class. + Initialize a cache + + + Maximum number of items in the cache. Oldest items are discarded when the cache is full + + + Delegate to read a new item, when not in the cache. + + + + + The queue item. + + + + + Gets or sets Index. + + + + + Gets or sets Value. + + + + + Get an item from the cache. + If the item is not available in the cache, it is requested from the item reader (supplied to the constructor). + When new items are read: This automatically caches new items, discarding oldest items. + + + Record number + + + item from the cache. May be "null" if this item is not in the cache, and the reader has no value for this index + + + + + Gets the number of cached items + + + + + Gets the maximum number of cached items + + + + + Gets or sets a value indicating whether all items returned from the cache are Deep Cloned. + If false: The cache only keeps references + + + + + empty the cache + + + + + ItemCollection is a custom collection of generic (user defined) types. + It allows for triggering events when items are added or removed. It also provides + a means to have read-only collection properties during XML serialization. + + The type of the generic type. + + + + Occurs when [item added]. + + + + + Occurs when [item removed]. The sender parameter is a pointer to the object being changed. + + + + + Occurs when [items cleared]. The sender parameter is a pointer to the object being changed. + + + + + Gets a value indicating whether this instance has changed. + + + true if this instance has changed; otherwise, false. + + + + + Clears the has changed status of the item collection + + + + + Sort the collection + + comparer, to order the sort + + + + Sort the collection + + comparison method, to order the sort + + + + Add a range of items to the collection + + Items to add + + + + Inserts an element into the at the specified index and fires an event and a event. + + The zero-based index at which should be inserted. + The object to insert. The value can be null for reference types. + + is less than zero.-or- is greater than . + + + + Removes the element at the specified index of the and fires an event and a property changed event. + + The zero-based index of the element to remove. + + is less than zero.-or- is equal to or greater than . + + + + Removes all elements from the and fires a event and a property changed event. + + + + + Creates a new object that is a copy of the current instance. + + + A new object that is a copy of this instance. + + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + The parameter is null. + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Provides a custom deep equality operation when checking for equality. + + The value to compare. + true if the objects are equal + + + + Performs the default settings for the data object. This can be overridden in each data object that implements the interface to perform + initialization settings. Method is empty (does nothing) in ItemCollection + + + + + Signals the changed. + + Name of the property that has changed + + + + Signals the changed. + + The sender. + Name of the property. + + + + Internal handler for property changed + + + The sender. + + + The args. + + + + + Occurs when a property value changes. + + + + + Contains general purpose data support, such as generic factories and collections. + + + + + Provides a delegate to open files for specific extensions + given the 'type' and 'assembly'. + The class calls the method that has a single string parameter + and returns T. + This class can also be used in conjunction with the + ''. In such a situation, it is not + required that Initialize' is called. + + This should be an interface to data read from a file. + + + + + The default name of a method which can return {T} + + + + + Gets the delegate to invoke. + + + + + Gets the delegate to invoke a specified method. + + + The specified method. + + + + + Gets or sets the file extension associated with this instance. + + + + + Gets or sets a value indicating whether Initialized. + + + + + Initializes a new instance of the class. + Associates the extension, class type and the assembly + with this instance. + The default method with name "FileFactory" will be invoked. + + + file extension + + + fully qualified class name to initialize + + + fully qualified assembly name + + + + + Initializes a new instance of the class. + Associates the extension, class type and the assembly + with this instance. + The method name can also be passed if it is different. + However, for the method to be invoked it needs to match the + delegate's signature. + + + file extension + + + fully qualified class name to initialize + + + fully qualified assembly name + + + method name + + initialize, but loading the required assembly and type + + + + Initializes a new instance of the class. + + + The method to open a file which returns {T}, given a file name. + + + The file extension. + + + + + Initializes a new instance of the class. + This version permits a method to be specified, which is called with + parameters of the given types. + + + The type to initialize. + + + The assembly to load. + + + Name of the method. + + + Parameter types of the specified method + + + if set to true [initialize]. + + + + + Loads the assembly, class and determines the method to invoke. + Needs to be called immediately after the constructor. This call is + required when the class is used as a stand-alone class. + If used with , then constructing + will initialize the . + + + The initialize. + + + + + Load the assembly + + + Permit exceptions to be thrown + + + True is successful + + + ArgumentException. + + + FileLoadException. + + + NotSupportedException Thrown when the expected method signature is not found. + + + + + Checks for a specific method signature as below. + (string) + + + Type loaded from assembly (by reflection) + + + NotSupportedException. + + + + + Opens the named file, returning an interface to access the file. + In error conditions, some adapters may throw exceptions + Caller should handle exceptions (typically "file not valid"). + + + Name of file to open + + + The opened file, or null if no file can be opened + + + Sent if the DLL fails to return {T}. This may be thrown for a missing or corrupt file. + + + Failed to cast to specified type {T}. + This will be thrown if either, the return from the invoked factory method was null + or the returned object converts to a null {T} with an "as" operator. + + + + + Invoke the specified method. + + The parameters. + An object of the expected type + Failed to cast returned object to T. + + + + + Represents the strongly typed collection of that can be + Individually accessed by index. + This collection can then use the contained items to open files, which can read the + required data, and return to the caller {T}. + + Interface to data read from a file by the factory + + + + + Gets or sets the default file extension. + When a file name is sent to the method with no extension, + or an empty extension is sent to to , + this extension is assumed. + + + + + Gets or sets a value indicating whether to aggressively attempt to open the file, + using any known format. It is only applicable if the supplied file + has no extension supplied. It is false by default. + For files with no extension, the adapter for the default extension + is tried first, and then the file is attempted to be + opened with all other adapters. + If no adapters can open the file, the exception from + the default adapter is re-thrown. + + + + + Gets or sets a value indicating whether a "dynamic default extension" is used. + This property is only used when is set, + and when files names sent to have no extension. + If DynamicDefault is true, When successfully opening a file, + the is adjusted to the extension of the + adapter found. This is intended to increase efficiency when processing a + sequence of files, as the adapter search would be faster after the first file. + By default this is false, and the default is not adjusted. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + Initializes/loads the assembly and types by iterating through the collection. + + + collection of + + + + + Initialize the collection. + + + The collection of object factories. + + + + + To Find the index of a given item + + + item to find + + + index of the item + + + + + Insert an item at a given index + + + index at which to insert + + + item to insert + + + + + remove an item from a given location + + + index from where to remove + + + + + indexer property for the list + + index location + item at given location/index + + + + adds an item to the list + + + item to add + + + + + adds a range of items + + + items as an array + + + + + clears the underlying list + + + + + checks for the existence of an item in the list + + + item to check + + + true if found, else false + + + + + copies a part of the list to the given array + + + array into which items will be copied + + + index from where the copy would begin + + + + + Gets the total number of items in the list + + + + + Gets a value indicating whether the list is readonly + + + + + removes an item from the list + + + item to remove + + + true if removed, else false + + + + + Get a strongly types enumerator + + + A strongly types enumerator + + + + + Get a default enumerator of the list + + + a default enumerator of the list + + + + + Gets the for the given extension. + This finds an object for opening files with the given extension (such as ".pmd") + + + valid extension + + + return a which can open files of the given extension, + or null if there is no available creator for the extension + + + + + Implementation of delegate which can open any + kind of file, based on the extension. + + + The name of the file + + + An interface to the object data + + + Exception. + + + + + The try all other adapters. + + + The file name. + + + The default creator. + + + An interface to the object data + + + + + Method executed in parallel + + + + + Method executed in parallel + + + + + Run many very small tasks in parallel. + faster than TPL for very granular tasks, such as 2mS to 10mS per task. + Avoids overheads of "queuing tasks to workers". + Instead: All workers pull from a common queue. + The algorithm works by queuing a limited number of worker tasks, which the task pool distributes between + worker threads. Each worker task can run until every job is pulled from the queue. + The reason this is more efficient than TPL is that TPL will queue a work item for every item in + the work list, causing overheads within queuing work items, and overheads when the work items complete. + To use this class, create an array (or List) of objects, each of which is self contained (thread safe) and + has an Execute method, which performs the required processing. Pass this to RunInParallel. + + + + + Default value for MaxWorkers property + + + + + Gets or sets the maximum number of worker jobs to queue. + This typically does not need to be set (can be left at default). + Setting this to 1 is useful for basic performance tuning, as all work + will be done by the current thread (single threaded). + Other settings could be used for fine tuning and research. + Worker jobs do not imply threads. Each worker is able to process the entire job queue. + The number of threads available is automatically set by the .net thread pool. + Suggested range of this: 10 to 20. Default 12. + + + + + Gets or sets the batch size. + When task times are very small (less than 1 mS), it may be more efficient to ensure each worker has more than one task. + By default (BatchSize=0) the class could schedule 12 workers to run 12 tasks (assuming MaxWorkers is still the default, 12). + But: if the tasks are very short, this may add some overheads. Setting "BatchSize" to 2 would limit the number of workers to 6 in this case, + with the Max (12) workers being used when there are 24 or more tasks in the list + + + + + Initializes a new instance of the class. + Default constructor + + + + + Run tasks in parallel with default settings + + tasks to execute + + + + The number of worker threads. + This is initialized to the total number of workers needed. + Each worker counts it down when completed, and frees the main thread when zero. + + + + + Each item in the list has a "Execute" method. + The methods are called on each object using a parallel scheme + which permits each worker thread to act on any item in the list. + The objects in the list should save results of their respective execute methods. + Calling code can then iterate through the runners as soon as this call completes, + and use the generated results within the objects. + + + The objects which need to have an "Execute" method called on them. + For example "array of T, where T implements IExecute"/> + + + + + Gets or sets a value indicating whether to use TPL for the parallel execution. + There can be trade-offs between overheads, such as initialization or thread locking, when comparing + the TPL model and the model within this class. Applications can research which model gives higher performance. + All other settings are ignored if this is set. + + + + + Worker method for threads + + + not used + + + + + The worker complete. + + + + + The process all available jobs. + + + + + Delegate defining a method which can create an instance of IRawData, based + on a string (usually a file name). + + + file name + + + Interface to read raw data + + + + + Contains generic validation methods. + + + + + Validates that the specified is not null. + + type of the parameter + Name of the parameter. + The value to check. + is thrown if argument is null. + + + + Validates that the specified is not null or empty. + + Name of the parameter. + The value to check. + is thrown if argument is null. + is thrown if argument is empty. + + + + Specifies the resource text for an enumeration field. + This attribute is used by the EnumFormat class to get display strings for enumeration values. + + + The resource manager base name provided here will automatically be prefixed with the namespace + of the enumeration type. For example, an enumeration defined in XCL.Acquisition with a + ResourceText attribute base name of "EnumBase" will use a resource manager base name of + "XCL.Acquisition.EnumBase". + + + + + Initializes a new instance of the ResourceTextAttribute class with the resource name + for the enumeration field. The default resource base name of "Enumerations" is used. + + The resource name for the enumeration value. + + + + Initializes a new instance of the ResourceTextAttribute class with the resource name + and resource base name for the enumeration field. + + The resource name for the enumeration value. + The resource manager base name for the enumeration value. + + + + Gets the resource manager base name for the enumeration field. + + + + + Gets the resource name for the enumeration field, without the enumeration type's namespace prefix. + + + + + TrackedDataObject object is an abstract class that provides property + change event processing without redundancy. + If the business object you are designing + requires property change notifications, + implement this abstract class and call the SetProperty inside your setters./> + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Compares this object with another. + Traverse the set of member variables to compare against the object that was passed in. + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + The parameter is null. + + + + Sets the property and hooks up event processing automatically. + + The type of object the underlying data class is. + The private member. + Name of the property that will appear in the event. + The value the property is being set to. + true if the property value has changed + + + + Occurs when a property value changes. + + + + + Signals when a property value is changed. This is merely a central function that is called every time the property is changed so as to + eliminate redundant code. + + Name of the property being changed. + + + + Gets a value indicating whether this object has a property change event + + + + + Signals when a property value is changed. This is merely a central function that is called every time the property is changed so as to + eliminate redundant code. + + The sender, i.e., the instance of the object being changed. + Name of the property being changed. + + + + The property signal changed handler. + + + The sender. + + + The args. + + + + diff --git a/packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/ThermoFisher.CommonCore.RawFileReader.5.0.0.93.nupkg b/packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/ThermoFisher.CommonCore.RawFileReader.5.0.0.93.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..f9f427cfcdbb982dc029f79b32ebf9f9d092a307 GIT binary patch literal 410594 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

IKD#Qfx00HV`X;DGdpGbK! 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

7K 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

RhovqV%3`)jP%nEH@FmPQ%0!d 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 literal 0 HcmV?d00001 diff --git a/packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.RawFileReader.dll b/packages/ThermoFisher.CommonCore.RawFileReader.5.0.0.93/lib/netstandard2.0/ThermoFisher.CommonCore.RawFileReader.dll new file mode 100644 index 0000000000000000000000000000000000000000..841bd0d558b66b81e2093a007891d6ac8d8b287f GIT binary patch literal 650752 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⪼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 %14R`VrWleFx$2kV{T!?LzD4epbbQc3LyO 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

J#rgZ4+WE-!bQpSh)@PS1XI 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 + + + ThermoFisher.CommonCore.RawFileReader + + + +

+ Calculates checksum (also called a CRC) using Adler-32 algorithm. + + + + + Gets the checksum of all added items + + + + + Calculate the CRC for an array + + + Initial checksum value (often this object.Checksum) + + + Data to check + + + + + Calculate the CRC for an file header array. + This sets the value of "CRC" to zero first in the supplied data + + Bytes copied from the file header + + + + Calculate CRC of a block of data + + CRC of previous blocks, 0 if first block + Data to check + CRC of this block + + + + Basic format of chromatogram delivery: + Just keeps a copy of the data + + + + + Gets or sets the "request" which determines what kind of chromatogram is needed. + + + + + Gets the chromatogram data + + + + + Implements the "Process" interface, as just saving a reference to the data. + + The chromatogram which has been generated + + + + The wrapped centroid stream. + + + + + Creates a CentroidStream from label peaks. + + + The label peaks. + + + Thrown if labelPeaks is null + + + The . + + + + + Copy data from an array of LabelPeak + + stream to fill + + The label peaks to copy. + + + + + The instrument data converter. + Converts instrument data from internal interfaces to public format. + Note: Created as a static class rather than a wrapper (extending the type) + so that the expected type is returned to the caller, supporting serialize etc. + + + + + Convert the IO format to CommonCore format + + The instrument identifier. + + + + Information about the auto sampler, as logged in a raw file + + + + + Initializes a new instance of the class. + Construct auto sampler information, with no initial data. + This path occurs for older raw files, which do not have this block. + The shape is defined as "Invalid" in this case. + + + + + Initializes a new instance of the class. + + + The auto sampler config. + + + + + Gets or sets the tray index, -1 for "not recorded" + + + + + Gets or sets the tray name. + + + + + Gets or sets the shape. + If this property returns "Invalid", no other values in this object + contain usable information. + Invalid data can occur for older raw file formats, before auto sampler data was added. + + + + + Gets the tray shape as a string + + + + + Gets or sets the vial index, -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray. + -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray, across the tray. + -1 for "not recorded" + + + + + Gets or sets the number of vials (or wells) per tray, down the tray. + -1 for "not recorded" + + + + + The wrapped error log entry. This implements the public interface on + an error logged in a raw file + + + + + Initializes a new instance of the class. + + + The error log item. + + + + + Initializes a new instance of the class. + + + + + Gets the error message. + + + + + Gets the retention time. + + + + + The wrapped file error. Translates error information + from a raw file into public interface + + + + + Initializes a new instance of the class. + + + The errors. + + + + + Gets the error code number. + Typically this is a windows system error number. + + + + + Gets the error message. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets a value indicating whether this file has detected a warning. + If this is false: Other warning properties in this interface have no meaning. + + + + + Gets the warning message. + + + + + The wrapped filtered scan iterator. Iterates over scans matching a given filter. + + + + + Initializes a new instance of the class. + + + The device. + + + The filter. + + + + + Gets the filter used for iterating over spectra, in string form. + + + + + Gets a value indicating whether there are more scans after the current scan + Note that this does not check if this scan matches the filter. + returns true if there is an Next spectrum in file. Otherwise false + + + + + Gets a value indicating whether there may be spectra before the current scan. + Note that this does not check if this scan matches the filter. + + + + + Gets the Next Spectrum, matching the filter + returns the next spectrum number in file. 0 if there is no file open + + + + + Gets the Previous Spectrum, matching the filter + returns the previous spectrum number in file. 0 if there is no file open + + + + + Sets the CurrentSpectrumNumber to the new Spectrum Number + + + + + Set the filter used for iterating over spectra. + This can be used with the NextSpectrumNumber method to iterate over scans with a certain filter + + + an object containing the Filter to be used for iterating over spectra + + + The . + + + + + The wrapped header items. + Converts internal header items (for generic data types) + to public format. + + + + + Initializes a new instance of the class. + + The data descriptors. + Null data descriptor argument + + + + Copies from. + + The data descriptors. + + + + Wrapped log entry. Presents a log entry, as defined in the Data DLL. + + + + + Initializes a new instance of the class. + + + The status log. + + statusLog is null + + + + + Initializes a new instance of the class. + + + The trailer extra. + + trailerExtra is null + + + + + The wrapped run header. + Converts internal run header to public interface + + + + + Initializes a new instance of the class. + + The run header. + run header is null + + + + Gets the first comment about this data stream. + + + + + Gets the second comment about this data stream. + + + + + Gets the time of last scan in file + + + + + Gets the count of error log entries + + + + + Gets the expected data acquisition time. + + + + + Gets the number of digits of precision suggested for formatting masses + in the filters. + + + + + Gets the first spectrum (scan) number (typically 1). + + + + + Gets the highest recorded mass in file + + + + + Gets a value indicating whether this file is being created. + + + + + Gets the last spectrum (scan) number. + If this is less than 1, then there are no scans acquired yet. + + + + + Gets the lowest recorded mass in file + + + + + Gets the mass resolution of this instrument. + + + + + Gets the max integrated intensity. + + + + + Gets the max intensity. + + + + + Gets the count of recorded spectra + + + + + Gets the time of first scan in file + + + + + Gets the count of status log entries + + + + + Gets the tolerance units + + + + + Gets the count of "trailer extra" records. + Typically, same as the count of scans. + + + + + Gets the count of "scan events" + + + + + Gets the count of tune data entries + + + + + The wrapped scan events. + Converts internal data to public interface IScanEvents + + + + + Initializes a new instance of the class. + + The MS device. + Since this is internal: Caller will validate + that this is not null. + + + + Get an event, using indexed event number (zero based). + This gets events from all segments in order, + use "ScanEvents" to get the total count of events. + + The event Number. + + The event. + + Thrown when eventNumber is out of range + + + + Get an event, indexed by the segment and event numbers (zero based). + + The segment index. + The event number. + + The event. + + When event number out of range + + + + Gets the number of events in a specific segment (0 based) + + The segment number. + The number of events in this segment + segment Number + + + + Gets the total number of scan events, in all segments + + + + + Gets the number segments. + + + + + Gets all scan events. + + + The mass spec Device. + + + All the scan events + + + + + The wrapped scan filter. + + + + + Initializes a new instance of the class. + + + The filter scan event. + + + + + Gets the filter. + + + The filter. + + + + + Gets the accurate mass setting. + + + + + Gets the number of compensation voltage values + + + The size of compensation voltage array + + + + + Gets the number of Source Fragmentation values + + + + + Retrieves a source fragmentation value at 0-based index. + + + Use to get the count of + source fragmentation values. + + + Index of source fragmentation value to be retrieved + + + Source Fragmentation Value (sid) at 0-based index + + + + + Retrieves a compensation voltage value at 0-based index. + + + Index of compensation voltage to be retrieved + + + Compensation voltage value at 0-based index + + + Use to get the count of + compensation voltage values. + + + + + Get source fragmentation info valid, at zero based index. + + + The index. + + + The . + + + + + Convert a simple mass index to an index to the unique mass, taking into account multiple activations + + + Simple mass index to convert + + + Corresponding index of the unique mass + + + + + Gets or sets the locale name. + This can be used to affect string conversion. + + + + + Gets or sets the mass precision, which is used to format the filter (in ToString). + + + + + Gets or sets additional instrument defined filters (can be bit flags). No general definition. + + + + + Gets or sets an array of values which determines if the source fragmentation values are valid. + + + + + Gets or sets the ScanData setting. + + + + + Gets or sets the Polarity setting. + + + + + Gets or sets the SourceFragmentation setting. + + + + + Gets or sets the MSOrder setting. + + + + + Gets or sets the Mass Analyzer setting. + + + + + Gets or sets the Detector setting. + + + + + Gets or sets the Dependent setting. + + + + + Gets or sets the Scan Mode setting. + + + + + Gets or sets the Source Fragmentation Type setting. + + + + + Gets or sets the Turbo Scan setting. + + + + + Gets or sets the Ionization Mode setting. + + + + + Gets or sets the corona scan setting. + + + + + Gets or sets the detector value. + + Floating point detector value + + + + Gets or sets the wideband scan setting. + + + + + Gets or sets the sector scan setting. + + See for possible values + + + + Gets or sets the lock scan setting. + + + + + Gets or sets the field free region setting. + + See for possible values + + + + Gets or sets the ultra scan setting. + + + + + Gets or sets the enhanced scan setting. + + + + + Gets or sets the multi-photon dissociation setting. + + + + + Gets or sets the multi-photon dissociation value. + + Floating point multi-photon dissociation value + + + + Gets or sets the electron capture dissociation setting. + + + + + Gets or sets the electron capture dissociation value. + + Floating point electron capture dissociation value + + + + Gets or sets the photo ionization setting. + + + + + Gets or sets the dissociation setting. + + + + + Gets or sets the pulsed dissociation value. + + Floating point pulsed dissociation value + + + + Gets or sets the electron transfer dissociation setting. + + + + + Gets or sets the electron transfer dissociation value. + + Floating point electron transfer dissociation value + + + + Gets or sets the higher energy cid setting. + + + + + Gets or sets the higher energy cid value. + + Floating point higher energy cid value + + + + Gets or sets the Multiplex type + + + + + Gets or sets the parameter a. + + + + + Gets or sets the parameter b. + + + + + Gets or sets the parameter f. + + + + + Gets or sets the Multi notch (Synchronous Precursor Selection) type + + + + + Gets or sets the parameter r. + + + + + Gets or sets the parameter v. + + + + + Gets or sets the event Name. + + + + + Gets or sets supplemental activation type setting. + + + + + Gets or sets MultiStateActivation type setting. + + + + + Gets or sets Compensation Voltage Option setting. + + + + + Gets or sets compensation Voltage type setting. + + See for possible values + + + + Gets the number of unique masses, taking into account multiple activations. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets the scan type index. + + + + + Gets the mass count. + + + + + The get reaction. + + + The index. + + + The . + + + + + The get mass. + + + The index. + + + The . + + + + + The get energy. + + + The index. + + + The . + + + + + The get precursor range validity. + + + The index. + + + The . + + + + + The get first precursor mass. + + + The index. + + + The . + + + + + The get last precursor mass. + + + The index. + + + The . + + + + + The get isolation width. + + + The index. + + + The . + + + + + The get isolation width offset. + + + The index. + + + The . + + + + + The get energy valid. + + + The index. + + + The . + + + + + The get activation. + + + The index. + + + The . + + + + + The get is multiple activation. + + + The index. + + + The . + + + + + Gets the mass range count. + + + + + The get mass range. + + + The index. + + + The . + + + + + Gets the source fragmentation info count. + + + + + The get source fragmentation info. + + + The index. + + + The . + + + + + The wrapped scan statistics. + Converts from internal data to public type. + + + + + Initializes a new instance of the class. + + Index of the scan. + Thrown if scanIndex is null + + + + Initializes a new instance of the class. + + Index of the scan. + Thrown if scanIndex is null + + + + Sets the lazy scan type. + + + + + Copies from. + + Index of the scan. + + + + Copies from. + + Index of the scan. + + + + The wrapped sequence row. Converts internal data to public type. + + + + + Initializes a new instance of the class. + + The sequence row. + Thrown when sequenceRow is null + + + + Copies from. + + The sequence row. + + + + The wrapped single value status log. + Converts internal data to the public interface. + + + + + Initializes a new instance of the class. + + + The status log entries. + + + + + Gets the retention times for each value (x values to plot) + + + + + Gets the values logged for each time (the trended data, y values to plot). + + + + + copy from statusLogEntries + + + The status log entries. + + + + + Data for a particular device, from an instrument method. + + + + + Opens a stream on created storage + + The storage containing data for a device + The stream within the device + Access to the requested stream + + + + get stream names. + + + The storage device. + + + The names. + + + + + Gets the plain text form of an instrument method + + + + + Gets all streams for this instrument, apart from the "Text" stream. + Typically an instrument has a stream called "Data" containing the method in binary or XML. + Other streams (private to the instrument) may also be created. + + + + + Open the streams for the device, and retrieve the text description. + + Storage containing device data + + + + Gets or sets the available streams. + + + + + Reader for instrument method device data. + Class is a wrapper over Win32 API's. + Deals with IOleStorage and IOleStream + + + + + Initializes a new instance of the class. + Constructor with filename as parameter + + + method data file + + + + + Gets the error message. + + + + + The file header errors. + + + + + There was no error + + + + + There was a COM error + + + + + There was a CRC error + + + + + Cannot open file stream + + + + + The read header result. + + + + + Gets or sets the error class. + + + + + Gets or sets the error message. + + + + + Gets or sets the header. + + + + + Reads the header from the instrument method file + + The file header + + + + Loads component details from storage. + + + Name of component + + + The . + + + + + Enumerates the sub STGS no recursion. + + The storage descriptions. + true if successful + + + + Open a storage file + + The access mode. + + The error message, or empty string if OK + + + + + Cleans up the resources + + bool, flag whether .Net resources needs to be released or not + + + + Releases all resources + + + + + Provides static methods to convert enumeration between the legacy FileIO and CommonCore.data + + + + + Common Core Devices from VirtualDeviceTypes. + + The VirtualDeviceTypes. + The converted type + type is out of range. + + + + Convert common core Device type to the virtual device types. + + The value. + The converted value + + + + To the scan filter. + + The values. + List of scan filer + + + + Convert an event accurate mass. + + The value. + The converted value + + + + Convert an accurate mass to event value. + + The value. + The converted value + + + + Map flag bit to peak options, with a static table + + + The table of options for each flag + + + + + Convert flags (such as "reference peak) from FT format to "PeakOptions" format + + The peak with flags to be converted. + The converted flags + Null label peak type argument. + + + + Convert to 3 state variable (on, off any). + + The value. + The converted value + + + + Convert to 3 state variable (on, off any). + + The value. + Converted flag. + + + + Convert to 3 state variable (on, off any). + + The value. + The converted value + + + + Convert from Tri-state to "Off On Any"to 3. + + The value. + The converted value + + + + Convert from Tri-state to "On Any off". + + The value. + The converted value + + + + To the type of the detector. + + The value. + The converted value + + + + To the type of the detector. + + The value. + The converted value + + + + To the type of the scan mode. + + The value. + Converted flag. + Invalid scan data types type. + + + + From mode to the type of the scan. + + The value. + Converted flag. + + + + Convert type of "source fragmentation information valid". + + The value. + The converted value + + + + convert integrator event from PMD format to Data format + + + The old event. + + + The converted . + + + + + Convert from C# Reader format to common core format of data units. + Conversion is accurate for UV units, and approximate for others. + in particular "units mUnits and uUnits" are considered "Volts". + "Other" and "Unknown" convert to "None". + + The value from C# Reader. + Converted unit + Thrown if the units are not a valid value + + + + Convert from CommonCore format to IO format of data units. + Conversion is accurate for UV units, and approximate for others. + in particular "units mUnits and uUnits" are considered "Volts". + "Other" and "Unknown" convert to "None". + + The value from CommonCore format. + Converted unit + Thrown if the units are not a valid value + + + + Converts the date time to file time. + + + The date time. + + + The . + + + + + The absorbance units. + + + + + The unknown. + + + + + The straight Absorbance unit. + + + + + The milli Absorbance unit. + + + + + The micro Absorbance unit. + + + + + Some other Absorbance unit. make sure you fill in Y axis string below + + + + + No absorbance data contained in the data object, or no data which scaling + has any meaning for. + + + + + The milli units. + + + + + The micro units. + + + + + The other straight units. + + + + + The data types. + + + + + The data type is null/empty. + + + + + The data type is char. + Note: this is referred as a byte. + + + + + The data type is true or false. + + + + + The data type is yes or no. + + + + + The data type is on or off. + + + + + The data type is unsigned char. + + + + + The data type is short. + + + + + The data type is unsigned short. + + + + + The data type is long. + Note: this is referred as a long (4-byte) in C++. It's not the same size as long in C#. + + + + + The data type is unsigned long. + Note: this is referred as an unsigned long (4-byte) in C++. It's not the same size as unsigned long in C#. + + + + + The data type is float. + + + + + The data type is double. + + + + + The data type is a char string. + + + + + The data type is a wide char string. + + + + + The end of data type + + + + + The field names. + + + + + The global mutex name prefix + + + + + The old LCQ constants. + + + + + The maximum ext detector channels + External detector channels in use -- 1 to 4 + + + + + Enumerated types for old LCQ files + + + + + The instrument control. + + + + + Start direct. + + + + + Start by contact closure. + + + + + The syringe unit. + + + + + ml per min. + + + + + ml per hour. + + + + + micro l per min. + + + + + micro l per hour. + + + + + The syringe brand. + + + + + Made by Hamilton. + + + + + Made by Unimetrics. + + + + + Some other make + + + + + The MS programming type. + + + + + is non ITCL. + + + + + is ITCL. (Ion Trap Control Language) + + + + + The divert valve state between runs. + + + + + Divert to waste. + + + + + Divert to source. + + + + + The fraction collector choice. + + + + + fraction collector trigger by base peak. + + + + + fraction collector trigger by molecular weight. + + + + + The data mode. + + + + + Scan is profile. + + + + + Scan is centroid. + + + + + The MS scan mode. + + + + + The MS mode. + + + + + The MS/MS mode. + + + + + CID mode. + + + + + The MS to the nth mode. + + + + + The MS scan type. + + + + + Scan type full. + + + + + Scan type SIM. + + + + + Scan type zoom. + + + + + The scan type SRM. + + + + + The mode of largest. + + + + + The nth largest intensity. + + + + + The nth largest intensity precursor. + + + + + use previous mass. + + + + + Use the previous list of ions, then select the ion from the list + + + + + The show axis label. + + + + + show always. + + + + + show on print. + + + + + show never. + + + + + The normalize type. + + + + + Normalize to largest in section. + + + + + Normalize to largest in display. + + + + + Normalize to largest in all data + + + + + The spectrum style. + + + + + auto style based on data + + + + + Use profile style. + + + + + Use stick style. + + + + + Use shade style. + + + + + The chromatogram trace types. + + + + + The start of MS chromatogram traces. + + + + + Chromatogram mass range trace. + + + + + Chromatogram tic trace. + + + + + Chromatogram base peak trace. + + + + + Chromatogram fragment trace. + + + + + The end of MS Chromatogram traces. + + + + + The start analog Chromatogram traces. + + + + + Chromatogram analog 1 trace. + + + + + Chromatogram analog 2 trace. + + + + + Chromatogram analog 3 trace. + + + + + Chromatogram analog 4 trace. + + + + + The end of analog Chromatogram traces. + + + + + The start of PDA Chromatogram traces. + + + + + Chromatogram wavelength range trace. + + + + + Chromatogram total absorbance trace. + + + + + Chromatogram spectrum max trace. + + + + + The end of PDA Chromatogram traces. + + + + + The start of UV Chromatogram traces. + + + + + Chromatogram channel a trace. + + + + + Chromatogram channel b trace. + + + + + Chromatogram channel c trace. + + + + + Chromatogram channel d trace. + + + + + The end of UV Chromatogram traces. + + + + + The start a2d Chromatogram traces. + + + + + Chromatogram Analog to Digital channel 1 trace. + + + + + Chromatogram Analog to Digital channel 2 trace. + + + + + Chromatogram Analog to Digital channel 3 trace. + + + + + Chromatogram Analog to Digital channel 4 trace. + + + + + The end of a2d Chromatogram traces. + + + + + The end of all Chromatogram traces. + + + + + The Chromatogram trace operator. When math is done on two traces, here is the operations allowed + + + + + No operator: blank. + + + + + The minus operator. + + + + + The plus operator. + + + + + The smoothing types. + Used to describe the types of smoothing available for chromatograms and spectra + + + + + The box (moving mean) smoothing. + + + + + Gaussian smoothing. + + + + + The tolerance unit. + Used to describe the types of mass tolerance units for spectra + + + + + units MMU. + + + + + Parts Per Million. + + + + + Atomic Mass Units (Dalton). + + + + + The style. + + + + + point to point (connected points), profile. + + + + + Stick (vertical lines), centroid data + + + + + The scan mode. + + + + + The no scan. + + + + + The full scan. + + + + + Scan is SIM, SRM or CRM. + + + + + A zoom scan. + + + + + The MS to MS to the nth. + + + + + The MS to the nth to MS to the nth. + + + + + The zoom MS to MS to the nth.. + + + + + The zoom MS to the nth to MS to the nth. + + + + + The MS to zoom MS. + + + + + The MS to the nth to zoom MS to the nth. + + + + + neutral loss scan. + + + + + neutral gain scan. + + + + + parent scan. + + + + + The map view accessor. + + + + + Map scan index. + + + + + Map status log. + + + + + Map trailer extra. + + + + + Map tune data. + + + + + Ma UV scan index. + + + + + Map UV peak data. + + + + + The end of map view accessor. + + + + + The raw file constants. + + + + + Raw file versions below 30 are not supported. + + + + + The current version. + + + + + The format version03 + + + + + The format version06 + + + + + The format version 7. + + + + + The format version8 + + + + + The format version9 + + + + + The format version11 + + + + + The format version12 + + + + + The format version13 + + + + + The format version14 + + + + + The format version15 + + + + + The format version30 + + + + + The format version 31. + + + + + The format version32 + + + + + The format version34 + + + + + The format version36 + + + + + The format version37 + + + + + The format version39 + + + + + The format version 40. + + + + + The format version 41. + + + + + The format version 44. + + + + + The format version 45. + + + + + The format version 48. + + + + + The format version 49. + + + + + The format version 51. + + + + + The format version 52. + + + + + The format version 54. + + + + + The format version 58. + + + + + The format version 62. + + + + + The format version 63. + + + + + The format version 65. + + + + + The format version 66. + + + + + The post 64 bit file size allowance version. + + + + + The pre 64 bit file size allowance version. + + + + + The max controllers. + + + + + The max user labels. + + + + + The original vial string length. + + + + + The path length. + + + + + The raw file signature. + + + + + The finn identifier + 2-byte ID for Finnigan / Enterprise file + + + + + The tolerance for filter energy. + + + + + Used to allow small differences in comparisons (e.g. mass difference). + + + + + If the scan type is not specified. + + + + + The raw file writer constants. + Imported legacy error and severity values from platform to maintain values. + + + + + The scan filter enumerations. + + + + + The accurate mass types. + + + + + Accurate Mass off. + + + + + Accurate Mass on. + + + + + Accurate Mass internal. + + + + + Accurate Mass external. + + + + + Accept any accurate mass. + + + + + The detector type. + + + + + The is valid. + + + + + The any. + + + + + The is in valid. + + + + + The filter source high val. + + + + + Apply source CID high filter. + + + + + accept any source CID high. + + + + + The filter source low val. + + + + + Apply source CID low filter. + + + + + accept any source CID low. + + + + + Determines how filter parsing is going + + + + + Filter is incomplete + + + + + Filter good + + + + + Filter is badly formatted + + + + + Next token must be inspected + + + + + The field free regions. + + + + + The free region 1. + + + + + The free region 2. + + + + + The any free region. + + + + + The ionization modes. + + + + + The electron impact. + + + + + The chemical ionization. + + + + + The fast atom bombardment. + + + + + The electrospray. + + + + + The atmospheric pressure chemical ionization. + + + + + nano-spray. + + + + + thermo-spray ionization. + + + + + field desorption. + + + + + matrix assisted laser desorption ionization. + + + + + glow discharge. + + + + + The accept any ionization mode. + Only applies to filtering. + If this appears in a file, no mode string is shown. + + + + + paper spray ionization. + + + + + Card nanospray ionization. + + + + + The extension ionization mode 1. + + + + + The extension ionization mode 2. + + + + + The extension ionization mode 3. + + + + + The extension ionization mode 4. + + + + + The extension ionization mode 5. + + + + + The extension ionization mode 6. + + + + + The extension ionization mode 7. + + + + + The extension ionization mode 8. + + + + + The extension ionization mode 9. + + + + + The ion mode is beyond known types. + + + + + The possible values for scan. + + + + + Not Dependent. + + + + + Is Dependent. + + + + + Any Type. + + + + + The mass analyzer types. + + + + + Ion Trap MS. + + + + + Triple quad MS. + + + + + Single Quad MS. + + + + + TOF MS. + + + + + FTMS analyzer. + + + + + Sector analyzer. + + + + + Any analyzer. + + + + + Asymmetric Track Lossless (ASTRAL) + AS T + + + + + Meta Filter + + + + + No meta filter. + + + + + HCD meta filter. + + + + + ETD meta filter. + + + + + CID meta filter. + + + + + UVPD meta filter. + + + + + Msn meta filter. + + + + + For raw file types whose "Off" value is 0. + + + + + The off. Used in these modes + + SFWidebandOff + SFSupplementalActivationOff + SFMultiStateActivationOff + SFMultiplexOff + SFParam_A_Off + SFParam_B_Off + SFParam_F_Off + SFParam_K_Off + SFParam_R_Off + SFParam_V_Off + + + + + + The feature is on. + Used by these filter codes. + + SFWidebandOn + SFSupplementalActivationOn + SFMultiStateActivationOn + SFMultiplexOn + SFParam_A_On + SFParam_B_On + SFParam_F_On + SFParam_K_On + SFParam_R_On + SFParam_V_On + + + + + + The any. + Used by these filter codes. + + SFAcceptAnyWideband + SFAcceptAnySupplementalActivation + SFAcceptAnyMultiStateActivation + SFAcceptAnyMultiplex + SFAcceptAnyParam_A + SFAcceptAnyParam_B + SFAcceptAnyParam_F + SFAcceptAnyParam_K + SFAcceptAnyParam_R + SFAcceptAnyParam_V + + + + + + The on any off types. + + + + + The on. + SFDetectorValid + SFMultiPhotonDissociationOn + SFElectronCaptureDissociationOn + + + + + The any. + SFAcceptAnyDetector + SFAcceptAnyMultiPhotonDissociation + SFAcceptAnyElectronCaptureDissociation + + + + + The off. + SFDetectorNotValid + SFMultiPhotonDissociationOff + SFElectronCaptureDissociationOff + + + + + For raw file types whose "On" value is 0. + + + + + Feature is on. Used for these features: + + SFSourceCIDon + SFTurboScanOn + SFCoronaOn + SFLockOn + SFUltraOn + SFEnhancedOn + SFPhotoIonizationOn + SFPulsedQDissociationOn + SFElectronTransferDissociationOn + SFHigherenergyCiDOn + SFCompensationVoltageOn + + + + + + The feature is off. + Used by these filter codes + + SFSourceCIDoff + SFTurboScanOff + SFCoronaOff + SFLockOff + SFUltraOff + SFEnhancedOff + SFPhotoIonizationOff + SFPulsedQDissociationOff + SFElectronTransferDissociationOff + SFHigherenergyCiDOff + SFCompensationVoltageOff + + + + + + any mode accepted. Used for these features: + + SFAcceptAnySourceCID + SFAcceptAnyTurboScan + SFAcceptAnyCorona + SFAcceptAnyLock + SFAcceptAnyUltra + SFAcceptAnyEnhanced + SFAcceptAnyPhotoIonization + SFAcceptAnyPulsedQDissociation + SFAcceptAnyElectronTransferDissociation + SFAcceptAnyHigherenergyCiD + SFAcceptAnyCompensationVoltage + + + + + + The polarity types. + + + + + The negative. + + + + + The positive. + + + + + The any. + + + + + The precursor energy. + + + + + The is valid. + + + + + The any. + + + + + The scan data types. + + + + + The centroid. + + + + + The profile. + + + + + The any. + + + + + The scan event accurate mass enumeration saved in the raw file. This should not be + exposed outside of the reader. + + + + + The public. + + + + + The external. + + + + + The off. + + + + + Any: Not supported in raw files, only used for filtering + + + + + The scan types. + + + + + Type is not specified. + + + + + full scan. + + + + + Scan type zoom. + + + + + Scan type SIM. + + + + + Scan type SRM. + + + + + Scan type CRM. + + + + + Any scan type. + + + + + quad 1 MS. + + + + + quad 3 MS. + + + + + The sector scans. + + + + + Magnet scan. + + + + + Electrostatic scan. + + + + + Any sector scanned. + + + + + Determines if a scan uses segment and event numbers + + + + + Segment and scan event is set + + + + + Accept any segment scan event + + + + + The SIM compensation voltage energy modes. + + + + + SIM compensation voltage energy set + + + + + Accept any SIM compensation voltage energy + + + + + The SIM source CID energy. + + + + + The SIM source CID energy has been set. + + + + + accept any SIM source CID energy. + + + + + The source cid valid types. + + + + + The source cid energy valid. + + + + + The accept any source cid energy. + + + + + The 'SourceCIDEnergyValid" array is now doing double duty + for the CVEnergyValid values as well (binary compatibility + issue). So I added this value to the enumeration to indicate that + the energy value is for CV, not SID + + + + + The voltage types. + + + + + No Value - e.g. CV or SID + SFSourceCIDTypeNoValue + SFCompensationVoltageNoValue + + + + + Single Value - example: sid=40 or cv=40 + SFSourceCIDTypeSingleValue + SFCompensationVoltageSingleValue + + + + + Ramp - example: sid=40-50 + SFSourceCIDTypeRamp + SFCompensationVoltageRamp + + + + + SIM - example : SIM [100@40, 200@50] + SFSourceCIDTypeSIM + SFCompensationVoltageSIM + + + + + Accept any type. + SFAcceptAnySourceCIDType + SFAcceptAnyCompensationVoltageType + + + + + The MS order types. + + + + + The neutral gain. + + + + + The neutral loss. + + + + + The parent scan. + + + + + Accept any MS order. + + + + + MS data. + + + + + MS/MS data + + + + + The m s 3. + + + + + The m s 4. + + + + + The m s 5. + + + + + The m s 6. + + + + + The m s 7. + + + + + The m s 8. + + + + + The m s 9. + + + + + The m s 10. + + + + + The m s 11. + + + + + The m s 12. + + + + + The m s 13. + + + + + The m s 14. + + + + + The m s 15. + + + + + The m s 16. + + + + + The m s 17. + + + + + The m s 18. + + + + + The m s 19. + + + + + The m s 20. + + + + + The m s 21. + + + + + The m s 22. + + + + + The m s 23. + + + + + The m s 24. + + + + + The m s 25. + + + + + The m s 26. + + + + + The m s 27. + + + + + The m s 28. + + + + + The m s 29. + + + + + The m s 30. + + + + + The m s 31. + + + + + The m s 32. + + + + + The m s 33. + + + + + The m s 34. + + + + + The m s 35. + + + + + The m s 36. + + + + + The m s 37. + + + + + The m s 38. + + + + + The m s 39. + + + + + The m s 40. + + + + + The m s 41. + + + + + The m s 42. + + + + + The m s 43. + + + + + The m s 44. + + + + + The m s 45. + + + + + The m s 46. + + + + + The m s 47. + + + + + The m s 48. + + + + + The m s 49. + + + + + The m s 50. + + + + + The m s 51. + + + + + The m s 52. + + + + + The m s 53. + + + + + The m s 54. + + + + + The m s 55. + + + + + The m s 56. + + + + + The m s 57. + + + + + The m s 58. + + + + + The m s 59. + + + + + The m s 60. + + + + + The m s 61. + + + + + The m s 62. + + + + + The m s 63. + + + + + The m s 64. + + + + + The m s 65. + + + + + The m s 66. + + + + + The m s 67. + + + + + The m s 68. + + + + + The m s 69. + + + + + The m s 70. + + + + + The m s 71. + + + + + The m s 72. + + + + + The m s 73. + + + + + The m s 74. + + + + + The m s 75. + + + + + The m s 76. + + + + + The m s 77. + + + + + The m s 78. + + + + + The m s 79. + + + + + The m s 80. + + + + + The m s 81. + + + + + The m s 82. + + + + + The m s 83. + + + + + The m s 84. + + + + + The m s 85. + + + + + The m s 86. + + + + + The m s 87. + + + + + The m s 88. + + + + + The m s 89. + + + + + The m s 90. + + + + + The m s 91. + + + + + The m s 92. + + + + + The m s 93. + + + + + The m s 94. + + + + + The m s 95. + + + + + The m s 96. + + + + + The m s 97. + + + + + The m s 98. + + + + + The m s 99. + + + + + The m s 100. + + + + + The SIM energy type. + + + + + SID energy + + + + + CV energy + + + + + The method converts from scan event accurate mass enumeration read from the raw file to + the Scan Filter (public) Accurate Mass enumeration. + + + The scan event's mass type read from the raw file. + + + The enumeration. + + + + + The tolerance units. + + + + + Milli-mass unit. + + + + + Parts per million. + + + + + Atomic Mass Unit. + + + + + The tune data enumerations, for legacy LCQ files. + + + + + The source type. + + + + + The unknown. + + + + + electron impact. + + + + + chemical ionization. + + + + + electro-spray ionization. + + + + + atmospheric pressure chemical ionization. + + + + + laser desorption. + + + + + fast atom bombardment. + + + + + particle beam. + + + + + thermo-spray ionization. + + + + + The virtual device types. + + + + + No device. + + + + + MS Device + + + + + Basically same as UV_DEVICE but acquired through MS (not to be confused with UV) + + + + + The Analog Device card in the PC + + + + + PDA Device + + + + + UV Device + + + + + Special device that has no scan data, but status log only (HN) + + + + + The device container allow a mimmally initalized version of the device to exists + which can support version checks or other needs. + All "large data" is perfomed on first access of the FullDevice. + "PartialDevice" can be used in a dispose call, as unititze items from + "FullDevice" will not need to be disposed. + + + + + Gets or sets an instance of the device that has been minimally initialized + + + + + Gets or sets an instance of the device, which contains all data. + + + + + The file header loader. Reads an Xcalibur file header. + + + + + Create a File Header interface to read a file header. + + Name of the file. + Access to the file header + Thrown when there are problems with the file name + Only 64 bit applications are supported by this project + + + + The AutoSamplerConfig interface. + + + + + Gets the tray index. + + + + + Gets the tray name. + + + + + Gets the tray shape. + + + + + Gets the vial index. + + + + + Gets the vials per tray. + + + + + Gets the vials per tray x. + + + + + Gets the vials per tray y. + + + + + The additional (optional) features which can be returned with a scan. + + + + + Nothing but mass intensity and peak flags + + + + + Noise and baseline values + + + + + Return Charge Data + + + + + Return Resolution data + + + + + Profile data may be needed + + + + + Debug data may be needed + + + + + Return all data + + + + + The Device interface. + + + + + Gets the device type. + + + + + Gets the error log entries. + + + + + Gets the instrument id. + + + + + Gets the run header. + + + + + Gets the status log entries. + + + + + Gets the absolute position of the end of this device data. + + + + + Gets or sets a value indicating whether this was initialized when the file was in acquisition. + + + + + Support for lazy init of device. + Device construction does "some work" to validate a device. + Any "heavy data decoding" is delayed until the device is first used. + + The device + + + + The method gets the scan index for the scan number. + + + The scan number. + + + The object for the scan number. + + + If the scan number is not in range. + + + + + The method gets the retention time for the scan number. + + + The scan number. + + + The retention time for the scan number. + + + If the scan number is not in range. + + + + + Gets the packet. + + The scan number. + if set to true [include reference and exception data]. + For UV device only, negative one (-1) for getting all the channel data by the given scan number + Optional data which can be returned with a scan + The data for the scan + + + + Gets the segment peaks. + + + The scan number. + + + The number segments. + + + The number all peaks. + + + The packet. + + + if set to true [include reference and exception data]. + + + The data for the scan + + + + + The Error Log interface. + + + + + Gets the number of entries in the error log. + + + + + The method gets an error log item by looking up the index + + The index. + return the entries in the log by index + + + + The FilterScanEvent interface. + + + + + Gets or sets the meta filters. + + + + + Gets or sets the filter mass precision. + + + + + Gets or sets the locale name. + + + + + Gets the total source values, which is all CID and CV. + + + + + Gets the table of compensation voltages valid. + + + + + Gets the table of source CID valid. + + + + + Calculate the number of compensation voltage values. + + + The . + + + + + set filter mass resolution by mass precision. + Example: "precision =3", resolution = "0.001" + + + The precision. + + + + + set filter mass resolution. + + + The mass resolution. + + + + + convert to string. + + + The . + + + + + Gets the number of source CID info values. + + + The . + + + + + Defines status from ICIS system instruments. + + + + + Gets the status. + + + The status. + + + + + The Instrument Id interface. + + + + + Gets or sets the absorbance unit. + + + + + Gets the channel labels. + + + + + Gets the flags. + + + + + Gets the hardware rev. + + + + + Gets a value indicating whether is valid. + + + + + Gets the model. + + + + + Gets the name. + + + + + Gets the serial number. + + + + + Gets the software rev. + + + + + Gets the x axis. + + + + + Gets the y axis. + + + + + Gets a value indicating whether this instance is TSQ quantum file. + + + true if this instance is TSQ quantum file; otherwise, false. + + + + + Provides methods to write an instrument method file. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets the error message. + + + + + Gets the instrument method file name. + + + + + Gets the file header for the instrument method file + + + + + Updates the file header field - "Description". + + The description. + + + + Update the instrument method file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + + The file header. + + + + Get the list of device methods which are currently defined in this instrument method. + Returns an empty list, if this is a newly created instrument method. + --- + In order to add/update device method, caller should first call this to get the list of devices. + Once you've the list, you can start adding a new device method or editing/removing an existing device method. + + The list of device methods. + + + + Save this instrument methods to a file. + It should overwrite the instrument methods file if the file exists; otherwise, a + new file should be created. + + File name of the instrument method. + True if save successfully; otherwise false. + name;@The name cannot be empty. + + + + The Memory Mapped Accessor interface that has read and write capabilities. + + + + + The Memory Map Reader interface. + + + + + Gets the initial offset. + + + + + Gets the size of view. + + + The size of view. + + + + + Gets the stream id. + + + + + Reads the structure array. + + Type of structure + The offset into the map. + The number of bytes read. + Array of structures + + + + The method reads a byte. + + + The offset into the map. + + + The . + + + + + The method reads an array of bytes. + + The offset into the map. + + The count. + + + The byte array. + + + + + The method reads a double. + + + The offset into the map. + + + The . + + + + + Reads an array of double. + + The offset into the map. + The count. + The array of doubles + + + + The method reads a float. + + + The offset into the map. + + + The . + + + + + Reads floats, as an array + + The offset into the map. + The count. + The array of floats + + + + The method reads an integer. + + + The offset into the map. + + + The . + + + + + Reads the integers. + + The offset. + The count. + The array of integers + + + + The method reads an array of unsigned integers. + + The offset into the map. + + The number of unsigned integers to read. + + + The array of unsigned integers. + + + + + The method reads a previous revision structure struct and convert it to the current target revision. + + + The position from the beginning of the file to start reading. + + + The size of previous revision structure. + + + The type of the target structure. + + + The target structure. + + + + + Reads the short. + + The offset into the map. + The short + + + + Reads the string. + + The offset into the map. + The number of bytes read. + The string + + + + The method reads a collection of strings starting at the supplied offset + + + The position to start reading. + + The number of bytes read + + The collection of strings. + + + + + This method reads a simple structure at the start position. + Simple structure should have only basic fields (int, float etc) + and no internally marshaled data (such as fixed size arrays, or ref types) + + + The start position. + + + The structure to read. + + + The structure. + + + + + This method reads a simple structure array at the start position. + Simple structure should have only basic fields (int, float etc) + and no internally marshaled data (such as fixed size arrays, or ref types) + + + The start position. + + Number of array elements + + The structure to read. + + + The structure. + + + + + The over loaded method reads the structure at the start position, + using the Marshal class to determine the size. + + + The start position. + + The number of byte read + + The structure to read. + + + The structure. + + + + + The over loaded method reads the structure at the start position, + The structure size is passed in. + + + The start position. + + The number of bytes to read + + The structure to read. + + + The structure. + + + + + The method reads an unsigned integer. + + + The offset into the map. + + + The . + + + + + The method reads an unsigned short. + + + The offset into the map. + + + The . + + + + + Read a number of wide characters, and convert to string. + If there is a '0' in the string, the string length will be adjusted. + + The offset into the view. + The number of bytes read. + The converted string + + + + Read a number of wide characters, and convert to string + + Offset into the view + Number of bytes read by this call (added to input value) + Number of 2 byte chars + converted string + + + + read an array of bytes from a view, expecting a large data array. + This uses 64 bit items, to cut down Marshalling overheads + + + The start position. + + The count of bytes to read + + The array + + + + + The Memory Map Writer interface. + + + + + Writes the structure. + + + Type of structure + + + The offset. + + + The data. + + + The number of bytes written + + + + + write a struct. + + + The offset. + + + The data. + + + The number of bytes to write. + + Type of structure to write + + + The number of bytes written + + + + + Writes the float to the memory mapped file. + + The start position. + The value. + The number of bytes written + + + + Writes the double to the memory mapped file. + + The start position. + The value. + The number of bytes written + + + + Writes the byte to the memory mapped file. + + The start position. + The value. + The number of bytes written + + + + Writes the array of bytes to the memory mapped file. + + The start position. + The value. + The number of bytes written + + + + Writes the short to the memory mapped file. + + The start position. + The value. + The number of bytes written + + + + Writes the integer to the memory mapped file. + + The offset. + The value. + The number of bytes written + + + + Using Interlocked operation to increment the specified INT (4-byte) variable and + stores the result, as an atomic operation against memory-mapped files in .NET. + Note: This method is marked as UNSAFE, which is required for operating + memory-mapped file pointer. + + The number of bytes into the accessor at which to begin writing. + The incremented value + + + + The Method interface, for instrument method files + + + + + Gets the method size. + + + + + Gets the starting offset. + + + + + Gets the original storage name. + + + + + Gets the storage descriptions. + + + + + save a method file. + + + The viewer. + + + The method file path. + + + The force over write. + + + + + The RawFileDeviceWriter interface. + + + + + The save. + + + The writer. + + + The errors. + + + The packet data offset. + + + The controller header offset. + + + The . + + + + + Refresh data from memory maps + + + True if OK + + + + + Gets the run header. + + + + + The RawFileInfo interface. + + + + + Gets the blob size. + + + + + Gets the blob start. + + + + + Gets or sets the computer name. + + + + + Gets a value indicating whether has experiment method. + + + + + Gets a value indicating whether is in acquisition. + + + + + Gets or sets the mass spec data offset. + + + + + Gets the next available controller index. + + + + + Gets the number of virtual controllers. + + + + + Gets the time stamp. + + + + + Gets the user texts. + + + + + Gets the virtual controller data. + + + + + The number of virtual controllers of type. + + + The type. + + + The . + + + + + Updates the virtual controller. + + The number virtual controllers. + The virtual data offset + The offset. + Index of the virtual device. + Type of the virtual device. + + + + The ScanEvent interface. + + + + + Gets the accurate mass type. + + + + + Gets the compensation voltage. + + + + + Gets the compensation voltage type. + + + + + Gets the corona value. + + + + + Gets the dependent data. + + + + + Gets the Detector value. + + + + + Gets the detector value. + + + + + Gets the electron capture dissociation. + + + + + Gets the electron capture dissociation type. + + + + + Gets the electron transfer dissociation. + + + + + Gets the electron transfer dissociation type. + + + + + Gets the enhanced. + + + + + Gets the free region. + + + + + Gets the higher energy CID. + + + + + Gets the higher energy CID type. + + + + + Gets the ionization mode. + + + + + Gets a value indicating whether the scan event is custom - true if trailer + scan event should be used. + + + + + Gets a value indicating whether the scan event is valid. + + + + + Gets the lock. + + + + + Gets the MS order. + + + + + Gets the mass analyzer type. + + + + + Gets the mass calibrators. + + + + + Gets the mass ranges. + + + + + Gets the multi photon dissociation. + + + + + Gets the multi photon dissociation type. + + + + + Gets the multi state activation. + + + + + Gets the multiplex. + + + + + Gets the name. + + + + + Gets the parameter a. + + + + + Gets the parameter b. + + + + + Gets the parameter f. + + + + + Gets the parameter k. + + + + + Gets the parameter r. + + + + + Gets the parameter v. + + + + + Gets the photo ionization. + + + + + Gets the polarity. + + + + + Gets the pulsed q dissociation. + + + + + Gets the pulsed q dissociation type. + + + + + Gets the reactions. + + + + + Gets the scan data type. + + + + + Gets the scan type. + + + + + Gets the scan type index. Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Gets the sector scan. + + + + + Gets the source fragmentation. + + + + + Gets the source fragmentation mass ranges. + + + + + Gets value to indicate how source fragmentation values are interpreted. + + + + + Gets or sets the source fragmentations. + + + + + Gets the supplemental activation. + + + + + Gets the turbo scan. + + + + + Gets the ultra. + + + + + Gets the wideband. + + + + + To the automatic filter string. + + The scan event. + The mass precision. + The chars maximum. + The energy precision. + Auto filter string. + + + + Gets the run header filter mass precision. + + the run header filter mass precision + + + + Define an editable scan event interface + + + + + Gets or sets the accurate mass type. + + + + + Gets or sets the scan data type. + + + + + Gets or sets the Polarity. + + + + + Gets or sets the scan power setting. + + See for possible values + + + + Gets or sets the dependent scan setting. + + + + + Gets or sets source fragmentation scan setting. + + + + + Gets or sets the scan type. + + + + + Gets or sets the Detector value. + + + + + Gets or sets the mass analyzer type. + + + + + Gets or sets a value which indicates how source fragmentation values are interpreted. + + + + + Gets or sets the turbo scan. + + + + + Gets or sets the ionization mode. + + + + + Gets or sets the detector value. + + + + + Gets or sets the corona value. + + + + + Gets or sets the wideband. + + + + + Gets or sets the sector scan. + + + + + Gets or sets the ultra. + + + + + Gets or sets the lock. + + + + + Gets or sets the enhanced. + + + + + Gets or sets the free region. + + + + + Gets or sets the multi photon dissociation. + + + + + Gets or sets the multi photon dissociation type. + + + + + Gets or sets the electron capture dissociation. + + + + + Gets or sets the electron capture dissociation type. + + + + + Gets or sets the pulsed q dissociation. + + + + + Gets or sets the pulsed q dissociation type. + + + + + Gets or sets the photo ionization. + + + + + Gets or sets the electron transfer dissociation type. + + + + + Gets or sets the supplemental activation. + + + + + Gets or sets SPS Multi notch (Synchronous Precursor Selection) + + + + + Gets or sets the parameter r. + + + + + Gets or sets the parameter v. + + + + + Gets or sets the parameter a. + + + + + Gets or sets the parameter b. + + + + + Gets or sets the parameter f. + + + + + Gets or sets the name. + + + + + Gets or sets the multi state activation. + + + + + Gets or sets the multiplex. + + + + + Gets or sets the higher energy CID. + + + + + Gets or sets the higher energy CID type. + + + + + Gets or sets the electron transfer dissociation. + + + + + Gets or sets the compensation voltage. + + + + + Gets or sets the compensation voltage type. + + + + + Base of objects which can be loaded from a raw file. + Defines ability to load an object. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The RealTimeAccess interface. + + + + + Gets the file revision. + + + + + Gets the header file map name. + It's only meaningful in Generic data. + + + + + Gets the data file map name. + + + + + Close and reopen all of the file mapping objects for this file object + + True refresh succeed, false otherwise + + + + The RunHeader interface. + + + + + Gets the software revision. + + + + + Gets the start time. + + + + + Gets the end time. + + + + + Gets the first spectrum. + + + + + Gets the last spectrum. + + + + + Gets the low mass. + + + + + Gets the high mass. + + + + + Gets the maximum intensity. + + + + + Gets the max integrated intensity. + + + + + Gets the comment 1. + + + + + Gets the comment 2. + + + + + Gets the data Packet filename. + + + + + Gets the error log filename. + + + + + Gets or sets the error log position. + + + + + Gets the expected run time. + + + + + Gets the filter mass precision. + + + + + Gets the instrument id file name. + + + + + Gets the instrument scan events file name. + + + + + Gets a value indicating whether the device is in acquisition. + + + + + Gets the mass resolution. + + + + + Gets the number of error logs. + + + + + Gets the number of spectra. + + + + + Gets the number of status log. + + + + + Gets the number of trailer extra. + + + + + Gets the number of trailer scan events. + + + + + Gets the number of tune data. + + + + + Gets or sets the packet position. + + + + + Gets the run header position. + + + + + Gets the scan events file name. + + + + + Gets the spectra file name. + + + + + Gets or sets the spectrum position. + + + + + Gets the status log filename. + + + + + Gets the status log header filename. + + + + + Gets or sets the status log position. + + + + + Gets the tolerance unit. + + + + + Gets the trailer extra filename. + + + + + Gets or sets the trailer extra position. + + + + + Gets the trailer header filename. + + + + + Gets the trailer scan events filename. + + + + + Gets or sets the trailer scan events position. + + + + + Gets the tune data filename. + + + + + Gets the tune data header filename. + + + + + Gets the internal run header struct. + + + + + Copies the specified source. + + The source. + + + + The Scan Index interface. + + + + + Gets the number packets. + + + + + Gets the packet type. + + + + + Gets the data offset. + + + + + Gets the start time. + + + + + Gets the Tic value. + + + + + The Sequence Row interface. + + + + + Gets the barcode. + + + + + Gets the barcode status. + + + + + Gets the calibration level + + + + + Gets the calibration file. + + + + + Gets the comment + + + + + Gets the concentration or dilution factor + + + + + Gets the extra user columns. + + + + + Gets the injection volume + + + + + Gets the instrument. + + + + + Gets the internal standard amount + + + + + Gets the method. + + + + + Gets the path. + + + + + Gets the raw file name. + + + + + Gets the format revision of this object + + + + + Gets the sequence row number + + + + + Gets the sample id + + + + + Gets the sample name + + + + + Gets the (application specific) sample type + + + + + Gets the sample volume + + + + + Gets the sample weight + + + + + Gets the user texts. + + + + + Gets the short vial string (obsolete?) + + + + + The Status Log interface. + + + + + Gets the number of Status log items. + + + + + Gets the data descriptors. + + + + + The method performs a binary search to find the status entry that is closest to the given retention time. + + + The retention time. + + + The status entry containing the of label value pairs for the retention time. + If there are no entries in the log, it will an empty list. + + + + + The method gets all the log entries' value pair at the specified index. + + + The index into the "status log header" for this field. + + + All the log entries' value pair at the specified index. + + + + + Gets the status log for a given index into the set of logs. + This returns the log and it's time stamp. + + Index into table of logs (from 0 to RunHeader.NumStatusLog-1) + The log values for the given index + + + + Gets the (raw) status log data at a given index in the log. + Designed for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "RunHeader.StatusLogCount -1") + Log data at the given index + + + + Gets the (raw) status log data at a given retention time in the log. + Designed for efficiency, this method does not convert logs to display string format. + + Retention time + Log data at the given retention time + + + + Gets the labels and index positions of the status log items which may be plotted. + That is, the numeric items. + + Labels names are returned by "Key" and the index into the log is "Value". + + + + Get a status log record from the sorted log + which fixes out of order or duplictae instrument data + + + The log entry + + + + The UserIdStamp interface. + + + + + Gets or sets the time when this stamp was created + + + + + Gets or sets the name of the user who acquired the file. For example "John Smith" + + + + + Gets or sets the login name of the operator who acquired the file. For example "jsmith" + + + + + Class for various file loaders, with common + file header format + + + + + Gets or sets the file header. + + + + + Check for valid version of the file + + + The file Type. + + + The version number + + + If version is not valid + + + + + The processing method file loader. + Loads data from PMD file + + + + + Gets the id. + + + + + Gets a value indicating whether this instance is open. + + + true if this instance is open; otherwise, false. + + + + + Gets the processing method file name. + + + + + Initializes a new instance of the class. + Default constructor initializes a new instance of ProcessingMethodFileLoader class. + Must be called prior to data access + + + The file path. + + + The file path is empty or null. + + + A problem encountered when reading the raw file. + + + + + Load data from a processing method file. + + + The viewer. + + + + + Gets the view type. + + + + + Gets the raw file name. + + + + + skip any legacy custom reports (not imported) + + + The viewer (memory map) + + + The start position in the view. + + + The file revision. + + + The updated map offset + + + + + Read the summary reports + + + The viewer (memory map) + + + The start position in the view. + + + The file revision. + + + The updated map offset + + + + + Read the programs (EXE). + + + The viewer (memory map) + + + The start position in the view. + + + The file revision. + + + The updated map offset + + + + + Read the report names. + + + The viewer (memory map) + + + The start position in the view. + + + The file revision. + + + The updated map offset + + + + + Read library search settings + + + The viewer (memory map) + + + The start position, in the map + + + The file revision. + + + The updated start, for the next object + + + + + Read spec enhancement settings + + + The viewer (memory map). + + + The start position, in the map. + + + The file revision. + + + The updated start, for the next object + + + + + read processing method options. + + + The viewer (memory map) + + + The start position, in the map. + + + The file revision. + + + The updated start, for the next object + + + + + Read standard report options + + + The viewer (memory map). + + + The start position, in the map. + + + The file revision. + + + The updated start, for the next object. + + + + + Read peak detection settings + + + The viewer (memory map). + + + The start position, in the map. + + + The file revision. + + + The updated start, for the next object. + + + + + Read and skip real time report settings + + + The viewer (memory map). + + + The start position, in the map. + + + The file revision. + + + The updated start, for the next object. + + + + + Gets the processing method options. + + + + + Gets Options for "standard reports" + + + + + Gets the peak detection. + + + + + Gets the spec enhancement options. + + + + + Gets the library search. + + + + + Gets the library constraints. + + + + + Gets the sample reports. + + + + + Gets the programs. + + + + + Gets the summary reports. + + + + + Gets the peak display options. + + + + + Gets the peak purity. + + + + + Gets the components. + + + + + Gets or sets the mass options. + + + + + The Errors interface. + + + + + Gets the error message. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + The raw file loader. + + + + + Prevents a default instance of the class from being created. + + + + + Initializes a new instance of the class. + Default constructor initializes a new instance of RawFile class. + Must be called prior to data access + + + The file path. + + + The file path is empty or null. + + + A problem encountered when reading the raw file. + + + + + Gets the identifier. + + + The identifier. + + + + + Gets the raw file path. + + + The raw file path. + + + + + Gets a value indicating whether this instance is open. + + + true if this instance is open; otherwise, false. + + + + + Gets the auto sampler config. + + + The automatic sampler configuration. + + + + + Gets the method info. + + + The method information. + + + + + Gets or sets the raw file information. + + + The raw file information. + + + + + Gets the devices. + + + The devices. + + + + + Gets or sets the sequence. + + + The sequence. + + + + + Gets the stream id. + + + + + Gets the file revision. + + + + + Gets the header file map name. + + + + + Gets the data file map name. + + + + + Gets the audit trail information. + + + + + Test if the file is still in acquisition. + + + True if the file is still in acquisition. + + + + + The dispose. + + + + + The export instrument method. + + + The method file path. + + + The force overwrite. + + + + + Load the raw file. + + + The viewer. + + Indicate whether the named mutex is successfully acquired or not + + Thrown if the file is not a recognized format. The file is either not a THERMO Fisher + Raw file or the version is less than the initial version of XCALIBUR files. + + + + + Read various blocks describing the raw file + + View into file + offset into view + Updated position + + + + Initialize device data, for "complete file" or "real time" + Reform CRC check on completed files. + + view into file + + + + Test if the file is old LCQ format + + view into file + offset into view + True if this method decoded the data as LCQ format + + + + The validate CRC. + + + The viewer. + + Thrown if CRC is no valid + + + + + load the instrument method. + + + The viewer. + + + The start position in the view. + + + + + Test that the raw file checksum is valid + + Bytes of the raw file + True on passing test + + + + Initials the device lists. + + Thrown if a device cannot be added to the list + + + + Gets the audit trail information. + + Audit trail object + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + create the list of devices when in acquisition. + Cannot "lazy load" here, as we need to "claim" a reference count + to all devices, and all of their temp files. + + + The refresh fail counter. + + + The . + + + + + Refreshes the devices. + + + The number of virtual controllers. + + Thrown if device entry cannot be created + + + + + The raw file loader helper. + + + + + Convert instruments index to controller index. + + Type of the instrument. + Index of the instrument. + The list of virtual controller information. + The index into the table of controllers + + + + get virtual controller info. + + + + The instrument type. + + + The instrument index. + + + The virtual controller information. + + + The detectors. + + + The selected device. + + + The . + + + + + Gets the device run header. + + The loader ID + The device key. + The run header + Thrown on null device or null run header + + + + The sequence file loader. Loads data from SLD file. + + + + + Gets or sets the id. + + + + + Gets a value indicating whether this instance is open. + + + true if this instance is open; otherwise, false. + + + + + Gets the sequence info. + + + + + Gets or sets the sequence file name. + + + + + Gets the samples. + + + + + Initializes a new instance of the class. + Must be called prior to data access + + + The file path. + + + The file path is empty or null. + + + A problem encountered when reading the raw file. + + + + + Load sequence file. + + + The viewer. (memory mapped file) + + + + + Read meta data. + + + The viewer (memory map) + + + The start of the data (index into map) + + + The file revision. + + + The offset into the map after this data + + + + + The storage description. + Describes an instrument method storage, + including the device name, device descriptive name (display name), + and the text description of the method. + + + + + Initializes a new instance of the class. + + + The storage name. + + + The description. + + + + + Gets or sets the device descriptive (display) name. + + + + + Gets or sets the storage name. This is the device's "registry name". + This name should not be shown to the operator as "device name". + Use "Description" instead for the devices' display name. + + + + + Gets or sets the "plain text" version of the instrument method. + + + + + The fast scan from raw data class, which supplies code needed for the + chromatogram batch generator to get data from the IRawDataPlus interface. + Enhanced version uses methods which only return mass and intensity data. + + + + + Initializes a new instance of the class. + + + The MS data reader. + + Scan filter, which may be null. + When not null: All data needing these scans has the same filter + True if ref and exception peaks should be used + + + + The parallel reader. + + + The scan index. + + + The array of scans, read in parallel. + + + + + The scan reader. + + + Data about the scan. + + + The . + + + + + The auto sampler config struct. + + + + + Defines the BufferInfo type for backward compatibility with FileIO. + Ex. HomePage real time plot checks the Number Element field in scan index buffer info, + to determine whether the scans data is available for display and + raw file stitching is also using it. + + + + + Generic Data Item structure. + + + + + String length for + + or precision for FLOAT and DOUBLE. + For FLOAT and DOUBLE, set LOWORD(n) = precision, + and HIWORD(n) = 0 for normal format and = 1 for + scientific notation (e.g. 1.056e-7) + + + + + Structure for Instrument Id Information. + + + + + Old structure for Instrument Id Information. + + + + + The run header struct. + + + + + software revision level + + + + + # of status log records written in this file + + + + + # of error log records written in this file + + + + + offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + Offset of where the run header starts in the virtual controller data. This block is + new for Xcalibur, need to be in shared memory. + if time permits will come up with a scheme to force these names into a separate memory + pool that only this object knows about so the disk file will not contain this data. + + + + + Start of Xcalibur changes phase 2 + 1/2 Peak width for current device (e.g. 0.5 for unit resolution) + + + + + Expected run time based on experiment method. + + + + + Instrument identification block. + + + + + Scan events written during collection (e.g. Tune or data dependent) + + + + + Per scan scan event objects + + + + + Instrument specific scan trailer header data + + + + + Instrument specific scan trailer data (not TRAILER) + + + + + Instrument specific status log header data + + + + + Instrument specific tune data header + + + + + can be PPM, AMU, MMU + + + + + how many digits to display in filter strings. + + + + + Offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + offset of where the run header starts in the virtual controller data + + + + + Extra file pointers and counts for later use. + + + + + Requested by eric for not using hardcoded instrument types in the code i.e instead of saying in the code if(InstrumentType == "Quantum" ) do this way if(instrumentType==1) + + + + + The run header struct version 1. + + + + + software revision level + + + + + # of status log records written in this file + + + + + # of error log records written in this file + + + + + offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + The run header struct. + + + + + software revision level + + + + + # of status log records written in this file + + + + + # of error log records written in this file + + + + + offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + Offset of where the run header starts in the virtual controller data. This block is + new for Xcalibur, need to be in shared memory. + if time permits will come up with a scheme to force these names into a separate memory + pool that only this object knows about so the disk file will not contain this data. + + + + + Start of Xcalibur changes phase 2 + 1/2 Peak width for current device (e.g. 0.5 for unit resolution) + + + + + Expected run time based on experiment method. + + + + + Instrument identification block. + + + + + Scan events written during collection (e.g. Tune or data dependent) + + + + + Per scan scan event objects + + + + + Instrument specific scan trailer header data + + + + + Instrument specific scan trailer data (not TRAILER) + + + + + Instrument specific status log header data + + + + + Instrument specific tune data header + + + + + The run header struct. + + + + + software revision level + + + + + # of status log records written in this file + + + + + # of error log records written in this file + + + + + offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + Offset of where the run header starts in the virtual controller data. This block is + new for Xcalibur, need to be in shared memory. + if time permits will come up with a scheme to force these names into a separate memory + pool that only this object knows about so the disk file will not contain this data. + + + + + Start of Xcalibur changes phase 2 + 1/2 Peak width for current device (e.g. 0.5 for unit resolution) + + + + + Expected run time based on experiment method. + + + + + Instrument identification block. + + + + + Scan events written during collection (e.g. Tune or data dependent) + + + + + Per scan scan event objects + + + + + Instrument specific scan trailer header data + + + + + Instrument specific scan trailer data (not TRAILER) + + + + + Instrument specific status log header data + + + + + Instrument specific tune data header + + + + + can be PPM, AMU, MMU + + + + + The run header struct. + + + + + software revision level + + + + + # of status log records written in this file + + + + + # of error log records written in this file + + + + + offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + Offset of where the run header starts in the virtual controller data. This block is + new for Xcalibur, need to be in shared memory. + if time permits will come up with a scheme to force these names into a separate memory + pool that only this object knows about so the disk file will not contain this data. + + + + + Start of Xcalibur changes phase 2 + 1/2 Peak width for current device (e.g. 0.5 for unit resolution) + + + + + Expected run time based on experiment method. + + + + + Instrument identification block. + + + + + Scan events written during collection (e.g. Tune or data dependent) + + + + + Per scan scan event objects + + + + + Instrument specific scan trailer header data + + + + + Instrument specific scan trailer data (not TRAILER) + + + + + Instrument specific status log header data + + + + + Instrument specific tune data header + + + + + can be PPM, AMU, MMU + + + + + how many digits to display in filter strings. + + + + + The run header struct. + + + + + software revision level + + + + + # of status log records written in this file + + + + + # of error log records written in this file + + + + + offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + Offset of where the run header starts in the virtual controller data. This block is + new for Xcalibur, need to be in shared memory. + if time permits will come up with a scheme to force these names into a separate memory + pool that only this object knows about so the disk file will not contain this data. + + + + + Start of Xcalibur changes phase 2 + 1/2 Peak width for current device (e.g. 0.5 for unit resolution) + + + + + Expected run time based on experiment method. + + + + + Instrument identification block. + + + + + Scan events written during collection (e.g. Tune or data dependent) + + + + + Per scan scan event objects + + + + + Instrument specific scan trailer header data + + + + + Instrument specific scan trailer data (not TRAILER) + + + + + Instrument specific status log header data + + + + + Instrument specific tune data header + + + + + can be PPM, AMU, MMU + + + + + how many digits to display in filter strings. + + + + + Offset of where the scan indexes starts in the virtual controller data + + + + + offset of where the virtual data starts in the virtual controller data + + + + + offset of where the status log starts in the virtual controller data + + + + + offset of where the error log starts in the virtual controller data + + + + + offset of where the run header starts in the virtual controller data + + + + + Extra file pointers and counts for later use. + + + + + The file header structure. + + + + + 2-byte ID for Finnigan / Enterprise file -- constant for all Enterprise files + + + + + Finnigan signature + + + + + file type + + + + + file revision - actually, this is the file format version. + + + + + file-creation audit information. + + + + + file creation 32-bit CRC + + + + + file-change audit information (i.e. when file is closed) + + + + + count of times the file was edited + + + + + count of times calibrated + + + + + reserved space in the header, for future use + do not expose access to these values. + + + + + user's narrative description of the file. + + + + + end-of-data marker + + + + + The File Time structure from C++. + Represents the number of 100-nanosecond intervals since January 1, 1601. This structure is a 64-bit value. + + + + + Specifies the high 32 bits of the FILETIME. + + + + + Specifies the low 32 bits of the FILETIME. + + + + + The filter info struct 1. + + + + + The filter info struct 2. + + + + + The filter info struct 3. + + + + + The filter info struct 4. + + + + + The filter info struct 50. + + + + + The filter info struct 51. + + + + + The filter info struct 54. + + + + + The filter info struct 62. + + + + + The filter info struct 63. + + + + + The filter info struct. + + + + + The mass range structure. + + + + + Initializes a new instance of the struct - copy constructor. + + + The low end of the mass range. + + + The high end of the mass range. + + + + + Loads the array. + + The viewer. + The start position. + Array of mass range + + + + Gets or sets the low end of the mass range. + + + + + Gets or sets the high end of the mass range. + + + + + Initializes a new instance of the struct. + + + The range (to copy from). + + + + + The method info structure in the raw file + + + + + The MS reaction struct - current version. + + + + + Set to 1 to use in scan filtering. High order bits hold the + activation type enumeration bits 0xffe, and the flag for multiple + activation (bit 0x1000). + + + + + If TRUE, is still the center mass but the + and + are also valid. + + + + + if == TRUE, this value defines the start of the + precursor isolation range. + + + + + if == TRUE, this value defines the end of the + precursor isolation range + + + + + The MS reaction struct version 1. + + + + + The MS reaction struct version 2. + + + + + Set to 1 to use in scan filtering. High order bits hold the + activation type enumeration bits 0xffe, and the flag for multiple + activation (bit 0x1000). + these features can be WST individually with the new access + functions, or as a UINT with the new CollisionEnergyValidEx + function + + + + + The MS reaction struct version 3. + + + + + Set to 1 to use in scan filtering. High order bits hold the + activation type enumeration bits 0xffe, and the flag for multiple + activation (bit 0x1000). + + + + + If TRUE, is still the center mass but the + and + are also valid. + + + + + if == TRUE, this value defines the start of the + precursor isolation range. + + + + + if == TRUE, this value defines the end of the + precursor isolation range + + + + + The audit data struct 1, for legacy LCQ + + + + + The audit data struct. + + + + + The auto sampler info struct, from legacy LCQ files. + + + + + The axis parameters struct, from legacy LCQ files + + + + + The chromatogram trace struct 1, from legacy LCQ files. + + + + + The chromatogram trace struct. + + + + + The fraction collector struct. + + + + + The instrument method column info struct, from legacy LCQ files + + + + + The instrument method GC struct from legacy LCQ files + + + + + The pair values struct. + + + + + The instrument method inlet struct. + + + + + The instrument method LC struct, from legacy LCQ files. + + + + + The instrument configuration struct version 1, from legacy LCQ files. + + + + + The instrument configuration struct, from legacy LCQ files. + + + + + The instrument run info struct. + + + + + The digital in (legacy LCQ). + + + + + Initializes a new instance of the struct. + + + The digital in. + + + + + Gets the user digital in 2. + + + + + Gets the user digital in 1. + + + + + Gets the divert inject bit 1. + + + + + Gets the APC ITC fail. + + + + + Gets the capillary RTD fail. + + + + + Gets the ion gauge pressure OK. + + + + + Gets the load inject. + + + + + Gets the KVCL 8. + + + + + Gets the octapole frequency on. + + + + + Gets the vacuum OK. + + + + + Gets the conv pressure OK. + + + + + Gets the ion gauge on. + + + + + Gets the ref sine on. + + + + + Gets the SWR fail. + + + + + Auto Sampler Status + + + + + LC Subsystem Status + + + + + UV Detector Status + + + + + Syringe Pump status + + + + + Turbo pump status + + + + + The read back struct. + + + + + Instrument Status + + + + + The LC detector struct, from legacy LCQ files + + + + + The LC dump value struct. + + + + + The LC event struct. + + + + + The LCQ trailer extra struct. + + + + + The LC table struct from legacy LCQ files + + + + + The MS dependent data struct 2 for legacy LCQ files. + + + + + The MS dependent data struct. + + + + + The MS method info struct from legacy LCQ files + + + + + The mass spec scan event struct. + + + + + The MS segment struct from legacy LCQ files + + + + + The non ITCL struct version 1. + + + + + The non ITCL struct. + + + + + The probe info struct. + + + + + The real time chromatogram info struct. + + + + + The real time spec info struct. + + + + + The real time chromatogram label struct version 1. + + + + + The real time chromatogram label struct version 51. + + + + + The real time chromatogram label struct. + + + + + The real time chromatogram norm struct. + + + + + The real time chromatogram other struct, from legacy LCQ files + + + + + The real time chromatogram style struct, from legacy LCQ files + + + + + The real time spectrum color struct version 1. + + + + + The real time spectrum color struct. + + + + + The real time spectrum label struct, from legacy LCQ files + + + + + The Real Time spectrum normalization struct. + + + + + The real time spec other struct, for legacy LCQ files. + + + + + The real time spectrum ranges struct, from legacy LCQ files. + + + + + The slope intercept struct, from legacy LCQ files + + + + + The syringe struct. + + + + + The temperature table struct, from legacy LCQ files. + + + + + The trailer struct, from legacy LCQ files + + + + + Tune data structure version 1 + + + + + Tune data structure version 3-5 + + + + + The latest version of Tune data structure + + + + + The old LCQ tune data struct + + + + + The variable list struct, from legacy LCQ files + + + + + The High Mass Accuracy Centroid structure + + + + + Gets or sets the mass. + + + + + Gets or sets the intensity. + + + + + The noise information packet structure. + Note: this is defined as a simple set of "internal fields" to + exactly match the binary struct format. + + + + + Gets or sets the mass. + + + + + Gets or sets the noise. + + + + + Gets or sets the baseline. + + + + + The packet header structure for LR SP profile packets. + This is defined for structure size only. + Data is decoded as individual fields. + + + + + The profile data packet at file version 64. + + + + + The packet header structure for FT profile packets. + + + + + The profile segment structure. + + + + + The profile sub-segment structure. + + + + + The high resolution spectrum type struct. + This struct is never access "as a struct" and + is decoded one field at a time from memory. + It is only declared so that it's size can be calculated. + + + + + The low resolution spectrum type struct. + + + + + The standard accuracy struct. + + + + + The Adjustable Scan Rate profile packet index structure. + + + + + The Adjustable Scan Rate profile packet index structure. + + + + + The raw file info structure version 1. + + + + + The raw file info structure version 2. + + + + + The raw file info structure version 3. + + + + + If true, there is an experiment method in the file. + + + + + The raw file info structure version 4. + + + + + If true, there is an experiment method in the file. + + + + + The raw file information structure - current version. + + + + + If true, there is an experiment method in the file. + + + + + The scan event info struct. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Will be translated to Scan Filter's Accurate Mass enumeration. + + + + + Compares items in this event, up to the reactions tests. + Reaction tests are done differently by various callers. + + The other. + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + A method which merges 8 byte sized flags into a unique 64 bit code + For faster sorting + + Has of first 8 items + + + + A method which precicely merges 8 byte sized flags into a unique 64 bit code + For faster sorting + + + + + + A method which precicely merges 8 byte sized flags into a unique 64 bit code + For faster sorting + + + + + + A method which precicely merges 5 small (less than 6 bit) flags into a unique 32 bit code + Then adds the "scan type index" as a second 32 bits + For faster sorting + + + + + + Compares items in this event, up to the reactions tests. + Reaction tests are done differently by various callers. + Skips 8 items, which are tested by hash1 + + The other. + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + Compares items in this event, up to the reactions tests. + Reaction tests are done differently by various callers. + Skips 8 items, which are tested by hash1 and 8 tested by hash2 + + The other. + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + The scan event info struct version 2. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + The scan event info struct version 3. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + The scan event info struct version 50. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + The scan event info struct version 51. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Will be translated to Scan Filter's Accurate Mass enumeration. + + + + + The scan event info struct version 54. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Will be translated to Scan Filter's Accurate Mass enumeration. + + + + + The scan event info struct version 62. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Will be translated to Scan Filter's Accurate Mass enumeration. + + + + + The scan event info struct version 63. + + + + + Set to TRUE if trailer scan event should be used. + + + + + Set to SFDetectorValid if detector value is valid. + + + + + Indicates how source fragmentation values are interpreted + + + + + Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Will be translated to Scan Filter's Accurate Mass enumeration. + + + + + The scan index structure - current version. + + + + + HIWORD == segment, LOWORD == scan type + + + + + HIWORD == SIScanData (optional), LOWORD == scan type + + + + + Cycle number used to associate events within a scan event cycle. + For example, on the first cycle of scan events, all the events + would set this to '1'. On the second cycle, all the events would + set this to '2'. This field must be set by devices if supporting + compound names for filtering. However, it may be set in all + acquisitions to help processing algorithms. + + + + + The scan index structure - version 1. + + + + + HIWORD == segment, LOWORD == scan type + + + + + HIWORD == SIScanData (optional), LOWORD == scan type + + + + + The scan index structure - version 2. + + + + + HIWORD == segment, LOWORD == scan type + + + + + HIWORD == SIScanData (optional), LOWORD == scan type + + + + + The UV scan index structure - current version. + + + + + The scan index structure - old version. + + + + + The sequence row information structure in the raw file. + + + + + The sequence file info struct. + Implements the public interface ISequenceInfo against + an SLD file. + + + + + The processing mode, of an Xcalibur sequence. + + + + + This sequence designed to run with Xcalibur + + + + + This sequence designed to run with Target. + Value, for legacy import only + + + + + Sequence file information: LCQ version + + + + + Sequence file information: Original Xcalibur version + + + + + Sequence file information: Current Xcalibur version + + + + + Initializes a new instance of the class. + + + + + Gets the user private label. + + + + + Gets or sets a description of the auto sampler tray + + + + + Gets or sets the sequence bracket type. + This determines which groups of samples use the same calibration curve. + + + + + Gets the user configurable column names + + + + + Gets the display width of each sequence column + + + + + Gets the column order (see home page?) + + + + + Gets or sets the number of samples. + + + + + Load the sequence information from the current file + + View into memory mapped file + offset for this object + file version + The number of bytes read + + + + Initializes this instance object with default values. + + + + + Gets the sequence information. + Convert the sequence info struct to byte array. + + Byte array of the sequence info structure + + + + The class contains structure conversion utilities. + + + + + The method copies the virtual controller information from 32 bit values. + + + The raw file information structure. + + + The converted . + + + + + The method copies the run header information from the 32 bit values. + + + The run header. + + + The converted . + + + + + The system time structure from C++. + + + + + The user id structure for the raw file. + + + + + Length of logon ID string and user ID + + + + + Date and time that the file was changed using C++ FILETIME structure (64-bits), precision is to 100 nanoseconds. + + + + + Windows login name. Two bytes per char (NT default string representation) + + + + + User (full) name + + + + + The virtual controller information structure. + + + + + Initializes a new instance of the struct by + copying from the old controller (i.e. 32 bit) structure. + + + The old controller structure. + + + + + The old virtual controller information structure. + Pre-version-64 structure, used a 32 bit file pointer (offset). + Causes problems if raw file is larger than 2GB. + + + + + Tool to create a parser, for validating filter strings + + + + + Create a parser, for validating filter strings + + An interface to validate filter strings + + + + Wrapper class, to ensure state is reset on each parse call. + See notes in GetFilterFromString + + + + + Gets or sets the precision expected for collision energy + + + + + Gets or sets the precision expected for mass values + + + + + Parse a string, returning the scan filter codes. + + String to parse + Parsed filter, or null if invalid + + + + Private class to pull the Base peak intensity value from a scan header (MS only) + + + + + Gets a value indicating whether this point type needs "scan data". + Always "false" for this type, as it uses only the header. + + + + + Gets or sets the retention time range of this chromatogram + + + + + Gets or sets the mechanism to select scans for inclusion in the chromatogram + + + + + method to calculate the chromatogram data value from a scan + + the scan + Base peak intensity, from scan header + + + + Private class to pull the Base peak mass value from a scan header (MS only) + + + + + Gets a value indicating whether this point type needs "scan data". + Always "false" for this type, as it uses only the header. + + + + + Gets or sets the retention time range of this chromatogram + + + + + Gets or sets the mechanism to select scans for inclusion in the chromatogram + + + + + method to calculate the chromatogram data value from a scan + + The scan to analyze + The base peak of the scan + + + + Class containing logic to open an instrument method, and to + pass required interface methods down to business logic. + + + + + Initializes a new instance of the class. + + Name of the file. + + + + Create access to method data + + + The file name. + + + Interface to read method + + + + + Class containing business logic specific to loading an instrument method file contents + + + + + Gets the data for of all devices in this method. + Keys are the registered device names. + A method contains only the "registered device name" + which may not be the same as the "device display name" (product name). + Instrument methods do not contain device product names. + + + + + Gets the file header for the method + + + + + Gets the file error state. + + + + + Gets a value indicating whether the last file operation caused a recorded error. + If so, there may be additional information in FileError + + + + + + Gets a value indicating whether a file was successfully opened. + Inspect "FileError" when false + + + + + Gets or sets the descriptions. + + + + + Initializes a new instance of the class. + Constructor: Load data from file + + + File to load + + + + + Get data from all instruments + + Root storage of the method file + Names of the instruments + Data for each instrument + + + + Load data from storage. + + + The storage. + + + Error information + + + + + Get the list of device names in the method file + + The list of names + + + + my errors. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets a value indicating whether this file has detected a warning. + If this is false: Other warning properties in this interface have no meaning. + + + + + Gets or sets the error code number. + Typically this is a windows system error number. + + + + + Gets or sets the error message. + + + + + Gets the warning message. + + + + + Class to read data from a meth file + + + + + Create an IInstrumentMethodFileAccess interface to + read data from a method (.meth) file + + File to open + Interface to read data from file + + + + Private class to pull the Tic value from a scan header + + + + + Gets a value indicating whether this point type needs "scan data". + Always "false" for this type, as it uses only the header. + + + + + Gets or sets the retention time range of this chromatogram + + + + + Gets or sets the mechanism to select scans for inclusion in the chromatogram + + + + + method to calculate the chromatogram data value from a scan + + The scan number + The Tic of this scan + + + + class to manage multiple threads accessing the same file, with no locks + + + + + Initializes a new instance of the class. + + The loader. + + + + Gets the file loader. + + + + + This interface method creates a thread safe access to raw data, for use by a single thread. + Each time a new thread (async call etc.) is made for accessing raw data, this method must be used to + create a private object for that thread to use. + This interface does not require that the application performs any locking. + In some implementations this may have internal locking (such as when based on a real time file, which is continually changing in size), + and in some implementations it may be lock-less. + + An interface which can be used by a thread to access raw data + + + + Class to convert from "user" settings for a chromatogram + into objects ready for use by the chromatogram generator + + + + + Gets the delivery, configured to generate a chromatogram + + + + + Gets or sets the file mass precision. + + + + + Gets a filter string which failed to parse. + If this is "not empty" there was a parsing error on a supplied + filter string, and the "Delivery" will be set to null. + + + + + Gets or sets the settings. + + + + + Gets or sets the time range. + + + + + Gets or sets the mass tolerance. + + + + + Gets or sets a value indicating whether to add base masses. + + + + + Create chromatogram construction tool for one trace + + + + + calculate (final) mass range for chromatogram, by adding tolerance for single ion mode. + Single ion mode is detected as "high mass == 0.0" or "low and high are same". + + + The tolerance options. + + + The mass ranges. + + + The range. + + + Set if the class has a tolerance to be applied + + + The . + + + + + Create a chromatogram point generator which can generate the mass with the largest + intensity of of all data in a scan. + + + Start time of chromatogram + + + End time of chromatogram + + + Mass tolerance settings + + + Settings for this chromatogram trace + + + Tool to sum all data in a scan + + + + + Create delivery, which will generate a Base Peak Chromatogram + + + The start time. + + + The end time. + + + The tolerance options. + + + The this trace. + + + An object to create the desired chromatogram. + + + + + Create delivery, which will generate a chromatogram with the base peak mass over a Mass Range + + + The start time. + + + The end time. + + + The tolerance options. + + + The this trace. + + Mass ranges for this chromatogram + Number of mass ranges to use + + An object to create the desired chromatogram. + + + + + Create delivery, which will generate a chromatogram with base peak intensity over a Mass Range + + + The start time. + + + The end time. + + + The tolerance options. + + + The this trace. + + Mass ranges for this chromatogram + Number of mass ranges to use + + An object to create the desired chromatogram. + + + + + Create tools to calculate each chromatogram data point + based on the mode. + For example: Sum of masses in a range (XIC). + Sum of all data in scan (Tic). + + Time limits of this chromatogram + Mass tolerance settings + Chromatogram settings + Data for chromatogram generator + + + + Create delivery, which will generate a Fragment Chromatogram + + + The start time. + + + The end time. + + + The mass tolerance options. + + + The this trace. + + + An object to create the desired chromatogram. + + + + + Design a chromatogram point builder which just gets the Tic value from each scan header. + + + Start time of chromatogram. + + + End time of chromatogram. + + + Mass tolerance settings + + + Trace settings + + + Tic chromatogram generator + + + + + Create delivery, which will generate a Mass Range Chromatogram (XIC) + + + The start time. + + + The end time. + + + The tolerance options. + + + The this trace. + + Mass ranges for this chromatogram + Number of mass ranges to use + + An object to create the desired chromatogram. + + + + + Create delivery, which will generate a Mass Range Chromatogram (XIC) + + + The start time. + + + The end time. + + + The tolerance options. + + + The this trace. + + + An object to create the desired chromatogram. + + + + + create a scan selection method. + + + The tolerance options. + + + The this trace. + + + The . + + + + + Create Tic delivery, which will generate a Total Ion Chromatogram + + + The start time. + + + The end time. + + + The tolerance options. + + + The this trace. + + + An object to create the desired chromatogram. + + + + + Create a chromatogram point generator which can sum all data in a scan. + + + Start time of chromatogram + + + End time of chromatogram + + + Mass tolerance settings + + + Settings for this chromatogram trace + + + Tool to sum all data in a scan + + + + + Get a filter interface from a string. + + The filter string. + + An interface representing the filter fields, converted from the supplied string. + + + + + Contains factories to read various Xcalibur data system files. + + + + + The stream seek. + + + + + set position + + + + + seek to current position + + + + + seek to end. + + + + + The storage move mode. + + + + + Move data + + + + + Copy data + + + + + The storage commit. + specify the conditions for performing the commit + operation in the IStorage::Commit and IStream::Commit methods. + + + + + Windows 2000 and Windows XP: Indicates that a storage should be consolidated + after it is committed, resulting in a smaller file on disk. + This flag is valid only on the outermost storage object that + has been opened in transacted mode. It is not valid for streams. + The STGC_CONSOLIDATE flag can be combined with any other STGC flags. + + + + + Commits the changes to a write-behind disk cache, but does not save + the cache to the disk. In a write-behind disk cache, + the operation that writes to disk actually writes to a disk cache, + thus increasing performance. The cache is eventually written to the disk, + but usually not until after the write operation has already returned. + The performance increase comes at the expense of an increased risk + of losing data if a problem occurs before the cache is saved and the + data in the cache is lost. + If you do not specify this value, then committing changes to root-level + storage objects is robust even if a disk cache is used. + The two-phase commit process ensures that data is stored on the disk + and not just to the disk cache. + + + + + You can specify this condition with STGC_CONSOLIDATE, or some combination of the other three flags in this list of elements. + Use this value to increase the readability of code. + + + + + Prevents multiple users of a storage object from overwriting each other's changes. + The commit operation occurs only if there have been no changes to the saved + storage object because the user most recently opened it. + Thus, the saved version of the storage object is the same version that + the user has been editing. If other users have changed the storage object, + the commit operation fails and returns the STG_E_NOTCURRENT value. + To override this behavior, call the IStorage::Commit or IStream::Commit method + again using the STGC_DEFAULT value. + + + + + The commit operation can overwrite existing data to reduce overall space requirements. + This value is not recommended for typical usage because it is not as robust as the + default value. In this case, it is possible for the commit operation to fail after + the old data is + overwritten, but before the new data is completely committed. Then, neither the old version nor the new version of the storage object will be intact. + + + + + The STATFLAG enumeration values indicate whether the method should try to return + a name in the pwcsName member of the STATSTG structure. + The values are used in the ILockBytes::Stat, IStorage::Stat, and IStream::Stat methods to + save memory when the pwcsName member is not required. + + + + + Requests that the statistics include the pwcsName member of the STATSTG structure. + + + + + Requests that the statistics not include the pwcsName member of the STATSTG structure. + If the name is omitted, there is no need for the + ILockBytes::Stat, IStorage::Stat, and IStream::Stat methods + to allocate and free memory for the string value of the name, + therefore the method reduces time and resources used in an allocation and free operation. + + + + + The LOCKTYPE enumeration values indicate the type of locking requested + for the specified range of bytes. + The values are used in the ILockBytes::LockRegion and IStream::LockRegion methods. + + + + + If this lock is granted, writing to the specified range of bytes is + prohibited except by the owner that was granted this lock. + + + + + If this lock is granted, no other LOCK_ONLYONCE lock can be obtained on the range. Usually this lock type is an alias for some other lock type. + Thus, specific implementations can have additional behavior associated with this lock type. + + + + + If this lock is granted, the specified range of bytes can be opened and read any number of times, + but writing to the locked range is prohibited except for the owner that was granted this lock. + + + + + values are used in the type member of the STATSTG structure to indicate the type of the storage element. A storage element is a storage object, + a stream object, or a byte-array object (LOCKBYTES). + + + + + Indicates that the storage element is a byte-array object. + + + + + Indicates that the storage element is a property storage object. + + + + + Indicates that the storage element is a storage object. + + + + + Indicates that the storage element is a stream object. + + + + + The storage mode. + + + + + Creates the new object while preserving existing data in a stream named "Contents". + In the case of a storage object or a byte array, + the old data is formatted into a stream regardless of whether the existing + file or byte array currently contains a layered storage object. + This flag can only be used when creating a root storage object. + It cannot be used within a storage object; for example, + in IStorage::CreateStream. It is also not valid to use this flag and + the STGM_DELETEONRELEASE flag simultaneously. + + + + + Indicates that an existing storage object or stream should be removed before the new object replaces it. + A new object is created when this flag is specified only if the existing object has been successfully removed. + This flag is used when attempting to create: + A storage object on a disk, but a file of that name exists. + An object inside a storage object, but an object with the specified name exists. + A byte array object, but one with the specified name exists. + This flag cannot be used with open operations, such as StgOpenStorageEx or IStorage::OpenStream. + + + + + Indicates that the underlying file is to be automatically destroyed + when the root storage object is released. + This feature is most useful for creating temporary files. + This flag can only be used when creating a root object, + such as with StgCreateStorageEx. + It is not valid when opening a root object, + such as with StgOpenStorageEx, or when creating or opening a sub-element, + such as with IStorage::CreateStream. + It is also not valid to use this flag and the STGM_CONVERT flag simultaneously. + + + + + Indicates that, in direct mode, each change to a storage or stream element is written as it occurs. + This is the default if neither STGM_DIRECT nor STGM_TRANSACTED is specified. + + + + + Causes the create operation to fail if an existing object with the specified name exists. + In this case, STG_E_FILEALREADYEXISTS is returned. This is the default creation mode; that is, + if no other create flag is specified, STGM_FAILIFTHERE is implied. + + + + + Indicates that, in transacted mode, a temporary scratch file is usually used + to save modifications until the Commit method is called. + Specifying STGM_NOSCRATCH permits the unused portion + of the original file to be used as work space instead of + creating a new file for that purpose. + This does not affect the data in the original file, + and in certain cases can result in improved performance. + It is not valid to specify this flag without also specifying STGM_TRANSACTED, + and this flag may only be used in a root open. + For more information about NoScratch mode, see the Remarks section. + + + + + This flag is used when opening a storage object with STGM_TRANSACTED and + without STGM_SHARE_EXCLUSIVE or STGM_SHARE_DENY_WRITE. + In this case, specifying STGM_NOSNAPSHOT prevents the + system-provided implementation from creating a snapshot copy of the file. + Instead, changes to the file are written to the end of the file. + Unused space is not reclaimed unless consolidation is performed + during the commit, and there is only one current writer on the file. + When the file is opened in no snapshot mode, another open operation + cannot be performed without specifying STGM_NOSNAPSHOT. + This flag may only be used in a root open operation. + For more information about NoSnapshot mode, see the Remarks section. + + + + + Opens the storage object with exclusive access to the most + recently committed version. Thus, other users cannot commit + changes to the object while you have it open in priority mode. + You gain performance benefits for copy operations, + but you prevent others from committing changes. + Limit the time that objects are open in priority mode. + You must specify STGM_DIRECT and STGM_READ with priority mode, + and you cannot specify STGM_DELETEONRELEASE. STGM_DELETEONRELEASE + is only valid when creating a root object, such as with StgCreateStorageEx. + It is not valid when opening an existing root object, such as with StgOpenStorageEx. + It is also not valid when creating or opening a sub-element, + such as with IStorage::OpenStorage. + + + + + Indicates that the object is read-only, meaning that modifications cannot be made. + For example, if a stream object is opened with STGM_READ, + the ISequentialStream::Read method may be called, + but the ISequentialStream::Write method may not. Similarly, + if a storage object opened with STGM_READ, + the IStorage::OpenStream and IStorage::OpenStorage methods may be called, + but the IStorage::CreateStream and IStorage::CreateStorage methods may not. + + + + + Enables access and modification of object data. + For example, if a stream object is created or opened in this mode, + it is possible to call both IStream::Read and IStream::Write. + Be aware that this constant is not a simple binary OR operation + of the STGM_WRITE and STGM_READ elements. + + + + + Specifies that subsequent openings of the object are not denied read or write access. + If no flag from the sharing group is specified, this flag is assumed. + + + + + Prevents others from subsequently opening the object in STGM_READ mode. + It is typically used on a root storage object. + + + + + Prevents others from subsequently opening the object for STGM_WRITE or STGM_READWRITE access. + In transacted mode, sharing of STGM_SHARE_DENY_WRITE or STGM_SHARE_EXCLUSIVE can significantly + improve performance because they do not require snapshots. + + + + + Prevents others from subsequently opening the object in any mode. + Be aware that this value is not a simple bitwise OR operation + of the STGM_SHARE_DENY_READ and STGM_SHARE_DENY_WRITE values. + In transacted mode, sharing of STGM_SHARE_DENY_WRITE or STGM_SHARE_EXCLUSIVE + can significantly improve performance because they do not require snapshots. + + + + + Provides a faster implementation of a compound file in a limited, + but frequently used, case. For more information, see the Remarks section. + + + + + Indicates that, in transacted mode, changes are buffered + and written only if an explicit commit operation is called. + To ignore the changes, call the Revert method in the IStream, + IStorage, or IPropertyStorage interface. + The COM compound file implementation of IStorage does not + support transacted streams, which means that streams can be + opened only in direct mode, and you cannot revert changes + to them, however transacted storages are supported. + The compound file, stand-alone, and NTFS file system implementations + of IPropertySetStorage similarly do not support transacted, + simple property sets because these property sets are stored in streams. + + + + + Enables you to save changes to the object, + but does not permit access to its data. + The provided implementations of the + IPropertyStorage and IPropertySetStorage interfaces do not support this write-only mode. + + + + + The "no data" scan from raw data class, which supplies code needed for the + chromatogram batch generator to get scan information from the IRawDataPlus interface. + This version returns scan event and index information only. + + + + + Initializes a new instance of the class. + + + The raw data. + + + + + The scan reader. + + + The scan index, to the available scans. + + + The . + + + + + Loads a processing method (PMD) file. + + + + + Initializes a new instance of the class. + + Name of the file. + + + + Gets the file header for the processing method + + + + + Gets a value indicating whether the last file operation caused an error + + + + + + Gets the file error state. + + + + + Gets a value indicating whether a file was successfully opened. + Inspect "FileError" when false + + + + + Gets some global settings from a PMD + These settings apply to all components in the quantitation section. + Some settings affect qualitative processing. + + + + + Gets the "Standard report" settings from a processing method + + + + + Gets peak detection settings (Qualitative processing) + + + + + Gets Spectrum Enhancement settings (Qualitative processing) + + + + + Gets options for NIST library search + + + + + Gets constraints for NIST library search + + + + + Gets the list of reports + + + + + Gets the list of programs + + + + + Gets the list of reports + + + + + Gets additional options about the peak display (peak labels etc). + + + + + Gets setting for PDA peak purity + + + + + Gets the list of compounds. + This includes all integration, calibration and other settings + which are specific to each component. + + + + + Gets the raw file name, which was used to design this method + + + + + Gets the "View type" saved in a PMD file + + + + + Gets or sets the (global) mass tolerance and precision settings for the method + + + + + Class to read data from Xcalibur PMD files + + + + + Create an IProcessingMethodFileAccess interface to + read data from a processing method (PMD) file. + The entire contents of the file are loaded into memory objects. + The file is not kept open on disk, and so this interfaces has no + "Save", "Close" or "Dispose" methods. + + File to open + Interface to read data from the processing method file + + + + The raw file access. + This class adds functionality of "validating a disk file name" to the base. + + + + + Create access to a file + + + The file name. + + + The RawFileAccess + + on null file + + + + + Create access to a file + + + The file loader. + + + The RawFileAccess + + on null file + + + + + Initializes a new instance of the class. + + + Loader of the file. + + + + + Initializes a new instance of the class. + + + Name of the file. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + Thrown if dispose fails + + + + The raw file access base. + This provides an implementation of the IRawDataPlus against ".raw" files. + Derived classes add specific (internal) functionality, such as thread handling. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The loader. + + + + Gets the auto sampler information. + + + + + Gets the file error state. + + + + + Gets the raw file header. + + + + + Save instrument method file. + + + The method file path. + + + Force over write. If true, and file already exists, attempt to delete existing file first. + If false: UnauthorizedAccessException will occur if there is an existing read only file. + + + True if export was achieved + + + + + get scan type as string. + + + The scan number. + + + The mass spec device. + + + The scan type. + + + + + Gets The filter scan event for scan. + + + The scan number. + + + The mass spec device. + + + The . + + + + + Get a filter interface from a scan event interface. + Permits filtering to be done based on programmed events, such as + an item from the "ScanEvents" table, + or from constructed data using . + This method initializes the filter based on the current raw file + (for example: mass precision) + + + The event data. + + + An interface representing the filter fields, converted from the supplied event. + + Thrown if the selected device is not of type MS + + + + Validate that the raw file is open and loaded OK. + + If there was some problem opening the file + + + + + Gets the name of the computer, used to create this file. + + + + + Test if we really have an instrument method. + + + True if there is a valid method. + + + + + Get all instrument friendly names from the instrument method. + + + The instrument friendly names"/>. + + + + + Create a chromatogram from the data stream. + Extended version: + Parameters include option for component names. + Includes base peak data for each scan. + + Definition of how the chromatogram is read + First scan to read from. -1 for "all data" + Last scan to read from. -1 for "all data" + + + Chromatogram points + + + + + Convert from a range of scans to a time range. + + First scan to read from. -1 for "from start of data" + Last scan to read from. -1 for "to end of data" + The retention time range of the supplied scans + + + + Handle rule that either start or end can be -1, for "use limits from header" + + + run header info + + + start scan + + + end scan + + + true if the range is valid + + + + + Create a chromatogram from the data stream. + Extended version: + Parameters include option for component names. + Includes base peak data for each scan. + + Definition of how the chromatogram is read + First scan to read from. -1 for "all data" + Last scan to read from. -1 for "all data" + For mass range or base peak chromatograms, + if the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses. + For example: with 5 ppm tolerance, the caller can pass a single mass value (same low and high) for each mass range, + and get chromatograms of those masses +/- 5 ppm. + + + Chromatogram points + + + + + The create MS chromatograms. + + _s + The settings. + + + The tolerance options. + + + The start scan. + + + The end scan. + + + The . + + + + + Gets the unique compound names as arrays of strings by given filter. + + The scan Filter. + + The compound names + + + + + Gets the unique compound names as arrays of strings. + + + The Compound Names. + + + + + Gets an entry from the instrument error log. + + Zero based index. + The number of records available is RunHeaderEx.ErrorLogCount + + An interface to read a specific log entry + + + + + Get the filter (scanning method) for a scan number. This method is only defined for MS detectors. + Calling for other detectors or with no selected detector is a coding + error which may result in a null return or exceptions, depending on the implementation. + + + The scan number. + + + The . + + Thrown if the selected device is not of type MS + + + + Requires the MS Device + + The reason. (Calling method) + The mass spec device + Thrown if not an mass spec + + + + Get a filter interface from a string, with a given mass precisions + + The filter string. + Precisions of masses (number of decimal places) + + An interface representing the filter fields, converted from the supplied string. + + + + + Get a filter interface from a string. + + The filter string. + + An interface representing the filter fields, converted from the supplied string. + + + + + Get filtered scan enumerator. + + The filter. + + + An enumerator which can be used to foreach over all scans in a file, which match a given filter. + Note that each "step" through the enumerator will access further data from the file. + To get a complete list of matching scans in one call, the "ToArray" extension can be called, + but this will result in a delay as all scans in the file are analyzed to return this array. + For fine grained iterator control, including "back stepping" use + + + + + Get filtered scan enumerator. + + + The filter. + + + The start Time. + + + The End Time. + + + An enumerator which can be used to foreach over all scans in a time range, which match a given filter. + Note that each "step" through the enumerator will access further data from the file. + To get a complete list of matching scans in one call, the "ToArray" extension can be called, + but this will result in a delay as all scans in the time range are analyzed to return this array. + For fine grained iterator control, including "back stepping" use + + + + + Obtain an interface to iterate over a scans which match a specified filter. + The iterator is initialized at "scan 0" such that "GetNext" will return the first matching scan in the file. + This is a low level version of + + The filter to match scans against + The iterator + + + + Get scan dependents. + Returns a list of scans, for which this scan was the parent. + + + The scan number. + + + The filter precision decimals. + + + Information about how data dependent scanning was performed. + + Thrown if the selected device is not of type MS + + + + Gets the scan event for scan number. + + The scan number. + The scan event for the given scan + + + + Gets the scan event as a string for a scam + + The scan number. + + The event as a string. + + + + + Get the scan filters which match a compound name. + When implemented against raw files, this may have a performance impact on applications. + For files which have a programmed event table, this will be fast, + as the information can be taken directly from the events. + If there is no event table, then event data is checked for every scan in the file (slower). + + The compound name. + + The array of matching scan filters (in string format). + + + + + Get the scan filters which match each compound name. + When implemented against raw files, this may have a performance impact on applications. + For files which have a programmed event table, this will be fast, + as the information can be taken directly from the events. + If there is no event table, then event data is checked for every scan in the file (slower). + + The compound names. + + The arrays of matching scan filters (in string format) for each compound. + + + + + Gets the status log data, from all log entries, based on a specific position in the log. + For example: "position" may be selected from one of the key value pairs returned from + in order to create a trend plot of a particular value. + The interface returned has an array of retention times and strings. + If the position was selected by using , then the strings may be converted "ToDouble" to get + the set of numeric values to plot. + + The position within the list of available status log values. + + An interface containing the times and logged values for the selected status log field. + + + + + Gets a value indicating whether this file has MS data. + + + + + Gets the scan events. + + + + + Gets the labels and index positions of the status log items which may be plotted. + That is, the numeric items. + Labels names are returned by "Key" and the index into the log is "Value". + + + + + Test if a scan passes a filter. + If all matching scans in a file are required, consider using or + + the scan number + the filter to test + + True if this scan passes the filter + + + + + Test if a scan passes a filter. + + the scan number + the filter to test + + True if this scan passes the filter + + + + + Test if this file is from the Quantum family of MS + + true if quantum style file + + + + Gets the set of user labels + + + + + Gets the date when this data was created. + + + + + Gets the name of person creating data. + + + + + Gets the name of acquired file (excluding path). + + + + + Gets names of all instruments stored in the raw file's copy of the instrument method file. + + + The instrument names. + + + + + Calculate the filters for this raw file, and return as an array + + + Auto generated list of unique filters + + + + + Calculate the filters for this raw file within the range of scans supplied, and return as an array + + First scan to analyze + Last scan to analyze + + Auto generated list of unique filters + + + + + Return the filter strings for this file + + + A string for each auto filter from the raw file + + + + + Get the centroids saved with a profile scan + + Scan number + determines if peaks flagged as ref should be returned + + centroid stream for specified . + + + + + Get the advanced LT/FT formats data, such as the noise data, baseline data, label peaks and frequencies + + The scan number. + + Returns an IAdvancedPacketData object which contains noise data, baseline data, label peaks and frequencies for specified . + It might return empty arrays for scans which do not have these data. + + Thrown if the selected device is not of type MS + + + + Create a chromatogram from the data stream + + Definition of how the chromatogram is read + First scan to read from. -1 for "all data" + Last scan to read from. -1 for "all data" + For mass range or base peak chromatograms, + if the ranges have equal mass values, + then are used to determine a band + subtracted from low and added to high to search for matching masses + + Chromatogram points + + + + + Generate MS chromatograms, not returning base peak data. + + Chromatogram settings + First scan in chromatogram + Last scan in chromatogram + Mass tolerance + The chromatogram + + + + Create a chromatogram from the data stream + + Definition of how the chromatogram is read + First scan to read from. -1 for "all data" + Last scan to read from. -1 for "all data" + + Chromatogram points + + Null settings argument. + + + + Create simple MS chromatograms. + + + The settings. + + + The start scan. + + + The end scan. + + + The chromatogram data + + + + + Apply delays to chromatograms, where specified. + + + The settings. + + + The signal. + + + + + Get the number of instruments (data streams) of a certain classification. + For example: the number of UV devices which logged data into this file. + + The device type to count + + The number of devices of this type + + + + + Gets the definition of the selected instrument. + + + data about the selected instrument, for example the instrument name + + + + + Get the device type for an instrument data stream + + The data stream + The device at type the index + thrown if index is negative or beyond + the device count + + + + Get the scan statistics for a scan + + scan number + Statistics for scan + + + + Gets the type of the scan. + + The scan number. + The scan type, as string + + + + Gets the segment event table for the current instrument + + + A two dimensional array of events. The first index is segment index (segment number-1). + The second is event index (event number -1) within the segment. + + + + + Get a segmented scan. This is the primary scan from the raw file. + FT instrument files (such as Calcium) will have a second format of the scan (a centroid stream) + + Scan number to read + statistics for the scan + The segmented scan + + + + Require a device to have been selected. + + + The reason. + + Thrown in no device has been selected + + + + + Require a chromatographic device to have been selected. + + + The reason. + + Thrown in no chromatographic device has been selected + + + + + returns the number of entries in the current instrument's status log + + the number of entries in the current instrument's status log + + + + Gets the status log for retention time. + + The retention time. + + object containing status log information. + + + + + Returns the header information for the current instrument's status log + + + The headers (list of prefixes for the strings). + + + + + check for empty status log. + + + The log entries. + + + true if empty + + + + + Returns the Status log values for the current instrument + + Index into table of status logs + true if they should be formatted (recommended for display). + Unformatted values can be returned with default precision (for float or double) + Which may be better for graphing + + The status log values. + + + + + Gets the trailer extra header information. This is common across all scan numbers + + + The headers. + + + + + Gets the array of headers and values for this scan number. The values are formatted as per the header settings. + + The scan for which this information is needed + + Extra information about the scan + + + + + returns the Trailer Extra values for the specified scan number. + + scan who's data is needed + If true, then the values will be formatted as per the header settings. + If false, then numeric values have default formatting (generally more precision) + string representation of the scan trailer information + + + + returns the Trailer Extra value for a specific field in the specified scan number. + The object type depends on the field type. + + scan who's data is needed + zero based filed number in the record, as per header + Value of requested field + + + + returns the Trailer Extra values for all fields in the specified scan number. + The object types depend on the field types. + + scan who's data is needed + Value of requested field + + + + Gets the tune data. + + Index of the tune data. + The tune data log + + + + Gets the tune data values, as an array of objects + with types as per the tune data header. + + Index of the tune data. + The tune data values (as objects) + + + + Gets the (raw) status log data at a given index in the log. + Designed for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "RunHeaderEx.StatusLogCount"-1) + Log data at the given index + + + + Gets the (raw) status log data at a given index in the sorted log. + The form of the log removes duplicate and out of order times + Designed for efficiency, this method does not convert logs to display string format. + + Index (from 0 to "GetStatusLogEntriesCount() -1") + Log data at the given index + + + + Gets the (raw) status log data at a given retention time in the log. + Designed for efficiency, this method does not convert logs to display string format. + + Retention time/ + Log data at the given time + + + + return the number of tune data entries + + + The number of tune methods. + + + + + Return the header information for the current instrument's tune data + + + The format definition for tune data. + + + + + return tune data values for the specified index + + index into tune tables + true if formatting should be done + + The tune data. + + + + + Gets a value indicating whether the file is being acquired (not complete). + + + + + Gets or sets a value indicating whether reference and exception peaks should be returned (by default they are not) + + + + + + Gets the number of instruments (data streams) in this file. + + + + + Gets an instrument method. + + The index. + + A text version of the method + + + + + Gets the number of instrument methods in this file. + + + + + Gets a value indicating whether this file has an instrument method. + + + + + Test if a scan is centroid format + + Number of the scan + + True if the scan is centroid format + + + + + Gets a value indicating whether the last file operation caused an error + + + + + + Gets a value indicating whether the data file was successfully opened + + + + + Gets the path to original data. (path set when acquired) + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + Get the retention time (minutes) from a scan number + + Scan number + + Retention time (start time) of scan + + + + + Gets extended the run header details. + + + + + Gets the current instrument's run header + + + + + Gets various details about the sample (such as comments). + + + + + Get a scan number from a retention time + + Retention time (minutes) + + Scan number in the data stream for this time. + + + + + Gets the instrument as last set by a call to method. + + + + + Sets the current instrument in the raw file. + This method must be called before subsequent calls to access data specific + to an instrument (e.g. MS or UV data) may be made. All requests for data specific + to an instrument will be forwarded to the current instrument until the current + instrument is changed. The instrument number is used to indicate which instrument + to use if there are more than one registered instruments of the same type (e.g. multiple UV detectors). + Instrument numbers for each type are numbered starting at 1. + + Type of instrument + Stream number + is out of range. + + + + Count the number currently in the cache + + Item type to count + + The number of items in this cache + + + + + Clear items in the cache + + item type to clear + + + + Request the object to keep a cache of the listed item. + Setting the caching to "zero" disables further caching. + + Item to cache + Limit of number of items to cache + (optional, default false) if set True, all values returned from the cache are unique (cloned) references. + By default, the cache just keeps references to the objects + + + + When deciding what data should be read from a scan, centroids or regular scan + (or if the data is needed at all) + scan event data is needed. + This method permits events to be read as a block for a range of scans, + which may reduce overheads involved in requesting one by one. + Potentially, in some data models, the same "event" may apply to several scans + so it is permissible for the same reference to appear multiple times. + + The first scan whose event is needed + The last scan + + An array of scan events + + firstScanNumber;First scan must not be below Last scan + + + + This method is similar to GetCentroidStream in the IRawData interface. + The method returns only the mass and intensity values from + the "centroid stream" data for a scan. This is also known as "Label Stream" + Values for flags etc. are not returned, saving data space and improving efficiency. + This method never returns "reference and exception peak" data. + The method is designed for improved performance in custom XIC generators. + + The scan who's mass intensity data are needed + Mass and intensity values from the scan "centroid data". + + + + This method is similar to GetSegmentedScanFromScanNumber in the IRawData interface. + The method returns only the mass and intensity values from + the scan data for a scan. + Values for flags etc. are not returned, saving data space and improving efficiency. + This method never returns "reference and exception peak" data. + The method is designed for improved performance in custom XIC generators. + + The scan who's mass intensity data are needed + Mass and intensity values from the scan. + + + + Gets additional (binary) data from a scan. + The format of this data is custom (per instrument) and can be decoded into + objects by a specific decoder for the detector type. + + Scan whose data is needed + + + + Gets additional (binary) data from a scan. + The format of this data is custom (per instrument) and can be decoded into + objects by a specific decoder for the detector type. + + Scan whose data is needed + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Permits derived (internal) classes to indicate that the loader is no longer needed, + without having to create public or protected access to the loader. + + + + + This static class contains factories to open raw files + + + + + Create an IRawDataExtended interface to read data from a raw file + + File to open + Interface to read data from file + + + + Open a raw file, which will be accessed from multiple threads. + + File to open + Interface to create objects for each thread to use + + + + Opens an Xcalibur family file, and returns information from the header. + The file is not kept open. + For example: Reads headers from .raw, .sld, .pmd files. + + Name of the file. + Interface to read a file header + Thrown when there are problems with the file name + Only 64 bit applications are supported by this project + + + + The memory map accessor. + Provides methods to access mapped file data. + + + + + Initializes a new instance of the class. + + The memory mapped raw file handler + The stream identifier. + The view accessor. + The initial offset. + The size of view. + + + + Writes the structure. + + Struct type + The offset. + The data. + Number of bytes written + + + + Writes the structure. + + Struct type + The offset. + The data. + The size of structure. + Number of bytes written + + + + Writes the float to the memory mapped file. + + The start position. + The value. + The number of bytes written (4) + + + + Writes the double to the memory mapped file. + + The start position. + The value. + the number of bytes written (8) + + + + Writes the byte to the memory mapped file. + + The start position. + The value. + The number of bytes written (1) + + + + Writes the array of bytes to the memory mapped file. + + The start position. + The value. + The number of bytes written + + + + Writes the short to the memory mapped file. + + The start position. + The value. + The number of bytes written (2) + + + + Writes the integer to the memory mapped file. + + The offset. + The value. + The number of bytes written (4) + + + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + 2 + + + + The memory map reader. + + + + + Gets the accessor. + + + + + Gets or sets the memory mapped file. + + + + + Initializes a new instance of the class. + + + The memory Mapped File. + + + The stream id. + + + The view accessor. + + + The initial offset. + + + The size of view. + + + + + Gets the initial offset. + + + + + Gets the size of view. + + + The size of view. + + + + + Gets the stream id. + + + + + Reads the structure array. + + Type of structure + The offset into the map. + The number of bytes read. + Array of structures + + + + The method reads a byte. + + + The offset into the map. + + + The . + + + + + The method reads an array of bytes. + + Offset from start of memory map + The count. + + The byte array. + + + + + The method reads a double. + + + The offset into the map. + + + The . + + + + + Reads an array of double. + + The offset into the map. + The count. + The array of doubles + + + + The method reads a float. + + + The offset into the map. + + + The . + + + + + Reads floats, as an array + + The offset into the map. + The count. + The array of floats + + + + The method reads an integer. + + + The offset into the map. + + + The . + + + + + Reads the integers, where count is typically small + + The offset. + The count. + + The array of integers + + + + + read unsigned long integers, as an array. + + + The offset into the map. + + + The count. + + + The array of unsigned long integers. + + + + + read unsigned integers. + + + The offset. + + + The count. + + + The array + + + + + Read a previous revision of a type and convert to latest. + Previous struct is assumed to be at the start of the latest struct + using sequential layout. + + + The offset. + + + The size of previous rev struct. + + Type to return + + + The converted object. + + + + + Reads the short. + + The offset into the memory map. + The short + + + + read string. + + + The offset. + + + The number of bytes read. + + + The . + + + + + Read a number of wide characters, and convert to string. + If there is a '0' in the string, the string length will be adjusted. + + The offset into the view. + The number of bytes read. + The converted string + + + + Read a number of wide characters, and convert to string. + If there is a '0' in the string, the string length will be adjusted. + + Offset into the view + Number of bytes read by this call (added to input value) + Number of 2 byte chars + converted string + + + + read an array of wide (2 byte) char. + + + The offset. + + + The number of bytes read. + + + The string size. + + + The characters + + + + + read a list of strings + + + The offset. + + + The number bytes read. + + + The strings + + + + + Read a simple structure. + This must be a fixed size struct, with no embedded fixed arrays, + ref types or any other marshaled items. + Example: struct containing 2 doubles. + + + The offset. + + type of struct + + + The structure + + + + + read simple structure array. + This must be a fixed size struct, with no embedded fixed arrays, + ref types or any other marshaled items. + Example: struct containing 2 doubles. + + + The offset into the memory map. + + + The count (array length). + + type of struct + + + The struct array. + + + + + read an array of bytes from a view, expecting a large data array. + This uses 64 bit items, to cut down Marshalling overheads + + + The start position. + + The count of bytes to read + + The array + + + + + read structure. + + + The offset into the memory map. + + + The number of bytes read. + + type of structure + + + The structure + + + + + read a structure. + + + The offset. + + + The number of bytes read. + + Type to read + + + The object which was read + + + + + read unsigned integer. + + + The offset. + + + The . + + + + + read unsigned short. + + + The offset. + + + The . + + + + + The method converts an object to a structure. + + + The bytes array. + + + Structure to convert to. + + + The structure. + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + A helper class to provide common methods to release/close and get memory mapped file accessor, etc. + + + + + Releases and close the memory mapped file and viewer + + The viewer. + if set to true [force to close MMF]. + + + + Gets the memory mapped viewer. + + The viewer. + The loader identifier. + Name of the map. + The offset. + The size. + if set to true [in acquisition]. + The access mode. + The type. + Memory mapped file accessor + + + + Gets the memory mapped viewer. + + The viewer. + The loader identifier. + Name of the map. + if set to true [in acquisition]. + The access mode. + The type. + Memory mapped file accessor + + + + Determines whether [is failed to map a zero length file] [the specified stream identifier]. + + The stream identifier. + The error messages + True tried to map a zero length file; false otherwise. + + + + Determines whether [is failed to map a zero length file] [the specified stream identifier]. + + The stream identifier. + True tried to map a zero length file; false otherwise. + + + + Constructs the stream identifier. + + The identifier. + The name. + Memory mapped file ID + + + + Memory Mapped File access mode + + + + + Open an existing memory mapped file + + + + + Create an memory mapped file + + + + + Allow to read + + + + + Allow to write + + + + + Prefixing a local namespace share memory mapped object name with a raw file loader ID + + + + + Prefixing the file mapping object names with "Global\" allows processes to communicate with each other + even if they are in different terminal server sessions. (use mainly in Acquisition) + This requires that the first process must have the SeCreateGlobalPrivilege privilege. + without prefixing the file mapping object names with "Global\", the sharing named memory is visible to + local process + + + + + The open read + + + + + The open read write + + + + + The open create read + + + + + The open create read write + + + + + The open read global + + + + + The open read write global + + + + + The open create read global + + + + + The open create read write global + + + + + The open read identifier + + + + + The open create read loader identifier + + + + + The open create read write loader identifier + + + + + Memory mapped file type + + + + + create a memory-mapped file that is mapped to an existing file on disk + + + + + create a memory-mapped file that is not mapped to an existing file on disk + + + + + The memory mapped file for viewing a raw file. + + + + + Prevents a default instance of the class from being created. + + + + + Initializes a new instance of the class. + + The loader identifier. + Name of the file. + The access mode. + The type. + The size. + + + + Gets a value indicating whether this instance is open succeed. + + + true if this instance is open succeed; otherwise, false. + + + + + Gets a value indicating whether this is errors. + + + true if errors; otherwise, false. + + + + + Gets the currently mapped memory map file name. + + + + + Gets the stream id. + + + + + increment the ref count. + + + + + decrement the ref count. + + + + + get the ref count. + + + The reference count + + + + + The dispose method closes the memory mapped file. + + + + + Gets the random access viewer. + Create a view that starts at 0 offset (begin) and ends approximately at the end of the memory-mapped file. + + + The file Access. + + + Access to the mapped data + + + + + Gets the random access viewer. + + The offset. The byte at which to start the view. + The size. The size of the view. Specify 0 (zero) to create a view that starts at offset and ends approximately at the end of the memory-mapped file. + The file access + Access to the mapped data + + + + Gets the mapped file information. + + Name of the file. + store the mapped disk file information. + + + + Opens the exist memory mapped file. + + Name of the map. + Name of the local map. + memory mapped file rights + The MMF. + map name + + + + Creates the memory mapped file from file. + + memory map access mode + The file path. + Name of the MMF with Global prefix. + Map name without the Global prefix + A reference of a memory mapped file object + Memory mapped file name + + + + Creates a non persisted memory mapped file. + + Memory mapped file access mode + Name of the map file with the Global prefix. + Name of the map file without the Global prefix + The size. + Memory mapped file object. + Map name + + + + The singleton class tracks the memory mapped files that have been open. + + + + + Prevents a default instance of the class from being created. + + + + + Gets the instance. + + + + + The method disposes the memory mapped file and stops tracking it. + + + The stream id - serves as the key. + + True close the specified memory mapped file even if it's reference to the map; false skip it if the reference count is more than zero. + + + + Gets the random access viewer. + + The identifier. + Name of the file. + if set to true [refresh memory map file]. + The access mode. + The type. + Memory mapped file accessor. + + + + Gets the random access viewer. + + The loader identifier. + Name of the share memory mapped file. + The offset. + The size. + if set to true [refresh memory map file]. + The access mode. + The type. + Memory mapped file accessor. + + + + Determines whether the specified file path is open. + + The file path. + true if open + + + + Gets the errors. + + Name of the file. + Error Message + + + + Remove last errors. Cleans up the last errors for this stream id. + + + The stream id. + + + + + Gets the memory mapped file. + + The loader identifier. + Name of the map. + The access mode. + The type. + The size. + The memory mapped file object + + + + The reader extension methods. + + + + + read a byte, updating the position. + + + The viewer. + + + The start position. + + + The . + + + + + read a short, updating position. + + + The viewer (memory map) + + + The start position. + + + The . + + + + + read double, updating position. + + + The viewer (memory map) + + + The start position. + + + The . + + + + + read an integer, updating the start position + + + The viewer (memory map) + + + The start position. + + + The . + + + + + read a float from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + The . + + + + + read an unsigned short from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + The . + + + + + read an unsigned integer from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + The . + + + + + read a string from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + The . + + + + + Read a number of wide characters, and convert to string. + If there is a '0' in the string, the string length will be adjusted. + + The viewer. + Offset into the view. + Converted string + + + + Read a structure ext, updating the position + + + The viewer. + + + The start position. + + Type of struct + + + The struct which was read + + + + + Reads the previous revision and convert. + + Current Type + Previous Type + The viewer. + The start position. + The object which was read + + + + read an array of bytes from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + The count of bytes to read + + The array + + + + + read an array of bytes from a view, expecting a large data array. + This uses 64 bit items, to cut down Marshalling overheads + + + The viewer (memory map) + + + The start position. + + The count of bytes to read + + The array + + + + + read an array of integer from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + Data stored in integer array + + + + + read an array of unsigned integers from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + Data stored in unsigned integer array + + + + + read an array of bytes from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + The count of values to read. + + + Data stored unsigned integer array + + + + + Reads the doubles ext. + + The viewer. + The start position. + Data stored in double array + + + + Read a set of floats, and return as an array. + + + The viewer. (memory map) + + + The start position. + + + The count of objects to load. + + + The array + + + + + read an list of strings from a view, updating the start position + + + The viewer (memory map) + + + The start position. + + + The strings + + + + + Read struct array, updating the position. + + + The viewer. + + + The start position. + + Type of array element + + + The array + + + + + load a raw file object, updating the start position. + + + The viewer. + + + The function to construct the type. + + + The file version. + + + The start position. + + Type to load + + + The object loaded + + + + + load a raw file object array. + + + The viewer. + + + The file version. + + + The start position. + + Type of data in array + + + The array of objects + + + + + load raw file object extended. + + + The viewer. (memory map) + + + The file version. + + + The start position. + + Type of object to read + + + The object + + + + + The writer extension methods. + + + + + Writes the float. + + The writer. + The value. + The start position. + + + + Writes the double. + + The writer. + The value. + The start position. + + + + Writes the byte. + + The writer. + The value. + The start position. + + + + Writes the bytes. + + The writer. + The value. + The start position. + + + + Writes the short. + + The writer. + The value. + The start position. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Cannot convert device to MS Device!. + + + + + Looks up a localized string similar to File path is empty or null!. + + + + + Looks up a localized string similar to Invalid Accurate mass Type.. + + + + + Looks up a localized string similar to Invalid Barcode Status Type.. + + + + + Looks up a localized string similar to Invalid Device Type.. + + + + + Looks up a localized string similar to The file name is invalid. + + + + + Looks up a localized string similar to Invalid Instrument type.. + + + + + Looks up a localized string similar to Invalid instrument type index.. + + + + + Looks up a localized string similar to Invalid Packet Type.. + + + + + Looks up a localized string similar to Invalid Sample Type.. + + + + + Looks up a localized string similar to Invalid tolerance unit.. + + + + + Looks up a localized string similar to Invalid Virtual Device Type. + + + + + Looks up a localized string similar to Cannot map a zero-length file.. + + + + + Looks up a localized string similar to Missing instrument id information. + + + + + Looks up a localized string similar to Missing raw file information.. + + + + + Looks up a localized string similar to No instrument selected.. + + + + + Looks up a localized string similar to This is not MS device.. + + + + + Looks up a localized string similar to No open raw file.. + + + + + Looks up a localized string similar to Null chromatogram settings argument. + + + + + Looks up a localized string similar to Null file header argument.. + + + + + Looks up a localized string similar to Null instrument id argument.. + + + + + Looks up a localized string similar to Null run header returned from RawFileReader. + + + + + Looks up a localized string similar to Null run header argument.. + + + + + Looks up a localized string similar to Null scan index argument.. + + + + + Looks up a localized string similar to Null sequence row argument.. + + + + + Looks up a localized string similar to Null UV scan index argument.. + + + + + Looks up a localized string similar to RawFileReaderTracer. + + + + + Local version of ScanDependentsDetails + + + + + Gets or sets the index of the scan. + + + The index of the scan. + + + + + Gets the filter string. + + + The filter string. + + + + + Gets or sets the precursor array. + + + The precursor mass array. + ] + + + + Gets or sets the isolation width array. + + + The isolation width array. + + + + + Gets or sets the filter data. + + + + + The scan dependents. Provides information about the relationship between + data dependant scans and the scan, whose data triggered the dependant scan. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the type of the raw file instrument. + + + The type of the raw file instrument. + + + + + Gets or sets the scan dependent detail array. + + + The scan dependent detail array. + + + + + Local class to represent a scan header, to satisfy interfaces for Chromatogram generation. + + + + + Gets the Index for the scan + + + + + Gets the Index for the MS scan + + + + + Initializes a new instance of the class. + + + Scan number + + + Index data for scan + + + + + Gets the retention time (start time) of a scan + + + + + Gets the scan's number + + + + + Defines an implementation of "IScanWithSimpleData", + + + + + Gets or sets the scan event. + + + + + Gets or sets the data. + + + + + Class to read data from an SLD file + + + + + Create an ISequenceFileAccess interface to + read data from a sequence (SLD) file + + File to open + Interface to read data from file + + + + Loads a sequence (SLD) file. + + + + + Initializes a new instance of the class. + + Name of the file. + + + + Gets the file header for the sequence + + + + + Gets a value indicating whether the last file operation caused an error + + + + + + Gets the file error state. + + + + + Gets a value indicating whether true if a file was successfully opened. + Inspect "FileError" when false + + + + + Gets additional information about a sequence + + + + + Gets the set of samples in the sequence + + + + + The simple detector chromatogram builder. + Makes chromatograms from devices other than MS + + + + + Initializes a new instance of the class. + + + The device (to create chromatograms from). + + + + + Generate chromatograms for all detectors, except for MS + + Input parameters + first scan in chromatogram + last scan in chromatogram + The Chromatogram + + + + Builds the non MS chromatograms. + + The settings. + The number of chromatograms + The number of scans. + The first scan. + The last scan. + The number of non mass range sum chromatograms. + The mass range array. + The number of mass ranges. + Chromatogram results + + + + read data from scan. + + + The settings. + + + All results data. + + + The wavelength ranges. + + + The wavelength range count. + + + The scan data. + + + The scan index. + + + The scan number. + + + The first scan. + + + + + Builds the channel traces. + UV channels, or analog channels. + + Parameters for the chromatograms. + Table of all chromatogram + The first scan. + The last scan. + + + + For chromatograms which need the scan index data only, fill in the data. + + Parameters for the chromatograms + Table of all chromatogram results + Data in scan + The scan number + The first scan + The number of non mass range sum chromatograms + + + + Convert a channel number into a channel index + which is used to offset into a scan + + Channel type + Channel index (0 to 7), or -1 if not a valid channel + + + + Convert a set of data peaks into signal + + Data to convert + Converted Signal + + + + The chromatogram result (1 point in chromatogram). + + + + + Gets or sets the base peak. + + + + + Gets or sets the intensity. + + + + + Gets or sets a value indicating whether this point is saturated. + + + + + Gets or sets the time. + + + + + Gets or sets the scan number. + + + + + Wrapper class for using IOleStream. + For additional read/write examples see version in "foundation Apps" project. + + + + + Initializes a new instance of the class. + + + The stream. + + + + + read char array from stream. + The stream is "wide characters" (unicode) + + The number of bytes to read from stream. + The stream of bytes into a string + + + + read an array from the stream. + + + The data. + + Thrown when not able to read data + + + + + The auto sampler config. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the tray index. + + + + + Gets or sets the tray name. + + + + + Gets or sets the tray shape. + + + + + Gets or sets the vial index. + + + + + Gets or sets the vials per tray. + + + + + Gets or sets the vials per tray x. + + + + + Gets or sets the vials per tray y. + + + + + Gets the auto sampler configuration struct. + + + + + Loads the specified viewer. + + The viewer. + The data offset. + The file revision. + The number of bytes read + + + + Initializations this instance. + + + + + The error log. + + + + + Initializes a new instance of the class. + + + The loader id. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The run header. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The file revision. + + + The run header. + + + + + Gets the file revision. + + + + + Gets the header file map name. + + + + + Gets the data file map name. + + + + + The get item. + + + The index. + + + The . + + + + + Load (from file). + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + + The number of bytes read + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + True refresh succeed, false otherwise. + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The error log item. + + + + + Gets the retention time. + + + + + Gets the error text. + + + + + Initializes a new instance of the class. + The error is a list of text strings indexed by the retention time. + + + The retention time. + + + The text. + + + + + Compare the current instance's retention time with another object of the same type. + + + The other instance. + + + -1 indicates the RT of the current instance is less than another object, + 0 indicates same, + 1 indicates the RT of the current instance is greater than another object. + + + + The file header. + + + + + Initializes a new instance of the FileHeader class. + Sets default file type to raw file and some other defaults. + + + + + Copy constructor + Initializes a new instance of the FileHeader class to the values of an existing IFileHeader object. + + The IFileHeader object. + + + + Wrap a file header struct. + + File header to wrap. + An object which wraps the given struct. + + + + Creates an initial header file object for file writing (i.e. raw file, sequence file, method file, etc.) + with the specified file type and description. + This method will also initialize the internal fields, such as set the creation/modified date to current date time, + and set the who created/modified to be the person who is currently logged on to the Windows OS. + + File type, i.e. raw file, sequence file, method file, etc. + [Optional] The description about the file. + The file header object. + + + + Gets the type of the file. + + Type of the file. + True the file type is known type; false otherwise. + + + + Gets or sets the format revision of this file. + Note: this does not refer to revisions of the content. + It defines revisions of the binary files structure. + + + + + The is signature valid. + + + The . + + + + + Gets or sets the file description. + + + + + Gets the check sum. + + + + + Gets or sets the number of times modified. + + + The number of times the file has been modified. + + + + + Gets or sets the number of times calibrated. + + + The number of times calibrated. + + + + + Gets or sets the who created id. + + + + + Gets or sets the who created logon. + + + + + Gets or sets the who modified id. + + + + + Gets or sets the who modified logon. + + + + + Gets or sets the file type. + + + + + Gets or sets the creation date. + + + + + Gets or sets the modified date. + + + + + Calculates and updates the checksum for the file header. Will calculate using the header written to the stream of the binary writer. + Requires the header to be previously written to the binary writer stream. + + Binary writer with the written file header + Any errors that occur during calculation + True if successful + + + + Updates the file header checksum. + + The root storage. + Stores the last error information. + True if successful; otherwise false. + + + + Gets the file header struct, only needed internally for writing file header. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Initialize fields and properties, on load. + + + + + Gets the check sum seed. + + Check sum seed value. + + + + Determines whether this is a valid revision. + + True it's a valid file revision; false otherwise. + + + + Test if this may be a valid file but with a newer format. + + true: if the file version > the version complied into of the software that's running. + + + + The resets the checksum in the header to 0. + + + + + The generic data collection. The generic data collection has two parts. The data descriptors and the generic + data. The class creates a memory mapped stream view of the data. + + + + + Initializes a new instance of the class. + + + The loader id. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The data descriptors. + + + + + Initializes a new instance of the class. + + Loader ID + Name of the header map file. + Name of the data map file. + The number data. + The file revision. + + + + Initializes a new instance of the class. + + Due to the fact that some generic data collection's descriptors and data are not stored in contiguous + blocks, we cannot automatically set the memory mapped stream's current position (e.g. the MS device's + Trailer data's descriptor is written before the tune data and the trailer data themselves are written after + the trailer scan events). + + + The loader ID + The number of elements. + The new MMF offset. + + + + Gets the data descriptors. + + + + + Gets the total size of the data collection. In the case where the data descriptors and the + data collections are written in contiguous blocks, the container will have to update its viewer + position because the data entries may not have been read. + + + + + Gets the file revision. + + + + + Gets the header file map name. + It's only meaningful in Generic data. + + + + + Gets the data file map name. + + + + + Gets the number of elements function. + + + + + The method loads the generic collection from file by getting the descriptors and setting + up the structures. + + + The view stream. + + + The starting position of the collection - this is used to create a local memory mapped stream. + + + The number of elements. + + + The number of bytes loaded. + + + + + load data descriptors. + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes loaded. + + + + + The method calls to get an + object for the memory mapped view stream that represents the status log's "blob". It will then + divide the blob into individual status log entries without actually reading in the status log items. + + View into memory map + + + The starting dataOffset of the collection - this is used to create a local memory mapped stream. + + + The number of elements. + + + Thrown if there is a problem getting the binary collectionStreamViewer for the memory mapped view stream. + + + The position after all the records + + + + + remove all data. + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + The descriptor for a generic data item. It contains information + (e.g. label, type, size, item offset, etc) for loading the + data from the raw file. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The label. + + + The data type. + + + The string length or precision. + + + + + Gets the data type. + + + + + Gets a value indicating whether to use scientific notation. + + + + + Gets the size of the data item in bytes. + + + + + Gets the label for the data item. + + + + + Gets the length (for strings) or precision (for floats and doubles). + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The get internal generic data item struct. + + + The . + + + + + The method sets the flag. + + + + + The method sets the size and and the precision/length of the data. + + + + + Defines a method of packing log records into a byte array + + + + + convert data entry to byte array. + + The log entries. + The buffer for storing the log entries in byte array. + The number of log entries do not match the header definitions + + + + convert data entry to byte array. + + The log entries. + The number of log entries do not match the header definitions + the log entries as a byte array + + + + The collection of data descriptors. + + + + + Initializes a new instance of the class. + + + The capacity. + + + + + Gets the total size of the data blob being described. + + + + + Gets the offset from the start of a data block to a specific field + permitting individual fields to be decoded. + + + + + Gets the "all valid" table. + Fields may have optional validity flags (per record) + When that feature is not used, all fields are valid. + This internal array is initialized to "all values valid' + so it does not have to be recreated each scan + + + + + Loads from the specified viewer. + + The viewer. + The data offset. + The file revision. + The number of bytes reader + + + + add an item. + + + The item. + + + + + Calculate the buffer size. (The size of a record). + + + The size of one record. + + + + + The convert data entry to byte array. + + The log entries. + The buffer for storing the log entries in byte array. + The number of log entries do not match the header definitions + + + + convert data entry to byte array. + + The log entries. + The number of log entries do not match the header definitions + + + + The singleton class to calculate data sizes. + + + + + Prevents a default instance of the class from being created. + + + + + Gets the instance. + + + + + The method calculates the of the type size in byes. + + + The type. + + + The count - optional for string types. + + + The size in bytes. + + + Thrown if there is an error calculating size (e.g. the type does not exist). + + + + + Encapsulates the generic value structure that is read from the raw file . + + + + + Initializes a new instance of the class. The value is set + to an empty string. + + + + + Initializes a new instance of the class. + + + The descriptor. + + + The value. + + + + + Gets the value. + + + + + The method returns the string representation of value. For floats and doubles, it uses the + data descriptor's precision value to determine the value format. + + + The representation of value. + + + + + The to string. + + + The if formatted. + + + The . + + + + + The log decoder interface is used to decode values for all generic logs. + + + + + Get the value of a field, with minimal decoding + + offset into map + definition of type + The value as an object + + + + Decipher a value. + + + The data offset. + + + The data descriptor. + + + The value, as an object + + + + + The class encapsulates a blob that contains a list of label value pairs. + This holds information about where to find the binary record. + the records can be "decoded once" similar to a Lazy pattern, and saved in a cache. + + + + + Initializes a new instance of the class. + + + The log reader. + + + The offset. + + + The descriptors. + + + + + Returns all the values, no formatting. + + The values, as the nearest .net type + + + + The method gets the object at the specified index. + + + The index. + + + The object or null if the index exceeds the + number of elements in the collection. + + + + + Returns the value of a specific field. + + Field number + The value, as the nearest .net type + + + + The method checks the cache to see if the label value pairs have been read. If not, it will read them and + use the to decipher them, cache them, and returns them. + + + The of label value pairs. + + + Thrown if the descriptors are empty - there is no way to interpret the blob. + + + + + Test if this is a valid item number. + + + The index of the required item. + + + True if this is a valid item. + + + + + Validate descriptors. + + on null descriptors + + + + + decode which log items are valid. + + + The start position on the view. + + + .// array of valid item flags + + + + + The class that represents the label value pair - normally used in status log entries. + + + + + Initializes a new instance of the class. + + + The label. + + + The value. + + + + + Gets the label. + + + + + Gets the object containing the value. + + + + + The to string. + + + The . + + + + + Decodes values in logs (status logs, tune method logs, etc.) + + + + + Initializes a new instance of the class. + + + The viewer. + + + + + Get the value of a field, with minimal decoding + + offset into map + definition of type + The value as an object + + + + Decipher a value. + + + The data offset. + + + The data descriptor. + + + The value, as an object + + + + + Decode char string. + + + The data offset. + + + The data descriptor. + + + The decoded string + + + + + Decode a wide char string. + + + The data offset. + + + The data descriptor. + + + The decoded string. + + + + + The ion ratio. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The ion ratio test settings + + + + + The ion ratio test info. struct when file rev >=56 + + + + + The ion ratio test 55. struct when file rev less than 56 + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets the Mass to be tested + + + + + Gets the Expected ratio + The ratio of the qualifier ion response to the component ion response. + Range: 0 - 200% + + + + + Gets the Window to determine how accurate the match must be + The ratio must be +/- this percentage. + + + + + The (calibration or QC) level. + + + + + The level info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets replicate data, as saved in a PMD file + + + + + Gets the name for this calibration level + + + + + Gets the amount of calibration compound (usually a concentration) for this level + + + + + Gets the QC test standard: 100 * (yobserved-ypredicted)/ypreditced + + + + + The (NIST) library search constraints. + + + + + The constraints info. + + + + + The individual constraints info. + + + + + Initializes a new instance of the class. + + + + + The individual constraint wrapper, to return data as required interface. + + + + + Initializes a new instance of the class. + + + The info. + + + + + Gets the condition on this element (greater, less or equal to value) + + + + + Gets the comparison value for this element constraint. + Used in a a test as per "ElementCondition" + + + + + Gets the element to constrain + + + + + The ion constraint info. + + + + + The ion constraint info wrapper, to implement the required interface + + + + + Initializes a new instance of the class. + + + The info. + + + + + Gets the method of ion constraint + + + + + Gets the mass to charge ratio of the constraint + + + + + Gets the from value of the constraint + + + + + Gets the To value of the constraint + + + + + Gets the Ion Constraints (see NIST documentation for details) + + + + + Gets the individual element constraints (limits on specific elements) + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets a value indicating whether molecular weight constraint is enabled + + + + + Gets the minimum molecular weight + + + + + Gets the maximum molecular weight + + + + + Gets a value indicating whether name fragment constraint is enabled + + + + + Gets a value indicating whether DB constraint is enabled + + + + + Gets a value indicating whether Fine constraint is enabled + + + + + Gets a value indicating whether EPA (Environmental Protection Agency) constraint is applied + + + + + Gets a value indicating whether NIH (National Institute of Health) constraint is applied + + + + + Gets a value indicating whether TSCA (Toxic Substances Control Act) constraint is applied + + + + + Gets a value indicating whether USP (United States Pharmacopoeia) constraint is applied + + + + + Gets a value indicating whether EINECS (European Inventory of Existing Commercial Chemical Substances) constraint is applied + + + + + Gets a value indicating whether RTECS (Registry of Toxic Effects of Chemical Substances) constraint is applied + + + + + Gets a value indicating whether HODOC (Handbook of Data on Organic Compounds) constraint is applied + + + + + Gets a value indicating whether IR constraint is applied + + + + + Gets a value indicating whether Elements constraint is applied + + + + + Gets the element constraint method (used when ElementsEnabled) + + + + + Gets a value indicating whether Ion Constraints are enabled + + + + + Gets the method of Ion Constraints (used when IonConstraintsEnabled) + + + + + Gets the name fragment constraint + + + + + Gets the Element constraint + + + + + The library search options, as contained in an Xcalibur PMD file. + + + + + The lib search info version 1. + + + + + The (NIST) lib search info. + + + + + Initializes a new instance of the class. + + + + + Load, (from file) + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes loaded. + + + + + Gets the list of libraries to search + + + + + Gets the name of the user library (for append operation) + + + + + Gets the similarity setting for NIST search + + + + + Gets the identity mode for NIST search + + + + + Gets the type of NIST search + + + + + Gets the molecular weight + + + + + Gets a value indicating whether search with Molecular Weight is enabled + + + + + Gets a value indicating whether reverse search is enabled + + + + + Gets a value indicating whether to append to the user library + + + + + Gets the search molecular weight + + + + + Gets the maximum number of reported search hits + + + + + Gets the match factor + + + + + Gets the reverse match factor + + + + + Gets the Probability Percent (match limit) + + + + + Gets a value indicating whether mass defect should be applied + + + + + Gets the mass defect for the low mass + + + + + Gets the mass defect for the High mass + + + + + Gets the mass at which "DefectAtMass1" applies + + + + + Gets the mass at which "DefectAtMass2" applies + + + + + The instrument method. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The method header (not the raw file header). + + + The method file location. + + + + + Gets the file header. + + + + + Gets the method size. + + + + + Gets the original storage name. + + + + + Gets the starting offset. + + + + + Gets or sets the storage descriptions. + + + + + Gets the method info struct, only needed internally for writing raw file. + + + + + Save instrument method file. + + Access to the raw file bytes + + The method file path. + + + Force over write. If true, and file already exists, attempt to delete existing file first. + If false: UnauthorizedAccessException will occur if there is an existing read only file. + + + + + Loads the instrument method from the memory mapped raw file viewer passed in. + + + The viewer. + + + The data offset. + + + The file revision. + + + The . + + + + + Gets the storage description. + + The viewer. + The start position. + The storage description + List of StorageDescription + + + + The save method bytes to file. + + + The map. + + + The offset. + + + The . + + + + + The audit data, from legacy LCQ files. + + + + + Gets or sets the comment. + + + The comment. + + + + + Gets or sets the what changed. + + + + + Gets or sets the time changed. + + + + + Gets the audit data struct. + + + + + Load (from file). + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + The number of bytes read + + + + The audit trail from legacy LCQ files + + + + + Initializes a new instance of the class. + + + + + Gets or sets the audit data info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The auto sampler settings from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The axis parameters, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The chromatogram trace, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Defines a custom report, as in an Xcalibur PMD file + + + + + Determines when a report is active + + + + + Never make report. + + + + + Always make report. + + + + + Report when blank sample. + + + + + Report when calibration sample. + + + + + Report when unknown sample. + + + + + Report when QC or standard. + + + + + The action code. + + + + + Do nothing. + + + + + Run an excel macro. + + + + + Run a program. + + + + + Export only. + + + + + The report export types. + + + + + No export. + + + + + Export as XLS. + + + + + Export as text. + + + + + Export as CSV. + + + + + The export content. + + + + + Do not export + + + + + Export the results. + + + + + Export the quantitation. + + + + + The custom report info. + + + + + Load data + + + The viewer (memory map) + + + The data offset into the map. + + + The file revision. + + + The . + + + + + The GC method, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The ICIS status log, for legacy LCQ files. + + + + + Gets the ICIS status log. + + + The ICIS status log. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The inlet methods, for legacy LCQ files + + + + + Gets the inlet methods info. + + + + + Gets the GC method info. + + + + + Gets the LC method info. + + + + + Gets the auto sampler info. + + + + + Gets the probe info info. + + + + + Gets the syringe info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The instrument method column info, from legacy LCQ files + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The instrument method solvent, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Legacy instrument configuration data (LCQ data system) + + + + + Initializes a new instance of the class. + + + + + Gets the inlet type -- either "ESI" or "APCI" + + + + + Gets the MS Model + + + + + Gets the UV detector model + + + + + Gets the DAD (Diode array detector) model. + + + + + Gets the LC pump model. + + + + + Gets the auto sampler model. + + + + + Gets the AD converter model. + + + + + Gets the MS model number + + + + + Gets the MS serial number. + + + + + Gets the LC pump model number. + + + + + Gets the LC pump serial number. + + + + + Gets the Detector model number (unused now) + + + + + Gets the Detector serial number (unused now) + + + + + Gets the Auto sampler model number + + + + + Gets the Auto sampler serial number + + + + + Gets the External detector channels 1-4 + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Test if the ext detector is in use. + + + The index. + + + true if in use + + + + + The instrument file, from old LCQ + + + + + Gets the audit trail information. + + + + + Gets the instrument configuration. + + + + + Gets the MS method information. + + + + + Gets the real time chromatogram information. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The instrument run info data from legacy LCQ files + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The instrument status log, from legacy LCQ files. + + + + + Gets the instrument status struct info. + + + + + Initializes a new instance of the class. + + + The number of items. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The ITCL settings, for legacy LCQ files. + + + + + Gets the acquisition time. + + + + + Gets the tune method. + + + + + Gets the ITCL procedure. + + + + + Gets the MS segments. + + + + + Gets the variable lists. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The LC detector information + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The LC event, from legacy LCQ files + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The LC method (from legacy LCQ files) + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The LCQ converter. Convert from legacy LCQ format to current raw data. + + + + + LCQs the write Xcalibur trailer header. + + The converted data descriptors + + + + converts The LCQ tune method header to Data Descriptor format. + + + The . + + + + + create xcalibur status log header from LCQ format log. + To generate the trailer extra header for inclusion to the Xcalibur data file. + + if set to true include the auto sampler data. + if set to true include the LC data. + The converted log definition + + + + LCQs the trailer to xcalibur scan event. + + precision for formatting mass + The trailer information. + index into scans + The scan event + + + + Convert boolean value to "on off" and cast to byte. + + + The value. + + + The . + + + + + Converts the LCQ scan event to Xcalibur scan event. + To construct an Xcalibur scan event from a given LCQ scan event + + The LCQ scan event. + The converted event + + + + LCQs the index of the write xcalibur scan. + + The writer. + The trailer information. + The i. + if set to true [has experiment method]. + The offset. + + + + LCQs the index of the write xcalibur UV scan. + + + The writer. + + + The trailer information. + + + The MS analog channels used count. + + + The i. + + + The offset. + + + + + write xcalibur UV channel data. + + + The writer. + + + The UV analog input. + + + The MS analog channels used. + + + The offset. + + + + + Write the xcalibur trailer extra. + + Where the data is written + The trailer information. + Offset into memory map + + + + LCQs the write xcalibur tune data. + + + The writer. + + + The tune data struct. + + + The offset. + + + + + convert byte to zero or one. + + + The byte. + + + either 0 or 1 + + + + + Write the xcalibur status log. + To generate the trailer extra header for inclusion to the Xcalibur data file. + + + The writer. + + + The instrument status structure information. + + + if set to true include the auto sampler data. + + + if set to true include the LC data. + + + Size of the block. + + + The offset. + + + + + encode a status message. + + + The status code. + + + The status strings. + + + The max length. + + + The message as encoded bytes + + + + + The LCQ scan header. + + + + + Gets the trailer struct info. + + + + + Initializes a new instance of the class. + + The number items. + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The LC table, from legacy LCQ files + + + + + Gets the start percent. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The MS dependent data, for legacy LCQ files + + + + + Gets or sets the mode or the largest. + + + + + Gets or sets the index of the largest. + + + + + Initializes a new instance of the class. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The MS method, from legacy LCQ files + + + + + Gets the MS method info. + + + + + Gets the dump value info. + + + + + Gets the fraction collector info. + + + + + Gets the ITCL info. + + + + + Gets the non ITCL info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The MS scan event, from legacy LCQ files + + + + + Gets the MS scan event struct info. + + + + + Gets the MS dependent data info. + + + + + Gets the reactions info. + + + + + Gets the mass ranges info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The MS segment. + + + + + Initializes a new instance of the class. + + + + + Gets the minimum segment time. + minimum segment time (to correct old methods) + On 3/14/96, the min MS Segment time was increased to 0.1 -- compensate while loading + + + The minimum segment time. + + + + + Gets the MS scan events. + + + + + Gets the acquisition time. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The non ITCL data from legacy LCQ files. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the minimum MS run time. + Minimum MS run time (to correct old methods) + + + The minimum MS run time. + + + + + Gets the number segments. + + + The number segments. + + + + + Gets the mass rejects. + + + + + Gets the mass precursors. + + + + + Gets the MS segments. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Force all specified masses to be within the mass range of the instrument + + + + + The old LCQ file. + + + + + Prevents a default instance of the class from being created. + + + + + Initializes a new instance of the class. + + The raw file loader. + raw File Loader + + + + Gets the audit trail information. + + + + + Decodes the old LCQ file. + This object is being converted or read from disk and therefore the data needs + needs to read from either the mapped file or some other mechanism. This function + is only intended for use with old LCQ data files. + + The viewer. + The data offset. + The file revision. + True able to decode the old LCQ file, false otherwise + This is an old file type, the file version is less than 25 + + + + Constructs the scan event segments. + + The LCQ instrument file. + The LCQ tune data. + The mass spec device. + + + + Gets the mass spec analog channels used count. + + if set to true [has experiment method]. + The LCQ instrument file. + The mass spec analog channels used count. + The mass spec analog channels used. + Used count + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The probe info, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time chromatogram information, from legacy LCQ files + + + + + Gets the real time chromatogram info struct info. + + + + + Gets the x axis parameters. + + + + + Gets the y axis parameters. + + + + + Gets the real time chromatogram norm info. + + + + + Gets the real time chromatogram label info. + + + + + Gets the real time chromatogram other info. + + + + + Gets the real time chromatogram style info. + + + + + Gets the chromatogram trace info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time spec information, from legacy LCQ files. + + + + + Gets the real time spec info struct info. + + + + + Gets the x axis parameters. + + + The x axis parameters. + + + + + Gets the y axis parameters. + + + The y axis parameters. + + + + + Gets the z axis parameters. + label offset flag and amount are ignored (they don't apply) + + + The z axis parameters. + + + + + Gets the filter info. + + + + + Gets the real time spectrum normalization info. + + + + + Gets the real time spectrum color info. + + + + + Gets the real time spectrum label info. + + + + + Gets the real time spectrum other info. + + + + + Gets the real time spectrum ranges info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time chromatogram label options from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time chromatogram normalization options for legacy LCQ files. + + + + + Gets or sets a value indicating whether the y axis scale is fixed. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time chromatogram other data, for legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time chromatogram style, for legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time spec color for legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time spec label options. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The Real Time spec normalization settings, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time spec other settings, for legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The real time spec ranges, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The syringe, for legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The temperature table, from legacy LCQ files + + + + + Gets the temp table info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + read temperature table struct. + + + The viewer. + + + The bytes to read. + + + The data offset. + + + The temperature table + + + + + The tune data, from legacy LCQ files. + + + + + Gets the tune data struct info. + + + + + Gets the norm. UNUSED -- RF DAC for normal scan rate + + + + + Gets the AGC. UNUSED -- RF DAC for AGC scan rate + + + + + Gets the high res. UNUSED -- RF DAC for high-res scan rate + + + + + Gets the fast. UNUSED -- RF DAC for fast scan rate + + + + + Gets the vernier. UNUSED -- RF DAC for vernier + + + + + Gets the cal q 1. UNUSED -- RF DAC for static operation at cal q 1 + + + + + Gets the cal q 2. UNUSED -- RF DAC for static operation at cal q 2 + + + + + Gets the norm Resonance ejection amplitude. UNUSED -- Resonance ejection amplitude for normal scan rate + + + + + Gets the AGC REA. UNUSED -- Resonance ejection amplitude for AGC scan rate + + + + + Gets the high res REA. UNUSED -- Resonance ejection amplitude for High Res scan rate + + + + + Gets the fast REA. UNUSED -- Resonance ejection amplitude for Fast scan rate + + + + + Gets the isolation waveform amp. UNUSED -- Isolation waveform amplitude + + + + + Gets the injection RF. UNUSED: Ion injection RF frequency slope and intercept + + + + + Gets the tube cal voltages. UNUSED -- Tube lens calibration voltages. Presented to the user as 2x10 2-d array. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + fix up tune data defaults. + + + The file revision. + + + + + The variable list, from legacy LCQ files. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The Adjustable Scan Rate profile index. + For scans (especially PDA) when the data is only intensity values + and the scan rate (x axis step, such as time, wavelength etc.) between values + is "adjusted" to the rate indicated by the index record. + + + + + Load ASR Profile index data (from file). + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + + The number of bytes read + + + + + Gets or sets the Absorbance Unit's scale. + + + + + Gets the Absorbance Unit's offset. + + + + + Gets the data position. + + + + + Gets a value indicating whether is valid scan. + + + + + Gets the number of packets. + + + + + Gets the time wave length start. + + + + + Gets the time wave length step. + + + + + Gets the wave length end. + + + + + Gets the wave length start. + + + + + The AdjustableScanRate profile packet. + This defines a simple scan type, where the scan data is just an "array of int". + This is used for PDA detector data, where the "intensity" data is absorbance values + The index indicates the start wavelength (wavelength of the first intensity) + and the wavelength step, between readings. + + + + + Initializes a new instance of the class. + + + The viewer. + + offset from start of memory map + + The file format version. + + + The scan index. + + + + + Gets the scan index. + + + + + Gets the segment peaks. + + + + + Gets the indices. + + + + + create packet (scan data). + + + The viewer. + + Offset into memory map + + The file format version. + + The scan number + + The . + + + + + Peak information (can be profile point, centroid etc). + Because a raw file can contain over 100 million profile points + this must be a "struct" not a "class", or we drive the garbage collector wild + and massively degrade performance on large files. + + + + + Initializes a new instance of the struct. + + + The label peak. + + + + + Initializes a new instance of the struct. + With a given mass and intensity. + + + The mass. + + + The intensity. + + + + + Initializes a new instance of the struct. + With a given mass and 0 intensity. + + + The mass. + + + + + Initializes a new instance of the struct. + With a given mass intensity and frequency. + + + The mass. + + + The intensity. + + + The frequency. + + + + + Initializes a new instance of the struct. + With a given mass and frequency. + The "bool" parameter is a performance trick needed in C#. + Since there is already a version with "double, double" adding a third (unused parameter) + creates an overload. + This is more efficient that using the 3 parameter constructor and + passing "0.0" for intensity, as an additional assignment is needed. + This overload is called millions of times from AddZeroPackets + + + The mass. + + + The frequency. + + + The intensity. + + + + + Gets the position. This value must be set by a constructor + + + + + Gets or sets the intensity. + + + + + Gets or sets the options. + + + + + Gets the frequency. Must be set by constitution. + + + + + Gets a value indicating whether this peak is reference or exception. + + + + + Gets a value indicating whether this peak is saturated. + + + + + Copies a set of FT code flags (see usage) + + Data peak value + + + + The high resolution spectrum data packet. + + + + + Initializes a new instance of the class. + + The viewer. + Index of the scan. + The file revision. + if set to true [include reference peaks]. + + + + Gets the scan index. + + + + + Compress the scan to binary format for writing to a raw file + + The segmented scan. + The compressed segmented scans in byte array + segmented Scan + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Converts the specified number index structure. + + The number index structure. + The size of high resolution spectrum type structure. + if set to true [include reference peaks]. + The profile BLOB. + Data for the scan + + + + Map peak options to flag bytes, with a static table + + + The table of bytes for each combination of options + + + + + Expands the profile blob. + + The low mass. + The high mass. + The converted data + + + + The low resolution spectrum data packet. + + + + + + + Initializes a new instance of the class. + + The viewer. + Index of the scan. + The file revision. + + + + Gets the scan index. + + + + + Called when [compress]. + + The segmented scan. + The compressed segmented scans in byte array + segmented Scan + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expands the profile BLOB. + + + The low Mass. + + + The high Mass. + + + The profile data + + + + + The low res spectrum data packet 2. + + + + + Initializes a new instance of the class. + + The viewer. + Index of the scan. + The file revision. + + + + Gets the scan index. + + + + + Called when [compress]. + + The segmented scan. + The compressed segmented scans in byte array + segmented Scan + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Map peak options to flags, with a static table + + + The table of bytes for each combination of options + + + + + Expands the profile BLOB. + + The profile data + + + + The low resolution spectrum data packet 3. + + + + + Initializes a new instance of the class. + + The viewer. + Index of the scan. + The file revision. + + + + Gets the scan index. + + + + + Compresses the low resolution spec data packet #3 segmented scan. + + The segmented scan. + The compressed segmented scans in byte array. + segmented Scan + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expands the profile BLOB. + + The expanded data + + + + Called when [convert]. + + The mass intensity pairs. + The mi start position. + The number PKTS. + The converted data + + + + The low resolution spectrum data packet 4. + + + + + Initializes a new instance of the class. + + The viewer. + The number index structure. How many PROF_INDEX_DATA_PKT structures we have in the spectrum, + note that we have (nNumIndexStructures - 1) scan segments in the spectrum + The file revision. + + + + Gets the scan index. + + + + + Compresses the low resolution spec data packet #4 segmented scan. + + The segmented scan. + The compressed segmented scans in byte array. + segmented Scan + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expands the profile BLOB. + + + The profile data + + + + + Called when [convert]. + + The mass intensity pairs. + The mi start position. + The flags. + The flag start position. + The number PKTS. + Data for the scan + + + + Profile Index Data Packet + + + + + Gets or sets the data position. + Offset into MS scan data + + + The data position. + + + + + Gets the low mass. + + + The low mass. + + + + + Gets the high mass. + + + The high mass. + + + + + Gets the mass tick. + This is the mass step between profile points. + + + The mass tick. + + + + + Gets or sets the number of packets. + + + The number packets. + + + + + Gets or sets the total packets. + + + The total packets. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + The MS Packet interface. + + + + + Gets the label peaks. + + + + + Gets the noise and baselines. + + + + + Gets the debug data for a scan. + + + + + Gets the debug data for a scan. + + + + + The Packet interface. + + + + + Gets the segmented peaks. + + + + + Gets the scan index. + + + + + The label peak information. + Use struct here for performance: + Since there are "many per scan" and "many scans per file" + Over 10 million of these objects can be created per second + when processing raw files, so if "class" is used + This would cause frequent garbage collection, and kills parallel code + + + + + Gets or sets the mass. + + + + + Gets or sets the intensity. + + + + + Gets or sets the resolution. + + + + + Gets or sets the baseline. + + + + + Gets or sets the noise. + + + + + Gets or sets the charge. + + + + + Gets a value indicating whether the peak is an exception. + + + + + Gets a value indicating whether the peak is a reference. + + + + + Gets or sets the flags. + + + + + The class contains label peaks and noise info. + + + + + Initializes a new instance of the class. + + + + + Gets the Centroid peaks. + + + + + Gets or sets a value indicating whether noise has been updated. + + + + + Set the label peaks. + + + The _labelPeaks. + + + + + The set noise info packets. + + + The noise info packets. + + + + + Interpolate noise or baseline value. + + + The current value. + + + The previous value. + + + The current mass. + + + The previous mass. + + + The slope. + + + The interpolated value. + + + + + The update noise. + + + + + The Advanced packet base. + This class defines base features of a mass spectrometry scan format + used by advanced instruments, such as "Linear Trap" or Orbitrap. + These detectors may store much more than just mass and intensity. + They may store both profile and centroid data for the same scans. + Centroid data may have additional fields, such as "resolution". + + + + + Initializes a new instance of the class. + + + The viewer. + + Index to scan to read + Raw file version + + The include ref peaks. + + Defines what optional data should be decoded + + + + Gets the scan index. + + + + + Gets the label peaks. + + + + + Gets the noise and baselines. + + + + + Gets the segment peaks. + + + + + Gets the centroid counts. + + + + + Gets the header. + + + + + Gets a value indicating whether to include ref peaks. + + + + + Gets the profile blob. + + + + + Gets the Debug blob. + + + + + Gets the extended scan data + + + + + Gets the reference peak array. + + + + + Gets the segment peak list. + + + + + Gets a value indicating whether use ft profile sub segment. + + + + + Gets the default feature word. + + + + + Gets a value indicating whether the data has accurate mass centroids. + + + + + Gets or sets a value indicating whether the data has peak widths. + + + + + Gets the packet scan data features. + + + + + Gets the debug data for this scan. + If there is no data, returns an empty array. + + + + + class to define a safe data structure for "no data" + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Class to decode additional data saved with a scan + + + + + Gets the transients + + + + + Gets the data segments + + + + + Debug segment contains sub segments. + Each has a header, followed by a block of data + + + + + Gets the header, which can be ued in an instrument specific way to decode this data + + + + + Gets the data in this segment + + + + + Gets the data from the raw file. + + + + + Initialize this object, to lazy read the data + + + + + + + + Gets a transient from the raw file + + + + + Gets an instrument specific transient header + + + + + Gets the data for this transient + + + + + Gets transient data from the raw file. + + + + + Create a lazy loader for this data + + access to the raw file + offset into the view + Size of the data in 32 bit words. + + + + constructs a class to get extended scan data + + view itto the raw file + offset into the view + length of the data in 32 bit words + + + + Prepare to return charge envelopes and centroid annotations. Call this once and in advance of accessing properties. + + The byte buffer being marked as debug section in the orbitrap scan + offset into view for this data + number of 32 bit words in this data + Returns true on success, false if the data structure doesn't match the demands. Keep in mind that missing APD info is fine. + + + + Compresses the centroid data into packet buffer. + For LT certroid format, there may not be a "full" cetroid data. For any other format: + The assumption of this routine is that the IMsInstrumentData that is passed in does contain + centroid data. The profile information (if any) will be dropped from the writing + in this routine. + + The mass spec instrument data. + The compressed packet in byte array. + + + + Calculates the labels per segment. + + The number segments. + The label peaks. + The mass ranges. + The centroid segments counter. + + + + Copies the centroid to packet buffer. + + The centroid segments counter. + The number segments. + The centroid peaks. + The bytes. + The data offset. + The number of bytes copied to the packet buffer. + + + + Copies the labels to packet buffer. + + The number label peaks. + The bytes. + The data offset. + The features. + if set to true [has widths]. + The widths. + The number of bytes copied to the packet buffer. + + + + Copies the mass ranges to packet buffer. + + The mass ranges. + The bytes. + The start position. + The number of bytes copied to the packet buffer. + + + + Copies the noise information to packet buffer. + + The number noise packets. + The noise data. + The packet buffer. + The start position. + The number of bytes copied to the packet buffer + + + + Copies the packet header to packet buffer. + + The packet header information. + The bytes. + The start position. + The number of bytes copied to the packet buffer. + + + + Creates an empty segmented scan object. + + An empty segmented scan with one profile point with zero values. + + + + Creates the packet buffer. + + The number segments. + The packet header information. + A byte array for storing packet data. + + + + Initializes the packet header. + + The number segments. + The number label peaks. + The number centroid data. + The number noise packets. + The total profile points. + The total sub segments. + if set to true [has widths]. + Default feature word. + Size of profile sub-segment struct - FT Profile is 12 and LT Profile is 8 + The packet header struct object. + + + + Extracts the labels information. + + The label peaks. + if set to true [has widths]. + The features. + The widths. + true if this is detected as MRTOF data (has saturated flags) + + + + Gets the coefficient values. + + The scan event. + The coefficient value 0. + The coefficient value 1. + The coefficient value 2. + The coefficient value 3. + + + + Gets the label peaks. + + The centroid data. + if set to true [has widths]. + The label peaks. + + + + The method reads the centroid "blob" and transforms them to objects. + + + + + create default flag set, from the packed bits. + + + The default flags (bit fields). + + + A DataPeak which has been initialized with the default peak flags + + + + + apply flags to peak. + + + The feature. + + + The limit. + + + The centroid peaks. + + + The refs found so far. + + + The is ref peak. + + + The (updated) number of reference peaks found + + + + + The method checks the flags in the default + feature word to determine if we should + continue processing label data. + + + True to continue processing. + + + + + The method converts a set of centroid structures to label peaks. + + + The centroid structures count. + + + The blob index. + + + The label peaks. + + index for this segment in returned data + + The default charge state. + + + The default flags. + + + The resolution index. + + + The . + + + + + The method converts a set of centroid structures to label peaks. + + + The centroid structures count. + + + The blob index. + + + The label peaks. + + index for this segment in returned data + + The default charge state. + + + The default flags. + + + The resolution index. + + + The . + + + + + Count the total number of peaks in all segments + + total number of peaks + + + + The expand label peaks - the label peak structure is actually the + Centroid structure. If this is a profile packet type, the centroid data + peaks are stored in the object. + + + + + The method sets flags. + + + The feature. + + + The flags. + + + True if the feature is a reference or exception. + + + + + The method sets the flags and the charge state. + + + The feature. + + + The flags. + + + nThe charge state. + + + + + The FT centroid packet. + + + + + Initializes a new instance of the class. + + The viewer. + Index to the scan + Raw file revision + The include ref peaks. + True if noise and baseline data is required + + + + The FTMS profile packet. + + + + + The half zero packets. + + + + + Initializes a new instance of the class. + + + The viewer. + + Index to scam + + The mass calibrators. + + Raw file version + + The include ref peaks. + + True if noise and baseline data is required + + Thrown if not enough mass calibrators was passed. + + + + + The create data peak delegate is used to convert from un-calibrated data + to calibrated mass/intensity values + + + The mass offset. + + The frequency + The mass converted peak + + + + Gets the segment peaks. + + + + + Compresses the FT Profiles. + The following algorithm assumes that: + - The packet buffer is not compressed (ALL packets in the DataPeak buffer match one in the packet buffer). + - Each segment contains exactly one sub segment which in turn contains all data points of this segment. + - The position of a DataPeak and a packet share the same unit (mass), i.e. no conversion (e.g. mass to frequency) is necessary. + - The low mass of the segment's mass range is == the base abscissa of the segment. + - The position of the first packet in the mass range == base abscissa + 1 * abscissa spacing. + + This is true with Endeavor spectra (up to now, at least) but not with spectra from + Jupiter (does compression, stores frequencies, multiple sub segments). + Therefore this function must be re-implemented in the FT_PROF packet class. + + The mass spec instrument data. + The compressed packet in byte array. + Compress Profile + + + + add zeros with correction for out of order mass + + + The calibrated mass delegate. + + + The base abscissa. + + + The abscissa spacing. + + + The data peaks. + + + The start packet index. + + + The mass offset. + + + The min mass. + + + The frequency. + + + The end packet. + + + The mass of the last zero + + + + + Computes the profile points. + + The sub segments counter. + The comp buffer profile sub segments. + The segment's sub segment profile points counter. + The profile segment information. + The frequencies. + The profile sub segments. + Start index of the profile packet. + The intensities. + The comp profile points. + + + + Copies the FT profile to packet buffer. + + The total profile points. + The sub segments counter. + The comp buffer profile sub segments. + The comp profile points. + The profile segment information. + The bytes. + The data offset. + The number of bytes copied to the packet buffer. + + + + Ensure that as zero pad values are added, the mass increases. + + Minimum mass: The Mass of last accepted peak, or zero + New value for minimum mass + + + + Initializes the profile segment information. + + The segment's sub segment profile points counter. + Index of the segment. + The profile segment information. + The number sub segments. + The frequencies. + + + + The method adds zero packets. + + + Delegate to create a mass from the peak index, using calibration data + + + The base abscissa (start frequency) + + + The abscissa (frequency) spacing between samples + + + The data peaks. + + + The start packet index. + + + The end packet index. + + Mass offset of the profile segment + + minimum valid mass, so that masses are not added out of order + + The is appending. + + + The . + + + + + Creates the data peak. + + The mass offset. + The frequency + The (frequency to mass) converted peak + + + + Creates the data peak without coefficient 3. + + The mass offset. + The frequency + The (frequency to mass) converted peak + + + + Expand the profile blob. + + + + + flag reference peaks with "reference" or "exception", where the profile is part of + an identified reference. + + + The data peaks. + + + The reference peak. + + + The start peak index. + + + The number of data peaks. + + + + + The method processes the sub-segments. + + Delegate to create a peak + + The segment. + + + The blob index. + + + The segment index. + + + The data peaks. + + + The reference peak index. + + Minimum mass (or last mass processed) to prevent out of order data + + Item1: The mass offset of the last sub-segment. Item2: The profile index after the last added value + Item3 the updated minMass + Item4: the updated reference peak index + + + + + The Linear Trap centroid packet. + + + + + Initializes a new instance of the class. + + + The viewer. + + + The index. + + + The file revision. + + + The include ref peaks. + + + The packet scan data features. + + + + + Gets the segmented peaks. retrieve a DataPeak from the profile packet buffer. + + + + + The Linear Trap profile packet. + + + + + Initializes a new instance of the class. + + The viewer. + index to scan whose data is needed + Raw file version + The include ref peaks. + True if noise and baseline data is required + + + + Gets the segmented peaks. retrieve a DataPeak from the profile packet buffer. + + + + + Copies the lt profile to packet buffer. + + The total profile points. + The segmented profile points counter. + The profile segment information. + The bytes. + The data offset. + The comp profile sub segments number words. + The comp profile points. + The number of bytes copied to the packet buffer. + + + + Compresses the LT Profiles. + The following algorithm assumes that: + - The packet buffer is not compressed (ALL packets in the DataPeak buffer match one in the packet buffer). + - Each segment contains exactly one sub segment which in turn contains all data points of this segment. + - The position of a DataPeak and a packet share the same unit (mass), i.e. no conversion (e.g. mass to frequency) is necessary. + - The low mass of the segment's mass range is == the base abscissa of the segment. + - The position of the first packet in the mass range == base abscissa + 1 * abscissa spacing. + + This is true with Endeavor spectra (up to now, at least) but not with spectra from + Jupiter (does compression, stores frequencies, multiple sub segments). + Therefore this function must be re-implemented in the LT_PROF packet class. + + The mass spec instrument data. + The compressed packet in byte array. + Compress Profile + + + + Expands the profile data. + + + + + The profile sub-segment. + + + + + Gets or sets the profile points. + + + + + Gets or sets the mass offset. + + + + + Initializes a new instance of the class. + Create a sub-segment from data read from raw file + + + Number of profile points + + + Segment mass offset + + + + + The packet constants. + + + + + The number of zero intensity packets to restore depends + on the smoothing limits in Xcalibur (currently 15). + + + + + Helper functions for peak packet types, such as: + identifying profile versus centroid scans + testing if label data exists + + + + + Helper functions for identifying profile versus centroid scans + + Type of the packet. + Additional flags about the packet type + True if this is a centroid scan + + + + Determines whether [has label peaks]. + + Type of the packet. + true if the scan has label peaks + + + + The channel UV packet. (one or more channels of UV data) + + + + + Initializes a new instance of the class. + + The viewer. + The file revision. + Index of the scan. + The channel number. + + + + Gets the index. + + + The index. + + + + + Gets the segmented peaks. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expands the profile BLOB. + + The index. + The data for the scan + + + + The MS analog packet. + + + + + Initializes a new instance of the class. + + The viewer. + The file revision. + Index of the scan. + The channel number. + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets the segmented peaks. + + + + + Gets the scan index. + + + + + Expands the profile BLOB. + + The short wave. + The long wave. + Data for the scan + + + + Profile spectrum packet + + + + + Initializes a new instance of the class. + + + The viewer. + + + The scan index. + + + The file revision. + + + + + Gets the scan index. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expand the profile blob. + + + The expanded data + + + + + The profile spectrum packet type 2. + + + + + Initializes a new instance of the class. + + The viewer. + Index to scan who's data is needed + The file revision. + + + + Gets the scan index. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expands the profile BLOB. + + The profile data + + + + The profile spectrum packet 3. + + + + + Initializes a new instance of the class. + + The viewer. + Index to scan whose data is needed + The file revision. + + + + Gets the scan index. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Expands the profile BLOB. + + The expanded data + + + + The segment data. + + + + + Gets or sets the data peaks. + + + + + Gets or sets the mass range. + + + + + find peak position. + + + The mass. + + + The index of the mass + + + + + Low resolution data never has noise peaks, label data etc. + Handle this in a base object + + + + + Gets or sets the lazy segment peaks. + + + + + Initializes a new instance of the class. + + + + + Gets the label peaks. + + + + + Gets the debug data for a scan. + Always empty for simple packets + + + + + Gets the debug data for a scan. + Always empty for simple packets + + + + + Gets the noise and baselines. + + + + + Gets the segmented peaks. + + + + + The standard accuracy packet. + + + + + Initializes a new instance of the class. + + The viewer. + Index of the scan. + The file revision. + if set to true [include reference peaks]. + + + + Gets the scan index. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Converts the specified number index structure. + + The number index structure. + The size of high resolution spectrum type structure. + mass calibration data + The profile blob. + Data for the scan + + + + Expands the profile blob. + + The low mass. + The high mass. + The converted data + + + + The xcalibur display (peak labeling) flags. + + + + + label with retention time. + + + + + label with scan number. + + + + + The label with area. + + + + + label with base peak. + + + + + label with height. + + + + + label with internal standard response. + + + + + label with signal to noise. + + + + + label with saturation. + + + + + label should be boxed. + + + + + label should be rotated. + + + + + The peak display options (as used in PMD files). + + + + + The peak options info. + + + + + Initializes a new instance of the class. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets a value which extends (display) width so that peak is shown "not at edge" + + + + + Gets a value indicating whether to label peaks with RT + + + + + Gets a value indicating whether to label peaks with scan number + + + + + Gets a value indicating whether to label peaks with area + + + + + Gets a value indicating whether to label peaks with base peak + + + + + Gets a value indicating whether to label peaks with height + + + + + Gets a value indicating whether to label peaks with internal standard response + + + + + Gets a value indicating whether to label peaks with signal to noise + + + + + Gets a value indicating whether to label peaks with saturation + + + + + Gets a value indicating whether to rotate peak label text + + + + + Gets a value indicating whether to draw a box around peak labels + + + + + Defines the peak purity settings, as used in an Xcalibur PMD. + + + + + The peak purity info. + + + + + Initializes a new instance of the class. + + + + + Load (from file) + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes loaded + + + + + Gets the % of the detected baseline for which we want to compute PeakPurity + + + + + Gets a value indicating whether we want to compute Peak Purity + + + + + Gets a value indicating whether we want to use + the enclosed wavelength range, not the total scan + + + + + Gets the high limit of the scan over which to compute + + + + + Gets the low limit of the scan over which to compute + + + + + Gets the max of a scan must be greater than this to be included + + + + + Class to import PMD file Options + + + + + Gets a value indicating whether the standards are internal or external. + + + + + Gets a value indicating whether calibration is performed on concentration or amount + + + + + Gets a value determining how void time is calculated. + + + + + Gets a value determining whether amounts or concentrations are reported. + + + + + Gets a value determining how chromatography was performed. + + + + + Gets a value indicating whether outliers (on a cal curve) should be rejected. + + + + + Gets the added time of void volume, where void time is set to "Value" + + + + + Gets the permitted % deviation from an expected standard amount. + + + + + Gets the search window for the expected time of a peak. + + + + + Gets the minimum number of expected scans in a baseline + Genesis: MinScansInBaseline + + + + + Gets a scale factor for the noise level in chromatographic peaks. + + + + + Gets the limit on baseline noise + + + + + Gets the background width (scans) + + + + + Gets the baseline noise rejection factor + + + + + Gets a value indicating whether the "alternate Percent RDS calculation" should be performed. + + + + + Gets a value indicating whether there was a "manual change" to calibration levels. + + + + + Read the table of dilution levels + + The dilution levels + + + + Gets a copy of the dilution target component factors table + + The dilution target component factors table + + + + Gets the low intensity cutoff + + + + + The options version 1. + + + + + The options version 12. + + + + + The options. + + + + + The (calibration) level info. + + + + + Gets or sets the base amount. + + + + + Gets or sets the test percent. + + + + + Gets or sets the level name + + + + + The target component factor. + + + + + Gets or sets the base amount. + + + + + Gets or sets the target component name. + + + + + Load (from file) + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes loaded. + + + + + Class to import PMD file "standard reports" + + + + + The standard report info version 1. + + + + + Current structure for standard report data + + + + + Load (from file) + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes read + + + + + Gets a value indicating whether the Analysis Unknown report is needed + + + + + Gets a value indicating whether the Component Unknown report is needed + + + + + Gets a value indicating whether the Method Unknown report is needed + + + + + Gets a value indicating whether the Log Unknown report is needed + + + + + Gets a value indicating whether the Analysis Calibration report is needed + + + + + Gets a value indicating whether the Component Calibration report is needed + + + + + Gets a value indicating whether the Method Calibration report is needed + + + + + Gets a value indicating whether the Log Calibration report is needed + + + + + Gets a value indicating whether the Analysis QC report is needed + + + + + Gets a value indicating whether the Component QC report is needed + + + + + Gets a value indicating whether the Method QC report is needed + + + + + Gets a value indicating whether the Log QC report is needed + + + + + Gets a value indicating whether the Analysis Other report is needed + + + + + Gets a value indicating whether the Component Other report is needed + + + + + Gets a value indicating whether the Method Other report is needed + + + + + Gets a value indicating whether the Log Other report is needed + + + + + Gets a value indicating whether the Sample Information report is needed + + + + + Gets a value indicating whether the Run Information report is needed + + + + + Gets a value indicating whether the Chromatogram report is needed + + + + + Gets a value indicating whether the PeakComponent report is needed + + + + + Gets a value indicating whether the Tune report is needed + + + + + Gets a value indicating whether the Experiment report is needed + + + + + Gets a value indicating whether the Processing report is needed + + + + + Gets a value indicating whether the Status report is needed + + + + + Gets a value indicating whether the Error report is needed + + + + + Gets a value indicating whether the Audit report is needed + + + + + Gets a value indicating whether the Open Access report is needed + + + + + Gets a value indicating which of the two types of chromatogram analysis report is needed. + + + + + Gets a value indicating whether the Survey report is needed + + + + + Gets a value indicating whether to include a signature line in reports + + + + + Represent a "program" to be called (as part of reporting) from an Xcalibur PMD file + + + + + The program info. + + + + + Load data (from file). + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes read + + + + + Gets the name of the program + + + + + Gets parameters to the program + + + + + Gets the action of this program (such as run exe, or export) + + + + + Gets the file save format of the export + + + + + Gets a value indicating whether report is enabled + + + + + Gets a value indicating whether report is enabled for standards + + + + + Gets a value indicating whether report is enabled for QCs + + + + + Gets a value indicating whether report is enabled for Unknowns + + + + + Gets a value indicating whether report is enabled for Other sample types + + + + + Gets a value indicating whether to synchronize this action. + If false, other programs may be run in parallel with this. + + + + + The qualitative peak detection settings from a processing method. + + + + + The peak detection info version 1. + + + + + The peak detection info version 12. + + + + + The peak detection info version 34. + + + + + The peak detection info version 42. + + + + + The peak detection info version 43. + + + + + The peak detection info version 44. + + + + + The peak detection info. + + + + + The falcon event. Structure for a single event + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Initializes a new instance of the class. + + + + + Gets the initial events. + + + The events + + + + + Gets the component name + + + + + Gets or sets the mass ranges info. + + + + + Gets the scan filter, as an interface. + This same data is available in string form + in the ChromatogramSettings property + + + + + Gets or sets the mass ranges 2. + + + + + Gets or sets the falcon events. + + + + + Gets a value indicating whether peak detection is enabled. + Note: This property is not used in product "Xcalibur" + + + + + Gets the number of masses required to maximize + + + + + Gets the percentage of masses which must maximize + + + + + Gets the minimum peak separation (time) for Mass-Maximizing detection + + + + + Gets the number of scans in the max-masses window + + + + + Gets the box filter width for Mass-Maximizing detection + + + + + Gets the number of scans averaged for a background + + + + + Gets the number of smoothing points, for background analysis + This setting is common to all integrators + + + + + Gets the width of display window for the peak (in seconds) + This is for presentation only + + + + + Gets a value indicating whether peak limits are enabled + + + + + Gets a value indicating whether to Select top peak by area or height + + + + + Gets the number of "top peaks" to select + + + + + Gets a value indicating whether "relative peak height threshold" is enabled + + + + + Gets the percent of the largest peak, which is used for filtering + peak detection results, when "IsRelativePeakEnabled" + + + + + Gets a the "percent of component peak" (limit) + Only valid when PeakPercent is set to PercentOfComponentPeak + + + + + Gets a value indicating how peak percentages are specified + (unused in product Xcalibur) + + + + + Gets the Algorithm to use (Genesis, ICIS etc.) + + + + + Gets or sets the mass options. + + + + + Gets Number of decimals used in defining mass values + + + + + Gets tolerance used for mass + + + + + Gets units of mass tolerance + + + + + convert LCQ tolerance units. + + + The to convert. + + + The converted units + + + + + Gets the (Avalon) integrator events + + + + + Gets the number of scans in the baseline window. + Each scan is checked to see if it should be considered a baseline scan. + This is determined by looking at a number of scans (BaselineWindow) before + and after the a data point. If it is the lowest point in the group it will be + marked as a "baseline" point. + Range: 1 - 500 + Default: 40 + + + + + Gets the area noise factor. + + + + + Gets the peak noise factor. + + + + + Gets a value indicating whether to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the tailing factor. + + + + + Gets the minimum peak width. + + + + + Gets the multiplet resolution. + + + + + Gets the area scan window. + + + + + Gets the area tail extension. + + + + + Gets a value indicating whether noise is calculated using an RMS method + + + + + Gets a value which indicates how the ICIS peak detector determines which signals are noise. + The selected points can determine a noise level, or be fed into an RMS calculator, + depending on the RMS setting. + + + + + Gets the settings for the ICIS integrator + + + + + Gets a value indicating whether a peak's width (the tail) must be constrained. + This flag allows you to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the width of a typical peak in seconds. + This controls the minimum width that a peak is expected to have + if valley detection is enabled. + Integrator converts this to expectedPeakHalfWidth (minutes) by dividing by 120. + With valley detection enabled, + any valley points nearer than the expectedPeakHalfWidth (which is [expected width]/2) + to the top of the peak are ignored. + If a valley point is found outside the expected peak width, + Genesis terminates the peak at that point. + Genesis always terminates a peak when the signal reaches the baseline, + independent of the value set for the expectedPeakHalfWidth. + + + + + Gets a constraint on peak height. + The percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the minimum acceptable signal to noise of a peak. + Genesis ignores all chromatogram peaks that have signal-to-noise values + that are less than the S/N Threshold value + + + + + Gets the peak tailing factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the is true. + The valid range is 0.5 through 9.0. + + + + + Gets a value indicating whether valley detection is performed. + This parameter must be set to true when performing base to base integration + + + + + Gets the Peak Signal ToNoise Ratio Cutoff. + The peak edge is set to values below this defined S/N. + This test assumes an edge of a peak is found when the baseline adjusted height of the edge is less than + the ratio of the baseline adjusted apex height and the peak S/N cutoff ratio. + If the S/N at the apex is 500 and the peak S/N cutoff value is 200, + Genesis defines the right and left edges of the peak when the S/N reaches a value less than 200. + Range: 50.0 to 10000.0. + Technical equation:if height < (1/PeakSignalToNoiseRatioCutoff)*height(apex) => valley here + + + + + Gets the multiplier of the valley bottom + that the peak trace can rise above a baseline (before or after the peak). + If the trace exceeds ValleyThreshold, + Genesis applies valley detection peak integration criteria. + This method drops a vertical line from the apex of the valley between unresolved + peaks to the baseline. + The intersection of the vertical line and the baseline defines the end of the first + peak and the beginning of the second peak. + This test is applied to both the left and right edges of the peak. + The ValleyThreshold criteria is useful for integrating peaks with long tails. + Useful range: 1.001 to 1.5 + Note: Appears on product UI converted from factor to percentage as "Rise percentage". + For example: 1.1 = 10% + Code tests similar to the following: + if ((currentSignal-baseline) > ((valleyBottom-baseline) * ValleyThreshold)) + { + side of peak has bottomed out, and risen above minimum + } + + + + + + Gets or the S/N range is 1.0 to 100.0. for valley detection. + Technical equation:height(here +/- VALLEY_WIDTH) > ValleyDepth*SNR+height(here) => valley here + + + + + Gets a value indicating whether to enable RMS noise calculation. + If not set, noise is calculated peak to peak. + It is set by default. + + + + + Gets a noise limit, where the code stops attempting to find a better baseline. + controls how the baseline is drawn in the noise data. + The higher the baseline noise tolerance value, + the higher the baseline is drawn through the noise data. + The valid range is 0.0 to 1.0. + + + + + Gets the minimum number of scans that Genesis uses to calculate a baseline. + A larger number includes more data in determining an averaged baseline. + The valid range is 2 to 100. + + + + + Gets a factor which controls the width of the RMS noise band above and below the peak detection baseline + and is applied to the raw RMS noise values to raise the effective RMS noise during peak detection. + The left and right peak boundaries are assigned above the noise and, therefore, + closer to the peak apex value in minutes. + This action effectively raises the peak integration baseline above the RMS noise level. + Range: 0.1 to 10.0. + Default: 2.0. + + + + + Gets the number of minutes between background scan recalculations. + Baseline is refitted each time this interval elapses. + + + + + Gets a limit for the "baseline signal to noise ratio". + A peak is considered ended if the following condition is met: + height <= (BaseNoise * BaseSignalToNoiseRatio)) + Where BaseNoise is the calculated noise on the fitted baseline, + and height is the height above baseline. + + + + + Gets the minimum acceptable percentage of the largest peak. + Do not return peaks which have a height less than this % of the highest peak above baseline. + + + + + Gets a value indicating whether filtering of peaks is by relative signal height + + + + + Gets or sets the options. + + + + + Gets the settings for the Genesis integrator + Note: This property is under review. + May return an alternative interface + + + + + Gets the settings for creating a chromatogram + + + + + Gets the scan filter. + This determines which scans are included in the chromatogram. + + + + + Gets the chromatogram settings. + This defines how data for a chromatogram point is constructed from a scan. + + + + + Convert mass ranges. + + + The mass ranges info. + + + The converted ranges. + + + + + Gets the chromatogram settings + When there is a trace operator set, + This defines how data for a chromatogram point is constructed from a scan for the chromatogram + to be added or subtracted. + + + + + Gets the device type. + This defines which data stream within the raw file is used. + + + + + Gets the trace operator. + If the operator is not "None" then a second chromatogram can be added to or subtracted from the first. + + + + + Gets or sets the filter string. + + + + + Gets the manual noise range settings + + + + + Gets a value indicating whether manual noise should be used + + + + + Gets the manual noise region (time range in minutes) + + + + + Gets settings for the maximizing masses algorithm + Note: This algorithm is not used by product "Xcalibur" + + + + + Gets settings to limit (filter) the list of returned peaks + after integration + + + + + Gets the time range, over which qualitative processing is done. + Only peaks detected within this range are processed further + (for example, library searched) + + + + + Gets the manual noise region (intensity range) + These values are not used by Xcalibur + + + + + + + + read from file, and give read access to all settings in "component" in a PMD file. + Organizes the many fields into groups (interfaces) + + + + + The xcalibur component type. + + + + + All types. + + + + + Target compound. + + + + + Internal standard. + + + + + Undefined. Component not defined + + + + + The retention time reference. + + + + + Surrogate component. + + + + + The response index. Determines if peak height or area is + used for the peak's response. + + + + + Use area. + + + + + Use height. + + + + + The origin index. Defines how calibration curve origin is used. + + + + + Ignore the origin. + + + + + Force through origin. + + + + + Include (extra point) at origin. + + + + + The calibration curve regression index. + + + + + Use first order fit. + + + + + Use second order fit. + + + + + Use first order log-log fit. + + + + + Use second order log-log fit. + + + + + Use average response factor fit. + + + + + Use point to point fit. + + + + + Use cubic spline fit. + + + + + locally weighted regression + + + + + The component info. + + + + + The component info version 5. + + + + + The component info version 4. + + + + + The component info version 3. + + + + + The component info version 2. + + + + + The component info version 1. + + + + + The mass intensity pair. + + + + + Gets the (Avalon) integrator events + + + + + Gets mass tolerance for this component + + + + + load from file + + + The viewer. + + + The data offset. + + + The file revision. + + + The offset into view after load + + Method using Surrogate + + + + + read calibration and qc levels. + + + The viewer. + + + The file revision. + + + The start position. + + + The position after reading + + + + + Gets or sets the falcon events. + + + + + Gets or sets the internal standard units. + + + + + Gets the retention time reference component. + Adjust the retention time, using this component as a reference + + + + + Gets the name of this component + + + + + Gets or sets the filter string. + + + + + Gets or sets the scan filter. + + + + + Gets a value indicating whether manual noise should be used + + + + + Gets the manual noise region (time range in minutes) + + + + + Gets the manual noise region (intensity range) + These values are not used by Xcalibur + + + + + Gets the number of scans in the baseline window. + Each scan is checked to see if it should be considered a baseline scan. + This is determined by looking at a number of scans (BaselineWindow) before + and after the a data point. If it is the lowest point in the group it will be + marked as a "baseline" point. + Range: 1 - 500 + Default: 40 + + + + + Gets a noise level multiplier. + This determines the peak edge after the location of the possible peak, + allowing the peak to narrow or broaden without affecting the baseline. + Range: 1 - 500 + Default multiplier: 5 + + + + + Gets a noise level multiplier (a minimum S/N ratio). + This determines the potential peak signal threshold. + Range: 1 - 1000 + Default multiplier: 10 + + + + + Gets a value indicating whether to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the Tailing Factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the ConstrainPeak is true. + The valid range is 0.5 through 9.0. + + + + + Gets the minimum number of scans required in a peak. + Range: 0 to 100. + Default: 3. + + + + + Gets the minimum separation in scans between the apexes of two potential peaks. + This is a criterion to determine if two peaks are resolved. + Enter a larger number in a noisy environment when the signal is bouncing around. + Range: 1 to 500. + Default: 10 scans. + + + + + Gets the number of scans on each side of the peak apex to be allowed. + Range: 0 to 100. + Default: 0 scans. + 0 specifies that all scans from peak-start to peak-end are to be included in the area integration. + + + + + Gets the number of scans past the peak endpoint to use in averaging the intensity. + Range: 0 to 100. + Default: 5 scans. + + + + + Gets a value indicating whether noise is calculated using an RMS method + + + + + Gets an value which indicates how the ICIS peak detector determines which signals are noise. + The selected points can determine a noise level, or be fed into an RMS calculator, + depending on the RMS setting. + + + + + Gets settings for the ICIS peak integrator + + + + + Gets a value indicating whether a peak's width (the tail) must be constrained. + This flag allows you to constrain the peak width of a detected peak (remove tailing) + width is then restricted by specifying a peak height threshold and a tailing factor. + + + + + Gets the width of a typical peak in seconds. + This controls the minimum width that a peak is expected to have + if valley detection is enabled. + Integrator converts this to expectedPeakHalfWidth (minutes) by dividing by 120. + With valley detection enabled, + any valley points nearer than the expectedPeakHalfWidth (which is [expected width]/2) + to the top of the peak are ignored. + If a valley point is found outside the expected peak width, + Genesis terminates the peak at that point. + Genesis always terminates a peak when the signal reaches the baseline, + independent of the value set for the expectedPeakHalfWidth. + + + + + Gets a constraint on peak height. + The percent of the total peak height (100%) that a signal needs to be above the baseline + before integration is turned on or off. + This applies only when the ConstrainPeak is true. + The valid range is 0.0 to 100.0%. + + + + + Gets the minimum acceptable signal to noise of a peak. + Genesis ignores all chromatogram peaks that have signal-to-noise values + that are less than the S/N Threshold value + + + + + Gets the peak tailing factor. + This controls how Genesis integrates the tail of a peak. + This factor is the maximum ratio of the trailing edge to the leading side of a constrained peak. + This applies only when the is true. + The valid range is 0.5 through 9.0. + + + + + Gets a value indicating whether valley detection is performed. + This parameter must be set to true when performing base to base integration + + + + + Gets the Peak Signal ToNoise Ratio Cutoff. + The peak edge is set to values below this defined S/N. + This test assumes an edge of a peak is found when the baseline adjusted height of the edge is less than + the ratio of the baseline adjusted apex height and the peak S/N cutoff ratio. + If the S/N at the apex is 500 and the peak S/N cutoff value is 200, + Genesis defines the right and left edges of the peak when the S/N reaches a value less than 200. + Range: 50.0 to 10000.0. + Technical equation:if height < (1/PeakSignalToNoiseRatioCutoff)*height(apex) => valley here + + + + + Gets the multiplier of the valley bottom + that the peak trace can rise above a baseline (before or after the peak). + If the trace exceeds ValleyThreshold, + Genesis applies valley detection peak integration criteria. + This method drops a vertical line from the apex of the valley between unresolved + peaks to the baseline. + The intersection of the vertical line and the baseline defines the end of the first + peak and the beginning of the second peak. + This test is applied to both the left and right edges of the peak. + The ValleyThreshold criteria is useful for integrating peaks with long tails. + Useful range: 1.001 to 1.5 + Note: Appears on product UI converted from factor to percentage as "Rise percentage". + For example: 1.1 = 10% + Code tests similar to the following: + if ((currentSignal-baseline) > ((valleyBottom-baseline) * ValleyThreshold)) + { + side of peak has bottomed out, and risen above minimum + } + + + + + + Gets or the S/N range is 1.0 to 100.0. for valley detection. + Technical equation:height(here +/- VALLEY_WIDTH) > ValleyDepth*SNR+height(here) => valley here + + + + + Gets a value indicating whether to enable RMS noise calculation. + If not set, noise is calculated peak to peak. + It is set by default. + + + + + Gets a noise limit, where the code stops attempting to find a better baseline. + controls how the baseline is drawn in the noise data. + The higher the baseline noise tolerance value, + the higher the baseline is drawn through the noise data. + The valid range is 0.0 to 1.0. + + + + + Gets the minimum number of scans that Genesis uses to calculate a baseline. + A larger number includes more data in determining an averaged baseline. + The valid range is 2 to 100. + + + + + Gets a factor which controls the width of the RMS noise band above and below the peak detection baseline + and is applied to the raw RMS noise values to raise the effective RMS noise during peak detection. + The left and right peak boundaries are assigned above the noise and, therefore, + closer to the peak apex value in minutes. + This action effectively raises the peak integration baseline above the RMS noise level. + Range: 0.1 to 10.0. + Default: 2.0. + + + + + Gets the number of minutes between background scan recalculations. + Baseline is refitted each time this interval elapses. + + + + + Gets a limit for the "baseline signal to noise ratio". + A peak is considered ended if the following condition is met: + height <= (BaseNoise * BaseSignalToNoiseRatio)) + Where BaseNoise is the calculated noise on the fitted baseline, + and height is the height above baseline. + + + + + Gets the minimum acceptable percentage of the largest peak. + Do not return peaks which have a height less than this % of the highest peak above baseline. + + + + + Gets a value indicating whether filtering of peaks is by relative signal height + + + + + Gets settings for the genesis peak integrator + + + + + Gets a value indicating whether the retention time should be adjusted based on a reference peak. + + + + + Gets the expected time, as in the method (before any adjustments) + + + + + Gets a value which determine how a single peak is found from the list of + returned peaks from integrating the chromatogram. + For example: Highest peak in time window. + + + + + Gets the window, centered around the peak, in minutes. + The located peak must be within a window of expected +/- width. + + + + + Gets the baseline and noise window. + This setting is used to restrict the chromatogram. + Only scans within the range "adjusted expected RT" +/- Window are processed. + For example: a 1 minute window setting implies 2 minutes of data. + + + + + Gets the settings for finding a peak based on spectral fit + + + + + Gets the signal to noise rejection parameter for peaks + + + + + Gets the forward threshold for find algorithm. + + + + + Gets the match threshold for find algorithm + + + + + Gets the reverse threshold for find algorithm + + + + + Gets or sets the spec points. + + + + + Gets the spec points. + + The spec points. + + + + Get a copy of the find spectrum + + + The spectrum to find + + + + + Gets the scan filter. + This determines which scans are included in the chromatogram. + + + + + Gets the chromatogram settings. + This defines how data for a chromatogram point is constructed from a scan. + + + + + Gets the chromatogram settings + When there is a trace operator set, + This defines how data for a chromatogram point is constructed from a scan for the chromatogram + to be added or subtracted. + + + + + Convert mass ranges. + + + The mass ranges info. + + + The range array. + + + + + Gets the device type. + This defines which data stream within the raw file is used. + + + + + Gets the trace operator. + If the operator is not "None" then a second chromatogram can be added to or subtracted from the first. + + + + + Gets or sets the mass ranges info. + + + + + Gets or sets the mass ranges info 2. + + + + + Gets or sets the calibration units. + + + + + Gets or sets the internal standard reference. + + + + + Gets or sets the calibration levels. + + + + + Gets or sets the qc levels. + + + + + Gets (custom) keys about this component + This is treated as a comment field. + Not used for any "built-in" calculations + but may be used to annotate reports etc. + + + + + Gets the settings for a manual noise region + + + + + Gets settings for peak location (expected retention time) + + + + + Gets settings for the spectral find algorithm. + + + + + Gets settings for creating the component chromatogram + + + + + Gets component calibration settings (including level tables) + + + + + Gets settings for the system suitability algorithm + + + + + Gets settings for the PDA peak purity algorithm + + + + + Gets the table of calibration levels + + + + + Gets the table of QC levels + + + + + Gets the calibration curve fitting method + + + + + Gets the weighting for calibration curve + + + + + Gets the calibration curve origin mode + + + + + Gets a value which determines how the response should be measured (using either peak height or peak area). + + + + + Gets the Unit for calibration + + + + + Gets the name of the internal standard for this component + + + + + Gets the isotopic contribution of the internal standard to the target compound + + + + + Gets the isotopic contribution of the target compound to the internal standard + + + + + Gets a value indicating whether resolution checks will be performed + + + + + Gets the Resolution Threshold. + The threshold value determines if a peak's resolution or ok or not. + The default value is 90%. + Resolution is defined as the ratio: + 100 × V/P + where: + V = depth of the Valley: the difference in intensity from the chromatogram at the apex of the target peak + to the lowest point in the valley between the target peak and a neighboring peak + P = Peak height: the height of the target peak, above the peak's baseline + + + + + Gets a value indicating whether peak symmetry checks are to be performed. + Symmetry is determined at a specified peak height + and is a measure of how even-sided a peak is + about a perpendicular dropped from its apex. + + + + + Gets the Peak Height at which symmetry is measured. + The default value is 50%. You can enter any value within the range 0% to 100%. + + + + + Gets the Symmetry Threshold. + The SOP defined Symmetry Threshold is > 70% at 50% peak height. + This represents a realistic practical tolerance for capillary GC data. + You can enter any value within the range 0% to 100%. + The default value is 80% at 50% peak height. + The algorithm determines symmetry at the SymmetryPeakHeight + For the purposes of the test, a peak is considered symmetrical if: + (Lesser of L and R) × 100 / (Greater of L and R) > Symmetry Threshold % + where: + L = the distance from the left side of the peak to + the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to + the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets a value indicating whether peak classification checks are to be run + + + + + Gets the Peak Height at which the suitability calculator tests the width of target peaks. + You can enter any value within the range 0% to 100%. The default value is 50%. + + + + + Gets the minimum peak width, at the specified peak height, for the peak width suitability test. + The default value is 1.8. You can set any value in the range 0 to 30 seconds. + + + + + Gets the maximum peak width, at the specified peak height, for the peak width suitability test. + The default value is 3.6. You can set any value in the range 0 to 30 seconds. + + + + + Gets the Peak Height at which the algorithm measures the tailing of target peaks. + The default SOP value is 10%. You can enter any value within the range 0% to 100%. + + + + + Gets the failure threshold for the tailing suitability test. + The default SOP defined failure threshold is %lt 2 at 10% peak height. The valid range is 1 to 50. + Tailing is calculated at the value defined in . + For the purposes of the test, a peak is considered to be excessively tailed if: + + R / L > Failure Threshold % + where: + L = the distance from the left side of the peak to the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets the Peak Height at which the algorithm measures column overloading. + The default SOP value is 50%. You can enter any value within the range 0% to 100%. + + + + + Gets the failure threshold value for the column overload suitability test. + The default SOP defined threshold is 1.5 at 50% peak height. The valid range is 1 to 20. + A peak is considered to be overloaded if: + + L / R > Failure Threshold % + where: + L = the distance from the left side of the peak to the perpendicular dropped from the peak apex + R = the distance from the right side of the peak to the perpendicular dropped from the peak apex + Measurements of L and R are taken from the raw file without smoothing. + + + + + Gets the Number of Peak Widths for Noise Detection testing parameter for + the baseline clipping system suitability test. + The default value is 1.0 and the permitted range is 0.1 to 10. + A peak is considered to be baseline clipped if there is no signal + (zero intensity) on either side of the peak within the specified + number of peak widths. The range is truncated to the quantitation window + if the specified number of peak widths extends beyond the window’s edge. + + + + + Gets the threshold for system suitability testing + of the signal-to-noise ratio. The default value is 20 and the + permitted range is 1 to 500. The algorithm calculates the signal-to-noise ratio + within the quantitation window using only baseline signal. + Any extraneous, minor, detected peaks are excluded from the calculation. + + + + + Gets the % of the detected baseline for which we want to compute PeakPurity + + + + + Gets a value indicating whether we want to compute Peak Purity + + + + + Gets a value indicating whether we want to use + the enclosed wavelength range, not the total scan + + + + + Gets the high limit of the scan over which to compute + + + + + Gets the low limit of the scan over which to compute + + + + + Gets the max of a scan must be greater than this to be included + + + + + Gets or sets the options. + + + + + Gets or sets the peak detection. + + + + + Gets the amount of internal standard. Not used in any calculation yet. + + + + + Gets the units for the internal standard + + + + + Gets the target compound settings. + + The target compound settings. + + + + Gets the internal standard settings. + + The internal standard settings. + + + + Gets a value which determines if this component is a target compound or an internal standard + + + + + Gets "Fit Threshold" defined as + Min fit threshold (0-1.0) for detection by spectral fit. + This value is believed to be not currently used in Xcalibur code (may be for an older fit algorithm)? + Returned for completeness only. + + + + + Gets the calibration and quantification data. + + + + + Gets the detection threshold limits. + + + + + Gets a value indicating whether this is used as a RT Reference for another component. + + + + + Gets the number of points to be averaged in peak detection and integration. + + + + + Gets the suggested view width for displaying the chromatogram (seconds) + + + + + Gets a value which determines which peak detector to use with the component + + + + + Gets the carry over limit threshold. + + The carry over limit threshold. + + + + Gets the detection limit threshold. + + The detection limit threshold. + + + + Gets the linearity limit threshold. + + The linearity limit threshold. + + + + Gets the quantitation limit threshold. + + The quantitation limit threshold. + + + + Gets the R squared threshold. + + The R squared threshold. + + + + Gets the limit of reporting + A value should only be reported if it is >= the limit of reporting. + This value is used to calculate the ReportingLimitPassed flag. + + + + + Gets the Area limit threshold. + + The Area limit threshold. + + + + Gets the height limit threshold. + + The height limit threshold. + + + + Gets a value indicating whether IRC tests are enabled + + + + + Gets the "standard" used + + + + + Gets the Ion Ratio method + + + + + Gets the ion ratio window type + + + + + Gets the qualifier ion co-elution limits (minutes) + + + + + Gets the table of masses for ion ratio testing + + + + + Gets the settings for Ion Ration Confirmation + + + + + + + + The raw file info. + + + + + Initializes a new instance of the class. + + Unique id for this instance + The file path. + The file revision. + True if in the process of acquiring raw file + + + + Initializes a new instance of the class. + + + The loader id. + + + + + Gets the blob size. + + + + + Gets the blob start. + + + + + Gets or sets the computer name. + + + + + Gets the data file map name. + + + + + Gets the error message. + + + + + Gets the file revision. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets a value indicating whether has experiment method. + + + + + Gets the header file map name. + + + + + Gets or sets a value indicating whether is in acquisition. + + + + + Gets or sets the MS data offset. + + + + + Gets the next available controller index. + + + + + Gets the number of virtual controllers. + + + + + Gets or sets the raw file info struct. + Setting only needed during raw file save. Refreshes controller data on set. + + + + + Gets the time stamp. + + + + + Gets the user labels. + + + + + Gets the virtual controller data. + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + Loads the raw file info structure from the mapped memory raw file using the viewer. + + + The viewer. + + + The data offset. + + + The file revision. + + + The . + + + + + The number of virtual controllers of type. + + + The type. + + + The . + + + + + try to reload, without remapping. + + + throw exception on Error (else return false) + + + true if can reload + + + Bad data loaded + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + Updates the virtual controller. + + The number of virtual controllers. + The virtual data offset + The offset. + Index of the virtual device. + Type of the virtual device. + + + + Saves the RawFileInfo to the provided binary writer. + + Writer to use to save + Any error information that occurred + True is successful + + + + The populate virtual controller data. + + + + + Validates the virtual controller data. + + True if valid + + + + A calibration replicate, as read from an Xcalibur PMD file. + + + + + The replicate info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets or sets the result file name. + + + + + Gets the amount of target compound in calibration or QC standard. + + + + + Gets the Ratio of target peak height to ISTD peak height in result file. + + + + + Gets the Ratio of target peak area to ISTD peak area in result file. + + + + + Gets a value indicating whether to exclude this data point from calibration curve. + + + + + Gets the raw file name for the replicate + + + + + The sample report, from PMD files. + + + + + The report template info. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets the name of the report + + + + + Gets a value indicating whether report is enabled + + + + + Gets a value indicating whether report is enabled for standards + + + + + Gets a value indicating whether report is enabled for QCs + + + + + Gets a value indicating whether report is enabled for Unknowns + + + + + Gets a value indicating whether report is enabled for Other sample types + + + + + Gets the file save format of the report + + + + + Defines filter data, as may be embedded in a processing method, or chromatogram settings + + + + + Gets the masses. Masses for each MS step + + + The masses. + + + + + Gets the precursor mass ranges. Precursor mass range(s) + + + The precursor mass ranges. + + + + + Initializes a new instance of the class. + + + + + Gets the name. event name - for named filters as an alternative to scan filters + + + The name. + + + + + Gets or sets the mass ranges. Mass range(s) for final scan + + + The mass ranges. + + + + + Gets or sets the source fragmentations. + + + + + Gets a value used to indicate which m_SourceFragmentationInfo values are valid. + + + + + Gets the source fragmentation mass ranges. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + fix up filter defaults, for a given raw file version. + + + The file revision. + + + + + Sets the number of (precursor) masses. + + + The number of masses. + + + + + Gets the accurate mass type. + + + + + Gets the compensation voltage. + + + + + Gets the compensation voltage type. + + + + + Gets the corona value. + + + + + Gets the dependent data. + + + + + Gets the Detector value. + + + + + Gets the detector value. + + + + + Gets the electron capture dissociation. + + + + + Gets the electron capture dissociation type. + + + + + Gets the electron transfer dissociation. + + + + + Gets the electron transfer dissociation type. + + + + + Gets the enhanced. + + + + + Gets the free region. + + + + + Gets the higher energy CID. + + + + + Gets the higher energy cid type. + + + + + Gets the ionization mode. + + + + + Gets a value indicating whether the scan event is custom - true if trailer + scan event should be used. + + + + + Gets a value indicating whether the scan event is valid. + + + + + Gets the lock. + + + + + Gets the MS order. + + + + + Gets the mass analyzer type. + + + + + Gets the mass calibrators. + + + + + Gets the mass ranges. + + + + + Gets the multi photon dissociation. + + + + + Gets the multi photon dissociation type. + + + + + Gets the multi state activation. + + + + + Gets the multiplex. + + + + + Gets the parameter a. + + + + + Gets the parameter b. + + + + + Gets the parameter f. + + + + + Gets the parameter k. + + + + + Gets the parameter r. + + + + + Gets the parameter v. + + + + + Gets the photo ionization. + + + + + Gets the polarity. + + + + + Gets the pulsed q dissociation. + + + + + Gets the pulsed q dissociation type. + + + + + Gets the reactions. + + + + + Gets the scan data type. + + + + + Gets the scan type. + + + + + Gets the scan type index. Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Gets the sector scan. + + + + + Gets the source fragmentation. + + + + + Gets the source fragmentation mass ranges. + + + + + Gets value to indicate how source fragmentation values are interpreted. + + + + + Gets or sets the source fragmentations. + + + + + Gets the supplemental activation. + + + + + Gets the turbo scan. + + + + + Gets the ultra. + + + + + Gets the wideband. + + + + + Convert to automatic filter string. + + The scan event. + The mass precision. + The chars maximum. + The energy precision. + The filter string + + + + get the run header filter mass precision. + + + The . + + + + + create reaction. + + + The reaction number. + + + The . + + + + + The filter scan event class is an internal class which hosts certain features + of both filters and scan events. + It supports the sorting code needing to "auto filter" a set of scan events. + Scan events are conceptually immutable (records of what occurred). + This class is mutable. + The class is created internally by the "Filter string parser" and by "Scan Event". + The class is exposed externally though "WrappedScanFilter" which has the (limited) public + interface to read and modify a filter. + + + + + Initializes a new instance of the class. + + + The scan event. + + + The from scan. + + + + + Gets the table of compensation voltages valid. + + + + + Gets or sets the filter mass precision. + + + The filter mass precision. + + + + + Gets or sets the filter mass resolution. + + + The filter mass resolution. + + + + + Gets or sets the name of the locale. + + + The name of the locale. + + + + + Gets or sets the meta filters. {hcd, etd, cid} + + + + + Gets the table of source CID valid. + + + + + Gets the total source values, which is all CID and CV. + + + + + Compares the current object with another object of the same type. + Exact compare for specialized qsort. Standard CompareTo considers items within an "instrument tolerance" as the same. + This version uses 1.0E-6 for the tolerance. + + An object to compare with this object. + + A value that indicates the relative order of the objects being compared. The return value has the following + meanings: Value Meaning Less than zero This object is less than the parameter.Zero This + object is equal to . Greater than zero This object is greater than + . + + + + + Compares the current object with another object of the same type. + + An object to compare with this object. + + A value that indicates the relative order of the objects being compared. The return value has the following + meanings: Value Meaning Less than zero This object is less than the parameter.Zero This + object is equal to . Greater than zero This object is greater than + . + + + + + create reactions table + + + + + Indicates whether the current object is equal to another object of the same type. + + An object to compare with this object. + + true if the current object is equal to the parameter; otherwise, false. + + + + + Gets the filter string. + + The filter mass precision. + The filter as a string + + + + Count the number of compensation voltage values. + + The number of compensation voltage values + + + + Numbers the source fragmentation information values. + + the number of values + + + + Check if this object has the parent mass as another. + + The other. + true if the same + + + + Check if this object has the parent mass as another. + + The other. + true if the same + + + + set compensation voltage type. + + + The type. + + + + + when we set the number of digits to display in the filter masses, + let's also set the comparison value to use in comparing filters. + This value used to be 0.4 AMU + Sets the filter mass resolution. + + + Mass Resolution to apply + + + + + Sets the filter mass resolution by mass precision. + + The n. + + + + set (precursor) masses. + + + The index. + + + The value. + + + + + Set the number of precursor masses. + + + The number of masses. + + + + + set precursor energy. + + + The index to the precursor table. + + + The energy. + + + + + set precursor energy is valid ex. + + + The index to the precursor table. + + + The extended energy valid flags. + + + + + set source fragmentation type. + + + The type. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Sets the "i" indexed Compensations voltage information value. + Skips over any items which have already been set for SID mode. + + The i. + The d value. + + + + Sets the number of compensation voltage info values. + + + The number. + + + + + Sets The number of source fragmentation info values. + + + The number. + + + + + Sets the "i" indexed Compensations voltage information value. + Skips over any items which have already been set for SID mode. + + The i. + The d value. + + + + Compares the reactions. + + The other reactions. + The filter mass resolution. + Standard comparison result + + + + converts the event to filter. + + The scan event. + True when this is data from a scan. False when it is typed filter text + + + + Count the number of volt values used for a voltage type + + Style of voltage values + All voltages in the scan event + The number of voltages + + + + Filter sorting, designed to match same ordering as previous Xcalibur code. + + + + + Sort a list of events, using the qsort algorithm. + This code is needed to precisely match results from legacy fileio. + + scan events to sort + + + + Sort a small list of filters in a simple manner (about 8 items) + + Low index to sort from + High index to sort to + Data array to sort + + + + Exchange two array elements + + First to exchange + Second to exchange + Array of data + + + + This class parses a filter string. + + + + + Lookup table of valid precursor activation codes + + + + + Parsing states for a mass range + + + + + Expect low mass + + + + + Expect comma or dash (separator) + + + + + Expect high mass + + + + + Expect an energy value (after "@") + + + + + Expect a common or "]" + + + + + Found "]" + + + + + Parsing states for a simple double "123.456" + + + + + Digits before decimal point + + + + + Decimal point + + + + + Digits after decimal point + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The scan event. + + + + + Gets or sets the energy precision. + + + + + Gets or sets the meta filters. (ETD, CID, HCD) + + + + + Sets the mass precision. + + + + + Get filter from string (by parsing a string) + + + The filter sting to parse + + + The parsed filter + + + + + Parses the filter structure string. + + The filter string. + + true if parse is valid + + + + Convert to type IFilterScanEvent + + + true if this came from a scan's event. + + + Converted object + + + + + Search for open and close parenthesis, or a given style + + + The filter string. + + + The open parenthesis index. + + + The close parenthesis index. + + + The open match count. + + + The close match count. + + + The filter length. + + + The open parenthesis character. + + + The close parenthesis character. + + + + + Parse The ion mode. + + + The token. + + + The index into the token. + + + The . + + + + + Parse one token + + The token. + if set to true [set flag]. + The names. + The set mode. + updated parse state + + + + Initialize internal properties. + + + The scan event. + + + + + Initialize the parser (before reading the filter string) + + + + + Calculate the total number of activations. + + + The total. + + + + + Gets the SIM compensation voltage, at a given index + + + The index. + + + The energy. + + + The energy type + + + + + Get SIM source CID at a given index. + + + The index. + + + The energy. + + + The energy type + + + + + Parse a filter string + + + The filter string. + + + The state (Bad on failure to parse) + + + + + Parse the next (white space separated) token. + + + The parse state. + + + The token. + + + The updated parse state. + + + + + Parse for segment and scan event. + + + The filter string characters. + + + The parse state + + + + + Decode an integer. Must be less than 8 digits + + the text to parse + index into token + positive value or zero, if no digits. -1 on >=8 digits + + + + Parse a mass ranges. + + + The token to parse + + + The parse state. + + + + + Parses the mass ranges, plus energy + parse mass ranges -- double or double-double separated by ',' + max of 50 ranges + '[' nnn.n [- nnn.n] [, [nnn.n [- nnn.n] ....] ']' + + The mass ranges array. + parse state + + + + parse a "simple" double value: no e-notation + "123.4" or "123". + Optionally permit leading sign + + The mass ranges array. + The start position. + The value. + Mass precision + True if value may have + or - + Parse state: Bad if too many digits, or Next otherwise + + + + parse a double value, i.e., no e-notation + Always permits sign. "123.4", "+123.4" or "-123". + Only permits trailing sign if it is specified as a "range separator". + + Text to parse + Index of first char to parse + Value decoded + True if trailing space is permitted + Permitted precision + Character which may appear between two numbers representing a range + Parse state, which can be bad on invalid, Next otherwise + + + + parse a double value range, i.e., no e-notation + "+123.4@200.34" or "-123@-345" + First value is a mass, second is energy. + + + text to parse + + + next char to parse + + + set if '@; found + + + Precursor mass + + + Activation energy + + + set is '-' '+' permitted + + + Set if number after '@' permitted to be signed + + The updated parse state + + + + + Test that the mass range in limits. + + + The index. + + + The high or low. (0 for low, 1 for high) + + + The mass. + + + true when valid. + + + + + Parse meta filters. + + + The token. + + + The parse state. + + + + + set SIM source CID for a given index. + + + The index. + + + The value. + + + + + parse dissociation, such as mpd@value + + + The token. + + + The set flag. + + + The names. + + + The set mode. + + + The parse state + + + + + Parse source fragmentation (SID) + + + The token. + + + in: True if this has been set already + out: set to true when token is found + + + The names. + + + the parse state + + + + + parse compensation voltage. + + + The token. + + + True if this item has already been parsed + + + The names. + + + The parse result + + + + + parse a simplified double value range, i.e., no e-notation. + "+123.4-200.34" or "-123--345" + + text to parse + start of text to parse (updated to next unparsed char) + index into text of separator + Low value found in range + High value found in range (same as low, when no second value) + True if trailing spaces are valid + Decimal precision + Parse state. Will be Bad on parse error, Next on valid parse + + + + convert the scan mode + in the syntax most of these are followed by an MS order, some not + for example: Q1MS is always MS1 + + + The token. + + + The set flag. + + + The names. + + + The parse state + + + + + set MS order and number of precursor masses. + + + The order. + + + The masses. + + + + + Parse multiplex. + + + The token. + + + The possible names. + + + The parse state + + + + + Parse the MS order (ms, ms2 etc.) + + + The token. + + + The parse state. + + + + + Parse detector. det= + + + The token. + + + The names. + + + The parse state + + + + + Look for a precursor mass, plus activation codes + + token like "1234.56@ecd35.6@hcd44.4" + Parse private state + + + + Set a precursor mass. + + + The index. + + + The mass. + + + + + Set precursor energy at a given index. + + + The index. + + + The energy. + + + + + The update mass ranges 2. + + + + + Get precursor energy ex. + + + The index. + + + The activation energy + + + The 'valid' bit plus the activation mode . + + + + + The multiple activations for MS n order. + + + The i. + + + The number of MA in the extra array for this MS n Order + + + + + given the previous MA for this MS/MS Order, find the next + + + The order. + + + The last multi activation. + + + The . + + + + + get precursor energy extra. + + + The index. + + + The energy. + + + The energy code + + + + + The precursor activation. + + + + + Initializes a new instance of the class. + + + + + Gets or sets a value indicating whether it is a multiple activation. + + + + + Gets or sets the mode of activation. + + + + + Gets or sets a value indicating whether the precursor energy is valid. + If it is valid, it is shown as "@energy" + + + + + Gets or sets the precursor energy. + + + + + Gets or sets the MS order. + + + + + Convert to energy ex. + + + The converted value + + + + + The filter string tokens, as used by filer parser. + + + + + Gets the meta filter token values. + + + + + Gets the meta filter token names. + + + + + Gets the ionization mode token names. + + + + + Gets the ionization mode token values. + + + + + Gets the mass analyzer token names. + + + + + Gets the mass analyzer token values. + + + + + Gets the sector scan token names. + + + + + Gets the sector scan token values. + + + + + Gets the lock token names. + + + + + Gets the lock token values. + + + + + Gets the free region token names. + + + + + Gets the free region token values. + + + + + Gets the ultra token names. + + + + + Gets the ultra token values. + + + + + Gets the enhanced token names. + + + + + Gets the enhanced token values. + + + + + Gets the parameter a token names. + + + + + Gets the parameter a token values. + + + + + Gets the parameter b token names. + + + + + Gets the parameter b token values. + + + + + Gets the parameter f token names. + + + + + Gets the parameter f token values. + + + + + Gets the SPS multi notch token names. + + + + + Gets the SPS multi notch token values. + + + + + Gets the parameter r token names. + + + + + Gets the parameter r token values. + + + + + Gets the parameter v token names. + + + + + Gets the parameter v token values. + + + + + Gets the multi photon dissociation token names. + + + + + Gets the multi photon dissociation token values. + + + + + Gets the electron capture dissociation token names. + + + + + Gets the electron capture dissociation token values. + + + + + Gets the photo ionization token names. + + + + + Gets the photo ionization token values. + + + + + Gets the polarity token names. + + + + + Gets the polarity token values. + + + + + Gets the scan data type token names. + + + + + Gets the scan data type token values. + + + + + Gets the corona token names. + + + + + Gets the corona token values. + + + + + Gets the source fragmentation token names. + + + + + Gets the source fragmentation token values. + + + + + Gets the compensation voltage token names. + + + + + Gets the compensation voltage token values. + + + + + Gets the data dependent token names. + + + + + Gets the data dependent token values. + + + + + Gets the wide band token names. + + + + + Gets the wide band token values. + + + + + Gets the supplemental activation token names. + + + + + Gets the supplemental activation token values. + + + + + Gets the multi state activation token names. + + + + + Gets the multi state activation token values. + + + + + Gets the accurate mass token names. + + + + + Gets the accurate mass token values. + + + + + Gets the turbo scan token names. + + + + + Gets the turbo scan token values. + + + + + Gets the scan mode token names. + + + + + Gets the scan mode token values. + + + + + Gets the multiplex token names. + + + + + Gets the multiplex token values. + + + + + Gets the detector token names. + + + + + Gets the detector token values. + + + + + Initializes static members of the class. + + + + + Filter sorting, designed to match same ordering as previous Xcalibur code. + + + + + Sort a list of events, using the qsort algorithm. + This code is needed to precisely match results from legacy fileio. + + scan events to sort + + + + Sort a slice of a list of events, using the qsort algorithm. + This code is needed to precisely match results from legacy fileio. + + scan events to sort + first element to sort + last element to sort + + + + Sort a small list of filters in a simple manner (about 8 items) + + Low index to sort from + High index to sort to + Data array to sort + + + + Exchange two array elements + + First to exchange + Second to exchange + Array of data + + + + The reaction class defines one reaction in a chain of MS/MS reactions. + A reaction descibes which ion was acted on, with what methods, to produce the + next level MS/MS fragments. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The precursor mass. + + + The isolation width. + + + The collision energy. + + + The collision energy valid. + + + The range is valid. + + + The first precursor mass. + + + The last precursor mass. + + + The isolation width offset. + + + + + Initializes a new instance of the class. + + + Clone from interface. + + + + + Gets a value indicating whether is multiple activation. + + + + + Gets the collision energy valid value from the structure. + + + + + Gets a value indicating whether the collision energy is valid. this is set to true + to use in scan filtering. + + + + + Gets a value indicating whether is precursor energies valid. + + + + + Gets a value indicating whether use named activation. + + + + + Gets the named activation type. + + + + + Gets the collision energy. + + + + + Gets the first precursor mass. If == TRUE, this value defines the start of the + precursor isolation range. + + + + + Gets a value indicating whether is range valid. If TRUE, is still the center mass but the + and + are also valid. + + + + + Gets the isolation width. + + + + + Gets the isolation width offset. + + + + + Gets the last precursor mass. + + + + + Gets the precursor mass. + + + + + compare details (excludes parent mass). + + + The y. + + + less than zero if before, zero if same, positive if after. + + + + + The comparison implementation of . + + + The object to compare. + + + Return an that has one of three values: + + + Value + Meaning + + Less than zero + The current instance precedes the object specified by the CompareTo method in the sort order. + Zero + This current instance occurs in the same position in the sort order as the object specified by the CompareTo method. + Greater than zero + This current instance follows the object specified by the CompareTo method in the sort order. + + + + + + The comparison implementation of . + + + The object to compare. + + + True if the objects are equal. + + + + + Deeps the clone. + + copy of this object + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + initial fields from a reaction. + + + The reaction to copy from. + + + + + initialize valid flags. + + + + + The scan event. + + + + + Initializes a new instance of the class. + + + The scan event. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The header. + Index of the unique scan event. + + + + Initializes a new instance of the class. + + The filter mass precision. + Index of the unique scan event. + + + + Sets the dependent data as byte. + (Used in conversion of legacy LCQ files) + + + + + Gets the header filter mass precision. + + + + + Sets the scan data type. Internal method for converting old file revisions + + + + + Gets or sets the scan event info. + Note that this is a struct, so code which needs + to modify needs to follow a get, modify, set pattern + + + + + Gets or sets the index of the unique scan event. + + + The index of the unique scan event. + + + + + Gets or sets the scan type Location. + This determines where the scan was found within the + segment and event table. + This is similar data to "ScanTypeIndex" + but not shown in "ToString" + HIWORD == segment, LOWORD == event number + + + + + compare to. + + + The other. + + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + The method compares two objects. + + + The other object. + + + True if equal. + + + + + Gets the accurate mass type. + + + + + Gets the compensation voltage. + + + + + Gets the compensation voltage type. + + + + + Gets the corona value. + + + + + Gets the dependent data. + + + + + Gets the Detector value. + + + + + Gets the detector value. + + + + + Gets the electron capture dissociation. + + + + + Gets the electron capture dissociation type. + + + + + Gets the electron transfer dissociation. + + + + + Gets the electron transfer dissociation type. + + + + + Gets the enhanced. + + + + + Gets the free region. + + + + + Gets the higher energy CID. + + + + + Gets the higher energy CID type. + + + + + Gets the ionization mode. + + + + + Gets a value indicating whether the scan event is custom - true if trailer + scan event should be used. + + + + + Gets a value indicating whether the scan event is valid. + + + + + Gets the lock. + + + + + Gets the mass analyzer type. + + + + + Gets the mass calibrators. + + + + + Gets or sets the mass ranges. + + + + + Gets the MS order. + + + + + Gets the multi photon dissociation. + + + + + Gets the multi photon dissociation type. + + + + + Gets the multiplex. + + + + + Gets the multi state activation. + + + + + Gets or sets the name. + + + + + Gets the parameter a. + + + + + Gets the parameter b. + + + + + Gets the parameter f. + + + + + Gets the parameter r. + + + + + Gets the parameter v. + + + + + Gets the photo ionization. + + + + + Gets the polarity. + + + + + Gets the pulsed q dissociation. + + + + + Gets the pulsed q dissociation type. + + + + + Gets or sets the reactions. + + + + + Gets the scan data type. + + + + + Gets the scan type. + + + + + Gets the scan type index. + When specified, it will show as {segment,event} in a filter string. + Scan Type Index indicates the segment/scan event for this + scan event. + HIWORD == segment, LOWORD == scan type + -1 for "not in fixed table" + + + + + Gets the sector scan. + + + + + Gets the source fragmentation. + + + + + Gets the source fragmentation mass ranges. + + + + + Gets or sets the source fragmentations. + + + + + Gets value to indicate how source fragmentation values are interpreted. + + + + + Gets the parameter k. + + + + + Gets the supplemental activation. + + + + + Gets the turbo scan. + + + + + Gets the ultra. + + + + + Gets the wideband. + + + + + get run header filter mass precision. + + + The mass precision + + + + + Convert to auto filter string. + + + The scan event. + + + The mass precision. + + + The chars max. + + + The energy precision. + + + The . + + + + + Load (from file). + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + + The number of bytes read + + + + + Gets the accurate mass setting. + + + + + Gets Compensation Voltage Option setting. + + + + + Gets Compensation Voltage type setting. + + See for possible values + + + + Gets the corona scan setting. + + + + + Gets the dependent scan setting. + + + + + Gets the detector scan setting. + + See for possible values + + + + Gets the detector value. + + Floating point detector value + + + + Gets the electron capture dissociation setting. + + + + + Gets the electron capture dissociation value. + + Floating point electron capture dissociation value + + + + Gets the electron transfer dissociation setting. + + + + + Gets the electron transfer dissociation value. + + Floating point electron transfer dissociation value + + + + Gets the enhanced scan setting. + + + + + Gets the field free region setting. + + See for possible values + + + + Gets the higher energy cid setting. + + + + + Gets the higher energy cid value. + + Floating point higher energy cid value + + + + Gets the ionization mode scan setting. + + See for possible values + + + + Gets a value indicating whether this is a custom event. + A custom event implies that any scan derived from this event could be different. + The scan type must be inspected to determine the scanning mode, and not the event. + + + + + Gets a value indicating whether this event is valid. + + + + + Gets the lock scan setting. + + + + + Gets the mass analyzer scan setting. + + See for possible values + + + + Gets the mass calibrator count. + + + + + Gets number of masses + + The size of mass array + + + + Gets the number of mass ranges for final scan + + The size of mass range array + + + + Gets the scan power setting. + + See for possible values + + + + Gets the Multi notch (Synchronous Precursor Selection) type + + + + + Gets the multi-photon dissociation setting. + + + + + Gets the multi-photon dissociation value. + + Floating point multi-photon dissociation value + + + + Gets the Multiplex type + + + + + Gets MultiStateActivation type setting. + + + + + Gets the event Name. + + + + + Gets the parameter a. + + + + + Gets the parameter b. + + + + + Gets the parameter f. + + + + + Gets the parameter r. + + + + + Gets the parameter v. + + + + + Gets the photo ionization setting. + + + + + Gets the polarity scan setting. + + See for possible values + + + + Gets pulsed dissociation setting. + + + + + Gets the pulsed dissociation value. + + Floating point pulsed dissociation value + + + + Gets the scan data. + + + + + Gets the scan type setting. + + See for possible values + + + + Gets encoded form of segment and scan event number. + + HIWORD == segment, LOWORD == scan type + + + + Gets the sector scan setting. + + See for possible values + + + + Gets source fragmentation scan setting. + + + + + Gets the number of source fragmentation info values + + The size of source fragmentation info array + + + + Gets the source fragmentation mass range count. + + + + + Gets the source fragmentation type setting. + + See for possible values + + + + Gets supplemental activation type setting. + + + + + Gets the turbo scan setting. + + + + + Gets the ultra scan setting. + + + + + Gets the wideband scan setting. + + + + + Retrieves activation type at 0-based index. + + + Use to get the count of activations. + + + Index of activation to be retrieved + + + activation of MS step; + See for possible values + + + + + Retrieves precursor(collision) energy value for MS step at 0-based index. + + + Use to get the count of energies. + + + Index of precursor(collision) energy to be retrieved + + + precursor(collision) energy of MS step + + + + + Retrieves precursor(collision) energy validation flag at 0-based index. + + + Use to get the count of precursor(collision) energy validations. + + + Index of precursor(collision) energy validation to be retrieved + + + precursor(collision) energy validation of MS step; + See for possible values + + + + + Gets the first precursor mass. + + + The index. + + + The first mass + + + + + Retrieves multiple activations flag at 0-based index of masses. + + + Use to get the count of masses. + + + Index of flag to be retrieved + + + true if mass at given index has multiple activations; false otherwise + + + + + Get the isolation width. + + + The index. + + + The isolation width + + + + + Get the isolation width offset. + + + The index. + + + The isolation width offset + + + + + Gets the last precursor mass. + + + The index. + + + The last mass + + + + + Retrieves mass value for MS step at 0-based index. + + + Use to get the count of mass values. + + + Index of mass value to be retrieved + + + Mass value of MS step + + Will be thrown when index >= MassCount + + + + Get the mass calibrator, at a given index. + + + The index, which should be from 0 to MassCalibratorCount -1 + + + The mass calibrator. + + Thrown when requesting calibrator above count + + + + Retrieves mass range for final scan at 0-based index. + + + Use to get the count of mass ranges. + + + Index of mass range to be retrieved + + + Mass range for final scan at 0-based index + + Will be thrown when index >= MassRangeCount + + + + Determine if a precursor range is valid. + + + The index. + + + true if valid + + + + + Gets the reaction data for the mass at 0 based index + Equivalent to calling GetMass, GetEnergy, GetPrecursorRangeValidity, GetFirstPrecursorMass + GetLastPrecursorMass,GetIsolationWidth,GetIsolationWidthOffset,GetEnergyValid + GetActivation, GetIsMultipleActivation. + Depending on the implementation of the interface, this call may be more efficient + that calling several of the methods listed. + + index of reaction + reaction details + + + + Retrieves a source fragmentation info value at 0-based index. + + + Use to get the count of source + fragmentation info values. + + + Index of source fragmentation info to be retrieved + + + Source Fragmentation info value at 0-based index + + Will be thrown when index >= SourceFragmentationInfoCount + + + + Get the source fragmentation mass range, at a give index. + + + The index. + + + The mass range. + + Will be thrown when index >= SourceFragmentationMassRangeCount + + + + Convert to string. + + + The converted scanning method. + + + + + Pack the "non array" items from an event into + the "scan event information" structure. + + + The scan event. + + + The . + + + + + Construct from event, from an interface. + This can permit an application to build a scan filter + Use "ScanEventBuilder" to make an event + the use an IRawDataPlus method "event to filter" + which internally calls this, then uses code already done + to map "ScanEvent" to "WrappedScanFilter" + + + The old event. + + + The . + + + + + Calculate hash codes, for faster sort + + + + + table of mass range + + + The object to copy into. + + + Function to get item to copy. + + + The length of the table. + + + + + Compares items in this event, up to the reactions tests. + Reaction tests are done differently by various callers. + + The source. + The other. + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + Compares items in this event, after the reactions tests. + Reaction tests are done differently by various callers. + + The other. + compare names as final test (not needed for auto filter) + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + Compares items in this event, after the reactions tests. + Reaction tests are done differently by various callers. + Skips items which are fouud equal in hash3 + + The other. + compare names as final test (not needed for auto filter) + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + Compares items in this event, after the reactions tests. + Reaction tests are done differently by various callers. + Skips items which are fouud equal in hash3 and hash4 + + The other. + compare names as final test (not needed for auto filter) + + A 32-bit signed integer that indicates the relative order of the objects being compared. + The return value has the following meanings: + Value Meaning + Less than zero This object is less than the parameter. + Zero This object is equal to . + Greater than zero This object is greater than . + + + + + create editable (mutable) scan event. + + + The . + + + + + Convert the internal scan event info struct to byte array. + + This method is intended to return the internal scan event info struct as "byte array", such that + we don't have to be encoded from the properties, when exporting to a new file. + + + The byte array from the internal scan event info struct + + + + + The method returns the string representation of the scan event object. + + + The representation of the scan event object. + + + + + The method compares two lists of doubles. + + + The first list of doubles. + + + The second list of doubles. + + + The tolerance for equivalence. + + + Return an that has one of three values: + + + Value + Meaning + + Less than zero + The current instance precedes the object specified by the CompareTo method in the sort order. + Zero + + This current instance occurs in the same position in the sort order as the object specified by the + CompareTo method. + + Greater than zero + This current instance follows the object specified by the CompareTo method in the sort order. + + + + + + The method compares two lists of mass ranges. + This version uses "default" tolerance + + + The first list of mass ranges. + + + The second list of mass ranges. + + + Return an that has one of three values: + + + Value + Meaning + + Less than zero + The current instance precedes the object specified by the CompareTo method in the sort order. + Zero + + This current instance occurs in the same position in the sort order as the object specified by the + CompareTo method. + + Greater than zero + This current instance follows the object specified by the CompareTo method in the sort order. + + + + + + The method compares two lists of mass ranges. + Tolerance is half of the passed in "filter mass resolution" + + + The first list of mass ranges. + + + The second list of mass ranges. + + Resolution (tolerance) for comparison + + Return an that has one of three values: + + + Value + Meaning + + Less than zero + The current instance precedes the object specified by the CompareTo method in the sort order. + Zero + + This current instance occurs in the same position in the sort order as the object specified by the + CompareTo method. + + Greater than zero + This current instance follows the object specified by the CompareTo method in the sort order. + + + + + + The method compares two lists of reactions. + + + The first list of reaction. + + + The other list of reactions. + + + Return an that has one of three values: + + + Value + Meaning + + Less than zero + The current instance precedes the object specified by the CompareTo method in the sort order. + Zero + + This current instance occurs in the same position in the sort order as the object specified by the + CompareTo method. + + Greater than zero + This current instance follows the object specified by the CompareTo method in the sort order. + + + + + + formulate auto filter string. + + + The scan event. + + + The default mass precision format. + + + The mass precision. + + + The max number of chars + + + The energy precision. + + + The filter as a string + + + + + copy arrays from this to "copy" + + + The copy. + + + + + The method appends the specified string to the result. + + + The result. + + + The parameter. + + + The string to append. + + + + + The method appends the specified string to the result. + + + The result. + + + The parameter. + + + The string to append. + + + + + duplicate a list of mass range. + + + The data to copy. + + + A new list which is a copy of the old list. + If the old list is null: a new empty list. + + + + + The format accurate mass type. + + + The result. + + Type to format + + + + The format compensation voltage. + + + The result. + + The scan event to format + Precision for energy values + + + + The method formats the dependent data flag. + + + The result. + + The value to format + + + + The method formats the detector string. + + + The result. + + Scan event to format + Precision for energy values + Indicates that the string is for an Auto Filter. + + + + The method format electron capture dissociation type. + + + The result. + + event to format + precision for energy values + + + + The method formats the free region. + + + The result. + + Free region code + + + + The method formats the ionization mode. + + + The result. + + The ionization mode + + + + The method formats the mass ranges. + + + The result. + + The event to format + Precision for precursor mass + Precision for energy + + + + The method formats the MS order. + + + The result. + + The event to format + Mass precision to use + Precision for activation energy + + + + The method formats the multi photon dissociation type. + + + The result. + + Event to format + Precision for energy + + + + The method formats the polarity. + + + The result. + + Polarity to format + + + + The method formats the scan type. + + + The result. + + Type to format + + + + The method formats the scan type index. + + + The result. + + Type to format + + + + The method formats the sector scan. + + + The result. + + Value to format + + + + The method formats the source fragmentation. + + + The result. + + Event to format + Format for energy values + + + + format a voltage feature. + + + The result. + + + The energy precision format. + + + The source fragmentations. + + offet from start of fragmentations array + + The volt enable. + + + The volt type. + + + The code. + + + + + The method formulates auto filter reaction. + + + The result. + + + The reaction. + + + Format for precursor mass + + + Format for collision energy + + + + + The method formats the scan data type. + + + The result. + + Value to format + + + + Gets the mass analyzer type filter string. + + The mass analyzer types. + the mass analyzer type filter string + + + + Convert the mass range to string. + + + The index into the table of ranges. + + + The range. + + + The is dissociation. + + + The source fragmentation values. + + + The mass precision format. + + + The energy precision format. + + + The . + + + + + Safely Count items in a list. Count is zero for a null list. + + List to count + Count of items in the list + + + + This method fixes up defaults. + + + The file version. + + + + + The method reads the reactions array. + + + The viewer. + + + Offset into memory map + + + The file version. + + + The number of bytes read. + + + + + The method reads the structure. + + + The viewer. + + + Offset into memory map + + + The file version. + + + The number of bytes read. + + + + + The scan event decorator. + + + + + Gets the (decorated) scan event + + + + + Initializes a new instance of the class. + + + The scan event. + + + + + To the automatic filter string. + + The scan event. + The mass precision. + The chars maximum. + The energy precision. + Auto filter string. + + + + Gets the run header filter mass precision. + + the run header filter mass precision + + + + Gets the base scan event. + + + The base scan event. + + + + + Gets or sets the dependent data flag. + + + + + Gets or sets the wide band. + + + + + Gets or sets the supplemental activation. + + + + + Gets or sets the multi state activation. + + + + + Gets or sets the accurate mass type. + + + + + Gets or sets the detector. + + + + + Gets or sets the source fragmentation. + + + + + Gets or sets a value which indicates how source fragmentation values are interpreted. + + + + + Gets or sets the compensation voltage. + + + + + Gets or sets the compensation voltage type. + + + + + Gets or sets the turbo scan. + + + + + Gets or sets the lock. + + + + + Gets or sets the multiplex. + + + + + Gets or sets the parameter a. + + + + + Gets or sets the parameter b. + + + + + Gets or sets the parameter f. + + + + + Gets or sets SPS Multi notch (Synchronous Precursor Selection) + + + + + Gets or sets the parameter r. + + + + + Gets or sets the parameter v. + + + + + Gets or sets the ultra. + + + + + Gets or sets the enhanced. + + + + + Gets or sets the electron capture dissociation type. + + + + + Gets or sets the multi photon dissociation type. + + + + + Gets or sets the corona value. + + + + + Gets or sets the detector value. + + + + + Gets or sets the electron capture dissociation. + + + + + Gets or sets the electron transfer dissociation. + + + + + Gets or sets the electron transfer dissociation type. + + + + + Gets or sets the free region. + + + + + Gets or sets the higher energy CID. + + + + + Gets or sets the higher energy CID type. + + + + + Gets or sets the ionization mode. + + + + + Gets or sets a value indicating whether the scan event is custom - true if trailer + scan event should be used. + + + + + Gets or sets a value indicating whether the scan event is valid. + + + + + Gets or sets the MS order. + + + + + Gets or sets the mass analyzer type. + + + + + Gets or sets the mass calibrators. + + + + + Gets or sets the mass ranges. + + + + + Gets or sets the multi photon dissociation. + + + + + Gets or sets the name. + + + + + Gets or sets the photo ionization. + + + + + Gets or sets the Polarity. + + + + + Gets or sets the pulsed q dissociation. + + + + + Gets or sets the pulsed q dissociation type. + + + + + Gets or sets the reactions. + + + + + Gets or sets the scan data type. + + + + + Gets or sets the scan type. + + + + + Gets or sets the scan type index. Scan Type Index indicates the segment/scan event for this filter scan event. + HIWORD == segment, LOWORD == scan type + + + + + Gets or sets the sector scan. + + + + + Gets or sets the source fragmentation mass ranges. + + + + + Gets or sets the source fragmentations. + + + + + The scan event editor. + + + + + Initializes a new instance of the class. + + + The scan event. + + + + + The scan index. + + + + + Gets or sets the scan index struct info. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The viewer. + The size. + The data offset. + The decoder. + + + + Gets the base peak intensity. + + + + + Gets the base peak mass. + + + + + Gets the data offset. + + + + + Gets the high mass. + + + + + Gets a value indicating whether is scan type index specified. + + + + + Gets the low mass. + + + + + Gets the number packets. + + + + + Gets the packet type. + + + + + Gets meta data about the packet type. + + + + + Gets the scan number. + + + + + Gets the scan segment. + + + + + Gets the scan type index. + + + + + Gets the start time. + + + + + Gets the tic. + + + + + Gets the trailer offset. + + + + + Gets the raw (unprocessed) value of the scan type index. + + + + + Loads the specified viewer. + + The viewer. + The size. + The data offset. + The decoder. + + + + Provides methods to read scan indices from raw file. + Scan index serves as the key to retrieve the scan data packet. + + + + + Initializes a new instance of the class. + + The number of spectrum. + + + + Gets the at the specified index. + + + The . + + The index. + Scan index + + + + Gets the retention time from the index, with minimal decoding + + + The retention time + + + + Gets the number of spectrum. + + + + + Load (from file). + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + + The number of bytes read + + + + + Gets the size of scan index structure by file version. + + The file version. + Struct size specified by the file version. + + + + Gets the decoder. + + The file version. + A method that will reads the scan index struct from a byte array and convert it back to struct. + + + + Reads the scan index structure from a byte array and convert it to struct. + + Scan index in byte array. + Scan index struct. + + + + Reads the scan index struct2 from a byte array and convert it to struct. + + Scan index in byte array. + Scan index struct. + + + + Reads the scan index struct1 from a byte array and convert it to struct. + + Scan index in byte array. + Scan index struct. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The trailer scan events. + + + + + Initializes a new instance of the class. + + + The loader Id. + + + + + Initializes a new instance of the class. + + Loader ID + The run header. + + + + Initializes a new instance of the class. + + The loader ID + The run header. + The file revision. + + + + Gets the scan index count. + + + + + Gets the unique events count. + + + + + Gets the file revision. + + + + + Gets the header file map name. + It's only meaningful in Generic data. + + + + + Gets the data file map name. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Decode scan events and add to a queue to be sorted + + + + + + + + + + + The get event. + + + The index. + + + The . + + + Thrown if the index is out of range. + + + + + Gets the index of the unique events. + + The index. + The index + + + + load the events + + + The scan events. + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + dispose of object. + + + true if disposing. + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The UV scan index. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The device' memory mapped stream viewer. + + Size of the UV scan index struct + The data offset. + A method that will reads the UV scan index struct from a byte array and convert it back to struct. + + + + Gets or sets the UV scan index structure information. + + + + + Gets the data offset. + + + + + Gets the frequency. + + + + + Gets a value indicating whether is uniform time. + + + + + Gets the long wavelength. + + + + + Gets the number of channels. + + + + + Gets the number packets. + + + + + Gets or sets the packet type. + + + + + Gets the scan number. + + + + + Gets the short wavelength. + + + + + Gets the start time. + + + + + Gets or sets the TIC. + + + + + Loads the specified viewer. + + The viewer. + The size. + The data offset. + The decoder. + + + + Provides methods to read UV scan indices from raw file. + UV scan index serves as the key to retrieve the scan data packet. + + + + + Initializes a new instance of the class. + + The size. + + + + Load UV scan indices from raw file. + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + + The number of bytes read + + + + + Gets the at the specified index. + + The index. + UV scan index + + + + Gets the number of spectrum. + + + + + Gets the size of UV scan index structure by file version. + + The file version. + Struct size specified by the file version + + + + Gets the decoder. + + The file version. + A method that will reads the UV scan index struct from a byte array and convert it back to struct. + + + + Reads the UV scan index structure old from a byte array and + convert it back to struct. + + UV Scan index struct in byte array. + UV scan index struct. + + + + Reads the UV scan index structure old from a byte array and + convert it back to struct. + + UV Scan index struct in byte array. + In struct format + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The sequence row. + + + + + The number of extra user columns. + added at rev 58... + + + + + The number of user texts. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the barcode. + + + + + Gets or sets the barcode status. + + + + + Gets or sets the calibration level + + + + + Gets or sets the calibration file. + + + + + Gets or sets the comment + + + + + Gets or sets the concentration or dilution factor + + + + + Gets the extra user columns. + + + + + Gets or sets the injection volume + + + + + Gets or sets the instrument. + + + + + Gets or sets the internal standard amount + + + + + Gets or sets the method. + + + + + Gets or sets the path. + + + + + Gets or sets the raw file name. + + + + + Gets the format revision of this object + + + + + Gets or sets the sequence row number + + + + + Gets or sets the sample id + + + + + Gets or sets the sample name + + + + + Gets or sets the (application specific) sample type + + + + + Gets or sets the sample volume + + + + + Gets or sets the sample weight + + + + + Gets the user texts. + + + + + Gets or sets the short vial string (obsolete?) + + + + + Gets the sequence row struct, only needed internally for writing raw file. + + + + + The load. + + + The viewer. + + + The data offset. + + + The file revision. + + + The . + + + + + The sorted status log collection. + + + + + Initializes a new instance of the class. + + + + + Gets the count (of sorted items). + This may be lower than the number of records in the file + as duplicate time values are eliminated. + + + + + Add a status blob. + + + The retention time. + + + The status blob to add. + + Set if this is the last log entry + + + + Find the log entry nearest to a given time. + + + The retention time. + + + The . + + + + + The method gets a list of status log entries based on the index. + + + The index into the status log entry (i.e. index into a key value pair). + + + The list of status log entries based on the index. + + + + + get a blob entry, with time stamp. + + + The index. + + + A tuple, containing time (float) and LabelValueBlob. + + + + + get a blob entry, with time stamp. + + + The index. + + + A tuple, containing time (float) and LabelValueBlob. + + + + + get a blob entry, with time stamp. + + The retention time + + A tuple, containing time (float) and LabelValueBlob. + + + + + get item at index + + + The index. + + + The . + + index out of range + + + + + The sort keys. + + + + + clear the list + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The spectrum enhancement options. + + + + + Spectrum enhancement binary data. + Defined a public fields, matching C++ definition + + + + + Initializes a new instance of the class. + + + + + Load (from file). + + + The viewer (memory map into file). + + + The data offset (into the memory map). + + + The file revision. + + + The number of bytes read + + + + + Gets a value indicating whether the refine (combine) section enabled + + + + + Gets a value indicating we using refine, combine or threshold + + + + + Gets the refine window size + + + + + Gets he refine noise threshold + + + + + Gets the combine take points across peak top + + + + + Gets the combine background scaling factor + + + + + Gets the Region 1 method: at peak or use previous + + + + + Gets the start point before the peak top + + + + + Gets the previous points in background + + + + + Gets Region 2 method: at peak or use next + + + + + Gets Points after peak top + + + + + Gets the next point in background + + + + + Gets the cut off threshold + + + + + The status log is a list of label value blobs indexed by retention time. + + + + + Initializes a new instance of the class. + + + The loader id. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The run header. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The file revision. + + + The run header. + + + + + Gets the count. + + + + + Gets or sets the data descriptors. + + + + + Gets the file revision. + + + + + Gets the header file map name. + + + + + Gets the data file map name. + + + + + The method performs a binary search to find the status entry that is closest to the given retention time. + + + The retention time. + + + The status entry containing the of label value pairs for the retention time. + If there are no entries in the log, it will an empty list. + + + + + The method gets all the log entries' value pair at the specified index. + + + The index. + + + The all the log entries' value pair at the specified index. + + + + + get (raw) status log entry by index. + + + The index. + + + The . + + + + + get (raw) status log entry by index into the sorted (data validated) collection + + + The index. + + + The . + + + + + Gets the (raw) status log entry by retention time. + + The retention time. + The log at the given time. + + + + An internal representation of log entry. + + + + + Gets or sets the time. + + + + + Gets or sets the values. + + + + + Gets the labels and index positions of the status log items which may be plotted. + That is, the numeric items. + Labels names are returned by "Key" and the index into the log is "Value". + + + The items which can be plotted. + + + + + Load (from file). + + The viewer (memory map into file). + The data offset (into the memory map). + The file revision. + + The number of bytes read + + + + + Loads the data descriptors. + + The viewer. + The data offset. + The file revision. + True load data succeed, false otherwise + + + + Gets the status log for a given index into the set of logs. + This returns the log and it's time stamp. + + Index into table of logs (from 0 to RunHeader.Number of StatusLog - 1) + The log values for the given index + + + + The method calls to get an + object for the memory mapped view stream that represents the status log's "blob". It will then + divide the blob into individual status log entries without actually reading in the status log items. + + The viewer. + The data offset. + The file revision. + True load status log entries succeed, false otherwise + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + True refresh succeed, false otherwise. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The status log entry which consists of the retention time and the value pairs. + + + + + Initializes a new instance of the class. + + + The time. + + + The value pairs. + + + + + Gets the retention time. + + + + + Gets the value pairs. + + + + + The status log key. + + + + + Initializes a new instance of the class. + + + The retention time. + + + The index. + + + + + Gets the blob index. + + + + + Gets the retention time. + + + + + The status log key comparer. + + + + + The compare. + + + The x. + + + The y. + + + The . + + + + + The summary report, as contained in Xcalibur PMD file + + + + + The summary report template info. + Defines the name of a report, and file format type of the report. + + + + + Load report data + + + The viewer. + + + The data offset. + + + The file revision. + + + The length of data loaded + + + + + Gets or sets the name of the report + + + + + Gets a value indicating whether report is enabled + + + + + Gets the file save format of the report + + + + + The user id stamp wrapper class wraps the user id structure read from the raw file. + + + + + Initializes a new instance of the class. + + + The structure. + + + + + Gets or sets the date and time. + + + + + Gets or sets the user name. + + + + + Gets or sets the windows login. + + + + + The method converts the raw file time structure to a object. + + + + + The wrapper class for the virtual controller information. + + + + + Initializes a new instance of the class by + copying from the structure. + + + The structure to copy from. + + + + + Gets the offset. + + + + + Gets the virtual device index. + + + + + Gets the virtual device type. + + + + + The device base class for all type of devices - UV, PDA, MS, Analog, and Status. + + + + + Gets or sets a value indicating whether this was initialized when the file was in acquisition. + + + + + Initializes a new instance of the class. + + Type of the device. + Index of the registered. + Name of the raw file. + The file revision. + + + + Initializes a new instance of the class. + + raw file loader ID + + The device info. + + + The main MMF viewer. + + + The file version. + + Flag indicates that it's in acquisition or not + Flag indicates that the reading data is old LCQ data or not + + + + This must be called at the start of any derived class initlaize sequence. + Minimial construction work is done before this initializrion, incase the device never used by this app instance. + + + + + Gets or sets the absolute position of the end of this device data. + + + + + Gets the device type. + + + + + Gets the error log entries. + + + + + Gets the instrument id. + + + + + Gets or sets the run header. + + + + + Gets or sets the status log entries. + + + + + Gets the file revision. + + + + + Gets the header file map name. + + + + + Gets the data file map name. + + + + + Gets the raw file information. + + + + + Gets the loader id. + + + + + Gets the raw data viewer. + + + + + Gets the offset of the end of device common info. + + + + + The method gets the scan index for the spectrum. + + The spectrum. + Scan index + + + + The method gets the retention time for the scan number. + + + The scan number. + + + The retention time for the scan number. + + + If the scan number is not in range. + + + + + Initalize device after construction, for use by Lazy pattern. + Must be implemented in derived devices. + + The initialized device + + + + Gets the segment peaks. + + + The scan number. + + + The number segments. + + + The number all peaks. + + + The packet. + + + Flag to indicate the returning peak data should include reference and exception data or not. + + + Segment data + + + + + Gets the packet. + + The scan number. + Flag to indicate the returning peak data should include reference and exception data or not. + For UV device only, negative one (-1) for getting all the channel data by the given scan number + True if noise and baseline data is required + Return the peak data packet + + + + The method loads the common device data structures from MMF view stream. + + The viewer. + The data offset. + The file revision. + The number of read bytes + + + + Initialize the internal fields in acquisition mode. + + Name of the raw file. + The file revision. + + + + Initials the non acquisition. + + The device information. + Name of the raw file. + The file revision. + + + + Initials the old LCQ XCALIBUR file. + + + + + Initializes the buffer information. + + + + + Disposes the buffer information and temporary file. + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + True refresh succeed, false otherwise. + + + + Provide method to create device objects + + + + + Gets the device. + + raw file loader ID + The device information. + The viewer. + The file version. + if set to true [is in acquisition]. + Device object + + + + The instrument id. + This records data about an instrument (such as data units). + It does not contain any scans. + There is one record, written before data acquisition starts. + It never changes. + + + + + Initializes a new instance of the class. + + + The loader id. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The map name. + + + The file revision. + + + + + Gets the error message. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets or sets the absorbance unit. + + + + + Gets the channel labels. + + + + + Gets the flags. + The purpose of this field is to contain flags separated by ';' that + denote experiment information, etc. For example, if a file is acquired + under instrument control based on an experiment protocol like an ion + mapping experiment, an appropriate flag can be set here. + Legacy flags (from LCQ system) + 1. TIM - total ion map + 2. NLM - neutral loss map + 3. PIM - parent ion map + 4. DDZMAP - data dependent zoom map + Newer flags proposed: + high_res_precursors - MS has accurate mass precursors + + + + + Gets the hardware rev. + + + + + Gets a value indicating whether the ID is valid. + + + + + Gets the model. + + + + + Gets the name. + + + + + Gets the serial number. + + + + + Gets the software rev. + + + + + Gets the x axis. + + + + + Gets the y axis. + + + + + Gets a value indicating whether this is a TSQ quantum file. + + + + + Gets the file revision. + + + + + Gets the header file map name. + + + + + Gets the data file map name. + + + + + load (from file) + + + The viewer. + + + The data offset. + + + The file revision. + + + The number of bytes loaded. + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + True refresh succeed, false otherwise + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The mass spectrometer device. + + + + + Initializes a new instance of the class. + + raw file loader ID + + The device info. + + + The viewer. + + + The file version. + + Set if this file is being created + Set if this file version is from a legacy data system + + + + Initializer, desigened for use by Lazy load pattern. + Base object can be created to perform version checks. + When device needs to be used for the first time, Initialize is called. + + The initialized device + + + + Gets the number scan events. + + + The number scan events. + + + + + Gets the number scan event segments. + + + The number scan event segments. + + + + + Sets the scan event segments. + + + + + Gets or sets the trailer extras. + + + The trailer extras. + + + + + Gets the trailer extras data descriptors. + + + + + Gets or sets the trailer scan events. + + + + + Gets or sets the tune data. + + + The tune data. + + + + + Gets the tune method data descriptors. + + + + + Gets or sets the packet viewer. + + + + + Sets the precursor ion tolerance. + + The scan event. + if set to true [b quantum]. + The filter mass precision. + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + This method get the noise, baselines and frequencies data. + This will typically used by the application when exporting mass spec data to a raw file. + The advanced packet data is for LT/FT formats only. + + The scan number. + Set if centroid data should include the reference and exception peaks + Returns the IAdvancedPacketData object. + Thrown if encountered an error while retrieving LT/FT's data, i.e. noise data and frequencies. + + + + The method gets the auto filters. + + + The collection of auto filters. + + + + + Gets the compound name by scan filter. + + The scan filter string. + The compound names + + + + Gets the compound names. + + The compound names + + + + Add the names of all compounds within a scan number range to a set. + + Set to update + First scan to examine + Last scan to examine + + + + Gets the filters. + + The first spectrum. + The last spectrum. + The list of filters for the given scan range + + + + The method gets the label peaks. + Caller may have already obtained some items (scan index and event) + If not: these are passed as null, and will be obtained within this + call as needed. + + + The scan number. + + set if calibration reference and exception peaks should be returned + True if noise and baseline data is required + optional: scan event (to save reading twice) + optional: data about this scan + + The collection of s. + + + Thrown if encountered an error while retrieving label peaks. + + + + + get scan data from mass spec. + + + The scan number. + + + The include reference and exception data. + + + The additional scan data features. + + + The scan index. + + + The scan event. + + + The . + + For data types which we cannot decode + + + + + Find the next scan matching a filter + + start to start from + Scan must pass this filter + the next scan matching the filter criteria from the data file. + If the number of filters passed in is zero, it simply returns the next scan + after position. The search for the next scan always starts at scan position + 1. + + + + The method gets the object that implements for the scan number. + + + The scan number. + + true if (calibration) ref and exception peaks should be included + For UV device only, negative one (-1) for getting all the channel data by the given scan number + True if noise and baseline data is required + + The implementation. + + + Thrown if the packet type is not implemented. + + + + + Get the previous scan index. + + + The cur position (scan). + + + The scan filter helper. + + + The previous scan matching filter. -1 if no matching scans. + + + + + Gets the scan dependents for the specified scan number and filter precision + + The scan number. + The filter precision. + containing master scan dependents information + + + + The method gets the scan event for the scan number. + + + The scan number. + + + The object for the scan number. + + + If there are issues retrieving the scan event (e.g. the scan number is out of range). + + + + + The method gets the scan events for a segment. + + + The segment. + + + The list of scan events. + + + Specified segment is out of range. + + + + + Gets the scan filters from compound names. + + Name of the compound. + The filters for the given compound + + + + The method gets the scan index for the scan number. + + + The scan number. + + + The for the scan number. + + + If the scan number is not in range. + + + + + The method gets the retention time for the scan number. + + + The scan number. + + + The retention time for the scan number. + + + If the scan number is not in range. + + + + + Get simplified labels. + + + The scan number. + + + The include ref peaks. + + + The internal event. + + + The scan index. + + + The simplified (mass/intensity) data. + + + + + Gets the extended scan data for a scan + + scan number who's data is needed + The extended data + + + + The method gets trailer extra for the scan number (1 relative) + + + The scan number - one relative. + + + The label value pairs for the trailer extra at the scan number. + + + If the scan number is not in range or no data was found. + + + + + This method gets one field from trailer extra for the scan number (1 relative) + + + The scan number - one relative. + + index into available items (as per trailer extra header) + + The value pairs for the trailer extra item at the scan number. + + + If the scan number is not in range or no data was found. + + Thrown when item is not an available filed + + + + This method gets all fields from trailer extra for the scan number + + + The scan number. + + + The values for the trailer extra at the scan number. + + + If the scan number is not in range or no data was found. + + + + + The method gets the tune data at the index (0 relative). + + + The index - 0 relative. + + + The list of s for the tune data. + + + If the index is out of range. + + + + + The method gets the tune data at the index (0 relative). + + + The index - 0 relative. + + + The list of s for the tune data. + + + If the index is out of range. + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + True if refreshed + + + + + Get scan event with valid scan number. + + + The scan index. + + + The . + + Thrown if event cannot be read + + + + + Test if a scan number is valid. + + + The scan number. + + + True if valid. + + + + + create chromatograms. + + + The settings. + + + The time range. + + + The tolerance options. + + + set if reference and exception peaks should be included + + + The generated data. + + + + + create chromatograms. + + + The settings. + + + The time range. + + + set if reference and exception peaks should be included + + + The generated data. + + + + + Create legacy format chromatograms, where all chromatograms share the same time range + + Settings for each chromatogram + Common start and end time + Mass tolerance settings + When true: Include base peak masses for all scans + Set if reference peaks are included in the chromatogram + Definition of chromatograms to build + + + + create a flat (1D array) chromatogram list, out of the collections per trace + + + The deliveries. + + + The flat list + + + + + Gets the compound names, for all scans within range. + + first scan to test + last scan to test + The compound names + + + + The method reads the scan index collection. + + + Memory map of file + + + Offset into memory map + + + The file version. + + + Thrown if the number of scan index records is less than the number of spectra. + + + The number of bytes decoded + + + + + Updates the run header structure. + + The run header. + The updated header + + + + Add a compound name. + + + The sorted compound names set. + + + The scan filter helper. + + + The scan event. + + + + + get frequencies. + + + The packet. + + + The (FT) frequency data + + + + + Base peak data has the base peak mass recorded as the "intensity" for each scan + Find the matching scans, and fill in this for the data + + filtered chromatogram, needing base peaks + Base peak masses + + + + Configure the generator to get data from the current file's MS data. + + Generator to configure + True if this kind of chromatogram will need scan data (for example XIC). + Tic chromatograms do not need the scan data. + All scan filters are the same + The filter used for all chromatograms + true if (calibration) ref and exception peaks should be included + + + + Create a set of jobs for legacy chromatogram generation, + where all chromatograms share the same start and end time. + + Definition of chromatograms needed + Number of chromatograms to create + Start time of chromatograms + End time of chromatograms + Defines how mass tolerance is applied to mass ranges, + where start and end mass are identical (within 1.0E-6): + Default: null, range is +/- 0.5 from the low mass. + If not null, delta mass value is calculated from low mass and tolerance, and + a range is created as low mass +/- delta. + When low and high mass are different, this parameter is unused. + If true: add a job to get base peak masses + Set if all chromatograms are using the same scan filter + When not null (when all filter are same), this is the common filter + used by all chromatograms. + Configured list of chromatograms to be generated + + + + Design a chromatogram point builder which just gets the Tic value from each scan header. + + Start time of chromatogram. + End time of chromatogram. + Tic chromatogram generator + + + + Dispose of the buffer info and temp files. + + + + + extend chromatogram settings (to larger interface). + + + The settings. + + + The settings + + + + + fix up event codes. + + + The events for segment. + + + The segment. + + + + + The method get scans event with a validated index to the scan index array. + + + The index to the scan index array. + + + The . + + + Thrown if we cannot get the event. + + + + + The get validated trailer extra blob. + + + The scan number. + + + The . + + Thrown on null trailer blob + + + + + Validates a scan number + + + The scan number. + + + The validated scan number + + + If the scan number is out of range. + + + + + Initials the in acquisition. + + The file revision. + + + + Initializes the buffer information. + + + + + create a buffer info, for a part of this file. + + + The name of the buffer + + + The . + + + + + The method loads the MS device from file. + + Memory map of file + Offset within map + The file version. + + If the run header is null. + + + + + Create the list of all MS scans. + + + The list of scan headers. + + + + + Initials the non acquisition. + + Name of the raw file. + The file revision. + + + + Reads the scan events. + + The viewer. + The data offset. + The file version. + The scan events + + + + The method reads the segments. + + Memory map of file + + Offset into memory map + + + The file version. + + + The number of bytes read + + + + + throw scan number range exception. + + Always throw scan number range exception. + + + + + validate count. + + + The expected count. + + + The collection. + + + The message. + + Thrown if cunt not as expected + + + + + Advanced LT/FT formats only. + + + + + + Initializes a new instance of the class. + + + The centroid reader. + + + The frequencies. + + + + + Gets the centroid data information. + + + + + Gets the frequencies + + + + + Gets or sets the noise data - noise and baseline. + + + + + Class to permit parallel conversion of scan events. + (For resaerch: Can be made to implement IExecute to compare pefformance of + paralell small tasks) + + + + + Gets or sets the event to be converted. + + + + + Gets or sets the converted filter. + + + + + Class to convert filters into strings. + Designed to permit parallel conversions. + + + + + Initializes a new instance of the class. + + + The event to convert. + + + + + Gets the converted filter. + + + + + execute the conversion + + + + + Get the scan filters for each of the compound names. + + + The compound names. + + + The set of filters for each name. + result [n] is the array of filters for compound name [n] + + + + + The run header. + + + + + Initializes a new instance of the class. + + Loader instance Id. + + + + Initializes a new instance of the class. + + Loader instance Id + The run header. + + + + Initializes a new instance of the RunHeader class for real time reading. + + Loader instance Id + Name of the map. + The file revision. + True if it's in device writer creation, otherwise false + True if it's in reading mode, otherwise false + + + + Gets the software revision. + + + + + Gets or sets the start time. + + + + + Gets or sets the end time. + + + + + Gets the first spectrum. + + + + + Gets the last spectrum. + + + + + Gets or sets the low mass. + + + + + Gets or sets the high mass. + + + + + Gets the maximum intensity. + + + + + Gets or sets the max integrated intensity. + + + + + Gets or sets the device file offset. + + + + + Gets or sets the device index. + + + + + Gets or sets the device type. + + + + + Gets the error log filename. + + + + + Gets or sets the error log position. + + + + + Gets or sets the expected run time. + + + + + Gets or sets the filter mass precision. + + + + + Gets the instrument id file name. + + + + + Gets the instrument scan events file name. + + + + + Gets or sets a value indicating whether is in acquisition. + + + + + Gets or sets the mass resolution. + + + + + Gets the number of error log entries. + + + + + Gets or sets the number of spectra. + + + + + Gets the number of status log entries. + + + + + Gets or sets the number of trailer extras. + + + + + Gets or sets the number of trailer scan events. + + + + + Gets or sets the number of tune data. + + + + + Gets or sets the packet position. + + + + + Gets the run header position. + + + + + Gets the scan events filename. + + + + + Gets the spectra filename. + + + + + Gets or sets the spectrum position. + + + + + Gets the status log filename. + + + + + Gets the status log header filename. + + + + + Gets or sets the status log position. + + + + + Gets the tolerance unit. + + + + + Gets the trailer extra filename. + + + + + Gets or sets the trailer extra position. + + + + + Gets the trailer header filename. + + + + + Gets the trailer scan events filename. + + + + + Gets or sets the trailer scan events position. + + + + + Gets the tune data filename. + + + + + Gets the tune data header filename. + + + + + Gets or sets the comment 1. + + + + + Gets the (internal) description tag. + + + + + Gets or sets the comment 2. + + + + + Gets the data packet filename. + + + + + Gets the file revision. + + + + + Gets the header file map name. + It's only meaningful in Generic data. + + + + + Gets the data file map name. + + + + + Gets the internal run header structure. + + + + + + Loads the specified viewer. + + The viewer. + The data offset. + The file revision. + The number of read bytes + + + + Copies the specified source. + + The source. + + + + Copies the run header structure. + + The run header structure. + + + + Initializes this instance. + + sets the revision of the device data format + + + + Increments the number of status log. + + The incremented value + + + + Increments the number of error log. + + The incremented value + + + + Increments the number of trailer extra. + + The incremented value + + + + Increments the number of tune data. + + The incremented value + + + + Increments the trailer scan events. + + The incremented value + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + True all in-acquisition data are remapped successfully; false otherwise. + + + + Refresh data from existing map + + true if OK + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + The status device. + This device only has status logs. + Use implementation of status logs within base class (UVDevice) + + + + + Initializes a new instance of the class. + + raw file loader ID + The device information. + The viewer. + The file version. + if set to true [is in acquisition]. + Set if legacy file format + + + + The UV device. + + + + + Initializes a new instance of the class. + + raw file loader ID + + The device info. + + Raw file name + The file version. + Flag indicates that it's in acquisition or not + Flag indicates that it is an old LCQ data + + + + Gets or sets the _packet viewer. + + + + + get the scan index. + + + The spectrum. + + + The . + + + + + The method gets the retention time for the scan number. + + + The scan number. + + + The retention time for the scan number. + + + If the scan number is not in range. + + + + + get the UV index. + + + The spectrum number. + + + The . + + + + + The method gets the packet. + + + The scan number. + + Flag indicates that it should include reference and exception data or not + For UV device only, negative one (-1) for getting all the channel data by the given scan number + True if noise and baseline data is required. Not used for UV types + Peak data packet + + + + The method loads the UV device information. + + Memory map accessor + Data offset + Raw file version + The number of read bytes + + + + Gets the channel scan packet. + + Index of the scan. + The channel number. + Data from the channel + + + + The method gets a scan of PDA data. + Intensities are scaled (to micro AU) depending on logged units of the device. + The Tic value is also adjusted in the index. + + Memory map into file + + The scan index. + + + The Scaled PDA scan data. + + + + + The method gets a valid index into scan indices. + + + The spectrum. + + + The . + + + Thrown if the spectrum is out of range. + + + + + Fixes up unknown absorbance unit. + + Index of the scan. + + + + Fixes up unknown absorbance unit for channel. + + + + + Fixes up unknown absorbance unit for PDA. + + + + + Initializes the buffer information. + + The loader identifier. + + + + Disposes the buffer information and temporary files. + + + + + The method disposes all the memory mapped files still being tracked (i.e. still open). + + + + + Re-read the current file, to get the latest data. + Only meaningful if the object has an implied backing file (such as IO.DLL and .raw files) + No-op otherwise + + + The . + + + + + The empty packet. + For cases where there is no matching data in the file. + + + + + Gets the segmented peaks. + + + + + Gets the scan index. + + + + + Initializes a new instance of the class. + + + The index. + + + + + Generates low overhead objects, which multiple threads + can use to read from the same raw file in parallel. + Access is typically lockless for 64 bit code, with completed files. + Lock will occur for files which are in acquisition. + + + + + Prevents a default instance of the class from being created. + + + + + Initializes a new instance of the class. + + Name of the file. + Error empty null file name. + + + + This interface method creates a thread safe access to raw data, for use by a single thread. + Each time a new thread (async call etc.) is made for accessing raw data, this method must be used to + create a private object for that thread to use. + This interface does not require that the application performs any locking. + In some implementations this may have internal locking (such as when based on a real time file, which is continually changing in size), + and in some implementations it may be lockless. + + + An interface which can be used by a thread to access raw data + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Provides commonly used functions for raw file reader and writer. + + + + + The struct size lookup. + + + + + Compares the doubles. + + value A + value B + The tolerance. + + Return an that has one of three values: + + + Value + Meaning + + Less than zero + The current instance precedes the object specified by the CompareTo method in the sort order. + Zero + + This current instance occurs in the same position in the sort order as the object specified by the + CompareTo method. + + Greater than zero + This current instance follows the object specified by the CompareTo method in the sort order. + + + + + + Loads the bytes from file. + + The viewer. + The file revision. + The start position. + The size of object. + The sizes. + results in byte array + + + + Reads the structure. + + The type of the parameter of the method that this delegate encapsulates. + The viewer. + The start position. + The file revision. + The sizes. + The type of the return value of the method that this delegate encapsulates. + + + + Determines whether this instance is any. + + The type of objects to enumerate + The data. + True has data, otherwise False. + + + + Gets the enumeration values. + + Type of the enumeration + System type of the enumeration. + The descriptions. + The pre fix. + Array of enumeration descriptions + + + + Gets the name of the file map. + + The filename. + if set to true [b embedded file]. + A memory mapped file name without slashes. + + + + Create a shared memory mapped object name + + Name of the file. + Name of the mapped object. + Memory mapped file name without slashes + + + + Removes the slashes. + + Name of the file. + A new string without any slashes + + + + Builds the name of the unique virtual device file map. + + Type of the virtual device. + Index of the registered. + Name of the file map. + A unique memory mapped file name + + + + Creates the no name mutex. + + The mutex class enforces thread identity, so a mutex can be released only by the thread that acquired it. + Mutex are of two types: local mutex, which are unnamed, and named system mutex. + + A local mutex exists only within your process. It can be used by any thread in your process that has a reference + to the mutex object that represents the mutex. + + Each unnamed mutex object represents a separate local mutex. + + On a server that is running Terminal Services, a named system mutex can have two levels of visibility. If its name + begins with the prefix "Global\", the mutex is visible in all terminal server sessions. If its name begins with the + prefix "Local\", the mutex is visible only in the terminal server session where it was created. In that case, a separate + mutex with the same name can exist in each of the other terminal server sessions on the server. If you do not specify a prefix + when you create a named mutex, it takes the prefix "Local\". Within a terminal server session, two mutex whose names differ + only by their prefixes are separate mutex, and both are visible to all processes in the terminal server session. That is, + the prefix names "Global\" and "Local\" describe the scope of the mutex name relative to terminal server sessions, + not relative to processes. + + A new instance of Mutex object. + + + + Creates a named mutex then waits on it if it is busy. + Since we have an multithreading issue here (see OpenFileMapping and RunHeader bNewMapObject), + a Mutex is introduced here to ensure that only one thread gets access at a time. + This will create a mutex name based on the file that is being used and not just a global + mutex for all files + + Filename of the file. + True add Global prefix to the file name; otherwise no. + Store errors information + + The handle of the mutex or NULL if an error occurs. + + + + + Releases the mutex. + + The mutex. + + + + Retries the method if it fails. + + The type of the return parameter of the method that this delegate encapsulates. + The method. + Memory mapped file name + The number retries. + The millisecond to wait before retry. + True the method get executed, false otherwise. + + + + Retries the method. + + The type of the parameter of the method that this delegate encapsulates. + The method. + The number retries. + The millisecond to wait before retry. + The type of the return value of the method that this delegate encapsulates. + + + + Makes the long. + + The low part. + The high part. + Combine the low and high part to an integer + + + + Validates the name of the file. + + Name of the file. + Error message + True if file is existed; otherwise false. + + File doesn't exist: + fileName + + + + + Validate64s the bit. + + Only 64 bit applications are supported by this project + + + + Determines whether the current windows user is Administrator. + + True the current user has Administrator access + + + + To the message and complete stack trace. + + The exception. + Exception message, including the stack trace. + + + + Updates the errors. + + The errors. + The message. + The error code. + + + + Corrects the raw file name for environment. + If the application is running on Unix environment, don't adjust the file name. + File and directory names are case sensitive in Unix. Convert it to lowercase when on + Windows OS. + + Name of the raw file. + In Windows OS, convert the raw file name to lowercase; otherwise, no changes need. + + + + Structures the size lookup initializer. + + An array of internal structures size + + + + The try reopen mutex. + + The mutex name. + + Grant access to the named mutex. + The errors. + The . + + + + Provides extension methods for Adjustable Scan Rate Profile index data + + + + + Convert PDA Profiles index data to byte array. + + The packets. + The number of scan data + Byte array of ASRProfileIndexStruct + + + + The audit trail extension. + + + + + The save. + + + The audit Trail. + + + The binary writer. + + + The errors. + + + The . + + + + + Saves the audit trailer to IOleStream. + + The audit trail. + The IOleStream object. + The errors. + True if audit trail saved to file; otherwise false. + + + + The auto sampler config extension. + + + + + The save. + + + The auto sample config. + + + The binary writer. + + + The errors. + + + The . + + + + + Provides methods to write common device information + 1. Instrument information + 2. Instrument expected run time + 3. Status log header + 4. Status log + 5. Error log + + + + + Generic type headers. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets a value indicating whether this file has detected a warning. + If this is false: Other warning properties in this interface have no meaning. + + + + + Gets the error code number. + Typically this is a windows system error number. + + + + + Gets the error message. + + + + + Gets the warning message. + + + + + Gets the file revision. + + + The file revision. + + + + + Gets the device type. + + + + + Gets the data stream writers. + Used for writing device data, each stream responsible for different data set, + i.e. instrument ID, status log, error log, etc. + + + The stream writers. + + + + + Gets the device run header. + + + The device run header. + + + + + Gets the data file map name. + + + + + Gets a value indicating whether [in creation]. + + + true if [in creation]; otherwise, false. + + + + + Gets the run header memory map accessor. + + + The run header memory map accessor. + + + + + Gets or sets the written generic headers flags. + Flag so we know if a generic header has been written + There are 3 types of generic header - Status log, Trailer extra and Tune + + + + + Initializes a new instance of the class. + + Type of the device. + Index of the device. + Name of the raw file. + The file revision. + if set to true [in acquisition]. + Revision code for the device (set in run header). Default 1 + + + + Write the Instrument ID info to the raw data file. The + Instrument ID must be written to the raw file before any data can be + acquired. + + The instrument identifier. + True written instrument information to disk file; otherwise False. + + + + Wrapper to write the expected run time. All devices MUST do this so + that the real-time update can display a sensible Axis. + + The expected Run Time. + True if data valid. + + + + update to ready state, if all prerequisites have been met + + + + + Writes the instrument comments. + These are device run header fields - comment1 and comment2. They are part of the Chromatogram view title (Sample Name and Comment). + These fields can be set only once. + + The comment1 for "Sample Name" in Chromatogram view title (max 39 chars). + The comment2 for "Comment" in Chromatogram view title (max 63 chars). + True if comment1 and comment2 are written to disk successfully, false otherwise. + + + + Writes the status log header. + + The header items. + true written status log header to the disk file; otherwise False. + + + + If any Status Log details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + + The retention time. + The status data. + true written status log entry to the disk file; otherwise false. + + + + If any Status Log details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + + The retention time. + The data. + true written status log entry to the disk file; otherwise false. + + + + Write an error log to the raw data file. + + The retention time. + The error log. + True error log write to the disk file, otherwise False. + + + + Writes the generic header to a file. + + The header items. + The written flag, i.e. status log header. + Binary writer id + The shared memory for header buffer information. + The shared memory for data buffer information. + return a header descriptors object. + True if the generic header is written to the file; false otherwise. + + + + if the file is in error or not ready to acquire yet, fail. + + The error message. + True if it cannot be acquired due to an error. + + + + Initializes the index of the device. + + The loader identifier. + Index of the registered. + Name of the raw file. + The file revision. + if set to true [in acquisition]. + True obtained a validate control index; otherwise False. + + + + Initializes the run header. + + The device information. + Index of the registered device. + true if OK + Revision code + true if OK + + + + This method will use the binary stream object to writes the status log entry to the file. + + The writer. + The retention time. + The data. + True the data write to the disk file; otherwise False. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Defines the BufferInfo type for backward compatibility with FileIO. + Ex. HomePage real time plot checks the Number Element field in scan index buffer info, + to determine whether the scans data is available for display and + raw file stitching is also using it. + + + + + Initializes a new instance of the class. + + The device identifier. + Name of the file. + Name of the object. + True open an existing shared memory map otherwise create. False only open an existing shared memory map file. + Size of the element. + The mask. + + + + Determines whether this instance has reference. + + True if there's other objects referencing it, otherwise False. + + + + Gets a value indicating whether this instance has error. + + + true if this instance has error; otherwise, false. + + + + + Gets the error message. + + + The error message. + + + + + Gets the error code. + + + The error code. + + + + + Gets the size of the data written to the buffer. + + + The . + + + + + Increment the number of elements by 1 and then updates to the shared memory map. + + + + + Increments the reference count and update. + + + + + Decrements the reference count and update. + + + + + Set the size of a data element, i.e. Status Log Header, this will be the total size of the header items in bytes. + + The data Block Size. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Refresh local data from the memory maps. + + + True if OK + + + + + The device acquire status. + + + + + The _device status. + + + + + Initializes a new instance of the class. + + + + + Sets the device status. + + + + + Gets a value indicating whether is device setup. + + + + + Gets a value indicating whether is device ready. + + + + + Gets a value indicating whether can device be setup. + + + + + Gets a value indicating whether can device acquire data. + + + + + The structure type. + + + + + The generic data item structure type. + + + + + The raw file info structure type. + + + + + The run header structure type. + + + + + The file header structure type. + + + + + The sequence row info structure type. + + + + + The UV scan index structure type. + + + + + The instrument id info structure type. + + + + + The auto sampler config structure type. + + + + + The ASR profile index structure type. + + + + + The profile data packet 64 type. + + + + + The mass spec reaction structure type + + + + + The mass spec reaction struct01 type + + + + + The mass spec reaction struct02 type + + + + + The mass spec reaction struct03 type + + + + + The high resource spec type structure type + + + + + The low resource spec type structure type + + + + + The buffer information structure type + + + + + The sequence information type + + + + + The scan event information structure + + + + + The scan index structure type + + + + + The noise information packet structure type + + + + + The packet header structure type + + + + + The profile segment structure type + + + + + The audit data structure type + + + + + The standard accuracy struct type. + + + + + The virtual controller information structure + + + + + The end of type. + + + + + ASR profile index + The offset where the field begins + + + + + The data position. + + + + + Profile data packet 64 + The offset where the field begins + + + + + The data position off set + + + + + RunHeader structure + The offset where the field begins + + + + + The last spectrum. + + + + + The number status log. + + + + + The number error log. + + + + + The comment1 + + + + + Is in acquisition flag + c# bool is an alias for System.Boolean just as integer + + + + + The mass resolution. + + + + + The expected run time. + + + + + The number trailer scan events + + + + + The number trailer extra + + + + + The number tune data + + + + + The filter mass precision + + + + + Buffer Info structure + The offset where the field begins + + + + + The number of elements. + + + + + The size of the data block + + + + + The reference count. + + + + + Enumeration of possible data streams during acquisition. + + + + + The instrument id file. + + + + + The status log header file. + + + + + The status log file. + + + + + The error log file. + + + + + The data (peak) packet file. + + + + + The spectrum file (scan index file). + + + + + The scan events file + + + + + The trailer header file + + + + + The trailer extra file + + + + + The tune data header file + + + + + The tune data file + + + + + The trailer scan events file + + + + + The end of type. + + + + + Enumeration of generic header. + The flag indicates which generic header has been written + + + + + The written status log header + + + + + The written trailer extra header + + + + + The written tune header + + + + + Enumeration of possible Virtual Device Acquire Status + + + + Device Status New + + + Device Status Setup + + + Device Status Ready + + + Device Status Acquiring + + + + Raw File Info structure + The offset where the field begins + + + + + Defines the DeviceErrors type. + + + + + Initializes a new instance of the class. + + + + + Gets the error code number. + Typically this is a windows system error number. + If no number is encoded: + Returns "1" if the error message is null + Returns "2" is there is an error message. + A return of "0" will occur if there has been no error message + + + + + Gets the error message. + + + + + Gets a value indicating whether has error. + + + + + Gets a value indicating whether has warning. + + + + + Gets the warning message. + + + + + Adds an Information message. + Information is added as a line. + + + The Information. + + + + + Adds an Warning message. + Warning is added as a line. + + + The Warning. + + + + + The clear all. + + + + + The clear error. + + + + + Sets an Information message. + This initializes the warning message to the "Information:" + the message + but initialize "HasWarning" to false, so callers know there are no warnings + Information may be used to log progress, and inspected on error. + Information is added as a line. + + + The Information. + + + + The update error. + The error message. + The error code.. + Always false. + The zero value is intended for no error and should not be used for clearing error here. + + + update error. + The error exception. + The zero value is intended for no error and should not be used for clearing error here. + Always false. + + + + append error, plus newline of there was an error before + + + The message. + + + + + update warning message and state. + Clears any previous warnings + + + The warning. + + + true if has warning. + + + + Append an error message. + The error exception. + The zero value is intended for no error and should not be used for clearing error here. + Always false. + + + + Format an information line. + + + The information. + + + The . + + + + + Format a warning line. + + + The information. + + + The . + + + + The update error. + The error message. + The error code.. + Always false. + The zero value is intended for no error and should not be used for clearing error here. + + + + Append a message, as a line. + + + The text. + + + + + Clear all warnings. + + + + + Provides functions to create/update a device method. + The device methods are for each configured instrument and store in instrument method file. + Each device method contains two or more streams. + One calls "Data", stores a private representation of the method, in a binary or XML format. + Second calls "Text, stores an Unicode text description of the method. + Other streams may also be created, that are private to the device, i.e. TNG-Calcium has "Header" stream. + Format: + TNG-Calcium (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + Header (Method stream - byte array) + + + + + Initializes a new instance of the class. + + name;@Device method name cannot be empty. + + + + Gets all streams for this instrument, + Typically an instrument has a stream called "Data" containing the method in binary or XML, + and "Text" contains the plain text form of the method. + Other streams (private to the instrument) may also be created. + + + + + Gets or sets the "Text" plain text (unicode) form of an device method. + This property provides a quick way to access the "Text" stream. + Accessing the property, returns empty string if the "Text" stream does not exist; otherwise, it will retrieve the stream + from the StreamBytes list. + Updating the property, overwrite the existing content of the "Text stream if it already exists; otherwise, it + will add the "Text" stream to the StreamBytes list. + + + + + Gets all stream data names for this device storage. + Typically an instrument has a stream called "Data" containing the method in binary or XML + and "Text" contains the plain text form of the method. + Other streams (private to the instrument) may also be created. + --- + In order to add/update the stream, caller should first call this to get the list of streams. + Once you've the list, you can start adding a new stream or editing/removing an existing method stream. + --- + If the stream is set to null, during the save operation, it'll save as zero length stream. + + List of device streams. + + + + It's used internally to create a device method builder object for instrument method. + + + + + Creates the device method object. + + IDeviceMethod object. + + + + This static class contains factories to create device writers. + UV Device, PDA Device, MS Device and Status Device writers. + Marked internal, as this factory is only available + to internal company or partner code, via public key. + + + + + Creates the UV type device writer to write UV data. + + Connect to a "in-acquisition" raw file + Type of the device to be created. + A UV type of device write to write UV, Analog and MS Analog data to the disk file + + + + Creates Analog device writer to write analog data. + + Connect to a "in-acquisition" raw file + Type of the device to be created. + A device writer to write analog data to the disk file + + + + Creates the PDA device writer. + + Connect to a "in-acquisition" raw file + A device writer to write PDA data to the disk file + + + + Creates the mass spec device writer. + + Name of the file. + If > 1: Defines the highest packet type that this device may use. + By default this is 1, as that was the value used in original "version 66" raw files. + All apps linked to any version of this dll can decode such files. + New devices may have new data types, which can only be decoded by (matching) newer versions of this code. + A device writer to write mass spec data to the disk file + + + + Creates an "other" device writer. + These devices may also be called "status devices" + or "diagnostic devices" as they have logs only, and + cannot record scan data. + + Name of the file. + A device writer to write mass spec data to the disk file + + + + The instrument method will be saved in the raw file. + + + + + Initializes a new instance of the class. + + The instrument Method. + + The should dispose flag indicating whether the embedded instrument method should be removed after the raw file writer is closed. + + + + + Gets the instrument method. + + + + + Gets or sets the end offset. + + + + + Gets a value indicating whether this is partial save or full save. + + + + + The save method. + + The binary writer. + The errors. + The partial save. + True is successful + + + + The dispose. + + + + + Provides methods to write error log item to disk file + + + + + Saves the error log item. + + The writer. + The retention time. + The error log + Store errors information. + True if error log item is written to disk successfully, False otherwise + + + + The file header extension. + + + + + Extension method to save file header. + + + The file header to save. + + + The binary writer used to write data. + + + The errors. + + + The . + + + + + Calculates the instrument method file checksum. It's duplicating exactly the Xcalibur checksum for compound doc file. + + The instrument method file (root storage). + The calculated checksum value. + The error message if error occurs. + True if the calculation is successfully; otherwise false. + rootStorage;@Instrument method file storage cannot be NULL. + + + + Checks if the who modified has changed. + + The file header. + The new file header. + True if who modified has changed; otherwise false. + + + + The generic data item extension. + + + + + Saves the generic data item. + + The writer. + The retention time. + The data. + The errors. + True if generic data item is written to disk successfully, False otherwise + + + + Saves the generic data item. + + The writer. + The data. + The errors. + True if generic data item is written to disk successfully, False otherwise + + + + Provides save extension methods for generic header + + + + + Write generic header item to the file. + + Generic header definitions + The binary writer. + Number of the header items. + The errors object for storing error information. + True generic header saved to the disk, false otherwise. + + + + Converts the header items to data descriptors. + + The header items. + The data descriptors. + + + + Provides methods to write generic header item to disk file. + + + + + Saves the generic header item. + + The generic header item. + The writer. + store errors information. + True if the generic data item is written to disk, otherwise False + + + + Save the instrument data information to the disk file + + + + + Saves the instrument information. + + The instrument identifier. + The writer. + The errors. + True instrument ID saved to the disk, false otherwise. + + + + It's used internally to create an instrument methods exporter object. + + + + + Create an IInstrumentMethodExporter interface to + read instrument method from a raw (.raw) file and able + to write it to an instrument method (.meth) file. + + Raw file to open + Interface to read instrument method from file + + + + Provides methods to create/open existing instrument method file for editing, + such as creating device method and saving method data. + ---- + Existing layout of an instrument method file. + Instrument Method File + Audit Data + LCQ Header + --- + --- Device Methods + --- + SIIXcalibur (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + SimulationMS (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + TNG-Calcium (IDeviceMethod) + Data (Method stream - byte array) + Text (string) + Header (Method stream - byte array) + + + + + Initializes a new instance of the class. + The instrument method writer should open a file if it exists; otherwise, a new method file should be created. + + + The instrument methods builder. + The factory creates an IInstrumentMethodBuilder object and passes it to + the writer constructor using dependency injection pattern, and the writer uses it to + open/create/add/update a file, without any knowledge of actual implementation of this + builder is, i.e. it can be a compound document builder or XML builder. + + + + + Gets the instrument method file name. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets the error message. + + + + + Gets the file header for the instrument method file + + + + + Updates the file header field - "Description". + + The description. + + + + Update the instrument method file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + + The file header. + File header cannot be null. + + + + Get the list of device methods which are currently defined in this instrument method. + Returns an empty list, if this is a newly created instrument method. + --- + In order to add/update device method, caller should first call this to get the list of devices. + Once you've the list, you can start adding a new device method or editing/removing an existing device method. + + The list of device methods. + + + + Saves the instrument methods to the file. + If this is an "Unnamed" instrument method writer, caller should use "SaveAs" method with the output + file name; otherwise ArgumentNullException will be thrown. + + + True if save successfully; otherwise false. + + name;@The instrument methods file name cannot be empty. + + + + Save this instrument methods to a file. + It should overwrite the instrument methods file if the file exists; otherwise, a + new file should be created. + + File name of the instrument method. + True if save successfully; otherwise false. + name;@The instrument methods file name cannot be empty. + + + + It's used internally to create an instrument methods writer object. + + + + + Creates the instrument method writer. + The instrument method writer should open a file if it exists; otherwise, a in-memory method file should be created. + If the input file name is empty, a in-memory method file should be created. When trying to save the "Unnamed" in-memory + method file, caller should use "SaveAs( fileName )" method with a specified file name. + + Name of the instrument method file. + Instrument method writer object. + + + + Provides methods to write mass spec device data. + The "PrepareForRun" method should be called during the prepare for run state, before the data acquisition begins. + The rest of the methods will be used for data logging. + + + + + The data initial offset + Mass spec data is written directly to the raw file after the meta-data sections. + + + + + Generic type headers. + + + + + Initializes a new instance of the class. + + Type of the device. + Index of the device. + Name of the raw file. + if set to true [in acquisition]. + The file revision. + The final known packet type (at the time of writing). + For example: If the MS is compiled against a newer raw file DLL, needed for it's new format, + then the value saved in a file could be a higher value than that compiled into some data processing application + built 2 years earlier. On opening the MS data, the raw file reader returns an Error to that application. + The application should then issue a message telling the customer to upgrade. + An instrument may set this to a lower value (the highest format required for the current acquisition method), + to signal that older format data is in the file, even if the device was compiled against a newer DLL. + + + + Gets a value indicating whether the PrepareForRun method has been called. + + + True if the PrepareForRun method has been called; otherwise, false. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + This method should be called (when creating an acquisition file) during the "Prepare for run" state. + It may not be called multiple times for one device. It may not be called after any of the data logging calls have been made. + It will perform the following operations: + 1. Write instrument information + 2. Write run header information + 3. Write status log header + 4. Write trailer extra header + 5. Write tune data header + 6. Write run header information - expected run time, comments, mass resolution and precision. + 7. Write method scan events. + + The instrument ID. + The generic data headers. + The run header information. + Method scan events + True if all the values are written to disk successfully, false otherwise. + + + + This method is designed for exporting mass spec scanned data to a file (mostly used by the Application). + It converts the input scanned data into the compressed packet format and also generates a profile index + if needed by the specified packet type. + Overall, it writes the mass spec data packets, scan index (scan header) and trailer scan event if it is provided, + to a file. + This method will branch to the appropriate packet methods to compress the data block before being written to disk. + + The transferring data that are going to be saved to a file. + True if mass spec data packets are written to disk successfully; false otherwise. + Instrument data cannot be null. + The packet type is not yet implement. + + + + This method is designed for mass spec device data writing. + To provide fast data writing, this method writes the mass spec data packets directly to file (without performing + any data validation and data compression) by the specified packet type. + All data validation and data compression currently are done in the device driver code. + + The binary block of data to write. + Type of the packet. + True if mass spec data packets are written to disk successfully, false otherwise. + Not Supported Exception + + + + This method is designed for mass spec device data writing. + It writes the mass spec scan index (a.k.a scan header) and trailer scan event (if it's available) to the disk. + + Index of the mass spec scan. + The trailer scan event [optional]. + True if scan index and trailer scan event (if it's available) are written to disk successfully, false otherwise. + + + + If any trailer extra details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the object array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The trailer extra data stores in object array. + True if trailer extra data is written to disk successfully, False otherwise. + + + + If any Trailer Extra details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The trailer extra data stores in byte array. + True if trailer extra entry is written to disk successfully, False otherwise + + + + If any tune details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the object array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The tune data stores in object array. + True if tune data is written to disk successfully, False otherwise. + + + + If any tune data details are to be written to the raw data file + then the format this data will take must be written to the file while + setting up i.e. prior to acquiring any data. + The order and types of the data elements in the byte array parameter + to the method needs to be the same as the order and types that are defined in the header. + + The tune data stores in byte array. + True if tune data entry is written to disk successfully, False otherwise. + + + + Writes the generic data. + + The writer. + The data. + Size of the header. + The error object which stores errors information. + True if generic data (trailer extra data and tune data) is written to disk; false otherwise. + + + + Writes the run header information. + + The device acquire status. + The errors object which stores errors information. + The written flag. + The method. + True if the run header information is written to disk successfully, False otherwise. + + + + Attaches the mass spec packet stream to raw file. + + Name of the in-acquisition raw file. + The mass spec device run header structure. + True if mass spec packet stream is attached to in-acquisition raw file; false otherwise. + + + + Initializes the buffer information shared memory objects. + + + + + Initializes the temporary files. + + The run header structure. + True if all temporary files are created successfully; false otherwise. + + + + Writes the instrument data packets to the file. + + The block of data to write. + Size of the data block. + Size of each packet in the data block. + if set to true to update the number of packets; false to not update. + True if packets are written to disk successfully, false otherwise. + + + + Writes the mass resolution for the mass spec device to file. + This field can be set only once. The default mass resolution value is 0.5 + + Width of the half peak. + True if mass resolution is written to disk successfully, False otherwise + + + + Writes the mass spec scan index (header) to disk + + Index of the mass spec scan. + True if the scan index is written to disk successfully, false otherwise. + + + + Writes the mass spec scan events table. + + The mass spec scan events table. + + True if mass scan events table is written to disk successfully; false otherwise. + + mass Spec Scan Events + + + + Writers the filter mass precision for the mass spec device to file. + This field can be set only once. The default precision value is 2. + + The precision. + + True if filter mass precision is written to disk successfully, False otherwise + + + + + Write the Trailer Extra Header (format) info to the raw data file. + If caller is not intended to use the trailer extra data, pass a null argument or zero length array. + ex. WriteTrailerExtraHeader(null) or WriteTrailerExtraHeader(new IHeaderItem[0]) + + The trailer extra header. + + True if trailer extra header is written to disk successfully, False otherwise + + + + + Writes the trailer scan event to disk. + + The trailer scan event. + True if trailer scan event is written to disk, false otherwise. + + + + Write the Tune Header (format) info to the raw data file. + If caller is not intended to use the tune data, pass a null argument or zero length array. + ex. WriteTuneHeader(null) or WriteTuneHeader(new IHeaderItem[0]) + + The tune header. + + True if tune header is written to disk successfully, False otherwise + + + + + The method extension. + + + + + Saves the instrument method to the provided binary writer. + + Method data to save + Writer to use to save + Any error information that occurred + True is successful + + + + This class includes static methods which turn C# objects from the MS writer interface + into byte arrays, such that they a be transported with any protocols that can transport binary data. + The data packing is intended to match the binary format of a raw file. + + + + + Packs IInstrumentDataAccess into a byte array + + Data to be packed + the packed data, or an empty array if there is an issue packing the data + + + + Unpacks a byte array into IInstrumentDataAccess + + Data to be unpacked + the unpacked data + + + + Binary (byte array) data from the generic headers of a mass spectrometer. + + + + + Packed trailer extra headers + + + + + Packed status log headers + + + + + Packed tune headers + + + + + Gets or sets a tool which can format "trailer" log entries as bytes. + + + + + Gets or sets a tool which can format "status" log entries as bytes. + + + + + Gets or sets a tool which can format "tune" log entries as bytes. + + + + + Convert all mass spec generic headers into byte arrays + + Headers to pack + The headers packed into byte arrays + + + + pack headers into a single byte array + + + byte array with all headers + + + + Insery an array within another, prceeded by the array length + + data to inseret + array to copy into + offset of tqrget array, updated by inserted data + + + + Headers for all logs as byte arrays + + + + + Separates out Trailer, Status and Tune headers from a byte array. + + + Inteface to retrieve separate log headers + + + + Unpack all mass spec generic headers from byte arrays + + Headers to unpack + The headers packed into byte arrays + + + + Unpack bytes into a Generic header + + Bytes for the header + The table of headers for this generic format + + + + Pack a set of header items into a byte array + + The items to be packed + A byte array for the headers + + + + Pack a set of header items into a byte array + + The items to be packed + A byte array for the headers + + + + Write generic header item to the memory stream for data packer. + The implementation of the header packing is based on the header unpacking item code (UnpackHeaderItem) + + Generic header definitions + The memory stream writer. + Number of the header items. + + + + Convert a mass spec run header to a byte array + + + An array representing the header + + + + Convert a byte array to a mass spec run header + + + An array representing the header + + + + Unpacks a string, which is preceded by it's length + + message + the start index + + + + + Convert the scans events to a byte array + + the events + data packed as a byte array + + + + Write scan events to a stream + + events to encode + stream to save bytes + error messages + + + + + Convert the scans statistics to a byte array + + the stats + data packed as a byte array + + + + Convert the scans statistics to a byte array + + the stats + data packed as a byte array + + + + Convert a scan event into a byte array + + the event to convert + the data as a byte array + + + + Converts a string tp a byte array, with the string length also encoded + + String to encode + Byte array of the length prefixed string + + + + Convert a byte array to a string + + bytes of string + the converted string + + + + Data for a scan, converted into byte arrays + + + + + Gets or sets the converted scan event + + + + + Gets or sets the converted scan stats + + + + + Gets or sets the converted scan data + + + + + + + + + + + Convert this object to a byte array + + + + + + Create Packed Data from a byte array + + + + + + default constructor + + + + + Pack data from an MS scan to byte arrays. + + Data to be packed + Packed data + + + + Unpack data from an MS scan from byte arrays. + + Data to be packed + Packed data + + + + Contains code for writing various Xcalibur data system files + + + + + Instrument method file is a compound document file (contains a ROOT Storage) which are organized in a + hierarchy of storages. The names of all device storages and streams that are + direct members of a storage must be different (unique). Names of device streams or + storages that are members of different storages may be equal. + Example. + Instrument method file + Root storage + |-stream0 + |-storage1 + |-stream1 + |-stream2 + |-storage2 + |-stream1 + ---- + + + + + + Initializes a new instance of the class. + Opens the instrument method file for editing if the file exists; otherwise, creates an in-memory + file. After you've finished editing, calls the "Save" or "SaveAs" method to persist the data to the file. + + The instrument method file Name. + + + + Gets the name of the instrument method file. + + + + + Gets the file header for the instrument method file + + + + + Creates a device method storage. + + The storage (root storage). + Name of the device method storage. + Stores the error information if error occurs. + Device method storage. + + + + Saves the audit trail. + + The storage (root storage). + The audit trail. + Stores the error information if error occurs. + True if audit trail is saved successfully; otherwise false. + + + + Saves the file header to stream. + + The storage. + The file header. + The current date time. + Stores the error information if error occurs. + True if file header saved successfully; otherwise false. + + + + Saves the device method to stream. + + The device method. + The storage. + Stores the error information if error occurs. + True if the device method saved successfully; otherwise false. + + + + Saves the device method streams, i.e. "Text", "Data, etc. + If the stream value is NULL, it will save an empty stream. + + The storage. + The list of streams which are going to save. + Stores the error information if error occurs. + True if method streams are saved successfully; otherwise false. + + + + Updates the file header field - "Description". + + The description. + + + + Update the instrument method file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + + The file header. + + + + Get the list of device methods which are currently defined in this instrument method. + Returns an empty list, if this is a newly created instrument method. + --- + In order to add/update device method, caller should first call this to get the list of devices. + Once you've the list, you can start adding a new device method or editing/removing an existing device method. + + The list of device methods. + + + + Save this instrument methods to a file. + It should overwrite the instrument methods file if the file exists; otherwise, a + new file should be created. + + File name of the instrument method. + True if save successfully; otherwise false. + name;@The name cannot be empty. + + + + Opens an existing compound file (instrument method). + + Name of the file. + + + + Provides common methods to deal with IOleStorage and IOleStream. + + + + + Reads the device stream data from the storage. + + The storage (either the root storage or device method). + Name of the stream data. + Returns the stream data in byte array. + Returns the error information if error occurs. + True if data saved successfully; otherwise false. + + + + Saves the device stream data to the compound storage. + + The method. + The storage (either the root storage or device method). + Name of the stream data. + Stores the last error information. + True if data saved successfully; otherwise false. + + + + Saves the file header to the IOleStream. + + The file header object. + The IOleStream object. + Stores the error information if error occurs. + True if the file header saved successfully; otherwise false. + + + + Creates the compound document file (instrument method file) with a specified file name. + + The root storage object (IOleStorage). + + + + Defines the PDA Device Writer type. + + + + + Initializes a new instance of the class. + + Type of the device. + Index of the device. + Name of the raw file. + if set to true [in acquisition]. + The file revision. + + + + Writes both the PDA instrument data and index into the disk. This is the + simplest format of data we write to a raw file. + + The PDA UV instrument data. + Index of the PDA instrument scan. + + True if scan data and index are written to disk successfully, False otherwise + + + Instrument Data + or + PDA Scan Index + + + + + PDA writer doesn't support this method. + This method is intended for UV type of device writers + + The UV type of the scan data. + The UV type of the scan index. + + Not supported exception will be thrown. + + PDA writer doesn't support. + + + + Releases unmanaged and - optionally - managed resources. + + + + + The peak data. + + + + + The _end of position. + + + + + The _current start of data. + + + + + The _next start of data. + + + + + The _current index. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the packet type. + + + + + Converts the raw scan into packets. + + The mass spec data. + Mass spec profile data packets. + The converted packets in compressed form + Not Supported Exception + The instrument scan data cannot be null. + + + + The below packet types are not supported for exporting. + + Type of the packet. + True if the packet type is supported, otherwise, throw not implemented exception. + The packet type is supported. + + + + Writes the instrument data. + + The writer. + The data. + The errors. + True instrument data saved to the disk, false otherwise + + + + Writes the profile index information to disk + + The data. + Size of the data. + True the indexes stored to disk, false otherwise. + This format type does not support. + + + + Writes the indices. + + The writer. + The number of profile indexes + This format type does not support. + + + + Gets or sets the current start of data. + + + + + Gets the next start of data. + + + + + Gets or sets the data initial offset. + + + The data initial offset. + + + + + Generates the profile index data packets. + + The instrument data. + Size of the data. + ProfileDataPacket64 array object. + + + + Provides extension methods for Profile Index Data Packets + + + + + Convert the profile index data packets structure to a byte array. + + The profile data packets. + Profile index data packets in byte array form. + profile Data Packets + + + + The device temp file writer. + + + + + Gets the run header. + + + + + Initializes a new instance of the class. + Creates objects which are used for all device types + + + The loader id. + + + The device info. + + + The raw file name. + + + The file revision. + + + The device errors. + + + + + The save. + + + The writer. + + + The errors. + + + The packet data offset. + + + The . + + + + + The write temp file data. + + Meaning of this file + + The writer. + + + The errors. + + + The file name. + + + The max Bytes Copy. + + + The . + + + + + Gets the size of the data from the buffer and compares to size of the temp file. Only copy minimum bytes. + Used by some temp files that write garbage data to temp file. + + + The size. + + + The number Entries. + + + The temp file name. + + + The . + + + + + Disposes the shared memory resources used by the device. + + + + + Refresh all objects from data in memory maps. + Do not create new maps. + + + True if OK + + + + + Provides extension methods to write raw file info to the shared memory mapped buffer + + + + + Adds the controller information. + we are being created by the virtual controller so we need to register ourselves with the global + storage so other instantiations of this file will be able to read this controller information + + Device Identifier + Type of the device. + Index of the device. + Shared memory mapped file name + Store errors information + True if controller information is written to disk successfully, False otherwise + + + + Gets the index of the available controller. + + The device identifier. + Name of the map. + The errors. + True able to obtain a controller index; otherwise False. + + + + Provide method to export an instrument method from a raw file + + + + + + + Initializes a new instance of the class. + + Name of the raw file. + + + + Gets a value indicating whether the underlying raw file has instrument method. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Export the instrument method to a file. + Because of the many potential issues with this, use with care, especially if + adding to a customer workflow. + Try catch should be used with this method. + Not all implementations may support this (some may throw NotImplementedException). + .Net exceptions may be thrown, for example if the path is not valid. + Not all instrument methods can be exported, depending on raw file version, and how + the file was acquired. If the "instrument method file name" is not present in the sample information, + then the exported data may not be a complete method file. + Not all exported files can be read by an instrument method editor. + Instrument method editors may only be able to open methods when the exact same list + of instruments is configured. + Code using this feature should handle all cases. + + The output instrument method file path. + Force over write. If true, and file already exists, attempt to delete existing file first. + If false: UnauthorizedAccessException will occur if there is an existing read only file. + + True if the file was saved. False, if no file was saved, for example, + because there is no instrument method saved in this raw file. + + No open raw file. + + + + Gets names of all instruments, which have a method stored in the raw file's copy of the instrument method file. + These names are "Device internal names" which map to storage names within + an instrument method, and other instrument data (such as registry keys). + Use "GetAllInstrumentFriendlyNamesFromInstrumentMethod" (in IRawDataPlus) to get display names + for instruments. + + + The instrument names. + + + + + load the instrument method. + + View into file + RawFileLoader instance ID + Memory mapped file name for Raw file information. + offset into view + + + + Validates the memory mapped accessor. + + Memory mapped file accessor + Name of the raw file. + The identifier. + True is + + + + The writer for saving MS device data into raw files. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The device info. + + + The raw file name. + + + The file revision. + + + The device errors. + + + + + The save. + + + The writer. + + + The errors. + + + The packet data offset. + + + The controller header offset. + + + The . + + + + + The dispose. + + + + + Refresh data from maps + + + True if OK + + + + + The writer for saving UV device data into raw files. + + + + + Initializes a new instance of the class. + + + The loader id. + + + The device info. + + + The raw file name. + + + The file revision. + + + The device errors. + + + + + The save. + + + The writer. + + + The errors. + + + The packet data offset. + + + The controller header offset. + + + The . + + + + + The dispose. + + + + + Refresh data from maps + + + True if OK + + + + + The file writer. + This type controls creation of a raw file. + + + + + create full file access. + + + The . + + + + + Fixes the invalid index of the virtual device and updates the shared memory mapped RawFileInfo object + if the device index is out of range. + + RawFileInfoStruct object + + + + Initializes a new instance of the class. + This uses a mutex on the file name to prevent multiple instances trying to create the same raw file at 1 time. + Subsequent instances will get a unique time stamp file name. + + + The path. + + + The writer Id. + + [Optional] it has a default value of true. + True to specify that the raw file writer should create a raw file if the file isn't exist; however, if the file already exists, + the writer should create a raw file with the time stamp appended to the end of the file name. + False to specify that the raw file writer should not create a file and throw an IO exception if the file already exists. + + + + + Disposes the raw file for writing. Flushes all streams to disk and closes them. Releases all shared memory objects. + If last reference for temporary device files, those temp files will be deleted. + + + + + The internal dispose. + Does not clear the log + + + + + Disposes the binary file writer. + + + The bin File Binary Writer. + + + + + Gets a value indicating whether this file has detected an error. + If this is false: Other error properties in this interface have no meaning. + + + + + Gets a value indicating whether this file has detected a warning. + If this is false: Other warning properties in this interface have no meaning. + + + + + Gets a value indicating whether an error occurred. + + + + + Gets the error code, 0 if no error has occurred. A non 0 value is an error. Can not set to 0 and can not overwrite existing error code. + The acquisition service might set an error code due to errors in other libraries/devices. + + + + + Gets the error message. + + + + + Gets the warning message if warning has occurred. Empty string if no warning. + + + + + Gets or sets a value indicating whether should save changes. + + + + + Gets the raw file name. + + + + + Gets the calculated checksum for this raw file. Only calculated after a save has occurred. + + + + + Update the raw file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + A default FileHeader is created with every new writer instance. + + + The file header object with values to use. + + + + + The update auto sampler. + + + The auto sampler information. + + + The . + + + + + Format a log message for public method success. + + + The name. + + + Always true (success) + + + + + validate a public method entry. + Entry is not valid if object is disposed. + + + The name. + + + True if method can proceed + + + + + The update sequence row. + + + The sequence row sample info. + + + The . + + + + + Helper for small methods which perform a field update. + Validates that the object has not been disposed. + + + The method. + + + The act. + + + The . + + + + + update the creator logon. + + + The creator logon. + + + The . + + + + + update the creator id. + + + The creator id. + + + The . + + + + + The update user label. + + + The user label. + + + The . + + + + + The update user label. + + + The user label. + + + The index. + + + The . + + + + + update the creation date. + + + The creation date. + + + The . + + + + + Adds an audit data entry to the audit trail list of the raw file. + + + The time changed. + + + What changed by integer value. + + + The comment. + + + The . + True if successfully updated value. + + + + + perform saving. + + + The errors. + + + true on success + + + + + Perform partial save. + Saves information into the raw file, + but leaves the raw file open for creation (as several temp files). + + + The errors. + + + true on success + + + + + stitch temp files (end of acquisition). + + + The errors. + + + true on success + + + + + save the updated file header. + + + The errors. + + + true on success + + + + + mark acquisition complete. + + + true on success + + + + + save the audit trail. + + + + + save data from all controllers. + + + The errors. + + + true on success + + + + + Test if we can save all controllers. + + + true if we can save + + + + + save data from on "controller" (device). + + + The errors. + + + The index to the controller. + + + true on success + + + + + find data offset for the current controller. + Determines where the scan data begins in the final file, for this detector. + + + The i. + + + The offset into the raw file for this controller (detector) + + + + + update shared memory of raw file info. + + + + + save raw file info. + + + The errors. + + + true on success + + + + + save header. + + + The errors. + + + true on success + + + + + Save the raw file. + The raw file name is guaranteed to be unique at this point, create a mutex to prevent multiple save calls interfering. + + + True only if saving part of the raw file for the acquisition raw file. + On partial save, only raw file header, auto sampler information, sequence row information, and raw file info are written. No scan data written. + + + True if file successfully written to disk. + + + + + Saves the instrument method into the raw file + + The instrument method file path. + List of virtual instrument storage names. + List of virtual instrument descriptions. + + [Optional] it has a default value of true. + The should be deleted flag indicating whether the temporary instrument method should be removed after the raw file writer is closed. + True instrument method saved to the disk, false otherwise. + invalid instrument method path. + + + + Refreshes view of the raw file. Reloads the RawFileInfo object and the virtual controllers run headers from shared memory. + Does not read actual data from any temporary files. + + + True if successfully reloaded internal memory buffers. + + + + + Gets the memory mapped raw file name. + + + + + The initialize writer. + + + + + Remaps/refreshes the device list from the shared memory raw file info object. + Instantiates new objects based on the data from the shared memory raw file info. + + + The true if file/device list successfully remapped. + + + + + Create device list. + Attaches to memory maps of all known devices + Needed to add a reference count to all temp files, and to get latest data about device. + + + The virtual controller info list. + + + + + Update the previously found list + Device list me be already populated by previous refresh calls + Because this list is made based on shared memory, there can be issues + with + 1: Items not being ready for use + 2: Items being added + In these cases, attempt to keep what we have, and add or fix as needed + Avoid regenerating "known good" devices, and just refresh data for these. + In any cases where device data cannot be initialized completely, dispose of that data + and set the device to null, to be fixed by a future refresh. + + data for all device + true if list is valid + + + + make a new list, and completely replace any existing list. + + + The virtual controller info list. + + + + + append to existing device list. + + + The virtual controller info list. + + + true if list is valid + + + + + validate the existing device list. + + + The virtual controller info list. + + + The . + + + + + Generate a raw file device writer. + + + The virtual controller info list. + + + The index. + + + The . + + + + + The apply security settings to raw file. + + + + + Get raw file device writer. + + + The controller info. + + + The . + + + + + Handles a corrupt file by closing writers and renaming file. + + + + + + + + The raw file writer adapter. Used internally to get a raw file writer. + Publicly can use factory which calls down to here. + + + + + The get raw file writer. + + + The raw file path. + + [Optional] it has a default value of true. + True to specify that the raw file writer should create a raw file if the file isn't exist; however, if the file already exists, + the writer should create a raw file with the timestamp appends to the end of the file name. + False to specify that the raw file writer should not create a file and throw an System.IO exception if the file already exists. + + Raw file writer object. + + + + Provides methods to update the run header shared memory buffer + + + + + Wrapper to write the expected run time. All devices MUST do this so + that the real-time update can display a sensible Axis. + + Device's run header object + Shared memory mapped file accessor + The expected Run Time. + Store error information + True if expected run time is written to disk successfully, False otherwise + + + + Write the mass resolution for the mass spec device to disk. + Used by the scan processing routines. + + Device's run header object + Shared memory mapped file accessor + Width of the half peak. + Store errors information + True if mass resolution is written to disk successfully, False otherwise + + + + try write integer to memory map. + + + The writer. + + + The offset into the map. + + + The value to write. + + + The errors. + + + True if value is written to disk successfully. + + + + + Saves the filter mass precision. + + + The run Header. + + + The writer. + + + The precision. + + + Store errors information + + + True if filer mass precision is written to disk successfully, False otherwise + + + + + Writes the number of status log to disk. + + Shared memory mapped file accessor. + The number of status log entries. + Store the errors information. + True if number of status log entries is written to disk successfully, False otherwise + + + + Writes the number of error log to disk. + + Shared memory mapped file accessor. + The number error log. + Store errors information. + True if number of error long entries is written to disk successfully, False otherwise + + + + Saves the last scan number. + + Shared memory mapped file accessor. + The last spec. + The errors. + True if the last spectrum number is written to disk successfully, false otherwise. + + + + Writes the total number of trailer extra data to disk. + + The Shared memory mapped file accessor for RunHeader. + The number of trailer extra entries. + Store the errors information. + True if number of trailer extra entries is written to disk successfully, False otherwise + + + + Writes the total number of tune data entries to disk. + + The Shared memory mapped file accessor for RunHeader. + The number of data entries. + Store the errors information. + True if number of tune data entries is written to disk successfully, false otherwise + + + + Writes the total number of trailer scan events to disk. + + The Shared memory mapped file accessor for RunHeader. + The number of trailer scan event entries. + Store the errors information. + True if number of trailer scan event entries is written to disk successfully, false otherwise + + + + Write the state of the IsInAcquisition flag to indicate that the data acquiring is in progress or completed. + + The Shared memory mapped file accessor for RunHeader. + True is still acquiring, otherwise False . + Store the errors information. + True if the state of the data acquiring is written to disk successfully, false otherwise + + + + Saves the device run header fields - comment1 and comment2. + + The device run header. + The writer. + The comment1. + The comment2. + Store the errors information. + True if these fields are written to disk successfully, false otherwise. + + + + Updates the run header shared memory mapped buffer. + + + The run Header. + + + The writer. + + + The errors. + + True the run header save to the shared memory map object, otherwise False. + + + + Saves the device run header to the raw file using the provided binary writer. + + + The run header. + + + The writer. + + + The errors. + + + The . + + + + + Provides save extension methods for writing scan event object to disk. + + + + + Saves a scan event. + + The scan event. + The writer. + The errors. + True if a scan event saved to disk; false otherwise. + mass Spec Scan Events + mass Spec Scan Events + + + + Create byte array from event. + Formats a "ScanEventInfoStruct" from the supplied data, and returns as a byte array. + + + The scan event. + + + The byte array + + + + + write a table of mass ranges. + + + The method to get a range. + + + The writer. + + + The number of ranges. + + + + + write a table of doubles. + + + The method to get a value to write. + + + The writer. + + + The number of values. + + + + + Provides custom extension methods for sequence file info, such as Save(). + + + + + Saves the sequence file information struct to file. + + The information. + The writer. + The errors. + True sequence file info saved to sequence file; false otherwise. + + + + Provides methods to create, update and write samples to sequence file. + + + + + Initializes a new instance of the class. + + Name of the file. + True open an existing sequence file with read/write privilege; false to create a new unique sequence file + + + + Gets the file header for the sequence + + + + + Gets or sets additional information about a sequence + + + + + Gets the set of samples in the sequence + + + + + Gets the file error state. + + + + + Gets a value indicating whether the last file operation caused an error + + + + + Gets the name of the sequence file. + + + + + Gets or sets the sequence bracket type. + This determines which groups of samples use the same calibration curve. + + + + + Gets or sets a description of the auto sampler tray + + + + + Retrieves the user label at given 0-based label index. + + Index of user label to be retrieved + String containing the user label at given index + + + + Sets the user label at given 0-based label index. + + Index of user label to be set + New string value for user label to be set + true if successful; false otherwise + + + + Update the instrument method file header with the file header values passed in. + Only updates object values in memory, does not write to disk. + + The file header. + File header cannot be null. + + + + Saves Sequence data to file. + + True saved to file; false otherwise. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Initials the writer. + + Name of the file. + True sequence file writer created; false otherwise. + + + + Initials the sequence file. + + + + + Copies the sequence information data. + + The source sequence information. + + + + This static class contains factory to create sequence file writer adapter. + It's used internally to get a sequence file writer object. + + + + + Creates the sequence file writer. + + Name of the file. + True open an existing sequence file with read/write privilege; false to create a new unique sequence file + Sequence file writer object + + + + The sequence row extension. + + + + + Extension method to save file header. + + + The sequence Row. + + + The binary writer used to write data. + + + The errors. + + + The . + + + + + Saves the specified binary writer. + + The samples. + The binary writer. + The errors. + True samples saved to file; false otherwise. + + + + SharedBuffer is a class that utilize memory mapped file for sharing data between processes. + + + + + Creates the shared buffer accessor. + + device id + Name of the map. + The size. + if set to true [creatable]. + device errors object + True created shared memory map object successfully; otherwise False + + + + Validates the memory map accessor. + + The shared memory map accessor. + Stream data ID + Device errors object that store errors information. + + + + Provides methods to create temporary file for writing instrument data + + + + + The _temp file folder + + + + + The create temp file name for device data. + + Instrument stream writer + Output of the temporary file name + The add zero value length field. + Reset the stream position back to the start. This requires addZeroValueLengthField is set True + True if a temporary file was created successfully; false otherwise. + + + + Get the temporary the file folder path. + + The file folder path for keeping the temporary files + Temporary file path length is greater than 260 chars : + temporary data folder path + + + + Deletes the temporary file. + + Name of the file. + Specified the file extension + + + + This class partially unpacks MS instruments data after being transmitted (usually by binary message protocol) + + + + + + + + + + + + + + + + + + + + Provides methods to write UV Device data. + Note: The following functions should be called before acquisition begins: + 1. Write Instrument Information + 2. Write Instrument Expected Run Time + 3. Write Status Log Header + + + + + Initializes a new instance of the class. + + Type of the device. + Index of the device. + Name of the raw file. + if set to true [in acquisition]. + The file revision. + + + + Writes the analog instrument data. + + The analog instrument data. + Index of the analog instrument data. + True instrument data write to the disk file; otherwise False. + + Instrument Data + or + Analog Scan Index + + + + + Writes the UV instrument data. + + The UV instrument data. + Index of the UV instrument data. + True instrument data write to the disk file; otherwise False. + + Instrument Data + or + UV Scan Index + + + + + Writes the instrument data to file. + + The instrument data. + Index of the instrument data. + True instrument data write to the disk file; otherwise False. + + + + Validates the UV and Analog instrument data. + + The instrument data. + Index of the UV instrument data. + True if the input data has the correct format; otherwise false. + + + + Writes the instrument data packets to the file. + This routine will branch to the appropriate packet routines. + + Block of a formatted data to write. + Size of the data block. + Type of the packet. + The number channels. + if set to true [is uniform time]. + True if packets are written to disk successfully, False otherwise. + Not Supported Exception + + + + Write instrument data packets to the file. + This routine will branch to the appropriate packet routines to compress the data block before being written to disk. + + The data to write to file. + The data size. + Size of each packet in the data block. + The update number of packets. + TRUE if packets are written to disk successfully, FALSE otherwise. + + + + Writes instrument scan index (header) to a file. + + Index of the UV scan. + True if scan index is written to disk successfully, False otherwise + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + The UV scan index extension. + + + + + Saves the UV scan index structure information to disk. + + The UV scan index structure information. + The stream writer. + The errors. + True if UV scan index saved to disk, false otherwise. + + + + Saves the mass spec scan index structure to disk. + + The mass spec scan index structure. + The stream writer. + Stack trace on errors. + True if mass spec scan index saved to disk, false otherwise. + + + + Copy all the fields of the current CommonCore UV ScanIndex object to the new internal UV ScanIndex object. + + Index of the UV instrument scan. + Create a copy of the UV ScanIndex object + + + + Copy all the fields of the current CommonCore PDA ScanIndex object to the new internal UV ScanIndex object. + + Index of the PDA data. + Create a copy of the UV ScanIndex object + + + + Converts all the fields of the current ScanStatistics objet to a new internal scan index object + + The scan statistics. + Create a copy of the mass spec scan index object + + + + Provides some commonly used functions for writing device stream data. + + + + + Use mutex to create a "critical section" region of code that executes in isolation. + + The type of the parameter of the method that this delegate encapsulates. + The method. + The errors information. + Name of the mutex. + True add Global prefix to the file name; otherwise no. + True if the operation succeed; otherwise False + + + + Use mutex to create a "critical section" region of code that executes in isolation. + + The method. + The errors. + The mutex. + True if the operation succeed, otherwise False + + + + A wrapper method of a try catch. + + The method. + The error. + True the method execute successfully; otherwise false + + + + Convert a structure to byte array. + + Such as file header, sequence row, etc. + The object structure. + The size. + results in byte array + + + + Write string data to the file. + + The writer. + The value. + True if it's wide/unicode char, False otherwise. + + + + Convert double array to the integer array. + + The values. + results in integer array + + + + Convert the integer array to the byte array. + + The values. + result in byte array + + + + Convert double array to byte array. + + + The values. + + Byte array + + + + Updates the errors exception. + + The value. + The errors. + Store the error information to the error object and return back the original exception object + + + + Updates the errors from the shared memory map Buffer Info. + + The buffer information. + Storing the errors information. + The shared memory map buffer info object + + + + Disposes the buffer information object. + + The buffer information. + + + + Creates a unique file name based on the time and date along with the file passed in. + + + The file path. + + + The . + + + + + Deletes the temporary file (with .TMP extension) only if no reference + + The buffer information. + Name of the temporary file. + True if permitted to delete temp files + return back the buffer info object + + + + Determines whether [is generic header ready]. + + The written flags. + True if all generic headers have been written; false otherwise. + + + + Determines whether the specified segmented scan has scan. + + The segmented scan. + True if the segmented scan has scan, false otherwise. + + + + Validates the string name. + + The string name. + Error message + name;@Error message + + + + Valid the instrument method file extension. + + Name of the file. + Instrument method file name with correct file extension. + + + + Validates the array argument. + + array of integer and double + The data. + Name of the argument. + name of the input argument + + + From c4b501807318530a55c7e3a651756fe293096478 Mon Sep 17 00:00:00 2001 From: caetera Date: Wed, 13 Sep 2023 16:31:30 +0200 Subject: [PATCH 18/23] No MS data for MGF and Parquet --- Writer/MgfSpectrumWriter.cs | 13 ++++++++++--- Writer/ParquetSpectrumWriter.cs | 11 +++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Writer/MgfSpectrumWriter.cs b/Writer/MgfSpectrumWriter.cs index c347944..0c86189 100644 --- a/Writer/MgfSpectrumWriter.cs +++ b/Writer/MgfSpectrumWriter.cs @@ -38,9 +38,15 @@ public MgfSpectrumWriter(ParseInput parseInput) : base(parseInput) /// public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber) { + if (!rawFile.HasMsData) + { + throw new RawFileParserException("No MS data in RAW file, no output will be produced"); + } + ConfigureWriter(".mgf"); using (Writer) { + Log.Info("Processing " + (lastScanNumber - firstScanNumber + 1) + " scans"); var lastScanProgress = 0; @@ -48,7 +54,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc { if (ParseInput.LogFormat == LogFormat.DEFAULT) { - var scanProgress = (int) ((double) scanNumber / (lastScanNumber - firstScanNumber + 1) * 100); + var scanProgress = (int)((double)scanNumber / (lastScanNumber - firstScanNumber + 1) * 100); if (scanProgress % ProgressPercentageStep == 0) { if (scanProgress != lastScanProgress) @@ -160,12 +166,12 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc Writer.WriteLine("BEGIN IONS"); if (!ParseInput.MgfPrecursor) { - Writer.WriteLine($"TITLE={ConstructSpectrumTitle((int) Device.MS, 1, scanNumber)}"); + Writer.WriteLine($"TITLE={ConstructSpectrumTitle((int)Device.MS, 1, scanNumber)}"); } else { Writer.WriteLine( - $"TITLE={ConstructSpectrumTitle((int) Device.MS, 1, scanNumber)} [PRECURSOR={precursorReference}]"); + $"TITLE={ConstructSpectrumTitle((int)Device.MS, 1, scanNumber)} [PRECURSOR={precursorReference}]"); } Writer.WriteLine($"SCANS={scanNumber}"); @@ -250,6 +256,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc { Console.WriteLine(); } + } } } diff --git a/Writer/ParquetSpectrumWriter.cs b/Writer/ParquetSpectrumWriter.cs index ced94be..6ea4071 100644 --- a/Writer/ParquetSpectrumWriter.cs +++ b/Writer/ParquetSpectrumWriter.cs @@ -35,8 +35,15 @@ public ParquetSpectrumWriter(ParseInput parseInput) : base(parseInput) public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber) { _rawFile = rawFile; - List pScans = new List(); - WritePScans(ParseInput.OutputDirectory, rawFile.FileName, rawFile, pScans); + if (rawFile.HasMsData) + { + List pScans = new List(); + WritePScans(ParseInput.OutputDirectory, rawFile.FileName, rawFile, pScans); + } + else + { + throw new RawFileParserException("No MS data in RAW file, no output will be produced"); + } } private static void WritePScans(string outputDirectory, string fileName, From 89ad1c5c89dc5732a94664da3bb019d4cd454098 Mon Sep 17 00:00:00 2001 From: caetera Date: Wed, 13 Sep 2023 19:25:42 +0200 Subject: [PATCH 19/23] General chromatograms --- Writer/MzMlSpectrumWriter.cs | 197 ++++++++--------------------------- Writer/OntologyMapping.cs | 193 ++++++++++++++++++++++++++++++++++ 2 files changed, 238 insertions(+), 152 deletions(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index 1e0d02a..641b7fb 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -196,7 +196,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = "" }); } - //TODO FID chromatogram as ion current + //TODO non-standard chromatograms pressure, flow, FID, etc } _writer.WriteEndElement(); // fileContent @@ -283,7 +283,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc { PopulateInstrumentConfigurationList(firstScanNumber, lastScanNumber, instrumentModel); } - else //TODO Fake instrument configuration + else { _writer.WriteStartElement("instrumentConfigurationList"); _writer.WriteAttributeString("count", "1"); @@ -952,24 +952,9 @@ private List ConstructChromatograms(int firstScanNumber, int l for (var i = 0; i < trace.Length; i++) { // CV Data for Total Absorbance Chromatogram - var chroType = new CVParamType - { - accession = "MS:1000812", - name = "absorption chromatogram", - cvRef = "MS", - value = "" - }; - - var intensType = new CVParamType - { - accession = "MS:1000515", - name = "intensity array", - cvRef = "MS", - unitName = "absorbance unit", - value = instData.Units.ToString(), - unitCvRef = "UO", - unitAccession = "UO:0000269" - }; + var chroType = OntologyMapping.chromatogramTypes["absoption"]; + var intensType = OntologyMapping.dataArrayTypes["absoption"]; + intensType.value = instData.Units.ToString(); var chromatogram = TraceToChromatogram(trace[i], String.Format("PDA#{0}_TotalAbsorbance_{1}", nrI, i), @@ -998,25 +983,10 @@ private List ConstructChromatograms(int firstScanNumber, int l for (var i = 0; i < trace.Length; i++) { // CV Data for Absorbance Chromatogram - var chroType = new CVParamType - { - accession = "MS:1000812", - name = "absorption chromatogram", - cvRef = "MS", - value = "" - }; - - var intensType = new CVParamType - { - accession = "MS:1000515", - name = "intensity array", - cvRef = "MS", - unitName = "absorbance unit", - value = instData.Units.ToString(), - unitCvRef = "UO", - unitAccession = "UO:0000269" - }; - + var chroType = OntologyMapping.chromatogramTypes["absorbtion"]; + var intensType = OntologyMapping.dataArrayTypes["absoption"]; + intensType.value = instData.Units.ToString(); + var chromatogram = TraceToChromatogram(trace[i], String.Format("UV#{0}_{1}_{2}", nrI, channelName, i), chroType, intensType); @@ -1026,48 +996,53 @@ private List ConstructChromatograms(int firstScanNumber, int l } } - for (int nrI = 1; nrI < _rawFile.GetInstrumentCountOfType(Device.Analog) + 1; nrI++) + //Chromatograms from (MS)Analog devices: Pressure, FID, etc + foreach (var deviceType in new Device[2] { Device.Analog, Device.MSAnalog }) { - _rawFile.SelectInstrument(Device.Analog, nrI); - - var instData = _rawFile.GetInstrumentData(); - - for (int channel = 0; channel < instData.ChannelLabels.Length; channel++) + var channelNameIndex = 0; + for (int nrI = 1; nrI < _rawFile.GetInstrumentCountOfType(deviceType) + 1; nrI++) { - var channelName = instData.ChannelLabels[channel]; + _rawFile.SelectInstrument(deviceType, nrI); - if (channelName.ToLower().Contains("pressure")) - { - settings = new ChromatogramTraceSettings(TraceType.StartAnalogChromatogramTraces + channel + 1); + var instData = _rawFile.GetInstrumentData(); - data = _rawFile.GetChromatogramData(new IChromatogramSettings[] {settings}, -1, -1); + for (int channel = 0; channel < instData.ChannelLabels.Length; channel++) + { + var channelName = instData.ChannelLabels[channel]; + if (channelName.IsNullOrEmpty()) + { + channelName = $"Channel{channelNameIndex++}"; + } + settings = new ChromatogramTraceSettings(TraceType.StartAnalogChromatogramTraces + channel + 1); + data = _rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, -1, -1); trace = ChromatogramSignal.FromChromatogramData(data); for (var i = 0; i < trace.Length; i++) { - // CV Data for Absorbance Chromatogram - var chroType = new CVParamType + //Default data type + var chroType = OntologyMapping.chromatogramTypes["unknown"]; + var intensType = OntologyMapping.dataArrayTypes["unknown"]; + + if (channelName.ToLower().Contains("pressure")) { - accession = "MS:1003019", - name = "pressure chromatogram", - cvRef = "MS", - value = "" - }; - - var intensType = new CVParamType + chroType = OntologyMapping.chromatogramTypes["pressure"]; + intensType = OntologyMapping.dataArrayTypes["pressure"]; + } + else if (channelName.ToLower().Contains("flow")) { - accession = "MS:1000821", - name = "pressure array", - cvRef = "MS", - unitName = "pressure unit", - value = "", - unitCvRef = "UO", - unitAccession = "UO:0000109" - }; + chroType = OntologyMapping.chromatogramTypes["flow"]; + intensType = OntologyMapping.dataArrayTypes["flow"]; + } + else if (channelName.ToLower().Contains("fid")) + { + //FID is ion current type + chroType = OntologyMapping.chromatogramTypes["current"]; + intensType = OntologyMapping.dataArrayTypes["intensity"]; + } var chromatogram = TraceToChromatogram(trace[i], - String.Format("AD#{0}_{1}_{2}", nrI, channelName, i), + String.Format("{0}#{1}_{2}_{3}", deviceType.ToString(), nrI, channelName.Replace(" ", "_"), i), chroType, intensType); chromatograms.Add(chromatogram); @@ -1075,80 +1050,7 @@ private List ConstructChromatograms(int firstScanNumber, int l } } } - - var channelNameIndex = 0; - - for (int nrI = 1; nrI < _rawFile.GetInstrumentCountOfType(Device.MSAnalog) + 1; nrI++) - { - _rawFile.SelectInstrument(Device.MSAnalog, nrI); - - var instData = _rawFile.GetInstrumentData(); - - for (int channel = 0; channel < instData.ChannelLabels.Length; channel++) - { - var channelName = instData.ChannelLabels[channel]; - - if (channelName.IsNullOrEmpty()) - { - channelName = $"Channel{channelNameIndex++}"; - } - - settings = new ChromatogramTraceSettings(TraceType.StartAnalogChromatogramTraces + channel + 1); - data = _rawFile.GetChromatogramData(new IChromatogramSettings[] { settings }, -1, -1); - trace = ChromatogramSignal.FromChromatogramData(data); - - for (var i = 0; i < trace.Length; i++) - { - // CV Data for Chromatogram - var chroType = new CVParamType - { - accession = "MS:1000626", - name = "chromatogram type", - cvRef = "MS", - value = $"{channelName} chromatogram" - }; - - var intensType = new CVParamType - { - accession = "MS:1000786", - name = "non-standard data array", - cvRef = "MS", - unitName = "unit", - value = instData.Units.ToString(), - unitCvRef = "UO", - unitAccession = "UO:0000000" - }; - - if (instData.Units.ToString().ToLower().Contains("absorbance")) - { - chroType = new CVParamType - { - accession = "MS:1000812", - name = "absorption chromatogram", - cvRef = "MS", - value = $"{channelName} chromatogram" - }; - - intensType = new CVParamType - { - accession = "MS:1000515", - name = "intensity array", - cvRef = "MS", - unitName = "absorbance unit", - value = instData.Units.ToString(), - unitCvRef = "UO", - unitAccession = "UO:0000269" - }; - } - - var chromatogram = TraceToChromatogram(trace[i], - String.Format("MSAD#{0}_{1}_{2}", nrI, channelName.Replace(" ", "_"), i), - chroType, intensType); - - chromatograms.Add(chromatogram); - } - } - } + } return chromatograms; @@ -1192,16 +1094,7 @@ private ChromatogramType TraceToChromatogram(ChromatogramSignal trace, string ch .binary.Length / 3)).ToString(CultureInfo.InvariantCulture); var timesBinaryDataCvParams = new List { - new CVParamType - { - accession = "MS:1000595", - name = "time array", - cvRef = "MS", - unitName = "minute", - value = "", - unitCvRef = "UO", - unitAccession = "UO:0000031" - }, + OntologyMapping.dataArrayTypes["time"], new CVParamType { accession = "MS:1000523", name = "64-bit float", cvRef = "MS", value = "" diff --git a/Writer/OntologyMapping.cs b/Writer/OntologyMapping.cs index 66b02c4..3c5770e 100644 --- a/Writer/OntologyMapping.cs +++ b/Writer/OntologyMapping.cs @@ -851,5 +851,198 @@ public static List GetDetectors(string instrumentAccession) return detectors; } + + public static readonly Dictionary chromatogramTypes = + new Dictionary + { + { + "basepeak", new CVParamType + { + accession = "MS:1000628", + name = "basepeak chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "tic", new CVParamType + { + accession = "MS:1000235", + name = "total ion current chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "current", new CVParamType + { + accession = "MS:1000810", + name = "ion current chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "radiation", new CVParamType + { + accession = "MS:1000811", + name = "electromagnetic radiation chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "absorption", new CVParamType + { + accession = "MS:1000812", + name = "absorption chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "emission", new CVParamType + { + accession = "MS:1000813", + name = "emission chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "pressure", new CVParamType + { + accession = "MS:1003019", + name = "pressure chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "flow", new CVParamType + { + accession = "MS:1003020", + name = "flow rate chromatogram", + cvRef = "MS", + value = "" + } + }, + + { + "unknown", new CVParamType + { + accession = "MS:1000626", + name = "chromatogram type", + cvRef = "MS", + value = "" + } + }, + }; + + public static readonly Dictionary dataArrayTypes = + new Dictionary + { + { + "mz", new CVParamType + { + accession = "MS:1000514", + name = "m/z array", + cvRef = "MS", + value = "" + } + }, + + { + "intensity", new CVParamType + { + accession = "MS:1000515", + name = "intensity array", + cvRef = "MS", + value = "" + } + }, + + { + "absorption", new CVParamType + { + accession = "MS:1000515", + name = "intensity array", + cvRef = "MS", + value = "", + unitName = "absorbance unit", + unitCvRef = "UO", + unitAccession = "UO:0000269" + } + }, + + { + "time", new CVParamType + { + accession = "MS:1000595", + name = "time array", + cvRef = "MS", + value = "", + unitName = "minute", + unitCvRef = "UO", + unitAccession = "UO:0000031" + } + }, + + { + "wavelength", new CVParamType + { + accession = "MS:1000617", + name = "wavelength array", + cvRef = "MS", + value = "" + } + }, + + { + "flow", new CVParamType + { + accession = "MS:1000820", + name = "flow rate array", + cvRef = "MS", + value = "", + unitName = "volumetric flow rate unit", + unitCvRef = "UO", + unitAccession = "UO:0000270 " + } + }, + + { + "pressure", new CVParamType + { + accession = "MS:1000821", + name = "pressure array", + cvRef = "MS", + value = "", + unitName = "pressure unit", + unitCvRef = "UO", + unitAccession = "UO:0000109" + } + }, + + { + "unknown", new CVParamType + { + accession = "MS:1000786", + name = "non-standard data array", + cvRef = "MS", + value = "", + unitName = "unit", + unitCvRef = "UO", + unitAccession = "UO:0000000" + } + } + }; } } \ No newline at end of file From 239d5267d507ed50e2263a5b43b28a77a8138209 Mon Sep 17 00:00:00 2001 From: caetera Date: Thu, 14 Sep 2023 16:39:50 +0200 Subject: [PATCH 20/23] Correct fileContent --- Writer/MzMlSpectrumWriter.cs | 62 ++++++++++++++++++++++++++---------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index 641b7fb..f6264a4 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Collections.Specialized; +using System.Diagnostics; +using System.Diagnostics.Eventing.Reader; using System.Globalization; using System.IO; using System.IO.Compression; @@ -141,10 +143,17 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteStartElement("fileDescription"); // fileContent _writer.WriteStartElement("fileContent"); + + //accumulating different types of file content + HashSet content = new HashSet(); + if (_rawFile.HasMsData) { + var nMS1 = rawFile.GetFilteredScanEnumerator("ms").Count(); + var nMS = rawFile.RunHeaderEx.SpectraCount; // MS1 - SerializeCvParam(new CVParamType + if(ParseInput.MsLevel.Contains(1) && nMS1 > 0) + content.Add(new CVParamType { accession = "MS:1000579", name = "MS1 spectrum", @@ -152,7 +161,8 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = "" }); // MSn - SerializeCvParam(new CVParamType + if(ParseInput.MsLevel.Any(n => n > 1) && nMS > nMS1) + content.Add(new CVParamType { accession = "MS:1000580", name = "MSn spectrum", @@ -160,13 +170,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = "" }); // Ion current chromatogram - SerializeCvParam(new CVParamType - { - accession = "MS:1000810", - name = "ion current chromatogram", - cvRef = "MS", - value = "" - }); + content.Add(OntologyMapping.chromatogramTypes["current"]); } // Other detector data @@ -175,7 +179,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc // PDA spectrum if (_rawFile.GetInstrumentCountOfType(Device.Pda) > 0) { - SerializeCvParam(new CVParamType + content.Add(new CVParamType { accession = "MS:1000806", name = "absorption spectrum", @@ -188,15 +192,39 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc if (_rawFile.GetInstrumentCountOfType(Device.Pda) > 0 || _rawFile.GetInstrumentCountOfType(Device.UV) > 0) { - SerializeCvParam(new CVParamType + content.Add(OntologyMapping.chromatogramTypes["absorption"]); + } + //non-standard chromatograms pressure, flow, FID, etc + foreach (var deviceType in new Device[2] { Device.Analog, Device.MSAnalog }) + { + for (int nrI = 1; nrI < _rawFile.GetInstrumentCountOfType(deviceType) + 1; nrI++) { - accession = "MS:1000812", - name = "absorption chromatogram", - cvRef = "MS", - value = "" - }); + _rawFile.SelectInstrument(deviceType, nrI); + + var instData = _rawFile.GetInstrumentData(); + + for (int channel = 0; channel < instData.ChannelLabels.Length; channel++) + { + var channelName = instData.ChannelLabels[channel]; + if (channelName.ToLower().Contains("pressure")) + content.Add(OntologyMapping.chromatogramTypes["pressure"]); + else if (channelName.ToLower().Contains("flow")) + content.Add(OntologyMapping.chromatogramTypes["flow"]); + + else if (channelName.ToLower().Contains("fid")) + content.Add(OntologyMapping.chromatogramTypes["current"]); + else + content.Add(OntologyMapping.chromatogramTypes["unknown"]); + } + } } - //TODO non-standard chromatograms pressure, flow, FID, etc + _rawFile.SelectMsData(); + } + + //write content + foreach (var item in content) + { + SerializeCvParam(item); } _writer.WriteEndElement(); // fileContent From f977baafe127db68aee67406b669eee56422328f Mon Sep 17 00:00:00 2001 From: caetera Date: Fri, 15 Sep 2023 11:30:47 +0200 Subject: [PATCH 21/23] Fix typos and add getters for chromatogram dictionaries --- ThermoRawFileParser.csproj | 1 + .../OntologyMappingTests.cs | 6 +-- Util/CVHelpers.cs | 21 ++++++++++ Writer/MzMlSpectrumWriter.cs | 40 +++++++++---------- Writer/OntologyMapping.cs | 17 ++++++-- 5 files changed, 59 insertions(+), 26 deletions(-) create mode 100644 Util/CVHelpers.cs diff --git a/ThermoRawFileParser.csproj b/ThermoRawFileParser.csproj index 536b601..5d2e425 100644 --- a/ThermoRawFileParser.csproj +++ b/ThermoRawFileParser.csproj @@ -199,6 +199,7 @@ + diff --git a/ThermoRawFileParserTest/OntologyMappingTests.cs b/ThermoRawFileParserTest/OntologyMappingTests.cs index d4f7f3f..69f0c31 100644 --- a/ThermoRawFileParserTest/OntologyMappingTests.cs +++ b/ThermoRawFileParserTest/OntologyMappingTests.cs @@ -12,13 +12,13 @@ public class OntologyMappingTests public void TestGetInstrumentModel() { // exact match - var match = OntologyMapping.getInstrumentModel("LTQ Orbitrap"); + var match = OntologyMapping.GetInstrumentModel("LTQ Orbitrap"); Assert.AreEqual("MS:1000449", match.accession); // partial match, should return the longest partial match - var partialMatch = OntologyMapping.getInstrumentModel("LTQ Orbitrap XXL"); + var partialMatch = OntologyMapping.GetInstrumentModel("LTQ Orbitrap XXL"); Assert.AreEqual("MS:1000449", partialMatch.accession); // no match, should return the generic thermo instrument - var noMatch = OntologyMapping.getInstrumentModel("non existing model"); + var noMatch = OntologyMapping.GetInstrumentModel("non existing model"); Assert.AreEqual("MS:1000483", noMatch.accession); } } diff --git a/Util/CVHelpers.cs b/Util/CVHelpers.cs new file mode 100644 index 0000000..cf7c617 --- /dev/null +++ b/Util/CVHelpers.cs @@ -0,0 +1,21 @@ +using ThermoRawFileParser.Writer.MzML; + +namespace ThermoRawFileParser.Util +{ + public static class CVHelpers + { + public static CVParamType Copy (this CVParamType old) + { + return new CVParamType + { + accession = old.accession, + name = old.name, + cvRef = old.cvRef, + unitAccession = old.unitAccession, + unitCvRef = old.unitCvRef, + unitName = old.unitName, + value = old.value + }; + } + } +} diff --git a/Writer/MzMlSpectrumWriter.cs b/Writer/MzMlSpectrumWriter.cs index f6264a4..411f2dc 100644 --- a/Writer/MzMlSpectrumWriter.cs +++ b/Writer/MzMlSpectrumWriter.cs @@ -170,7 +170,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc value = "" }); // Ion current chromatogram - content.Add(OntologyMapping.chromatogramTypes["current"]); + content.Add(OntologyMapping.GetChromatogramType("current")); } // Other detector data @@ -192,7 +192,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc if (_rawFile.GetInstrumentCountOfType(Device.Pda) > 0 || _rawFile.GetInstrumentCountOfType(Device.UV) > 0) { - content.Add(OntologyMapping.chromatogramTypes["absorption"]); + content.Add(OntologyMapping.GetChromatogramType("absorption")); } //non-standard chromatograms pressure, flow, FID, etc foreach (var deviceType in new Device[2] { Device.Analog, Device.MSAnalog }) @@ -207,14 +207,14 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc { var channelName = instData.ChannelLabels[channel]; if (channelName.ToLower().Contains("pressure")) - content.Add(OntologyMapping.chromatogramTypes["pressure"]); + content.Add(OntologyMapping.GetChromatogramType("pressure")); else if (channelName.ToLower().Contains("flow")) - content.Add(OntologyMapping.chromatogramTypes["flow"]); + content.Add(OntologyMapping.GetChromatogramType("flow")); else if (channelName.ToLower().Contains("fid")) - content.Add(OntologyMapping.chromatogramTypes["current"]); + content.Add(OntologyMapping.GetChromatogramType("current")); else - content.Add(OntologyMapping.chromatogramTypes["unknown"]); + content.Add(OntologyMapping.GetChromatogramType("unknown")); } } } @@ -276,7 +276,7 @@ public override void Write(IRawDataPlus rawFile, int firstScanNumber, int lastSc _writer.WriteStartElement("referenceableParamGroup"); _writer.WriteAttributeString("id", "commonInstrumentParams"); - instrumentModel = OntologyMapping.getInstrumentModel(instrumentData.Model); + instrumentModel = OntologyMapping.GetInstrumentModel(instrumentData.Model); SerializeCvParam(instrumentModel); SerializeCvParam(new CVParamType @@ -980,8 +980,8 @@ private List ConstructChromatograms(int firstScanNumber, int l for (var i = 0; i < trace.Length; i++) { // CV Data for Total Absorbance Chromatogram - var chroType = OntologyMapping.chromatogramTypes["absoption"]; - var intensType = OntologyMapping.dataArrayTypes["absoption"]; + var chroType = OntologyMapping.GetChromatogramType("absorption"); + var intensType = OntologyMapping.GetDataArrayType("absorption"); intensType.value = instData.Units.ToString(); var chromatogram = TraceToChromatogram(trace[i], @@ -1011,8 +1011,8 @@ private List ConstructChromatograms(int firstScanNumber, int l for (var i = 0; i < trace.Length; i++) { // CV Data for Absorbance Chromatogram - var chroType = OntologyMapping.chromatogramTypes["absorbtion"]; - var intensType = OntologyMapping.dataArrayTypes["absoption"]; + var chroType = OntologyMapping.GetChromatogramType("absorption"); + var intensType = OntologyMapping.GetDataArrayType("absorption"); intensType.value = instData.Units.ToString(); var chromatogram = TraceToChromatogram(trace[i], @@ -1049,24 +1049,24 @@ private List ConstructChromatograms(int firstScanNumber, int l for (var i = 0; i < trace.Length; i++) { //Default data type - var chroType = OntologyMapping.chromatogramTypes["unknown"]; - var intensType = OntologyMapping.dataArrayTypes["unknown"]; + var chroType = OntologyMapping.GetChromatogramType("unknown"); + var intensType = OntologyMapping.GetDataArrayType("unknown"); if (channelName.ToLower().Contains("pressure")) { - chroType = OntologyMapping.chromatogramTypes["pressure"]; - intensType = OntologyMapping.dataArrayTypes["pressure"]; + chroType = OntologyMapping.GetChromatogramType("pressure"); + intensType = OntologyMapping.GetDataArrayType("pressure"); } else if (channelName.ToLower().Contains("flow")) { - chroType = OntologyMapping.chromatogramTypes["flow"]; - intensType = OntologyMapping.dataArrayTypes["flow"]; + chroType = OntologyMapping.GetChromatogramType("flow"); + intensType = OntologyMapping.GetDataArrayType("flow"); } else if (channelName.ToLower().Contains("fid")) { //FID is ion current type - chroType = OntologyMapping.chromatogramTypes["current"]; - intensType = OntologyMapping.dataArrayTypes["intensity"]; + chroType = OntologyMapping.GetChromatogramType("current"); + intensType = OntologyMapping.GetDataArrayType("intensity"); } var chromatogram = TraceToChromatogram(trace[i], @@ -1122,7 +1122,7 @@ private ChromatogramType TraceToChromatogram(ChromatogramSignal trace, string ch .binary.Length / 3)).ToString(CultureInfo.InvariantCulture); var timesBinaryDataCvParams = new List { - OntologyMapping.dataArrayTypes["time"], + OntologyMapping.GetDataArrayType("time"), new CVParamType { accession = "MS:1000523", name = "64-bit float", cvRef = "MS", value = "" diff --git a/Writer/OntologyMapping.cs b/Writer/OntologyMapping.cs index 3c5770e..793d059 100644 --- a/Writer/OntologyMapping.cs +++ b/Writer/OntologyMapping.cs @@ -3,6 +3,7 @@ using ThermoFisher.CommonCore.Data; using ThermoFisher.CommonCore.Data.FilterEnums; using ThermoRawFileParser.Writer.MzML; +using ThermoRawFileParser.Util; namespace ThermoRawFileParser.Writer { @@ -685,7 +686,7 @@ public static class OntologyMapping /// /// the instrument name /// the instrument CV param - public static CVParamType getInstrumentModel(string instrumentName) + public static CVParamType GetInstrumentModel(string instrumentName) { CVParamType instrumentModel; instrumentName = instrumentName.ToUpper(); @@ -852,7 +853,7 @@ public static List GetDetectors(string instrumentAccession) return detectors; } - public static readonly Dictionary chromatogramTypes = + private static readonly Dictionary chromatogramTypes = new Dictionary { { @@ -946,7 +947,12 @@ public static List GetDetectors(string instrumentAccession) }, }; - public static readonly Dictionary dataArrayTypes = + public static CVParamType GetChromatogramType(string key) + { + return CVHelpers.Copy(chromatogramTypes[key]); + } + + private static readonly Dictionary dataArrayTypes = new Dictionary { { @@ -1044,5 +1050,10 @@ public static List GetDetectors(string instrumentAccession) } } }; + + public static CVParamType GetDataArrayType(string key) + { + return CVHelpers.Copy(dataArrayTypes[key]); + } } } \ No newline at end of file From c077f2dd139db98d8e7ca003952da4d335436cc7 Mon Sep 17 00:00:00 2001 From: caetera Date: Fri, 15 Sep 2023 12:08:43 +0200 Subject: [PATCH 22/23] Prepare for release --- MainClass.cs | 2 +- README.md | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/MainClass.cs b/MainClass.cs index 7ece9cf..fa505ec 100644 --- a/MainClass.cs +++ b/MainClass.cs @@ -20,7 +20,7 @@ public static class MainClass private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); - public const string Version = "1.4.2"; + public const string Version = "1.4.3"; public static void Main(string[] args) { // Set Invariant culture as default for all further processing diff --git a/README.md b/README.md index 704908d..fc34851 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,8 @@ Provide one of the following filters: * M/Z start and end * sequence and tolerance (tolerance unit optional, defaults to `ppm`) -optionally one can define starting and ending retention times and thermo filter string (defaults to `ms`) +optionally one can define starting and ending retention times, provide filter string (defaults to `ms`, i.e. only MS1 scans), and a comment (free text) field; any valid filter string is supported, +however only basic validation is performed, see #158 for details. Comment can contain any text and will be preserved in the output. An example input JSON file: @@ -219,7 +220,17 @@ An example input JSON file: { "sequence":"TRANNEL", "tolerance":10 - } + }, + { + "mz":1014.5099732499732, + "rt_start":14.0600881872, + "rt_end":14.4167198290667, + "tolerance":5, + "tolerance_unit":"ppm", + "comment":"Only ion trap scans" + "scan_filter":"ITMS" + } + } ] ``` From 34656a8cecc1a602d68ffb88b649dda6b7252a7e Mon Sep 17 00:00:00 2001 From: Vladimir Gorshkov Date: Fri, 15 Sep 2023 12:12:17 +0200 Subject: [PATCH 23/23] Fix formatting in README --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fc34851..e4d08dd 100644 --- a/README.md +++ b/README.md @@ -193,7 +193,7 @@ Provide one of the following filters: * sequence and tolerance (tolerance unit optional, defaults to `ppm`) optionally one can define starting and ending retention times, provide filter string (defaults to `ms`, i.e. only MS1 scans), and a comment (free text) field; any valid filter string is supported, -however only basic validation is performed, see #158 for details. Comment can contain any text and will be preserved in the output. +however only basic validation is performed, see [issue #158](https://github.com/compomics/ThermoRawFileParser/issues/158) for details. Comment can contain any text and will be preserved in the output. An example input JSON file: @@ -221,7 +221,7 @@ An example input JSON file: "sequence":"TRANNEL", "tolerance":10 }, - { + { "mz":1014.5099732499732, "rt_start":14.0600881872, "rt_end":14.4167198290667, @@ -229,7 +229,7 @@ An example input JSON file: "tolerance_unit":"ppm", "comment":"Only ion trap scans" "scan_filter":"ITMS" - } + } } ]

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/bbMk3BXRcY##e6WI z|AKLze+!`os89SPTWAXUGwHfcdn0qM_K12u^N4*<@M3ljdMsNHJSYkIGc)mlWoF`& zaLpgM01;uL=llTFdzu&h^N~mI^}wUOkhcP(537|%pWj0*pWj0*toI}@nCESeMeDKG zBVA-iT0hYawQRh1TbL2v5NRi%DeLWBPrK<8d>GdRnVo{s#!f6$@Q0G`8`p^6enbUP zP$A9}>UDKQJ3ARs!H%;x1|i^Y6S6BLt_Ss_p8qgK5}4&75E$jb@k@2)YwqQN)wjq( zoF}pjLg`=n(aVEi$1x6<8GY5Mx#f4h(hs-p8&%PXx@Gfsq#6F0wHhv#vl=#*y&6G_ zi2J8))O+ZvUt#^H^B1r73x)HJ{;Kt-s4rc2M0i1D- z`~~K{>6ZC9Z9l`hQnXgrQ}jY7LUdq|FuNfF8SCn&KzntKopgpJ*yk!%*k_Vmcy9|y z5!;~T{~ z_*Ftl~9p?eq+_4 z8idw1_Jgp7FZTTb#I$o_wlU;S)yb!~ibkSm{S(>qI*8%Ys*AKkx<4J8^js$QBDp ziaBl1=D2M28p6s8%3~@BD}5X_Di1?6TFTYR4F~Y6`?&|W5BY~YtIv?u?)+FDcTb$J zNlQ*QmO&m9t%3_@ymgi~6D-FMSAuANYVQmePTXfl71*UL9R55Uq^FKQkBrhh5iusacg_AR%XcyUM$o%C|GNx9$J;JY>Uhlf zYv-|=WuVP1w}mk06B;OX(Qzw4>+Ejs#bNEN`h|4qEc)f6Yl5o~_g+7*=Y+Szc%*B} zti)k;*^}gofqU%iOD*#^&$SkWaRauy<`%Lv-+pN9M2FL9k!v9Loz&IopSvq>rSYeg zcHuE!^VOrPTgY3|%LMcd`oglf=K1{wrUyaaqf-mD`QRr%s@L<+e`HRx&$kaHW5TYl zc)M%g-ng$USr+TpyWs|y^_!e*Hp1~%o6k3XL4qboybeVE3GerXtnygxc15BFEOhJbAFHh zCdFLAfBDWqAjsrnc-_BWHAN$nn~65#9eKgV~<%FYlbdoS*rX`&bi4VAI3t zE<%Q_p3r$~*W&#`ry4AZBYsqL;0FQ0pK)e(?KlEd=aKZnrdzEO6N~q4ow1*8pW}+h zCVL$d!#aL*LFy)+djA15dzb&kq{JE;Pifj+=*?kT)!s+3#|5|Al$v)LF}~(B3(EVb zjhxw39N#bISiR*aU&OYJZ=NBp<#RXq-5NW-j_Tkt1q6d1If526#wNkRZKQV^P!tVc zYom&cvK4KOD*ukd4~K6sv&XRYdQNMd{vez9+p2O;>!wYxL4$l7${h*xL_^AEt%^^# z4fd|1ob=?WnQZ;E_XXV(?^LR}%~`mACFBY5bhX^H;m_u2&q}Os?jg^K2vkhNw&BkP zX|-;NV6bn!jr0@mDJzu4DOSsVIzWfBQZVRALqp!T&PM&oeGd184(eE*0GVlC)AU#N zg}>v6f|}R1aw;I@FEDq08nRDRr*P0e<JcrazH(vb6{Ub=o8WDPPsi~&ACS1 zydhA1r(VnXEz%d|P6_(Y>8-yb#y3RsQekTN@lqFOJbW3piPiz$fdwj`6~peAn6cJm zP;q-Q`4OC0pL=FjxHY7UQa$h4$~EGd(#Y*V1_d`SHNQByI=MHuG_3Hipr8JLQh=4L!ylQaaW_zVm~IWqI!5j!PMp>>Aed{Z^+jM7+Y!G7s}bj$ zW}IgDwFX^$ybFUG34fzGLVu%~3_ot0F>q!B?pl>@#o4kh(dkMvm6OzF%;ick$w`|5 zfB&8Ti6EHF>I6(?O9K95lMQ~VXI_KVZ8{UFLTH-4i}R>Fv(&9QGd|&2JFC|K<2B5I z|JnG1Q|mdw+zkOxT__*)r=#~=u4A3e=O)r7m?jL*c1Ni>MDT=q2c9S8seiLV^W9dM zGg)V!Q>L>s^fPl1QD5{%<9b3f+GgXXYP0iNpN6$QJa^D?*vO_!vw#C;6G;<!rc1`07cd;OYLfV z+Or2-?!OdPOw>Ffvj$x5u?j1;YG_Ndmwb`B6m+$&qrg_jZvaZK6N}Pf_YC!_d3!a6 z6WhHBQ0ZTVhNW2yF83q_5>vGbyK*H}v~lmbI~xrKHDRq|=ja;u*dsqCUxPEfj)iD& z_VZf(LUsa|h2d74m4!tt;TtE|_>GFaQC+xpplmL7lqdOZ;`}ZBaN-FZ{e)4?d_GO; z9yE6qgG?O#)at0V9#2s7D0Ie8bKXlz6cRg%e(IU`WNC*472eu`U9OqRJvLqk39}$C0b?&`v&wscEo0S?ydg!(p@vRQ^lRPSwGnwuYZm4n~^2Q*^}0^ zcf;Wh#N7Q)nW5%g`B{XZ;f?#OLC2Xnm~10wt*JmU(?8vD?3ii~Wn=YAhrI{Foq=W( zt5^D&@pJ6fE%c0SEudNK_Na{C@88{Q)lYEno8#s`vb*hovz(^jw~k%?vt`fmy4FO? zxdqPgvKoG*g^;5^Ag|peSMX_@#W)qaVvc+ISv+s*Lx4>C+!JGk+^oUwlemG@%7T;U z`ssk6PE+OSP3vQ;;I84;@;7eKz%gv~9p_c09_oJS)BN+E<+E9U)QSXq>fB0;r~k?` z+>LwqhUU7i^T`*!LrFZl>3<#TY-?zE0!pOlfg<{ERM*qLjLydd_P>B_po~yrs2`M~ zxyPBoN#VVVoHQpl3qjXKpl9pz-i}WHSV;AaJV{P1peM~_8>F2to9lZ+M=`D3sNQ$& zmZ&f7HI`FU?A5w%C1*R3BR^MMqcgp~_wfW|dhL}Ca_;^siQ%5J1ac{JV}04WD;iBs zGX5+1G$h+6=3v}c-}jEO>_pa`9s4A3`qYfzthDhO>`Q{D4N++lc0jDQKd5UpP4Sp> z-_qQe-{9KhVv0V(Bk_Z_voHxdtSZR;`Ezk{xV5{2^1^emw%v*|!gmi1YTS$*f`gw>PZ65QwgOP!w3;pR-c;ArQjG#2S;m14Z_9JS zyMY*QkD)@IqfU0~g;o*UpGyvbc{OJ4t?SdB3QgA00U$ zFD&@;%cmo%8FiODa>G?$y$JaUu9cKjGfk^`B3JWIYjF1l5~ucM2k{emlAek}X_^_F zw6;FV2`dRP=CshAd#^3I@*N5h`3LmhL@(UGE_y+-YPj5I8@QAnj&yHxNuYB4ZY z!qtR$op8<+`Y6@7++UjhkKb)>MCHcgMtgg0hIP7f{^In-8DSH(TjpYs8{feyu9T#O zD`ku(j7<;gpnw|loR)%spGdHpq8X)0w+hbqM3KsHK)FUD(IYtC@Qt(~!l5JAUL3X6@M&by;$R z-_zi&HeU|D3c(W2$UrYshJfRgnbE49QI70Qv8&&TGx$1V(Tj2+aV!c?+dtwtCCcx~ zVuHG(h3Ph0x96ARO3SZ8(}z)QE-q$}JX{L45yKUn3fY8Z9ha8s# z^_r%ieW?t**eh-#?$;}t+pGiF`!N`M>Rpjz#}-d2qoC1V)T*A8+SS`Q^vP(Z^$!vq z9o?-$!EG{S<7Kj+o00=4TT|n(duHNRHw{V}Y|NonCP~g3XD)%ofED(mgRkCb=Q!q96y_Z&7mz*(O-XT-Lv?UyVPGC2^>A_#L@t z-Qw!uY671k&_dfZmAE`_A_r@k;?s}P)cQwY`q0}`$)R8ym0A)M0Zl;}>Wz6-Y5VMD zIJrB7(xh{>NGMaSt&^+2=c%J_(_@OD`UAcy>)wI3{rdK9*R!^R zf(1FopClXiizX~BRBD&>Su-#?M2JmwkffqkB|2`hqc3sK3hq-C+Z?i#5ztviRvI>Q zDbpd=F>`yU7bTP{r!XqZ3}M+ONyialPRA($d|!U}P!njGHz|v?VJ?%%U$v+kN}Ee2 zJ&&6Ch}&?-XhRveQk-1+1T|XJl4myeFdvNBTjxR%mo%kE+B3Dxl?fd$A_tix8Nl9a zo8PY7^#$0sW_@cEclBYaWy|URX8)|hV%FD543PuFJ@{OO*Y8}BNaOj7k9;nk5$9uo^p&Qz$MbPI^QFIYQos}9v>Yb z+IIL;uT0Ig0V<F=*aD-Q68&@7z8!2s`-lS->IAFX)R6AwQT8-Y?+Q~8{;~CMp-tmLzN$? zk5sdC>gP6y4m*>K7blN>wQmye&dGcTKR`~ENnhW3j632RN!g8j@z(PVumXKlU1I}l zOf-LenQLfIi1a+*C~Z+wQj|-gxc?y1rre*Xpf7_pklEt4fehQ^&+9vTfrQxz;MzQvxPLXiUSvNNjc`0w9 z6X&$e{@uF_;6?+OEZyVo6m28YWfRNDp2bTwA)}oQ_5-}~wb@2i5YPlK_vbf^!J3T8 zTj>Z0KH{8eHLAI-m<1*r()4h~3J-${YA0&bF?HmRd5U4^S!^Rrk|G5K#L<8O##cfY z8Zz#kits@Rm)%OkP!gG&KBUb?bw(^}wkqrs(diJZ2p+g^YCmwUBYG7h53Ev08KoVR zek)Og^-<5*RTge5(O_FQ>J>{*L@~rB9j4GaV2sxl7k#bVe2PLtyQ7|>S5w8B+48g104ra;k-;GB{vRSK~WT{A1Yst+>?|mB$uoEst%n$?Gv_v7tuG~Ky5p^2K&B*_&W-_#8(W7T$6X+2_^qIoq zH6ouhUg7s+;iaVCLIPp7x#+0Yb zOB70_N@WTNZv6TL;%WP8BTXea=6c**!WyaTw$gLVV%~fx#@PCNep=oSy6i0&YP0ZlsKP>^;eXQ zwmh$?w>ZnZjW1+|ifhd-OrM66GLvGJ9*Sdae|YR*b6|(E)k;XEFeTkwQkGX+(9%%^ zs;bCqs48d!wG|arRn$^VLszFhG7wwaoY^3Ai?5hq3y-PIR(R6`BmT9t6_s?9@K4WR zI-DIG*qzy(0y(&w8k#(snmD9%3H912?W0jnPR3A}?5C=CW8g`P+p0JTQMf%luEl$+ zKA>6CiROPKEZE6}$5^G#ZP_0R{nt$Q+lLFz2}9|nV0TbAZ${~Jbm)H$PDMAo^bls) z5=0bQS|Rf7fw}QIsXd<{5zvXD@h}SC)ukn*cFlk9K$gE6MT6+5qV!$$_ALHro?RXN zY&=};lD~Y&N2*chm*MZlQtVolGD7)cd7XOJq2@vAVJcBB8>HpZiqBsz2phKT)Q6Tz zX)FsGv!Wp`T!(au1u2gkq^Fb|Hj$}T@gIqq;t8fy(^Yii1V&WqwJpRWX+-PEG4fNy z<2b9PDvCLA=jtU@RN76t3%_xtR8f6uN#@4*SL^2&3@u=!3{b;RyN{GoClr)Y@0}Zq zHb2rf6=4d)MWPH;W!nC8Nc-L=^r+^Pgjx;G2n}w=x7!w{)e=lCn# zyvT)%w=7vv2^>Y^_D-HF&aZ<|510S6N;LIL#`vHjbQ}b;1VXPRjI16|im;vbVUHqK z;p_VV4YxUs3sdzGBHgUC+QlrbP#wH|1GLabilC~#Oqb|+Z(2?M z6t!?b;vSwI{VS$|Wq^&R}>2s@o$;UJDtLf^e zZ{E~f=+|{&Xg!YJG5dsvXW8J?}^mMu#3x?|=iZ*l_hf3|_YSg2uO3GUqoIab54>#@*n-#VwK9szv~xGlTZn9urD(VD6`0etss!dV<|&xzWok7xSfj+pNQ-&8 zQe)a50lC84T8Z=siTHY|#tfL4rksfAy*;I*3Tr{MkQMxc)59pYUqn6G*<<$mXB(%# zrFBK?t4iAuEll6rn@*Sezf%Z-l_~r7f7f0DbnW2LLF$H(PCJ)2{1CDd3ak!PPF^5^ zC|feW?lP%d!&$!E*Iiwy1K+(vU;C%E@7(=;c}^2Hj_csyTW*5Shba@lB*n#tWr^JNgk-8wid(*nOj|%UR+w5 zkw7TUD=K3rJeeeHrk>pb|n5vFRNy#Z5k6|vi)6(*7Zs3PbPfo95 zJJ?&rs>bu{X7IQAwiZkQF!7IV(V9m7{eFxr|0nstz1Xt`L5+_lnHlbnv9>goq9Ed* z{Psv7ts(XvLy$k2M7JbS*l?19Eo#Zux3h_9tiMzKmoGR~-GA!ASlmjOkHQo^mOU%x zQl3{_fJ7><|>nL@?I9de%l+zt5s(Z)HvzC@lx$K2@r1DBa=1#jHJTe1CU;VzY# z(XFszpl)NAO2|(Hv10Ur==F@Pps3i`7xF`(bHwIW`Lzu#4Fwf?M+XKgg0ssDOtxo) z4|pnpDmM#X-|%U1Lq0?ZB%60qV_5brTG!@H7IWpWRWvZ}P$OFE3cF zV3tLOWN)I?-0Qvbz!w96p*0nORDlug-@LmjX{b(&*5!BhuV?RWBfn^Vu|um#4#fEX zMI?{#fbI$ywGWdOJL1dg5ebKVW~vJUPQC|DtV0fpoR2#XVW!E2!?)KSJ=1a~mG~Dr z`fSYy#*cfKQc-WK?8(s0ueBp8;Hpmz*mEQD*#_V0S3&+xKXlFgen8Cqa+Ul0DyqKR zp#cAV4HSD3>;@^uee?SMP83Q}VJ)`PKuWE#%n3mmZ9c88*k*L@JiwoPP z8(x6`{n~yOLfe~$IiE_DoVAudDx>1t9(8gKoJ5fy-BGqlqsmmpfD&sV(Kf5`q^x zx0X@Dd7=oCMA}cKJa(of<7~f|pQFv}2&YrOKEjOwJ9~mpT*f7%dUn2y9?m;>;HSe5 z$4Nph^DvDc2!teXuC=X`DB|sVdM)3SS?e?Yk{|Z@Cc)ZGX^#?HQgU4Xz0t6*k9}>R z59`XPuYJ``fZ-{x4+dGi<@q81yIz&DP2pywWy!j+NoJ&VW_FJ3LoR?Cjv_}FGsj{+ zW5(oNq7`NEMEy5IG0RRql16|jFP;+aCS?vIxtR!8qB^qKS1u{$c_-*W;!&jd*-${` zoTzD|+7;KmvPM5~k(PV^W$7I!Q~gPEjEFx?5^=yylwu5{X#O+`pl>}m8_3CCz!#7* zU|xC3tcN>8uQh&@9Z(^l6QHG2msWPqm5FOUoF9HQzUm1y&oZ{?bU;?fZMao+ZuvPU_4N~~l2%-;0Z ze5giI3%sd5Z z?cwKx3V=AeJ-_0%UMt8 zmQHMyF{)0Z!Xl;Hs2CCa=)?b4W>hix+jY zr=v7tCMNWJasP%$vnL}SCJk`cZy2SI_}HS;x$Y(9-~#%FLjAN=u_ZgC8B#b*1uu(Z zj+R32Xxz!c{AoLk=Or&Fr&>EpDPa^1aL&MMqVWMGQ_R}GA{qb!nA7j2STOHBrxz8) zk2{Qi4tuAmrw_j84tGJq-EQ##nMC9*-Kwt=Ymwj|zl-RlU}RH~b5p_=#vI^$qsL7! zPBkg}Sghcvcqs{otOzqboAa2kKiu1Ji`{6M(a=A}ydONi5$5{qM%0B|8*?7W$qL&l z#KNwEU7j=4+$gAc2cJpE9wMp!8uj&|!teP;En_FN0_ofGBUn2_FB;i?s63Y{RuP5D zzG$a#4EuuHVd$G!BC!HMa+G6*m_4TaN6c5aFjXURNk&oG{xs#j(fdZJA^9oXEfL}` zyciS9#C3y(+k-7Ymg4DeEXt1M4h%Pnj*UqG5B&L`fCjOu2zK@%T^B1|9^B`BXTaPM zeg*dxbV&ImGeqQ+&wn#u@G}Nn&F3x0o6jV0$=Y~tvIi^yuuqY|I`UL%;A0liuyjt^ zk4CHRvCipz+>&(ysHiZQAwDNTNaJ%F42BzS&LABVQ>7WEHL`t4Z+-hV2~jF5I>ni~ z`+=fkyuy;3IvGC-T>#UB)3j~}ePR0Z@nu0Qt7NhQzy;T`w__G+ky>XKw81R!-9dqp z!m5I%E)+bCigi&H;+7ndk0hn&*VrW^Su`5%<~o}J!y3SuNBMy*el@G08&O24cy%PC zqIcb^`;x&~`+Se2zPzcnoxOVIUyn%U{6PiQGFBOJ0;~od=T7@yyC0T};9vhZ)4^H# zT~xg-er9w%eb^lw4hD%sc%teKE!|&&=(mPHWz=cox?HUCGK5s3W=Q>J)G#5LUZxAk zzv`;joVR9D=Qv%=#?987HWTg6Z(D$vX@yIWEU(S2S$of4liJ1~AuQ;co&C%fJv9|IxiwOXR6MP5BR5sose+UBdWx9ZWD9!v=|^ihSeqUn6&WP2v>5-+ z!S{?y+C^Zj;4-otz|YH(MXa=2<#`|h$-AO$8i_f$o>A+YV^A1!XG_Xp-MGHBFz}W_ z?R8Zg|GwIlHZCVuv%crCz>r$})&8tGGZlRR$rR% zY;s3(N*a?EnT<6{i&ocZ8>C;J;zZmx&Uq7-{iCSjif}suY4y^(0EGON`qGA4nTryn zDB=QDq-2^w14bOVTU+^)TJ`*yX=-j$+aJ8NvaiyU{T?yaW!c4E~Uyk0%{* ztOXR;he{ytefyyl?M6Kdk8>ET&)wncY?>qeTr*U7kTf}mnX_G5H;8%tyZ!gK!;CzFfbZ~BO8+5mC_`$Q)61#GG^@Oh9N&wp~OqPsi=(4(9YKt{J z>@qhbf-`OiI6^pN{$gP&X|>|x$pbWgw$wp6;iGr?6`MODfGjRjn|NJ{q1CJ>j01F@ zt19^)6bjsHjrXcG6=|eOC&-#CDY8S^T3IkQLgQ5Ar+t3mF925LW9cF^w!E-S-C)= z++mfS^%>n4Q2B+d!`-Vn1V#?R*HWimOI387j}wGg@eVv_AShV40r?Kz0;8KvmC z``O1j&DN%)yNFgDJWHjm5Sw~A_HZ%%v-{Y~I*nKG^dfKD&yCJV@iC=N!uYNkz$aYAVaL=j6-(wA?bH$fyv!YmN0BInd~lBLYop6D3k19=i*Oj*_g& z-kUIY=xYxJI2%%KF^O+hl$CL-eCM*LBXv&F@qH`J2u*EmC^2KP8{45^1E`tzgzb0b z=X=B5>|RoNgdD3ljlTR4u!-D9a?5Y=Elii8RZ93(Il#dQ=>L;pThKn>8QQ8Qd@VMq`wC{ra7D4VUx8UG3->o2p;->2b5uM7g0Q;b zc509=R>UP=2DHUhOQFt_nkKoUr_w%xUi>1?a211zrnewUu^8V#Z=hL^8B1w6shui+ z$oQ{J$u};FFbxm?AZ&KqCbP@5rS_fK9c2QA@#>oMNxgO|V24kmmXD%YRXq<+1Xwm5 zds2Kfnqqi6e+8I|!w=`43*A#ZK1anMN|E8^6$PgrNO%>}_J8k?&CJ`|E0E!a zC@|syYeLhf!V_(UVMNUYfe-n<7rk8S)6xcuxtuNS8Tpc*4>dLm(O(Z2zkK=i#}iEg zW~@8|&IR*j=LuPr_ckTpekH=6^YYJE91hhQyfCQ@9p1rk6Me|NOF_egr7_gu{vEB# zD6zK8U`hY!Rs)GToIX^Rihio!tIU2=&O5ve4APp{)r<2k(=%x;5Y}6?g{b9febywL ztIkidvoDxo3E^&9Khvt$XN%Fn|GuQUq%*y)Ps3@%gr2S`*$9}ftEIm}^_XR$Qw2bG@ zJ{o-ynL>{43P zcf$}FU5j9hxYQ2fpRU{t7zAB^eMWVM@{1ZX)VMUIW&%=M(mv8h2PUc0;Z<=*KLpbs zx5#?Z%g=jPU?g{+^jOgEH8d+2uhli(8qoJOC~B3WOXQ@IpPVuDsV+B;q(gxbOW83~ zw-<=9dl+YFdm+9N$ZDq8d#+xG)H~ft4jQ*RJBJZ2&f?34w?6PUBfpkLkVYi_-tk`9 zSc#8SqKgP5WyD`TqEA=P6$GZ_8Xe-0A8ISkv7+(j$V8&_?v&cDvST$;55wU!mR_l6 ziYL-54TTy6$xQxSD_LO{((zZLYQTayfiI%rJZC=CeA& zD{4kSu|2G4>^rCJ-YuUVyo2$LqlH&wZIHtg<4j{(yMfxyzeYg$1Btz7=`l|`f?iYFk zEeA;MW@2jDCC-`3EMB!A?1Y2!PR7P5g;qdLXx5j)r7GevUNsfE{5egHsO^lo(zFcy zMYCI7&+Hnr+3{iC5Ycpn-4gm#w)aG*^5%iA@)kDdD!8vWQKZ9Cwa8s0Z7|-y5&N%( z!-3(W8o=C?G*m^vRqfaiHm|Bsxs}npq6I@g20MX?N$x0Z(g1LNXh&@FjAsWFtyD#)xj*6 zL>-3b--ZRy9sx{kJ{xlO>GeKjr_cV@jnk}t@MB>86_K?FQ+bJ%6hX1a(YyV<1(?@c zem9behJEF=(`{!FSF-O3?^TIi&+U_1ciEs*9TA(7h+>+Nj?zg0CIFDbae_r03 zkze6aeAf2tQ;fhi!kJ$b)NFYbNO3Rbdg8=SG>w%MS4k${Gv_vj7(=Q z^%3!Ezg%9L9Tggq5kW!W0HsyNoK0~v4UrE1aC6u(s$_wjw1=P*^BD##b@Xv_%F;1v z2Jx@6GflG$DRb3+MbQ+43{vs9*XH?y9T)u_Jy1)1pNPh+y(9Lu9h_WwpKa%oWH;y=)VOqcYO=B|OL#-TXWk9jq20d2E{*k71 zq5daVNBXJN6i%2-`Zdp*S+N^>v)wQj8j;%g_&Y$INyCttX!`9}u)vT6dI4sv1i}pb z!s25Z7l-k1VC_{|$crW(D;VWvQvb!FYUnK%D(|qY>?3wmWF5G6XnIX8=P`FSWX6h{ zp@`&C65W(4yHtz%#0WDr)yVY;)0gU-RdX9Ack1Bl+Da!BapP^hcBH7%uq3p~Lj(Is zMjEs(`coVEnBY9dvrlt3Pb|GDIj2A~t;bZJ;WQ@Hv)2FaZK(&m)hk$zgZneeMV=P! z<{?s5MX%9VitUgYwNHRTwoln6$h8tW*E{CBJTXh_A)md=k5eRaWU=cVM8l2FvO65q z*Q6E-HLcVP!iJ2xVb$Jhx(9|dC0ad4KXPv zzJA>RGCix6ebmd~0se|;i&_dnvGAeh)ObZ=x0Su$C19cPGw#XBxI}WcUv-?j$~IvH zhZ-!dLDD_Pt;L=kI8p%b36B8S$~B={U$|6G@4w4MdD-W!_sjpJ`qbFX#hqvSPZczA zw(<*SM!|aZ4N?WZazwtF{gjP|mQnq^DI~+KnsrjLI+uQFFogbAoI6tuVgPy8;YcR3 zh5q}av8r_WqDK%>(+_F3ueT%NJLmGdm<;c(vFP~anzI%vYA;5Z^5qXU)wH=TBX2sJ zW-o(gA&=%PgJwOCW`PzX!pwGksuQ0qPc}^!b6@;PcA=S?O|wK^HeewHlz)%JDRu6FMDBh?@MceA#Dee{0)*4@Hx_)}^PJccz8dnFU9Jt4CCm2wt;euGksd9qg#9XC z)9_YxzD7rBhip)bx@2OjfKuAZ8EL(Oo!w`#Vw01y<}}S05tYGsn*9_nWT|AK!Hd&8NlOr9ikqdYZ}0L4!+1B`sAPn7O>U z*_bNF2KxTZXWJLsK6ulNZ~eGay1N!-DD{zPqJbHM zO(iA3`)B?R8&AwCF9hx)|Djy%pzYO5BL(4T(|yLUTe}nuc6<0ntnMUvPJArqNPFEh znMR4o8xqLj_E$7TrlNTN5_ZzXN}&DbPRwii0Zma--}LsZh(^)#IH~IlpF4drrQE=m zO7uREUwLw^Uw#1~_2-n0wgBCzJOqledL2R1Ndg0#9(6LoXLXbXxWZ;E8%cvTN>M`D z=Dp*Z4fAY%X^aBlH>QE`RVQ_FPTjgPCO7ktMgnOf6y%s@Xp=l5uVN-rm{?&mS4BWY zLuCflau2GN-f*SayB(tHCpSn3Q3~3H*5XO>W=t`D7Vz&B;~Z!BwcE$s5W}G( zd%JNSY!WZoKDGqgtSQt$Fkuxp0@;q5`z@*ue0xD2{h1#60{c%{TK>-&-r6=6m~Gm9 zwc~iILPu_SqS^;x8N~;ph`w>LaV%baUE;t5EaLpT{C3#S>X8BAn*)kdQ)C%2U$5kq z-cvy`)k%SrqOvg*cf~li=6ROYlJ>K@g8Y;E)Eg!v99ou0OSX3_cG(&ay+Ll5_#+>W zNV165{a?G>66$Z$-Wgv?T?@@n7gIiSA#i%MmX#ed%3$1{`YHPoT6qdPs&rc%Ty0h} z6E9le;sPmlaaZ`aTzH%LHoG!B#V=9&R+Q&O3V9=C>l~uq0M8 z45o<*N&bCahTd(x26gE}`ZludUI}@fc9arlK=sC9vF`eDY_%*PHbOZaJss&-mO;;8 znnm2k+zCM`YFO+HfC=rhj#7)9v#B$!M0r3))=`qT%6e<;Pc1+1zrPWT(xs0X#p?ts zwp>h!>)b@mt1p3ugc(uzAJw9Sa`c&98NK?-oe|__135 zn)!4)_xqV>aVSy-o58#cAauT-6%CL}rF&n)_@6nfbq?F4LhIRdV?F zu9{UJ3#43#J2OPJ#2-u}&zhn1OJV`&JRh7Su&E*eQpCTal}haZ1Iz-S(kr8D3ngTk zGU~Hio4!>vI*=;{0V=jZdg6URtFr)__LL&*;_NEO=@@$hUYxJ&N7=38U)df<~+zOkKHz$ltXI2J$v(^{Nl?#}d*N z%6LyOE@$4GrLEE|fC>Ihn{dIXXRve*= zz0-DeKyjG;dwYWA&*pGfSUYEB;9n&4U-f~r+ffCDxX<%3#D_Fh?xBZY_GXt%qq_P4 zkY6ti=05hT!+hW7pWXTh^s()H`-)sxzGRxBq+(xEaVPyh07XE$zuP8FR!pXKf~|OU zcR^JaF7D#$;JJ=;9?BGbOY=BW$u-Xu>zEv6m`ZGNBsQTohr!HOu)Xd^DOt$Dc z^{o^yaure=YoM#}VY<7G6khl&4vX$)sm6pNwxcNo!tO`W##9X>wyWNxefgT=Y7o(|ecK%Mv5}-b=cPI#HqUX0fg1jF_~qVnAie=g=!g>DDrd#OcWlD;Z;@5X$q~AiwFR7unQ-_i(FKobRqQyc!R+F@STa`O z#0C|`;V;%doMD!LP@Yj&rrGB_I8F^OB#3AdOC+2bCp~mhRH2ji>fii96-9Il>}w0B zL?}JT;a3(f=0Oprsf*>arrT7lu(y;{GEp)MJK8yzVo9LGt4=j{798v72}^Ua{cAFI zw4y^O%+tc%JW&Lkejy&kqIb%fYbl^Jjx+@*KEFa)0+evo(1q@8nP)GNzl zePYKhzE;q<;~~T{H~ZeU#~Mqt&d#t05p70hvykhq$o452cI*O2t<)(wPeYAwdGJ*g zu#VO+i@)t17staorI|F-u_p1AM+^;(Z&n68a;lUua51f|7_xJT!Ox(KDr>lqs)LR+ zT^$Ia0odkoRspb?>VSC{%c))3OqZ5fl4Rk_mtNozR-zXbu5xKX#TS$bEmfZi>4_%O z#c^m$h2#-(_IM?RoUw@<8nmFLg>fdSJhnn0mMq%Aj-yYkI%fN2b~?f=TDEuz(<3er zgi>iGi`LNG=+O$)Ms|oXd)sSHwL5}WGv;FZETUuU*uYpid~DL;iO&8jW;tdRq7UYL7{}2)me|00zShp(rpXGwD(lOa^J2loBrHogC4Nd7?);lo8#s{Ppr)_ zn{7-S?W2n&+nfWGv^c*}nBPf{qvf-&Uz6A&X?ws75jEfl{kr6qsUE#WDZLJyXob=Fp5(ZW2DTbnCXO=p=gIr+9 z34d22F`+1{(Xv}#dH$2#{3_pIDkFFjsT<}#U#gSY5Ei44q8}emD6%9*q!1(G9V05) zj`KrR$F;dp@`oqN1lT7COP}iyDi<$d9!#ZpR--39mJ%pE%BsxrSVr1)C$&|(z%9Qf9dvP2-)yZ{yWGe@(4NZl&Xya1(jH z)+*Tg?7LFD_njHRW$!Nct1$zH5dD||iAC4) z?)fqM4P3`XsnBukMHDIbcNK(^iRK+8r?7#Z{mha`(8yZ%93AaXyK1ki<~mA|`Kj$) zV3l05No5{kd(8nGJ2ANvq|LA|64N)1En}_cD0A+d>a3Otlb^csF?6aq-$fktBD;zu zTb}Y~*eS)RLb$q1r5MilDR=Ol>xIfjDjGCb-}D_C8hW3rH!ZuvGD*rJSSAdKQ!Yp; z`p!fBOg-Pla-LVBO7fuGW?#}mMK(#t-n;f!FFFy>wv})(h1IjU&2B+TZO25`6lZ4j zu_~_X1VP0W_TdE|)_qp6`HJpq%$F=;7K^`<2&x$F@;cXEbLyF`lWdeiV(Si!(+y4t zpMy`o(u-YkG@m2PRMzBHZen?CA*5IpQu!&zAPR?LD3M+m19ET+6Fm;5W7{Y!+nltNw#?edmaGl9M3Kaap@0|Q&<-F_TJuO6Ki|BC384(cO~c= zC6$R<>)_m6tK?hXrI3koMW9tl#9+09qqJ{zK&q*9o1Wqs5<6gbuGdo&gGvq!bUJ*y zdr_bx>EbIKL6(Vpe9BZ!{zQ(A}Rl(O5Aa?$oFnHQw-6N&0jj%MO9$_z4U=3v_6Fo7s``xrA6{TYWL$=+OoH;Y8l4Nv^K6XYLBxw_q zSz$w>soD8@hoxM-X;>6S}DjuYU~)c8G=+h8w+y!BXVN@#xYFk(j)4jc2lxysL~^8MwT5u zW!ntVgZ-!^Y)d&&eRCN#X{)Wpm@pZay-#(uFgWPXnsjeL!!tR2Et66fL6%XR7+;h7 z2&58YGS|%(5F<8J=~A|fD?5Mj7&b~4XK)f-K~hD-aPl+~twRVb8ILh@VcRJz;-rPF zVw(%5oh);~w3DT5Y8Bm$5}(O-WU*^eXCcVUkxRZD)|ZOyJnmXWk!;G5MGi5PrVdV# z<1-?5VX25*7A`{Kr9(yT2+m9CI#j&U87}%?<{Oj_5t#2=zE`gzlR+3-A zwB#s+D#6ca!gyjwhVS5bk-R#yyYx|yO=9kvc0AEeX$PN4mp+RSDCY6YrGbvAnpmnN zmSyOMdF(jl%`*kpS;VEmj^jHV`C&FlxeXLJGH@v4d_yTU)FeoOtz?evRi9tp6a65z zQyp_sdV93G5fmh^$DWwNfNG0p5GrMQst{mKzDa&Qsdmb8yiE5_vPo2;WLjpLDA7`< zlY}hGlIqAXG|E6L!=BPVl#zdGq~CG$ZhOw=JEtm4wzVW1i;#7biAm7~v&nbZ`E*Zc zbjg9{>2zd0(<_}hF$0R48^x5}DoKek1BXqB#gs!d%HuKquL7)d50p=t$2*cY4I>mM zA?&q@F|C*Pkp0un%(7{g8IPXU4J))!(|(a%roD>+@@YMQWf)u9yiWVQc9pa}8ebt! znWlfYd`mBlVYhwE@`>+icEGHZW#+jUsB}hPn$?^;^{(%Qz^+6*Il=o(>kTbcYTDW4 zPDn|5Cubr{$2v2aGjEigLfY99N)fccV*g;}VIU8rITo$9xi^X!+BdD8oE&BC z?kMs9hE?2}}glx@i-)rz}gYg&S1*n-<~OS1f!Zg)3HNfx(7ktQj--IE4W zsw$E-VpY*qMM>;l1CrWyqmdn87r`JKAOmb8nLifDAhSRQNCP{6ERgwQfEnyAGC}gk zEHVRRfDEt!(#Q^w1u{U+?>z23_kLgT?b&vVbQncycVtc+v{oC2P*}H^GplI(PK$j*~ z2sdPMiDGQ&YQdOYPL%vq@sA@^?KM<1 za-|^+5W_*PKxb>I{|N_KaHj<_zl|;QtWo^Cyn?^;?Uf$auS5ImYEh$(lq$--9Ks9@ z)kA2eB>fh#ehJHR{StP$Rzi8LqL3euE+Ypnw_^3lc@=_2g-FIYTMx2d6`f7yhg`B4XU0XlD8P0?W1b{IU4=2;Yi5Ec|za@0=hVLNx#bPua8pBSIVP z^=gv%piPSPk;D))D@TPMQrOtcu`)q@7o%j~n9f?jF;h3>go8S!mC)km9U=T!&rOYM zVlk7A-z0|OZ3v}haXYxd(jiM3rPo2;>rg^Yd&Hp-;vccQp2N$J34*=nxu2I42$)+D zMb0m|EK$nL%7djaB=-mh_X9lDx*pP-Bi#T2-K+<~M;3LTU1r>*t0DXG-~h4c%@%|= zQ+T*%b+wz_Rr)`jJT$>PV#X}6g!LI9mfvo+1B`2^he^QDV=~htsq_$ThLpiLMT&^v zjAQcoM6A$T8F#b(3Fm=H9P&5M5OYOBw@B@l zW+l=cfZ;|b?EZ5Iyfw)su+an*^SFMNAjJgthQagzm&%~qUxZVQA@&u-A>1)RX0&Tp zYyGw8fr?J!HS=#l0*OufOT8r-&Lbd-Y!t}7g)>sj!f|plsAi%ZmUl)eV7AHEY1QKq zX+q)fh!9N>{E#4G?ZEe?DAeZnArIyLmFG$9A_?%2?6I7o_YO0Q!rkMr^7K}0G2gY? z`pRxgsqj!oGND$R^bz-;gPIxbC6}F^b)oDID=V#C%nmKsL;e*F4j%On*l88{5Ob4a z53L((4-T~(eRdlmBu#-vn!t383t?fh_0T2gb*+jlIXw z`qNOGDizY1rm13tdnJMrafqp$s{{p_!GZhqzNvfs!839PMpo}bD}oo(q1CmNnHaU? zSf=<)SmjdYIN~ch=vt@2^BVlK-avx0q|$pB6oWk8MjPj$(H}m?=~i*AMVy#=i-^7s z?dQd{ev8p_#0SIqIDI8x+$Qy-aDA@#t$$C(pMd`u#g=kJPpFB*Q9IdQ-& zzZo#gZw9W{Loi{J#stJ*g33nV8{^~&vDB$lBtp~#{^cAvv>rkSAE<<|U~k4L=5VG$ zRtnKL`z(du*76Jlb%z|R9}bwE$N&zK^|l1b6cbo~w>VqQo<7_+LRPr0(SIkOys{oqoI0CDskK(_Zofc>@Ym-2%(@Ih|- z{Jr`qyBmeng_sd9Hk;T^w&qqoLTHNiKWaFH)zVyA{Bxuu22(}Fu;1Q>gH^LVVpIU* zQKpNcI1=|YNgco?2ycoAs&|RyMGS~ggo94&nPK8WKx)I`vS>W!4q|g7pl-Bl(^Qup zsjBrEVT23=5a)v7+guI9Nd>b=l7mb5LqmJF_yKYAC+P~(YXM+KBmv~=(>y7b)lj6> zP@QN~yY`CI+v!jfUt8ZYB6<^G3&XwIQz&FFiqlE%iW;tFT}-aiT(}_*W${Z87EZO1 z9WnzmjpZz%$1yD(ZdrY>29*><2=i7B)ptfNY5W6r6TqR^Nwdc>C(kj94-~wLPO< z;lb^V+nu{`xsiG-Cw90cf_r!Ts^%8EEHq!d0%ST}Ns1K7-Lz4sISLy>{ZJpiSQs<{ za`AqT!)!_)oFPIQ9>OGrZ_qxa4?7^FXZTD9z#<#!A_ON(_@$oM<+N!~%E|Yq;f|5F z2Np;IxZUTUpkfl7L78n8@uC?FDJENZAfzBQH~tk_FO<`n5rE%tyFj40Ijw#@ipfO_ znYGy*`><6gaRO4>FVa{%`ZzrcBVNH=@ zxatzLONoN=j82HbD>{~khA;~fg%7;^2j?*wzbtMqG3V82I5&E=YC4PRR=pxVNGU4f zSRZe0WxFJ372@YsFi&<$31Sl_H@iv4x$clQHqL*QCcF;S!JtqWlnH$on=b|?3OPW7 z&A&|Ga>$-lV4%JdvM~7}BWM5<*kpiThy^ z7a=hoRx}5M^w1zCBnM~ubBpuDtcH{vJ0?kY^*mmrsZd)7Ea!2A<(y69JuK&K8t-8} zSknXvVp-2SgfTJI(sk@1S^BDfr|tP(Gzu0Lj)Wk?l8(Y;<7t1YqtF)L}j|CB4=CjesF08};+5xCC{0z@6Fp;ljg{|h}{ zTc7D*HO_Ss-kE}Q1tetxgXZc3x{rK95L1Zy>S;%GIyslw#SSf8{55O**;;3p2frx# zhzdim&#x^8(=dH8Y-63TwTz+DTy|aoB|O;?g#(!(8b#Me2gyR^-PFP1z_d~`6qLm9 ztKJI`lzTNoIBz(B9g73}Mhny}dy2r8!~qhmL*-zbUfF?v5MGBo2m>N!!eX=lF`HAL zud-{aeQfCcI<*Q;%?{+pD&``t)&r=n(R_Re;@ZyY@H}qa`yng}U}BoW2--u{H41c9 zdJ^JQ%oW!=qb^g+;THUW1K{ll=8i;7HW7kX_6LeInuLm#8q@M-U8r zW&pREo5X!xf1enzSY=m36P$B3!9*LO*wusqa+5KW z<{DK7Gc19HZZe;La?(U_pDQr)BzTa8oM$CRVTzL_?GWHCMrdUp6)C^TMl2EkgxrDi zQzlF~&xIvCY~6z5wCy_z$?E_H@m}#`I0lZmA=^cop~!OQdTGXGEbpUELY{vyG;Ro9 z1mkJ`*kRLLQ;e!3G|TDA*iz#wv!b}l%u0CBl~s6i+FcdLnsnv{zZ46%;%3rR6)*bh z`kqfIR=TgU$yvosxti~xL|?6MVjr5?%G%K`Rb33x)2_*JT4atEbM**sBpH*kX3Q}F zN?rxn20KZeAlTDvfO^)MF2`HV`wqsD&4Hy2)$CmouMo-8X~9>7nhZu*F4Gmye8nWF zQG`myAu-CX*%7m6Ev`x0+?R;2c7QDSZdS@BvhO0!I7$(d@g7PM@!lV!{3ACwcw&q* zE*z3mM8|uJ``$)BqP#g@G)L|G><6xDcGx8Grj!JUMt5^iZplLTzU#QuhA>7r6T*lj zl~0({k$MJc3W#lts6W#Q##7CZw2t0-lf;!~yb4**eXxB)f^L7XeG0w_!6Yv;Wt{T< zPhzT)$zz%hEwr$h<@6f&i3T>D*yf}-K0mrEgFIc1gE&c7r=j$DXSMWJWN`8(zTad~ zK^uSb&f;K|u1gExtope%O%!=QSPwXTV~C{&p^nOG2}tj6IUtwg*LcM=$zeuhY4)uH zTQPWeE;J6=d&V%w8DE0Wj4#Pu#!j9x+=vv4gV=p`ogMWo+m5`pa;k z@nw0>*wJx@Jb;__iMitBLsLORTDbL2bsB#xT;3s!7?=Qu@;_tNwH8w3g+ZRg^78= zdS+r_D4uo>(GmY4JK-PZfM5MXRzxVDvm!yppo?qyJJOUhP zjyQPXxVVVd6Fe7o7)=?HBhU2eD6kiZ!teGDWtd$is+u9{Zu%+@I}G5vuGs_&dUDY2 z_Tf>hRX5FXy2G_;|67kw`oIpd*LpD7msiwD*au}csyVANx^(-!6@a8Wcs6_^$g<+w zK!%&9tKF?yr@Od8+pNRS*GRmOBW*X33prF86f(^h1?kuj<;Zc%-FsT@X!&dR6p7zk}=Ru%`O=$J+by;Sje zhJ(N$$1S%?h*I8WKPaPX0Lx~vf{$ge>hOu+Xi*)in#Z(j0>t-XS zAi8q~_dLP6|9Px?dNfm zy;a`k=QiPq1p0rjsq7Z5B4UYZa$nV#?$AM%##)wm`rToPI8vTwM9M4;wis;r;iE`h zDo6DrERtjvQFv^JuGed%oA+ao=vaQPCm?7M&kX!Tn`J&TF=+DMWag5-iHgi5_jzr2Nwymup7ldBpSE$244+<4&@1TYBN<~JPHM7`N}844R{hB9GmhE8R3jNK<`3>{T#lSI)sfGVwR$BqP!@BF-u8RvZ1+x)8B_^a_jW z#p0y}#En{;8jaI|q$$KGAziiEerM37KL|;HF+WC#ea&sQHzr9QOotP({B&obn-Pp? z8hBcpkP0e9lMEISQ_U?pp!q3L$I((t2jgaW(0E237x+bnlrwRrTYTIkk&t?XFryw0 zZEVqx=@7F{o38Vfu95{55Qd~as~4hDjOei@eiK8=Dm;@W*kWh#c0gy<%b+;{ZzM76 zz+sjgBZ%1d>sfq)P*a*TMS@VHm#hqra4c?I%s5YH?v0Aj;#NB+|puzF^7b+Lz*DKji6B9NQ(O z%aUam>AH+4Fn3anG9t3tLBl<(TtLOTWvLR>emEDZm2iROE+Td3c~3`*@bsA^-!}W5 z*%d<`+h%{d;o=k;sw&!eE>2z%=k+TEhNkbBDDGz}gHru9-8w=>DMsjtR7j;%MUL#% zX&aEmK)bkwm-`x!CsL#;!K<~GLPd=shQy(>Lo5%RL@d5dN_Z87c^o_vWw=I`BzirY zX*j$-JLWKIM-&m!0khA~jB`9LxXMfFTaxTmwWd0zj15IpMA5vf$VQ4UMXU`=8K!SP z&%BJyKdJnpsxzt*^S#U?@5FH2C*}sU{<4iC;^Iz`r%Q2K4-ON%BECk>n7MU(d_If7 z3ka1F^%SfSq2~UI_q}Bac^ryyU?jM+KBHZ%oA+77iQ2I+QkDJaQdh?akw%2AY?FOQ zuw}?t3wi7-tA;~{i%FU;Losb1L0(q%0iRE|?5^hA8re5n_t0ChmeoO{2 zHxs?f2&C)Q& zr|KR z^l8LcZ$^x{b2BTe7!wZ+X)ubnwJ6=9Z+8o&Ep1?PO^5Kj6-HFLBM*Ckh%$^oKynk_ zFtm3~3#jvQ1@@_>vD@!=5@(d(JU9gT$euIZ-MgrGQ}av67&RV}xjj}Zkj)v{&)7_9 zze9L~{dpf`0{9$=g)F}OXS*G$^d@td*Jo?>9`+0IrU8lqqCsY&s5t{%Q4j_zR_Gqu zO9zyqeQUM0K?mpt-X?`fKXKfP#ryQ9u^}#nNw29`TyN4}HhT)5>J|rtVymYV#XUwx zMuv{uuAANN-Hl?dKB#RF+iT(aWSe5A2$rBQsLTQ93Q!`=Nl*(@$RF%$hKPPDX5bZN z24Yjqg^xXk`1}cwgv1>^V0O~@;3Dqn8otEgg{jH*9S+fbN@7XX3zs8H8i9qWh3ho! zEJE&x3{B2Y&wMDaX(Q$bM80}FbMJdro_X&FXu}!u7ldU*5C_>$Acuk%5QgT}N6-A- zr7lAf5Q!FO8S(0aEf07RZk6#dz2sI(o}jN1a|Iri8$AM+`to_u?V9NiXs0IZe7j#8 zpz8K`59Y)sO$wpE6k=9Zt)p*w(@{21aD2R?5xT*0{7 zeI51mBAz(W&^;sVUs_mph`T(!-F6n8nrByh>&P@w+(_et6s!ChCIp1`Lo!Tb%rscR zU>9s16{xcmr$NmAeln!y*&vRo$0S5iHWnU7q)GA(aVcHu2+1LVeO?SbB@=DBv`zw%?guPzc+{jnfHFWS zjE;{O#~$K3xNI|JaJ3IjaUUg5Q&jbI)fZHS9Gx?y@XCd`Tfo+#*s0CddV_@$(0^d+ zzntFcnC}}1+j<%8<#X^bz#mia5iTjz_nmIq*bvqWKs0in{KeauWj^9aJO8!(a`iQB_uw8s%*O6}792UtzA%6tpeO zN=!X{xJ34yPfX0=*&4~DWpumsyX({t1($^}3HI<>x~y+@hqhazs@knlzTJw__9=0QAkb}wN+0lGJ_Ai#g=T0C%Ue`B<0VM)Lka9x>3Wgh-#L(;wPwNG91Xj-erO;` zYo#sWvbH$r0+NqQG~9lalTZqY7EY2YO~b6&Z-98qhc<#DWY`TN7L}sI<3sVWms!#T z&6l^ZyjhH51kzHs6m=c*3X`%T?&dae;f2tOIKRDAL`TkRRhi6j%_3+v1|EJP?E4_x zl}GYO@sV_cbnA}(h8QQ(U9sEJk9>0G-m7aY2}j9%glQIA!oc!RG!`Nz@WTYv<-f~q zasSavZ>^$y6V#?>z|R#FD?v7UotDlS3zOD?nLYQS7s^KSYFE5bf?R^UOjOuPVg;o= zhT)wgAxIna<$)k+2r#Q*U?Wp0AqgQ{L}IBUI#x%+6d$l&VD|P?Mn#FQgpT<$xJw+Ng z3N8}|+IxZ#v($CK`_Ts%to^38d`>Y~=N?lajP{b6@I(#H;9hNVm9|fFmZQ#u*=+^D zZ-3|VvWgJxJrH;+o~BxGxtn*CXVN#6-F0$&zqtw*6U|j6c!VwKVk_~o=wwHmY}7W~ zGL>70A=RgiM^*2L7VDR@;mT__D>Fsr1zdZ;`tud>VuU1XM}nC(|h=NLcL8n`c; ztF^k04O=EvoC;P8;@aJ$+|aBx-VtYK%#0L$rj1h~H5?K*Z19msVFhzCCjGuu&u#-0#Jx8F3HcXk1lC1Rkn^>BW@wcxG>M7y=G zbjz(S>>nFjb8PW3(~&f{y802M7O~`+ehlBJDIgAl6o5_1eF;{|$|Z`m-GWFW*!~u` z25Z6e(#A4G^1XzYX*a(H2DG{gPmw`|H{Fv$yjSau1qh`QV3ufr@J!ME+bk+!Czd`N z7ST>&rQi4lBp2ZjmG5=gHwlWhIw@&_#C{Th+nqLFj#Vi-R;U(2>VT34oZVG)_p`d8 zz{+mX)dvK68lIk-5)N`1Avs)3#fuHf*uP*IkpB0#%~^kEaQV`AP}sh+s7glHx3J|{ zI=PvBBPsY`B}a=jl2dtbw3S9tSb$`zP zn6Y-fw!aKa*XKZ)U=$8qi#(I`on-3Fb;x2R4hP4uxT)0?-g9N(1#!2Z??(S8%?~f( z?WKevy>-}?Ea!=Wvr>%4o7(Ku*W57iYv>NvXV^XZaP+gNGEH@htDY1NwF9;-!V*+Q z%7h#e$>P11=pniE8A@;UeBoqaK*cB9#XG;&U?nT|LY;rawRyO)%e7cDO%O|T-6uYG zN!fb8k>XUudI1-|!NiaX1 zBxq46CE$bUK3%P6@rSJ}setL#nk4dC5dD&-ML$)E=ogcB`u6mXJ2?Md_m1TDLA_5D z9qH6i>nOI~lJzl#GKNzyGPp_^O)HT*IC z+vO&)TNUwIoqqjyEPvML(U=PC<9;)F>1rSgQAxb}n4l;PNf`1pDGK>8Q@@l|jz!A# z^%Nm&GyhqFp%l08r zkzuni^Kq#^qhpM)`iK=|m<3_B8n~}VT~q?;3bvq{7KiOconXqycQ;74u`=3(pQU&e z2k*9?A^in=xTY@;^zq>WQER{8<*~{t)BvMrEP+J}>rRu_y*}uvJ9&nydiqmR%K4*w zD+TTcZD>W%HBUp!YqdViK~rl`jojz*B4u))Al}@g{Ql6hPHnX^J1w*DcNkHih%m1e z2gCaLORR2%1@4#JIop>w#DkXV&GiNd z9&E~?LX}u~E4Z)EMlO=_EXkqOW>5qjE!h=3xC|ZZ0EF7}Lj{_AvfppE@2mrA$WyT` zT`3@eCd*t9m{ZuTBJ`{LZZ}i${ax_iv>HZmTS<5 z;Mf~*djLxsE8iHTR zMf%Jv%}|S^bwbxwiKY)X=GRC|M`b1bvVHcXm}f|A>?`1i+aq%BNSZ2vr89sVq62SX z{T1zMcK5)$RjoY<`KX4cT==>RFSziB5@!Dk9HKp>+o?(T_BvexB&e2sEPlm-Mbxnb zVOuaoohVRHP*O>)uEqqTI_|;-W2M?se2S>&(JE44ke_LxV^N^=sEp-_b0@8l2l$B_ zTBuO)jiu4-)94NHpRRZ2uiMXojmd6e(}EDi&ap~4X4*@UskBH|-Y zdA|&Q3m{85#6f;ugYvmql~3k=H_xQfsck+VQqQY-Da}DmR$dd zgog+P5i4xu zknD&!S@|WwnX7yc6kNDT3Yc8A6s7B&f#5<;7*ukGNz`0tZe_)Sq-Y$V#denzTj>TQ zAYFkKzwMn3WU%J8vNG3+?a^E?wESqDz^aw4fS>=20cDzE00P(lu0K?)@m zs-}gqj1ywW$Caod7a7PQKl}+jLW7MBnzWSa#vgN8iAPfed&i8j*^5H>X zTt>Iu3DN{ZoWN;aqyHA4lCMN^D@&%EY_4Z>C+eEWT zy9S#Ype-^Z5Cq@QBaZk7_-5-cUw9 ziyV!FL!%8N-uu192d=#x)ssu{H|xQjk>n;`GIJ#RVM%bZ_avxE3MH@_H>FsTDh_nzA}brLG&FzdDd9KC!o*H)=|9{VtI z78R2(D|h2jnz;0^Yd$o8FGc4oREQC3O`R+!6TFN)@LX_jMj!43tIC*(6FdtcZ;%~U zaaEdpsY2r6Hmx#emf1HdqnNSzrPLQlPCAU5?m)r-lRKpd;fla;qTpMgq%_{CF!tvY-1LNqv=J z;JjJcN<_~059p{+9-QKxEqQU8-}XLe=EC3j5(|*bqyM}^uJs{jESWBDwV}4Sb;xzi zvh~VMq|-A6MLOCT*ETzM12bF9h$uHAr~8BszGvF>Bd8y&hg%=rX7%2BwOMab64O}3 zWt`;r-~cP08KhCOG*!Tb}++=n+d}w>X><2;~JD>!q$>U zh}wo?PwNm^;2hF_+e!yD!!T}nic@;dyWRAli-kxc9|b~ zlgfE#B&}khX`pKJidk-?uxYUn@32K6tD{H9*@|VISYkP2dQEqCY)OR;2b{q1dz2!+ z>o2tXhhW68_gsgVmwY+Z8=5oy<9D7|FWaOFQ_u~g!B(`QE$Zib9 z{#1h4wj`t~{LbAWOCCK;X+0=T&@`XmVICS?f&*)ruOSg-!YxRQ`f7bH;ce%Va4RKY zR4WqLpPA zYqyr@R))}A9rrWGIETa=41Om1;qORAFK++XY!lMXm{NosFDWjHbf{lxbDFI;R-$bJ z>>9+sfkR=U2zfGDUw3#j9aV=?7v^bX@PHBG{tnb%|IV~t55J%x%CjQZ1uY^&>O8H21tI35JKYK3aw9iO zr*Gp%URKvwUzaaU$$=G7Z@uYI%;M5qOljM4^00KNs!Ldc1Ob5zv;QazuiN3P_y}*9 zG6wSoV16AWfjUaadLX`ulyyTI!Fk)KBAc}I5rX7V44DXMZ-t;e*<0MJdSQszBwe%4 zBXVV1s%W2vK1#jN(hi109M;=oPc{nkfR3faMvCUxO$E2n30x}BRg=ack?rliG3Wr4 zSr}yu674U0%Tj)f7PEr`*2Z(2gY}l7O1>J?t8GQ}bgjc?r|St8iaxEL$FLXs2&&Sa zI6vIqXh&TicnP#Q8o=FUDb|*850Hz2VQn`^v8jfL9s&*)OCg8g2LuP|c}y%#GzdX_ z@M=}9^A?r{9Dq12F#&_7n1EZM3^EhNZHpu}YnO?FWji2Ik@x=qu(N%3GD3-+I*P-kLb|?~oc$FI$v)tvI zM0~KsXByqZ#9Td&JI^B=OF(Sq9Zx{`4u)*HQg2s^SN>$Hr=DjHYHk^5R29*)AVR_7Qw5N}Q7eRJwFMgz`#K5wkD?dfwYjrpK78?P+W$LA9a&W-f z$u!bmQ5uyiZR`w>Sfuk=K?Dl1+lJV#$svf}dA2_UeZ1Yayz-ggVU4i^gYH6yT3MdykA-%BzY7JG~x5eLx7JD3rouhPXxLtaQUC+;l^lPKt6~ zV{6=-JOLRV*-(tI8Ay#GsZ>xG2=5f4$~Mv90n;v5iV$GAyNfl{ouxVEpTZd75F|`(h`Nsnj&pdKtC=l!sx_RXm$G zQh_m3(Q1gPHf!txUwQ~jp}z(S(Ww#8EU{@bBtBO>$m--?V-3Ag=I!L&oatm?u9Q8! zhd6InG_2p!rzi9B)QY+?F2&jeV2^$<-$&2TWbliI)wvZhzj=o?Nv*@C;3~azS|sbw z^qIw?ZP@;Bn%bmBBGt{V>~h3TYfLs8J%z-Tiot4BUEFGJQh%-A?Dm~~+5A9M(C1bz zU0?6k0(4m+esD>Gfjts@89642$MIjIQsu_&oJ}aa54OPm7$o{w{DB^tzp-$0VR8O2 za=QJY<)Y8OhUX>*!52+`;E^VDQ=@pEXg;3!4ty>dyxj3nqO9d`%yKt`XxTc%Cf|Bt z1E&a>shJm}P;ic*83$jz2HvQxuXvbF5f26j7x!iT47%ky`wFHQv1BL{5es;T)5~uZ zQMvwTy#?F88wfAo!QZQ`Rs1l^siX$F(;k}3(sxWB&1i;XHZ(G@NoG2Vx!&UU?-V*5 zje*;pJ>|9i2~TvLV{m5A(}uIb#(8wr$(a#>TFg6#bi*4I<~j-smJiM zoEcr)d9UOD4z{fwBQkX1=SsvDlsE7>#s9n!l+9{fGw4+1ElsVhzl=dQSxt z{*@P_TywaacJApvt(h=ccL!0h1t0hkI*>r^>1T|?tl+TFq13r^ONV7{O;Zs+lcboS z{9V@5_(UeUdsG5lBmAw^k_lCcL)VuYIuOcK55 z*xIeW6Pnl=K9r`7t*|$H<8I zwmiO3K|XU-Awn*FxZx>(`!z&D=L(d}&JmT=qm;94IA-6#jWFD|h78R@b3atm zg1uvJC;09L}6k>p-gJ5&78Qi~E=W`#A&{FDj|Ed_};)~nChd-oS zPRis;IKe~qB*tN(Bn`;+=T(;so)bGZ+ATr$aWBK2f}oUj{8=FYF(4xO2{xnzPeHnh zZV=JL<RsGn3lpOY@i3d1wUFP!YQjYq&xNq|D`{M6bZUBZP7`ti3@?51G1 za7+9)v-%=fk&y;SbSpWE2|Glz82tzc@iGOm)8zURqmKO*t{yWVI@_F~Zkc_5CgH_O z5 z8gIZ&xsO2`S_BoEHgvu*i5=l;UXIQOZam%W8N!>}hLDiHAJ_PS5-*IxEpDnpBIS{5=CeL2WJZ*Ir3(6ZGX z3a^HF)x)792qCOPut)u3*dmunpLGOaGU|AHNQDdge0E=uOEftHop$5ZV02Ld=-tI! zKvVYW6uQ0b3p-GD6tAM7P!4y_yivT->E|sityLw3$Yw^v{Q%$F%mbNRow=gUY&riy z%`F)|VYrl_Y*Od@K9zqPA|LnHIGz;7CTLc)-wsM2;%5*>&-NA)X1{`!Vo~W=0~w5D z%WT)NSvIY5MoWHe^zpzX&rrkPZ^Fp)TbdZm_}pY>Cp(EFr%=ZtR+}3asVp`M=PZ~q z2Zzi2Oe^lZRQ+!>^q@8kXTJd(b5-Oyr^g zi;-Y^0^wRfCZ$`CO6gGg<6)On=d6+9LIaXtg9)NK7dn zTlJBHrcnj2#)VL9>R3(TpVG4eEE3!4tdK-qG@+u=F*^T_f~19Jo|a0aOk^erPwnH0 z$tJ_A25}7{6L@q>2pMj#WE4VUPT*@^z55-HvJZzD+A{enMB1U{x^8r}qPK_Ix!uINU=0~1p$0!_2`6i}QcwSuZou6h8VjWk9d^YJf26C(biU1+ zc^gA@zN^mhu#a;)HM5lpp>Z8^3|+QBrK;1SQjPX4(lRyBTirR7)Tf%(?ZtuIOK4in z>YYjfdKp^UMK-ju(DPUsICa-dVfnJ%D{#No-HV9v+#@ungyvRy z?tIq~QZpH+o~{-!to9)Zqo7p+w@{lVQLYWN|4qU0$q)MjjnR1?9{rh)rwaVw9Tk>!z+C$Vc2TXTBQ&Rmpz z&Uxd5uD;uefxjVZ7*A_i=aHV?JAFpqXbVy8-_`ajZ%ttG_$vjStfuo%v>;h25{QSHkrfy(S~aE? z)U?ts6fvrH>nO{UhC=P#x&gfElVNs?w^J%4uo01n;-f@dapcyz;azQ`;J?of1+$O8 zuY%JxUbbGV&}>QwSwpS8|oQdTf2}3I8=^BH}qUrrj%oKzM_b3I37N#wV}qmHkh%|CUX*I z3qx2!vKtJL39WCF%es(MN=rX$xkmE;xu6fcDwj_hgcgfYhfrwmu})LVp($yripcDi z9u7y>{fR|@6M&BMeSy?6HbYA?I8KD6pt4XVf0q2wp-vP7Gk_%q157c9xWGsx5qVIX zNd&10jX7T(UKypMEbk9niW-Qj>H-S`rwol(xj`%B558wuf}SF7r&d(v{!_tXJgpJg<##?a%kM3`d22)opWK)w zLpkoTgzBWkkGZ?6{qylQQ5^@klJRe}%6IEe)-&B(`b6v0UGJY@50jr0&D(24kUPSX zO2}UnEGwEj8Jdhxn||T=J&)8(JB)-mp0wj zxumN*cIq^*S4F+$u{$L(eIAog#pwGw z=8O%8tZx^nD!>P-qUM@ck9P;R@%MOy=y-yey<>uF_PuPJiqy|^;VP67VW5D1?cAVW zGN$d4MRYNnhOm;r7{iN{N;ldj8YKRQzh+$*NdD0Yb{G_D0!?s%Wm z(yrGaIP`D)oOwZHDon9S!I}~uTk54n!)O%evR68>l79CY2*xK~mGdj%=>%@q)-^TO zcx-uFb^%LA9MUtIWW|DP1_>oG2ggEJb=fjh?=yk(jv2hRRlUuETX;WHD(Q#EiOs2{h>@5`y^k4Q~-_h|`L3yFh%*I|kay+n$~a1IB}x zHQzX_rD+B863jlXB((wnRtAf*Q&H>14HZU22GJ#pr8^l`3YLM50y-RK1?uSYhzl#s zxY+Mxnx8GRps^ZeII0M$87JQGQ%p5r@MI$HVi!zRZMF24Q>!aGA~~ID4&O+C{Aacb zvsoddw(1HgLir~P;cU_Xl{=%@LY=2J4k>6zv7KmA64!!ZAVWTj&c%}K7NQWQrJ`c) z`dBu0k}mHbyA@0_e~ARZLxj|%?2as6^96h*1gg%$BUsDIc+rbCrbJmJco$Mej6$6h2hURgUTr^pk0$fP31Xmy9+{Ac(TF?0n+&5SKT zNOD}M?Ws9a7u4RLA~hj>`ln##Gmp!gFb3m7moZW$kV^XKbl$|iDM5>UYzgkiXJBMe zADaZ<#aqw^iz!H8tFdqxByr%bM1TMGzDNQN$Yf8F|1UN}y3hzXI94BX_{X8;)Z@5c z#l~ssu!|@k&LwFK_l3S9U{5h9{c}yBf@+Hqc@2+iY>QYgpx{#cBBEg`NIwC=CQix{ zKCh<4sIS>Js4<_iJI3mbi)JmK{nsd51!-41%+Vo7zN~|2O6Ux=^eJ$D5?qE>u>bmo zIv>az_+{cViUO<>-1*mQf9#$kgL3d4d!<}qd`xrrc{v#EDl|}f!ZE7<7BGAt)w?7Z zLn2z*-icytfA#BqZg|l>te@iUOhKGdOgSZF;n!~+7*}pFo(i@gLL?|F@E$EU!pe&X z__+Hukak$l(A*|QZ5r+NOA7?gr+3-h!s-4m1ZD};E|PUrX~^aZ!9Pv)n?x!%2xebC zT}rtnq*I4Hx_F7mgmZOMG1h24suQMX2o{k&&5N&?FL0@xx7qK+4E>#@##|KJ>YD3s|0Pw-{gc6M#atB^2F z@30|)vm&8T;u)Z=P;f3W^6gVPEMJ6nU}$hbQN^H{K*>NO({}YKUqD4-EAvs^$eZth z3jDDqsPxd&k707na6@}2ne%&GgjMr49+#w;Q(9@a(pw6>yZvLzx67nu@3Y`?^#WA! zg~?aJjlCnRU_kfRd$J9HA4tnzw0NH?^_K{oGsx-c0bz?CmiN7r z^4A6#3`guwKNM7bjKHdd?_(@TKypW9L z;ZMvpc#Qrs8DJ-Uu>R5Klbtb_=ZtxEd<&LbFa@81IGPZs(RyT(9fwKn!&uN4B*9{6v6Yv2aWWU6PqqM>S`X|U> z81$Z`7vUvLg-dh;1-FZ{rs;{V4acy`3zDJswq@JJ04(WJ53-1y*vT2WpIU$ z*h5xomY{%2^JyFZA+=){TC!sjyn!k_>5Nf|? zFaIPGI(BiS37!6Y7&JtT&ed2ykO+gwI9{`Zg{>?61ahIfc`vjn2;c^e;4+5~%uCo@av}U2>nZyn4`pXLwVg0Dd(sOAyR;tDPe^F}Nn1h_m!c@P-~y zX4(BKMm&AxF`#1wbA4z0tmNv4qtOU#H^Fc_(BQ(lu`2RG0m%=wU^7pf<;C7U;Q5i= z0V#u;2~x%+IRHxYWwHT3+lM@~jQgXQ?BIPF>L*M#6-oSFR%L@(we4z|xNVxwmmu9B zQL2tuu?|TjA~AjKO}mkW+sz~lN9hQq-PWH$Fh6NsjeS{GbqhO2WJxbgQ=K-*KaPVV z&h=^P(C;l2BHDU9|7#v9|<mvz*XDkr)*~mRye|P^LOa zB;_yoNO7f)ZI~l_Ti0P&EJt`HNnwKPTGN&xFq;ef1IalZATX>ML6H7+Ryq_x52SQ0 zIkjK*lX0j?*f4id#M7tBfT;J51UyU`bpZ1?v^RgrR9npM=qdV~yUh`u$kof;XiBXV z_ih;l=E^N$UlA7LiHx`Yz>mJvt8p+7ngCCXdNpER+bWt3voO`V>dy80wr&f{gG8 zv}lP#;&^9@2+xs#an>4ct()_t5%~yvjNJL_--pWk1loWk*Ku6{y^_!ExNFVApSL$I z|D6*1BDIw=_hQl^k6dk`jC1f>CF#hOZF4v=kscv=cS?lfrt+RY)=49Q1suUS<%*NP z4s;i3TvEpE=P+p_hE}_^l9Y1~dryQHOObDmJ+Ew>c3jK-XPi#Uh@!`=7r5MKJ2b~# zHFV2akE>Y2wsv_GW1{JcfgMF*-9CxVX?vR+qPHD`r61ugYAf12%vYmS9NVpa9QA-6 z3P0l*hjSisUIORTC${V@>UEg(Ioe^};@8asKcUQeCx*y5lm}zf#-nH__`j{MlG0x5 z>?*0LB;7;$q!MbD!sZZ<IYMRU0_WOUbSqI-A6_r#o)utfcfT$iS`Z=}FCu+= zLFH0M0-bn?S0!_nws_P=Oth^3sRJm-;Z;@|xN#UcIqQ!0ebaOs`dB`Ny z^&avZU@sR_v&ur1HeB4lc%b~Sns{C>dM7;WwAER0QyOg#tsn9GlVUK%-u}>$;+oPs z<6YjyVRNOwz_|oS=c=v@>G5!1#hed?#iMSYh|mPw7Wn~}>*zl?W9yUHMm^3eyggT2 z2}783j|Pg05*B2qR|s;sEF^8&4|Ue~LW%UdTRzk!@n^2ts;9b0uRL45yP6i#Y=fC; zzFK%$#ms(fW@2))qVKE+ttlqqX#-$7$R4tUnf{LAV$Nnj1TC{I;Ik_$Nt!a9K+4tB;&leSodn_)c zY6IEbY5MV?lJc~gf@1M3F95De^d%g@AmX#vas)R;|-VnC4fYy zD|JnD7s>Pt6V{~Y9@!6TMmZg|bO#gg!@qJ>u;pNN#L;_n-hBifHap1wlc-(rSM$qr z*5OPmyj@Hy+C0-C{swgpe|RkWTCb)m`(W(V1UCySV zIlXK|FyD;ZDJ9?40I9aIZIhFFyjstwxpz#&=oKzLbbUQD#au8={dn&JMCqfD1b z>g6evb}46ZyC)NpQmIC9(M-Gluhr*QeF zo7yM6EWEq=`RFP}U}Uv4mhy0b*8UZ!&dNR>5`qY^_wpkX86=I=231dAQF2{H)ejDq z;BI9z-2ybC-nc-UiN(p+ZSC+Kb&hK~e6{|YB)eveKVfk$Wry*hUx(YUf?iQ+lSNIq zxZ}CWLh4DMtQu}=`DqJu$-p#JH#O`4-kLx6EnmYiR|=_c2}EMlF-^o@m(>7Sf`*i3 zxJ{O<#?{~`u1os~$AJ}X=v2GF(h>VJ?2!9&K`f9lMyFSWT)<}4lUVfWeB+pZ7T{%c z51#{pep-Kz6N+EMPNR){9UII0Toq7=k+@MTfPjD4R@fXbjpR8cYFoK9JM=Pn%ODoN5!;`OuGQ5s_xX*5Q=hjRRxib0z z@5VlsU~I#9;V^u0!Ht65S)dc@psM2<=^wk3ot978D&hSB7h{RyF*)xp?Se-)+ZP@9 zObj!HbcC}P_rw*`SGx~e)Hy{mpmWQIESd0$Qw%B1F-&hA0YC#_P;?0lRyR+S(1wXRU}SB-6Dyl%K7P(@>a`Vv7D&mFp}zNeK^j${*xm$Y0u|l zpS~75jSv@l9|b<)3<~!|A@k1Sfg#gq6PE@}p|ve=?DAi%$og)x$awmFvfB!hByBN! zVnftdz&dtrDb=xV%xUVH%X@*KQ*$%1!*P8LH)!5p#_Ue7FxQgztD}GuwOeC84cR)Y z#a}&J3LSJUYo(BLx}*syO6678dRt}yP5r@^K;C6@A+R?tT|BfSd%U5KZIYe~*Vtj}j5t1ovGEc%JzgUz17G zl(WvfIaI&|M|trVf5$23c?I)5&MK$Ut%7JRlA?wT8R`5YV~3ivungC3t*kM`0+J`s zCJ0smK8w%?`P;&7OQ?s$+R8`pDp{3t>Xqk0?HjLg{<}lz>%0`QW?DIIn|@`W7OQ@? z7eKRjG5q)?z~)SKJ_L|;9V+$t)Rv6e)`|F)`8B)YaZ%GYI}feP^M2jiWqdEqc|3BQ zKKa7uOeX;NvzT78qfH7bQMVFy?ilTtYOxu?EM1k(B;1Hno+4e}`T{$_J$9=@&?!@t zb^xAWn`5Ss;eGeGGT&xBgb34zrmnR{vlCra=h0owJz9`Jc72Wz;a5d&Y3bGzpIYBN z*yz!&Lmpp6S{}0jH9>WMDhzkJoYdqh_m=_VTckt#SZr%4*83?kVnX;fCVh&~rO+oz ztv9+-zu(kL``+Ngd*J@`P$FA8d{{<~wj!cx%RMeHqI>VEmd|+Ku(?uAUp1U_EpPm_ zTYs|9s<}|)sHyM6nlEDOGtkhl%jdlC3@^@ z(0b>ZLnx~WA5BR6wFY#lpQT)gmR8R1_T!#cv?14=n#zk0W&F7k@~$Fp)D^+p#&JMujU5(o=J{|SN0-htulX^eOt%}7Zl#V?n7Y}8^z-2~bewOt? zJcAM?Sk@i&g!rYwk*Nn*x8q{A@X@(y8r=cou&vUG1rsOXL! zjEzg_QIO$W{&=}C$^I+}UGbi|rz@$H+At=-bYF)pjGi&#z!ha?xYAunuhVVA?w1*s zgNc3toX5+nuT9v$ZEe3!uGA=YtA{FEBkt&w6DZEH+}Xx&Y0KZ;&U@k=t=rvEh?PX9 zo?s}+uKftiDEKNuv`Qw%BJHZBhIc;*tXNiA>O0A`SAjym5IIhfyQWVSQS;kw3ZB