73 if(p_bytes !=
nullptr)
83 QObject::tr(
"TimsFrame::TimsFrame(%1,%2,nullptr,%3) FAILED")
108 QObject::tr(
"TimsFrame::unshufflePacket error: len % 4 != 0"));
111 quint64 nb_uint4 = len / 4;
114 quint64 src_offset = 0;
116 for(quint64 j = 0; j < 4; j++)
118 for(quint64 i = 0; i < nb_uint4; i++)
120 dest[(i * 4) + j] = src[src_offset];
143 std::size_t cumul = 0;
146 cumul += (*(quint32 *)(
m_binaryData.constData() + (i * 4)));
148 return (nb_uint4 - cumul) / 2;
154 return (*(quint32 *)(
m_binaryData.constData() + ((scanNum + 1) * 4))) / 2;
160 std::size_t offset = 0;
161 for(std::size_t i = 0; i < (scanNum + 1); i++)
163 offset += (*(quint32 *)(
m_binaryData.constData() + (i * 4)));
174 std::vector<quint32> scan_tof;
182 qint32 previous = -1;
183 for(std::size_t i = 0; i < scan_tof.size(); i++)
186 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8))) +
188 previous = scan_tof[i];
199 std::vector<quint32> scan_intensities;
202 return scan_intensities;
208 for(std::size_t i = 0; i < scan_intensities.size(); i++)
210 scan_intensities[i] =
211 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4));
214 return scan_intensities;
223 quint64 summed_intensities = 0;
226 return summed_intensities;
233 qint32 previous = -1;
235 for(std::size_t i = 0; i < size; i++)
238 (*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) +
242 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4));
246 summed_intensities +=
y;
254 return summed_intensities;
267 std::size_t mobility_scan_end)
const
269 quint64 summed_intensities = 0;
275 return summed_intensities;
279 std::size_t mobility_scan_max = mobility_scan_end + 1;
281 for(std::size_t i = mobility_scan_begin; i < mobility_scan_max; i++)
288 catch(std::exception &error)
290 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
292 .arg(mobility_scan_begin)
293 .arg(mobility_scan_end)
299 return summed_intensities;
319 qint32 previous = -1;
320 for(std::size_t i = 0; i < scan_size; i++)
322 quint32
x = (*(quint32 *)((
m_binaryData.constData() + (scan_offset * 4) +
325 quint32
y = (*(quint32 *)(
m_binaryData.constData() + (scan_offset * 4) +
340 quint32 accepted_tof_index_range_begin,
341 quint32 accepted_tof_index_range_end)
const
352 qint32 previous = -1;
354 for(std::size_t i = 0; i < scan_size; i++)
356 quint32
x = (*(quint32 *)((
m_binaryData.constData() + (scan_offset * 4) +
362 if(
x < accepted_tof_index_range_begin)
368 if(
x > accepted_tof_index_range_end)
376 quint32
y = (*(quint32 *)(
m_binaryData.constData() + (scan_offset * 4) +
388 std::size_t mobility_scan_end)
const
400 raw_spectrum.
clear();
403 std::size_t mobility_scan_max = mobility_scan_end + 1;
405 for(std::size_t i = mobility_scan_begin; i < mobility_scan_max; i++)
429 new_trace.push_back(data_point_cumul);
436 catch(std::exception &error)
439 "Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
440 .arg(mobility_scan_begin, mobility_scan_end)
448 std::size_t mz_index_merge_window,
449 std::size_t mobility_scan_begin,
450 std::size_t mobility_scan_end,
451 quint32 &mz_minimum_index_out,
452 quint32 &mz_maximum_index_out)
const
462 qDebug() <<
"The frame is empty, returning empty trace.";
471 raw_spectrum.
clear();
474 std::size_t mobility_scan_max = mobility_scan_end + 1;
476 for(std::size_t i = mobility_scan_begin; i < mobility_scan_max; i++)
496 if(mz_index_merge_window > 0)
503 mz_minimum_index_out = std::numeric_limits<quint32>::max();
504 mz_maximum_index_out = 0;
510 if(tof_index > mz_maximum_index_out)
511 mz_maximum_index_out = tof_index;
512 if(tof_index < mz_minimum_index_out)
513 mz_minimum_index_out = tof_index;
523 new_trace.push_back(data_point_cumul);
536 catch(std::exception &error)
539 "Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
540 .arg(mobility_scan_begin, mobility_scan_end)
552 std::size_t mz_index_merge_window,
553 double mz_range_begin,
555 std::size_t mobility_scan_begin,
556 std::size_t mobility_scan_end,
557 quint32 &mz_minimum_index_out,
558 quint32 &mz_maximum_index_out)
const
569 qDebug() <<
"The frame is empty, returning empty trace.";
578 raw_spectrum.
clear();
581 std::size_t mobility_scan_max = mobility_scan_end + 1;
583 quint32 tof_index_for_mz_range_begin =
586 quint32 tof_index_for_mz_range_end =
594 for(std::size_t iter = mobility_scan_begin; iter < mobility_scan_max;
601 tof_index_for_mz_range_begin,
602 tof_index_for_mz_range_end);
618 if(mz_index_merge_window > 0)
625 mz_minimum_index_out = std::numeric_limits<quint32>::max();
626 mz_maximum_index_out = 0;
631 std::size_t intensity = raw_spectrum.
readIntensity(tof_index);
632 if(tof_index > mz_maximum_index_out)
633 mz_maximum_index_out = tof_index;
634 if(tof_index < mz_minimum_index_out)
635 mz_minimum_index_out = tof_index;
645 new_trace.push_back(data_point_cumul);
658 catch(std::exception &error)
661 "Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
662 .arg(mobility_scan_begin, mobility_scan_end)
674 std::size_t scan_index_begin,
675 std::size_t scan_index_end)
const
685 std::size_t mobility_scan_max = scan_index_end + 1;
688 for(std::size_t i = scan_index_begin; i < mobility_scan_max; i++)
698 catch(std::exception &error)
700 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
702 .arg(scan_index_begin)
713 std::size_t scan_index_begin,
714 std::size_t scan_index_end,
715 quint32 tof_index_begin,
716 quint32 tof_index_end)
const
728 std::size_t mobility_scan_max = scan_index_end + 1;
731 for(std::size_t i = scan_index_begin; i < mobility_scan_max; i++)
734 cumulateScan2(i, rawSpectrum, tof_index_begin, tof_index_end);
740 catch(std::exception &error)
742 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
744 .arg(scan_index_begin)
763 std::make_shared<pappso::MassSpectrum>();
767 return mass_spectrum_sptr;
779 qint32 previous = -1;
783 for(std::size_t i = 0; i < size; i++)
786 (*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) +
789 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4));
794 previous = tof_index;
799 mass_spectrum_sptr.get()->push_back(data_point);
804 return mass_spectrum_sptr;
810 std::size_t mz_index_merge_window,
811 double mz_range_begin,
813 quint32 &mz_minimum_index_out,
814 quint32 &mz_maximum_index_out)
const
822 quint32 mz_index_begin = 0;
823 quint32 mz_index_end = std::numeric_limits<quint32>::max();
842 if(mz_index_merge_window > 0)
847 mz_index_merge_window, raw_spectrum);
850 if(raw_spectrum.size() > 0)
852 mz_minimum_index_out = raw_spectrum.front().tof_index;
853 mz_maximum_index_out = raw_spectrum.back().tof_index;
855 for(
auto &&element : raw_spectrum)
859 static_cast<double>(element.intensity_index)));
871 std::vector<XicCoordTims *>::iterator &itXicListbegin,
872 std::vector<XicCoordTims *>::iterator &itXicListend,
877 std::vector<TimsFrame::XicComputeStructure> tmp_xic_list;
879 for(
auto it = itXicListbegin; it != itXicListend; it++)
893 if(tmp_xic_list.size() == 0)
901 std::vector<std::size_t> unique_scan_num_list;
902 for(
auto &&struct_xic : tmp_xic_list)
904 for(std::size_t scan = struct_xic.mobilityIndexBegin;
905 (scan <= struct_xic.mobilityIndexEnd) && (scan <
m_scanCount);
908 unique_scan_num_list.push_back(scan);
911 std::sort(unique_scan_num_list.begin(), unique_scan_num_list.end());
912 auto it_scan_num_end =
913 std::unique(unique_scan_num_list.begin(), unique_scan_num_list.end());
914 auto it_scan_num = unique_scan_num_list.begin();
916 while(it_scan_num != it_scan_num_end)
920 for(
auto &&tmp_xic_struct : tmp_xic_list)
922 if(((*it_scan_num) >= tmp_xic_struct.mobilityIndexBegin) &&
923 ((*it_scan_num) <= tmp_xic_struct.mobilityIndexEnd))
927 tmp_xic_struct.tmpIntensity +=
928 ms_spectrum.get()->maxY(tmp_xic_struct.mzIndexLowerBound,
929 tmp_xic_struct.mzIndexUpperBound);
937 tmp_xic_struct.tmpIntensity +=
938 ms_spectrum.get()->sumY(tmp_xic_struct.mzIndexLowerBound,
939 tmp_xic_struct.mzIndexUpperBound);
949 for(
auto &&tmp_xic_struct : tmp_xic_list)
951 if(tmp_xic_struct.tmpIntensity != 0)
955 tmp_xic_struct.xic_ptr->push_back(
981 qint32 previous = -1;
982 std::vector<quint32> index_list;
983 for(std::size_t i = 0; i < size; i++)
986 (*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) +
988 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4)));
993 previous = data_point.
x;
994 trace_sptr.get()->push_back(data_point);
1001std::vector<TimsFrame::TofIndexIntensityPair>
1003 quint32 accepted_tof_index_range_begin,
1004 quint32 accepted_tof_index_range_end)
const
1008 std::vector<TimsFrame::TofIndexIntensityPair> raw_value_pairs;
1012 return raw_value_pairs;
1020 qint32 previous = -1;
1021 std::vector<quint32> index_list;
1022 for(std::size_t i = 0; i < size; i++)
1027 {(*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) +
1029 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) +
1033 if(raw_value_pair.tof_index < accepted_tof_index_range_begin)
1038 if(raw_value_pair.tof_index > accepted_tof_index_range_end)
1044 raw_value_pairs.push_back(raw_value_pair);
1047 return raw_value_pairs;
virtual double getMzFromTofIndex(quint32 tof_index)=0
get m/z from time of flight raw index
pappso_double lower() const
pappso_double upper() const
std::size_t accumulateIntensity(quint32 tofIndex, std::size_t intensity)
accumulates intesity for the given tof index
const std::vector< quint32 > & getTofIndexList() const
std::size_t readIntensity(quint32)
reads intensity for a tof_index
void downsizeMzRawMap(std::size_t mzindex_merge_window)
downsize mz resolution to lower the number of real mz computations
static TimsDataFastMap & getTimsDataFastMapInstance()
double m_rtInSeconds
retention time
MzCalibrationInterfaceSPtr msp_mzCalibration
virtual std::vector< TofIndexIntensityPair > & downgradeResolutionOfTofIndexIntensityPairList(std::size_t tof_index_merge_window, std::vector< TofIndexIntensityPair > &spectrum) const
Downgrade the TOF index resolution to lower the number of real m/z computations.
double m_acqDurationInMilliseconds
acquisition duration in milliseconds
TimsFrameBase(std::size_t frameId, quint32 scanCount)
constructor for binary independant tims frame
virtual const MzCalibrationInterfaceSPtr & getMzCalibrationInterfaceSPtr() const final
get the MzCalibration model to compute mz and TOF for this frame
quint32 m_scanCount
total number of scans contained in this frame
std::size_t m_frameId
Tims frame database id (the SQL identifier of this frame)
bool checkScanNum(std::size_t scanNum) const
check that this scan number exists
virtual Trace combineScansToTraceWithDowngradedMzResolution(std::size_t mzindex_merge_window, std::size_t scanNumBegin, std::size_t scanNumEnd, quint32 &mz_minimum_index, quint32 &mz_maximum_index) const override
cumulate spectrum given a scan number range need the binary file The intensities are normalized with ...
virtual quint64 cumulateScanRangeIntensities(std::size_t scanNumBegin, std::size_t scanNumEnd) const override
...
virtual quint64 cumulateScanIntensities(std::size_t scanNum) const override
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 index need the binary file
virtual Trace combineScansToTraceWithDowngradedMzResolution2(std::size_t mz_index_merge_window, double mz_range_begin, double mz_range_end, std::size_t mobility_scan_begin, std::size_t mobility_scan_end, quint32 &mz_minimum_index_out, quint32 &mz_maximum_index_out) const override
cumulate spectrum given a scan number range need the binary file The intensities are normalized with ...
virtual Trace cumulateScansToTrace(std::size_t scanIndexBegin, std::size_t scanIndexEnd) const override
cumulate scan list into a trace
virtual std::vector< quint32 > getScanIntensityList(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
virtual std::vector< TofIndexIntensityPair > getRawValuePairList(std::size_t scanNum, quint32 accepted_tof_index_range_begin, quint32 accepted_tof_index_range_end) const
get the raw index tof_index and intensities (normalized)
virtual Trace getMobilityScan(std::size_t scanNum, std::size_t mz_index_merge_window, double mz_range_begin, double mz_range_end, quint32 &mz_minimum_index_out, quint32 &mz_maximum_index_out) const override
get a single mobility scan m/z + intensities
virtual void cumulateScan(std::size_t scanNum, TimsDataFastMap &accumulate_into) const
cumulate a scan into a map
virtual void cumulateScan2(std::size_t scanNum, TimsDataFastMap &accumulate_into, quint32 accepted_tof_index_range_begin, quint32 accepted_tof_index_range_end) const
virtual std::size_t getScanPeakCount(std::size_t scanIndex) const override
get the number of peaks in this spectrum need the binary file
std::size_t getScanOffset(std::size_t scanNum) const
get offset for this spectrum in the binary file
virtual std::vector< quint32 > getScanTofIndexList(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
void extractTimsXicListInRtRange(std::vector< XicCoordTims * >::iterator &itXicListbegin, std::vector< XicCoordTims * >::iterator &itXicListend, Enums::XicExtractMethod method) const
void combineScansInTofIndexIntensityMap(TimsDataFastMap &rawSpectrum, std::size_t scan_index_begin, std::size_t scan_index_end) const override
cumulate scan list into a trace into a raw spectrum map
virtual pappso::TraceSPtr getRawTraceSPtr(std::size_t scanNum) const
get the raw index tof_index and intensities (normalized)
A simple container of DataPoint instances.
void sortX(Enums::SortOrder sort_order=Enums::SortOrder::ascending)
@ max
maximum of intensities
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< Trace > TraceSPtr
std::shared_ptr< MassSpectrum > MassSpectrumSPtr
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