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...
 
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)
 
void setMs1FilterCstSPtr (pappso::FilterInterfaceCstSPtr &filter)
 
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...
 

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
 
QMutex m_mutex
 

Detailed Description

Todo:
write docs

Definition at line 82 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() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
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() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__
92  << " compression_type=" << compression_type;
94  QFileInfo(m_timsDataDirectory.absoluteFilePath("analysis.tdf_bin")),
95  compression_type);
96 
97 
98  // get number of precursors
99  if(!q.exec("SELECT COUNT( DISTINCT Id) FROM Precursors;"))
100  {
101  qDebug();
102  throw PappsoException(
103  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
104  "command %2:\n%3\n%4\n%5")
105  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
106  .arg(q.lastQuery())
107  .arg(qdb.lastError().databaseText())
108  .arg(qdb.lastError().driverText())
109  .arg(qdb.lastError().nativeErrorCode()));
110  }
111  if(q.next())
112  {
113  m_totalNumberOfPrecursors = q.value(0).toLongLong();
114  }
115 
116 
117  // get number of scans
118  if(!q.exec("SELECT SUM(NumScans) FROM Frames"))
119  {
120  qDebug();
121  throw PappsoException(
122  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
123  "command %2:\n%3\n%4\n%5")
124  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
125  .arg(q.lastQuery())
126  .arg(qdb.lastError().databaseText())
127  .arg(qdb.lastError().driverText())
128  .arg(qdb.lastError().nativeErrorCode()));
129  }
130  if(q.next())
131  {
132  m_totalNumberOfScans = q.value(0).toLongLong();
133  }
134 
135  /*
136  std::shared_ptr<FilterTriangle> ms2filter =
137  std::make_shared<FilterTriangle>();
138  ms2filter.get()->setTriangleSlope(50, 0.02);
139  mcsp_ms2Filter = ms2filter;
140 */
141 
142 
143  std::shared_ptr<pappso::FilterPseudoCentroid> ms2filter =
144  std::make_shared<pappso::FilterPseudoCentroid>(20000, 0.05, 0.5, 0.1);
145  mcsp_ms2Filter = ms2filter;
146 
147 
148  std::shared_ptr<FilterTriangle> ms1filter =
149  std::make_shared<FilterTriangle>();
150  ms1filter.get()->setTriangleSlope(50, 0.01);
151  mcsp_ms1Filter = ms1filter;
152 }

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 190 of file timsdata.cpp.

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

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 1091 of file timsdata.cpp.

1096 {
1097 
1098  qDebug();
1099  std::vector<TimsXicStructure> xic_list;
1100 
1101  try
1102  {
1103  QSqlDatabase qdb = openDatabaseConnection();
1104 
1105  for(auto precursor_id : precursor_id_list)
1106  {
1107  QSqlQuery q = qdb.exec(
1108  QString("SELECT Frames.Time, "
1109  "PasefFrameMsMsInfo.Frame,PasefFrameMsMsInfo.ScanNumBegin,"
1110  "PasefFrameMsMsInfo.ScanNumEnd, Precursors.MonoisotopicMz, "
1111  "Precursors.Charge FROM "
1112  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
1113  "PasefFrameMsMsInfo.Precursor=Precursors.Id INNER JOIN "
1114  "Frames ON PasefFrameMsMsInfo.Frame=Frames.Id where "
1115  "Precursors.Id=%1;")
1116  .arg(precursor_id));
1117  if(q.lastError().isValid())
1118  {
1119  qDebug();
1120  throw PappsoException(
1121  QObject::tr(
1122  "ERROR in TIMS sqlite database file %1, executing SQL "
1123  "command %2:\n%3\n%4\n%5")
1124  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1125  .arg(q.lastQuery())
1126  .arg(qdb.lastError().databaseText())
1127  .arg(qdb.lastError().driverText())
1128  .arg(qdb.lastError().nativeErrorCode()));
1129  }
1130 
1131  while(q.next())
1132  {
1133  // Frame, ScanNumBegin, ScanNumEnd, IsolationMz, ColliqionEnergy,
1134  // Precursor
1135  // Id, LargestPeakMz, AverageMz, MonoisotopicMz, Charge,
1136  // ScanNumber, Intensity, Parent
1137  TimsXicStructure xic_structure;
1138 
1139  xic_structure.precursorId = precursor_id;
1140  xic_structure.mzRange =
1141  MzRange(q.value(4).toDouble(), precision_ptr);
1142  xic_structure.scanNumBegin = q.value(2).toUInt();
1143  xic_structure.scanNumEnd = q.value(3).toUInt();
1144  xic_structure.rtTarget = q.value(0).toDouble();
1145  // xic_structure.charge = q.value(5).toUInt();
1146 
1147  xic_list.push_back(xic_structure);
1148  }
1149  }
1150  qDebug();
1151 
1152  TimsXicExtractorInterface *extractor_p = new TimsDirectXicExtractor(this);
1153  extractor_p->setXicExtractMethod(xicExtractMethod);
1154  extractor_p->extractTimsXicList(xic_list, rtRange);
1155  }
1156  catch(std::exception &error)
1157  {
1158  qDebug() << QString("Failure %1 ").arg(error.what());
1159  }
1160 
1161  qDebug();
1162  return xic_list;
1163 }

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().

