34#include <QtConcurrent>
45 if(!query.exec(
"SELECT COUNT( DISTINCT Id) FROM Precursors;"))
61 std::make_shared<FilterSuiteString>(
"chargeDeconvolution|0.02dalton mzExclusion|0.01dalton");
64 std::shared_ptr<FilterTriangle> ms1filter = std::make_shared<FilterTriangle>();
65 ms1filter.get()->setTriangleSlope(50, 0.01);
73std::vector<TimsDdaPrecursors::SpectrumDescr>
76 std::vector<TimsDdaPrecursors::SpectrumDescr> spectrum_descr_list;
86 QSqlQuery q = qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
87 "PasefFrameMsMsInfo.ScanNumBegin, "
88 "PasefFrameMsMsInfo.ScanNumEnd, "
89 "PasefFrameMsMsInfo.IsolationMz, "
90 "PasefFrameMsMsInfo.IsolationWidth, "
91 "PasefFrameMsMsInfo.CollisionEnergy, "
92 "PasefFrameMsMsInfo.Precursor, "
94 "Precursors.LargestPeakMz, "
95 "Precursors.AverageMz, "
96 "Precursors.MonoisotopicMz, "
98 "Precursors.ScanNumber, "
99 "Precursors.Intensity, "
101 "FROM PasefFrameMsMsInfo "
102 "INNER JOIN Precursors ON "
105 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
106 "WHERE PasefFrameMsMsInfo.Frame=%1;")
108 if(q.lastError().isValid())
112 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
113 "command %2:\n%3\n%4\n%5")
116 .arg(qdb.lastError().databaseText())
117 .arg(qdb.lastError().driverText())
118 .arg(qdb.lastError().nativeErrorCode()));
133 PrecursorIonData(q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
142 spectrum_descr.
isolationMz = q.value(3).toDouble();
147 spectrum_descr_list.push_back(spectrum_descr);
155 catch(std::exception &error)
157 qDebug() << QString(
"Failure %1 ").arg(error.
what());
159 return spectrum_descr_list;
168 raw_spectrum.
clear();
173 QSqlQuery q = qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
174 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
175 "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
178 if(q.lastError().isValid())
182 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
183 "command %2:\n%3\n%4\n%5")
186 .arg(qdb.lastError().databaseText())
187 .arg(qdb.lastError().driverText())
188 .arg(qdb.lastError().nativeErrorCode()));
196 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
205 std::size_t scan_mobility_start = 0;
206 std::size_t scan_mobility_end = 0;
207 std::vector<std::size_t> tims_frame_list;
211 tims_frame_list.push_back(q.value(0).toLongLong());
215 scan_mobility_start = q.value(1).toLongLong();
216 scan_mobility_end = q.value(2).toLongLong();
226 for(std::size_t tims_id : tims_frame_list)
233 if(previous_frame.get() !=
nullptr)
235 if(previous_frame.get()->hasSameCalibrationData(*tims_frame.get()))
241 QObject::tr(
"ERROR in %1 %2, different calibration data "
242 "between frame id %3 and frame id %4")
245 .arg(previous_frame.get()->getId())
246 .arg(tims_frame.get()->getId()));
249 tims_frame.get()->combineScansInTofIndexIntensityMap(
250 raw_spectrum, scan_mobility_start, scan_mobility_end);
253 previous_frame = tims_frame;
255 qDebug() <<
" precursor_index=" << precursor_id <<
" num_rows=" << tims_frame_list.size()
256 <<
" sql=" << q.lastQuery() <<
" " << (std::size_t)QThread::currentThreadId();
260 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
270 throw PappsoException(QObject::tr(
"ERROR in %1 (precursor_index=%2):\n%3")
273 .arg(error.
qwhat()));
275 catch(std::exception &error)
277 qDebug() << QString(
"Failure %1 ").arg(error.
what());
327 qdb.exec(QString(
"SELECT Precursors.id, "
329 "min(PasefFrameMsMsInfo.ScanNumBegin), "
330 "max(PasefFrameMsMsInfo.ScanNumEnd), "
331 "Precursors.MonoisotopicMz "
333 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
334 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
335 "INNER JOIN Frames ON "
336 "PasefFrameMsMsInfo.Frame=Frames.Id "
337 "GROUP BY Precursors.id;"));
338 if(q.lastError().isValid())
342 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
343 "command %2:\n%3\n%4\n%5")
346 .arg(qdb.lastError().databaseText())
347 .arg(qdb.lastError().driverText())
348 .arg(qdb.lastError().nativeErrorCode()));
357 QSqlRecord record = q.record();
359 (std::size_t)record.value(0).toULongLong(), record));
370 QObject::tr(
"ERROR Precursors database id %1 not found").arg(precursor_id));
373 auto &q = it_map_xiccoord->second;
374 xic_coord_tims_struct.
mzRange =
MzRange(q.value(4).toDouble(), precision_ptr);
375 xic_coord_tims_struct.
scanNumBegin = q.value(2).toUInt();
376 xic_coord_tims_struct.
scanNumEnd = q.value(3).toUInt();
377 xic_coord_tims_struct.
rtTarget = q.value(1).toDouble();
379 xic_coord_tims_struct.
xicSptr = std::make_shared<Xic>();
385 catch(std::exception &error)
387 qDebug() << QString(
"Failure %1 ").arg(error.
what());
389 return xic_coord_tims_struct;
399 QSqlQuery q = qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
400 "PasefFrameMsMsInfo.ScanNumBegin, "
401 "PasefFrameMsMsInfo.ScanNumEnd, "
402 "PasefFrameMsMsInfo.IsolationMz, "
403 "PasefFrameMsMsInfo.IsolationWidth, "
404 "PasefFrameMsMsInfo.CollisionEnergy, "
405 "PasefFrameMsMsInfo.Precursor, "
407 "Precursors.LargestPeakMz, "
408 "Precursors.AverageMz, "
409 "Precursors.MonoisotopicMz, "
410 "Precursors.Charge, "
411 "Precursors.ScanNumber, "
412 "Precursors.Intensity, "
414 "FROM PasefFrameMsMsInfo "
415 "INNER JOIN Precursors ON "
418 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
419 "WHERE Precursors.Id=%1;")
421 if(q.lastError().isValid())
425 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
426 "command %2:\n%3\n%4\n%5")
429 .arg(qdb.lastError().databaseText())
430 .arg(qdb.lastError().driverText())
431 .arg(qdb.lastError().nativeErrorCode()));
439 qDebug() <<
" cumul tims frame:" << q.value(0).toLongLong();
447 PrecursorIonData(q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
456 spectrum_descr.
isolationMz = q.value(3).toDouble();
467 throw ExceptionNotFound(QObject::tr(
"ERROR in %1 %2 : precursor id (%3) NOT FOUND ")
472 return spectrum_descr;
477 const std::pair<std::size_t, std::size_t> &scan_coordinates)
482 QSqlQuery q = qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
483 "PasefFrameMsMsInfo.ScanNumBegin, "
484 "PasefFrameMsMsInfo.ScanNumEnd, "
485 "PasefFrameMsMsInfo.IsolationMz, "
486 "PasefFrameMsMsInfo.IsolationWidth, "
487 "PasefFrameMsMsInfo.CollisionEnergy, "
488 "PasefFrameMsMsInfo.Precursor, "
490 "Precursors.LargestPeakMz, "
491 "Precursors.AverageMz, "
492 "Precursors.MonoisotopicMz, "
493 "Precursors.Charge, "
494 "Precursors.ScanNumber, "
495 "Precursors.Intensity, "
497 "FROM PasefFrameMsMsInfo "
498 "INNER JOIN Precursors ON "
499 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
501 "PasefFrameMsMsInfo.Frame=%1 and "
502 "(PasefFrameMsMsInfo.ScanNumBegin "
503 "<= %2 and PasefFrameMsMsInfo.ScanNumEnd >= %2);")
504 .arg(scan_coordinates.first)
505 .arg(scan_coordinates.second));
506 if(q.lastError().isValid())
510 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
511 "command %2:\n%3\n%4\n%5")
514 .arg(qdb.lastError().databaseText())
515 .arg(qdb.lastError().driverText())
516 .arg(qdb.lastError().nativeErrorCode()));
522 qDebug() <<
" cumul tims frame:" << q.value(0).toLongLong();
528 PrecursorIonData(q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
537 spectrum_descr.
isolationMz = q.value(3).toDouble();
542 return spectrum_descr;
552 spectrum_descr.
tims_frame_list.push_back(qprecursor_list.value(0).toLongLong());
557 qprecursor_list.value(11).toInt(),
558 qprecursor_list.value(13).toDouble());
560 spectrum_descr.
precursor_id = qprecursor_list.value(6).toLongLong();
567 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
568 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
570 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
577 bool want_binary_data)
581 qDebug() <<
" ms2_index=" << spectrum_descr.
ms2_index
595 spectrum_id.
setNativeId(QString(
"frame_id=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
610 qDebug() <<
"bindec";
631 combiner.
combine(combiner_result,
632 tims_frame.get()->cumulateScansToTrace(
635 Trace trace(combiner_result);
662 catch(std::exception &error)
664 qDebug() << QString(
"Failure %1 ").arg(error.
what());
684 bool want_binary_data)
694 spectrum_id.
setNativeId(QString(
"precursor=%1 idxms2=%2")
702 qDebug() <<
"spectrum_descr.precursor_id=" << spectrum_descr.
precursor_id
703 <<
" spectrum_descr.ms1_index=" << spectrum_descr.
ms1_index
704 <<
" spectrum_descr.ms2_index=" << spectrum_descr.
ms2_index;
715 QString(
"frame_id=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
738 raw_spectrum.
clear();
742 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id <<
" tims_id=" << tims_id
743 << (std::size_t)QThread::currentThreadId();
747 qDebug() <<
"bindec";
754 qDebug() << (std::size_t)QThread::currentThreadId();
778 if(previous_frame.get() !=
nullptr)
780 if(previous_frame.get()->hasSameCalibrationData(*tims_frame.get()))
786 QObject::tr(
"ERROR in %1 %2, different calibration data "
787 "between frame id %3 and frame id %4")
790 .arg(previous_frame.get()->getId())
791 .arg(tims_frame.get()->getId()));
794 qDebug() << (std::size_t)QThread::currentThreadId();
796 tims_frame.get()->combineScansInTofIndexIntensityMap(
798 qDebug() << (std::size_t)QThread::currentThreadId();
800 previous_frame = tims_frame;
802 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id
804 << (std::size_t)QThread::currentThreadId();
808 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
814 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
823 trace = tims_frame.get()->getTraceFromTofIndexIntensityMap(raw_spectrum);
827 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id <<
" " << trace.size()
828 <<
" " << (std::size_t)QThread::currentThreadId();
842 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
859 throw PappsoException(QObject::tr(
"ERROR in %1 (ms2_index=%2 precursor_index=%3):\n%4")
863 .arg(error.
qwhat()));
865 catch(std::exception &error)
867 qDebug() << QString(
"Failure %1 ").arg(error.
what());
887 unsigned int ms_level)
889 qDebug() <<
" ms_level=" << ms_level;
892 QSqlQuery qprecursor_list =
893 qdb.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
894 "PasefFrameMsMsInfo.ScanNumBegin, "
895 "PasefFrameMsMsInfo.ScanNumEnd, "
896 "PasefFrameMsMsInfo.IsolationMz, "
897 "PasefFrameMsMsInfo.IsolationWidth, "
898 "PasefFrameMsMsInfo.CollisionEnergy, "
899 "PasefFrameMsMsInfo.Precursor, "
901 "Precursors.LargestPeakMz, "
902 "Precursors.AverageMz, "
903 "Precursors.MonoisotopicMz, "
904 "Precursors.Charge, "
905 "Precursors.ScanNumber, "
906 "Precursors.Intensity, "
908 "FROM PasefFrameMsMsInfo "
909 "INNER JOIN Precursors ON "
910 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
911 "ORDER BY PasefFrameMsMsInfo.Precursor, PasefFrameMsMsInfo.Frame ;"));
912 if(qprecursor_list.lastError().isValid())
916 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
917 "command %2:\n%3\n%4\n%5")
919 .arg(qprecursor_list.lastQuery())
920 .arg(qdb.lastError().databaseText())
921 .arg(qdb.lastError().driverText())
922 .arg(qdb.lastError().nativeErrorCode()));
926 qDebug() <<
"qprecursor_list.size()=" << qprecursor_list.size();
927 qDebug() << QObject::tr(
928 "TIMS sqlite database file %1, executing SQL "
929 "command %2:\n%3\n%4\n%5")
931 .arg(qprecursor_list.lastQuery())
932 .arg(qdb.lastError().databaseText())
933 .arg(qdb.lastError().driverText())
934 .arg(qdb.lastError().nativeErrorCode());
936 qDebug() <<
"qprecursor_list.isActive()=" << qprecursor_list.isActive();
937 qDebug() <<
"qprecursor_list.isSelect()=" << qprecursor_list.isSelect();
949 qprecursor_list.last();
952 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
953 qprecursor_list.first();
954 std::vector<TimsDdaPrecursors::SpectrumDescr> spectrum_description_list;
961 if(spectrum_descr.
precursor_id != (std::size_t)qprecursor_list.value(6).toLongLong())
966 spectrum_description_list.push_back(spectrum_descr);
972 qDebug() <<
" qprecursor_list.value(6).toLongLong() ="
973 << qprecursor_list.value(6).toLongLong();
974 spectrum_descr.
precursor_id = (std::size_t)qprecursor_list.value(6).toLongLong();
975 qDebug() <<
" spectrum_descr.precursor_id =" << spectrum_descr.
precursor_id;
976 qDebug() <<
" cumul tims frame:" << qprecursor_list.value(0).toLongLong();
977 spectrum_descr.
tims_frame_list.push_back(qprecursor_list.value(0).toLongLong());
978 qDebug() <<
" first =" << first;
987 qprecursor_list.value(11).toInt(),
988 qprecursor_list.value(13).toDouble());
997 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
998 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
1000 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
1010 while(qprecursor_list.next());
1017 spectrum_description_list.push_back(spectrum_descr);
1021 QString local_filepath =
1026 for(
SpectrumDescr &spectrum_descr : spectrum_description_list)
1029 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1031 msrun_id, mass_spectrum_list, handler, spectrum_descr, ms_level);
1033 for(
auto &qualified_spectrum : mass_spectrum_list)
1040 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1042 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1").arg(local_filepath));
1055 map_function_generate_spectrum = [itself, msrun_id, pointer_handler, ms_level](
1057 -> std::vector<QualifiedMassSpectrum> {
1058 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1060 msrun_id, mass_spectrum_list, *pointer_handler, spectrum_descr, ms_level);
1063 return mass_spectrum_list;
1066 std::function<void(std::size_t,
1067 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list)>
1068 reduce_function_spectrum_list =
1069 [pointer_handler, local_filepath](
1070 std::size_t res,
const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list) {
1071 for(
auto &qualified_spectrum : qualified_spectrum_list)
1078 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1080 QObject::tr(
"reading TimsTOF job on %1 cancelled by the user")
1081 .arg(local_filepath));
1087 QFuture<std::size_t> res;
1088 res = QtConcurrent::mappedReduced<std::size_t>(spectrum_description_list.begin(),
1089 spectrum_description_list.end(),
1090 map_function_generate_spectrum,
1091 reduce_function_spectrum_list,
1092 QtConcurrent::OrderedReduce);
1093 res.waitForFinished();
1108 std::vector<QualifiedMassSpectrum> &qualified_mass_spectrum_list,
1111 unsigned int ms_level)
1114 qDebug() <<
" ms_level=" << ms_level;
1117 if((ms_level == 0) || (ms_level == 1))
1121 qualified_mass_spectrum_list.back(),
1125 if((ms_level == 0) || (ms_level == 2))
1129 qualified_mass_spectrum_list.back(),
1139 unsigned int ms_level)
1153 QSqlQuery qprecursor_list =
1154 qdb.exec(QString(
"SELECT DISTINCT "
1155 "PasefFrameMsMsInfo.Frame, "
1156 "PasefFrameMsMsInfo.ScanNumBegin, "
1157 "PasefFrameMsMsInfo.ScanNumEnd, "
1158 "PasefFrameMsMsInfo.IsolationMz, "
1159 "PasefFrameMsMsInfo.IsolationWidth, "
1160 "PasefFrameMsMsInfo.CollisionEnergy, "
1161 "PasefFrameMsMsInfo.Precursor, "
1163 "Precursors.LargestPeakMz, "
1164 "Precursors.AverageMz, "
1165 "Precursors.MonoisotopicMz, "
1166 "Precursors.Charge, "
1167 "Precursors.ScanNumber, "
1168 "Precursors.Intensity, "
1169 "Precursors.Parent "
1170 "FROM PasefFrameMsMsInfo "
1171 "INNER JOIN Precursors ON "
1172 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
1173 "ORDER BY PasefFrameMsMsInfo.Frame, PasefFrameMsMsInfo.ScanNumBegin ;"));
1174 if(qprecursor_list.lastError().isValid())
1177 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
1178 "command %2:\n%3\n%4\n%5")
1179 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf"))
1180 .arg(qprecursor_list.lastQuery())
1181 .arg(qdb.lastError().databaseText())
1182 .arg(qdb.lastError().driverText())
1183 .arg(qdb.lastError().nativeErrorCode()));
1189 qprecursor_list.last();
1192 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
1193 qprecursor_list.first();
1205 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1207 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1")
1208 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf")));
1211 tims_frame =
mp_timsDataOrigin->getTimsFrameBaseCstSPtrCached(current_frame.m_frameId);
1212 unsigned int tims_ms_level = tims_frame.get()->getMsLevel();
1214 if((ms_level != 0) && (ms_level != tims_ms_level))
1216 i += current_frame.m_scanCount;
1221 qDebug() <<
"want_binary_data=" << want_binary_data;
1222 if(want_binary_data)
1224 qDebug() <<
"bindec";
1225 tims_frame =
mp_timsDataOrigin->getTimsFrameCstSPtrCached(current_frame.m_frameId);
1228 bool possible_precursor =
false;
1229 if(tims_ms_level == 2)
1232 while(qprecursor_list.value(0).toULongLong() < current_frame.m_frameId)
1234 qprecursor_list.next();
1236 if(qprecursor_list.value(0).toULongLong() == current_frame.m_frameId)
1238 possible_precursor =
true;
1244 for(std::size_t scan_num = 0; scan_num < current_frame.m_scanCount; scan_num++)
1246 bool has_a_precursor =
false;
1247 if(possible_precursor)
1252 while(qprecursor_list.value(0).toULongLong() < current_frame.m_frameId)
1254 qprecursor_list.next();
1256 if(qprecursor_list.value(0).toULongLong() != current_frame.m_frameId)
1258 possible_precursor =
false;
1267 has_a_precursor =
true;
1279 spectrum_id.
setNativeId(QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1280 .arg(current_frame.m_frameId)
1286 mass_spectrum.
setMsLevel(tims_frame.get()->getMsLevel());
1287 mass_spectrum.
setRtInSeconds(tims_frame.get()->getRtInSeconds());
1290 tims_frame.get()->getDriftTimeInMilliseconds(scan_num));
1294 tims_frame.get()->getOneOverK0Transformation(scan_num));
1297 if(want_binary_data)
1302 tims_frame.get()->getMassSpectrumSPtr(scan_num));
1307 QObject::tr(
"ERROR in %1 (scan_num=%2 spectrum_index=%3):\n%4")
1311 .arg(error.
qwhat()));
1313 if(mass_spectrum.
size() > 0)
1332 std::size_t prec_spectrum_index =
1338 QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1341 .arg(prec_spectrum_index));
1366std::vector<std::size_t>
1370 std::vector<std::size_t> precursor_ids;
1371 std::vector<std::vector<double>> ids;
1374 QSqlQuery q(QString(
"SELECT Frames.Time, Precursors.MonoisotopicMz, Precursors.Charge, "
1375 "Precursors.Id, Frames.Id, PasefFrameMsMsInfo.ScanNumBegin, "
1376 "PasefFrameMsMsInfo.scanNumEnd "
1378 "INNER JOIN PasefFrameMsMsInfo ON Frames.Id = "
1379 "PasefFrameMsMsInfo.Frame "
1380 "INNER JOIN Precursors ON "
1381 "PasefFrameMsMsInfo.Precursor= Precursors.Id "
1382 "WHERE Precursors.Charge == %1 "
1383 "AND Precursors.MonoisotopicMz > %2 -0.01 "
1384 "AND Precursors.MonoisotopicMz < %2 +0.01 "
1385 "AND Frames.Time >= %3 -1 "
1386 "AND Frames.Time < %3 +1; ")
1391 if(q.lastError().isValid())
1395 QObject::tr(
"ERROR in TIMS sqlite database file %1, database name %2, "
1397 "command %3:\n%4\n%5\n%6")
1398 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf"))
1399 .arg(qdb.databaseName())
1401 .arg(qdb.lastError().databaseText())
1402 .arg(qdb.lastError().driverText())
1403 .arg(qdb.lastError().nativeErrorCode()));
1410 std::vector<double> sql_values;
1411 sql_values.push_back(q.value(4).toDouble());
1412 sql_values.push_back(q.value(3).toDouble());
1413 sql_values.push_back(q.value(5).toDouble());
1414 sql_values.push_back(q.value(6).toDouble());
1415 sql_values.push_back(q.value(1).toDouble());
1417 ids.push_back(sql_values);
1420 if(std::find(precursor_ids.begin(), precursor_ids.end(), q.value(3).toDouble()) ==
1421 precursor_ids.end())
1423 precursor_ids.push_back(q.value(3).toDouble());
1427 if(precursor_ids.size() > 1)
1431 if(precursor_ids.size() > 1)
1435 return precursor_ids;
1439 return precursor_ids;
1443std::vector<std::size_t>
1446 std::vector<std::size_t> precursor_id;
1447 for(std::vector<double> index : ids)
1449 auto coordinate =
mp_timsDataOrigin->getScanCoordinatesByGlobalScanIndex(index[0]);
1452 tims_frame =
mp_timsDataOrigin->getTimsFrameBaseCstSPtrCached(coordinate.first);
1454 double bko = tims_frame.get()->getOneOverK0Transformation(index[2]);
1455 double eko = tims_frame.get()->getOneOverK0Transformation(index[3]);
1458 double mean_ko = (bko + eko) / 2;
1460 if(mean_ko > ko_value - 0.1 && mean_ko < ko_value + 0.1)
1462 precursor_id.push_back(index[1]);
1465 return precursor_id;
1468std::vector<std::size_t>
1471 std::vector<std::size_t> best_precursor;
1472 double best_value = 1;
1474 int best_val_position = 0;
1476 for(std::vector<double> values : ids)
1478 double new_val = abs(mz_value - values[4]);
1479 if(new_val < best_value)
1481 best_value = new_val;
1482 best_val_position = count;
1486 best_precursor.push_back(ids[best_val_position][1]);
1487 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 builtInCentroid()
simple filter to agregate counts on neigbhor mobility slots (+1)
static TimsDataFastMap & getTimsDataFastMapInstance()
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.
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
std::shared_ptr< const TimsFrameBase > TimsFrameBaseCstSPtr
@ filter
concerning filters (psm, peptide, protein validation)
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
const PrecisionBase * PrecisionPtr
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