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