Skip to content

Commit 233fbb2

Browse files
zhaoheting-zontalcaetera
authored andcommitted
ZSPACE-12467 Check if the file is MS type.
1 parent 7e64b28 commit 233fbb2

2 files changed

Lines changed: 132 additions & 116 deletions

File tree

RawFileParser.cs

100644100755
Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,18 +136,22 @@ 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);
140-
141-
rawFile.IncludeReferenceAndExceptionData = !parseInput.ExData;
139+
var firstScanNumber = -1;
140+
var lastScanNumber = -1;
141+
if (rawFile.GetInstrumentCountOfType(Device.MS) != 0)
142+
{
143+
rawFile.SelectInstrument(Device.MS, 1);
144+
rawFile.IncludeReferenceAndExceptionData = !parseInput.ExData;
142145

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

147-
// Check for empty file
148-
if (lastScanNumber < 1)
149-
{
150-
throw new RawFileParserException("Empty RAW file, no output will be produced");
150+
// Check for empty file
151+
if (lastScanNumber < 1)
152+
{
153+
throw new RawFileParserException("Empty RAW file, no output will be produced");
154+
}
151155
}
152156

153157
if (parseInput.MetadataFormat != MetadataFormat.NONE)

Writer/MetadataWriter.cs

Lines changed: 118 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -46,73 +46,72 @@ 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
83+
{
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)
10492
{
105-
if (int.Parse(trailerData.Values[i]) > maxCharge)
106-
maxCharge = int.Parse(trailerData.Values[i]);
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
}
115-
114+
116115
if (minCharge == 100000000000000)
117116
{
118117
minCharge = 0;
@@ -145,10 +144,6 @@ public void WriteMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastSca
145144
/// </summary>
146145
private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber)
147146
{
148-
// Get the start and end time from the RAW file
149-
var startTime = rawFile.RunHeaderEx.StartTime;
150-
var endTime = rawFile.RunHeaderEx.EndTime;
151-
152147
var metadata = new Metadata();
153148

154149
// File Properties
@@ -164,19 +159,23 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last
164159
}
165160

166161
// 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())
162+
if (rawFile.SelectMsData())
176163
{
177-
metadata.addInstrumentProperty(new CVTerm("AFR:0001259", "AFO", "firmware version",
178-
rawFile.GetInstrumentData().HardwareVersion));
164+
metadata.addInstrumentProperty(new CVTerm("MS:1000494", "MS", "Thermo Scientific instrument model",
165+
rawFile.GetInstrumentData().Model));
166+
metadata.addInstrumentProperty(new CVTerm("MS:1000496", "MS", "instrument attribute",
167+
rawFile.GetInstrumentData().Name));
168+
metadata.addInstrumentProperty(new CVTerm("MS:1000529", "MS", "instrument serial number",
169+
rawFile.GetInstrumentData().SerialNumber));
170+
metadata.addInstrumentProperty(new CVTerm("NCIT:C111093", "NCIT", "Software Version",
171+
rawFile.GetInstrumentData().SoftwareVersion));
172+
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
173+
{
174+
metadata.addInstrumentProperty(new CVTerm("AFR:0001259", "AFO", "firmware version",
175+
rawFile.GetInstrumentData().HardwareVersion));
176+
}
179177
}
178+
180179

181180
// MS Data
182181
foreach (KeyValuePair<string, int> entry in msTypes)
@@ -208,21 +207,30 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last
208207
maxMz.ToString(CultureInfo.InvariantCulture)));
209208

210209
// 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);
210+
// Get the start and end time from the RAW file
211+
212+
if (rawFile.SelectMsData())
213+
{
214+
var runHeader = rawFile.RunHeader;
215+
var runHeaderEx = rawFile.RunHeaderEx;
216+
var startTime = runHeaderEx.StartTime;
217+
var endTime = runHeaderEx.EndTime;
218+
metadata.addScanSetting(new CVTerm("MS:1000016", "MS", "scan start time",
219+
startTime.ToString(CultureInfo.InvariantCulture)));
220+
metadata.addScanSetting(new CVTerm("MS:1000011", "MS", "mass resolution",
221+
runHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)));
222+
metadata.addScanSetting(new CVTerm("UO:0000002", "MS", "mass unit",
223+
rawFile.GetInstrumentData().Units.ToString()));
224+
metadata.addScanSetting(new CVTerm("PRIDE:0000478", "PRIDE", "Number of scans",
225+
runHeaderEx.SpectraCount.ToString()));
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+
runHeaderEx.LowMass + ":" + runHeaderEx.HighMass));
230+
metadata.addScanSetting(fragmentationTypes);
231+
metadata.addScanSetting(new CVTerm("PRIDE:0000479", "PRIDE", "MS scan range",
232+
firstScanNumber + ":" + lastScanNumber));
233+
}
226234

