libpappsomspp
Library for mass spectrometry
pappso::TimsData Class Reference

#include <timsdata.h>

Public Member Functions

 TimsData (QDir timsDataDirectory)
 build using the tims data directory More...
 
 TimsData (const TimsData &other)
 
 ~TimsData ()
 
pappso::MassSpectrumCstSPtr getMassSpectrumCstSPtrByRawIndex (std::size_t raw_index)
 get a mass spectrum given its spectrum index More...
 
pappso::MassSpectrumCstSPtr getMassSpectrumCstSPtr (std::size_t timsId, std::size_t scanNum)
 get a mass spectrum given the tims frame database id and scan number within tims frame More...
 
std::size_t getTotalNumberOfScans () const
 get the total number of scans More...
 
std::size_t getTotalNumberOfPrecursors () const
 get the number of precursors analyzes by PASEF More...
 
std::vector< std::size_t > getPrecursorsFromMzRtCharge (int charge, double mz_val, double rt_sec, double k0)
 guess possible precursor ids given a charge, m/z, retention time and k0 More...
 
unsigned int getMsLevelBySpectrumIndex (std::size_t spectrum_index)
 
QualifiedMassSpectrum getQualifiedMassSpectrumByRawIndex (std::size_t spectrum_index, bool want_binary_data)
 
void getQualifiedMs2MassSpectrumByPrecursorId (QualifiedMassSpectrum &mass_spectrum, std::size_t ms2_index, std::size_t precursor_index, bool want_binary_data)
 
QualifiedMassSpectrum getQualifiedMs1MassSpectrumByPrecursorId (std::size_t ms2_index, std::size_t precursor_index, bool want_binary_data)
 
void setMs2FilterCstSPtr (pappso::FilterInterfaceCstSPtr &filter)
 filter interface to apply just after raw MS2 specturm extraction the filter can be a list of filters inside a FilterSuite object More...
 
void setMs1FilterCstSPtr (pappso::FilterInterfaceCstSPtr &filter)
 filter interface to apply just after raw MS1 specturm extraction the filter can be a list of filters inside a FilterSuite object More...
 
void setMs2BuiltinCentroid (bool centroid)
 enable or disable simple centroid filter on raw tims data for MS2 More...
 
bool getMs2BuiltinCentroid () const
 tells if simple centroid filter on raw tims data for MS2 is enabled or not More...
 
std::vector< std::size_t > getTimsMS1FrameIdRange (double rt_begin, double rt_end) const
 
TimsFrameCstSPtr getTimsFrameCstSPtr (std::size_t timsId) const
 get a Tims frame with his database ID More...
 

Private Member Functions

std::pair< std::size_t, std::size_t > getScanCoordinateFromRawIndex (std::size_t spectrum_index) const
 
std::size_t getRawIndexFromCoordinate (std::size_t frame_id, std::size_t scan_num) const
 
QSqlDatabase openDatabaseConnection () const
 
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtr (std::size_t timsId) const
 get a Tims frame base (no binary data file access) with his database ID More...
 
TimsFrameCstSPtr getTimsFrameCstSPtrCached (std::size_t timsId)
 get a Tims frame with his database ID but look in the cache first More...
 
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached (std::size_t timsId)
 
std::vector< TimsXicStructureextractXicListByPrecursorIds (const std::vector< std::size_t > &precursor_id_list, PrecisionPtr precision_ptr, XicExtractMethod xicExtractMethod, double rtRange) const
 extract a list of XICs from Tims data More...
 
std::vector< std::size_t > getMatchPrecursorIdByKo (std::vector< std::vector< double >> ids, double ko_value)
 
std::vector< std::size_t > getClosestPrecursorIdByMz (std::vector< std::vector< double >> ids, double mz_value)
 

Private Attributes

QDir m_timsDataDirectory
 
TimsBinDecmpa_timsBinDec = nullptr
 
std::size_t m_totalNumberOfScans
 
std::size_t m_totalNumberOfPrecursors
 
std::size_t m_cacheSize = 60
 
std::deque< TimsFrameCstSPtrm_timsFrameCache
 
std::deque< TimsFrameBaseCstSPtrm_timsFrameBaseCache
 
pappso::FilterInterfaceCstSPtr mcsp_ms2Filter = nullptr
 
pappso::FilterInterfaceCstSPtr mcsp_ms1Filter = nullptr
 
bool m_builtinMs2Centroid = true
 enable builtin centroid on raw tims integers by default More...
 
QMutex m_mutex
 

Detailed Description

Todo:
write docs

Definition at line 87 of file timsdata.h.

Constructor & Destructor Documentation

◆ TimsData() [1/2]

TimsData::TimsData ( QDir  timsDataDirectory)

build using the tims data directory

Definition at line 45 of file timsdata.cpp.

46  : m_timsDataDirectory(timsDataDirectory)
47 {
48 
49  qDebug();
50  if(!m_timsDataDirectory.exists())
51  {
52  throw PappsoException(
53  QObject::tr("ERROR TIMS data directory %1 not found")
54  .arg(m_timsDataDirectory.absolutePath()));
55  }
56 
57  if(!QFileInfo(m_timsDataDirectory.absoluteFilePath("analysis.tdf")).exists())
58  {
59 
60  throw PappsoException(
61  QObject::tr("ERROR TIMS data directory, %1 sqlite file not found")
62  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf")));
63  }
64 
65  // Open the database
66  QSqlDatabase qdb = openDatabaseConnection();
67 
68 
69  QSqlQuery q(qdb);
70  if(!q.exec("select Key, Value from GlobalMetadata where "
71  "Key='TimsCompressionType';"))
72  {
73 
74  qDebug();
75  throw PappsoException(
76  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
77  "command %2:\n%3\n%4\n%5")
78  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
79  .arg(q.lastQuery())
80  .arg(q.lastError().databaseText())
81  .arg(q.lastError().driverText())
82  .arg(q.lastError().nativeErrorCode()));
83  }
84 
85 
86  int compression_type = 0;
87  if(q.next())
88  {
89  compression_type = q.value(1).toInt();
90  }
91  qDebug() << " compression_type=" << compression_type;
93  QFileInfo(m_timsDataDirectory.absoluteFilePath("analysis.tdf_bin")),
94  compression_type);
95 
96 
97  // get number of precursors
98  if(!q.exec("SELECT COUNT( DISTINCT Id) FROM Precursors;"))
99  {
100  qDebug();
101  throw PappsoException(
102  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
103  "command %2:\n%3\n%4\n%5")
104  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
105  .arg(q.lastQuery())
106  .arg(qdb.lastError().databaseText())
107  .arg(qdb.lastError().driverText())
108  .arg(qdb.lastError().nativeErrorCode()));
109  }
110  if(q.next())
111  {
112  m_totalNumberOfPrecursors = q.value(0).toLongLong();
113  }
114 
115 
116  // get number of scans
117  if(!q.exec("SELECT SUM(NumScans) FROM Frames"))
118  {
119  qDebug();
120  throw PappsoException(
121  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
122  "command %2:\n%3\n%4\n%5")
123  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
124  .arg(q.lastQuery())
125  .arg(qdb.lastError().databaseText())
126  .arg(qdb.lastError().driverText())
127  .arg(qdb.lastError().nativeErrorCode()));
128  }
129  if(q.next())
130  {
131  m_totalNumberOfScans = q.value(0).toLongLong();
132  }
133 
134  /*
135  std::shared_ptr<FilterTriangle> ms2filter =
136  std::make_shared<FilterTriangle>();
137  ms2filter.get()->setTriangleSlope(50, 0.02);
138  mcsp_ms2Filter = ms2filter;
139 */
140 
141 
142  std::shared_ptr<pappso::FilterPseudoCentroid> ms2filter =
143  std::make_shared<pappso::FilterPseudoCentroid>(35000, 5, 0.5, 0.1);
144  mcsp_ms2Filter = ms2filter;
145 
146 
147  std::shared_ptr<FilterTriangle> ms1filter =
148  std::make_shared<FilterTriangle>();
149  ms1filter.get()->setTriangleSlope(50, 0.01);
150  mcsp_ms1Filter = ms1filter;
151 }

References m_timsDataDirectory, m_totalNumberOfPrecursors, m_totalNumberOfScans, mcsp_ms1Filter, mcsp_ms2Filter, mpa_timsBinDec, openDatabaseConnection(), and pappso::FilterTriangle::setTriangleSlope().

◆ TimsData() [2/2]

pappso::TimsData::TimsData ( const TimsData other)

Copy constructor

Parameters
otherTODO

◆ ~TimsData()

TimsData::~TimsData ( )

Destructor

Definition at line 189 of file timsdata.cpp.

190 {
191  // m_qdb.close();
192  if(mpa_timsBinDec != nullptr)
193  {
194  delete mpa_timsBinDec;
195  }
196 }

