28#include "../../exception/exceptionnotfound.h"
29#include "../../exception/exceptioninterrupted.h"
31#include "../../processing/combiners/tracepluscombiner.h"
32#include "../../processing/filters/filtertriangle.h"
33#include "../../processing/filters/filtersuitestring.h"
34#include <QtConcurrent>
40 : mp_timsDataOrigin(tims_data_origin)
46 if(!query.exec(
"SELECT COUNT( DISTINCT Id) FROM Precursors;"))
50 QObject::tr(
"ERROR : no Precursors in SqlLite database"));
63 "chargeDeconvolution|0.02dalton mzExclusion|0.01dalton");
66 std::shared_ptr<FilterTriangle> ms1filter =
67 std::make_shared<FilterTriangle>();
68 ms1filter.get()->setTriangleSlope(50, 0.01);
76std::vector<TimsDdaPrecursors::SpectrumDescr>
79 std::vector<TimsDdaPrecursors::SpectrumDescr> spectrum_descr_list;
90 qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
91 "PasefFrameMsMsInfo.ScanNumBegin, "
92 "PasefFrameMsMsInfo.ScanNumEnd, "
93 "PasefFrameMsMsInfo.IsolationMz, "
94 "PasefFrameMsMsInfo.IsolationWidth, "
95 "PasefFrameMsMsInfo.CollisionEnergy, "
96 "PasefFrameMsMsInfo.Precursor, "
98 "Precursors.LargestPeakMz, "
99 "Precursors.AverageMz, "
100 "Precursors.MonoisotopicMz, "
101 "Precursors.Charge, "
102 "Precursors.ScanNumber, "
103 "Precursors.Intensity, "
105 "FROM PasefFrameMsMsInfo "
106 "INNER JOIN Precursors ON "
109 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
110 "WHERE PasefFrameMsMsInfo.Frame=%1;")
112 if(q.lastError().isValid())
116 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
117 "command %2:\n%3\n%4\n%5")
121 .arg(qdb.lastError().databaseText())
122 .arg(qdb.lastError().driverText())
123 .arg(qdb.lastError().nativeErrorCode()));
140 q.value(13).toDouble());
149 spectrum_descr.
isolationMz = q.value(3).toDouble();
154 spectrum_descr_list.push_back(spectrum_descr);
162 catch(std::exception &error)
164 qDebug() << QString(
"Failure %1 ").arg(error.
what());
166 return spectrum_descr_list;
175 raw_spectrum.
clear();
181 qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
182 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
183 "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
186 if(q.lastError().isValid())
190 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
191 "command %2:\n%3\n%4\n%5")
195 .arg(qdb.lastError().databaseText())
196 .arg(qdb.lastError().driverText())
197 .arg(qdb.lastError().nativeErrorCode()));
206 "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
215 std::size_t scan_mobility_start = 0;
216 std::size_t scan_mobility_end = 0;
217 std::vector<std::size_t> tims_frame_list;
221 tims_frame_list.push_back(q.value(0).toLongLong());
225 scan_mobility_start = q.value(1).toLongLong();
226 scan_mobility_end = q.value(2).toLongLong();
236 for(std::size_t tims_id : tims_frame_list)
244 if(previous_frame.get() !=
nullptr)
246 if(previous_frame.get()->hasSameCalibrationData(
254 "ERROR in %1 %2, different calibration data "
255 "between frame id %3 and frame id %4")
258 .arg(previous_frame.get()->getId())
259 .arg(tims_frame.get()->getId()));
262 tims_frame.get()->combineScansInTofIndexIntensityMap(
263 raw_spectrum, scan_mobility_start, scan_mobility_end);
266 previous_frame = tims_frame;
268 qDebug() <<
" precursor_index=" << precursor_id
269 <<
" num_rows=" << tims_frame_list.size()
270 <<
" sql=" << q.lastQuery() <<
" "
271 << (std::size_t)QThread::currentThreadId();
276 "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
286 throw PappsoException(QObject::tr(
"ERROR in %1 (precursor_index=%2):\n%3")
289 .arg(error.
qwhat()));
291 catch(std::exception &error)
293 qDebug() << QString(
"Failure %1 ").arg(error.
what());
343 qdb.exec(QString(
"SELECT Precursors.id, "
345 "min(PasefFrameMsMsInfo.ScanNumBegin), "
346 "max(PasefFrameMsMsInfo.ScanNumEnd), "
347 "Precursors.MonoisotopicMz "
349 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
350 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
351 "INNER JOIN Frames ON "
352 "PasefFrameMsMsInfo.Frame=Frames.Id "
353 "GROUP BY Precursors.id;"));
354 if(q.lastError().isValid())
359 "ERROR in TIMS sqlite database file %1, executing SQL "
360 "command %2:\n%3\n%4\n%5")
364 .arg(qdb.lastError().databaseText())
365 .arg(qdb.lastError().driverText())
366 .arg(qdb.lastError().nativeErrorCode()));
375 QSqlRecord record = q.record();
377 (std::size_t)record.value(0).toULongLong(), record));
388 QObject::tr(
"ERROR Precursors database id %1 not found")
392 auto &q = it_map_xiccoord->second;
393 xic_coord_tims_struct.
mzRange =
394 MzRange(q.value(4).toDouble(), precision_ptr);
395 xic_coord_tims_struct.
scanNumBegin = q.value(2).toUInt();
396 xic_coord_tims_struct.
scanNumEnd = q.value(3).toUInt();
397 xic_coord_tims_struct.
rtTarget = q.value(1).toDouble();
399 xic_coord_tims_struct.
xicSptr = std::make_shared<Xic>();
405 catch(std::exception &error)
407 qDebug() << QString(
"Failure %1 ").arg(error.
what());
409 return xic_coord_tims_struct;
415 std::size_t precursor_id)
const
420 QSqlQuery q = qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
421 "PasefFrameMsMsInfo.ScanNumBegin, "
422 "PasefFrameMsMsInfo.ScanNumEnd, "
423 "PasefFrameMsMsInfo.IsolationMz, "
424 "PasefFrameMsMsInfo.IsolationWidth, "
425 "PasefFrameMsMsInfo.CollisionEnergy, "
426 "PasefFrameMsMsInfo.Precursor, "
428 "Precursors.LargestPeakMz, "
429 "Precursors.AverageMz, "
430 "Precursors.MonoisotopicMz, "
431 "Precursors.Charge, "
432 "Precursors.ScanNumber, "
433 "Precursors.Intensity, "
435 "FROM PasefFrameMsMsInfo "
436 "INNER JOIN Precursors ON "
439 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
440 "WHERE Precursors.Id=%1;")
442 if(q.lastError().isValid())
446 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
447 "command %2:\n%3\n%4\n%5")
451 .arg(qdb.lastError().databaseText())
452 .arg(qdb.lastError().driverText())
453 .arg(qdb.lastError().nativeErrorCode()));
461 qDebug() <<
" cumul tims frame:" << q.value(0).toLongLong();
471 q.value(13).toDouble());
480 spectrum_descr.
isolationMz = q.value(3).toDouble();
492 QObject::tr(
"ERROR in %1 %2 : precursor id (%3) NOT FOUND ")
497 return spectrum_descr;
502 const std::pair<std::size_t, std::size_t> &scan_coordinates)
508 qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
509 "PasefFrameMsMsInfo.ScanNumBegin, "
510 "PasefFrameMsMsInfo.ScanNumEnd, "
511 "PasefFrameMsMsInfo.IsolationMz, "
512 "PasefFrameMsMsInfo.IsolationWidth, "
513 "PasefFrameMsMsInfo.CollisionEnergy, "
514 "PasefFrameMsMsInfo.Precursor, "
516 "Precursors.LargestPeakMz, "
517 "Precursors.AverageMz, "
518 "Precursors.MonoisotopicMz, "
519 "Precursors.Charge, "
520 "Precursors.ScanNumber, "
521 "Precursors.Intensity, "
523 "FROM PasefFrameMsMsInfo "
524 "INNER JOIN Precursors ON "
525 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
527 "PasefFrameMsMsInfo.Frame=%1 and "
528 "(PasefFrameMsMsInfo.ScanNumBegin "
529 "<= %2 and PasefFrameMsMsInfo.ScanNumEnd >= %2);")
530 .arg(scan_coordinates.first)
531 .arg(scan_coordinates.second));
532 if(q.lastError().isValid())
536 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
537 "command %2:\n%3\n%4\n%5")
541 .arg(qdb.lastError().databaseText())
542 .arg(qdb.lastError().driverText())
543 .arg(qdb.lastError().nativeErrorCode()));
549 qDebug() <<
" cumul tims frame:" << q.value(0).toLongLong();
555 q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
564 spectrum_descr.
isolationMz = q.value(3).toDouble();
569 return spectrum_descr;
580 qprecursor_list.value(0).toLongLong());
586 qprecursor_list.value(11).toInt(),
587 qprecursor_list.value(13).toDouble());
589 spectrum_descr.
precursor_id = qprecursor_list.value(6).toLongLong();
596 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
597 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
599 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
607 bool want_binary_data)
611 qDebug() <<
" ms2_index=" << spectrum_descr.
ms2_index
626 QString(
"frame_id=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
641 qDebug() <<
"bindec";
654 tims_frame.get()->getOneOverK0Transformation(
659 tims_frame.get()->getOneOverK0Transformation(
665 combiner.
combine(combiner_result,
666 tims_frame.get()->cumulateScansToTrace(
670 Trace trace(combiner_result);
698 catch(std::exception &error)
700 qDebug() << QString(
"Failure %1 ").arg(error.
what());
721 bool want_binary_data)
731 spectrum_id.
setNativeId(QString(
"precursor=%1 idxms2=%2")
739 qDebug() <<
"spectrum_descr.precursor_id=" << spectrum_descr.
precursor_id
740 <<
" spectrum_descr.ms1_index=" << spectrum_descr.
ms1_index
741 <<
" spectrum_descr.ms2_index=" << spectrum_descr.
ms2_index;
752 QString(
"frame_id=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
780 raw_spectrum.
clear();
784 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id
785 <<
" tims_id=" << tims_id
786 << (std::size_t)QThread::currentThreadId();
790 qDebug() <<
"bindec";
799 qDebug() << (std::size_t)QThread::currentThreadId();
807 tims_frame.get()->getOneOverK0Transformation(
812 tims_frame.get()->getOneOverK0Transformation(
825 if(previous_frame.get() !=
nullptr)
827 if(previous_frame.get()->hasSameCalibrationData(
835 "ERROR in %1 %2, different calibration data "
836 "between frame id %3 and frame id %4")
839 .arg(previous_frame.get()->getId())
840 .arg(tims_frame.get()->getId()));
843 qDebug() << (std::size_t)QThread::currentThreadId();
845 tims_frame.get()->combineScansInTofIndexIntensityMap(
849 qDebug() << (std::size_t)QThread::currentThreadId();
851 previous_frame = tims_frame;
853 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id
855 << (std::size_t)QThread::currentThreadId();
860 "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
866 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
876 tims_frame.get()->getTraceFromTofIndexIntensityMap(raw_spectrum);
880 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id
881 <<
" " << trace.size() <<
" "
882 << (std::size_t)QThread::currentThreadId();
896 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
915 QObject::tr(
"ERROR in %1 (ms2_index=%2 precursor_index=%3):\n%4")
919 .arg(error.
qwhat()));
921 catch(std::exception &error)
923 qDebug() << QString(
"Failure %1 ").arg(error.
what());
944 unsigned int ms_level)
946 qDebug() <<
" ms_level=" << ms_level;
949 QSqlQuery qprecursor_list = qdb.exec(QString(
950 "SELECT PasefFrameMsMsInfo.Frame, "
951 "PasefFrameMsMsInfo.ScanNumBegin, "
952 "PasefFrameMsMsInfo.ScanNumEnd, "
953 "PasefFrameMsMsInfo.IsolationMz, "
954 "PasefFrameMsMsInfo.IsolationWidth, "
955 "PasefFrameMsMsInfo.CollisionEnergy, "
956 "PasefFrameMsMsInfo.Precursor, "
958 "Precursors.LargestPeakMz, "
959 "Precursors.AverageMz, "
960 "Precursors.MonoisotopicMz, "
961 "Precursors.Charge, "
962 "Precursors.ScanNumber, "
963 "Precursors.Intensity, "
965 "FROM PasefFrameMsMsInfo "
966 "INNER JOIN Precursors ON "
967 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
968 "ORDER BY PasefFrameMsMsInfo.Precursor, PasefFrameMsMsInfo.Frame ;"));
969 if(qprecursor_list.lastError().isValid())
973 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
974 "command %2:\n%3\n%4\n%5")
977 .arg(qprecursor_list.lastQuery())
978 .arg(qdb.lastError().databaseText())
979 .arg(qdb.lastError().driverText())
980 .arg(qdb.lastError().nativeErrorCode()));
984 qDebug() <<
"qprecursor_list.size()=" << qprecursor_list.size();
985 qDebug() << QObject::tr(
986 "TIMS sqlite database file %1, executing SQL "
987 "command %2:\n%3\n%4\n%5")
990 .arg(qprecursor_list.lastQuery())
991 .arg(qdb.lastError().databaseText())
992 .arg(qdb.lastError().driverText())
993 .arg(qdb.lastError().nativeErrorCode());
995 qDebug() <<
"qprecursor_list.isActive()=" << qprecursor_list.isActive();
996 qDebug() <<
"qprecursor_list.isSelect()=" << qprecursor_list.isSelect();
1008 qprecursor_list.last();
1011 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
1012 qprecursor_list.first();
1013 std::vector<TimsDdaPrecursors::SpectrumDescr> spectrum_description_list;
1021 (std::size_t)qprecursor_list.value(6).toLongLong())
1026 spectrum_description_list.push_back(spectrum_descr);
1032 qDebug() <<
" qprecursor_list.value(6).toLongLong() ="
1033 << qprecursor_list.value(6).toLongLong();
1035 (std::size_t)qprecursor_list.value(6).toLongLong();
1036 qDebug() <<
" spectrum_descr.precursor_id ="
1038 qDebug() <<
" cumul tims frame:" << qprecursor_list.value(0).toLongLong();
1040 qprecursor_list.value(0).toLongLong());
1041 qDebug() <<
" first =" << first;
1050 qprecursor_list.value(11).toInt(),
1051 qprecursor_list.value(13).toDouble());
1058 qprecursor_list.value(1).toLongLong();
1060 qprecursor_list.value(2).toLongLong();
1062 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
1063 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
1065 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
1075 while(qprecursor_list.next());
1082 spectrum_description_list.push_back(spectrum_descr);
1086 QString local_filepath =
1091 for(
SpectrumDescr &spectrum_descr : spectrum_description_list)
1094 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1096 msrun_id, mass_spectrum_list, handler, spectrum_descr, ms_level);
1098 for(
auto &qualified_spectrum : mass_spectrum_list)
1105 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1107 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1")
1108 .arg(local_filepath));
1120 std::function<std::vector<QualifiedMassSpectrum>(
1122 map_function_generate_spectrum =
1123 [itself, msrun_id, pointer_handler, ms_level](
1125 -> std::vector<QualifiedMassSpectrum> {
1126 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1134 return mass_spectrum_list;
1139 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list)>
1140 reduce_function_spectrum_list =
1141 [pointer_handler, local_filepath](
1143 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list) {
1144 for(
auto &qualified_spectrum : qualified_spectrum_list)
1151 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1153 QObject::tr(
"reading TimsTOF job on %1 cancelled by the user")
1154 .arg(local_filepath));
1160 QFuture<std::size_t>
res;
1161 res = QtConcurrent::mappedReduced<std::size_t>(
1162 spectrum_description_list.begin(),
1163 spectrum_description_list.end(),
1164 map_function_generate_spectrum,
1165 reduce_function_spectrum_list,
1166 QtConcurrent::OrderedReduce);
1167 res.waitForFinished();
1182 std::vector<QualifiedMassSpectrum> &qualified_mass_spectrum_list,
1185 unsigned int ms_level)
1188 qDebug() <<
" ms_level=" << ms_level;
1191 if((ms_level == 0) || (ms_level == 1))
1196 qualified_mass_spectrum_list.back(),
1200 if((ms_level == 0) || (ms_level == 2))
1205 qualified_mass_spectrum_list.back(),
1216 unsigned int ms_level)
1230 QSqlQuery qprecursor_list = qdb.exec(QString(
1232 "PasefFrameMsMsInfo.Frame, "
1233 "PasefFrameMsMsInfo.ScanNumBegin, "
1234 "PasefFrameMsMsInfo.ScanNumEnd, "
1235 "PasefFrameMsMsInfo.IsolationMz, "
1236 "PasefFrameMsMsInfo.IsolationWidth, "
1237 "PasefFrameMsMsInfo.CollisionEnergy, "
1238 "PasefFrameMsMsInfo.Precursor, "
1240 "Precursors.LargestPeakMz, "
1241 "Precursors.AverageMz, "
1242 "Precursors.MonoisotopicMz, "
1243 "Precursors.Charge, "
1244 "Precursors.ScanNumber, "
1245 "Precursors.Intensity, "
1246 "Precursors.Parent "
1247 "FROM PasefFrameMsMsInfo "
1248 "INNER JOIN Precursors ON "
1249 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
1250 "ORDER BY PasefFrameMsMsInfo.Frame, PasefFrameMsMsInfo.ScanNumBegin ;"));
1251 if(qprecursor_list.lastError().isValid())
1254 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
1255 "command %2:\n%3\n%4\n%5")
1258 .arg(qprecursor_list.lastQuery())
1259 .arg(qdb.lastError().databaseText())
1260 .arg(qdb.lastError().driverText())
1261 .arg(qdb.lastError().nativeErrorCode()));
1267 qprecursor_list.last();
1270 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
1271 qprecursor_list.first();
1284 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1286 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1")
1292 current_frame.m_frameId);
1293 unsigned int tims_ms_level = tims_frame.get()->getMsLevel();
1295 if((ms_level != 0) && (ms_level != tims_ms_level))
1297 i += current_frame.m_scanCount;
1302 qDebug() <<
"want_binary_data=" << want_binary_data;
1303 if(want_binary_data)
1305 qDebug() <<
"bindec";
1307 current_frame.m_frameId);
1310 bool possible_precursor =
false;
1311 if(tims_ms_level == 2)
1314 while(qprecursor_list.value(0).toULongLong() <
1315 current_frame.m_frameId)
1317 qprecursor_list.next();
1319 if(qprecursor_list.value(0).toULongLong() ==
1320 current_frame.m_frameId)
1322 possible_precursor =
true;
1329 for(std::size_t scan_num = 0; scan_num < current_frame.m_scanCount;
1332 bool has_a_precursor =
false;
1333 if(possible_precursor)
1338 while(qprecursor_list.value(0).toULongLong() <
1339 current_frame.m_frameId)
1341 qprecursor_list.next();
1343 if(qprecursor_list.value(0).toULongLong() !=
1344 current_frame.m_frameId)
1346 possible_precursor =
false;
1353 if(possible_precursor &&
1357 has_a_precursor =
true;
1370 QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1371 .arg(current_frame.m_frameId)
1377 mass_spectrum.
setMsLevel(tims_frame.get()->getMsLevel());
1378 mass_spectrum.
setRtInSeconds(tims_frame.get()->getRtInSeconds());
1381 tims_frame.get()->getDriftTimeInMilliseconds(scan_num));
1385 tims_frame.get()->getOneOverK0Transformation(scan_num));
1388 if(want_binary_data)
1393 tims_frame.get()->getMassSpectrumSPtr(scan_num));
1399 "ERROR in %1 (scan_num=%2 spectrum_index=%3):\n%4")
1403 .arg(error.
qwhat()));
1405 if(mass_spectrum.
size() > 0)
1425 std::size_t prec_spectrum_index =
1430 prec_spectrum_index);
1433 "frame_id=%1 scan_index=%2 global_scan_index=%3")
1436 .arg(prec_spectrum_index));
1462std::vector<std::size_t>
1469 std::vector<std::size_t> precursor_ids;
1470 std::vector<std::vector<double>> ids;
1473 QSqlQuery q = qdb.exec(
1474 QString(
"SELECT Frames.Time, Precursors.MonoisotopicMz, Precursors.Charge, "
1475 "Precursors.Id, Frames.Id, PasefFrameMsMsInfo.ScanNumBegin, "
1476 "PasefFrameMsMsInfo.scanNumEnd "
1478 "INNER JOIN PasefFrameMsMsInfo ON Frames.Id = "
1479 "PasefFrameMsMsInfo.Frame "
1480 "INNER JOIN Precursors ON "
1481 "PasefFrameMsMsInfo.Precursor= Precursors.Id "
1482 "WHERE Precursors.Charge == %1 "
1483 "AND Precursors.MonoisotopicMz > %2 -0.01 "
1484 "AND Precursors.MonoisotopicMz < %2 +0.01 "
1485 "AND Frames.Time >= %3 -1 "
1486 "AND Frames.Time < %3 +1; ")
1490 if(q.lastError().isValid())
1494 QObject::tr(
"ERROR in TIMS sqlite database file %1, database name %2, "
1496 "command %3:\n%4\n%5\n%6")
1499 .arg(qdb.databaseName())
1501 .arg(qdb.lastError().databaseText())
1502 .arg(qdb.lastError().driverText())
1503 .arg(qdb.lastError().nativeErrorCode()));
1510 std::vector<double> sql_values;
1511 sql_values.push_back(q.value(4).toDouble());
1512 sql_values.push_back(q.value(3).toDouble());
1513 sql_values.push_back(q.value(5).toDouble());
1514 sql_values.push_back(q.value(6).toDouble());
1515 sql_values.push_back(q.value(1).toDouble());
1517 ids.push_back(sql_values);
1520 if(std::find(precursor_ids.begin(),
1521 precursor_ids.end(),
1522 q.value(3).toDouble()) == precursor_ids.end())
1524 precursor_ids.push_back(q.value(3).toDouble());
1528 if(precursor_ids.size() > 1)
1532 if(precursor_ids.size() > 1)
1536 return precursor_ids;
1540 return precursor_ids;
1544std::vector<std::size_t>
1548 std::vector<std::size_t> precursor_id;
1549 for(std::vector<double> index : ids)
1558 double bko = tims_frame.get()->getOneOverK0Transformation(index[2]);
1559 double eko = tims_frame.get()->getOneOverK0Transformation(index[3]);
1562 double mean_ko = (bko + eko) / 2;
1564 if(mean_ko > ko_value - 0.1 && mean_ko < ko_value + 0.1)
1566 precursor_id.push_back(index[1]);
1569 return precursor_id;
1572std::vector<std::size_t>
1574 std::vector<std::vector<double>> ids,
double mz_value)
1576 std::vector<std::size_t> best_precursor;
1577 double best_value = 1;
1579 int best_val_position = 0;
1581 for(std::vector<double> values : ids)
1583 double new_val = abs(mz_value - values[4]);
1584 if(new_val < best_value)
1586 best_value = new_val;
1587 best_val_position = count;
1591 best_precursor.push_back(ids[best_val_position][1]);
1592 return best_precursor;
void setNativeId(const QString &native_id)
void setMsRunId(MsRunIdCstSPtr other)
std::size_t getSpectrumIndex() const
void setSpectrumIndex(std::size_t index)
Class to represent a mass spectrum.
const char * what() const noexcept override
virtual const QString & qwhat() const
Class representing a fully specified mass spectrum.
void setPrecursorNativeId(const QString &native_id)
Set the scan native id of the precursor ion.
void setDtInMilliSeconds(pappso_double rt)
Set the drift time in milliseconds.
void appendPrecursorIonData(const PrecursorIonData &precursor_ion_data)
void setMassSpectrumId(const MassSpectrumId &iD)
Set the MassSpectrumId.
void setMsLevel(uint ms_level)
Set the mass spectrum level.
void setPrecursorSpectrumIndex(std::size_t precursor_scan_num)
Set the scan number of the precursor ion.
void setParameterValue(QualifiedMassSpectrumParameter parameter, const QVariant &value)
void setMassSpectrumSPtr(MassSpectrumSPtr massSpectrum)
Set the MassSpectrumSPtr.
void setRtInSeconds(pappso_double rt)
Set the retention time in seconds.
void setEmptyMassSpectrum(bool is_empty_mass_spectrum)
interface to collect spectrums from the MsRunReader class
virtual bool shouldStop()
virtual void loadingEnded()
virtual bool needMsLevelPeakList(unsigned int ms_level) const final
tells if we need the peak list (if we want the binary data) for each spectrum, given an MS level
virtual void spectrumListHasSize(std::size_t size)
virtual void setQualifiedMassSpectrum(const QualifiedMassSpectrum &spectrum)=0
void closeLinearRead()
close file access and flush cache
void builtInCentroid()
simple filter to agregate counts on neigbhor mobility slots (+1)
static TimsDataFastMap & getTimsDataFastMapInstance()
std::size_t getGlobalScanIndexByScanCoordinates(std::size_t frame_id, std::size_t index) const
QSqlDatabase openDatabaseConnection() const
std::size_t getTotalScanCount() const
TimsFrameCstSPtr getTimsFrameCstSPtrCached(std::size_t timsId)
get a Tims frame with his database ID but look in the cache first
const std::vector< FrameIdDescr > & getFrameIdDescrList() const
TimsBinDec * getTimsBinDecPtr() const
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached(std::size_t timsId)
const QDir & getTimsDataDirectory() const
std::pair< std::size_t, std::size_t > getScanCoordinatesByGlobalScanIndex(std::size_t index) const
void fillSpectrumDescriptionWithSqlRecord(SpectrumDescr &spectrum_descr, QSqlQuery &qprecursor_list)
void ms2ReaderGenerateMS1MS2Spectrum(const MsRunIdCstSPtr &msrun_id, std::vector< QualifiedMassSpectrum > &qualified_mass_spectrum_list, SpectrumCollectionHandlerInterface &handler, const SpectrumDescr &spectrum_descr, unsigned int ms_level)
std::vector< std::size_t > getPrecursorsByMzRtCharge(int charge, double mz_val, double rt_sec, double k0)
guess possible precursor ids given a charge, m/z, retention time and k0
void getQualifiedMs1MassSpectrumBySpectrumDescr(const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, const SpectrumDescr &spectrum_descr, bool want_binary_data)
std::vector< TimsDdaPrecursors::SpectrumDescr > getSpectrumDescrListByFrameId(std::size_t frame_id) const
get a list of TimsDdaPrecursors::SpectrumDescr for a frame
std::size_t m_totalPrecursorCount
pappso::FilterInterfaceCstSPtr mcsp_ms1Filter
std::vector< std::size_t > getClosestPrecursorIdByMz(std::vector< std::vector< double > > ids, double mz_value)
std::map< std::size_t, QSqlRecord > m_mapXicCoordRecord
SpectrumDescr getSpectrumDescrWithScanCoordinates(const std::pair< std::size_t, std::size_t > &scan_coordinates)
void setMs2BuiltinCentroid(bool centroid)
enable or disable simple centroid filter on raw tims data for MS2
void getQualifiedMs2MassSpectrumBySpectrumDescr(const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, const SpectrumDescr &spectrum_descr, bool want_binary_data)
bool getMs2BuiltinCentroid() const
tells if simple centroid filter on raw tims data for MS2 is enabled or not
XicCoordTims getXicCoordTimsFromPrecursorId(std::size_t precursor_id, PrecisionPtr precision_ptr)
void rawReaderSpectrumCollectionByMsLevel(const MsRunIdCstSPtr &msrun_id, SpectrumCollectionHandlerInterface &handler, unsigned int ms_level)
function to visit an MsRunReader and get each raw Spectrum in a spectrum collection handler by Ms Lev...
TimsDdaPrecursors(QSqlQuery &query, TimsData *tims_data_origin)
void setMs2FilterCstSPtr(pappso::FilterInterfaceCstSPtr &filter)
filter interface to apply just after raw MS2 specturm extraction the filter can be a list of filters ...
TimsData * mp_timsDataOrigin
pappso::FilterInterfaceCstSPtr mcsp_ms2Filter
void ms2ReaderSpectrumCollectionByMsLevel(const MsRunIdCstSPtr &msrun_id, SpectrumCollectionHandlerInterface &handler, unsigned int ms_level)
function to visit an MsRunReader and get each Spectrum in a spectrum collection handler by Ms Levels
std::vector< std::size_t > getMatchPrecursorIdByKo(std::vector< std::vector< double > > ids, double ko_value)
void setMs1FilterCstSPtr(pappso::FilterInterfaceCstSPtr &filter)
filter interface to apply just after raw MS1 specturm extraction the filter can be a list of filters ...
TimsDdaPrecursors::SpectrumDescr getSpectrumDescrWithPrecursorId(std::size_t precursor_id) const
get an intermediate structure describing a spectrum
void setMonoThread(bool is_mono_thread)
set only one is_mono_thread to true
std::size_t getTotalPrecursorCount() const
get the number of precursors analyzed by PASEF
bool m_builtinMs2Centroid
enable builtin centroid on raw tims integers by default
TimsDataFastMap & getCombinedMs2ScansByPrecursorId(std::size_t precursor_id)
get cumulated raw signal for a given precursorCMakeLists.txt.userCMakeLists.txt.userCMakeLists....
virtual MapTrace & combine(MapTrace &map_trace, const Trace &trace) const override
A simple container of DataPoint instances.
virtual Trace & filter(const FilterInterface &filter) final
apply a filter on this trace
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< const TimsFrameBase > TimsFrameBaseCstSPtr
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
@ IsolationMzWidth
m/z isolation window width (left + right)
@ CollisionEnergy
Bruker's timsTOF collision energy.
@ IonMobOneOverK0Begin
1/K0 range's begin value
@ IonMobOneOverK0End
1/K0 range's end value
@ IsolationMz
Isolation m/z value.
@ BrukerPrecursorIndex
Bruker's timsTOF precursor index.
@ IonMobOneOverK0
1/kO value
std::shared_ptr< const FilterInterface > FilterInterfaceCstSPtr
std::shared_ptr< const TimsFrame > TimsFrameCstSPtr
std::size_t scan_mobility_end
PrecursorIonData precursor_ion_data
std::vector< std::size_t > tims_frame_list
std::size_t scan_mobility_start
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
double rtTarget
the targeted retention time to extract around intended in seconds, and related to one msrun....
MzRange mzRange
the mass to extract
handle specific data for DDA MS runs