◆ 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 516 of file timsdata.cpp.

517 {
519 
520  return frame->getMassSpectrumCstSPtr(scanNum);
521 }

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 294 of file timsdata.cpp.

295 {
296 
297  auto coordinate = getScanCoordinateFromRawIndex(raw_index);
298  return getMassSpectrumCstSPtr(coordinate.first, coordinate.second);
299 }

References getMassSpectrumCstSPtr(), and getScanCoordinateFromRawIndex().

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

◆ getMsLevelBySpectrumIndex()

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

Definition at line 537 of file timsdata.cpp.

538 {
539  auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
540  auto tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
541  return tims_frame.get()->getMsLevel();
542 }

References getScanCoordinateFromRawIndex(), and getTimsFrameCstSPtrCached().

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

◆ getQualifiedMassSpectrumByRawIndex()

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

Definition at line 546 of file timsdata.cpp.

548 {
549  auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
550  TimsFrameBaseCstSPtr tims_frame;
551  if(want_binary_data)
552  {
553  tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
554  }
555  else
556  {
557  tims_frame = getTimsFrameBaseCstSPtrCached(coordinate.first);
558  }
559  QualifiedMassSpectrum mass_spectrum;
560  MassSpectrumId spectrum_id;
561 
562  spectrum_id.setSpectrumIndex(spectrum_index);
563  spectrum_id.setNativeId(QString("frame=%1 scan=%2 index=%3")
564  .arg(coordinate.first)
565  .arg(coordinate.second)
566  .arg(spectrum_index));
567 
568  mass_spectrum.setMassSpectrumId(spectrum_id);
569 
570  mass_spectrum.setMsLevel(tims_frame.get()->getMsLevel());
571  mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
572 
573  mass_spectrum.setPrecursorCharge(0);
574  mass_spectrum.setPrecursorMz(0);
575  mass_spectrum.setPrecursorIntensity(0);
576 
577  mass_spectrum.setDtInMilliSeconds(
578  tims_frame.get()->getDriftTime(coordinate.second));
579  // 1/K0
580  mass_spectrum.setParameterValue(
582  tims_frame.get()->getOneOverK0Transformation(coordinate.second));
583 
584  mass_spectrum.setEmptyMassSpectrum(true);
585  if(want_binary_data)
586  {
587  mass_spectrum.setMassSpectrumSPtr(
588  tims_frame.get()->getMassSpectrumSPtr(coordinate.second));
589  if(mass_spectrum.size() > 0)
590  {
591  mass_spectrum.setEmptyMassSpectrum(false);
592  }
593  }
594  else
595  {
596  // if(tims_frame.get()->getNbrPeaks(coordinate.second) > 0)
597  //{
598  mass_spectrum.setEmptyMassSpectrum(false);
599  // }
600  }
601  if(tims_frame.get()->getMsLevel() > 1)
602  {
603 
604  QSqlDatabase qdb = openDatabaseConnection();
605  QSqlQuery q = qdb.exec(
606  QString(
607  "SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
608  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
609  "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
610  "PasefFrameMsMsInfo.Frame=%1 and (PasefFrameMsMsInfo.ScanNumBegin "
611  "<= %2 and PasefFrameMsMsInfo.ScanNumEnd >= %2);")
612  .arg(coordinate.first)
613  .arg(coordinate.second));
614  if(q.lastError().isValid())
615  {
616  throw PappsoException(
617  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
618  "command %2:\n%3\n%4\n%5")
619  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
620  .arg(q.lastQuery())
621  .arg(qdb.lastError().databaseText())
622  .arg(qdb.lastError().driverText())
623  .arg(qdb.lastError().nativeErrorCode()));
624  }
625  if(q.next())
626  {
627  mass_spectrum.setPrecursorCharge(q.value(11).toInt());
628  mass_spectrum.setPrecursorMz(q.value(10).toDouble());
629  mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
630  // mass_spectrum.setPrecursorSpectrumIndex();
631 
632 
633  MassSpectrumId spectrum_id;
634  std::size_t prec_spectrum_index = getRawIndexFromCoordinate(
635  q.value(14).toDouble(), coordinate.second);
636 
637  mass_spectrum.setPrecursorSpectrumIndex(prec_spectrum_index);
638  mass_spectrum.setPrecursorNativeId(
639  QString("frame=%1 scan=%2 index=%3")
640  .arg(q.value(14).toDouble())
641  .arg(coordinate.second)
642  .arg(prec_spectrum_index));
643 
644  mass_spectrum.setParameterValue(
645  QualifiedMassSpectrumParameter::IsolationMz, q.value(3).toDouble());
646  mass_spectrum.setParameterValue(
648  q.value(4).toDouble());
649 
650  mass_spectrum.setParameterValue(
652  q.value(5).toFloat());
653  mass_spectrum.setParameterValue(
655  q.value(6).toInt());
656  }
657  }
658 
659  return mass_spectrum;
660 }