227235
// Sample Data
228236
if (!rawFile.SampleInformation.SampleName.IsNullOrEmpty())
@@ -333,10 +341,6 @@ private void WriteJsonMetada(IRawDataPlus rawFile, int firstScanNumber, int last
333341
/// </summary>
334342
private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int lastScanNumber)
335343
{
336-
// Get the start and end time from the RAW file
337-
var startTime = rawFile.RunHeaderEx.StartTime;
338-
var endTime = rawFile.RunHeaderEx.EndTime;
339-
340344
// File Properties
341345
var output = new List<string>
342346
{
@@ -351,20 +355,23 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la
351355
}
352356

353357
// Instrument Properties
354-
output.Add("#InstrumentProperties");
355-
output.AddRange(new List<string>
358+
if (rawFile.SelectMsData())
359+
{
360+
output.Add("#InstrumentProperties");
361+
output.AddRange(new List<string>
356362
{
357363
$"Instrument model=[MS, MS:1000494, Thermo Scientific instrument model, {rawFile.GetInstrumentData().Model}]",
358364
"Instrument name=" + rawFile.GetInstrumentData().Name,
359365
$"Instrument serial number=[MS, MS:1000529, instrument serial number, {rawFile.GetInstrumentData().SerialNumber}]",
360366
$"Software version=[NCIT, NCIT:C111093, Software Version, {rawFile.GetInstrumentData().SoftwareVersion}]",
361367
}
362-
);
363-
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
364-
{
365-
output.Add("Firmware version=" + rawFile.GetInstrumentData().HardwareVersion);
368+
);
369+
if (!rawFile.GetInstrumentData().HardwareVersion.IsNullOrEmpty())
370+
{
371+
output.Add("Firmware version=" + rawFile.GetInstrumentData().HardwareVersion);
372+
}
366373
}
367-
374+
368375
// MS Data
369376
output.Add("#MsData");
370377
foreach (KeyValuePair<string, int> entry in msTypes)
@@ -389,20 +396,25 @@ private void WriteTextMetadata(IRawDataPlus rawFile, int firstScanNumber, int la
389396
);
390397

391398
// Scan Settings
392-
output.AddRange(new List<string>
393-
{
394-
"#ScanSettings",
395-
$"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}",
396-
$"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]",
397-
"Units=" + rawFile.GetInstrumentData().Units,
398-
$"Number of scans={rawFile.RunHeaderEx.SpectraCount}",
399-
$"Scan range={firstScanNumber};{lastScanNumber}",
400-
$"Time range={startTime.ToString(CultureInfo.InvariantCulture)};{endTime.ToString(CultureInfo.InvariantCulture)}",
401-
$"Mass range={rawFile.RunHeaderEx.LowMass.ToString(CultureInfo.InvariantCulture)};{rawFile.RunHeaderEx.HighMass.ToString(CultureInfo.InvariantCulture)}",
402-
"Fragmentation types=" + String.Join(", ", fragmentationTypes.Select(f => f.value))
403-
}
404-
);
405-
399+
if (rawFile.SelectMsData())
400+
{
401+
// Get the start and end time from the RAW file
402+
var startTime = rawFile.RunHeaderEx.StartTime;
403+
var endTime = rawFile.RunHeaderEx.EndTime;
404+
output.AddRange(new List<string>
405+
{
406+
"#ScanSettings",
407+
$"Scan start time={startTime.ToString(CultureInfo.InvariantCulture)}",
408+
$"Mass resolution=[MS, MS:1000011, mass resolution, {rawFile.RunHeaderEx.MassResolution.ToString(CultureInfo.InvariantCulture)}]",
409+
"Units=" + rawFile.GetInstrumentData().Units,
410+
$"Number of scans={rawFile.RunHeaderEx.SpectraCount}",
411+
$"Scan range={firstScanNumber};{lastScanNumber}",
412+
$"Time range={startTime.ToString(CultureInfo.InvariantCulture)};{endTime.ToString(CultureInfo.InvariantCulture)}",
413+
$"Mass range={rawFile.RunHeaderEx.LowMass.ToString(CultureInfo.InvariantCulture)};{rawFile.RunHeaderEx.HighMass.ToString(CultureInfo.InvariantCulture)}",
414+
"Fragmentation types=" + String.Join(", ", fragmentationTypes.Select(f => f.value))
415+
}
416+
);
417+
}
406418
// Sample Data
407419
output.Add("#SampleData");
408420

0 commit comments

Comments
 (0)