References mpa_timsBinDec.

Member Function Documentation

◆ extractXicListByPrecursorIds()

std::vector< TimsXicStructure > TimsData::extractXicListByPrecursorIds ( const std::vector< std::size_t > &  precursor_id_list,
PrecisionPtr  precision_ptr,
XicExtractMethod  xicExtractMethod,
double  rtRange 
) const
private

extract a list of XICs from Tims data

Parameters
precursor_id_listthe list of precursors to extract
precision_ptrprecision to compute the mz range to extract for each precursor mass
xicExtractMethodXIC extraction method (sum or max) to use
rtRangeretention time range in seconds to extract XIC from rtTarget
  • rtRange to rtTarget + rtRange
Returns
the corresponding XIC list as a specific structure

Definition at line 1262 of file timsdata.cpp.

1267 {
1268 
1269  qDebug();
1270  std::vector<TimsXicStructure> xic_list;
1271 
1272  try
1273  {
1274  QSqlDatabase qdb = openDatabaseConnection();
1275 
1276  for(auto precursor_id : precursor_id_list)
1277  {
1278  QSqlQuery q = qdb.exec(
1279  QString("SELECT Frames.Time, "
1280  "PasefFrameMsMsInfo.Frame,PasefFrameMsMsInfo.ScanNumBegin,"
1281  "PasefFrameMsMsInfo.ScanNumEnd, Precursors.MonoisotopicMz, "
1282  "Precursors.Charge FROM "
1283  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
1284  "PasefFrameMsMsInfo.Precursor=Precursors.Id INNER JOIN "
1285  "Frames ON PasefFrameMsMsInfo.Frame=Frames.Id where "
1286  "Precursors.Id=%1;")
1287  .arg(precursor_id));
1288  if(q.lastError().isValid())
1289  {
1290  qDebug();
1291  throw PappsoException(
1292  QObject::tr(
1293  "ERROR in TIMS sqlite database file %1, executing SQL "
1294  "command %2:\n%3\n%4\n%5")
1295  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1296  .arg(q.lastQuery())
1297  .arg(qdb.lastError().databaseText())
1298  .arg(qdb.lastError().driverText())
1299  .arg(qdb.lastError().nativeErrorCode()));
1300  }
1301 
1302  while(q.next())
1303  {
1304  // Frame, ScanNumBegin, ScanNumEnd, IsolationMz, ColliqionEnergy,
1305  // Precursor
1306  // Id, LargestPeakMz, AverageMz, MonoisotopicMz, Charge,
1307  // ScanNumber, Intensity, Parent
1308  TimsXicStructure xic_structure;
1309 
1310  xic_structure.precursorId = precursor_id;
1311  xic_structure.mzRange =
1312  MzRange(q.value(4).toDouble(), precision_ptr);
1313  xic_structure.scanNumBegin = q.value(2).toUInt();
1314  xic_structure.scanNumEnd = q.value(3).toUInt();
1315  xic_structure.rtTarget = q.value(0).toDouble();
1316  // xic_structure.charge = q.value(5).toUInt();
1317 
1318  xic_list.push_back(xic_structure);
1319  }
1320  }
1321  qDebug();
1322 
1323  TimsXicExtractorInterface *extractor_p = new TimsDirectXicExtractor(this);
1324  extractor_p->setXicExtractMethod(xicExtractMethod);
1325  extractor_p->extractTimsXicList(xic_list, rtRange);
1326  }
1327  catch(std::exception &error)
1328  {
1329  qDebug() << QString("Failure %1 ").arg(error.what());
1330  }
1331 
1332  qDebug();
1333  return xic_list;
1334 }

References pappso::TimsXicExtractorInterface::extractTimsXicList(), m_timsDataDirectory, pappso::TimsXicStructure::mzRange, openDatabaseConnection(), pappso::TimsXicStructure::precursorId, pappso::TimsXicStructure::rtTarget, pappso::TimsXicStructure::scanNumBegin, pappso::TimsXicStructure::scanNumEnd, and pappso::TimsXicExtractorInterface::setXicExtractMethod().

◆ getClosestPrecursorIdByMz()

std::vector< std::size_t > TimsData::getClosestPrecursorIdByMz ( std::vector< std::vector< double >>  ids,
double  mz_value 
)
private
Todo:
documentation

Definition at line 653 of file timsdata.cpp.

655 {
656  std::vector<std::size_t> best_precursor;
657  double best_value = 1;
658  int count = 1;
659  int best_val_position = 0;
660 
661  for(std::vector<double> values : ids)
662  {
663  double new_val = abs(mz_value - values[4]);
664  if(new_val < best_value)
665  {
666  best_value = new_val;
667  best_val_position = count;
668  }
669  count++;
670  }
671  best_precursor.push_back(ids[best_val_position][1]);
672  return best_precursor;
673 }

Referenced by getPrecursorsFromMzRtCharge().

◆ getMassSpectrumCstSPtr()

pappso::MassSpectrumCstSPtr TimsData::getMassSpectrumCstSPtr ( std::size_t  timsId,
std::size_t  scanNum 
)

get a mass spectrum given the tims frame database id and scan number within tims frame

Definition at line 527 of file timsdata.cpp.

528 {
530 
531  return frame->getMassSpectrumCstSPtr(scanNum);
532 }

References getTimsFrameCstSPtrCached().

Referenced by getMassSpectrumCstSPtrByRawIndex().

◆ getMassSpectrumCstSPtrByRawIndex()

pappso::MassSpectrumCstSPtr TimsData::getMassSpectrumCstSPtrByRawIndex ( std::size_t  raw_index)

get a mass spectrum given its spectrum index

Parameters
raw_indexa number begining at 0, corresponding to a Tims Scan in the order they lies in the binary data file

Definition at line 305 of file timsdata.cpp.

306 {
307 
308  auto coordinate = getScanCoordinateFromRawIndex(raw_index);
309  return getMassSpectrumCstSPtr(coordinate.first, coordinate.second);
310 }

References getMassSpectrumCstSPtr(), and getScanCoordinateFromRawIndex().

Referenced by pappso::TimsMsRunReader::massSpectrumCstSPtr().

◆ getMatchPrecursorIdByKo()

std::vector< std::size_t > TimsData::getMatchPrecursorIdByKo ( std::vector< std::vector< double >>  ids,
double  ko_value 
)
private

Definition at line 627 of file timsdata.cpp.

629 {
630  std::vector<std::size_t> precursor_id;
631  for(std::vector<double> index : ids)
632  {
633  auto coordinate = getScanCoordinateFromRawIndex(index[0]);
634 
635  TimsFrameBaseCstSPtr tims_frame;
636  tims_frame = getTimsFrameBaseCstSPtrCached(coordinate.first);
637 
638  double bko = tims_frame.get()->getOneOverK0Transformation(index[2]);
639  double eko = tims_frame.get()->getOneOverK0Transformation(index[3]);
640 
641  qInfo() << "diff" << (bko + eko) / 2;
642  double mean_ko = (bko + eko) / 2;
643 
644  if(mean_ko > ko_value - 0.1 && mean_ko < ko_value + 0.1)
645  {
646  precursor_id.push_back(index[1]);
647  }
648  }
649  return precursor_id;
650 }

References getScanCoordinateFromRawIndex(), and getTimsFrameBaseCstSPtrCached().

◆ getMs2BuiltinCentroid()

bool TimsData::getMs2BuiltinCentroid ( ) const

tells if simple centroid filter on raw tims data for MS2 is enabled or not

Definition at line 205 of file timsdata.cpp.

206 {
207  return m_builtinMs2Centroid;
208 }

References m_builtinMs2Centroid.

◆ getMsLevelBySpectrumIndex()

unsigned int TimsData::getMsLevelBySpectrumIndex ( std::size_t  spectrum_index)

Definition at line 677 of file timsdata.cpp.

678 {
679  auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
680  auto tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
681  return tims_frame.get()->getMsLevel();
682 }

References getScanCoordinateFromRawIndex(), and getTimsFrameCstSPtrCached().

Referenced by pappso::TimsMsRunReader::readSpectrumCollection().

◆ getPrecursorsFromMzRtCharge()

std::vector< std::size_t > TimsData::getPrecursorsFromMzRtCharge ( int  charge,
double  mz_val,
double  rt_sec,
double  k0 
)

guess possible precursor ids given a charge, m/z, retention time and k0

Returns
a list of possible precursor ids

Definition at line 548 of file timsdata.cpp.

