Skip to content

Commit 5d955be

Browse files
committed
Unified mass spectrometry data
Use the same method for mass-spec data creation
1 parent a26a5ab commit 5d955be

File tree

1 file changed

+33
-24
lines changed

1 file changed

+33
-24
lines changed

Writer/ParquetSpectrumWriter.cs

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)