libpappsomspp
Library for mass spectrometry
Loading...
Searching...
No Matches
pappso::MzxmlOutput Class Reference

#include <mzxmloutput.h>

Classes

class  Translater

Public Member Functions

 MzxmlOutput (UiMonitorInterface &monitor, QIODevice *p_output_device)
 ~MzxmlOutput ()
void write (MsRunReader *p_msrunreader)
void write (const MsRunReadConfig &read_config, MsRunReader *p_msrunreader)
void close ()
void maskMs1 (bool mask_ms1)
void setReadAhead (bool read_ahead)

Private Member Functions

void writeHeader (MsRunReader *p_msrunreader)
void writeQualifiedMassSpectrum (const QualifiedMassSpectrum &spectrum)
std::size_t getScanNumber (const QualifiedMassSpectrum &spectrum) const
std::size_t getPrecursorScanNumber (const QualifiedMassSpectrum &spectrum) const
std::size_t getScanNumberFromNativeId (const QString &native_id) const

Private Attributes

UiMonitorInterfacem_monitor
QXmlStreamWriter * mpa_outputStream
bool m_isReadAhead = false
bool m_ms1IsMasked = false

Detailed Description

Todo
use msrunreader as input and writes all peaks into an mzXML output stream

Definition at line 43 of file mzxmloutput.h.

Constructor & Destructor Documentation

◆ MzxmlOutput()

MzxmlOutput::MzxmlOutput ( UiMonitorInterface & monitor,
QIODevice * p_output_device )

Default constructor

Definition at line 74 of file mzxmloutput.cpp.

75 : m_monitor(monitor)
76{
77
78 mpa_outputStream = new QXmlStreamWriter(p_output_device);
79 mpa_outputStream->setAutoFormatting(true);
80
81 mpa_outputStream->writeStartDocument("1.0");
82}
UiMonitorInterface & m_monitor
Definition mzxmloutput.h:91
QXmlStreamWriter * mpa_outputStream
Definition mzxmloutput.h:92

References m_monitor, and mpa_outputStream.

Referenced by pappso::MzxmlOutput::Translater::Translater().

◆ ~MzxmlOutput()

MzxmlOutput::~MzxmlOutput ( )

Destructor

Definition at line 84 of file mzxmloutput.cpp.

85{
86 close();
87 delete mpa_outputStream;
88}

References close(), and mpa_outputStream.

Member Function Documentation

◆ close()

void MzxmlOutput::close ( )

Definition at line 246 of file mzxmloutput.cpp.

247{
248 mpa_outputStream->writeEndDocument();
249}

References mpa_outputStream.

Referenced by ~MzxmlOutput(), and pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData().

◆ getPrecursorScanNumber()

std::size_t MzxmlOutput::getPrecursorScanNumber ( const QualifiedMassSpectrum & spectrum) const
private

Definition at line 278 of file mzxmloutput.cpp.

279{
280
281 std::size_t scan_number = getScanNumberFromNativeId(spectrum.getPrecursorNativeId());
282 if(scan_number == std::numeric_limits<std::size_t>::max())
283 {
284 scan_number = spectrum.getPrecursorSpectrumIndex() + 1;
285 }
286 return scan_number;
287}
std::size_t getScanNumberFromNativeId(const QString &native_id) const
const QString & getPrecursorNativeId() const
std::size_t getPrecursorSpectrumIndex() const
Get the scan number of the precursor ion.

References pappso::QualifiedMassSpectrum::getPrecursorNativeId(), pappso::QualifiedMassSpectrum::getPrecursorSpectrumIndex(), and getScanNumberFromNativeId().

Referenced by writeQualifiedMassSpectrum().

◆ getScanNumber()

std::size_t MzxmlOutput::getScanNumber ( const QualifiedMassSpectrum & spectrum) const
private

Definition at line 267 of file mzxmloutput.cpp.

268{
269 std::size_t scan_number = getScanNumberFromNativeId(spectrum.getMassSpectrumId().getNativeId());
270 if(scan_number == std::numeric_limits<std::size_t>::max())
271 {
272 scan_number = spectrum.getMassSpectrumId().getSpectrumIndex() + 1;
273 }
274 return scan_number;
275}
std::size_t getSpectrumIndex() const
const QString & getNativeId() const
const MassSpectrumId & getMassSpectrumId() const
Get the MassSpectrumId.

References pappso::QualifiedMassSpectrum::getMassSpectrumId(), pappso::MassSpectrumId::getNativeId(), getScanNumberFromNativeId(), and pappso::MassSpectrumId::getSpectrumIndex().