References 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::setPrecursorCharge(), pappso::QualifiedMassSpectrum::setPrecursorIntensity(), pappso::QualifiedMassSpectrum::setPrecursorMz(), 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 664 of file timsdata.cpp.

667 {
668  QualifiedMassSpectrum mass_spectrum;
669 
670  try
671  {
672  QSqlDatabase qdb = openDatabaseConnection();
673  mass_spectrum.setMsLevel(1);
674  mass_spectrum.setPrecursorCharge(0);
675  mass_spectrum.setPrecursorMz(0);
676  mass_spectrum.setPrecursorIntensity(0);
677  mass_spectrum.setPrecursorSpectrumIndex(0);
678  mass_spectrum.setEmptyMassSpectrum(true);
679  QSqlQuery q =
680  qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
681  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
682  "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
683  "Precursors.Id=%1;")
684  .arg(precursor_index));
685  if(q.lastError().isValid())
686  {
687 
688  throw PappsoException(
689  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
690  "command %2:\n%3\n%4\n%5")
691  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
692  .arg(q.lastQuery())
693  .arg(qdb.lastError().databaseText())
694  .arg(qdb.lastError().driverText())
695  .arg(qdb.lastError().nativeErrorCode()));
696  }
697  if(q.size() == 0)
698  {
699 
700  throw ExceptionNotFound(
701  QObject::tr(
702  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
703  "id=%1 not found")
704  .arg(precursor_index));
705  }
706  else
707  {
708  TracePlusCombiner combiner;
709  MapTrace combiner_result;
710 
711 
712  bool first = true;
713  std::size_t scan_mobility_start = 0;
714  std::size_t scan_mobility_end = 0;
715  std::set<std::size_t> tims_frame_list;
716  while(q.next())
717  {
718  // get MS1 frame
719  tims_frame_list.insert(q.value(14).toLongLong());
720  if(first)
721  {
722 
723 
724  MassSpectrumId spectrum_id;
725 
726  spectrum_id.setSpectrumIndex(precursor_index);
727  spectrum_id.setNativeId(
728  QString("frame=%1 begin=%2 end=%3 precursor=%4 idxms2=%5")
729  .arg(q.value(0).toLongLong())
730  .arg(q.value(1).toLongLong())
731  .arg(q.value(2).toLongLong())
732  .arg(precursor_index)
733  .arg(ms2_index));
734 
735 
736  mass_spectrum.setMassSpectrumId(spectrum_id);
737 
738 
739  scan_mobility_start = q.value(1).toLongLong();
740  scan_mobility_end = q.value(2).toLongLong();
741 
742  first = false;
743  }
744  }
745 
746  first = true;
747  for(std::size_t tims_id : tims_frame_list)
748  {
749  TimsFrameBaseCstSPtr tims_frame =
750  getTimsFrameCstSPtrCached(tims_id);
751  if(first)
752  {
753  mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
754 
755  mass_spectrum.setParameterValue(
757  tims_frame.get()->getOneOverK0Transformation(
758  scan_mobility_start));
759 
760  mass_spectrum.setParameterValue(
762  tims_frame.get()->getOneOverK0Transformation(
763  scan_mobility_end));
764 
765  first = false;
766  }
767 
768 
769  if(want_binary_data)
770  {
771  combiner.combine(combiner_result,
772  tims_frame.get()->cumulateScanToTrace(
773  scan_mobility_start, scan_mobility_end));
774  }
775  else
776  {
777  break;
778  }
779  }
780 
781 
782  if(first == true)
783  {
784  throw ExceptionNotFound(
785  QObject::tr(
786  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
787  "id=%1 not found")
788  .arg(precursor_index));
789  }
790 
791 
792  if(want_binary_data)
793  {
794 
795  pappso::Trace trace(combiner_result);
796  qDebug();
797 
798  if(trace.size() > 0)
799  {
800  if(mcsp_ms1Filter != nullptr)
801  {
802  mcsp_ms1Filter->filter(trace);
803  }
804 
805  qDebug();
806  mass_spectrum.setMassSpectrumSPtr(
807  MassSpectrum(trace).makeMassSpectrumSPtr());
808  mass_spectrum.setEmptyMassSpectrum(false);
809  }
810  else
811  {
812  mass_spectrum.setMassSpectrumSPtr(nullptr);
813  mass_spectrum.setEmptyMassSpectrum(true);
814  }
815  }
816  }
817  }
818  catch(std::exception &error)
819  {
820  qDebug() << __FILE__ << "@" << __LINE__ << __FUNCTION__ << "()"
821  << QString("Failure %1 ").arg(error.what());
822  }
823  return mass_spectrum;
824 }

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::setPrecursorCharge(), pappso::QualifiedMassSpectrum::setPrecursorIntensity(), pappso::QualifiedMassSpectrum::setPrecursorMz(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), and pappso::MassSpectrumId::setSpectrumIndex().

