29 #include "../../../pappsomspp/pappsoexception.h"
30 #include "../../../pappsomspp/exception/exceptionoutofrange.h"
45 : TimsFrameBase(timsId, scanNum)
52 m_timsDataFrame.resize(len);
54 if(p_bytes !=
nullptr)
56 unshufflePacket(p_bytes);
64 QObject::tr(
"TimsFrame::TimsFrame(%1,%2,nullptr,%3) FAILED")
89 QObject::tr(
"TimsFrame::unshufflePacket error: len%4 != 0"));
92 quint64 nb_uint4 = len / 4;
95 quint64 src_offset = 0;
97 for(quint64 j = 0; j < 4; j++)
99 for(quint64 i = 0; i < nb_uint4; i++)
101 dest[(i * 4) + j] = src[src_offset];
124 std::size_t cumul = 0;
129 return (nb_uint4 - cumul) / 2;
135 return (*(quint32 *)(
m_timsDataFrame.constData() + ((scanNum + 1) * 4))) / 2;
141 std::size_t offset = 0;
142 for(std::size_t i = 0; i < (scanNum + 1); i++)
155 std::vector<quint32> scan_tof;
163 qint32 previous = -1;
164 for(std::size_t i = 0; i < scan_tof.size(); i++)
169 previous = scan_tof[i];
180 std::vector<quint32> scan_intensities;
183 return scan_intensities;
189 for(std::size_t i = 0; i < scan_intensities.size(); i++)
192 (offset * 4) + (i * 8) + 4));
195 return scan_intensities;
201 std::map<quint32, quint32> &accumulate_into)
const
214 qint32 previous = -1;
215 for(std::size_t i = 0; i < size; i++)
218 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
225 auto ret = accumulate_into.insert(std::pair<quint32, quint32>(
x,
y));
227 if(ret.second ==
false)
230 ret.first->second +=
y;
239 std::size_t scanNumEnd)
const
247 std::map<quint32, quint32> raw_spectrum;
250 std::size_t imax = scanNumEnd + 1;
252 for(std::size_t i = scanNumBegin; i < imax; i++)
262 for(std::pair<quint32, quint32> pair_tof_intensity : raw_spectrum)
269 new_trace.push_back(data_point_cumul);
276 catch(std::exception &error)
278 qDebug() << __FILE__ <<
"@" << __LINE__ << __FUNCTION__ <<
"()"
280 "Failure in TimsFrame::cumulateScanToTrace %1 to %2 :\n %3")
281 .arg(scanNumBegin, scanNumEnd)
289 std::map<quint32, quint32> &accumulated_scans)
const
294 std::vector<quint32> keys;
295 transform(begin(accumulated_scans),
296 end(accumulated_scans),
298 [](std::map<quint32, quint32>::value_type
const &pair) {
301 std::sort(keys.begin(), keys.end());
303 data_point_cumul.
x = 0;
304 quint32 previous = 0;
305 quint32 hole_width = 2;
310 double previous_intensity = 0;
323 for(quint32 key : keys)
325 if((key - previous) > hole_width)
330 if(data_point_cumul.x != 0)
332 data_point_cumul.x = data_point_cumul.x / data_point_cumul.y;
339 local_trace.push_back(data_point_cumul);
342 data_point_cumul.x = 0;
343 data_point_cumul.y = 0;
344 previous_intensity = 0;
347 double intensity = accumulated_scans[key];
349 if(previous_intensity < intensity)
354 data_point_cumul.x = data_point_cumul.x / data_point_cumul.y;
361 local_trace.push_back(data_point_cumul);
364 data_point_cumul.x = 0;
365 data_point_cumul.y = 0;
366 previous_intensity = 0;
382 data_point_cumul.x += ((double)key * intensity);
383 data_point_cumul.y += intensity;
385 previous_intensity = intensity;
389 if(data_point_cumul.x != 0)
391 data_point_cumul.x = data_point_cumul.x / data_point_cumul.y;
397 local_trace.push_back(data_point_cumul);
416 qDebug() <<
" scanNum=" << scanNum;
423 std::make_shared<pappso::MassSpectrum>();
427 return mass_spectrum_sptr;
434 qint32 previous = -1;
435 std::vector<quint32> index_list;
436 for(std::size_t i = 0; i < size; i++)
439 (*(quint32 *)((
m_timsDataFrame.constData() + (offset * 4) + (i * 8))) +
447 previous = data_point.x;
453 mass_spectrum_sptr.get()->push_back(data_point);
456 return mass_spectrum_sptr;
462 std::vector<TimsXicStructure>::iterator &itXicListbegin,
463 std::vector<TimsXicStructure>::iterator &itXicListend,
466 std::vector<TimsXicStructure> tmp_xic_list(itXicListbegin, itXicListend);
468 if(tmp_xic_list.size() == 0)
476 std::vector<std::size_t> unique_scan_num_list;
477 for(
auto &&struct_xic : tmp_xic_list)
479 for(std::size_t scan = struct_xic.mobilityIndexBegin;
480 scan <= struct_xic.mobilityIndexEnd;
483 unique_scan_num_list.push_back(scan);
486 std::sort(unique_scan_num_list.begin(), unique_scan_num_list.end());
487 auto it_scan_num_end =
488 std::unique(unique_scan_num_list.begin(), unique_scan_num_list.end());
489 auto it_scan_num = unique_scan_num_list.begin();
491 while(it_scan_num != it_scan_num_end)
494 for(
auto &&tmp_xic_struct : tmp_xic_list)
496 if(((*it_scan_num) >= tmp_xic_struct.mobilityIndexBegin) &&
497 ((*it_scan_num) <= tmp_xic_struct.mobilityIndexEnd))
501 tmp_xic_struct.tmpIntensity +=
502 ms_spectrum.get()->maxY(tmp_xic_struct.mzRange.lower(),
503 tmp_xic_struct.mzRange.upper());
508 tmp_xic_struct.tmpIntensity +=
509 ms_spectrum.get()->sumY(tmp_xic_struct.mzRange.lower(),
510 tmp_xic_struct.mzRange.upper());
517 for(
auto &&tmp_xic_struct : tmp_xic_list)
519 if(tmp_xic_struct.tmpIntensity != 0)
521 tmp_xic_struct.xicSptr.get()->push_back(
522 {
m_time, tmp_xic_struct.tmpIntensity});