Referenced by writeQualifiedMassSpectrum().

◆ getScanNumberFromNativeId()

std::size_t MzxmlOutput::getScanNumberFromNativeId ( const QString & native_id) const
private

Definition at line 253 of file mzxmloutput.cpp.

254{
255 QStringList native_id_list = native_id.split("=");
256 if(native_id_list.size() < 2)
257 {
258 }
259 else
260 {
261 return native_id_list.back().toULong();
262 }
263 return std::numeric_limits<std::size_t>::max();
264}

Referenced by getPrecursorScanNumber(), and getScanNumber().

◆ maskMs1()

void MzxmlOutput::maskMs1 ( bool mask_ms1)

Definition at line 409 of file mzxmloutput.cpp.

410{
411 m_ms1IsMasked = mask_ms1;
412}

References m_ms1IsMasked.

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData().

◆ setReadAhead()

void MzxmlOutput::setReadAhead ( bool read_ahead)

Definition at line 91 of file mzxmloutput.cpp.

92{
93 m_isReadAhead = isReadAhead;
94}

References m_isReadAhead.

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData().

◆ write() [1/2]

void pappso::MzxmlOutput::write ( const MsRunReadConfig & read_config,
pappso::MsRunReader * p_msrunreader )

Definition at line 127 of file mzxmloutput.cpp.

128{
129 qDebug();
130 m_monitor.setTotalSteps(p_msrunreader->spectrumListSize());
131 writeHeader(p_msrunreader);
132
133 Translater translater(this);
134
135 translater.setReadAhead(m_isReadAhead);
136
137 translater.setNeedMsLevelPeakList(1, !m_ms1IsMasked);
138 // translater.setNeedMsLevelPeakList(1, false);
139 // translater.setNeedMsLevelPeakList(2, false);
140 p_msrunreader->readSpectrumCollection2(read_config, translater);
141
142 m_monitor.setTotalSteps(0);
143}
virtual std::size_t spectrumListSize() const =0
get the totat number of spectrum conained in the MSrun data file
virtual void readSpectrumCollection2(const MsRunReadConfig &config, SpectrumCollectionHandlerInterface &handler)=0
function to visit an MsRunReader and get each Spectrum in a spectrum collection handler
void writeHeader(MsRunReader *p_msrunreader)

References m_isReadAhead, m_monitor, m_ms1IsMasked, pappso::MsRunReader::readSpectrumCollection2(), pappso::SpectrumCollectionHandlerInterface::setNeedMsLevelPeakList(), pappso::SpectrumCollectionHandlerInterface::setReadAhead(), pappso::MsRunReader::spectrumListSize(), and writeHeader().

◆ write() [2/2]

void MzxmlOutput::write ( MsRunReader * p_msrunreader)

Definition at line 96 of file mzxmloutput.cpp.

97{
98 qDebug();
99 m_monitor.setTotalSteps(p_msrunreader->spectrumListSize());
100 writeHeader(p_msrunreader);
101
102 Translater translater(this);
103
104 translater.setReadAhead(m_isReadAhead);
105
106 translater.setNeedMsLevelPeakList(1, !m_ms1IsMasked);
107 // translater.setNeedMsLevelPeakList(1, false);
108 // translater.setNeedMsLevelPeakList(2, false);
109
110
111 MsRunReadConfig config;
112 std::vector<size_t> ms_levels;
113 for(std::size_t i = 1; i < 9; i++)
114 {
115 ms_levels.push_back(i);
116 }
117 config.setMsLevels(ms_levels);
118 config.setNeedPeakList(true);
119
120 p_msrunreader->readSpectrumCollection2(config, translater);
121
122 m_monitor.setTotalSteps(0);
123 qDebug();
124}
void setNeedPeakList(bool need_peak_list)
void setMsLevels(std::vector< std::size_t > ms_levels)

References m_isReadAhead, m_monitor, m_ms1IsMasked, pappso::MsRunReader::readSpectrumCollection2(), pappso::MsRunReadConfig::setMsLevels(), pappso::SpectrumCollectionHandlerInterface::setNeedMsLevelPeakList(), pappso::MsRunReadConfig::setNeedPeakList(), pappso::SpectrumCollectionHandlerInterface::setReadAhead(), pappso::MsRunReader::spectrumListSize(), and writeHeader().

Referenced by pappso::TandemWrapperRun::convertOrginalMsData2mzXmlData().

◆ writeHeader()

void MzxmlOutput::writeHeader ( MsRunReader * p_msrunreader)
private

