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;
87 q.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
88 "PasefFrameMsMsInfo.ScanNumBegin, "
89 "PasefFrameMsMsInfo.ScanNumEnd, "
90 "PasefFrameMsMsInfo.IsolationMz, "
91 "PasefFrameMsMsInfo.IsolationWidth, "
92 "PasefFrameMsMsInfo.CollisionEnergy, "
93 "PasefFrameMsMsInfo.Precursor, "
95 "Precursors.LargestPeakMz, "
96 "Precursors.AverageMz, "
97 "Precursors.MonoisotopicMz, "
99 "Precursors.ScanNumber, "
100 "Precursors.Intensity, "
102 "FROM PasefFrameMsMsInfo "
103 "INNER JOIN Precursors ON "
106 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
107 "WHERE PasefFrameMsMsInfo.Frame=%1;")
109 if(q.lastError().isValid())
113 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
114 "command %2:\n%3\n%4\n%5")
117 .arg(qdb.lastError().databaseText())
118 .arg(qdb.lastError().driverText())
119 .arg(qdb.lastError().nativeErrorCode()));
134 PrecursorIonData(q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
143 spectrum_descr.
isolationMz = q.value(3).toDouble();
148 spectrum_descr_list.push_back(spectrum_descr);
156 catch(std::exception &error)
158 qDebug() << QString(
"Failure %1 ").arg(error.
what());
160 return spectrum_descr_list;
169 raw_spectrum.
clear();
175 q.exec(QString(
"SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
176 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
177 "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
180 if(q.lastError().isValid())
184 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
185 "command %2:\n%3\n%4\n%5")
188 .arg(qdb.lastError().databaseText())
189 .arg(qdb.lastError().driverText())
190 .arg(qdb.lastError().nativeErrorCode()));
198 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
207 std::size_t scan_mobility_start = 0;
208 std::size_t scan_mobility_end = 0;
209 std::vector<std::size_t> tims_frame_list;
213 tims_frame_list.push_back(q.value(0).toLongLong());
217 scan_mobility_start = q.value(1).toLongLong();
218 scan_mobility_end = q.value(2).toLongLong();
228 for(std::size_t tims_id : tims_frame_list)
235 if(previous_frame.get() !=
nullptr)
237 if(previous_frame.get()->hasSameCalibrationData(*tims_frame.get()))
243 QObject::tr(
"ERROR in %1 %2, different calibration data "
244 "between frame id %3 and frame id %4")
247 .arg(previous_frame.get()->getId())
248 .arg(tims_frame.get()->getId()));
251 tims_frame.get()->combineScansInTofIndexIntensityMap(
252 raw_spectrum, scan_mobility_start, scan_mobility_end);
255 previous_frame = tims_frame;
257 qDebug() <<
" precursor_index=" << precursor_id <<
" num_rows=" << tims_frame_list.size()
258 <<
" sql=" << q.lastQuery() <<
" " << (std::size_t)QThread::currentThreadId();
262 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
272 throw PappsoException(QObject::tr(
"ERROR in %1 (precursor_index=%2):\n%3")
275 .arg(error.
qwhat()));
277 catch(std::exception &error)
279 qDebug() << QString(
"Failure %1 ").arg(error.
what());
330 QString(
"SELECT Precursors.id, "
332 "min(PasefFrameMsMsInfo.ScanNumBegin), "
333 "max(PasefFrameMsMsInfo.ScanNumEnd), "
334 "Precursors.MonoisotopicMz "
336 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
337 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
338 "INNER JOIN Frames ON "
339 "PasefFrameMsMsInfo.Frame=Frames.Id "
340 "GROUP BY Precursors.id;"));
341 if(q.lastError().isValid())
345 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
346 "command %2:\n%3\n%4\n%5")
349 .arg(qdb.lastError().databaseText())
350 .arg(qdb.lastError().driverText())
351 .arg(qdb.lastError().nativeErrorCode()));
360 QSqlRecord record = q.record();
362 (std::size_t)record.value(0).toULongLong(), record));
373 QObject::tr(
"ERROR Precursors database id %1 not found").arg(precursor_id));
376 auto &q = it_map_xiccoord->second;
377 xic_coord_tims_struct.
mzRange =
MzRange(q.value(4).toDouble(), precision_ptr);
378 xic_coord_tims_struct.
scanNumBegin = q.value(2).toUInt();
379 xic_coord_tims_struct.
scanNumEnd = q.value(3).toUInt();
380 xic_coord_tims_struct.
rtTarget = q.value(1).toDouble();
382 xic_coord_tims_struct.
xicSptr = std::make_shared<Xic>();
388 catch(std::exception &error)
390 qDebug() << QString(
"Failure %1 ").arg(error.
what());
392 return xic_coord_tims_struct;
403 q.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
404 "PasefFrameMsMsInfo.ScanNumBegin, "
405 "PasefFrameMsMsInfo.ScanNumEnd, "
406 "PasefFrameMsMsInfo.IsolationMz, "
407 "PasefFrameMsMsInfo.IsolationWidth, "
408 "PasefFrameMsMsInfo.CollisionEnergy, "
409 "PasefFrameMsMsInfo.Precursor, "
411 "Precursors.LargestPeakMz, "
412 "Precursors.AverageMz, "
413 "Precursors.MonoisotopicMz, "
414 "Precursors.Charge, "
415 "Precursors.ScanNumber, "
416 "Precursors.Intensity, "
418 "FROM PasefFrameMsMsInfo "
419 "INNER JOIN Precursors ON "
422 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
423 "WHERE Precursors.Id=%1;")
425 if(q.lastError().isValid())
429 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
430 "command %2:\n%3\n%4\n%5")
433 .arg(qdb.lastError().databaseText())
434 .arg(qdb.lastError().driverText())
435 .arg(qdb.lastError().nativeErrorCode()));
443 qDebug() <<
" cumul tims frame:" << q.value(0).toLongLong();
451 PrecursorIonData(q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
460 spectrum_descr.
isolationMz = q.value(3).toDouble();
471 throw ExceptionNotFound(QObject::tr(
"ERROR in %1 %2 : precursor id (%3) NOT FOUND ")
476 return spectrum_descr;
481 const std::pair<std::size_t, std::size_t> &scan_coordinates)
487 q.exec(QString(
"SELECT PasefFrameMsMsInfo.Frame, "
488 "PasefFrameMsMsInfo.ScanNumBegin, "
489 "PasefFrameMsMsInfo.ScanNumEnd, "
490 "PasefFrameMsMsInfo.IsolationMz, "
491 "PasefFrameMsMsInfo.IsolationWidth, "
492 "PasefFrameMsMsInfo.CollisionEnergy, "
493 "PasefFrameMsMsInfo.Precursor, "
495 "Precursors.LargestPeakMz, "
496 "Precursors.AverageMz, "
497 "Precursors.MonoisotopicMz, "
498 "Precursors.Charge, "
499 "Precursors.ScanNumber, "
500 "Precursors.Intensity, "
502 "FROM PasefFrameMsMsInfo "
503 "INNER JOIN Precursors ON "
504 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
506 "PasefFrameMsMsInfo.Frame=%1 and "
507 "(PasefFrameMsMsInfo.ScanNumBegin "
508 "<= %2 and PasefFrameMsMsInfo.ScanNumEnd >= %2);")
509 .arg(scan_coordinates.first)
510 .arg(scan_coordinates.second));
511 if(q.lastError().isValid())
515 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
516 "command %2:\n%3\n%4\n%5")
519 .arg(qdb.lastError().databaseText())
520 .arg(qdb.lastError().driverText())
521 .arg(qdb.lastError().nativeErrorCode()));
527 qDebug() <<
" cumul tims frame:" << q.value(0).toLongLong();
533 PrecursorIonData(q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
542 spectrum_descr.
isolationMz = q.value(3).toDouble();
547 return spectrum_descr;
557 spectrum_descr.
tims_frame_list.push_back(qprecursor_list.value(0).toLongLong());
562 qprecursor_list.value(11).toInt(),
563 qprecursor_list.value(13).toDouble());
565 spectrum_descr.
precursor_id = qprecursor_list.value(6).toLongLong();
572 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
573 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
575 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
582 bool want_binary_data)
586 qDebug() <<
" ms2_index=" << spectrum_descr.
ms2_index
600 spectrum_id.
setNativeId(QString(
"frame_id=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
615 qDebug() <<
"bindec";
636 combiner.
combine(combiner_result,
637 tims_frame.get()->cumulateScansToTrace(
640 Trace trace(combiner_result);
667 catch(std::exception &error)
669 qDebug() << QString(
"Failure %1 ").arg(error.
what());
689 bool want_binary_data)
699 spectrum_id.
setNativeId(QString(
"precursor=%1 idxms2=%2")
707 qDebug() <<
"spectrum_descr.precursor_id=" << spectrum_descr.
precursor_id
708 <<
" spectrum_descr.ms1_index=" << spectrum_descr.
ms1_index
709 <<
" spectrum_descr.ms2_index=" << spectrum_descr.
ms2_index;
720 QString(
"frame_id=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
743 raw_spectrum.
clear();
747 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id <<
" tims_id=" << tims_id
748 << (std::size_t)QThread::currentThreadId();
752 qDebug() <<
"bindec";
759 qDebug() << (std::size_t)QThread::currentThreadId();
783 if(previous_frame.get() !=
nullptr)
785 if(previous_frame.get()->hasSameCalibrationData(*tims_frame.get()))
791 QObject::tr(
"ERROR in %1 %2, different calibration data "
792 "between frame id %3 and frame id %4")
795 .arg(previous_frame.get()->getId())
796 .arg(tims_frame.get()->getId()));
799 qDebug() << (std::size_t)QThread::currentThreadId();
801 tims_frame.get()->combineScansInTofIndexIntensityMap(
803 qDebug() << (std::size_t)QThread::currentThreadId();
805 previous_frame = tims_frame;
807 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id
809 << (std::size_t)QThread::currentThreadId();
813 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
819 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
828 trace = tims_frame.get()->getTraceFromTofIndexIntensityMap(raw_spectrum);
832 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id <<
" " << trace.size()
833 <<
" " << (std::size_t)QThread::currentThreadId();
847 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
864 throw PappsoException(QObject::tr(
"ERROR in %1 (ms2_index=%2 precursor_index=%3):\n%4")
868 .arg(error.
qwhat()));
870 catch(std::exception &error)
872 qDebug() << QString(
"Failure %1 ").arg(error.
what());
892 unsigned int ms_level)
894 qDebug() <<
" ms_level=" << ms_level;
897 QSqlQuery qprecursor_list(qdb);
898 qprecursor_list.exec(
899 QString(
"SELECT PasefFrameMsMsInfo.Frame, "
900 "PasefFrameMsMsInfo.ScanNumBegin, "
901 "PasefFrameMsMsInfo.ScanNumEnd, "
902 "PasefFrameMsMsInfo.IsolationMz, "
903 "PasefFrameMsMsInfo.IsolationWidth, "
904 "PasefFrameMsMsInfo.CollisionEnergy, "
905 "PasefFrameMsMsInfo.Precursor, "
907 "Precursors.LargestPeakMz, "
908 "Precursors.AverageMz, "
909 "Precursors.MonoisotopicMz, "
910 "Precursors.Charge, "
911 "Precursors.ScanNumber, "
912 "Precursors.Intensity, "
914 "FROM PasefFrameMsMsInfo "
915 "INNER JOIN Precursors ON "
916 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
917 "ORDER BY PasefFrameMsMsInfo.Precursor, PasefFrameMsMsInfo.Frame ;"));
918 if(qprecursor_list.lastError().isValid())
922 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
923 "command %2:\n%3\n%4\n%5")
925 .arg(qprecursor_list.lastQuery())
926 .arg(qdb.lastError().databaseText())
927 .arg(qdb.lastError().driverText())
928 .arg(qdb.lastError().nativeErrorCode()));
932 qDebug() <<
"qprecursor_list.size()=" << qprecursor_list.size();
933 qDebug() << QObject::tr(
934 "TIMS sqlite database file %1, executing SQL "
935 "command %2:\n%3\n%4\n%5")
937 .arg(qprecursor_list.lastQuery())
938 .arg(qdb.lastError().databaseText())
939 .arg(qdb.lastError().driverText())
940 .arg(qdb.lastError().nativeErrorCode());
942 qDebug() <<
"qprecursor_list.isActive()=" << qprecursor_list.isActive();
943 qDebug() <<
"qprecursor_list.isSelect()=" << qprecursor_list.isSelect();
955 qprecursor_list.last();
958 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
959 qprecursor_list.first();
960 std::vector<TimsDdaPrecursors::SpectrumDescr> spectrum_description_list;
967 if(spectrum_descr.
precursor_id != (std::size_t)qprecursor_list.value(6).toLongLong())
972 spectrum_description_list.push_back(spectrum_descr);
978 qDebug() <<
" qprecursor_list.value(6).toLongLong() ="
979 << qprecursor_list.value(6).toLongLong();
980 spectrum_descr.
precursor_id = (std::size_t)qprecursor_list.value(6).toLongLong();
981 qDebug() <<
" spectrum_descr.precursor_id =" << spectrum_descr.
precursor_id;
982 qDebug() <<
" cumul tims frame:" << qprecursor_list.value(0).toLongLong();
983 spectrum_descr.
tims_frame_list.push_back(qprecursor_list.value(0).toLongLong());
984 qDebug() <<
" first =" << first;
993 qprecursor_list.value(11).toInt(),
994 qprecursor_list.value(13).toDouble());
1003 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
1004 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
1006 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
1016 while(qprecursor_list.next());
1023 spectrum_description_list.push_back(spectrum_descr);
1027 QString local_filepath =
1032 for(
SpectrumDescr &spectrum_descr : spectrum_description_list)
1035 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1037 msrun_id, mass_spectrum_list, handler, spectrum_descr, ms_level);
1039 for(
auto &qualified_spectrum : mass_spectrum_list)
1046 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1048 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1").arg(local_filepath));
1061 map_function_generate_spectrum = [itself, msrun_id, pointer_handler, ms_level](
1063 -> std::vector<QualifiedMassSpectrum> {
1064 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1066 msrun_id, mass_spectrum_list, *pointer_handler, spectrum_descr, ms_level);
1069 return mass_spectrum_list;
1072 std::function<void(std::size_t,
1073 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list)>
1074 reduce_function_spectrum_list =
1075 [pointer_handler, local_filepath](
1076 std::size_t res,
const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list) {
1077 for(
auto &qualified_spectrum : qualified_spectrum_list)
1084 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1086 QObject::tr(
"reading TimsTOF job on %1 cancelled by the user")
1087 .arg(local_filepath));
1093 QFuture<std::size_t> res;
1094 res = QtConcurrent::mappedReduced<std::size_t>(spectrum_description_list.begin(),
1095 spectrum_description_list.end(),
1096 map_function_generate_spectrum,
1097 reduce_function_spectrum_list,
1098 QtConcurrent::OrderedReduce);
1099 res.waitForFinished();
1114 std::vector<QualifiedMassSpectrum> &qualified_mass_spectrum_list,
1117 unsigned int ms_level)
1120 qDebug() <<
" ms_level=" << ms_level;
1123 if((ms_level == 0) || (ms_level == 1))
1127 qualified_mass_spectrum_list.back(),
1131 if((ms_level == 0) || (ms_level == 2))
1135 qualified_mass_spectrum_list.back(),
1145 unsigned int ms_level)
1159 QSqlQuery qprecursor_list(qdb);
1160 qprecursor_list.exec(
1161 QString(
"SELECT DISTINCT "
1162 "PasefFrameMsMsInfo.Frame, "
1163 "PasefFrameMsMsInfo.ScanNumBegin, "
1164 "PasefFrameMsMsInfo.ScanNumEnd, "
1165 "PasefFrameMsMsInfo.IsolationMz, "
1166 "PasefFrameMsMsInfo.IsolationWidth, "
1167 "PasefFrameMsMsInfo.CollisionEnergy, "
1168 "PasefFrameMsMsInfo.Precursor, "
1170 "Precursors.LargestPeakMz, "
1171 "Precursors.AverageMz, "
1172 "Precursors.MonoisotopicMz, "
1173 "Precursors.Charge, "
1174 "Precursors.ScanNumber, "
1175 "Precursors.Intensity, "
1176 "Precursors.Parent "
1177 "FROM PasefFrameMsMsInfo "
1178 "INNER JOIN Precursors ON "
1179 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
1180 "ORDER BY PasefFrameMsMsInfo.Frame, PasefFrameMsMsInfo.ScanNumBegin ;"));
1181 if(qprecursor_list.lastError().isValid())
1184 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
1185 "command %2:\n%3\n%4\n%5")
1186 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf"))
1187 .arg(qprecursor_list.lastQuery())
1188 .arg(qdb.lastError().databaseText())
1189 .arg(qdb.lastError().driverText())
1190 .arg(qdb.lastError().nativeErrorCode()));
1196 qprecursor_list.last();
1199 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
1200 qprecursor_list.first();
1212 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1214 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1")
1215 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf")));
1218 tims_frame =
mp_timsDataOrigin->getTimsFrameBaseCstSPtrCached(current_frame.m_frameId);
1219 unsigned int tims_ms_level = tims_frame.get()->getMsLevel();
1221 if((ms_level != 0) && (ms_level != tims_ms_level))
1223 i += current_frame.m_scanCount;
1228 qDebug() <<
"want_binary_data=" << want_binary_data;
1229 if(want_binary_data)
1231 qDebug() <<
"bindec";
1232 tims_frame =
mp_timsDataOrigin->getTimsFrameCstSPtrCached(current_frame.m_frameId);
1235 bool possible_precursor =
false;
1236 if(tims_ms_level == 2)
1239 while(qprecursor_list.value(0).toULongLong() < current_frame.m_frameId)
1241 qprecursor_list.next();
1243 if(qprecursor_list.value(0).toULongLong() == current_frame.m_frameId)
1245 possible_precursor =
true;
1251 for(std::size_t scan_num = 0; scan_num < current_frame.m_scanCount; scan_num++)
1253 bool has_a_precursor =
false;
1254 if(possible_precursor)
1259 while(qprecursor_list.value(0).toULongLong() < current_frame.m_frameId)
1261 qprecursor_list.next();
1263 if(qprecursor_list.value(0).toULongLong() != current_frame.m_frameId)
1265 possible_precursor =
false;
1274 has_a_precursor =
true;
1286 spectrum_id.
setNativeId(QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1287 .arg(current_frame.m_frameId)
1293 mass_spectrum.
setMsLevel(tims_frame.get()->getMsLevel());
1294 mass_spectrum.
setRtInSeconds(tims_frame.get()->getRtInSeconds());
1297 tims_frame.get()->getDriftTimeInMilliseconds(scan_num));
1301 tims_frame.get()->getOneOverK0Transformation(scan_num));
1304 if(want_binary_data)
1309 tims_frame.get()->getMassSpectrumSPtr(scan_num));
1314 QObject::tr(
"ERROR in %1 (scan_num=%2 spectrum_index=%3):\n%4")
1318 .arg(error.
qwhat()));
1320 if(mass_spectrum.
size() > 0)
1339 std::size_t prec_spectrum_index =
1345 QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1348 .arg(prec_spectrum_index));
1373std::vector<std::size_t>
1377 std::vector<std::size_t> precursor_ids;
1378 std::vector<std::vector<double>> ids;
1381 QSqlQuery q(QString(
"SELECT Frames.Time, Precursors.MonoisotopicMz, Precursors.Charge, "
1382 "Precursors.Id, Frames.Id, PasefFrameMsMsInfo.ScanNumBegin, "
1383 "PasefFrameMsMsInfo.scanNumEnd "
1385 "INNER JOIN PasefFrameMsMsInfo ON Frames.Id = "
1386 "PasefFrameMsMsInfo.Frame "
1387 "INNER JOIN Precursors ON "
1388 "PasefFrameMsMsInfo.Precursor= Precursors.Id "
1389 "WHERE Precursors.Charge == %1 "
1390 "AND Precursors.MonoisotopicMz > %2 -0.01 "
1391 "AND Precursors.MonoisotopicMz < %2 +0.01 "
1392 "AND Frames.Time >= %3 -1 "
1393 "AND Frames.Time < %3 +1; ")
1398 if(q.lastError().isValid())
1402 QObject::tr(
"ERROR in TIMS sqlite database file %1, database name %2, "
1404 "command %3:\n%4\n%5\n%6")
1405 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf"))
1406 .arg(qdb.databaseName())
1408 .arg(qdb.lastError().databaseText())
1409 .arg(qdb.lastError().driverText())
1410 .arg(qdb.lastError().nativeErrorCode()));
1417 std::vector<double> sql_values;
1418 sql_values.push_back(q.value(4).toDouble());
1419 sql_values.push_back(q.value(3).toDouble());
1420 sql_values.push_back(q.value(5).toDouble());
1421 sql_values.push_back(q.value(6).toDouble());
1422 sql_values.push_back(q.value(1).toDouble());
1424 ids.push_back(sql_values);
1427 if(std::find(precursor_ids.begin(), precursor_ids.end(), q.value(3).toDouble()) ==
1428 precursor_ids.end())
1430 precursor_ids.push_back(q.value(3).toDouble());
1434 if(precursor_ids.size() > 1)
1438 if(precursor_ids.size() > 1)
1442 return precursor_ids;
1446 return precursor_ids;
1450std::vector<std::size_t>
1453 std::vector<std::size_t> precursor_id;
1454 for(std::vector<double> index : ids)
1456 auto coordinate =
mp_timsDataOrigin->getScanCoordinatesByGlobalScanIndex(index[0]);
1459 tims_frame =
mp_timsDataOrigin->getTimsFrameBaseCstSPtrCached(coordinate.first);
1461 double bko = tims_frame.get()->getOneOverK0Transformation(index[2]);
1462 double eko = tims_frame.get()->getOneOverK0Transformation(index[3]);
1465 double mean_ko = (bko + eko) / 2;
1467 if(mean_ko > ko_value - 0.1 && mean_ko < ko_value + 0.1)
1469 precursor_id.push_back(index[1]);
1472 return precursor_id;
1475std::vector<std::size_t>
1478 std::vector<std::size_t> best_precursor;
1479 double best_value = 1;
1481 int best_val_position = 0;
1483 for(std::vector<double> values : ids)
1485 double new_val = abs(mz_value - values[4]);
1486 if(new_val < best_value)
1488 best_value = new_val;
1489 best_val_position = count;
1493 best_precursor.push_back(ids[best_val_position][1]);
1494 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