29 #include "../../../pappsomspp/pappsoexception.h"
30 #include "../../../pappsomspp/exception/exceptionoutofrange.h"
76 if(p_bytes !=
nullptr)
86 QObject::tr(
"TimsFrame::TimsFrame(%1,%2,nullptr,%3) FAILED")
111 QObject::tr(
"TimsFrame::unshufflePacket error: len%4 != 0"));
114 quint64 nb_uint4 = len / 4;
117 quint64 src_offset = 0;
119 for(quint64 j = 0; j < 4; j++)
121 for(quint64 i = 0; i < nb_uint4; i++)
123 dest[(i * 4) + j] = src[src_offset];
146 std::size_t cumul = 0;
151 return (nb_uint4 - cumul) / 2;
157 return (*(quint32 *)(
m_timsDataFrame.constData() + ((scanNum + 1) * 4))) / 2;
163 std::size_t offset = 0;
164 for(std::size_t i = 0; i < (scanNum + 1); i++)
177 std::vector<quint32> scan_tof;
185 qint32 previous = -1;
186 for(std::size_t i = 0; i < scan_tof.size(); i++)
191 previous = scan_tof[i];
202 std::vector<quint32> scan_intensities;
205 return scan_intensities;
211 for(std::size_t i = 0; i < scan_intensities.size(); i++)
214 (offset * 4) + (i * 8) + 4));
217 return scan_intensities;
223 std::map<quint32, quint32> &accumulate_into)
const
236 qint32 previous = -1;
237 for(std::size_t i = 0; i < size; i++)
240 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
247 auto ret = accumulate_into.insert(std::pair<quint32, quint32>(
x,
y));
249 if(ret.second ==
false)
252 ret.first->second +=
y;
261 std::size_t scanNumEnd)
const
271 std::map<quint32, quint32> raw_spectrum;
274 std::size_t imax = scanNumEnd + 1;
276 for(std::size_t i = scanNumBegin; i < imax; i++)
291 for(std::pair<quint32, quint32> pair_tof_intensity : raw_spectrum)
298 new_trace.push_back(data_point_cumul);
304 catch(std::exception &error)
307 "Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
308 .arg(scanNumBegin, scanNumEnd)
317 std::size_t scanNumBegin,
318 std::size_t scanNumEnd)
const
320 qDebug() <<
"begin scanNumBegin=" << scanNumBegin
321 <<
" scanNumEnd=" << scanNumEnd;
328 std::size_t imax = scanNumEnd + 1;
330 for(std::size_t i = scanNumBegin; i < imax; i++)
339 catch(std::exception &error)
341 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
362 qDebug() <<
" scanNum=" << scanNum;
369 std::make_shared<pappso::MassSpectrum>();
373 return mass_spectrum_sptr;
384 qint32 previous = -1;
388 for(std::size_t i = 0; i < size; i++)
391 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
399 previous = tof_index;
404 mass_spectrum_sptr.get()->push_back(data_point);
407 return mass_spectrum_sptr;
413 std::vector<XicCoordTims *>::iterator &itXicListbegin,
414 std::vector<XicCoordTims *>::iterator &itXicListend,
417 qDebug() << std::distance(itXicListbegin, itXicListend);
418 std::vector<TimsFrame::XicComputeStructure> tmp_xic_list;
420 for(
auto it = itXicListbegin; it != itXicListend; it++)
424 qDebug() <<
" tmp_xic_struct.mobilityIndexBegin="
425 << tmp_xic_list.back().mobilityIndexBegin
426 <<
" tmp_xic_struct.mobilityIndexEnd="
427 << tmp_xic_list.back().mobilityIndexEnd;
429 qDebug() <<
" tmp_xic_struct.mzIndexLowerBound="
430 << tmp_xic_list.back().mzIndexLowerBound
431 <<
" tmp_xic_struct.mzIndexUpperBound="
432 << tmp_xic_list.back().mzIndexUpperBound;
434 if(tmp_xic_list.size() == 0)
442 std::vector<std::size_t> unique_scan_num_list;
443 for(
auto &&struct_xic : tmp_xic_list)
445 for(std::size_t scan = struct_xic.mobilityIndexBegin;
446 (scan <= struct_xic.mobilityIndexEnd) && (scan <
m_scanNumber);
449 unique_scan_num_list.push_back(scan);
452 std::sort(unique_scan_num_list.begin(), unique_scan_num_list.end());
453 auto it_scan_num_end =
454 std::unique(unique_scan_num_list.begin(), unique_scan_num_list.end());
455 auto it_scan_num = unique_scan_num_list.begin();
457 while(it_scan_num != it_scan_num_end)
461 for(
auto &&tmp_xic_struct : tmp_xic_list)
463 if(((*it_scan_num) >= tmp_xic_struct.mobilityIndexBegin) &&
464 ((*it_scan_num) <= tmp_xic_struct.mobilityIndexEnd))
468 tmp_xic_struct.tmpIntensity +=
469 ms_spectrum.get()->maxY(tmp_xic_struct.mzIndexLowerBound,
470 tmp_xic_struct.mzIndexUpperBound);
472 qDebug() <<
"tmp_xic_struct.tmpIntensity="
473 << tmp_xic_struct.tmpIntensity;
478 tmp_xic_struct.tmpIntensity +=
479 ms_spectrum.get()->sumY(tmp_xic_struct.mzIndexLowerBound,
480 tmp_xic_struct.mzIndexUpperBound);
481 qDebug() <<
"tmp_xic_struct.tmpIntensity="
482 << tmp_xic_struct.tmpIntensity;
489 for(
auto &&tmp_xic_struct : tmp_xic_list)
491 if(tmp_xic_struct.tmpIntensity != 0)
493 qDebug() << tmp_xic_struct.xic_ptr;
494 tmp_xic_struct.xic_ptr->push_back(
495 {
m_time, tmp_xic_struct.tmpIntensity});
520 qint32 previous = -1;
521 std::vector<quint32> index_list;
522 for(std::size_t i = 0; i < size; i++)
525 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
533 previous = data_point.
x;
534 trace_sptr.get()->push_back(data_point);
virtual double getMzFromTofIndex(quint32 tof_index)=0
get m/z from time of flight raw index
pappso_double lower() const
pappso_double upper() const
double m_accumulationTime
accumulation time in milliseconds
double m_time
retention time
quint32 m_scanNumber
total number of scans contained in this frame
std::size_t m_timsId
Tims frame database id (the SQL identifier of this frame)
virtual const MzCalibrationInterfaceSPtr & getMzCalibrationInterfaceSPtr() const final
get the MzCalibration model to compute mz and TOF for this frame
bool checkScanNum(std::size_t scanNum) const
check that this scan number exists
QByteArray m_timsDataFrame
virtual std::vector< quint32 > getScanIndexList(std::size_t scanNum) const override
get raw index list for one given scan index are not TOF nor m/z, just index on digitizer
virtual std::size_t getNbrPeaks(std::size_t scanNum) const override
get the number of peaks in this spectrum need the binary file
virtual void cumulateScan(std::size_t scanNum, std::map< quint32, quint32 > &accumulate_into) const
cumulate a scan into a map
TimsFrame(std::size_t timsId, quint32 scanNum, char *p_bytes, std::size_t len)
virtual pappso::MassSpectrumSPtr getMassSpectrumSPtr(std::size_t scanNum) const override
get Mass spectrum with peaks for this scan number need the binary file
virtual std::vector< quint32 > getScanIntensities(std::size_t scanNum) const override
get raw intensities without transformation from one scan it needs intensity normalization
void unshufflePacket(const char *src)
unshuffle data packet of tims compression type 2
std::size_t getScanOffset(std::size_t scanNum) const
get offset for this spectrum in the binary file
virtual void cumulateScansInRawMap(std::map< quint32, quint32 > &rawSpectrum, std::size_t scanNumBegin, std::size_t scanNumEnd) const override
cumulate scan list into a trace into a raw spectrum map
virtual Trace cumulateScanToTrace(std::size_t scanNumBegin, std::size_t scanNumEnd) const override
cumulate scan list into a trace
void extractTimsXicListInRtRange(std::vector< XicCoordTims * >::iterator &itXicListbegin, std::vector< XicCoordTims * >::iterator &itXicListend, XicExtractMethod method) const
virtual pappso::MassSpectrumCstSPtr getMassSpectrumCstSPtr(std::size_t scanNum) const
get the mass spectrum corresponding to a scan number
virtual pappso::TraceSPtr getRawTraceSPtr(std::size_t scanNum) const
get the raw index tof_index and intensities (normalized)
A simple container of DataPoint instances.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< Trace > TraceSPtr
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
std::shared_ptr< MassSpectrum > MassSpectrumSPtr
@ max
maximum of intensities
XicComputeStructure(const TimsFrame *fram_p, const XicCoordTims &xic_struct)
std::size_t mobilityIndexBegin
std::size_t mzIndexUpperBound
std::size_t mzIndexLowerBound
std::size_t mobilityIndexEnd
coordinates of the XIC to extract and the resulting XIC after extraction
std::size_t scanNumEnd
mobility index end
std::size_t scanNumBegin
mobility index begin
XicSPtr xicSptr
extracted xic
MzRange mzRange
the mass to extract
handle a single Bruker's TimsTof frame