Definition at line 146 of file mzxmloutput.cpp.

147{
148
149 mpa_outputStream->writeNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi");
150 // xmlns="http://sashimi.sourceforge.net/schema_revision/mzXML_2.0"
151 // xsi:schemaLocation="http://sashimi.sourceforge.net/schema_revision/mzXML_2.0
152 // http://sashimi.sourceforge.net/schema_revision/mzXML_2.0/mzXML_idx_2.0.xsd"
153 /*
154114 writer.setPrefix("xsi", xmlnsxsi);
155115 writer.setDefaultNamespace(namespaceURI);
156mpa_outputStream->writeStartElement("mzXML");
157117 writer.writeNamespace("xsi", xmlnsxsi);
158118 writer.writeDefaultNamespace(namespaceURI);
159119
160120 writer.writeAttribute(xmlnsxsi, "schemaLocation",
161xsischemaLocation); 121 */
162 mpa_outputStream->writeStartElement("mzXML");
163 mpa_outputStream->writeAttribute("xmlns",
164 "http://sashimi.sourceforge.net/schema_revision/mzXML_3.2");
165 mpa_outputStream->writeAttribute("xsi:schemaLocation",
166 "http://sashimi.sourceforge.net/schema_revision/mzXML_3.2 "
167 "http://sashimi.sourceforge.net/schema_revision/mzXML_3.2/"
168 "mzXML_idx_3.2.xsd");
169
170 mpa_outputStream->writeStartElement("msRun");
171 mpa_outputStream->writeAttribute("scanCount",
172 QString("%1").arg(p_msrunreader->spectrumListSize()));
173 //<msRun scanCount="16576" startTime="PT0.292553S" endTime="PT3000.34S">
174 // writer.writeAttribute("scanCount",
175 // ms_run.getSpectrumCount(this.controller).toString());
176
177 /*
178 * # < parentFile fileName = #
179 * "file://SEQUEST1/raw/vidal/20060411_VIDAL_JEAN_1_PEPCR1_42140.RAW" #
180 * fileType = "RAWData" fileSha1 = #
181 * "23c1620d4ad3f4f0103b0141b7caec1e8b7eebf5" / >
182 */
183 mpa_outputStream->writeStartElement("parentFile");
184 mpa_outputStream->writeAttribute("fileName", p_msrunreader->getMsRunId()->getFileName());
185 mpa_outputStream->writeAttribute("fileType", "RAWData");
186 mpa_outputStream->writeEndElement();
187 /*
188144
189145 MsInstrumentList instrument_list =
190ms_run.getMsInstruments(controller); 146 for (MsInstrument
191instrument : instrument_list) { 147 this.write(instrument); 148 }
192*/
193
194 mpa_outputStream->writeStartElement("msInstrument");
195 mpa_outputStream->writeAttribute("msInstrumentID", "1");
196 //<msManufacturer category="msManufacturer" value="Thermo Scientific"/>
197 mpa_outputStream->writeStartElement("msManufacturer");
198 mpa_outputStream->writeAttribute("category", "msManufacturer");
199 mpa_outputStream->writeAttribute("value", "unknown");
200 mpa_outputStream->writeEndElement();
201 //<msModel category="msModel" value="Q Exactive"/>
202 // <msIonisation category="msIonisation" value="nanoelectrospray"/>
203 // <msMassAnalyzer category="msMassAnalyzer" value="quadrupole"/>
204 // <msDetector category="msDetector" value="inductive detector"/>
205 // <software type="acquisition" name="Xcalibur"
206 // version="2.1-152001/2.1.0.1520"/>
207 mpa_outputStream->writeEndElement();
208 /*
209149
210150 // #< dataProcessing centroided ="1" >
211151 // my $ref_data_processings =
212$ms_run_description->dataProcessing(); 152 MsDataProcessingList
213dataProcList = ms_run.getMsDataProcessings(controller); 153 for
214(MsDataProcessing msDataProc : dataProcList) { 154 this.write(msDataProc); 155 }
215*/
216 mpa_outputStream->writeStartElement("dataProcessing");
217 //<dataProcessing centroided="1">
218 mpa_outputStream->writeAttribute("centroided", "1");
219 // <software type="conversion" name="ProteoWizard" version="3.0.3706"/>
220 mpa_outputStream->writeStartElement("software");
221 mpa_outputStream->writeAttribute("type", "conversion");
222 mpa_outputStream->writeAttribute("name", PAPPSOMSPP_NAME);
223 mpa_outputStream->writeAttribute("version", PAPPSOMSPP_VERSION);
224 mpa_outputStream->writeEndElement();
225 //<processingOperation name="Conversion to mzML"/>
226 mpa_outputStream->writeStartElement("processingOperation");
227 mpa_outputStream->writeAttribute("name", "Conversion to mzXML");
228 //<software type="processing" name="ProteoWizard" version="3.0.3706"/>
229 mpa_outputStream->writeStartElement("software");
230 mpa_outputStream->writeAttribute("type", "processing");
231 mpa_outputStream->writeAttribute("name", PAPPSOMSPP_NAME);
232 mpa_outputStream->writeAttribute("version", PAPPSOMSPP_VERSION);
233 mpa_outputStream->writeEndElement();
234 //<comment>Thermo/Xcalibur peak picking</comment>
235 mpa_outputStream->writeStartElement("comment");
236 mpa_outputStream->writeCharacters("pappso::MzxmlOutput");
237 mpa_outputStream->writeEndElement();
238 //</dataProcessing>
239 mpa_outputStream->writeEndElement();
240 mpa_outputStream->writeEndElement();
241 // Peaks
242}
const QString & getFileName() const
Definition msrunid.cpp:161
const MsRunIdCstSPtr & getMsRunId() const
#define PAPPSOMSPP_VERSION
Definition config.h:6
#define PAPPSOMSPP_NAME
Definition config.h:5

