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")
745 raw_spectrum.
clear();
749 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id <<
" tims_id=" << tims_id
750 << (std::size_t)QThread::currentThreadId();
754 qDebug() <<
"bindec";
761 qDebug() << (std::size_t)QThread::currentThreadId();
785 if(previous_frame.get() !=
nullptr)
787 if(previous_frame.get()->hasSameCalibrationData(*tims_frame.get()))
793 QObject::tr(
"ERROR in %1 %2, different calibration data "
794 "between frame id %3 and frame id %4")
797 .arg(previous_frame.get()->getId())
798 .arg(tims_frame.get()->getId()));
801 qDebug() << (std::size_t)QThread::currentThreadId();
803 tims_frame.get()->combineScansInTofIndexIntensityMap(
805 qDebug() << (std::size_t)QThread::currentThreadId();
807 previous_frame = tims_frame;
809 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id
811 << (std::size_t)QThread::currentThreadId();
815 QObject::tr(
"ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
821 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
830 trace = tims_frame.get()->getTraceFromTofIndexIntensityMap(raw_spectrum);
834 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id <<
" " << trace.size()
835 <<
" " << (std::size_t)QThread::currentThreadId();
849 qDebug() <<
" precursor_index=" << spectrum_descr.
precursor_id;
866 throw PappsoException(QObject::tr(
"ERROR in %1 (ms2_index=%2 precursor_index=%3):\n%4")
870 .arg(error.
qwhat()));
872 catch(std::exception &error)
874 qDebug() << QString(
"Failure %1 ").arg(error.
what());
894 unsigned int ms_level)
896 qDebug() <<
" ms_level=" << ms_level;
899 QSqlQuery qprecursor_list(qdb);
900 qprecursor_list.exec(
901 QString(
"SELECT PasefFrameMsMsInfo.Frame, "
902 "PasefFrameMsMsInfo.ScanNumBegin, "
903 "PasefFrameMsMsInfo.ScanNumEnd, "
904 "PasefFrameMsMsInfo.IsolationMz, "
905 "PasefFrameMsMsInfo.IsolationWidth, "
906 "PasefFrameMsMsInfo.CollisionEnergy, "
907 "PasefFrameMsMsInfo.Precursor, "
909 "Precursors.LargestPeakMz, "
910 "Precursors.AverageMz, "
911 "Precursors.MonoisotopicMz, "
912 "Precursors.Charge, "
913 "Precursors.ScanNumber, "
914 "Precursors.Intensity, "
916 "FROM PasefFrameMsMsInfo "
917 "INNER JOIN Precursors ON "
918 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
919 "ORDER BY PasefFrameMsMsInfo.Precursor, PasefFrameMsMsInfo.Frame ;"));
920 if(qprecursor_list.lastError().isValid())
924 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
925 "command %2:\n%3\n%4\n%5")
927 .arg(qprecursor_list.lastQuery())
928 .arg(qdb.lastError().databaseText())
929 .arg(qdb.lastError().driverText())
930 .arg(qdb.lastError().nativeErrorCode()));
934 qDebug() <<
"qprecursor_list.size()=" << qprecursor_list.size();
935 qDebug() << QObject::tr(
936 "TIMS sqlite database file %1, executing SQL "
937 "command %2:\n%3\n%4\n%5")
939 .arg(qprecursor_list.lastQuery())
940 .arg(qdb.lastError().databaseText())
941 .arg(qdb.lastError().driverText())
942 .arg(qdb.lastError().nativeErrorCode());
944 qDebug() <<
"qprecursor_list.isActive()=" << qprecursor_list.isActive();
945 qDebug() <<
"qprecursor_list.isSelect()=" << qprecursor_list.isSelect();
957 qprecursor_list.last();
960 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
961 qprecursor_list.first();
962 std::vector<TimsDdaPrecursors::SpectrumDescr> spectrum_description_list;
969 if(spectrum_descr.
precursor_id != (std::size_t)qprecursor_list.value(6).toLongLong())
974 spectrum_description_list.push_back(spectrum_descr);
980 qDebug() <<
" qprecursor_list.value(6).toLongLong() ="
981 << qprecursor_list.value(6).toLongLong();
982 spectrum_descr.
precursor_id = (std::size_t)qprecursor_list.value(6).toLongLong();
983 qDebug() <<
" spectrum_descr.precursor_id =" << spectrum_descr.
precursor_id;
984 qDebug() <<
" cumul tims frame:" << qprecursor_list.value(0).toLongLong();
985 spectrum_descr.
tims_frame_list.push_back(qprecursor_list.value(0).toLongLong());
986 qDebug() <<
" first =" << first;
995 qprecursor_list.value(11).toInt(),
996 qprecursor_list.value(13).toDouble());
1005 spectrum_descr.
isolationMz = qprecursor_list.value(3).toDouble();
1006 spectrum_descr.
isolationWidth = qprecursor_list.value(4).toDouble();
1008 spectrum_descr.
parent_frame = qprecursor_list.value(14).toLongLong();
1018 while(qprecursor_list.next());
1025 spectrum_description_list.push_back(spectrum_descr);
1029 QString local_filepath =
1034 for(
SpectrumDescr &spectrum_descr : spectrum_description_list)
1037 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1039 msrun_id, mass_spectrum_list, handler, spectrum_descr, ms_level);
1041 for(
auto &qualified_spectrum : mass_spectrum_list)
1048 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1050 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1").arg(local_filepath));
1063 map_function_generate_spectrum = [itself, msrun_id, pointer_handler, ms_level](
1065 -> std::vector<QualifiedMassSpectrum> {
1066 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1068 msrun_id, mass_spectrum_list, *pointer_handler, spectrum_descr, ms_level);
1071 return mass_spectrum_list;
1074 std::function<void(std::size_t,
1075 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list)>
1076 reduce_function_spectrum_list =
1077 [pointer_handler, local_filepath](
1078 std::size_t res,
const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list) {
1079 for(
auto &qualified_spectrum : qualified_spectrum_list)
1086 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1088 QObject::tr(
"reading TimsTOF job on %1 cancelled by the user")
1089 .arg(local_filepath));
1095 QFuture<std::size_t> res;
1096 res = QtConcurrent::mappedReduced<std::size_t>(spectrum_description_list.begin(),
1097 spectrum_description_list.end(),
1098 map_function_generate_spectrum,
1099 reduce_function_spectrum_list,
1100 QtConcurrent::OrderedReduce);
1101 res.waitForFinished();
1116 std::vector<QualifiedMassSpectrum> &qualified_mass_spectrum_list,
1119 unsigned int ms_level)
1122 qDebug() <<
" ms_level=" << ms_level;
1125 if((ms_level == 0) || (ms_level == 1))
1129 qualified_mass_spectrum_list.back(),
1133 if((ms_level == 0) || (ms_level == 2))
1137 qualified_mass_spectrum_list.back(),
1147 unsigned int ms_level)
1161 QSqlQuery qprecursor_list(qdb);
1162 qprecursor_list.exec(
1163 QString(
"SELECT DISTINCT "
1164 "PasefFrameMsMsInfo.Frame, "
1165 "PasefFrameMsMsInfo.ScanNumBegin, "
1166 "PasefFrameMsMsInfo.ScanNumEnd, "
1167 "PasefFrameMsMsInfo.IsolationMz, "
1168 "PasefFrameMsMsInfo.IsolationWidth, "
1169 "PasefFrameMsMsInfo.CollisionEnergy, "
1170 "PasefFrameMsMsInfo.Precursor, "
1172 "Precursors.LargestPeakMz, "
1173 "Precursors.AverageMz, "
1174 "Precursors.MonoisotopicMz, "
1175 "Precursors.Charge, "
1176 "Precursors.ScanNumber, "
1177 "Precursors.Intensity, "
1178 "Precursors.Parent "
1179 "FROM PasefFrameMsMsInfo "
1180 "INNER JOIN Precursors ON "
1181 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
1182 "ORDER BY PasefFrameMsMsInfo.Frame, PasefFrameMsMsInfo.ScanNumBegin ;"));
1183 if(qprecursor_list.lastError().isValid())
1186 QObject::tr(
"ERROR in TIMS sqlite database file %1, executing SQL "
1187 "command %2:\n%3\n%4\n%5")
1188 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf"))
1189 .arg(qprecursor_list.lastQuery())
1190 .arg(qdb.lastError().databaseText())
1191 .arg(qdb.lastError().driverText())
1192 .arg(qdb.lastError().nativeErrorCode()));
1198 qprecursor_list.last();
1201 qDebug() <<
"qprecursor_list.at()=" << qprecursor_list.at();
1202 qprecursor_list.first();
1214 qDebug() <<
"The operation was cancelled. Breaking the loop.";
1216 QObject::tr(
"reading TimsTOF job cancelled by the user :\n%1")
1217 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf")));
1220 tims_frame =
mp_timsDataOrigin->getTimsFrameBaseCstSPtrCached(current_frame.m_frameId);
1221 unsigned int tims_ms_level = tims_frame.get()->getMsLevel();
1223 if((ms_level != 0) && (ms_level != tims_ms_level))
1225 i += current_frame.m_scanCount;
1230 qDebug() <<
"want_binary_data=" << want_binary_data;
1231 if(want_binary_data)
1233 qDebug() <<
"bindec";
1234 tims_frame =
mp_timsDataOrigin->getTimsFrameCstSPtrCached(current_frame.m_frameId);
1237 bool possible_precursor =
false;
1238 if(tims_ms_level == 2)
1241 while(qprecursor_list.value(0).toULongLong() < current_frame.m_frameId)
1243 qprecursor_list.next();
1245 if(qprecursor_list.value(0).toULongLong() == current_frame.m_frameId)
1247 possible_precursor =
true;
1253 for(std::size_t scan_num = 0; scan_num < current_frame.m_scanCount; scan_num++)
1255 bool has_a_precursor =
false;
1256 if(possible_precursor)
1261 while(qprecursor_list.value(0).toULongLong() < current_frame.m_frameId)
1263 qprecursor_list.next();
1265 if(qprecursor_list.value(0).toULongLong() != current_frame.m_frameId)
1267 possible_precursor =
false;
1276 has_a_precursor =
true;
1288 spectrum_id.
setNativeId(QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1289 .arg(current_frame.m_frameId)
1295 mass_spectrum.
setMsLevel(tims_frame.get()->getMsLevel());
1296 mass_spectrum.
setRtInSeconds(tims_frame.get()->getRtInSeconds());
1299 tims_frame.get()->getDriftTimeInMilliseconds(scan_num));
1303 tims_frame.get()->getOneOverK0Transformation(scan_num));
1306 if(want_binary_data)
1311 tims_frame.get()->getMassSpectrumSPtr(scan_num));
1316 QObject::tr(
"ERROR in %1 (scan_num=%2 spectrum_index=%3):\n%4")
1320 .arg(error.
qwhat()));
1322 if(mass_spectrum.
size() > 0)
1341 std::size_t prec_spectrum_index =
1347 QString(
"frame_id=%1 scan_index=%2 global_scan_index=%3")
1350 .arg(prec_spectrum_index));
1379std::vector<std::size_t>
1383 std::vector<std::size_t> precursor_ids;
1384 std::vector<std::vector<double>> ids;
1387 QSqlQuery q(QString(
"SELECT Frames.Time, Precursors.MonoisotopicMz, Precursors.Charge, "
1388 "Precursors.Id, Frames.Id, PasefFrameMsMsInfo.ScanNumBegin, "
1389 "PasefFrameMsMsInfo.scanNumEnd "
1391 "INNER JOIN PasefFrameMsMsInfo ON Frames.Id = "
1392 "PasefFrameMsMsInfo.Frame "
1393 "INNER JOIN Precursors ON "
1394 "PasefFrameMsMsInfo.Precursor= Precursors.Id "
1395 "WHERE Precursors.Charge == %1 "
1396 "AND Precursors.MonoisotopicMz > %2 -0.01 "
1397 "AND Precursors.MonoisotopicMz < %2 +0.01 "
1398 "AND Frames.Time >= %3 -1 "
1399 "AND Frames.Time < %3 +1; ")
1404 if(q.lastError().isValid())
1408 QObject::tr(
"ERROR in TIMS sqlite database file %1, database name %2, "
1410 "command %3:\n%4\n%5\n%6")
1411 .arg(
mp_timsDataOrigin->getTimsDataDirectory().absoluteFilePath(
"analysis.tdf"))
1412 .arg(qdb.databaseName())
1414 .arg(qdb.lastError().databaseText())
1415 .arg(qdb.lastError().driverText())
1416 .arg(qdb.lastError().nativeErrorCode()));
1423 std::vector<double> sql_values;
1424 sql_values.push_back(q.value(4).toDouble());
1425 sql_values.push_back(q.value(3).toDouble());
1426 sql_values.push_back(q.value(5).toDouble());
1427 sql_values.push_back(q.value(6).toDouble());
1428 sql_values.push_back(q.value(1).toDouble());
1430 ids.push_back(sql_values);
1433 if(std::find(precursor_ids.begin(), precursor_ids.end(), q.value(3).toDouble()) ==
1434 precursor_ids.end())
1436 precursor_ids.push_back(q.value(3).toDouble());
1440 if(precursor_ids.size() > 1)
1444 if(precursor_ids.size() > 1)
1448 return precursor_ids;
1452 return precursor_ids;
1456std::vector<std::size_t>
1459 std::vector<std::size_t> precursor_id;
1460 for(std::vector<double> index : ids)
1462 auto coordinate =
mp_timsDataOrigin->getScanCoordinatesByGlobalScanIndex(index[0]);
1465 tims_frame =
mp_timsDataOrigin->getTimsFrameBaseCstSPtrCached(coordinate.first);
1467 double bko = tims_frame.get()->getOneOverK0Transformation(index[2]);
1468 double eko = tims_frame.get()->getOneOverK0Transformation(index[3]);
1471 double mean_ko = (bko + eko) / 2;
1473 if(mean_ko > ko_value - 0.1 && mean_ko < ko_value + 0.1)
1475 precursor_id.push_back(index[1]);
1478 return precursor_id;
1481std::vector<std::size_t>
1484 std::vector<std::size_t> best_precursor;
1485 double best_value = 1;
1487 int best_val_position = 0;
1489 for(std::vector<double> values : ids)
1491 double new_val = abs(mz_value - values[4]);
1492 if(new_val < best_value)
1494 best_value = new_val;
1495 best_val_position = count;
1499 best_precursor.push_back(ids[best_val_position][1]);
1500 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
@ IsolationWindowTargetMz
Isolation m/z value isolation window target m/z (thomson).
@ IsolationWindowUpperOffset
isolation window upper offset (thomson)
@ CollisionEnergy
Bruker's timsTOF collision energy.
@ IonMobOneOverK0Begin
1/K0 range's begin value
@ IonMobOneOverK0End
1/K0 range's end value
@ IsolationWindowLowerOffset
isolation window lower offset (thomson)
@ 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