Skip to content

Commit 1ef4d88

Browse files
committed
Precursor scan fix for MS level restricted files
1 parent 5021515 commit 1ef4d88

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

Writer/ParquetSpectrumWriter.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class ParquetSpectrumWriter : SpectrumWriter
3636
private static readonly ILog Log =
3737
LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
3838

39-
private const int ParquetRowGroupSize = 1_048_576;
39+
private const int ParquetSliceSize = 1_048_576;
4040

4141
public ParquetSpectrumWriter(ParseInput parseInput) : base(parseInput)
4242
{
@@ -80,8 +80,13 @@ public override void Write(IRawDataPlus raw, int firstScanNumber, int lastScanNu
8080
try
8181
{
8282
int level = (int)raw.GetScanEventForScanNumber(scanNumber).MSOrder; //applying MS level filter
83-
if (ParseInput.MsLevel.Contains(level))
84-
AddScan(raw, scanNumber, data);
83+
if (level <= ParseInput.MaxLevel) // Primary MS level filter
84+
{
85+
var scanData = ReadScan(raw, scanNumber);
86+
if (scanData != null && ParseInput.MsLevel.Contains(level)) // Final MS level filter
87+
data.AddRange(scanData);
88+
}
89+
8590
}
8691
catch (Exception ex)
8792
{
@@ -93,7 +98,7 @@ public override void Write(IRawDataPlus raw, int firstScanNumber, int lastScanNu
9398
// - some row groups might have more than this number of ions
9499
// but this ensures that all ions from a single scan are always
95100
// present in the same row group (critical property of mzparquet)
96-
if (data.Count >= ParquetRowGroupSize)
101+
if (data.Count >= ParquetSliceSize)
97102
{
98103
var task = ParquetSerializer.SerializeAsync(data, Writer.BaseStream, opts);
99104
task.Wait();
@@ -111,12 +116,17 @@ public override void Write(IRawDataPlus raw, int firstScanNumber, int lastScanNu
111116
Log.Debug("Writing final row group");
112117
}
113118

119+
if (ParseInput.LogFormat == LogFormat.DEFAULT) //Add new line after progress bar
120+
{
121+
Console.WriteLine();
122+
}
123+
114124
// Release the OS file handle
115125
Writer.Flush();
116126
Writer.Close();
117127
}
118128

119-
private void AddScan(IRawDataPlus raw, int scanNumber, List<MzParquet> data)
129+
private List<MzParquet> ReadScan(IRawDataPlus raw, int scanNumber)
120130
{
121131
var scanFilter = raw.GetFilterForScanNumber(scanNumber);
122132

@@ -265,6 +275,7 @@ private void AddScan(IRawDataPlus raw, int scanNumber, List<MzParquet> data)
265275
intensities = scan.SegmentedScan.Intensities;
266276
}
267277

278+
List<MzParquet> scanData = new List<MzParquet>(masses.Length);
268279
// Add a row to parquet file for every m/z value in this scan
269280
for (int i = 0; i < masses.Length; i++)
270281
{
@@ -280,8 +291,10 @@ private void AddScan(IRawDataPlus raw, int scanNumber, List<MzParquet> data)
280291
m.precursor_mz = precursor_data.mz;
281292
m.precursor_charge = (uint?)trailer_charge;
282293
m.ion_mobility = (float?)FAIMSCV;
283-
data.Add(m);
294+
scanData.Add(m);
284295
}
296+
297+
return scanData;
285298
}
286299

287300
private PrecursorData GetPrecursorData(int precursorScanNumber, IScanEventBase scanEvent,

0 commit comments

Comments
 (0)