552 {
553  std::vector<std::size_t> precursor_ids;
554  std::vector<std::vector<double>> ids;
555 
556  QSqlDatabase qdb = openDatabaseConnection();
557  QSqlQuery q = qdb.exec(
558  QString(
559  "SELECT Frames.time, Precursors.MonoisotopicMz, Precursors.Charge, "
560  "Precursors.Id, Frames.Id, PasefFrameMsMsInfo.ScanNumBegin, "
561  "PasefFrameMsMsInfo.scanNumEnd "
562  "FROM Frames "
563  "INNER JOIN PasefFrameMsMsInfo ON Frames.Id = PasefFrameMsMsInfo.Frame "
564  "INNER JOIN Precursors ON PasefFrameMsMsInfo.Precursor = Precursors.Id "
565  "WHERE Precursors.Charge == %1 "
566  "AND Precursors.MonoisotopicMz > %2 -0.01 "
567  "AND Precursors.MonoisotopicMz < %2 +0.01 "
568  "AND Frames.Time >= %3 "
569  "AND Frames.Time < %3 +1; ")
570  .arg(charge)
571  .arg(mz_val)
572  .arg(rt_sec));
573  if(q.lastError().isValid())
574  {
575 
576  throw PappsoException(
577  QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
578  "executing SQL "
579  "command %3:\n%4\n%5\n%6")
580  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
581  .arg(qdb.databaseName())
582  .arg(q.lastQuery())
583  .arg(qdb.lastError().databaseText())
584  .arg(qdb.lastError().driverText())
585  .arg(qdb.lastError().nativeErrorCode()));
586  }
587  while(q.next())
588  {
589  qInfo() << q.value(0).toDouble() << q.value(1).toDouble()
590  << q.value(2).toDouble() << q.value(3).toDouble();
591 
592  std::vector<double> sql_values;
593  sql_values.push_back(q.value(4).toDouble()); // frame id
594  sql_values.push_back(q.value(3).toDouble()); // precursor id
595  sql_values.push_back(q.value(5).toDouble()); // scan num begin
596  sql_values.push_back(q.value(6).toDouble()); // scan num end
597  sql_values.push_back(q.value(1).toDouble()); // mz_value
598 
599  ids.push_back(sql_values);
600 
601 
602  if(std::find(precursor_ids.begin(),
603  precursor_ids.end(),
604  q.value(3).toDouble()) == precursor_ids.end())
605  {
606  precursor_ids.push_back(q.value(3).toDouble());
607  }
608  }
609 
610  if(precursor_ids.size() > 1)
611  {
612  // std::vector<std::size_t> precursor_ids_ko =
613  // getMatchPrecursorIdByKo(ids, values[3]);
614  if(precursor_ids.size() > 1)
615  {
616  precursor_ids = getClosestPrecursorIdByMz(ids, k0);
617  }
618  return precursor_ids;
619  }
620  else
621  {
622  return precursor_ids;
623  }
624 }

References getClosestPrecursorIdByMz(), m_timsDataDirectory, and openDatabaseConnection().

◆ getQualifiedMassSpectrumByRawIndex()

QualifiedMassSpectrum TimsData::getQualifiedMassSpectrumByRawIndex ( std::size_t  spectrum_index,
bool  want_binary_data 
)

Definition at line 686 of file timsdata.cpp.

688 {
689  auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
690  TimsFrameBaseCstSPtr tims_frame;
691  if(want_binary_data)
692  {
693  tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
694  }
695  else
696  {
697  tims_frame = getTimsFrameBaseCstSPtrCached(coordinate.first);
698  }
699  QualifiedMassSpectrum mass_spectrum;
700  MassSpectrumId spectrum_id;
701 
702  spectrum_id.setSpectrumIndex(spectrum_index);
703  spectrum_id.setNativeId(QString("frame=%1 scan=%2 index=%3")
704  .arg(coordinate.first)
705  .arg(coordinate.second)
706  .arg(spectrum_index));
707 
708  mass_spectrum.setMassSpectrumId(spectrum_id);
709 
710  mass_spectrum.setMsLevel(tims_frame.get()->getMsLevel());
711  mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
712 
713  mass_spectrum.setDtInMilliSeconds(
714  tims_frame.get()->getDriftTime(coordinate.second));
715  // 1/K0
716  mass_spectrum.setParameterValue(
718  tims_frame.get()->getOneOverK0Transformation(coordinate.second));
719 
720  mass_spectrum.setEmptyMassSpectrum(true);
721  if(want_binary_data)
722  {
723  mass_spectrum.setMassSpectrumSPtr(
724  tims_frame.get()->getMassSpectrumSPtr(coordinate.second));
725  if(mass_spectrum.size() > 0)
726  {
727  mass_spectrum.setEmptyMassSpectrum(false);
728  }
729  }
730  else
731  {
732  // if(tims_frame.get()->getNbrPeaks(coordinate.second) > 0)
733  //{
734  mass_spectrum.setEmptyMassSpectrum(false);
735  // }
736  }
737  if(tims_frame.get()->getMsLevel() > 1)
738  {
739 
740  QSqlDatabase qdb = openDatabaseConnection();
741  QSqlQuery q = qdb.exec(
742  QString(
743  "SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
744  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
745  "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
746  "PasefFrameMsMsInfo.Frame=%1 and (PasefFrameMsMsInfo.ScanNumBegin "
747  "<= %2 and PasefFrameMsMsInfo.ScanNumEnd >= %2);")
748  .arg(coordinate.first)
749  .arg(coordinate.second));
750  if(q.lastError().isValid())
751  {
752  throw PappsoException(
753  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
754  "command %2:\n%3\n%4\n%5")
755  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
756  .arg(q.lastQuery())
757  .arg(qdb.lastError().databaseText())
758  .arg(qdb.lastError().driverText())
759  .arg(qdb.lastError().nativeErrorCode()));
760  }
761  if(q.next())
762  {
763  // mass_spectrum.setPrecursorCharge(q.value(11).toInt());
764  // mass_spectrum.setPrecursorMz(q.value(10).toDouble());
765  // mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
766  // mass_spectrum.setPrecursorSpectrumIndex();
767 
768  mass_spectrum.appendPrecursorIonData(
769  PrecursorIonData(q.value(10).toDouble(),
770  q.value(11).toInt(),
771  q.value(13).toDouble()));
772 
773 
774  MassSpectrumId spectrum_id;
775  std::size_t prec_spectrum_index = getRawIndexFromCoordinate(
776  q.value(14).toDouble(), coordinate.second);
777 
778  mass_spectrum.setPrecursorSpectrumIndex(prec_spectrum_index);
779  mass_spectrum.setPrecursorNativeId(
780  QString("frame=%1 scan=%2 index=%3")
781  .arg(q.value(14).toDouble())
782  .arg(coordinate.second)
783  .arg(prec_spectrum_index));
784 
785  mass_spectrum.setParameterValue(
786  QualifiedMassSpectrumParameter::IsolationMz, q.value(3).toDouble());
787  mass_spectrum.setParameterValue(
789  q.value(4).toDouble());
790 
791  mass_spectrum.setParameterValue(
793  q.value(5).toFloat());
794  mass_spectrum.setParameterValue(
796  q.value(6).toInt());
797  }
798  }
799 
800  return mass_spectrum;
801 }

References pappso::QualifiedMassSpectrum::appendPrecursorIonData(), pappso::BrukerPrecursorIndex, pappso::CollisionEnergy, getRawIndexFromCoordinate(), getScanCoordinateFromRawIndex(), getTimsFrameBaseCstSPtrCached(), getTimsFrameCstSPtrCached(), pappso::IsolationMz, pappso::IsolationWidth, m_timsDataDirectory, pappso::OneOverK0, openDatabaseConnection(), pappso::QualifiedMassSpectrum::setDtInMilliSeconds(), pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorNativeId(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), pappso::MassSpectrumId::setSpectrumIndex(), and pappso::QualifiedMassSpectrum::size().

Referenced by pappso::TimsMsRunReader::qualifiedMassSpectrum().

◆ getQualifiedMs1MassSpectrumByPrecursorId()

QualifiedMassSpectrum TimsData::getQualifiedMs1MassSpectrumByPrecursorId ( std::size_t  ms2_index,
std::size_t  precursor_index,
bool  want_binary_data 
)

Definition at line 805 of file timsdata.cpp.

