Skip to content

Commit 467506b

Browse files
ZSPACE-12467 Check if the file is MS type
1 parent 45ed3df commit 467506b

File tree

2 files changed

+131
-115
lines changed

2 files changed

+131
-115
lines changed

RawFileParser.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,27 +136,32 @@ private static void ProcessFile(ParseInput parseInput)
136136

137137
// Get the number of instruments (controllers) present in the RAW file and set the
138138
// selected instrument to the MS instrument, first instance of it
139-
rawFile.SelectInstrument(Device.MS, 1);
139+
var firstScanNumber = -1;
140+
var lastScanNumber = -1;
141+
if (rawFile.GetInstrumentCountOfType(Device.MS) != 0)
142+
{
143+
rawFile.SelectInstrument(Device.MS, 1);
140144

141-
rawFile.IncludeReferenceAndExceptionData = !parseInput.ExData;
145+
rawFile.IncludeReferenceAndExceptionData = !parseInput.ExData;
142146

143-
// Get the first and last scan from the RAW file
144-
var firstScanNumber = rawFile.RunHeaderEx.FirstSpectrum;
145-
var lastScanNumber = rawFile.RunHeaderEx.LastSpectrum;
147+
// Get the first and last scan from the RAW file
148+
firstScanNumber = rawFile.RunHeaderEx.FirstSpectrum;
149+
lastScanNumber = rawFile.RunHeaderEx.LastSpectrum;
146150

147-
// Check for empty file
148-
if (lastScanNumber < 1)
149-
{
150-
throw new RawFileParserException("Empty RAW file, no output will be produced");
151+
// Check for empty file
152+
if (lastScanNumber < 1)
153+
{
154+
throw new RawFileParserException("Empty RAW file, no output will be produced");
155+
}
151156
}
152-
157+
153158
if (parseInput.MetadataFormat != MetadataFormat.NONE)
154159
{
155160
MetadataWriter metadataWriter = new MetadataWriter(parseInput);
156161
metadataWriter.WriteMetadata(rawFile, firstScanNumber, lastScanNumber);
157162
}
158163

159-
if (parseInput.OutputFormat != OutputFormat.NONE)
164+
if (rawFile.SelectMsData() && parseInput.OutputFormat != OutputFormat.NONE)
160165
{
161166
SpectrumWriter spectrumWriter;
162167
switch (parseInput.OutputFormat)

Writer/MetadataWriter.cs

Lines changed: 115 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -46,73 +46,74 @@ public MetadataWriter(ParseInput parseInput)
4646
/// </summary>
4747
public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber)
4848
{
49-
// Get the start and end time from the RAW file
50-
var startTime = rawFile.RunHeaderEx.StartTime;
51-
var endTime = rawFile.RunHeaderEx.EndTime;
52-
53-
for (var scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++)
49+
if (rawFile.SelectMsData())
5450
{
55-
var time = rawFile.RetentionTimeFromScanNumber(scanNumber);
56-
57-
// Get the scan filter for this scan number
58-
var scanFilter = rawFile.GetFilterForScanNumber(scanNumber);
51+
for (var scanNumber = firstScanNumber; scanNumber <= lastScanNumber; scanNumber++)
52+
{
53+
var time = rawFile.RetentionTimeFromScanNumber(scanNumber);
5954

60-
// Get the scan event for this scan number
61-
var scanEvent = rawFile.GetScanEventForScanNumber(scanNumber);
55+
// Get the scan filter for this scan number
56+
var scanFilter = rawFile.GetFilterForScanNumber(scanNumber);
6257

63-
// Keep track of the number of MS<MS level> spectra
64-
if (msTypes.ContainsKey(scanFilter.MSOrder.ToString()))
65-
{
66-
var value = msTypes[scanFilter.MSOrder.ToString()];
67-
value += 1;
68-
msTypes[scanFilter.MSOrder.ToString()] = value;
69-
}
70-
else
71-
msTypes.Add(scanFilter.MSOrder.ToString(), 1);
58+
// Get the scan event for this scan number
59+
var scanEvent = rawFile.GetScanEventForScanNumber(scanNumber);
7260

73-
if (time > maxTime)
74-
maxTime = time;
75-
if (time < minTime)
76-
minTime = time;
61+
// Keep track of the number of MS<MS level> spectra
62+
if (msTypes.ContainsKey(scanFilter.MSOrder.ToString()))
63+
{
64+
var value = msTypes[scanFilter.MSOrder.ToString()];
65+
value += 1;
66+
msTypes[scanFilter.MSOrder.ToString()] = value;
67+
}
68+
else
69+
msTypes.Add(scanFilter.MSOrder.ToString(), 1);
7770

78-
if (scanFilter.MSOrder == MSOrderType.Ms2)
79-
{
80-
fragmentationTypes.Add(ParseActivationType(scanFilter.GetActivation(0)));
71+
if (time > maxTime)
72+
maxTime = time;
73+
if (time < minTime)
74+
minTime = time;
8175

82-
if (scanEvent.ScanData == ScanDataType.Centroid || (scanEvent.ScanData == ScanDataType.Profile))
76+
if (scanFilter.MSOrder == MSOrderType.Ms2)
8377
{
84-
try
85-
{
86-
var reaction = scanEvent.GetReaction(0);
87-
var precursorMass = reaction.PrecursorMass;
88-
if (precursorMass > maxMz)
89-
maxMz = precursorMass;
90-
if (precursorMass < minMz)
91-
minMz = precursorMass;
92-
}
93-
catch (ArgumentOutOfRangeException)
94-
{
95-
Log.Warn("No reaction found for scan " + scanNumber);
96-
_parseInput.NewWarn();
97-
}
78+
fragmentationTypes.Add(ParseActivationType(scanFilter.GetActivation(0)));
9879

99-
// trailer extra data list
100-
var trailerData = rawFile.GetTrailerExtraInformation(scanNumber);
101-
for (var i = 0; i < trailerData.Length; i++)
80+
if (scanEvent.ScanData == ScanDataType.Centroid || (scanEvent.ScanData == ScanDataType.Profile))
10281
{
103-
if (trailerData.Labels[i] == "Charge State:")
82+
try
10483
{
105-
if (int.Parse(trailerData.Values[i]) > maxCharge)
106-
maxCharge = int.Parse(trailerData.Values[i]);
84+
var reaction = scanEvent.GetReaction(0);
85+
var precursorMass = reaction.PrecursorMass;
86+
if (precursorMass > maxMz)
87+
maxMz = precursorMass;
88+
if (precursorMass < minMz)
89+
minMz = precursorMass;
90+
}
91+
catch (ArgumentOutOfRangeException)
92+
{
93+
Log.Warn("No reaction found for scan " + scanNumber);
94+
_parseInput.NewWarn();
95+
}
10796

108-
if (int.Parse(trailerData.Values[i]) < minCharge)
109-
minCharge = int.Parse(trailerData.Values[i]);
97+
// trailer extra data list
98+
var trailerData = rawFile.GetTrailerExtraInformation(scanNumber);
99+
for (var i = 0; i < trailerData.Length; i++)
100+
{
101+
if (trailerData.Labels[i] == "Charge State:")
102+
{
103+
if (int.Parse(trailerData.Values[i]) > maxCharge)
104+
maxCharge = int.Parse(trailerData.Values[i]);
105+
106+
if (int.Parse(trailerData.Values[i]) < minCharge)
107+
minCharge = int.Parse(trailerData.Values[i]);
108+
}
110109
}
111110
}
112111
}
113112
}
114113
}
115114

115+
116+
116117
if (minCharge == 100000000000000)
117118
{
118119
minCharge = 0;
@@ -145,10 +146,6 @@ public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastSca
145146
/// </summary>
146147
private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber)
147148
{
148-
// Get the start and end time from the RAW file
149-
var startTime = rawFile.RunHeaderEx.StartTime;
150-
var endTime = rawFile.RunHeaderEx.EndTime;
151-
152149
var metadata = new Metadata();
153150

154151
// File Properties
@@ -164,20 +161,23 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last
164161
}
165162

166163
// Instrument Properties
167-
metadata.addInstrumentProperty(new CVTerm("MS:1000494", "MS", "Thermo Scientific instrument model",
168-
rawFile.GetInstrumentData().Model));
169-
metadata.addInstrumentProperty(new CVTerm("MS:1000496", "MS", "instrument attribute",
170-
rawFile.GetInstrumentData().Name));
171-
metadata.addInstrumentProperty(new CVTerm("MS:1000529", "MS", "instrument serial number",
172-
rawFile.GetInstrumentData().SerialNumber));
173-
metadata.addInstrumentProperty(new CVTerm("NCIT:C111093", "NCIT", "Software Version",
174-
rawFile.GetInstrumentData().SoftwareVersion));
175-
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
164+
if (rawFile.SelectMsData())
176165
{
177-
metadata.addInstrumentProperty(new CVTerm("AFR:0001259", "AFO", "firmware version",
178-
rawFile.GetInstrumentData().HardwareVersion));
166+
metadata.addInstrumentProperty(new CVTerm("MS:1000494", "MS", "Thermo Scientific instrument model",
167+
rawFile.GetInstrumentData().Model));
168+
metadata.addInstrumentProperty(new CVTerm("MS:1000496", "MS", "instrument attribute",
169+
rawFile.GetInstrumentData().Name));
170+
metadata.addInstrumentProperty(new CVTerm("MS:1000529", "MS", "instrument serial number",
171+
rawFile.GetInstrumentData().SerialNumber));
172+
metadata.addInstrumentProperty(new CVTerm("NCIT:C111093", "NCIT", "Software Version",
173+
rawFile.GetInstrumentData().SoftwareVersion));
174+
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
175+
{
176+
metadata.addInstrumentProperty(new CVTerm("AFR:0001259", "AFO", "firmware version",
177+
rawFile.GetInstrumentData().HardwareVersion));
178+
}
179179
}
180-
180+
181181
// MS Data
182182
foreach (KeyValuePair<string, int> entry in msTypes)
183183
{
@@ -208,21 +208,27 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last
208208
maxMz.ToString(CultureInfo.InvariantCulture)));
209209

210210
// Scan Settings
211-
metadata.addScanSetting(new CVTerm("MS:1000016", "MS", "scan start time",
212-
startTime.ToString(CultureInfo.InvariantCulture)));
213-
metadata.addScanSetting(new CVTerm("MS:1000011", "MS", "mass resolution",
214-
rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)));
215-
metadata.addScanSetting(new CVTerm("UO:0000002", "MS", "mass unit",
216-
rawFile.GetInstrumentData().Units.ToString()));
217-
metadata.addScanSetting(new CVTerm("PRIDE:0000478", "PRIDE", "Number of scans",
218-
rawFile.RunHeaderEx.SpectraCount.ToString()));
219-
metadata.addScanSetting(new CVTerm("PRIDE:0000479", "PRIDE", "MS scan range",
220-
firstScanNumber + ":" + lastScanNumber));
221-
metadata.addScanSetting(new CVTerm("PRIDE:0000484", "PRIDE", "Retention time range",
222-
startTime + ":" + endTime));
223-
metadata.addScanSetting(new CVTerm("PRIDE:0000485", "PRIDE", "Mz range",
224-
rawFile.RunHeaderEx.LowMass + ":" + rawFile.RunHeaderEx.HighMass));
225-
metadata.addScanSetting(fragmentationTypes);
211+
if (rawFile.SelectMsData())
212+
{
213+
// Get the start and end time from the RAW file
214+
var startTime = rawFile.RunHeaderEx.StartTime;
215+
var endTime = rawFile.RunHeaderEx.EndTime;
216+
metadata.addScanSetting(new CVTerm("MS:1000016", "MS", "scan start time",
217+
startTime.ToString(CultureInfo.InvariantCulture)));
218+
metadata.addScanSetting(new CVTerm("MS:1000011", "MS", "mass resolution",
219+
rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)));
220+
metadata.addScanSetting(new CVTerm("UO:0000002", "MS", "mass unit",
221+
rawFile.GetInstrumentData().Units.ToString()));
222+
metadata.addScanSetting(new CVTerm("PRIDE:0000478", "PRIDE", "Number of scans",
223+
rawFile.RunHeaderEx.SpectraCount.ToString()));
224+
metadata.addScanSetting(new CVTerm("PRIDE:0000479", "PRIDE", "MS scan range",
225+
firstScanNumber + ":" + lastScanNumber));
226+
metadata.addScanSetting(new CVTerm("PRIDE:0000484", "PRIDE", "Retention time range",
227+
startTime + ":" + endTime));
228+
metadata.addScanSetting(new CVTerm("PRIDE:0000485", "PRIDE", "Mz range",
229+
rawFile.RunHeaderEx.LowMass + ":" + rawFile.RunHeaderEx.HighMass));
230+
metadata.addScanSetting(fragmentationTypes);
231+
}
226232

