29#include "../../exception/exceptionnotimplemented.h"
30#include "../../exception/exceptioninterrupted.h"
31#include "../../exception/exceptionnotpossible.h"
32#include "../../vendors/tims/timsddaprecursors.h"
52 QObject::tr(
"Not yet implemented in TimsFramesMsRunReader %1.\n").arg(__LINE__));
61 return msp_timsData->getMassSpectrumCstSPtrByGlobalScanIndex(spectrum_index);
67 bool want_binary_data)
const
73 getMsRunId(), mass_spectrum, spectrum_index, want_binary_data);
96 std::vector<std::size_t> subset_of_tims_frame_ids;
99 bool asked_ion_mobility_scan_num_range =
false;
101 quint32 mobility_scan_num_range_begin = std::numeric_limits<quint32>::max();
102 quint32 mobility_scan_num_range_end = std::numeric_limits<quint32>::max();
103 quint32 mobility_scan_num_range_width = std::numeric_limits<quint32>::max();
105 double mobility_one_over_k0 = std::numeric_limits<double>::max();
106 double mobility_one_over_k0_range_begin = std::numeric_limits<double>::max();
107 double mobility_one_over_k0_range_end = std::numeric_limits<double>::max();
112 mobility_scan_num_range_begin =
114 mobility_scan_num_range_end =
118 mobility_scan_num_range_width =
119 mobility_scan_num_range_end + 1 - mobility_scan_num_range_begin;
121 asked_ion_mobility_scan_num_range =
true;
127 const std::vector<FrameIdDescr> &frame_id_descr_list =
msp_timsData->getFrameIdDescrList();
130 std::size_t scan_count = 0;
132 for(
auto const &frame_record :
msp_timsData->getTimsFrameRecordList())
140 if(frame_record.frame_id == 0)
146 std::size_t ms_level = 2;
147 if(frame_record.msms_type == 0)
156 subset_of_tims_frame_ids.push_back(frame_record.frame_id);
158 if(mobility_scan_num_range_width != std::numeric_limits<int>::max())
160 scan_count += mobility_scan_num_range_width;
164 scan_count += frame_id_descr_list[frame_record.frame_id].m_scanCount;
169 std::size_t frame_count = subset_of_tims_frame_ids.size();
170 qDebug() <<
"The number of retained RT range- and MS level-matching frames : " << frame_count;
184 bool asked_mz_range =
false;
185 double mz_range_begin = -1;
186 double mz_range_end = -1;
190 asked_mz_range =
true;
203 std::size_t mz_index_merge_window = 0;
206 mz_index_merge_window =
214 std::size_t scan_index = 0;
216 for(std::size_t tims_frame_id : subset_of_tims_frame_ids)
226 const FrameIdDescr ¤t_frame_record = frame_id_descr_list[tims_frame_id];
246 mobility_one_over_k0_range_begin =
250 mobility_one_over_k0_range_end =
254 mobility_scan_num_range_begin =
255 tims_frame_csp.get()->getScanIndexFromOneOverK0(mobility_one_over_k0_range_begin);
257 mobility_scan_num_range_end =
258 tims_frame_csp.get()->getScanIndexFromOneOverK0(mobility_one_over_k0_range_end);
260 asked_ion_mobility_scan_num_range =
true;
266 quint32 count_of_mobility_scans = tims_frame_csp->getTotalNumberOfScans();
268 if(asked_ion_mobility_scan_num_range)
270 if(mobility_scan_num_range_end > (count_of_mobility_scans - 1))
272 mobility_scan_num_range_end = count_of_mobility_scans - 1;
277 mobility_scan_num_range_begin = 0;
278 mobility_scan_num_range_end = count_of_mobility_scans - 1;
285 if(mobility_one_over_k0_range_begin == std::numeric_limits<double>::max())
286 mobility_one_over_k0_range_begin =
287 tims_frame_csp->getOneOverK0Transformation(mobility_scan_num_range_begin);
288 if(mobility_one_over_k0_range_end == std::numeric_limits<double>::max())
289 mobility_one_over_k0_range_end =
290 tims_frame_csp->getOneOverK0Transformation(mobility_scan_num_range_end);
292 mobility_scan_num_range_width =
293 mobility_scan_num_range_end + 1 - mobility_scan_num_range_begin;
297 mobility_one_over_k0 = tims_frame_csp.get()->getScanIndexFromOneOverK0(
298 mobility_scan_num_range_begin + (mobility_scan_num_range_width / 2));
310 spectrum_id.
setNativeId(QString(
"frame_id=%1 global_scan_index=%2 im_scan_range_begin=%3 "
311 "im_scan_range_end=%4")
314 .arg(mobility_scan_num_range_begin)
315 .arg(mobility_scan_num_range_end));
321 qualified_mass_spectrum.
setRtInSeconds(tims_frame_csp.get()->getRtInSeconds());
325 unsigned int frame_ms_level = tims_frame_csp.get()->getMsLevel();
326 qualified_mass_spectrum.
setMsLevel(frame_ms_level);
331 qualified_mass_spectrum.
setDtInMilliSeconds(tims_frame_csp.get()->getDriftTimeInMilliseconds(
332 mobility_scan_num_range_begin + (mobility_scan_num_range_width / 2)));
335 qDebug() <<
"mobility_one_over_k0:" << mobility_one_over_k0
336 <<
"mobility_one_over_k0_range_begin:" << mobility_one_over_k0_range_begin
337 <<
"mobility_one_over_k0_range_end" << mobility_one_over_k0_range_end;
339 if(mobility_one_over_k0 == std::numeric_limits<double>::max() ||
340 mobility_one_over_k0_range_begin == std::numeric_limits<double>::max() ||
341 mobility_one_over_k0_range_end == std::numeric_limits<double>::max())
344 "range are undefined."));
347 mobility_one_over_k0);
351 mobility_one_over_k0_range_end);
358 if(mobility_scan_num_range_begin == std::numeric_limits<quint32>::max() ||
359 mobility_scan_num_range_end == std::numeric_limits<quint32>::max())
364 mobility_scan_num_range_begin +
365 (mobility_scan_num_range_width / 2));
368 mobility_scan_num_range_begin);
374 static_cast<qlonglong
>(tims_frame_csp->getTotalNumberOfScans()));
383 quint32 min_mz_index_out = 0;
384 quint32 max_mz_index_out = 0;
388 trace = tims_frame_csp->combineScansToTraceWithDowngradedMzResolution2(
389 mz_index_merge_window,
392 mobility_scan_num_range_begin,
393 mobility_scan_num_range_end,
399 trace = tims_frame_csp->combineScansToTraceWithDowngradedMzResolution(
400 mz_index_merge_window,
401 mobility_scan_num_range_begin,
402 mobility_scan_num_range_end,
431 [[maybe_unused]]
unsigned int ms_level)
465 Trace tic_chromatogram;
467 const std::vector<FrameIdDescr> frame_descr_list =
msp_timsData->getFrameIdDescrList();
472 msp_timsData->getTimsFrameCstSPtrCached(frame_id_descr.m_frameId);
473 std::size_t scan_begin = 0;
474 std::size_t scan_end = tims_frame_csp->getTotalNumberOfScans() - 1;
478 if(tims_frame_csp->getMsLevel() == 1)
482 double rt = tims_frame_csp->getRtInSeconds();
485 DataPoint(
rt, tims_frame_csp->cumulateScanRangeIntensities(scan_begin, scan_end)));
491 return tic_chromatogram;
500 QObject::tr(
"%1 %2 %3 not implemented").arg(__FILE__).arg(__FUNCTION__).arg(__LINE__));
void setNativeId(const QString &native_id)
void setMsRunId(MsRunIdCstSPtr other)
void setSpectrumIndex(std::size_t index)
bool needPeakList() const
const QVariant getParameterValue(MsRunReadConfigParameter parameter) const
bool acceptMsLevel(std::size_t ms_level) const
bool acceptRetentionTimeInSeconds(double retention_time_in_seconds) const
const MsRunIdCstSPtr & getMsRunId() const
Class representing a fully specified mass spectrum.
void setDtInMilliSeconds(pappso_double rt)
Set the drift time in milliseconds.
void setMassSpectrumId(const MassSpectrumId &iD)
Set the MassSpectrumId.
void setMsLevel(uint ms_level)
Set the mass spectrum level.
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.
void setEmptyMassSpectrum(bool is_empty_mass_spectrum)
interface to collect spectrums from the MsRunReader class
virtual bool shouldStop()
virtual void spectrumListHasSize(std::size_t size)
virtual void setQualifiedMassSpectrum(const QualifiedMassSpectrum &spectrum)=0
virtual std::size_t spectrumListSize() const override
get the totat number of spectrum conained in the MSrun data file
virtual void readSpectrumCollection(SpectrumCollectionHandlerInterface &handler) override
function to visit an MsRunReader and get each Spectrum in a spectrum collection handler
virtual MassSpectrumCstSPtr massSpectrumCstSPtr(std::size_t spectrum_index) override
virtual QualifiedMassSpectrum qualifiedMassSpectrum(std::size_t spectrum_index, bool want_binary_data=true) const override
get a QualifiedMassSpectrum class given its scan number
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 MassSpectrumSPtr massSpectrumSPtr(std::size_t spectrum_index) override
get a MassSpectrumSPtr class given its spectrum index
virtual void readSpectrumCollection2(const MsRunReadConfig &config, SpectrumCollectionHandlerInterface &handler) override
virtual Trace computeTicChromatogram()
virtual ~TimsFramesMsRunReader()
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
A simple container of DataPoint instances.
size_t append(const DataPoint &data_point)
appends a datapoint and return new size
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
@ TimsFrameIonMobScanIndexBegin
@ TimsFrameIonMobScanIndexEnd
@ TimsFrameMzIndexBegin
Bruker's timsTOF mz index frame start range.
@ IonMobOneOverK0Begin
1/K0 range's begin value
@ IonMobOneOverK0End
1/K0 range's end value
@ TimsFrameScansCount
Bruker's timsTOF frame's total ion mobility slots.
@ TimsFrameMzIndexEnd
Bruker's timsTOF mz index frame end range.
@ IonMobOneOverK0
1/kO value
std::shared_ptr< MassSpectrum > MassSpectrumSPtr
std::shared_ptr< const TimsFrame > TimsFrameCstSPtr
@ TimsFrameIonMobOneOverK0Begin
@ TimsFrameIonMobOneOverK0End
@ TimsFrameIonMobScanIndexBegin
@ TimsFrameMzIndexMergeWindow
@ TimsFrameIonMobScanIndexEnd
std::size_t m_globalScanIndex