36#include <pwiz/data/common/cv.hpp>
37#include <pwiz/data/msdata/DefaultReaderList.hpp>
75 pwiz::msdata::DefaultReaderList defaultReaderList;
77 std::vector<pwiz::msdata::MSDataPtr> msDataPtrVector;
81 defaultReaderList.read(file_name_std, msDataPtrVector);
83 catch(std::exception &error)
88 throw(
PappsoException(QString(
"Error reading file %1 in PwizMsRunReader, for msrun %2:\n%3")
105 if(msDataPtrVector.size() != 1)
108 "one run in the file."));
118 for(
const pwiz::msdata::MSDataPtr &msDataPtr : msDataPtrVector)
125 if(msDataPtr->run.id ==
mcsp_msRunId->getRunId().toStdString())
139 "matching the requested run id : %1")
146 pwiz::cv::CVID native_id_format = pwiz::msdata::id::getDefaultNativeIDFormat(*
msp_msData.get());
150 if(native_id_format == pwiz::cv::CVID::MS_Thermo_nativeID_format)
169const pwiz::msdata::MSDataPtr
183 term.
m_name =
"no nativeID format";
185 "No nativeID format indicates that the file tagged with this term does "
187 "contain spectra that can have a nativeID format.";
190 pwiz::cv::CVID cvid = pwiz::msdata::id::getDefaultNativeIDFormat(*(
msp_msData.get()));
194 case pwiz::cv::MS_Thermo_nativeID_format:
196 term.
m_name =
"Thermo nativeID format";
198 "Native format defined by controllerType=xsd:nonNegativeInteger "
199 "controllerNumber=xsd:positiveInteger scan=xsd:positiveInteger.";
207pwiz::msdata::SpectrumPtr
209 std::size_t spectrum_index,
210 bool want_binary_data)
const
212 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp;
216 native_pwiz_spectrum_sp = p_spectrum_list->spectrum(spectrum_index, want_binary_data);
218 catch(std::runtime_error &error)
223 "MS file std::runtime_error :\n%2")
227 catch(std::exception &error)
231 throw ExceptionNotFound(QObject::tr(
"Pwiz spectrum index %1 not found in MS file :\n%2")
236 if(native_pwiz_spectrum_sp.get() ==
nullptr)
239 QObject::tr(
"Pwiz spectrum index %1 not found in MS file : null pointer")
240 .arg(spectrum_index));
243 return native_pwiz_spectrum_sp;
255 if(!spectrum_p->scanList.scans[0].hasCVParam(pwiz::msdata::MS_scan_start_time))
268 pwiz::data::CVParam retention_time_cv_param =
269 spectrum_p->scanList.scans[0].cvParam(pwiz::msdata::MS_scan_start_time);
273 std::string unit_name = retention_time_cv_param.unitsName();
278 if(unit_name ==
"second")
280 qualified_mass_spectrum.
setRtInSeconds(retention_time_cv_param.valueAs<
double>());
282 else if(unit_name ==
"minute")
284 qualified_mass_spectrum.
setRtInSeconds(retention_time_cv_param.valueAs<
double>() * 60);
289 "scan start time value."));
317 if(spectrum_p->scanList.scans[0].hasCVParam(pwiz::msdata::MS_ion_mobility_drift_time))
327 .cvParam(pwiz::msdata::MS_ion_mobility_drift_time)
348 if(std::isnan(driftTime) || std::isinf(driftTime))
377 pwiz::msdata::Spectrum *spectrum_p,
378 bool want_binary_data,
383 if(spectrum_p ==
nullptr)
384 qFatal(
"Spectrum pointer cannot be nullptr.");
395 int msLevel = (spectrum_p->cvParam(pwiz::msdata::MS_ms_level).valueAs<int>());
399 if(!spectrum_p->scanList.scans[0].hasCVParam(pwiz::msdata::MS_peak_list_scans))
406 spectrum_p->cvParam(pwiz::msdata::MS_peak_list_scans).valueAs<
double>());
411 std::size_t precursor_list_size = spectrum_p->precursors.size();
418 if(precursor_list_size > 0)
429 "a spectrum that has items in its Precursor list."));
434 for(
auto &precursor : spectrum_p->precursors)
440 std::size_t precursor_spectrum_index = std::numeric_limits<std::size_t>::max();
444 if(precursor.spectrumID.empty())
472 QString::fromStdString(precursor.spectrumID));
483 precursor_spectrum_index =
484 msp_msData->run.spectrumListPtr->find(precursor.spectrumID);
488 if(precursor_spectrum_index ==
msp_msData->run.spectrumListPtr->size())
494 "precursor ion's spectrum."));
513 precursor.isolationWindow.cvParam(pwiz::cv::MS_isolation_window_target_m_z);
514 if(pwiz_cv_param != pwiz::cv::CVID_Unknown)
516 double isolation_mz = QString(pwiz_cv_param.value.c_str()).toDouble();
521 double isolation_mz_width =
523 precursor.isolationWindow.cvParam(pwiz::cv::MS_isolation_window_lower_offset)
530 precursor.isolationWindow.cvParam(pwiz::cv::MS_isolation_window_upper_offset)
551 if(!precursor.selectedIons.size())
558 "precursor ions's selected ions "
562 pwiz::msdata::SelectedIon &ion = *(precursor.selectedIons.begin());
567 QString(ion.cvParam(pwiz::cv::MS_selected_ion_m_z).value.c_str()).toDouble();
576 QString(ion.cvParam(pwiz::cv::MS_peak_intensity).value.c_str()).toDouble();
580 unsigned int selected_ion_charge_state =
581 QString(ion.cvParam(pwiz::cv::MS_charge_state).value.c_str()).toUInt();
587 selected_ion_mz, selected_ion_charge_state, selected_ion_peak_intensity);
633 QObject::tr(
"The number of precursors in the file is different "
634 "from the number of precursors in memory."));
662 std::vector<pwiz::msdata::MZIntensityPair> pairs;
663 spectrum_p->getMZIntensityPairs(pairs);
670 for(std::vector<pwiz::msdata::MZIntensityPair>::const_iterator it = pairs.begin(),
681 spectrum.push_back(
DataPoint(it->mz, it->intensity));
713 QObject::tr(
"Error reading data using the proteowizard library: %1").arg(errorp.
qwhat()));
715 catch(std::exception &error)
720 QObject::tr(
"Error reading data using the proteowizard library: %1").arg(error.what()));
727 return qualified_mass_spectrum;
733 bool want_binary_data,
749 pwiz::msdata::SpectrumListPtr spectrum_list_p =
msp_msData->run.spectrumListPtr;
751 if(spectrum_index == spectrum_list_p.get()->size())
755 QObject::tr(
"The spectrum index cannot be equal to the size of the "
763 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp =
768 checkNativeId(native_pwiz_spectrum_sp.get(), massSpectrumId);
772 massSpectrumId, native_pwiz_spectrum_sp.get(), want_binary_data, ok);
780 pwiz::msdata::ReaderList reader_list;
782 std::string reader_type = reader_list.identify(file_name.toStdString());
784 if(!reader_type.empty())
836 catch(std::exception &error)
841 QObject::tr(
"Error reading data (spectrum collection) using the "
842 "proteowizard library: %1")
856 catch(std::exception &error)
861 QObject::tr(
"Error reading data (spectrum collection2) using the "
862 "proteowizard library: %1")
869 unsigned int ms_level)
891 pwiz::msdata::SpectrumListPtr spectrum_list_p =
msp_msData->run.spectrumListPtr;
894 std::size_t spectrum_list_size = spectrum_list_p.get()->size();
904 for(std::size_t iter = 0; iter < spectrum_list_size; iter++)
918 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp =
943 checkNativeId(native_pwiz_spectrum_sp.get(), massSpectrumId);
952 massSpectrumId, native_pwiz_spectrum_sp.get(), want_binary_data, ok);
977 if(qualified_mass_spectrum.
getMsLevel() == ms_level)
1001 QString native_id = QString::fromStdString(pwiz_spectrum_ptr->id);
1008 std::vector<pwiz::data::CVParam>::const_iterator it =
1009 find_if(pwiz_spectrum_ptr->cvParams.cbegin(),
1010 pwiz_spectrum_ptr->cvParams.cend(),
1011 pwiz::data::CVParamIs(pwiz::cv::MS_spectrum_title));
1012 if(it != pwiz_spectrum_ptr->cvParams.cend())
1014 mass_spectrum_id.
setNativeId(QString::fromStdString(it->value));
1045 pwiz::msdata::SpectrumListPtr spectrum_list_p =
msp_msData->run.spectrumListPtr;
1048 std::size_t spectrum_list_size = spectrum_list_p.get()->size();
1059 for(std::size_t iter = 0; iter < spectrum_list_size; iter++)
1075 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp =
1103 checkNativeId(native_pwiz_spectrum_sp.get(), massSpectrumId);
1112 massSpectrumId, native_pwiz_spectrum_sp.get(), want_binary_data, ok);
1160 return msp_msData->run.spectrumListPtr.get()->size();
1212 std::string env_backup;
1219 std::string env_backup = std::setlocale(LC_ALL,
nullptr);
1220 std::setlocale(LC_ALL,
"C");
1222 std::locale::global(std::locale(
"C"));
1225 catch(std::exception &error)
1228 QObject::tr(
"Error trying to set local to C : %1").arg(error.what()));
1241 std::setlocale(LC_ALL, environment_locale.c_str());
1243 std::locale::global(std::locale(
""));
1246 catch(std::exception &error)
1249 QObject::tr(
"Error trying to set local to original system one %1 : %2")
1250 .arg(environment_locale.c_str())
1251 .arg(error.what()));
1259 std::size_t spectrum_id =
1260 msp_msData->run.spectrumListPtr->find(spectrum_identifier.toStdString());
1261 if(spectrum_id ==
msp_msData->run.spectrumListPtr->size())
1264 QObject::tr(
"Spectrum identifier %1 not found").arg(spectrum_identifier));
1296 for(
auto ¶m_group :
msp_msData.get()->paramGroupPtrs)
1298 for(
const auto &cv_param : param_group.get()->cvParams)
1300 if(cv_param.cvid == pwiz::cv::CVID::MS_Q_Exactive)
1304 else if(cv_param.cvid == pwiz::cv::CVID::MS_Velos_Plus)
1309 else if(cv_param.cvid == pwiz::cv::CVID::MS_LTQ_Orbitrap_Elite)
1318 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Fusion)
1327 else if(cv_param.cvid == pwiz::cv::CVID::MS_Q_Exactive_HF)
1336 else if(cv_param.cvid == pwiz::cv::CVID::MS_Exactive_Plus)
1341 else if(cv_param.cvid == pwiz::cv::CVID::MS_Q_Exactive_Plus)
1348 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Fusion_Lumos)
1353 else if(cv_param.cvid == pwiz::cv::CVID::MS_Q_Exactive_HF_X)
1360 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Exploris_480)
1367 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Eclipse)
1374 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Exploris_240)
1381 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Exploris_120)
1387 else if(cv_param.cvid == pwiz::cv::CVID::MS_LTQ_Orbitrap_Velos_Pro)
1393 else if(cv_param.cvid == pwiz::cv::CVID::MS_Q_Exactive_UHMR)
1398 else if(cv_param.cvid == pwiz::cv::CVID::MS_TSQ_Altis_Plus)
1405 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Ascend)
1412 else if(cv_param.cvid == pwiz::cv::CVID::MS_Orbitrap_Astral)
const OboPsiModTerm & getOboPsiModTermWithAccession(const QString &accession) const
void setNativeId(const QString &native_id)
void setSpectrumIndex(std::size_t index)
Class to represent a mass spectrum.
void sortMz()
Sort the DataPoint instances of this spectrum.
MassSpectrumSPtr makeMassSpectrumSPtr() const
bool needPeakList() const
bool acceptMsLevel(std::size_t ms_level) const
bool acceptRetentionTimeInSeconds(double retention_time_in_seconds) const
MsRunIdCstSPtr mcsp_msRunId
MsRunReader(const MsRunIdCstSPtr &ms_run_id)
void setAccession(const QString &accession)
virtual const QString & qwhat() const
virtual pappso::XicCoordSPtr newXicCoordSPtrFromSpectrumIndex(std::size_t spectrum_index, pappso::PrecisionPtr precision) const override
get a xic coordinate object from a given spectrum index
pwiz::msdata::MSDataPtr msp_msData
virtual void readSpectrumCollectionByMsLevel(SpectrumCollectionHandlerInterface &handler, unsigned int ms_level) override
function to visit an MsRunReader and get each Spectrum in a spectrum collection handler by Ms Levels
static std::string setGlobalLocaleToEnglish()
virtual void readSpectrumCollectionWithMsrunReadConfig(const MsRunReadConfig &config, SpectrumCollectionHandlerInterface &handler)
bool processDriftTime(pwiz::msdata::Spectrum *spectrum_p, QualifiedMassSpectrum &qualified_mass_spectrum) const
virtual MassSpectrumCstSPtr massSpectrumCstSPtr(std::size_t spectrum_index) override
const pwiz::msdata::MSDataPtr getMsDataPtr() const
QualifiedMassSpectrum qualifiedMassSpectrumFromPwizMSData(std::size_t spectrum_index, bool want_binary_data, bool &ok) const
PwizMsRunReader(MsRunIdCstSPtr &msrun_id_csp)
void checkNativeId(const pwiz::msdata::Spectrum *pwiz_spectrum_ptr, MassSpectrumId &mass_spectrum_id) const
static void setGlobalLocaleToCurrentOs(const std::string &environment_locale)
QualifiedMassSpectrum qualifiedMassSpectrumFromPwizSpectrumPtr(const MassSpectrumId &massSpectrumId, pwiz::msdata::Spectrum *spectrum_p, bool want_binary_data, bool &ok) const
virtual void readSpectrumCollection2(const MsRunReadConfig &config, SpectrumCollectionHandlerInterface &handler) override
function to visit an MsRunReader and get each Spectrum in a spectrum collection handler
virtual std::size_t spectrumStringIdentifier2SpectrumIndex(const QString &spectrum_identifier) override
if possible, get the spectrum index given a string identifier throw a not found exception if spectrum...
virtual QualifiedMassSpectrum qualifiedMassSpectrum(std::size_t spectrum_index, bool want_binary_data=true) const override
get a QualifiedMassSpectrum class given its scan number
virtual bool hasScanNumbers() const override
tells if spectra can be accessed using scan numbers by default, it returns false. Only overrided func...
bool processRetentionTime(pwiz::msdata::Spectrum *spectrum_p, QualifiedMassSpectrum &qualified_mass_spectrum) const
virtual bool acquireDevice() override
acquire data back end device
virtual const OboPsiModTerm getOboPsiModTermInstrumentModelName() const override
get OboPsiModTerm corresponding to the instrument model name child of : [Term] id: MS:1000031 name: i...
virtual ~PwizMsRunReader()
virtual void initialize() override
virtual void readSpectrumCollection(SpectrumCollectionHandlerInterface &handler) override
function to visit an MsRunReader and get each Spectrum in a spectrum collection handler
virtual bool accept(const QString &file_name) const override
tells if the reader is able to handle this file must be implemented by private MS run reader,...
virtual std::size_t spectrumListSize() const override
get the totat number of spectrum conained in the MSrun data file
pwiz::msdata::SpectrumPtr getPwizSpectrumPtr(pwiz::msdata::SpectrumList *p_spectrum_list, std::size_t spectrum_index, bool want_binary_data) const
virtual bool releaseDevice() override
release data back end device if a the data back end is released, the developper has to use acquireDev...
virtual pappso::XicCoordSPtr newXicCoordSPtrFromQualifiedMassSpectrum(const pappso::QualifiedMassSpectrum &mass_spectrum, pappso::PrecisionPtr precision) const override
get a xic coordinate object from a given spectrum
const OboPsiModTerm getOboPsiModTermNativeIDFormat() const
get OboPsiModTerm corresponding to the nativeID format format of mz data
virtual MassSpectrumSPtr massSpectrumSPtr(std::size_t spectrum_index) override
get a MassSpectrumSPtr class given its spectrum index
Class representing a fully specified mass spectrum.
uint getMsLevel() const
Get the mass spectrum level.
MassSpectrumCstSPtr getMassSpectrumCstSPtr() const
Get the MassSpectrumCstSPtr.
void setPrecursorNativeId(const QString &native_id)
Set the scan native id of the precursor ion.
const std::vector< PrecursorIonData > & getPrecursorIonData() const
void setDtInMilliSeconds(pappso_double rt)
Set the drift time in milliseconds.
const QString & getPrecursorNativeId() const
void appendPrecursorIonData(const PrecursorIonData &precursor_ion_data)
void setMsLevel(uint ms_level)
Set the mass spectrum level.
void setPrecursorSpectrumIndex(std::size_t precursor_scan_num)
Set the scan number of the precursor ion.
pappso_double getPrecursorMz(bool *ok=nullptr) const
get precursor mz
MassSpectrumSPtr getMassSpectrumSPtr() const
Get the MassSpectrumSPtr.
void setParameterValue(QualifiedMassSpectrumParameter parameter, const QVariant &value)
void setMassSpectrumSPtr(MassSpectrumSPtr massSpectrum)
Set the MassSpectrumSPtr.
void setRtInSeconds(pappso_double rt)
Set the retention time in seconds.
pappso_double getRtInSeconds() const
Get the retention time in seconds.
void setEmptyMassSpectrum(bool is_empty_mass_spectrum)
interface to collect spectrums from the MsRunReader class
virtual bool shouldStop()
virtual bool needPeakList() const =0
tells if we need the peak list (if we want the binary data) for each spectrum
virtual void loadingEnded()
virtual void spectrumListHasSize(std::size_t size)
virtual void setQualifiedMassSpectrum(const QualifiedMassSpectrum &spectrum)=0
static std::string toUtf8StandardString(const QString &text)
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
double pappso_double
A type definition for doubles.
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
@ IsolationWindowTargetMz
Isolation m/z value isolation window target m/z (thomson).
@ IsolationWindowUpperOffset
isolation window upper offset (thomson)
@ IsolationWindowLowerOffset
isolation window lower offset (thomson)
const PrecisionBase * PrecisionPtr
std::shared_ptr< MassSpectrum > MassSpectrumSPtr
std::shared_ptr< XicCoord > XicCoordSPtr