36 #include <pwiz/data/msdata/DefaultReaderList.hpp>
39 #include "../../utils.h"
40 #include "../../pappsoexception.h"
41 #include "../../exception/exceptionnotfound.h"
42 #include "../../exception/exceptionnotpossible.h"
67 std::string file_name_std =
71 std::string env_backup = setlocale(LC_ALL,
"");
80 pwiz::msdata::DefaultReaderList defaultReaderList;
82 std::vector<pwiz::msdata::MSDataPtr> msDataPtrVector;
86 defaultReaderList.read(file_name_std, msDataPtrVector);
88 catch(std::exception &error)
90 qDebug() << __FILE__ <<
"@" << __LINE__ << __FUNCTION__ <<
"()"
91 << QString(
"Failed to read the data from file %1")
92 .arg(QString::fromStdString(file_name_std));
107 if(msDataPtrVector.size() != 1)
109 ExceptionNotPossible(
"For the kind of file at hand there can only be "
110 "one run in the file."));
121 for(
auto &msDataPtr : msDataPtrVector)
123 if(msDataPtr->run.id ==
mcsp_msRunId->getRunId().toStdString())
137 throw(ExceptionNotPossible(
138 "Could not find a MSDataPtr matching the requested run id."));
144 pwiz::cv::CVID native_id_format =
145 pwiz::msdata::id::getDefaultNativeIDFormat(*
msp_msData.get());
149 if(native_id_format == pwiz::cv::CVID::MS_Thermo_nativeID_format)
170 pwiz::msdata::SpectrumPtr
172 std::size_t spectrum_index,
173 bool want_binary_data)
const
175 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp;
179 native_pwiz_spectrum_sp =
180 p_spectrum_list->spectrum(spectrum_index, want_binary_data);
182 catch(std::runtime_error &error)
184 qDebug() <<
"getPwizSpectrumPtr error " << error.what() <<
" "
185 <<
typeid(error).name();
188 "MS file std::runtime_error :\n%2")
192 catch(std::exception &error)
194 qDebug() <<
"getPwizSpectrumPtr error " << error.what()
195 <<
typeid(error).name();
198 QObject::tr(
"Pwiz spectrum index %1 not found in MS file :\n%2")
203 if(native_pwiz_spectrum_sp.get() ==
nullptr)
205 throw ExceptionNotFound(
207 "Pwiz spectrum index %1 not found in MS file : null pointer")
208 .arg(spectrum_index));
211 return native_pwiz_spectrum_sp;
215 QualifiedMassSpectrum
217 const MassSpectrumId &massSpectrumId,
218 pwiz::msdata::Spectrum *spectrum_p,
219 bool want_binary_data,
225 env = setlocale(LC_ALL,
"");
226 setlocale(LC_ALL,
"C");
228 QualifiedMassSpectrum qualified_mass_spectrum(massSpectrumId);
236 (spectrum_p->cvParam(pwiz::msdata::MS_ms_level).valueAs<
int>());
238 qualified_mass_spectrum.setMsLevel(msLevel);
248 if(spectrum_p->precursors.size() > 0)
256 qDebug() <<
"Going to throw.";
259 "msLevel cannot be less than two for "
260 "a spectrum that has items in its Precursor list."));
267 pwiz::msdata::Precursor &precursor = spectrum_p->precursors.front();
272 std::size_t precursor_spectrum_index =
273 std::numeric_limits<std::size_t>::max();
277 if(precursor.spectrumID.empty())
297 if(!massSpectrumId.getSpectrumIndex())
299 qDebug() <<
"This MS2 sprectrum is at index 0."
300 "This might indicate a fragmentation "
301 "experiment performed in Tune mode.";
309 qDebug() <<
"This MS2 spectrum has no precursor's "
326 qualified_mass_spectrum.setPrecursorNativeId(
327 QString::fromStdString(precursor.spectrumID));
329 if(qualified_mass_spectrum.getPrecursorNativeId().isEmpty())
338 precursor_spectrum_index =
339 msp_msData->run.spectrumListPtr->find(precursor.spectrumID);
343 if(precursor_spectrum_index ==
350 "precursor ion's spectrum."));
354 qualified_mass_spectrum.setPrecursorSpectrumIndex(
355 precursor_spectrum_index);
364 if(!precursor.selectedIons.size())
368 "precursor ions's selected ions "
372 pwiz::msdata::SelectedIon &ion = *(precursor.selectedIons.begin());
377 QString(ion.cvParam(pwiz::cv::MS_selected_ion_m_z).value.c_str())
380 qualified_mass_spectrum.setPrecursorMz(selected_ion_mz);
385 QString(ion.cvParam(pwiz::cv::MS_peak_intensity).value.c_str())
388 qualified_mass_spectrum.setPrecursorIntensity(
389 selected_ion_peak_intensity);
397 unsigned int selected_ion_charge_state =
398 QString(ion.cvParam(pwiz::cv::MS_charge_state).value.c_str())
401 if(selected_ion_charge_state > 0)
403 qualified_mass_spectrum.setPrecursorCharge(
404 selected_ion_charge_state);
425 "there is not a single precursor ion."));
432 if(!spectrum_p->scanList.scans[0].hasCVParam(
433 pwiz::msdata::MS_scan_start_time))
437 qualified_mass_spectrum.setRtInSeconds(-1);
441 throw(ExceptionNotPossible(
442 "The spectrum has no scan start time value set."));
447 pwiz::data::CVParam retention_time_cv_param =
448 spectrum_p->scanList.scans[0].cvParam(
449 pwiz::msdata::MS_scan_start_time);
453 std::string unit_name = retention_time_cv_param.unitsName();
458 if(unit_name ==
"second")
460 qualified_mass_spectrum.setRtInSeconds(
461 retention_time_cv_param.valueAs<
double>());
463 else if(unit_name ==
"minute")
465 qualified_mass_spectrum.setRtInSeconds(
466 retention_time_cv_param.valueAs<
double>() * 60);
469 throw(ExceptionNotPossible(
470 "Could not determine the unit for the scan start time value."));
490 if(spectrum_p->scanList.scans[0].hasCVParam(
491 pwiz::msdata::MS_ion_mobility_drift_time))
501 spectrum_p->scanList.scans[0]
502 .cvParam(pwiz::msdata::MS_ion_mobility_drift_time)
523 if(std::isnan(driftTime) || std::isinf(driftTime))
529 return qualified_mass_spectrum;
535 qualified_mass_spectrum.setDtInMilliSeconds(driftTime);
545 qualified_mass_spectrum.setDtInMilliSeconds(-1);
563 std::vector<pwiz::msdata::MZIntensityPair> pairs;
564 spectrum_p->getMZIntensityPairs(pairs);
566 MassSpectrum spectrum;
571 for(std::vector<pwiz::msdata::MZIntensityPair>::const_iterator
583 spectrum.push_back(DataPoint(it->mz, it->intensity));
584 tic += it->intensity;
600 qualified_mass_spectrum.setMassSpectrumSPtr(spectrum_sp);
611 qualified_mass_spectrum.setMassSpectrumSPtr(
nullptr);
613 catch(PappsoException &errorp)
615 qDebug() <<
"Going to throw";
618 QObject::tr(
"Error reading data using the proteowizard library: %1")
619 .arg(errorp.qwhat()));
621 catch(std::exception &error)
623 qDebug() <<
"Going to throw";
626 QObject::tr(
"Error reading data using the proteowizard library: %1")
633 return qualified_mass_spectrum;
637 QualifiedMassSpectrum
639 bool want_binary_data,
644 env = setlocale(LC_ALL,
"");
651 setlocale(LC_ALL,
"C");
657 setlocale(LC_ALL, env.c_str());
663 pwiz::msdata::SpectrumListPtr spectrum_list_p =
666 if(spectrum_index == spectrum_list_p.get()->size())
668 setlocale(LC_ALL, env.c_str());
670 QObject::tr(
"The spectrum index cannot be equal to the size of the "
676 massSpectrumId.setSpectrumIndex(spectrum_index);
678 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp =
681 setlocale(LC_ALL, env.c_str());
683 massSpectrumId.setNativeId(
684 QString::fromStdString(native_pwiz_spectrum_sp->id));
687 massSpectrumId, native_pwiz_spectrum_sp.get(), want_binary_data, ok);
695 pwiz::msdata::ReaderList reader_list;
697 std::string reader_type = reader_list.identify(file_name.toStdString());
699 if(!reader_type.empty())
720 QualifiedMassSpectrum
722 bool want_binary_data)
const
725 QualifiedMassSpectrum spectrum;
733 if(spectrum.getRtInSeconds() == 0)
766 env = setlocale(LC_ALL,
"");
767 setlocale(LC_ALL,
"C");
773 pwiz::msdata::SpectrumListPtr spectrum_list_p =
777 std::size_t spectrum_list_size = spectrum_list_p.get()->size();
787 for(std::size_t iter = 0; iter < spectrum_list_size; iter++)
794 qDebug() <<
"The operation was cancelled. Breaking the loop.";
801 pwiz::msdata::SpectrumPtr native_pwiz_spectrum_sp =
826 QString native_id = QString::fromStdString(native_pwiz_spectrum_sp->id);
827 massSpectrumId.setNativeId(native_id);
837 massSpectrumId, native_pwiz_spectrum_sp.get(), want_binary_data, ok);
853 !native_pwiz_spectrum_sp->defaultArrayLength);
860 setlocale(LC_ALL, env.c_str());
876 return msp_msData->run.spectrumListPtr.get()->size();