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