29 #include "../../../pappsomspp/pappsoexception.h"
30 #include "../../../pappsomspp/exception/exceptionoutofrange.h"
67 if(p_bytes !=
nullptr)
77 QObject::tr(
"TimsFrame::TimsFrame(%1,%2,nullptr,%3) FAILED")
102 QObject::tr(
"TimsFrame::unshufflePacket error: len%4 != 0"));
105 quint64 nb_uint4 = len / 4;
108 quint64 src_offset = 0;
110 for(quint64 j = 0; j < 4; j++)
112 for(quint64 i = 0; i < nb_uint4; i++)
114 dest[(i * 4) + j] = src[src_offset];
137 std::size_t cumul = 0;
142 return (nb_uint4 - cumul) / 2;
148 return (*(quint32 *)(
m_timsDataFrame.constData() + ((scanNum + 1) * 4))) / 2;
154 std::size_t offset = 0;
155 for(std::size_t i = 0; i < (scanNum + 1); i++)
168 std::vector<quint32> scan_tof;
176 qint32 previous = -1;
177 for(std::size_t i = 0; i < scan_tof.size(); i++)
182 previous = scan_tof[i];
193 std::vector<quint32> scan_intensities;
196 return scan_intensities;
202 for(std::size_t i = 0; i < scan_intensities.size(); i++)
205 (offset * 4) + (i * 8) + 4));
208 return scan_intensities;
214 std::map<quint32, quint32> &accumulate_into)
const
227 qint32 previous = -1;
228 for(std::size_t i = 0; i < size; i++)
231 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
238 auto ret = accumulate_into.insert(std::pair<quint32, quint32>(
x, y));
240 if(ret.second ==
false)
243 ret.first->second += y;
252 std::size_t scanNumEnd)
const
262 std::map<quint32, quint32> raw_spectrum;
265 std::size_t imax = scanNumEnd + 1;
267 for(std::size_t i = scanNumBegin; i < imax; i++)
277 for(std::pair<quint32, quint32> pair_tof_intensity : raw_spectrum)
284 new_trace.push_back(data_point_cumul);
290 catch(std::exception &error)
292 qDebug() << __FILE__ <<
"@" << __LINE__ << __FUNCTION__ <<
"()"
294 "Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
295 .arg(scanNumBegin, scanNumEnd)
304 std::map<quint32, quint32> &accumulated_scans)
const
309 std::vector<quint32> keys;
310 transform(begin(accumulated_scans),
311 end(accumulated_scans),
313 [](std::map<quint32, quint32>::value_type
const &pair) {
316 std::sort(keys.begin(), keys.end());
318 data_point_cumul.
x = 0;
319 quint32 previous = 0;
320 quint32 hole_width = 2;
325 double previous_intensity = 0;
338 for(quint32 key : keys)
340 if((key - previous) > hole_width)
345 if(data_point_cumul.
x != 0)
347 data_point_cumul.
x = data_point_cumul.
x / data_point_cumul.
y;
354 local_trace.push_back(data_point_cumul);
357 data_point_cumul.
x = 0;
358 data_point_cumul.
y = 0;
359 previous_intensity = 0;
362 double intensity = accumulated_scans[key];
364 if(previous_intensity < intensity)
369 data_point_cumul.
x = data_point_cumul.
x / data_point_cumul.
y;
376 local_trace.push_back(data_point_cumul);
379 data_point_cumul.
x = 0;
380 data_point_cumul.
y = 0;
381 previous_intensity = 0;
397 data_point_cumul.
x += ((double)key * intensity);
398 data_point_cumul.
y += intensity;
400 previous_intensity = intensity;
404 if(data_point_cumul.
x != 0)
406 data_point_cumul.
x = data_point_cumul.
x / data_point_cumul.
y;
412 local_trace.push_back(data_point_cumul);
431 qDebug() <<
" scanNum=" << scanNum;
438 std::make_shared<pappso::MassSpectrum>();
442 return mass_spectrum_sptr;
449 qint32 previous = -1;
450 std::vector<quint32> index_list;
451 for(std::size_t i = 0; i < size; i++)
454 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
462 previous = data_point.
x;
468 mass_spectrum_sptr.get()->push_back(data_point);
471 return mass_spectrum_sptr;
477 std::vector<TimsXicStructure>::iterator &itXicListbegin,
478 std::vector<TimsXicStructure>::iterator &itXicListend,
481 std::vector<TimsFrame::XicComputeStructure> tmp_xic_list;
483 for(
auto it = itXicListbegin; it != itXicListend; it++)
487 if(tmp_xic_list.size() == 0)
495 std::vector<std::size_t> unique_scan_num_list;
496 for(
auto &&struct_xic : tmp_xic_list)
498 for(std::size_t scan = struct_xic.mobilityIndexBegin;
499 scan <= struct_xic.mobilityIndexEnd;
502 unique_scan_num_list.push_back(scan);
505 std::sort(unique_scan_num_list.begin(), unique_scan_num_list.end());
506 auto it_scan_num_end =
507 std::unique(unique_scan_num_list.begin(), unique_scan_num_list.end());
508 auto it_scan_num = unique_scan_num_list.begin();
510 while(it_scan_num != it_scan_num_end)
513 for(
auto &&tmp_xic_struct : tmp_xic_list)
515 if(((*it_scan_num) >= tmp_xic_struct.mobilityIndexBegin) &&
516 ((*it_scan_num) <= tmp_xic_struct.mobilityIndexEnd))
520 tmp_xic_struct.tmpIntensity +=
521 ms_spectrum.get()->maxY(tmp_xic_struct.mzIndexLowerBound,
522 tmp_xic_struct.mzIndexUpperBound);
527 tmp_xic_struct.tmpIntensity +=
528 ms_spectrum.get()->sumY(tmp_xic_struct.mzIndexLowerBound,
529 tmp_xic_struct.mzIndexUpperBound);
536 for(
auto &&tmp_xic_struct : tmp_xic_list)
538 if(tmp_xic_struct.tmpIntensity != 0)
540 tmp_xic_struct.xic_ptr->push_back(
541 {
m_time, tmp_xic_struct.tmpIntensity});
564 qint32 previous = -1;
565 std::vector<quint32> index_list;
566 for(std::size_t i = 0; i < size; i++)
569 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
577 previous = data_point.
x;