@@ -81,27 +81,8 @@ public override void Write(IRawDataPlus raw, int firstScanNumber, int lastScanNu
8181 // Get scan ms level
8282 var msLevel = ( int ) scanFilter . MSOrder ;
8383
84- //TODO Centroiding if centroidStream is not available
85- CentroidStream centroidStream = new CentroidStream ( ) ;
86-
87- // Pull out m/z and intensity values
88- // NB: is this the best way to do this?
89- if ( scanFilter . MassAnalyzer == MassAnalyzerType . MassAnalyzerFTMS )
90- {
91- centroidStream = raw . GetCentroidStream ( scanNumber , false ) ;
92- }
93- else if ( scanFilter . MassAnalyzer == MassAnalyzerType . MassAnalyzerITMS )
94- {
95- var scanData = raw . GetSimplifiedScan ( scanNumber ) ;
96- centroidStream . Masses = scanData . Masses ;
97- centroidStream . Intensities = scanData . Intensities ;
98- }
99- else
100- {
101- var scanData = raw . GetSimplifiedCentroids ( scanNumber ) ;
102- centroidStream . Masses = scanData . Masses ;
103- centroidStream . Intensities = scanData . Intensities ;
104- }
84+ // Get Scan
85+ var scan = Scan . FromFile ( raw , scanNumber ) ;
10586
10687 ScanTrailer trailerData ;
10788
@@ -212,15 +193,43 @@ public override void Write(IRawDataPlus raw, int firstScanNumber, int lastScanNu
212193
213194 }
214195
196+ double [ ] masses ;
197+ double [ ] intensities ;
198+
199+ if ( ! ParseInput . NoPeakPicking . Contains ( msLevel ) )
200+ {
201+ // Check if the scan has a centroid stream
202+ if ( scan . HasCentroidStream )
203+ {
204+ masses = scan . CentroidScan . Masses ;
205+ intensities = scan . CentroidScan . Intensities ;
206+ }
207+ else // otherwise take the segmented (low res) scan
208+ {
209+ // If the spectrum is profile perform centroiding
210+ var segmentedScan = scanEvent . ScanData == ScanDataType . Profile
211+ ? Scan . ToCentroid ( scan ) . SegmentedScan
212+ : scan . SegmentedScan ;
213+
214+ masses = segmentedScan . Positions ;
215+ intensities = segmentedScan . Intensities ;
216+ }
217+ }
218+ else // use the segmented data as is
219+ {
220+ masses = scan . SegmentedScan . Positions ;
221+ intensities = scan . SegmentedScan . Intensities ;
222+ }
223+
215224 // Add a row to parquet file for every m/z value in this scan
216- for ( int i = 0 ; i < centroidStream . Masses . Length ; i ++ )
225+ for ( int i = 0 ; i < masses . Length ; i ++ )
217226 {
218227 MzParquet m ;
219228 m . rt = ( float ) rt ;
220229 m . scan = ( uint ) scanNumber ;
221230 m . level = ( uint ) msLevel ;
222- m . intensity = ( float ) centroidStream . Intensities [ i ] ;
223- m . mz = ( float ) centroidStream . Masses [ i ] ;
231+ m . intensity = ( float ) intensities [ i ] ;
232+ m . mz = ( float ) masses [ i ] ;
224233 m . isolation_lower = precursor_data . isolation_lower ;
225234 m . isolation_upper = precursor_data . isolation_upper ;
226235 m . precursor_scan = precursor_scan ;
0 commit comments