808 {
809  QualifiedMassSpectrum mass_spectrum;
810 
811  try
812  {
813  QSqlDatabase qdb = openDatabaseConnection();
814  mass_spectrum.setMsLevel(1);
815  mass_spectrum.setPrecursorSpectrumIndex(0);
816  mass_spectrum.setEmptyMassSpectrum(true);
817  QSqlQuery q =
818  qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
819  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
820  "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
821  "Precursors.Id=%1;")
822  .arg(precursor_index));
823  if(q.lastError().isValid())
824  {
825 
826  throw PappsoException(
827  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
828  "command %2:\n%3\n%4\n%5")
829  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
830  .arg(q.lastQuery())
831  .arg(qdb.lastError().databaseText())
832  .arg(qdb.lastError().driverText())
833  .arg(qdb.lastError().nativeErrorCode()));
834  }
835  if(q.size() == 0)
836  {
837 
838  throw ExceptionNotFound(
839  QObject::tr(
840  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
841  "id=%1 not found")
842  .arg(precursor_index));
843  }
844  else
845  {
846  TracePlusCombiner combiner;
847  MapTrace combiner_result;
848 
849 
850  bool first = true;
851  std::size_t scan_mobility_start = 0;
852  std::size_t scan_mobility_end = 0;
853  std::set<std::size_t> tims_frame_list;
854  while(q.next())
855  {
856  // get MS1 frame
857  tims_frame_list.insert(q.value(14).toLongLong());
858  if(first)
859  {
860 
861 
862  MassSpectrumId spectrum_id;
863 
864  spectrum_id.setSpectrumIndex(precursor_index);
865  spectrum_id.setNativeId(
866  QString("frame=%1 begin=%2 end=%3 precursor=%4 idxms2=%5")
867  .arg(q.value(0).toLongLong())
868  .arg(q.value(1).toLongLong())
869  .arg(q.value(2).toLongLong())
870  .arg(precursor_index)
871  .arg(ms2_index));
872 
873 
874  mass_spectrum.setMassSpectrumId(spectrum_id);
875 
876 
877  scan_mobility_start = q.value(1).toLongLong();
878  scan_mobility_end = q.value(2).toLongLong();
879 
880  first = false;
881  }
882  }
883 
884  first = true;
885  for(std::size_t tims_id : tims_frame_list)
886  {
887  TimsFrameBaseCstSPtr tims_frame =
888  getTimsFrameCstSPtrCached(tims_id);
889  if(first)
890  {
891  mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
892 
893  mass_spectrum.setParameterValue(
895  tims_frame.get()->getOneOverK0Transformation(
896  scan_mobility_start));
897 
898  mass_spectrum.setParameterValue(
900  tims_frame.get()->getOneOverK0Transformation(
901  scan_mobility_end));
902 
903  first = false;
904  }
905 
906 
907  if(want_binary_data)
908  {
909  combiner.combine(combiner_result,
910  tims_frame.get()->cumulateScanToTrace(
911  scan_mobility_start, scan_mobility_end));
912  }
913  else
914  {
915  break;
916  }
917  }
918 
919 
920  if(first == true)
921  {
922  throw ExceptionNotFound(
923  QObject::tr(
924  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
925  "id=%1 not found")
926  .arg(precursor_index));
927  }
928 
929 
930  if(want_binary_data)
931  {
932 
933  pappso::Trace trace(combiner_result);
934  qDebug();
935 
936  if(trace.size() > 0)
937  {
938  if(mcsp_ms1Filter != nullptr)
939  {
940  mcsp_ms1Filter->filter(trace);
941  }
942 
943  qDebug();
944  mass_spectrum.setMassSpectrumSPtr(
945  MassSpectrum(trace).makeMassSpectrumSPtr());
946  mass_spectrum.setEmptyMassSpectrum(false);
947  }
948  else
949  {
950  mass_spectrum.setMassSpectrumSPtr(nullptr);
951  mass_spectrum.setEmptyMassSpectrum(true);
952  }
953  }
954  }
955  }
956  catch(std::exception &error)
957  {
958  qDebug() << QString("Failure %1 ").arg(error.what());
959  }
960  return mass_spectrum;
961 }

References pappso::TracePlusCombiner::combine(), getTimsFrameCstSPtrCached(), m_timsDataDirectory, mcsp_ms1Filter, pappso::OneOverK0begin, pappso::OneOverK0end, openDatabaseConnection(), pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), and pappso::MassSpectrumId::setSpectrumIndex().

Referenced by pappso::TimsMsRunReaderMs2Selected::qualifiedMassSpectrum().

◆ getQualifiedMs2MassSpectrumByPrecursorId()

void TimsData::getQualifiedMs2MassSpectrumByPrecursorId ( QualifiedMassSpectrum mass_spectrum,
std::size_t  ms2_index,
std::size_t  precursor_index,
bool  want_binary_data 
)

Definition at line 965 of file timsdata.cpp.

970 {
971  qDebug();
972  try
973  {
974  QSqlDatabase qdb = openDatabaseConnection();
975  MassSpectrumId spectrum_id;
976 
977  spectrum_id.setSpectrumIndex(precursor_index);
978  spectrum_id.setNativeId(
979  QString("precursor=%1 idxms2=%2").arg(precursor_index).arg(ms2_index));
980 
981  mass_spectrum.setMassSpectrumId(spectrum_id);
982 
983  mass_spectrum.setMsLevel(2);
984  mass_spectrum.setPrecursorSpectrumIndex(ms2_index - 1);
985 
986  mass_spectrum.setEmptyMassSpectrum(true);
987 
988  qdb = openDatabaseConnection();
989  // m_mutex.lock();
990  // if(m_query != nullptr)
991  // {
992  // *m_query =
993  // qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.*
994  // FROM "
995  // "PasefFrameMsMsInfo INNER JOIN Precursors ON "
996  // "PasefFrameMsMsInfo.Precursor=Precursors.Id
997  // where " "Precursors.Id=%1;")
998  // .arg(precursor_index));
999  // }
1000  QSqlQuery q =
1001  qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
1002  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
1003  "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
1004  "Precursors.Id=%1;")
1005  .arg(precursor_index));
1006  if(q.lastError().isValid())
1007  {
1008  qDebug();
1009  throw PappsoException(
1010  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
1011  "command %2:\n%3\n%4\n%5")
1012  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1013  .arg(q.lastQuery())
1014  .arg(qdb.lastError().databaseText())
1015  .arg(qdb.lastError().driverText())
1016  .arg(qdb.lastError().nativeErrorCode()));
1017  }
1018  qDebug();
1019  // m_mutex.unlock();
1020  if(q.size() == 0)
1021  {
1022 
1023  throw ExceptionNotFound(
1024  QObject::tr(
1025  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
1026  "id=%1 not found")
1027  .arg(precursor_index));
1028  }
1029  else
1030  {
1031  // qDebug() << " q.size()="<< q.size();
1032  qDebug();
1033  bool first = true;
1034  std::size_t scan_mobility_start = 0;
1035  std::size_t scan_mobility_end = 0;
1036  std::vector<std::size_t> tims_frame_list;
1037 
1038  while(q.next())
1039  {
1040  tims_frame_list.push_back(q.value(0).toLongLong());
1041  if(first)
1042  {
1043  // mass_spectrum.setPrecursorCharge(q.value(11).toInt());
1044  // mass_spectrum.setPrecursorMz(q.value(10).toDouble());
1045  // mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
1046 
1047  mass_spectrum.appendPrecursorIonData(
1048  PrecursorIonData(q.value(10).toDouble(),
1049  q.value(11).toInt(),
1050  q.value(13).toDouble()));
1051 
1052  mass_spectrum.setPrecursorNativeId(
1053  QString("frame=%1 begin=%2 end=%3 precursor=%4 idxms2=%5")
1054  .arg(q.value(14).toLongLong())
1055  .arg(q.value(1).toLongLong())
1056  .arg(q.value(2).toLongLong())
1057  .arg(precursor_index)
1058  .arg(ms2_index - 1));
1059  // mass_spectrum.setPrecursorSpectrumIndex();
1060 
1061  scan_mobility_start = q.value(1).toLongLong();
1062  scan_mobility_end = q.value(2).toLongLong();
1063 
1064  mass_spectrum.setParameterValue(
1066  q.value(3).toDouble());
1067  mass_spectrum.setParameterValue(
1069  q.value(4).toDouble());
1070 
1071  mass_spectrum.setParameterValue(
1073  q.value(5).toFloat());
1074  mass_spectrum.setParameterValue(
1076  q.value(6).toInt());
1077 
1078  first = false;
1079  }
1080  }
1081  // QMutexLocker locker(&m_mutex_spectrum);
1082  qDebug();
1083  pappso::TimsFrameCstSPtr tims_frame, previous_frame;
1084  // TracePlusCombiner combiner;
1085  // MapTrace combiner_result;
1086  std::map<quint32, quint32> raw_spectrum;
1087  first = true;
1088  for(std::size_t tims_id : tims_frame_list)
1089  {
1090 
1091  tims_frame = getTimsFrameCstSPtrCached(tims_id);
1092  if(first)
1093  {
1094  mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
1095 
1096  mass_spectrum.setParameterValue(
1098  tims_frame.get()->getOneOverK0Transformation(
1099  scan_mobility_start));
1100 
1101  mass_spectrum.setParameterValue(
1103  tims_frame.get()->getOneOverK0Transformation(
1104  scan_mobility_end));
1105 
1106  first = false;
1107  }
1108 
1109 
1110  if(want_binary_data)
1111  {
1112  qDebug();
1113  /*combiner.combine(combiner_result,
1114  tims_frame.get()->cumulateScanToTrace(
1115  scan_mobility_start, scan_mobility_end));*/
1116  if(previous_frame.get() != nullptr)
1117  {
1118  if(previous_frame.get()->hasSameCalibrationData(
1119  *tims_frame.get()))
1120  {
1121  }
1122  else
1123  {
1124  throw ExceptionNotFound(
1125  QObject::tr(
1126  "ERROR in %1 %2, different calibration data "
1127  "between frame id %3 and frame id %4")
1128  .arg(__FILE__)
1129  .arg(__FUNCTION__)
1130  .arg(previous_frame.get()->getId())
1131  .arg(tims_frame.get()->getId()));
1132  }
1133  }
1134  tims_frame.get()->cumulateScansInRawMap(
1135  raw_spectrum, scan_mobility_start, scan_mobility_end);
1136  qDebug();
1137  }
1138  previous_frame = tims_frame;
1139  }
1140  qDebug() << " precursor_index=" << precursor_index
1141  << " num_rows=" << tims_frame_list.size()
1142  << " sql=" << q.lastQuery() << " "
1143  << (std::size_t)QThread::currentThreadId();
1144  if(first == true)
1145  {
1146  throw ExceptionNotFound(
1147  QObject::tr(
1148  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
1149  "id=%1 not found")
1150  .arg(precursor_index));
1151  }
1152  if(want_binary_data)
1153  {
1154  qDebug();
1155  // peak_pick.filter(trace);
1156  pappso::Trace trace;
1158  {
1159  trace =
1160  tims_frame.get()->getTraceFromCumulatedScansBuiltinCentroid(
1161  raw_spectrum);
1162  }
1163  else
1164  {
1165  // no builtin centroid:
1166 
1167  trace =
1168  tims_frame.get()->getTraceFromCumulatedScans(raw_spectrum);
1169  }
1170 
1171  if(trace.size() > 0)
1172  {
1173  qDebug() << trace.size() << " "
1174  << (std::size_t)QThread::currentThreadId();
1175 
1176  if(mcsp_ms2Filter != nullptr)
1177  {
1178  // FilterTriangle filter;
1179  // filter.setTriangleSlope(50, 0.02);
1180  // filter.filter(trace);
1181  // trace.filter(pappso::FilterHighPass(10));
1182  mcsp_ms2Filter->filter(trace);
1183  }
1184 
1185  // FilterScaleFactorY filter_scale((double)1 /
1186  // (double)tims_frame_list.size());
1187  // filter_scale.filter(trace);
1188  qDebug();
1189  mass_spectrum.setMassSpectrumSPtr(
1190  MassSpectrum(trace).makeMassSpectrumSPtr());
1191  mass_spectrum.setEmptyMassSpectrum(false);
1192  }
1193  else
1194  {
1195  mass_spectrum.setMassSpectrumSPtr(nullptr);
1196  mass_spectrum.setEmptyMassSpectrum(true);
1197  }
1198 
1199  qDebug();
1200  }
1201  qDebug();
1202  }
1203  }
1204  catch(std::exception &error)
1205  {
1206  qDebug() << QString("Failure %1 ").arg(error.what());
1207  }
1208  qDebug();
1209 }