227233
// Sample Data
228234
if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty())
@@ -296,10 +302,6 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last
296302
/// </summary>
297303
private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber)
298304
{
299-
// Get the start and end time from the RAW file
300-
var startTime = rawFile.RunHeaderEx.StartTime;
301-
var endTime = rawFile.RunHeaderEx.EndTime;
302-
303305
// File Properties
304306
var output = new List<string>
305307
{
@@ -314,18 +316,21 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la
314316
}
315317

316318
// Instrument Properties
317-
output.Add("#InstrumentProperties");
318-
output.AddRange(new List<string>
319+
if (rawFile.SelectMsData())
320+
{
321+
output.Add("#InstrumentProperties");
322+
output.AddRange(new List<string>
319323
{
320324
$"Instrument model=[MS, MS:1000494, Thermo Scientific instrument model, {rawFile.GetInstrumentData().Model}]",
321325
"Instrument name=" + rawFile.GetInstrumentData().Name,
322326
$"Instrument serial number=[MS, MS:1000529, instrument serial number, {rawFile.GetInstrumentData().SerialNumber}]",
323327
$"Software version=[NCIT, NCIT:C111093, Software Version, {rawFile.GetInstrumentData().SoftwareVersion}]",
324328
}
325-
);
326-
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
327-
{
328-
output.Add("Firmware version=" + rawFile.GetInstrumentData().HardwareVersion);
329+
);
330+
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
331+
{
332+
output.Add("Firmware version=" + rawFile.GetInstrumentData().HardwareVersion);
333+
}
329334
}
330335

331336
// MS Data
@@ -352,19 +357,25 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la
352357
);
353358

354359
// Scan Settings
355-
output.AddRange(new List<string>
356-
{
357-
"#ScanSettings",
358-
$"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}",
359-
$"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]",
360-
"Units=" + rawFile.GetInstrumentData().Units,
361-
$"Number of scans={rawFile.RunHeaderEx.SpectraCount}",
362-
$"Scan range={firstScanNumber};{lastScanNumber}",
363-
$"Time range={startTime.ToString(CultureInfo.InvariantCulture)};{endTime.ToString(CultureInfo.InvariantCulture)}",
364-
$"Mass range={rawFile.RunHeaderEx.LowMass.ToString(CultureInfo.InvariantCulture)};{rawFile.RunHeaderEx.HighMass.ToString(CultureInfo.InvariantCulture)}",
365-
"Fragmentation types=" + String.Join(", ", fragmentationTypes.Select(f => f.value))
366-
}
367-
);
360+
if (rawFile.SelectMsData())
361+
{
362+
// Get the start and end time from the RAW file
363+
var startTime = rawFile.RunHeaderEx.StartTime;
364+
var endTime = rawFile.RunHeaderEx.EndTime;
365+
output.AddRange(new List<string>
366+
{
367+
"#ScanSettings",
368+
$"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}",
369+
$"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]",
370+
"Units=" + rawFile.GetInstrumentData().Units,
371+
$"Number of scans={rawFile.RunHeaderEx.SpectraCount}",
372+
$"Scan range={firstScanNumber};{lastScanNumber}",
373+
$"Time range={startTime.ToString(CultureInfo.InvariantCulture)};{endTime.ToString(CultureInfo.InvariantCulture)}",
374+
$"Mass range={rawFile.RunHeaderEx.LowMass.ToString(CultureInfo.InvariantCulture)};{rawFile.RunHeaderEx.HighMass.ToString(CultureInfo.InvariantCulture)}",
375+
"Fragmentation types=" + String.Join(", ", fragmentationTypes.Select(f => f.value))
376+
}
377+
);
378+
}
368379

369380
// Sample Data
370381
output.Add("#SampleData");

0 commit comments

Comments
 (0)