References pappso::MsRunId::getFileName(), pappso::MsRunReader::getMsRunId(), mpa_outputStream, PAPPSOMSPP_NAME, PAPPSOMSPP_VERSION, and pappso::MsRunReader::spectrumListSize().

Referenced by write(), and write().

◆ writeQualifiedMassSpectrum()

void MzxmlOutput::writeQualifiedMassSpectrum ( const QualifiedMassSpectrum & spectrum)
private

Definition at line 290 of file mzxmloutput.cpp.

291{
292 qDebug();
293 mpa_outputStream->writeStartElement("scan");
294 /*
295 <scan num="1"
296 scanType="Full"
297 centroided="1"
298 msLevel="1"
299 peaksCount="1552"
300 polarity="+"
301 retentionTime="PT0.292553S"
302 lowMz="400.153411865234"
303 highMz="1013.123352050781"
304 basePeakMz="445.12003"
305 basePeakIntensity="2.0422125e06"
306 totIonCurrent="1.737798e07">*/
307 mpa_outputStream->writeAttribute("num", QString("%1").arg(getScanNumber(spectrum)));
308 mpa_outputStream->writeAttribute("centroided", QString("1"));
309 mpa_outputStream->writeAttribute("msLevel", QString("%1").arg(spectrum.getMsLevel()));
310 if(spectrum.getMassSpectrumCstSPtr().get() == nullptr)
311 {
312 mpa_outputStream->writeAttribute("peaksCount", "0");
313 }
314 else
315 {
316 mpa_outputStream->writeAttribute("peaksCount", QString("%1").arg(spectrum.size()));
317
318 if(spectrum.size() > 0)
319 {
320 mpa_outputStream->writeAttribute(
321 "lowMz", QString::number(spectrum.getMassSpectrumCstSPtr().get()->front().x, 'f', 12));
322
323 mpa_outputStream->writeAttribute(
324 "highMz", QString::number(spectrum.getMassSpectrumCstSPtr().get()->back().x, 'f', 12));
325 // mpa_outputStream->writeAttribute("highMz",
326 // QString::number(spectrum.getMassSpectrumCstSPtr().get()->back().x,
327 // 'f', 10)); basePeakMz="245.1271988"
328 // basePeakIntensity="5810.7739"
329 // totIonCurrent="57803.815999999999">
330 }
331 }
332 mpa_outputStream->writeAttribute("polarity", "+");
333 mpa_outputStream->writeAttribute(
334 "retentionTime", QString("PT%1S").arg(QString::number(spectrum.getRtInSeconds(), 'f', 2)));
335
336 if(spectrum.getMsLevel() > 1)
337 {
338
339 //<precursorMz precursorScanNum="16574"
340 // precursorIntensity="58403.04296875" precursorCharge="2"
341 ////activationMethod="HCD">994.690619901808</precursorMz>
342 mpa_outputStream->writeStartElement("precursorMz");
343 mpa_outputStream->writeAttribute("precursorScanNum",
344 QString("%1").arg(getPrecursorScanNumber(spectrum)));
345 bool ok;
346 double precursor_intensity = spectrum.getPrecursorIntensity(&ok);
347 if(ok)
348 {
349 mpa_outputStream->writeAttribute("precursorIntensity",
350 QString::number(precursor_intensity, 'f', 4));
351 }
352 uint charge = spectrum.getPrecursorCharge(&ok);
353 if(ok)
354 {
355 mpa_outputStream->writeAttribute("precursorCharge", QString("%1").arg(charge));
356 }
357 double precursor_mz = spectrum.getPrecursorMz(&ok);
358 if(ok)
359 {
360 mpa_outputStream->writeCharacters(QString::number(precursor_mz, 'f', 12));
361 }
362 mpa_outputStream->writeEndElement();
363 }
364
365 /*<peaks compressionType="none"
366 compressedLen="0"
367 precision="64"
368 byteOrder="network"
369 contentType="m/z-int"></peaks>*/
370
371 mpa_outputStream->writeStartElement("peaks");
372 mpa_outputStream->writeAttribute("compressionType", "none");
373 mpa_outputStream->writeAttribute("compressedLen", "0");
374 mpa_outputStream->writeAttribute("precision", "64");
375 mpa_outputStream->writeAttribute("byteOrder", "network");
376 mpa_outputStream->writeAttribute("contentType", "m/z-int");
377
378 if((spectrum.getMassSpectrumCstSPtr().get() != nullptr) && (!spectrum.isEmptyMassSpectrum()))
379 {
380 QByteArray byte_array;
381 if(QSysInfo::ByteOrder == QSysInfo::LittleEndian)
382 {
383 for(const DataPoint &peak : *(spectrum.getMassSpectrumCstSPtr().get()))
384 {
385 double swap = change_endian(peak.x);
386 byte_array.append((char *)&swap, 8);
387 swap = change_endian(peak.y);
388 byte_array.append((char *)&swap, 8);
389 }
390 }
391 else
392 {
393 for(const DataPoint &peak : *(spectrum.getMassSpectrumCstSPtr().get()))
394 {
395 byte_array.append((char *)&peak.x, 8);
396 byte_array.append((char *)&peak.y, 8);
397 }
398 }
399 mpa_outputStream->writeCharacters(byte_array.toBase64());
400 }
401 mpa_outputStream->writeEndElement();
402
403 // scan
404 mpa_outputStream->writeEndElement();
405 qDebug();
406}
std::size_t getScanNumber(const QualifiedMassSpectrum &spectrum) const
std::size_t getPrecursorScanNumber(const QualifiedMassSpectrum &spectrum) const
uint getMsLevel() const
Get the mass spectrum level.
MassSpectrumCstSPtr getMassSpectrumCstSPtr() const
Get the MassSpectrumCstSPtr.
uint getPrecursorCharge(bool *ok=nullptr) const
get precursor charge
pappso_double getPrecursorIntensity(bool *ok=nullptr) const
get precursor intensity
pappso_double getPrecursorMz(bool *ok=nullptr) const
get precursor mz
pappso_double getRtInSeconds() const
Get the retention time in seconds.
T change_endian(T in)
unsigned int uint
Definition types.h:67