References pappso::QualifiedMassSpectrum::appendPrecursorIonData(), pappso::BrukerPrecursorIndex, pappso::CollisionEnergy, getTimsFrameCstSPtrCached(), pappso::IsolationMz, pappso::IsolationWidth, m_builtinMs2Centroid, m_timsDataDirectory, mcsp_ms2Filter, pappso::OneOverK0begin, pappso::OneOverK0end, openDatabaseConnection(), pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorNativeId(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), and pappso::MassSpectrumId::setSpectrumIndex().

Referenced by pappso::TimsMsRunReaderMs2Selected::qualifiedMassSpectrum().

◆ getRawIndexFromCoordinate()

std::size_t TimsData::getRawIndexFromCoordinate ( std::size_t  frame_id,
std::size_t  scan_num 
) const
private

Definition at line 256 of file timsdata.cpp.

258 {
259 
260 
261  QSqlDatabase qdb = openDatabaseConnection();
262  QSqlQuery q =
263  qdb.exec(QString("SELECT Id, NumScans FROM "
264  "Frames ORDER BY Id"));
265  if(q.lastError().isValid())
266  {
267 
268  throw PappsoException(
269  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
270  "command %2:\n%3\n%4\n%5")
271  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
272  .arg(q.lastQuery())
273  .arg(qdb.lastError().databaseText())
274  .arg(qdb.lastError().driverText())
275  .arg(qdb.lastError().nativeErrorCode()));
276  }
277  bool index_found = false;
278  std::size_t timsId;
279  std::size_t numberScans;
280  std::size_t offset = 0;
281  while(q.next() && (!index_found))
282  {
283  timsId = q.value(0).toUInt();
284  numberScans = q.value(1).toUInt();
285 
286  if(timsId == frame_id)
287  {
288  return offset + scan_num;
289  }
290 
291  offset += numberScans;
292  }
293 
294  throw ExceptionNotFound(
295  QObject::tr("ERROR raw index with frame=%1 scan=%2 not found")
296  .arg(frame_id)
297  .arg(scan_num));
298 }

References m_timsDataDirectory, and openDatabaseConnection().

Referenced by getQualifiedMassSpectrumByRawIndex().

◆ getScanCoordinateFromRawIndex()

std::pair< std::size_t, std::size_t > TimsData::getScanCoordinateFromRawIndex ( std::size_t  spectrum_index) const
private

Definition at line 211 of file timsdata.cpp.

212 {
213 
214  QSqlDatabase qdb = openDatabaseConnection();
215 
216  QSqlQuery q =
217  qdb.exec(QString("SELECT Id, NumScans FROM "
218  "Frames ORDER BY Id"));
219  if(q.lastError().isValid())
220  {
221 
222  throw PappsoException(
223  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
224  "command %2:\n%3\n%4\n%5")
225  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
226  .arg(q.lastQuery())
227  .arg(qdb.lastError().databaseText())
228  .arg(qdb.lastError().driverText())
229  .arg(qdb.lastError().nativeErrorCode()));
230  }
231  pappso::TimsFrameSPtr tims_frame;
232  bool index_found = false;
233  std::size_t timsId;
234  std::size_t numberScans;
235  std::size_t offset = 0;
236  while(q.next() && (!index_found))
237  {
238  timsId = q.value(0).toUInt();
239  numberScans = q.value(1).toUInt();
240 
241  if(raw_index < (offset + numberScans))
242  {
243  return std::pair<std::size_t, std::size_t>(timsId,
244  raw_index - offset);
245  }
246 
247  offset += numberScans;
248  }
249 
250  throw ExceptionNotFound(
251  QObject::tr("ERROR raw index %1 not found").arg(raw_index));
252 }

References m_timsDataDirectory, and openDatabaseConnection().

Referenced by getMassSpectrumCstSPtrByRawIndex(), getMatchPrecursorIdByKo(), getMsLevelBySpectrumIndex(), and getQualifiedMassSpectrumByRawIndex().

◆ getTimsFrameBaseCstSPtr()

TimsFrameBaseCstSPtr TimsData::getTimsFrameBaseCstSPtr ( std::size_t  timsId) const
private

get a Tims frame base (no binary data file access) with his database ID

Definition at line 314 of file timsdata.cpp.

