diff --git a/src/utils/readspectrum.cpp b/src/utils/readspectrum.cpp index 7b9f599774262ff8cdf8d32807ae1ef8aa4d1dbe..d889642a16ca2e0bb105b4e8e65d8bd942721ee2 100644 --- a/src/utils/readspectrum.cpp +++ b/src/utils/readspectrum.cpp @@ -47,6 +47,8 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename); pappso::QualifiedSpectrum getQualifiedSpectrumFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, unsigned int scan_num); +void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_mzdata, pappso::Xic * p_xic, const pappso::MassRange & mass_range, XixExtactMethod method); + pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) { qDebug() << "getPwizMSDataFile opening file " << filename ; @@ -76,22 +78,62 @@ pwiz::msdata::MSDataFile * getPwizMSDataFile(const QString & filename) { return dataFile; } -/* -MzFormat getPwizMSDataFileFormat(pwiz::msdata::MSDataFile * p_ms_data_file) { - pwiz::msdata::CVID native_id_format = pwiz::msdata::MSData::getDefaultNativeIDFormat(*p_ms_data_file); - if (native_id_format == pwiz::cv::CVID::MS_Mascot_MGF_format) { - return MzFormat::MGF; - } - if (native_id_format == pwiz::cv::CVID::MS_mzML_format) { - return MzFormat::mzML; - } - if (native_id_format == pwiz::cv::CVID::MS_ISB_mzXML_format) { - return MzFormat::mzXML; +void getXicFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, pappso::Xic * p_xic, const pappso::MassRange & mass_range, XixExtactMethod method) { + + std::string env; + env=setlocale(LC_ALL,""); + setlocale(LC_ALL,"C"); + + + + + const pwiz::msdata::SpectrumList * p_spectrum_list = p_ms_data_file->run.spectrumListPtr.get(); + std::size_t spectrum_list_size = p_spectrum_list->size(); + pwiz::msdata::SpectrumPtr spectrum; + + XicElement peak; + + for (std::size_t i=0; i < spectrum_list_size; i++) { + spectrum = p_spectrum_list->spectrum(i, false); + unsigned int ms_level(QString(spectrum->cvParam(pwiz::msdata::MS_ms_level).value.c_str()).toUInt()); + + if (ms_level == 1) { + spectrum = p_spectrum_list->spectrum(i, true); + peak.rt = QString(spectrum->scanList.scans[0].cvParam(pwiz::msdata::MS_scan_start_time).value.c_str()).toDouble(); + peak.intensity = 0; + + vector<pwiz::msdata::MZIntensityPair> pairs; + spectrum->getMZIntensityPairs(pairs); + + // iterate through the m/z-intensity pairs + for (vector<pwiz::msdata::MZIntensityPair>::const_iterator it=pairs.begin(), end=pairs.end(); it!=end; ++it) + { + //qDebug() << "it->mz " << it->mz << " it->intensity" << it->intensity; + if (mass_range.contains(it->mz)){ + if (method == XixExtactMethod::max) { + if (peak.intensity < it->intensity) { + peak.intensity = it->intensity; + } + } + else { + peak.intensity += it->intensity; + } + } + } + + p_xic->push_back(peak); + } + } - throw pappso::PappsoException(QObject::tr(" pwiz::msdata::CVID native_id_format %1 not found").arg(native_id_format)); - return MzFormat::unknown; + + + + + + setlocale(LC_ALL,env.c_str()); + } -*/ + pappso::QualifiedSpectrum getQualifiedSpectrumFromPwizMSDataFile(pwiz::msdata::MSDataFile * p_ms_data_file, unsigned int scan_num) { unsigned int precursor_charge_state=0; @@ -273,7 +315,7 @@ void SpectrumStore::checkMsRunStatistics(MsRunSp msrun) { unsigned int msLevel(QString(spectrum->cvParam(pwiz::msdata::MS_ms_level).value.c_str()).toUInt()); count_mslevel[msLevel]++; } - + msrun.get()->setMsRunStatistics(MsRunStatistics::total_spectra, (unsigned int) spectrum_list_size); msrun.get()->setMsRunStatistics(MsRunStatistics::total_spectra_ms1, (unsigned int) count_mslevel[1]); msrun.get()->setMsRunStatistics(MsRunStatistics::total_spectra_ms2, (unsigned int) count_mslevel[2]); @@ -324,3 +366,15 @@ pappso::SpectrumSp SpectrumStore::getSpectrumSpFromMsRunSp(MsRunSp msrun, unsign return spectrum.getOriginalSpectrumSp(); } + +pappso::XicSp SpectrumStore::getXicSpFromMsRunSp(MsRunSp msrun, const pappso::MassRange & mass_range, XixExtactMethod method) { + pwiz::msdata::MSDataFile * p_msdatafile = findPwizMSDataFile(msrun); + + XicSp xic_sp; + if (p_msdatafile == nullptr) { + Xix xic; + getXicFromPwizMSDataFile(p_msdatafile, &xic, mass_range, method); + xic_sp = xic.makeXicSp(); + } + return (xic_sp); +} diff --git a/src/utils/readspectrum.h b/src/utils/readspectrum.h index 8051910c4ec7758ca33dbaa6422e3e9c6cb9eac1..507bb2fd524f2a10c9f628c7236be97de82a473d 100644 --- a/src/utils/readspectrum.h +++ b/src/utils/readspectrum.h @@ -26,6 +26,7 @@ #include <QString> #include <pappsomspp/spectrum/qualifiedspectrum.h> +#include <pappsomspp/xic/xic.h> #include <map> #include "../core/msrun.h" @@ -42,6 +43,7 @@ class MSDataFile; class SpectrumStore { public: static pappso::SpectrumSp getSpectrumSpFromMsRunSp(MsRunSp msrun, unsigned int scan_num); + static pappso::XicSp getXicSpFromMsRunSp(MsRunSp msrun, const pappso::MassRange & mass_range, XixExtactMethod method); /** @brief try to find MS run statistics */ static void checkMsRunStatistics(MsRunSp msrun); diff --git a/src/utils/types.h b/src/utils/types.h index 16889a9b904ec2317f734c68cd11aa2a17f622c5..4800b26e98d8efe37e8d628c49eae12883ebdb6f 100644 --- a/src/utils/types.h +++ b/src/utils/types.h @@ -88,6 +88,15 @@ enum class MsRunStatistics: std::int8_t { +/** \def XixExtactMethod method to extract Xic + * + */ +enum class XixExtactMethod { + sum, ///< sum of intensities + max ///< maximum of intensities +}; + + /** \def ProjectMode separate each samples or combine all * */