Referenced by pappso::TimsMsRunReaderMs2::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 828 of file timsdata.cpp.

833 {
834  qDebug();
835  try
836  {
837  QSqlDatabase qdb = openDatabaseConnection();
838  MassSpectrumId spectrum_id;
839 
840  spectrum_id.setSpectrumIndex(precursor_index);
841  spectrum_id.setNativeId(
842  QString("precursor=%1 idxms2=%2").arg(precursor_index).arg(ms2_index));
843 
844  mass_spectrum.setMassSpectrumId(spectrum_id);
845 
846  mass_spectrum.setMsLevel(2);
847  mass_spectrum.setPrecursorCharge(0);
848  mass_spectrum.setPrecursorMz(0);
849  mass_spectrum.setPrecursorIntensity(0);
850  mass_spectrum.setPrecursorSpectrumIndex(ms2_index - 1);
851 
852  mass_spectrum.setEmptyMassSpectrum(true);
853 
854  qdb = openDatabaseConnection();
855  // m_mutex.lock();
856  // if(m_query != nullptr)
857  // {
858  // *m_query =
859  // qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.*
860  // FROM "
861  // "PasefFrameMsMsInfo INNER JOIN Precursors ON "
862  // "PasefFrameMsMsInfo.Precursor=Precursors.Id
863  // where " "Precursors.Id=%1;")
864  // .arg(precursor_index));
865  // }
866  QSqlQuery q =
867  qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
868  "PasefFrameMsMsInfo INNER JOIN Precursors ON "
869  "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
870  "Precursors.Id=%1;")
871  .arg(precursor_index));
872  if(q.lastError().isValid())
873  {
874  qDebug();
875  throw PappsoException(
876  QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
877  "command %2:\n%3\n%4\n%5")
878  .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
879  .arg(q.lastQuery())
880  .arg(qdb.lastError().databaseText())
881  .arg(qdb.lastError().driverText())
882  .arg(qdb.lastError().nativeErrorCode()));
883  }
884  qDebug();
885  // m_mutex.unlock();
886  if(q.size() == 0)
887  {
888 
889  throw ExceptionNotFound(
890  QObject::tr(
891  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
892  "id=%1 not found")
893  .arg(precursor_index));
894  }
895  else
896  {
897  // qDebug() << " q.size()="<< q.size();
898  qDebug();
899  bool first = true;
900  std::size_t scan_mobility_start = 0;
901  std::size_t scan_mobility_end = 0;
902  std::vector<std::size_t> tims_frame_list;
903 
904  while(q.next())
905  {
906  tims_frame_list.push_back(q.value(0).toLongLong());
907  if(first)
908  {
909  mass_spectrum.setPrecursorCharge(q.value(11).toInt());
910  mass_spectrum.setPrecursorMz(q.value(10).toDouble());
911  mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
912 
913  mass_spectrum.setPrecursorNativeId(
914  QString("frame=%1 begin=%2 end=%3 precursor=%4 idxms2=%5")
915  .arg(q.value(14).toLongLong())
916  .arg(q.value(1).toLongLong())
917  .arg(q.value(2).toLongLong())
918  .arg(precursor_index)
919  .arg(ms2_index - 1));
920  // mass_spectrum.setPrecursorSpectrumIndex();
921 
922  scan_mobility_start = q.value(1).toLongLong();
923  scan_mobility_end = q.value(2).toLongLong();
924 
925  mass_spectrum.setParameterValue(
927  q.value(3).toDouble());
928  mass_spectrum.setParameterValue(
930  q.value(4).toDouble());
931 
932  mass_spectrum.setParameterValue(
934  q.value(5).toFloat());
935  mass_spectrum.setParameterValue(
937  q.value(6).toInt());
938 
939  first = false;
940  }
941  }
942  // QMutexLocker locker(&m_mutex_spectrum);
943  qDebug();
944  pappso::TimsFrameCstSPtr tims_frame;
945  TracePlusCombiner combiner;
946  MapTrace combiner_result;
947  first = true;
948  for(std::size_t tims_id : tims_frame_list)
949  {
950 
951  tims_frame = getTimsFrameCstSPtrCached(tims_id);
952  if(first)
953  {
954  mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
955 
956  mass_spectrum.setParameterValue(
958  tims_frame.get()->getOneOverK0Transformation(
959  scan_mobility_start));
960 
961  mass_spectrum.setParameterValue(
963  tims_frame.get()->getOneOverK0Transformation(
964  scan_mobility_end));
965 
966  first = false;
967  }
968 
969 
970  if(want_binary_data)
971  {
972  qDebug();
973  combiner.combine(combiner_result,
974  tims_frame.get()->cumulateScanToTrace(
975  scan_mobility_start, scan_mobility_end));
976  qDebug();
977  }
978  }
979  qDebug() << " precursor_index=" << precursor_index
980  << " num_rows=" << tims_frame_list.size()
981  << " sql=" << q.lastQuery() << " "
982  << (std::size_t)QThread::currentThreadId();
983  if(first == true)
984  {
985  throw ExceptionNotFound(
986  QObject::tr(
987  "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
988  "id=%1 not found")
989  .arg(precursor_index));
990  }
991  if(want_binary_data)
992  {
993  qDebug();
994  // peak_pick.filter(trace);
995 
996  pappso::Trace trace(combiner_result);
997  qDebug() << "AAAAAAA";
998 
999  if(trace.size() > 0)
1000  {
1001  qDebug() << trace.size() << " "
1002  << (std::size_t)QThread::currentThreadId();
1003 
1004  if(mcsp_ms2Filter != nullptr)
1005  {
1006  // FilterTriangle filter;
1007  // filter.setTriangleSlope(50, 0.02);
1008  // filter.filter(trace);
1009  // trace.filter(pappso::FilterHighPass(10));
1010  mcsp_ms2Filter->filter(trace);
1011  }
1012 
1013  // FilterScaleFactorY filter_scale((double)1 /
1014  // (double)tims_frame_list.size());
1015  // filter_scale.filter(trace);
1016  qDebug();
1017  mass_spectrum.setMassSpectrumSPtr(
1018  MassSpectrum(trace).makeMassSpectrumSPtr());
1019  mass_spectrum.setEmptyMassSpectrum(false);
1020  }
1021  else
1022  {
1023  mass_spectrum.setMassSpectrumSPtr(nullptr);
1024  mass_spectrum.setEmptyMassSpectrum(true);
1025  }
1026 
1027  qDebug();
1028  }
1029  qDebug();
1030  }
1031  }
1032  catch(std::exception &error)
1033  {
1034  qDebug() << __FILE__ << "@" << __LINE__ << __FUNCTION__ << "()"
1035  << QString("Failure %1 ").arg(error.what());
1036  }
1037  qDebug();
1038 }