315 {
316 
317  qDebug() << " timsId=" << timsId;
318 
319  QSqlDatabase qdb = openDatabaseConnection();
320  QSqlQuery q = qdb.exec(
321  QString("SELECT Frames.TimsId, Frames.AccumulationTime, "
322  " MzCalibration.DigitizerTimebase, MzCalibration.DigitizerDelay, "
323  "MzCalibration.C0, MzCalibration.C1, MzCalibration.C2, "
324  "MzCalibration.C3, MzCalibration.T1, MzCalibration.T2, "
325  "MzCalibration.dC1, MzCalibration.dC2, Frames.T1, Frames.T2, "
326  "Frames.Time, Frames.MsMsType, TimsCalibration.ModelType, "
327  "TimsCalibration.C0, TimsCalibration.C1, TimsCalibration.C2, "
328  "TimsCalibration.C3, TimsCalibration.C4, TimsCalibration.C5, "
329  "TimsCalibration.C6, TimsCalibration.C7, TimsCalibration.C8, "
330  "TimsCalibration.C9 FROM "
331  "Frames INNER JOIN MzCalibration ON "
332  "Frames.MzCalibration=MzCalibration.Id INNER JOIN TimsCalibration "
333  "ON Frames.TimsCalibration=TimsCalibration.Id where "
334  "Frames.Id=%1;")
335  .arg(timsId));
336  if(q.lastError().isValid())
337  {
338 
339  throw PappsoException(
340  QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
341  "executing SQL "
342  "command %3:\n%4\n%5\n%6")
343  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
344  .arg(qdb.databaseName())
345  .arg(q.lastQuery())
346  .arg(qdb.lastError().databaseText())
347  .arg(qdb.lastError().driverText())
348  .arg(qdb.lastError().nativeErrorCode()));
349  }
350  pappso::TimsFrameBaseSPtr tims_frame;
351  if(q.next())
352  {
353 
354 
355  double T1_ref = q.value(8).toDouble();
356  double T2_ref = q.value(9).toDouble();
357  double factor1 = q.value(10).toDouble();
358  double factor2 = q.value(11).toDouble();
359 
360  double T1_frame = q.value(12).toDouble();
361  double T2_frame = q.value(13).toDouble();
362 
363 
364  double temperature_correction =
365  factor1 * (T1_ref - T1_frame) + factor2 * (T2_ref - T2_frame);
366  temperature_correction = (double)1.0 + (temperature_correction / 1.0e6);
367 
368  tims_frame = std::make_shared<TimsFrameBase>(
369  TimsFrameBase(timsId, q.value(0).toUInt()));
370 
371  tims_frame.get()->setMzCalibration(temperature_correction,
372  q.value(2).toDouble(),
373  q.value(3).toDouble(),
374  q.value(4).toDouble(),
375  q.value(5).toDouble(),
376  q.value(6).toDouble(),
377  q.value(7).toDouble());
378 
379  tims_frame.get()->setAccumulationTime(q.value(1).toDouble());
380 
381  tims_frame.get()->setTime(q.value(14).toDouble());
382  tims_frame.get()->setMsMsType(q.value(15).toUInt());
383 
384  tims_frame.get()->setTimsCalibration(q.value(16).toInt(),
385  q.value(17).toDouble(),
386  q.value(18).toDouble(),
387  q.value(19).toDouble(),
388  q.value(20).toDouble(),
389  q.value(21).toDouble(),
390  q.value(22).toDouble(),
391  q.value(23).toDouble(),
392  q.value(24).toDouble(),
393  q.value(25).toDouble(),
394  q.value(26).toDouble());
395  return tims_frame;
396  }
397 
398  throw ExceptionNotFound(QObject::tr("ERROR timsId %1 not found").arg(timsId));
399  // return TimsFrameCstSPtr;
400 }

References m_timsDataDirectory, and openDatabaseConnection().

Referenced by getTimsFrameBaseCstSPtrCached().

◆ getTimsFrameBaseCstSPtrCached()

TimsFrameBaseCstSPtr TimsData::getTimsFrameBaseCstSPtrCached ( std::size_t  timsId)
private

Definition at line 1213 of file timsdata.cpp.

1214 {
1215  QMutexLocker locker(&m_mutex);
1216  for(auto &tims_frame : m_timsFrameBaseCache)
1217  {
1218  if(tims_frame.get()->getId() == timsId)
1219  {
1220  m_timsFrameBaseCache.push_back(tims_frame);
1221  return tims_frame;
1222  }
1223  }
1224 
1225  m_timsFrameBaseCache.push_back(getTimsFrameBaseCstSPtr(timsId));
1226  if(m_timsFrameBaseCache.size() > m_cacheSize)
1227  m_timsFrameBaseCache.pop_front();
1228  return m_timsFrameBaseCache.back();
1229 }

References getTimsFrameBaseCstSPtr(), m_cacheSize, m_mutex, and m_timsFrameBaseCache.

Referenced by getMatchPrecursorIdByKo(), and getQualifiedMassSpectrumByRawIndex().

◆ getTimsFrameCstSPtr()

TimsFrameCstSPtr TimsData::getTimsFrameCstSPtr ( std::size_t  timsId) const

get a Tims frame with his database ID

Definition at line 437 of file timsdata.cpp.

438 {
439 
440  qDebug() << " timsId=" << timsId;
441 
442  QSqlDatabase qdb = openDatabaseConnection();
443  QSqlQuery q = qdb.exec(
444  QString("SELECT Frames.TimsId, Frames.AccumulationTime, "
445  " MzCalibration.DigitizerTimebase, MzCalibration.DigitizerDelay, "
446  "MzCalibration.C0, MzCalibration.C1, MzCalibration.C2, "
447  "MzCalibration.C3, MzCalibration.T1, MzCalibration.T2, "
448  "MzCalibration.dC1, MzCalibration.dC2, Frames.T1, Frames.T2, "
449  "Frames.Time, Frames.MsMsType, TimsCalibration.ModelType, "
450  "TimsCalibration.C0, TimsCalibration.C1, TimsCalibration.C2, "
451  "TimsCalibration.C3, TimsCalibration.C4, TimsCalibration.C5, "
452  "TimsCalibration.C6, TimsCalibration.C7, TimsCalibration.C8, "
453  "TimsCalibration.C9 FROM "
454  "Frames INNER JOIN MzCalibration ON "
455  "Frames.MzCalibration=MzCalibration.Id INNER JOIN TimsCalibration "
456  "ON Frames.TimsCalibration=TimsCalibration.Id where "
457  "Frames.Id=%1;")
458  .arg(timsId));
459  if(q.lastError().isValid())
460  {
461 
462  throw PappsoException(
463  QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
464  "executing SQL "
465  "command %3:\n%4\n%5\n%6")
466  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
467  .arg(qdb.databaseName())
468  .arg(q.lastQuery())
469  .arg(qdb.lastError().databaseText())
470  .arg(qdb.lastError().driverText())
471  .arg(qdb.lastError().nativeErrorCode()));
472  }
473  pappso::TimsFrameSPtr tims_frame;
474  if(q.next())
475  {
476 
477 
478  double T1_ref = q.value(8).toDouble();
479  double T2_ref = q.value(9).toDouble();
480  double factor1 = q.value(10).toDouble();
481  double factor2 = q.value(11).toDouble();
482 
483  double T1_frame = q.value(12).toDouble();
484  double T2_frame = q.value(13).toDouble();
485 
486 
487  double temperature_correction =
488  factor1 * (T1_ref - T1_frame) + factor2 * (T2_ref - T2_frame);
489  temperature_correction = (double)1.0 + (temperature_correction / 1.0e6);
490 
491  tims_frame =
492  mpa_timsBinDec->getTimsFrameSPtrByOffset(timsId, q.value(0).toUInt());
493 
494  tims_frame.get()->setMzCalibration(temperature_correction,
495  q.value(2).toDouble(),
496  q.value(3).toDouble(),
497  q.value(4).toDouble(),
498  q.value(5).toDouble(),
499  q.value(6).toDouble(),
500  q.value(7).toDouble());
501 
502  tims_frame.get()->setAccumulationTime(q.value(1).toDouble());
503 
504  tims_frame.get()->setTime(q.value(14).toDouble());
505  tims_frame.get()->setMsMsType(q.value(15).toUInt());
506 
507  tims_frame.get()->setTimsCalibration(q.value(16).toInt(),
508  q.value(17).toDouble(),
509  q.value(18).toDouble(),
510  q.value(19).toDouble(),
511  q.value(20).toDouble(),
512  q.value(21).toDouble(),
513  q.value(22).toDouble(),
514  q.value(23).toDouble(),
515  q.value(24).toDouble(),
516  q.value(25).toDouble(),
517  q.value(26).toDouble());
518  return tims_frame;
519  }
520 
521  throw ExceptionNotFound(QObject::tr("ERROR timsId %1 not found").arg(timsId));
522  // return TimsFrameCstSPtr;
523 }

References pappso::TimsBinDec::getTimsFrameSPtrByOffset(), m_timsDataDirectory, mpa_timsBinDec, and openDatabaseConnection().

Referenced by pappso::TimsDirectXicExtractor::extractTimsXicList(), and getTimsFrameCstSPtrCached().

◆ getTimsFrameCstSPtrCached()

TimsFrameCstSPtr TimsData::getTimsFrameCstSPtrCached ( std::size_t  timsId)
private

get a Tims frame with his database ID but look in the cache first

Definition at line 1232 of file timsdata.cpp.

1233 {
1234  QMutexLocker locker(&m_mutex);
1235  for(auto &tims_frame : m_timsFrameCache)
1236  {
1237  if(tims_frame.get()->getId() == timsId)
1238  {
1239  m_timsFrameCache.push_back(tims_frame);
1240  return tims_frame;
1241  }
1242  }
1243 
1244  m_timsFrameCache.push_back(getTimsFrameCstSPtr(timsId));
1245  if(m_timsFrameCache.size() > m_cacheSize)
1246  m_timsFrameCache.pop_front();
1247  return m_timsFrameCache.back();
1248 }

References getTimsFrameCstSPtr(), m_cacheSize, m_mutex, and m_timsFrameCache.

Referenced by getMassSpectrumCstSPtr(), getMsLevelBySpectrumIndex(), getQualifiedMassSpectrumByRawIndex(), getQualifiedMs1MassSpectrumByPrecursorId(), and getQualifiedMs2MassSpectrumByPrecursorId().

◆ getTimsMS1FrameIdRange()

std::vector< std::size_t > TimsData::getTimsMS1FrameIdRange ( double  rt_begin,
double  rt_end 
) const

Definition at line 403 of file timsdata.cpp.

404 {
405 
406  qDebug() << " rt_begin=" << rt_begin << " rt_end=" << rt_end;
407  std::vector<std::size_t> tims_frameid_list;
408  QSqlDatabase qdb = openDatabaseConnection();
409  QSqlQuery q = qdb.exec(QString("SELECT Frames.TimsId FROM Frames WHERE "
410  "Frames.MsMsType=0 AND (Frames.Time=>%1) AND "
411  "(Frames.Time<=%2) SORT BY Frames.Time;")
412  .arg(rt_begin)
413  .arg(rt_end));
414  if(q.lastError().isValid())
415  {
416 
417  throw PappsoException(
418  QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
419  "executing SQL "
420  "command %3:\n%4\n%5\n%6")
421  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
422  .arg(qdb.databaseName())
423  .arg(q.lastQuery())
424  .arg(qdb.lastError().databaseText())
425  .arg(qdb.lastError().driverText())
426  .arg(qdb.lastError().nativeErrorCode()));
427  }
428  while(q.next())
429  {
430 
431  tims_frameid_list.push_back(q.value(0).toUInt());
432  }
433  return tims_frameid_list;
434 }

References m_timsDataDirectory, and openDatabaseConnection().

Referenced by pappso::TimsDirectXicExtractor::extractTimsXicList().

◆ getTotalNumberOfPrecursors()

std::size_t TimsData::getTotalNumberOfPrecursors ( ) const

get the number of precursors analyzes by PASEF

Definition at line 542 of file timsdata.cpp.

543 {
545 }

References m_totalNumberOfPrecursors.

Referenced by pappso::TimsMsRunReaderMs2Selected::spectrumListSize().

◆ getTotalNumberOfScans()

std::size_t TimsData::getTotalNumberOfScans ( ) const

get the total number of scans

Definition at line 535 of file timsdata.cpp.

536 {
537  return m_totalNumberOfScans;
538 }

References m_totalNumberOfScans.

Referenced by pappso::TimsMsRunReader::spectrumListSize().

◆ openDatabaseConnection()

QSqlDatabase TimsData::openDatabaseConnection ( ) const
private

Definition at line 154 of file timsdata.cpp.

155 {
156  QString database_connection_name = QString("%1_%2")
157  .arg(m_timsDataDirectory.absolutePath())
158  .arg((quintptr)QThread::currentThread());
159  // Open the database
160  QSqlDatabase qdb = QSqlDatabase::database(database_connection_name);
161  if(!qdb.isValid())
162  {
163  qDebug() << database_connection_name;
164  qdb = QSqlDatabase::addDatabase("QSQLITE", database_connection_name);
165  qdb.setDatabaseName(m_timsDataDirectory.absoluteFilePath("analysis.tdf"));
166  }
167 
168 
169  if(!qdb.open())
170  {
171  qDebug();
172  throw PappsoException(
173  QObject::tr("ERROR opening TIMS sqlite database file %1, database name "
174  "%2 :\n%3\n%4\n%5")
175  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
176  .arg(database_connection_name)
177  .arg(qdb.lastError().databaseText())
178  .arg(qdb.lastError().driverText())
179  .arg(qdb.lastError().nativeErrorCode()));
180  }
181  return qdb;
182 }

References m_timsDataDirectory.

Referenced by extractXicListByPrecursorIds(), getPrecursorsFromMzRtCharge(), getQualifiedMassSpectrumByRawIndex(), getQualifiedMs1MassSpectrumByPrecursorId(), getQualifiedMs2MassSpectrumByPrecursorId(), getRawIndexFromCoordinate(), getScanCoordinateFromRawIndex(), getTimsFrameBaseCstSPtr(), getTimsFrameCstSPtr(), getTimsMS1FrameIdRange(), and TimsData().

◆ setMs1FilterCstSPtr()

void TimsData::setMs1FilterCstSPtr ( pappso::FilterInterfaceCstSPtr filter)

filter interface to apply just after raw MS1 specturm extraction the filter can be a list of filters inside a FilterSuite object

Definition at line 1256 of file timsdata.cpp.

1257 {
1258  mcsp_ms1Filter = filter;
1259 }

References mcsp_ms1Filter.

Referenced by pappso::TimsMsRunReaderMs2Selected::setMs1FilterCstSPtr().

◆ setMs2BuiltinCentroid()

void TimsData::setMs2BuiltinCentroid ( bool  centroid)

enable or disable simple centroid filter on raw tims data for MS2

Definition at line 199 of file timsdata.cpp.

200 {
201  m_builtinMs2Centroid = centroid;
202 }

References m_builtinMs2Centroid.

◆ setMs2FilterCstSPtr()

void TimsData::setMs2FilterCstSPtr ( pappso::FilterInterfaceCstSPtr filter)

filter interface to apply just after raw MS2 specturm extraction the filter can be a list of filters inside a FilterSuite object

Definition at line 1251 of file timsdata.cpp.

1252 {
1253  mcsp_ms2Filter = filter;
1254 }

References mcsp_ms2Filter.

Referenced by pappso::TimsMsRunReaderMs2Selected::setMs2FilterCstSPtr().

Member Data Documentation

◆ m_builtinMs2Centroid

bool pappso::TimsData::m_builtinMs2Centroid = true
private

enable builtin centroid on raw tims integers by default

Definition at line 245 of file timsdata.h.

Referenced by getMs2BuiltinCentroid(), getQualifiedMs2MassSpectrumByPrecursorId(), and setMs2BuiltinCentroid().

◆ m_cacheSize

std::size_t pappso::TimsData::m_cacheSize = 60
private

Definition at line 236 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached(), and getTimsFrameCstSPtrCached().

◆ m_mutex

QMutex pappso::TimsData::m_mutex
private

Definition at line 246 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached(), and getTimsFrameCstSPtrCached().

◆ m_timsDataDirectory

◆ m_timsFrameBaseCache

std::deque<TimsFrameBaseCstSPtr> pappso::TimsData::m_timsFrameBaseCache
private

Definition at line 238 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached().

◆ m_timsFrameCache

std::deque<TimsFrameCstSPtr> pappso::TimsData::m_timsFrameCache
private

Definition at line 237 of file timsdata.h.

Referenced by getTimsFrameCstSPtrCached().

◆ m_totalNumberOfPrecursors

std::size_t pappso::TimsData::m_totalNumberOfPrecursors
private

Definition at line 235 of file timsdata.h.

Referenced by getTotalNumberOfPrecursors(), and TimsData().

◆ m_totalNumberOfScans

std::size_t pappso::TimsData::m_totalNumberOfScans
private

Definition at line 234 of file timsdata.h.

Referenced by getTotalNumberOfScans(), and TimsData().

◆ mcsp_ms1Filter

pappso::FilterInterfaceCstSPtr pappso::TimsData::mcsp_ms1Filter = nullptr
private

◆ mcsp_ms2Filter

pappso::FilterInterfaceCstSPtr pappso::TimsData::mcsp_ms2Filter = nullptr
private

◆ mpa_timsBinDec

TimsBinDec* pappso::TimsData::mpa_timsBinDec = nullptr
private

Definition at line 232 of file timsdata.h.

Referenced by getTimsFrameCstSPtr(), TimsData(), and ~TimsData().


The documentation for this class was generated from the following files:
pappso::TimsData::mcsp_ms2Filter
pappso::FilterInterfaceCstSPtr mcsp_ms2Filter
Definition: timsdata.h:240
pappso::TimsData::m_totalNumberOfPrecursors
std::size_t m_totalNumberOfPrecursors
Definition: timsdata.h:235
pappso::TimsXicStructure::precursorId
std::size_t precursorId
Definition: timsdata.h:86
pappso::QualifiedMassSpectrumParameter::CollisionEnergy
@ CollisionEnergy
Bruker's Tims tof collision energy.
pappso::TimsData::mcsp_ms1Filter
pappso::FilterInterfaceCstSPtr mcsp_ms1Filter
Definition: timsdata.h:241
pappso::TimsData::m_timsFrameBaseCache
std::deque< TimsFrameBaseCstSPtr > m_timsFrameBaseCache
Definition: timsdata.h:238
pappso::TimsData::getTimsFrameBaseCstSPtrCached
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached(std::size_t timsId)
Definition: timsdata.cpp:1213
pappso::TimsFrameSPtr
std::shared_ptr< TimsFrame > TimsFrameSPtr
Definition: timsframe.h:58
pappso::TracePlusCombiner::combine
virtual MapTrace & combine(MapTrace &map_trace, const Trace &trace) const override
Definition: tracepluscombiner.cpp:52
pappso::QualifiedMassSpectrumParameter::OneOverK0end
@ OneOverK0end
1/k0 of last acquisition for composite pasef MS/MS spectrum
pappso::TimsFrameBase
Definition: timsframebase.h:65
pappso::TimsBinDec
Definition: timsbindec.h:59
pappso::TimsXicExtractorInterface
Definition: timsxicextractorinterface.h:60
pappso::TimsBinDec::getTimsFrameSPtrByOffset
TimsFrameSPtr getTimsFrameSPtrByOffset(std::size_t timsId, std::size_t timsOffset) const
Definition: timsbindec.cpp:143
pappso::MassSpectrum
Class to represent a mass spectrum.
Definition: massspectrum.h:92
pappso::TimsData::m_cacheSize
std::size_t m_cacheSize
Definition: timsdata.h:236
pappso::QualifiedMassSpectrumParameter::IsolationMz
@ IsolationMz
isolation window
pappso::QualifiedMassSpectrumParameter::OneOverK0
@ OneOverK0
1/kO of a simple scan
pappso::TimsFrameBaseCstSPtr
std::shared_ptr< const TimsFrameBase > TimsFrameBaseCstSPtr
Definition: timsframebase.h:58
pappso::QualifiedMassSpectrum::setParameterValue
void setParameterValue(QualifiedMassSpectrumParameter parameter, const QVariant &value)
Definition: qualifiedmassspectrum.cpp:479
pappso::MapTrace
Definition: maptrace.h:33
pappso::TimsXicStructure::scanNumBegin
std::size_t scanNumBegin
Definition: timsdata.h:89
pappso::QualifiedMassSpectrum::setMassSpectrumSPtr
void setMassSpectrumSPtr(MassSpectrumSPtr massSpectrum)
Set the MassSpectrumSPtr.
Definition: qualifiedmassspectrum.cpp:143
pappso::TimsData::getTimsFrameBaseCstSPtr
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtr(std::size_t timsId) const
get a Tims frame base (no binary data file access) with his database ID
Definition: timsdata.cpp:314
pappso::TimsDirectXicExtractor
Definition: timsdirectxicextractor.h:56
pappso::TimsData::getClosestPrecursorIdByMz
std::vector< std::size_t > getClosestPrecursorIdByMz(std::vector< std::vector< double >> ids, double mz_value)
Definition: timsdata.cpp:653
pappso::QualifiedMassSpectrum::setMsLevel
void setMsLevel(uint ms_level)
Set the mass spectrum level.
Definition: qualifiedmassspectrum.cpp:197
pappso::TimsData::getTimsFrameCstSPtrCached
TimsFrameCstSPtr getTimsFrameCstSPtrCached(std::size_t timsId)
get a Tims frame with his database ID but look in the cache first
Definition: timsdata.cpp:1232
pappso::QualifiedMassSpectrum::size
std::size_t size() const
Definition: qualifiedmassspectrum.cpp:510
pappso::QualifiedMassSpectrum::setRtInSeconds
void setRtInSeconds(pappso_double rt)
Set the retention time in seconds.
Definition: qualifiedmassspectrum.cpp:213
pappso::TimsData::m_mutex
QMutex m_mutex
Definition: timsdata.h:246
pappso::MzRange
Definition: mzrange.h:67
pappso::Trace
A simple container of DataPoint instances.
Definition: trace.h:132
pappso::QualifiedMassSpectrum
Class representing a fully specified mass spectrum.
Definition: qualifiedmassspectrum.h:103
pappso::TimsData::getScanCoordinateFromRawIndex
std::pair< std::size_t, std::size_t > getScanCoordinateFromRawIndex(std::size_t spectrum_index) const
Definition: timsdata.cpp:211
pappso::TimsData::m_timsDataDirectory
QDir m_timsDataDirectory
Definition: timsdata.h:231
pappso::TimsData::getMassSpectrumCstSPtr
pappso::MassSpectrumCstSPtr getMassSpectrumCstSPtr(std::size_t timsId, std::size_t scanNum)
get a mass spectrum given the tims frame database id and scan number within tims frame
Definition: timsdata.cpp:527
pappso::QualifiedMassSpectrum::setPrecursorNativeId
void setPrecursorNativeId(const QString &native_id)
Set the scan native id of the precursor ion.
Definition: qualifiedmassspectrum.cpp:435
pappso::QualifiedMassSpectrum::appendPrecursorIonData
void appendPrecursorIonData(const PrecursorIonData &precursor_ion_data)
Definition: qualifiedmassspectrum.cpp:448
pappso::QualifiedMassSpectrum::setMassSpectrumId
void setMassSpectrumId(const MassSpectrumId &iD)
Set the MassSpectrumId.
Definition: qualifiedmassspectrum.cpp:167
pappso::TimsFrameBaseSPtr
std::shared_ptr< TimsFrameBase > TimsFrameBaseSPtr
Definition: timsframebase.h:56
pappso::TimsData::m_totalNumberOfScans
std::size_t m_totalNumberOfScans
Definition: timsdata.h:234
pappso::TimsData::mpa_timsBinDec
TimsBinDec * mpa_timsBinDec
Definition: timsdata.h:232
pappso::TimsXicExtractorInterface::setXicExtractMethod
void setXicExtractMethod(XicExtractMethod method)
set the XIC extraction method
Definition: timsxicextractorinterface.cpp:43
pappso::TimsData::m_timsFrameCache
std::deque< TimsFrameCstSPtr > m_timsFrameCache
Definition: timsdata.h:237
pappso::ExceptionNotFound
Definition: exceptionnotfound.h:53
pappso::TimsXicStructure
structure needed to extract XIC from Tims data
Definition: timsdata.h:66
pappso::QualifiedMassSpectrumParameter::OneOverK0begin
@ OneOverK0begin
pappso::MassSpectrumId
Definition: massspectrumid.h:59
pappso::QualifiedMassSpectrum::setEmptyMassSpectrum
void setEmptyMassSpectrum(bool is_empty_mass_spectrum)
Definition: qualifiedmassspectrum.cpp:182
pappso::TimsXicStructure::mzRange
MzRange mzRange
Definition: timsdata.h:88
pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex
void setPrecursorSpectrumIndex(std::size_t precursor_scan_num)
Set the scan number of the precursor ion.
Definition: qualifiedmassspectrum.cpp:418
pappso::TimsData::getTimsFrameCstSPtr
TimsFrameCstSPtr getTimsFrameCstSPtr(std::size_t timsId) const
get a Tims frame with his database ID
Definition: timsdata.cpp:437
pappso::QualifiedMassSpectrumParameter::IsolationWidth
@ IsolationWidth
isolation window width
pappso::TimsXicStructure::scanNumEnd
std::size_t scanNumEnd
Definition: timsdata.h:90
pappso::MassSpectrumId::setSpectrumIndex
void setSpectrumIndex(std::size_t index)
Definition: massspectrumid.cpp:124
pappso::QualifiedMassSpectrum::setDtInMilliSeconds
void setDtInMilliSeconds(pappso_double rt)
Set the drift time in milliseconds.
Definition: qualifiedmassspectrum.cpp:237
pappso::MassSpectrumId::setNativeId
void setNativeId(const QString &native_id)
Definition: massspectrumid.cpp:110
pappso::QualifiedMassSpectrumParameter::BrukerPrecursorIndex
@ BrukerPrecursorIndex
Bruker's Tims tof precursor index.
pappso::TimsData::getRawIndexFromCoordinate
std::size_t getRawIndexFromCoordinate(std::size_t frame_id, std::size_t scan_num) const
Definition: timsdata.cpp:256
pappso::TimsXicExtractorInterface::extractTimsXicList
virtual void extractTimsXicList(std::vector< TimsXicStructure > &timsXicList, double rtRange) const =0
extract XICs for given coordinates XICs are extracted given their coordinates : retention time target...
pappso::TimsFrameCstSPtr
std::shared_ptr< const TimsFrame > TimsFrameCstSPtr
Definition: timsframe.h:60
pappso::TimsData::openDatabaseConnection
QSqlDatabase openDatabaseConnection() const
Definition: timsdata.cpp:154
pappso::TimsXicStructure::rtTarget
pappso::pappso_double rtTarget
Definition: timsdata.h:91
pappso::PrecursorIonData
Definition: qualifiedmassspectrum.h:80
pappso::TracePlusCombiner
Definition: tracepluscombiner.h:27
pappso::TimsData::m_builtinMs2Centroid
bool m_builtinMs2Centroid
enable builtin centroid on raw tims integers by default
Definition: timsdata.h:245
pappso::PappsoException
Definition: pappsoexception.h:63
pappso::FilterTriangle::setTriangleSlope
double setTriangleSlope(double intensity, double mz)
Definition: filtertriangle.cpp:47