67 if(p_bytes !=
nullptr)
103 quint64 nb_uint4 = len / 4;
106 quint64 src_offset = 0;
108 for(quint64 j = 0; j < 4; j++)
110 for(quint64 i = 0; i < nb_uint4; i++)
112 dest[(i * 4) + j] = src[src_offset];
135 std::size_t cumul = 0;
138 cumul += (*(quint32 *)(
m_binaryData.constData() + (i * 4)));
140 return (nb_uint4 - cumul) / 2;
146 return (*(quint32 *)(
m_binaryData.constData() + ((scanNum + 1) * 4))) / 2;
152 std::size_t offset = 0;
153 for(std::size_t i = 0; i < (scanNum + 1); i++)
155 offset += (*(quint32 *)(
m_binaryData.constData() + (i * 4)));
166 std::vector<quint32> scan_tof;
174 qint32 previous = -1;
175 for(std::size_t i = 0; i < scan_tof.size(); i++)
177 scan_tof[i] = (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8))) + previous;
178 previous = scan_tof[i];
189 std::vector<quint32> scan_intensities;
192 return scan_intensities;
198 for(std::size_t i = 0; i < scan_intensities.size(); i++)
200 scan_intensities[i] = (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4));
203 return scan_intensities;
212 quint64 summed_intensities = 0;
215 return summed_intensities;
222 qint32 previous = -1;
224 for(std::size_t i = 0; i < size; i++)
226 quint32
x = (*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) + previous);
228 quint32
y = (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4));
232 summed_intensities +=
y;
240 return summed_intensities;
253 std::size_t mobility_scan_end)
const
255 quint64 summed_intensities = 0;
261 return summed_intensities;
265 std::size_t mobility_scan_max = mobility_scan_end + 1;
267 for(std::size_t i = mobility_scan_begin; i < mobility_scan_max; i++)
274 catch(std::exception &error)
276 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
278 .arg(mobility_scan_begin)
279 .arg(mobility_scan_end)
285 return summed_intensities;
304 qint32 previous = -1;
305 for(std::size_t i = 0; i < scan_size; i++)
308 (*(quint32 *)((
m_binaryData.constData() + (scan_offset * 4) + (i * 8))) + previous);
309 quint32
y = (*(quint32 *)(
m_binaryData.constData() + (scan_offset * 4) + (i * 8) + 4));
323 quint32 accepted_tof_index_range_begin,
324 quint32 accepted_tof_index_range_end)
const
335 qint32 previous = -1;
337 for(std::size_t i = 0; i < scan_size; i++)
340 (*(quint32 *)((
m_binaryData.constData() + (scan_offset * 4) + (i * 8))) + previous);
344 if(
x < accepted_tof_index_range_begin)
350 if(
x > accepted_tof_index_range_end)
358 quint32
y = (*(quint32 *)(
m_binaryData.constData() + (scan_offset * 4) + (i * 8) + 4));
369 std::size_t mobility_scan_end)
const
380 raw_spectrum.
clear();
383 std::size_t mobility_scan_max = mobility_scan_end + 1;
385 for(std::size_t i = mobility_scan_begin; i < mobility_scan_max; i++)
408 new_trace.push_back(data_point_cumul);
415 catch(std::exception &error)
417 qDebug() << QString(
"Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
418 .arg(mobility_scan_begin, mobility_scan_end)
426 std::size_t mobility_scan_begin,
427 std::size_t mobility_scan_end,
428 quint32 &mz_minimum_index_out,
429 quint32 &mz_maximum_index_out)
const
439 qDebug() <<
"The frame is empty, returning empty trace.";
447 raw_spectrum.
clear();
450 std::size_t mobility_scan_max = mobility_scan_end + 1;
452 for(std::size_t i = mobility_scan_begin; i < mobility_scan_max; i++)
471 if(mz_index_merge_window > 0)
478 mz_minimum_index_out = std::numeric_limits<quint32>::max();
479 mz_maximum_index_out = 0;
485 if(tof_index > mz_maximum_index_out)
486 mz_maximum_index_out = tof_index;
487 if(tof_index < mz_minimum_index_out)
488 mz_minimum_index_out = tof_index;
498 new_trace.push_back(data_point_cumul);
511 catch(std::exception &error)
513 qDebug() << QString(
"Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
514 .arg(mobility_scan_begin, mobility_scan_end)
526 double mz_range_begin,
528 std::size_t mobility_scan_begin,
529 std::size_t mobility_scan_end,
530 quint32 &mz_minimum_index_out,
531 quint32 &mz_maximum_index_out)
const
542 qDebug() <<
"The frame is empty, returning empty trace.";
550 raw_spectrum.
clear();
553 std::size_t mobility_scan_max = mobility_scan_end + 1;
555 quint32 tof_index_for_mz_range_begin =
557 quint32 tof_index_for_mz_range_end =
565 for(std::size_t iter = mobility_scan_begin; iter < mobility_scan_max; iter++)
570 iter, raw_spectrum, tof_index_for_mz_range_begin, tof_index_for_mz_range_end);
585 if(mz_index_merge_window > 0)
592 mz_minimum_index_out = std::numeric_limits<quint32>::max();
593 mz_maximum_index_out = 0;
598 std::size_t intensity = raw_spectrum.
readIntensity(tof_index);
599 if(tof_index > mz_maximum_index_out)
600 mz_maximum_index_out = tof_index;
601 if(tof_index < mz_minimum_index_out)
602 mz_minimum_index_out = tof_index;
611 new_trace.push_back(data_point_cumul);
624 catch(std::exception &error)
626 qDebug() << QString(
"Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
627 .arg(mobility_scan_begin, mobility_scan_end)
639 std::size_t scan_index_begin,
640 std::size_t scan_index_end)
const
650 std::size_t mobility_scan_max = scan_index_end + 1;
653 for(std::size_t i = scan_index_begin; i < mobility_scan_max; i++)
663 catch(std::exception &error)
665 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
667 .arg(scan_index_begin)
678 std::size_t scan_index_begin,
679 std::size_t scan_index_end,
680 quint32 tof_index_begin,
681 quint32 tof_index_end)
const
693 std::size_t mobility_scan_max = scan_index_end + 1;
696 for(std::size_t i = scan_index_begin; i < mobility_scan_max; i++)
699 cumulateScan2(i, rawSpectrum, tof_index_begin, tof_index_end);
705 catch(std::exception &error)
707 qDebug() << QString(
"Failure in %1 %2 to %3 :\n %4")
709 .arg(scan_index_begin)
731 return mass_spectrum_sptr;
742 qint32 previous = -1;
746 for(std::size_t i = 0; i < size; i++)
748 tof_index = (*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) + previous);
749 data_point.
y = (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4));
754 previous = tof_index;
759 mass_spectrum_sptr.get()->push_back(data_point);
764 return mass_spectrum_sptr;
770 std::size_t mz_index_merge_window,
771 double mz_range_begin,
773 quint32 &mz_minimum_index_out,
774 quint32 &mz_maximum_index_out)
const
782 quint32 mz_index_begin = 0;
783 quint32 mz_index_end = std::numeric_limits<quint32>::max();
800 if(mz_index_merge_window > 0)
808 if(raw_spectrum.size() > 0)
810 mz_minimum_index_out = raw_spectrum.front().tof_index;
811 mz_maximum_index_out = raw_spectrum.back().tof_index;
813 for(
auto &&element : raw_spectrum)
817 static_cast<double>(element.intensity_index)));
829 std::vector<XicCoordTims *>::iterator &itXicListend,
834 std::vector<TimsFrame::XicComputeStructure> tmp_xic_list;
836 for(
auto it = itXicListbegin; it != itXicListend; it++)
850 if(tmp_xic_list.size() == 0)
858 std::vector<std::size_t> unique_scan_num_list;
859 for(
auto &&struct_xic : tmp_xic_list)
861 for(std::size_t scan = struct_xic.mobilityIndexBegin;
862 (scan <= struct_xic.mobilityIndexEnd) && (scan <
m_scanCount);
865 unique_scan_num_list.push_back(scan);
868 std::sort(unique_scan_num_list.begin(), unique_scan_num_list.end());
869 auto it_scan_num_end = std::unique(unique_scan_num_list.begin(), unique_scan_num_list.end());
870 auto it_scan_num = unique_scan_num_list.begin();
872 while(it_scan_num != it_scan_num_end)
876 for(
auto &&tmp_xic_struct : tmp_xic_list)
878 if(((*it_scan_num) >= tmp_xic_struct.mobilityIndexBegin) &&
879 ((*it_scan_num) <= tmp_xic_struct.mobilityIndexEnd))
883 tmp_xic_struct.tmpIntensity += ms_spectrum.get()->maxY(
884 tmp_xic_struct.mzIndexLowerBound, tmp_xic_struct.mzIndexUpperBound);
892 tmp_xic_struct.tmpIntensity += ms_spectrum.get()->sumY(
893 tmp_xic_struct.mzIndexLowerBound, tmp_xic_struct.mzIndexUpperBound);
903 for(
auto &&tmp_xic_struct : tmp_xic_list)
905 if(tmp_xic_struct.tmpIntensity != 0)
909 tmp_xic_struct.xic_ptr->push_back({
m_rtInSeconds, tmp_xic_struct.tmpIntensity});
934 qint32 previous = -1;
935 std::vector<quint32> index_list;
936 for(std::size_t i = 0; i < size; i++)
939 (*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) + previous),
940 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4)));
945 previous = data_point.
x;
946 trace_sptr.get()->push_back(data_point);
953std::vector<TimsFrame::TofIndexIntensityPair>
955 quint32 accepted_tof_index_range_begin,
956 quint32 accepted_tof_index_range_end)
const
960 std::vector<TimsFrame::TofIndexIntensityPair> raw_value_pairs;
964 return raw_value_pairs;
972 qint32 previous = -1;
973 std::vector<quint32> index_list;
974 for(std::size_t i = 0; i < size; i++)
979 {(*(quint32 *)((
m_binaryData.constData() + (offset * 4) + (i * 8))) + previous),
980 (*(quint32 *)(
m_binaryData.constData() + (offset * 4) + (i * 8) + 4))});
983 if(raw_value_pair.tof_index < accepted_tof_index_range_begin)
988 if(raw_value_pair.tof_index > accepted_tof_index_range_end)
994 raw_value_pairs.push_back(raw_value_pair);
997 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