References pappso::BrukerPrecursorIndex, pappso::CollisionEnergy, pappso::TracePlusCombiner::combine(), getTimsFrameCstSPtrCached(), pappso::IsolationMz, pappso::IsolationWidth, 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::setPrecursorCharge(), pappso::QualifiedMassSpectrum::setPrecursorIntensity(), pappso::QualifiedMassSpectrum::setPrecursorMz(), pappso::QualifiedMassSpectrum::setPrecursorNativeId(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), and pappso::MassSpectrumId::setSpectrumIndex().

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

◆ getRawIndexFromCoordinate()

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

Definition at line 245 of file timsdata.cpp.

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

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 200 of file timsdata.cpp.

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

References m_timsDataDirectory, and openDatabaseConnection().

Referenced by getMassSpectrumCstSPtrByRawIndex(), 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 303 of file timsdata.cpp.

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

References m_timsDataDirectory, and openDatabaseConnection().

Referenced by getTimsFrameBaseCstSPtrCached().

◆ getTimsFrameBaseCstSPtrCached()

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

Definition at line 1042 of file timsdata.cpp.

1043 {
1044  QMutexLocker locker(&m_mutex);
1045  for(auto &tims_frame : m_timsFrameBaseCache)
1046  {
1047  if(tims_frame.get()->getId() == timsId)
1048  {
1049  m_timsFrameBaseCache.push_back(tims_frame);
1050  return tims_frame;
1051  }
1052  }
1053 
1054  m_timsFrameBaseCache.push_back(getTimsFrameBaseCstSPtr(timsId));
1055  if(m_timsFrameBaseCache.size() > m_cacheSize)
1056  m_timsFrameBaseCache.pop_front();
1057  return m_timsFrameBaseCache.back();
1058 }

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

Referenced by getQualifiedMassSpectrumByRawIndex().

◆ getTimsFrameCstSPtr()

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

get a Tims frame with his database ID

Definition at line 426 of file timsdata.cpp.

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

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 1061 of file timsdata.cpp.

1062 {
1063  QMutexLocker locker(&m_mutex);
1064  for(auto &tims_frame : m_timsFrameCache)
1065  {
1066  if(tims_frame.get()->getId() == timsId)
1067  {
1068  m_timsFrameCache.push_back(tims_frame);
1069  return tims_frame;
1070  }
1071  }
1072 
1073  m_timsFrameCache.push_back(getTimsFrameCstSPtr(timsId));
1074  if(m_timsFrameCache.size() > m_cacheSize)
1075  m_timsFrameCache.pop_front();
1076  return m_timsFrameCache.back();
1077 }

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 392 of file timsdata.cpp.

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

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 531 of file timsdata.cpp.

532 {
534 }

References m_totalNumberOfPrecursors.

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

◆ getTotalNumberOfScans()

std::size_t TimsData::getTotalNumberOfScans ( ) const

get the total number of scans

Definition at line 524 of file timsdata.cpp.

525 {
526  return m_totalNumberOfScans;
527 }

References m_totalNumberOfScans.

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

◆ openDatabaseConnection()

QSqlDatabase TimsData::openDatabaseConnection ( ) const
private

Definition at line 155 of file timsdata.cpp.

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

References m_timsDataDirectory.

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

◆ setMs1FilterCstSPtr()

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

Definition at line 1085 of file timsdata.cpp.

1086 {
1087  mcsp_ms1Filter = filter;
1088 }

References mcsp_ms1Filter.

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

◆ setMs2FilterCstSPtr()

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

Definition at line 1080 of file timsdata.cpp.

1081 {
1082  mcsp_ms2Filter = filter;
1083 }

References mcsp_ms2Filter.

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

Member Data Documentation

◆ m_cacheSize

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

Definition at line 196 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached(), and getTimsFrameCstSPtrCached().

◆ m_mutex

QMutex pappso::TimsData::m_mutex
private

Definition at line 202 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached(), and getTimsFrameCstSPtrCached().

◆ m_timsDataDirectory

◆ m_timsFrameBaseCache

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

Definition at line 198 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached().

◆ m_timsFrameCache

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

Definition at line 197 of file timsdata.h.

Referenced by getTimsFrameCstSPtrCached().

◆ m_totalNumberOfPrecursors

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

Definition at line 195 of file timsdata.h.

Referenced by getTotalNumberOfPrecursors(), and TimsData().

◆ m_totalNumberOfScans

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

Definition at line 194 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 192 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:200
pappso::TimsData::m_totalNumberOfPrecursors
std::size_t m_totalNumberOfPrecursors
Definition: timsdata.h:195
pappso::QualifiedMassSpectrum::setPrecursorIntensity
void setPrecursorIntensity(pappso_double intensity)
Set the intensity of the precursor ion.
Definition: qualifiedmassspectrum.cpp:311
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:201
pappso::TimsData::m_timsFrameBaseCache
std::deque< TimsFrameBaseCstSPtr > m_timsFrameBaseCache
Definition: timsdata.h:198
pappso::TimsData::getTimsFrameBaseCstSPtrCached
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached(std::size_t timsId)
Definition: timsdata.cpp:1042
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::QualifiedMassSpectrum::setPrecursorMz
void setPrecursorMz(pappso_double precursor_mz)
Set the precursor m/z ratio.
Definition: qualifiedmassspectrum.cpp:208
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:196
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:380
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:154
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:303
pappso::TimsDirectXicExtractor
Definition: timsdirectxicextractor.h:56
pappso::QualifiedMassSpectrum::setMsLevel
void setMsLevel(uint ms_level)
Set the mass spectrum level.
Definition: qualifiedmassspectrum.cpp:224
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:1061
pappso::QualifiedMassSpectrum::size
std::size_t size() const
Definition: qualifiedmassspectrum.cpp:326
pappso::QualifiedMassSpectrum::setRtInSeconds
void setRtInSeconds(pappso_double rt)
Set the retention time in seconds.
Definition: qualifiedmassspectrum.cpp:240
pappso::TimsData::m_mutex
QMutex m_mutex
Definition: timsdata.h:202
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:86
pappso::TimsData::getScanCoordinateFromRawIndex
std::pair< std::size_t, std::size_t > getScanCoordinateFromRawIndex(std::size_t spectrum_index) const
Definition: timsdata.cpp:200
pappso::TimsData::m_timsDataDirectory
QDir m_timsDataDirectory
Definition: timsdata.h:191
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:516
pappso::QualifiedMassSpectrum::setPrecursorNativeId
void setPrecursorNativeId(const QString &native_id)
Set the scan native id of the precursor ion.
Definition: qualifiedmassspectrum.cpp:298
pappso::QualifiedMassSpectrum::setMassSpectrumId
void setMassSpectrumId(const MassSpectrumId &iD)
Set the MassSpectrumId.
Definition: qualifiedmassspectrum.cpp:138
pappso::TimsFrameBaseSPtr
std::shared_ptr< TimsFrameBase > TimsFrameBaseSPtr
Definition: timsframebase.h:56
pappso::TimsData::m_totalNumberOfScans
std::size_t m_totalNumberOfScans
Definition: timsdata.h:194
pappso::TimsData::mpa_timsBinDec
TimsBinDec * mpa_timsBinDec
Definition: timsdata.h:192
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:197
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::QualifiedMassSpectrum::setPrecursorCharge
void setPrecursorCharge(uint precursor_charge)
Set the precursor charge.
Definition: qualifiedmassspectrum.cpp:192
pappso::MassSpectrumId
Definition: massspectrumid.h:59
pappso::QualifiedMassSpectrum::setEmptyMassSpectrum
void setEmptyMassSpectrum(bool is_empty_mass_spectrum)
Definition: qualifiedmassspectrum.cpp:177
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:283
pappso::TimsData::getTimsFrameCstSPtr
TimsFrameCstSPtr getTimsFrameCstSPtr(std::size_t timsId) const
get a Tims frame with his database ID
Definition: timsdata.cpp:426
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:264
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:245
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:155
pappso::TimsXicStructure::rtTarget
pappso::pappso_double rtTarget
Definition: timsdata.h:91
pappso::TracePlusCombiner
Definition: tracepluscombiner.h:27
pappso::PappsoException
Definition: pappsoexception.h:63
pappso::FilterTriangle::setTriangleSlope
double setTriangleSlope(double intensity, double mz)
Definition: filtertriangle.cpp:47