References change_endian(), pappso::QualifiedMassSpectrum::getMassSpectrumCstSPtr(), pappso::QualifiedMassSpectrum::getMsLevel(), pappso::QualifiedMassSpectrum::getPrecursorCharge(), pappso::QualifiedMassSpectrum::getPrecursorIntensity(), pappso::QualifiedMassSpectrum::getPrecursorMz(), getPrecursorScanNumber(), pappso::QualifiedMassSpectrum::getRtInSeconds(), getScanNumber(), pappso::QualifiedMassSpectrum::isEmptyMassSpectrum(), mpa_outputStream, and pappso::QualifiedMassSpectrum::size().

Member Data Documentation

◆ m_isReadAhead

bool pappso::MzxmlOutput::m_isReadAhead = false
private

Definition at line 93 of file mzxmloutput.h.

Referenced by setReadAhead(), write(), and write().

◆ m_monitor

UiMonitorInterface& pappso::MzxmlOutput::m_monitor
private

Definition at line 91 of file mzxmloutput.h.

Referenced by MzxmlOutput(), write(), and write().

◆ m_ms1IsMasked

bool pappso::MzxmlOutput::m_ms1IsMasked = false
private

Definition at line 94 of file mzxmloutput.h.

Referenced by maskMs1(), write(), and write().

◆ mpa_outputStream

QXmlStreamWriter* pappso::MzxmlOutput::mpa_outputStream
private

The documentation for this class was generated from the following files: