libpappsomspp
Library for mass spectrometry
pappso::TimsData Class Reference

#include <timsdata.h>

Classes

struct  SpectrumDescr
 

Public Member Functions

 TimsData (QDir timsDataDirectory)
 build using the tims data directory More...
 
 TimsData (const TimsData &other)
 
virtual ~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 getTotalNumberOfFrames () const
 Get total number of frames. More...
 
std::size_t getTotalNumberOfScans () const
 get the total number of scans More...
 
std::size_t getTotalNumberOfPrecursors () const
 get the number of precursors analyzed 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)
 
void getQualifiedMassSpectrumByRawIndex (const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, std::size_t spectrum_index, bool want_binary_data)
 
Trace getTicChromatogram () const
 
void getQualifiedMs2MassSpectrumByPrecursorId (const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, const SpectrumDescr &spectrum_descr, bool want_binary_data)
 
void getQualifiedMs1MassSpectrumByPrecursorId (const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, const SpectrumDescr &spectrum_descr, 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 getTimsFrameCstSPtrCached (std::size_t timsId)
 get a Tims frame with his database ID but look in the cache first More...
 
TimsFrameCstSPtr getTimsFrameCstSPtr (std::size_t timsId)
 get a Tims frame with his database ID More...
 
XicCoordTims getXicCoordTimsFromPrecursorId (std::size_t precursor_id, PrecisionPtr precision_ptr)
 
void ms2ReaderSpectrumCollectionByMsLevel (const MsRunIdCstSPtr &msrun_id, SpectrumCollectionHandlerInterface &handler, unsigned int ms_level)
 function to visit an MsRunReader and get each Spectrum in a spectrum collection handler by Ms Levels More...
 
void rawReaderSpectrumCollectionByMsLevel (const MsRunIdCstSPtr &msrun_id, SpectrumCollectionHandlerInterface &handler, unsigned int ms_level)
 function to visit an MsRunReader and get each raw Spectrum in a spectrum collection handler by Ms Levels More...
 
std::map< quint32, quint32 > getRawMs2ByPrecursorId (std::size_t precursor_index)
 get cumulated raw signal for a given precursorCMakeLists.txt.userCMakeLists.txt.userCMakeLists.txt.user only to use to see the raw signal More...
 
std::map< quint32, quint32 > getRawMsBySpectrumIndex (std::size_t spectrum_index)
 get raw signal for a spectrum index only to use to see the raw signal More...
 
virtual std::vector< double > getRetentionTimeLine () const
 retention timeline get retention times along the MSrun in seconds More...
 
SpectrumDescr getSpectrumDescrWithPrecursorId (std::size_t precursor_id)
 get an intermediate structure describing a spectrum More...
 
void setMonoThread (bool is_mono_thread)
 set only one is_mono_thread to true More...
 
const std::vector< FrameIdDescr > & getFrameIdDescrList () const
 
const std::vector< TimsFrameRecord > & getTimsFrameRecordList () const
 

Private Member Functions

SpectrumDescr getSpectrumDescrWithScanCoordinate (const std::pair< std::size_t, std::size_t > &scan_coordinate)
 
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)
 get a Tims frame base (no binary data file access) with his database ID More...
 
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached (std::size_t timsId)
 
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)
 
void fillFrameIdDescrList ()
 private function to fill m_frameIdDescrList More...
 
void ms2ReaderGenerateMS1MS2Spectrum (const MsRunIdCstSPtr &msrun_id, std::vector< QualifiedMassSpectrum > &qualified_mass_spectrum_list, SpectrumCollectionHandlerInterface &handler, const SpectrumDescr &spectrum_descr, unsigned int ms_level)
 
void fillSpectrumDescriptionWithSqlRecord (SpectrumDescr &spectrum_descr, QSqlQuery &qprecursor_list)
 

Private Attributes

QDir m_timsDataDirectory
 
TimsBinDecmpa_timsBinDec = nullptr
 
std::size_t m_totalNumberOfScans
 
std::size_t m_totalNumberOfPrecursors
 
std::size_t m_totalNumberOfFrames
 
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...
 
std::map< int, QSqlRecord > m_mapMzCalibrationRecord
 
std::map< int, QSqlRecord > m_mapTimsCalibrationRecord
 
std::vector< TimsFrameRecordm_mapFramesRecord
 
std::map< std::size_t, QSqlRecord > m_mapXicCoordRecord
 
MzCalibrationStorempa_mzCalibrationStore
 
std::vector< FrameIdDescrm_frameIdDescrList
 store every frame id and corresponding sizes More...
 
std::map< std::size_t, std::size_t > m_thousandIndexToFrameIdDescrListIndex
 index to find quickly a frameId in the description list with the raw index of spectrum modulo 1000 @key thousands of TOF scans @value corresponding m_frameIdDescrList index More...
 
std::vector< std::size_t > m_someoneIsLoadingFrameId
 tells if someone is loading a frame id More...
 
bool m_isMonoThread = false
 
bool m_hasPrecursorTable
 
QMutex m_mutex
 

Detailed Description

Todo:
write docs

Definition at line 63 of file timsdata.h.

Constructor & Destructor Documentation

◆ TimsData() [1/2]

pappso::TimsData::TimsData ( QDir  timsDataDirectory)

build using the tims data directory

Definition at line 46 of file timsdata.cpp.

47 : m_timsDataDirectory(timsDataDirectory)
48{
49
50 qDebug() << "Start of construction of TimsData";
51 mpa_mzCalibrationStore = new MzCalibrationStore();
52 if(!m_timsDataDirectory.exists())
53 {
54 throw PappsoException(
55 QObject::tr("ERROR TIMS data directory %1 not found")
56 .arg(m_timsDataDirectory.absolutePath()));
57 }
58
59 if(!QFileInfo(m_timsDataDirectory.absoluteFilePath("analysis.tdf")).exists())
60 {
61
62 throw PappsoException(
63 QObject::tr("ERROR TIMS data directory, %1 sqlite file not found")
64 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf")));
65 }
66
67 // Open the database
68 QSqlDatabase qdb = openDatabaseConnection();
69
70
71 QSqlQuery q(qdb);
72 if(!q.exec("select Key, Value from GlobalMetadata where "
73 "Key='TimsCompressionType';"))
74 {
75
76 qDebug();
77 throw PappsoException(
78 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
79 "command %2:\n%3\n%4\n%5")
80 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
81 .arg(q.lastQuery())
82 .arg(q.lastError().databaseText())
83 .arg(q.lastError().driverText())
84 .arg(q.lastError().nativeErrorCode()));
85 }
86
87
88 int compression_type = 0;
89 if(q.next())
90 {
91 compression_type = q.value(1).toInt();
92 }
93 qDebug() << " compression_type=" << compression_type;
94 mpa_timsBinDec = new TimsBinDec(
95 QFileInfo(m_timsDataDirectory.absoluteFilePath("analysis.tdf_bin")),
96 compression_type);
97
98 qDebug();
99
100 // get number of precursors
102 if(!q.exec("SELECT COUNT( DISTINCT Id) FROM Precursors;"))
103 {
104 m_hasPrecursorTable = false;
105 }
106 else
107 {
108 m_hasPrecursorTable = true;
109 if(q.next())
110 {
111 m_totalNumberOfPrecursors = q.value(0).toLongLong();
112 }
113 }
114
115
117
118 // get number of scans
119 if(!q.exec("SELECT SUM(NumScans),COUNT(Id) FROM Frames"))
120 {
121 qDebug();
122 throw PappsoException(
123 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
124 "command %2:\n%3\n%4\n%5")
125 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
126 .arg(q.lastQuery())
127 .arg(qdb.lastError().databaseText())
128 .arg(qdb.lastError().driverText())
129 .arg(qdb.lastError().nativeErrorCode()));
130 }
131 if(q.next())
132 {
133 m_totalNumberOfScans = q.value(0).toLongLong();
134 m_totalNumberOfFrames = q.value(1).toLongLong();
135 }
136
137 if(!q.exec("select * from MzCalibration;"))
138 {
139 qDebug();
140 throw PappsoException(
141 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
142 "command %2:\n%3\n%4\n%5")
143 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
144 .arg(q.lastQuery())
145 .arg(q.lastError().databaseText())
146 .arg(q.lastError().driverText())
147 .arg(q.lastError().nativeErrorCode()));
148 }
149
150 while(q.next())
151 {
152 QSqlRecord record = q.record();
154 std::pair<int, QSqlRecord>(record.value(0).toInt(), record));
155 }
156
157 // m_mapTimsCalibrationRecord
158
159 if(!q.exec("select * from TimsCalibration;"))
160 {
161 qDebug();
162 throw PappsoException(
163 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
164 "command %2:\n%3\n%4\n%5")
165 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
166 .arg(q.lastQuery())
167 .arg(q.lastError().databaseText())
168 .arg(q.lastError().driverText())
169 .arg(q.lastError().nativeErrorCode()));
170 }
171 while(q.next())
172 {
173 QSqlRecord record = q.record();
175 std::pair<int, QSqlRecord>(record.value(0).toInt(), record));
176 }
177
178
179 // store frames
180 if(!q.exec("select Frames.TimsId, Frames.AccumulationTime, " // 1
181 "Frames.MzCalibration, " // 2
182 "Frames.T1, Frames.T2, " // 4
183 "Frames.Time, Frames.MsMsType, Frames.TimsCalibration, " // 7
184 "Frames.Id " // 8
185 " FROM Frames;"))
186 {
187 qDebug();
188 throw PappsoException(
189 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
190 "command %2:\n%3\n%4\n%5")
191 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
192 .arg(q.lastQuery())
193 .arg(q.lastError().databaseText())
194 .arg(q.lastError().driverText())
195 .arg(q.lastError().nativeErrorCode()));
196 }
197
199 while(q.next())
200 {
201 QSqlRecord record = q.record();
202 TimsFrameRecord &frame_record =
203 m_mapFramesRecord[record.value(8).toULongLong()];
204
205 frame_record.tims_offset = record.value(0).toULongLong();
206 frame_record.accumulation_time = record.value(1).toDouble();
207 frame_record.mz_calibration_id = record.value(2).toULongLong();
208 frame_record.frame_t1 = record.value(3).toDouble();
209 frame_record.frame_t2 = record.value(4).toDouble();
210 frame_record.frame_time = record.value(5).toDouble();
211 frame_record.msms_type = record.value(6).toInt();
212 frame_record.tims_calibration_id = record.value(7).toULongLong();
213 }
214
215 mcsp_ms2Filter = std::make_shared<FilterSuiteString>(
216 "chargeDeconvolution|0.02dalton mzExclusion|0.01dalton");
217
218
219 std::shared_ptr<FilterTriangle> ms1filter =
220 std::make_shared<FilterTriangle>();
221 ms1filter.get()->setTriangleSlope(50, 0.01);
222 mcsp_ms1Filter = ms1filter;
223 qDebug();
224}
QSqlDatabase openDatabaseConnection() const
Definition: timsdata.cpp:233
std::size_t m_totalNumberOfFrames
Definition: timsdata.h:310
std::size_t m_totalNumberOfScans
Definition: timsdata.h:308
std::vector< TimsFrameRecord > m_mapFramesRecord
Definition: timsdata.h:325
std::map< int, QSqlRecord > m_mapMzCalibrationRecord
Definition: timsdata.h:323
std::map< int, QSqlRecord > m_mapTimsCalibrationRecord
Definition: timsdata.h:324
void fillFrameIdDescrList()
private function to fill m_frameIdDescrList
Definition: timsdata.cpp:294
bool m_hasPrecursorTable
Definition: timsdata.h:349
QDir m_timsDataDirectory
Definition: timsdata.h:305
MzCalibrationStore * mpa_mzCalibrationStore
Definition: timsdata.h:328
TimsBinDec * mpa_timsBinDec
Definition: timsdata.h:306
pappso::FilterInterfaceCstSPtr mcsp_ms1Filter
Definition: timsdata.h:316
pappso::FilterInterfaceCstSPtr mcsp_ms2Filter
Definition: timsdata.h:315
std::size_t m_totalNumberOfPrecursors
Definition: timsdata.h:309

References pappso::TimsFrameRecord::accumulation_time, fillFrameIdDescrList(), pappso::TimsFrameRecord::frame_t1, pappso::TimsFrameRecord::frame_t2, pappso::TimsFrameRecord::frame_time, m_hasPrecursorTable, m_mapFramesRecord, m_mapMzCalibrationRecord, m_mapTimsCalibrationRecord, m_timsDataDirectory, m_totalNumberOfFrames, m_totalNumberOfPrecursors, m_totalNumberOfScans, mcsp_ms1Filter, mcsp_ms2Filter, mpa_mzCalibrationStore, mpa_timsBinDec, pappso::TimsFrameRecord::msms_type, pappso::TimsFrameRecord::mz_calibration_id, openDatabaseConnection(), pappso::TimsFrameRecord::tims_calibration_id, and pappso::TimsFrameRecord::tims_offset.

◆ TimsData() [2/2]

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

Copy constructor

Parameters
otherTODO

Definition at line 263 of file timsdata.cpp.

264{
265 qDebug();
266}

◆ ~TimsData()

pappso::TimsData::~TimsData ( )
virtual

Destructor

Definition at line 268 of file timsdata.cpp.

269{
270 // m_qdb.close();
271 if(mpa_timsBinDec != nullptr)
272 {
273 delete mpa_timsBinDec;
274 }
275 if(mpa_mzCalibrationStore != nullptr)
276 {
278 }
279}

References mpa_mzCalibrationStore, and mpa_timsBinDec.

Member Function Documentation

◆ fillFrameIdDescrList()

void pappso::TimsData::fillFrameIdDescrList ( )
private

private function to fill m_frameIdDescrList

number of scans in mobility dimension (number of TOF scans)

Definition at line 294 of file timsdata.cpp.

295{
296 qDebug();
297 QSqlDatabase qdb = openDatabaseConnection();
298
299 QSqlQuery q =
300 qdb.exec(QString("SELECT Id, NumScans FROM "
301 "Frames ORDER BY Id"));
302 if(q.lastError().isValid())
303 {
304
305 throw PappsoException(
306 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
307 "command %2:\n%3\n%4\n%5")
308 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
309 .arg(q.lastQuery())
310 .arg(qdb.lastError().databaseText())
311 .arg(qdb.lastError().driverText())
312 .arg(qdb.lastError().nativeErrorCode()));
313 }
314 TimsFrameSPtr tims_frame;
315 bool index_found = false;
316 std::size_t timsId;
317 /** @brief number of scans in mobility dimension (number of TOF scans)
318 */
319 std::size_t numberScans;
320 std::size_t cumulScans = 0;
321 while(q.next() && (!index_found))
322 {
323 timsId = q.value(0).toULongLong();
324 numberScans = q.value(1).toULongLong();
325
326 // qDebug() << timsId;
327
329 std::pair<std::size_t, std::size_t>((cumulScans / 1000),
330 m_frameIdDescrList.size()));
331
332 m_frameIdDescrList.push_back({timsId, numberScans, cumulScans});
333 cumulScans += numberScans;
334 }
335 qDebug();
336}
std::vector< FrameIdDescr > m_frameIdDescrList
store every frame id and corresponding sizes
Definition: timsdata.h:333
std::map< std::size_t, std::size_t > m_thousandIndexToFrameIdDescrListIndex
index to find quickly a frameId in the description list with the raw index of spectrum modulo 1000 @k...
Definition: timsdata.h:340
std::shared_ptr< TimsFrame > TimsFrameSPtr
Definition: timsframe.h:41

References m_frameIdDescrList, m_thousandIndexToFrameIdDescrListIndex, m_timsDataDirectory, and openDatabaseConnection().

Referenced by TimsData().

◆ fillSpectrumDescriptionWithSqlRecord()

void pappso::TimsData::fillSpectrumDescriptionWithSqlRecord ( TimsData::SpectrumDescr spectrum_descr,
QSqlQuery &  qprecursor_list 
)
private

Definition at line 2069 of file timsdata.cpp.

2071{
2072
2073 spectrum_descr.tims_frame_list.clear();
2074 spectrum_descr.tims_frame_list.push_back(
2075 qprecursor_list.value(0).toLongLong());
2076 // mass_spectrum.setPrecursorCharge(q.value(11).toInt());
2077 // mass_spectrum.setPrecursorMz(q.value(10).toDouble());
2078 // mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
2079 spectrum_descr.precursor_ion_data =
2080 PrecursorIonData(qprecursor_list.value(10).toDouble(),
2081 qprecursor_list.value(11).toInt(),
2082 qprecursor_list.value(13).toDouble());
2083
2084 spectrum_descr.precursor_id = qprecursor_list.value(6).toLongLong();
2085 spectrum_descr.ms2_index = (spectrum_descr.precursor_id * 2) - 1;
2086 spectrum_descr.ms1_index = (spectrum_descr.precursor_id * 2) - 2;
2087
2088 spectrum_descr.scan_mobility_start = qprecursor_list.value(1).toLongLong();
2089 spectrum_descr.scan_mobility_end = qprecursor_list.value(2).toLongLong();
2090
2091 spectrum_descr.isolationMz = qprecursor_list.value(3).toDouble();
2092 spectrum_descr.isolationWidth = qprecursor_list.value(4).toDouble();
2093 spectrum_descr.collisionEnergy = qprecursor_list.value(5).toFloat();
2094 spectrum_descr.parent_frame = qprecursor_list.value(14).toLongLong();
2095}

References pappso::TimsData::SpectrumDescr::collisionEnergy, pappso::TimsData::SpectrumDescr::isolationMz, pappso::TimsData::SpectrumDescr::isolationWidth, pappso::TimsData::SpectrumDescr::ms1_index, pappso::TimsData::SpectrumDescr::ms2_index, pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::precursor_ion_data, pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, and pappso::TimsData::SpectrumDescr::tims_frame_list.

Referenced by rawReaderSpectrumCollectionByMsLevel().

◆ getClosestPrecursorIdByMz()

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

Definition at line 748 of file timsdata.cpp.

750{
751 std::vector<std::size_t> best_precursor;
752 double best_value = 1;
753 int count = 1;
754 int best_val_position = 0;
755
756 for(std::vector<double> values : ids)
757 {
758 double new_val = abs(mz_value - values[4]);
759 if(new_val < best_value)
760 {
761 best_value = new_val;
762 best_val_position = count;
763 }
764 count++;
765 }
766 best_precursor.push_back(ids[best_val_position][1]);
767 return best_precursor;
768}

Referenced by getPrecursorsFromMzRtCharge().

◆ getFrameIdDescrList()

const std::vector< FrameIdDescr > & pappso::TimsData::getFrameIdDescrList ( ) const

Definition at line 2363 of file timsdata.cpp.

2364{
2365 return m_frameIdDescrList;
2366}

References m_frameIdDescrList.

◆ getMassSpectrumCstSPtr()

MassSpectrumCstSPtr pappso::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 613 of file timsdata.cpp.

614{
615 qDebug() << " timsId=" << timsId << " scanNum=" << scanNum;
617
618 return frame->getMassSpectrumCstSPtr(scanNum);
619}
TimsFrameCstSPtr getTimsFrameCstSPtrCached(std::size_t timsId)
get a Tims frame with his database ID but look in the cache first
Definition: timsdata.cpp:1093
std::shared_ptr< const TimsFrame > TimsFrameCstSPtr
Definition: timsframe.h:42

References getTimsFrameCstSPtrCached().

Referenced by getMassSpectrumCstSPtrByRawIndex().

◆ getMassSpectrumCstSPtrByRawIndex()

MassSpectrumCstSPtr pappso::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 398 of file timsdata.cpp.

399{
400
401 qDebug() << " raw_index=" << raw_index;
402 try
403 {
404 auto coordinate = getScanCoordinateFromRawIndex(raw_index);
405 return getMassSpectrumCstSPtr(coordinate.first, coordinate.second);
406 }
407 catch(PappsoException &error)
408 {
409 throw PappsoException(
410 QObject::tr("Error TimsData::getMassSpectrumCstSPtrByRawIndex "
411 "raw_index=%1 :\n%2")
412 .arg(raw_index)
413 .arg(error.qwhat()));
414 }
415}
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:613
std::pair< std::size_t, std::size_t > getScanCoordinateFromRawIndex(std::size_t spectrum_index) const
Definition: timsdata.cpp:339

References getMassSpectrumCstSPtr(), getScanCoordinateFromRawIndex(), and pappso::PappsoException::qwhat().

◆ getMatchPrecursorIdByKo()

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

Definition at line 722 of file timsdata.cpp.

724{
725 std::vector<std::size_t> precursor_id;
726 for(std::vector<double> index : ids)
727 {
728 auto coordinate = getScanCoordinateFromRawIndex(index[0]);
729
730 TimsFrameBaseCstSPtr tims_frame;
731 tims_frame = getTimsFrameBaseCstSPtrCached(coordinate.first);
732
733 double bko = tims_frame.get()->getOneOverK0Transformation(index[2]);
734 double eko = tims_frame.get()->getOneOverK0Transformation(index[3]);
735
736 // qInfo() << "diff" << (bko + eko) / 2;
737 double mean_ko = (bko + eko) / 2;
738
739 if(mean_ko > ko_value - 0.1 && mean_ko < ko_value + 0.1)
740 {
741 precursor_id.push_back(index[1]);
742 }
743 }
744 return precursor_id;
745}
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached(std::size_t timsId)
Definition: timsdata.cpp:1072
std::shared_ptr< const TimsFrameBase > TimsFrameBaseCstSPtr
Definition: timsframebase.h:41

References getScanCoordinateFromRawIndex(), and getTimsFrameBaseCstSPtrCached().

◆ getMs2BuiltinCentroid()

bool pappso::TimsData::getMs2BuiltinCentroid ( ) const

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

Definition at line 288 of file timsdata.cpp.

289{
291}
bool m_builtinMs2Centroid
enable builtin centroid on raw tims integers by default
Definition: timsdata.h:320

References m_builtinMs2Centroid.

◆ getMsLevelBySpectrumIndex()

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

Definition at line 772 of file timsdata.cpp.

773{
774 auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
775 auto tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
776 return tims_frame.get()->getMsLevel();
777}

References getScanCoordinateFromRawIndex(), and getTimsFrameCstSPtrCached().

◆ getPrecursorsFromMzRtCharge()

std::vector< std::size_t > pappso::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 643 of file timsdata.cpp.

647{
648 std::vector<std::size_t> precursor_ids;
649 std::vector<std::vector<double>> ids;
650
651 QSqlDatabase qdb = openDatabaseConnection();
652 QSqlQuery q = qdb.exec(
653 QString(
654 "SELECT Frames.Time, Precursors.MonoisotopicMz, Precursors.Charge, "
655 "Precursors.Id, Frames.Id, PasefFrameMsMsInfo.ScanNumBegin, "
656 "PasefFrameMsMsInfo.scanNumEnd "
657 "FROM Frames "
658 "INNER JOIN PasefFrameMsMsInfo ON Frames.Id = PasefFrameMsMsInfo.Frame "
659 "INNER JOIN Precursors ON PasefFrameMsMsInfo.Precursor = Precursors.Id "
660 "WHERE Precursors.Charge == %1 "
661 "AND Precursors.MonoisotopicMz > %2 -0.01 "
662 "AND Precursors.MonoisotopicMz < %2 +0.01 "
663 "AND Frames.Time >= %3 -1 "
664 "AND Frames.Time < %3 +1; ")
665 .arg(charge)
666 .arg(mz_val)
667 .arg(rt_sec));
668 if(q.lastError().isValid())
669 {
670
671 throw PappsoException(
672 QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
673 "executing SQL "
674 "command %3:\n%4\n%5\n%6")
675 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
676 .arg(qdb.databaseName())
677 .arg(q.lastQuery())
678 .arg(qdb.lastError().databaseText())
679 .arg(qdb.lastError().driverText())
680 .arg(qdb.lastError().nativeErrorCode()));
681 }
682 while(q.next())
683 {
684 // qInfo() << q.value(0).toDouble() << q.value(1).toDouble()
685 // << q.value(2).toDouble() << q.value(3).toDouble();
686
687 std::vector<double> sql_values;
688 sql_values.push_back(q.value(4).toDouble()); // frame id
689 sql_values.push_back(q.value(3).toDouble()); // precursor id
690 sql_values.push_back(q.value(5).toDouble()); // scan num begin
691 sql_values.push_back(q.value(6).toDouble()); // scan num end
692 sql_values.push_back(q.value(1).toDouble()); // mz_value
693
694 ids.push_back(sql_values);
695
696
697 if(std::find(precursor_ids.begin(),
698 precursor_ids.end(),
699 q.value(3).toDouble()) == precursor_ids.end())
700 {
701 precursor_ids.push_back(q.value(3).toDouble());
702 }
703 }
704
705 if(precursor_ids.size() > 1)
706 {
707 // std::vector<std::size_t> precursor_ids_ko =
708 // getMatchPrecursorIdByKo(ids, values[3]);
709 if(precursor_ids.size() > 1)
710 {
711 precursor_ids = getClosestPrecursorIdByMz(ids, k0);
712 }
713 return precursor_ids;
714 }
715 else
716 {
717 return precursor_ids;
718 }
719}
std::vector< std::size_t > getClosestPrecursorIdByMz(std::vector< std::vector< double > > ids, double mz_value)
Definition: timsdata.cpp:748

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

◆ getQualifiedMassSpectrumByRawIndex()

void pappso::TimsData::getQualifiedMassSpectrumByRawIndex ( const MsRunIdCstSPtr msrun_id,
QualifiedMassSpectrum mass_spectrum,
std::size_t  spectrum_index,
bool  want_binary_data 
)

Definition at line 781 of file timsdata.cpp.

786{
787 try
788 {
789 auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
790 TimsFrameBaseCstSPtr tims_frame;
791 if(want_binary_data)
792 {
793 tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
794 }
795 else
796 {
797 tims_frame = getTimsFrameBaseCstSPtrCached(coordinate.first);
798 }
799 MassSpectrumId spectrum_id;
800
801 spectrum_id.setSpectrumIndex(spectrum_index);
802 spectrum_id.setMsRunId(msrun_id);
803 spectrum_id.setNativeId(QString("frame=%1 scan=%2 index=%3")
804 .arg(coordinate.first)
805 .arg(coordinate.second)
806 .arg(spectrum_index));
807
808 mass_spectrum.setMassSpectrumId(spectrum_id);
809
810 mass_spectrum.setMsLevel(tims_frame.get()->getMsLevel());
811 mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
812
813 mass_spectrum.setDtInMilliSeconds(
814 tims_frame.get()->getDriftTime(coordinate.second));
815 // 1/K0
816 mass_spectrum.setParameterValue(
818 tims_frame.get()->getOneOverK0Transformation(coordinate.second));
819
820 mass_spectrum.setEmptyMassSpectrum(true);
821 if(want_binary_data)
822 {
823 mass_spectrum.setMassSpectrumSPtr(
824 tims_frame.get()->getMassSpectrumSPtr(coordinate.second));
825 if(mass_spectrum.size() > 0)
826 {
827 mass_spectrum.setEmptyMassSpectrum(false);
828 }
829 }
830 else
831 {
832 // if(tims_frame.get()->getNbrPeaks(coordinate.second) > 0)
833 //{
834 mass_spectrum.setEmptyMassSpectrum(false);
835 // }
836 }
837 if(tims_frame.get()->getMsLevel() > 1)
838 {
839
840 auto spectrum_descr = getSpectrumDescrWithScanCoordinate(coordinate);
841 if(spectrum_descr.precursor_id > 0)
842 {
843
844 mass_spectrum.appendPrecursorIonData(
845 spectrum_descr.precursor_ion_data);
846
847
848 MassSpectrumId spectrum_id;
849 std::size_t prec_spectrum_index = getRawIndexFromCoordinate(
850 spectrum_descr.parent_frame, coordinate.second);
851
852 mass_spectrum.setPrecursorSpectrumIndex(prec_spectrum_index);
853 mass_spectrum.setPrecursorNativeId(
854 QString("frame=%1 scan=%2 index=%3")
855 .arg(spectrum_descr.parent_frame)
856 .arg(coordinate.second)
857 .arg(prec_spectrum_index));
858
859 mass_spectrum.setParameterValue(
861 spectrum_descr.isolationMz);
862 mass_spectrum.setParameterValue(
864 spectrum_descr.isolationWidth);
865
866 mass_spectrum.setParameterValue(
868 spectrum_descr.collisionEnergy);
869 mass_spectrum.setParameterValue(
871 (quint64)spectrum_descr.precursor_id);
872 }
873 }
874 }
875 catch(PappsoException &error)
876 {
877 throw PappsoException(
878 QObject::tr("Error TimsData::getQualifiedMassSpectrumByRawIndex "
879 "spectrum_index=%1 :\n%2")
880 .arg(spectrum_index)
881 .arg(error.qwhat()));
882 }
883}
SpectrumDescr getSpectrumDescrWithScanCoordinate(const std::pair< std::size_t, std::size_t > &scan_coordinate)
Definition: timsdata.cpp:1997
std::size_t getRawIndexFromCoordinate(std::size_t frame_id, std::size_t scan_num) const
Definition: timsdata.cpp:375
@ CollisionEnergy
Bruker's Tims tof collision energy.
@ IsolationWidth
isolation window width
@ BrukerPrecursorIndex
Bruker's Tims tof precursor index.

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

◆ getQualifiedMs1MassSpectrumByPrecursorId()

void pappso::TimsData::getQualifiedMs1MassSpectrumByPrecursorId ( const MsRunIdCstSPtr msrun_id,
QualifiedMassSpectrum mass_spectrum,
const SpectrumDescr spectrum_descr,
bool  want_binary_data 
)

Definition at line 971 of file timsdata.cpp.

976{
977
978 qDebug() << " ms2_index=" << spectrum_descr.ms2_index
979 << " precursor_index=" << spectrum_descr.precursor_id;
980
981 TracePlusCombiner combiner;
982 MapTrace combiner_result;
983
984 try
985 {
986 mass_spectrum.setMsLevel(1);
987 mass_spectrum.setPrecursorSpectrumIndex(0);
988 mass_spectrum.setEmptyMassSpectrum(true);
989
990 MassSpectrumId spectrum_id;
991 spectrum_id.setSpectrumIndex(spectrum_descr.ms1_index);
992 spectrum_id.setNativeId(
993 QString("frame=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
994 .arg(spectrum_descr.parent_frame)
995 .arg(spectrum_descr.scan_mobility_start)
996 .arg(spectrum_descr.scan_mobility_end)
997 .arg(spectrum_descr.precursor_id)
998 .arg(spectrum_descr.ms1_index));
999
1000 spectrum_id.setMsRunId(msrun_id);
1001
1002 mass_spectrum.setMassSpectrumId(spectrum_id);
1003
1004
1005 TimsFrameBaseCstSPtr tims_frame;
1006 if(want_binary_data)
1007 {
1008 qDebug() << "bindec";
1009 tims_frame = getTimsFrameCstSPtrCached(spectrum_descr.parent_frame);
1010 }
1011 else
1012 {
1013 tims_frame =
1014 getTimsFrameBaseCstSPtrCached(spectrum_descr.parent_frame);
1015 }
1016 mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
1017
1018 mass_spectrum.setParameterValue(
1020 tims_frame.get()->getOneOverK0Transformation(
1021 spectrum_descr.scan_mobility_start));
1022
1023 mass_spectrum.setParameterValue(
1025 tims_frame.get()->getOneOverK0Transformation(
1026 spectrum_descr.scan_mobility_end));
1027
1028
1029 if(want_binary_data)
1030 {
1031 combiner.combine(combiner_result,
1032 tims_frame.get()->cumulateScanToTrace(
1033 spectrum_descr.scan_mobility_start,
1034 spectrum_descr.scan_mobility_end));
1035
1036 Trace trace(combiner_result);
1037 qDebug();
1038
1039 if(trace.size() > 0)
1040 {
1041 if(mcsp_ms1Filter != nullptr)
1042 {
1043 mcsp_ms1Filter->filter(trace);
1044 }
1045
1046 qDebug();
1047 mass_spectrum.setMassSpectrumSPtr(
1048 MassSpectrum(trace).makeMassSpectrumSPtr());
1049 mass_spectrum.setEmptyMassSpectrum(false);
1050 }
1051 else
1052 {
1053 mass_spectrum.setMassSpectrumSPtr(nullptr);
1054 mass_spectrum.setEmptyMassSpectrum(true);
1055 }
1056 }
1057 qDebug();
1058 }
1059
1060 catch(PappsoException &error)
1061 {
1062 throw error;
1063 }
1064 catch(std::exception &error)
1065 {
1066 qDebug() << QString("Failure %1 ").arg(error.what());
1067 }
1068}
@ OneOverK0end
1/k0 of last acquisition for composite pasef MS/MS spectrum

References pappso::TracePlusCombiner::combine(), getTimsFrameBaseCstSPtrCached(), getTimsFrameCstSPtrCached(), mcsp_ms1Filter, pappso::TimsData::SpectrumDescr::ms1_index, pappso::TimsData::SpectrumDescr::ms2_index, pappso::OneOverK0begin, pappso::OneOverK0end, pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setMsRunId(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), pappso::MassSpectrumId::setSpectrumIndex(), and pappso::PappsoException::what().

Referenced by ms2ReaderGenerateMS1MS2Spectrum(), and pappso::TimsMsRunReaderMs2Selected::qualifiedMassSpectrum().

◆ getQualifiedMs2MassSpectrumByPrecursorId()

void pappso::TimsData::getQualifiedMs2MassSpectrumByPrecursorId ( const MsRunIdCstSPtr msrun_id,
QualifiedMassSpectrum mass_spectrum,
const SpectrumDescr spectrum_descr,
bool  want_binary_data 
)

Definition at line 1415 of file timsdata.cpp.

1420{
1421 try
1422 {
1423 qDebug();
1424 MassSpectrumId spectrum_id;
1425
1426 spectrum_id.setSpectrumIndex(spectrum_descr.ms2_index);
1427 spectrum_id.setNativeId(QString("precursor=%1 idxms2=%2")
1428 .arg(spectrum_descr.precursor_id)
1429 .arg(spectrum_descr.ms2_index));
1430 spectrum_id.setMsRunId(msrun_id);
1431
1432 mass_spectrum.setMassSpectrumId(spectrum_id);
1433
1434 mass_spectrum.setMsLevel(2);
1435 qDebug() << "spectrum_descr.precursor_id=" << spectrum_descr.precursor_id
1436 << " spectrum_descr.ms1_index=" << spectrum_descr.ms1_index
1437 << " spectrum_descr.ms2_index=" << spectrum_descr.ms2_index;
1438 mass_spectrum.setPrecursorSpectrumIndex(spectrum_descr.ms1_index);
1439
1440 mass_spectrum.setEmptyMassSpectrum(true);
1441
1442 qDebug();
1443
1444
1445 mass_spectrum.appendPrecursorIonData(spectrum_descr.precursor_ion_data);
1446
1447 mass_spectrum.setPrecursorNativeId(
1448 QString("frame=%1 begin=%2 end=%3 precursor=%4 idxms1=%5")
1449 .arg(spectrum_descr.parent_frame)
1450 .arg(spectrum_descr.scan_mobility_start)
1451 .arg(spectrum_descr.scan_mobility_end)
1452 .arg(spectrum_descr.precursor_id)
1453 .arg(spectrum_descr.ms1_index));
1454
1455 mass_spectrum.setParameterValue(
1457 spectrum_descr.isolationMz);
1458 mass_spectrum.setParameterValue(
1460 spectrum_descr.isolationWidth);
1461
1462 mass_spectrum.setParameterValue(
1464 spectrum_descr.collisionEnergy);
1465 mass_spectrum.setParameterValue(
1467 (quint64)spectrum_descr.precursor_id);
1468
1469 // QMutexLocker locker(&m_mutex_spectrum);
1470 qDebug();
1471 TimsFrameBaseCstSPtr tims_frame, previous_frame;
1472 // TracePlusCombiner combiner;
1473 // MapTrace combiner_result;
1474 std::map<quint32, quint32> raw_spectrum;
1475 bool first = true;
1476 for(std::size_t tims_id : spectrum_descr.tims_frame_list)
1477 {
1478 qDebug() << " precursor_index=" << spectrum_descr.precursor_id
1479 << " tims_id=" << tims_id
1480 << (std::size_t)QThread::currentThreadId();
1481 ;
1482 if(want_binary_data)
1483 {
1484 qDebug() << "bindec";
1485 tims_frame = getTimsFrameCstSPtrCached(tims_id);
1486 }
1487 else
1488 {
1489 tims_frame = getTimsFrameBaseCstSPtrCached(tims_id);
1490 }
1491 qDebug() << (std::size_t)QThread::currentThreadId();
1492 ;
1493 if(first)
1494 {
1495 mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
1496
1497 mass_spectrum.setParameterValue(
1499 tims_frame.get()->getOneOverK0Transformation(
1500 spectrum_descr.scan_mobility_start));
1501
1502 mass_spectrum.setParameterValue(
1504 tims_frame.get()->getOneOverK0Transformation(
1505 spectrum_descr.scan_mobility_end));
1506
1507 first = false;
1508 }
1509
1510
1511 if(want_binary_data)
1512 {
1513 qDebug();
1514 /*combiner.combine(combiner_result,
1515 tims_frame.get()->cumulateScanToTrace(
1516 scan_mobility_start, scan_mobility_end));*/
1517 if(previous_frame.get() != nullptr)
1518 {
1519 if(previous_frame.get()->hasSameCalibrationData(
1520 *tims_frame.get()))
1521 {
1522 }
1523 else
1524 {
1525 throw ExceptionNotFound(
1526 QObject::tr(
1527 "ERROR in %1 %2, different calibration data "
1528 "between frame id %3 and frame id %4")
1529 .arg(__FILE__)
1530 .arg(__FUNCTION__)
1531 .arg(previous_frame.get()->getId())
1532 .arg(tims_frame.get()->getId()));
1533 }
1534 }
1535 qDebug() << (std::size_t)QThread::currentThreadId();
1536 ;
1537 tims_frame.get()->cumulateScansInRawMap(
1538 raw_spectrum,
1539 spectrum_descr.scan_mobility_start,
1540 spectrum_descr.scan_mobility_end);
1541 qDebug() << (std::size_t)QThread::currentThreadId();
1542 ;
1543 }
1544 previous_frame = tims_frame;
1545 }
1546 qDebug() << " precursor_index=" << spectrum_descr.precursor_id
1547 << " num_rows=" << spectrum_descr.tims_frame_list.size()
1548 << (std::size_t)QThread::currentThreadId();
1549 if(first == true)
1550 {
1551 throw ExceptionNotFound(
1552 QObject::tr(
1553 "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
1554 "id=%1 not found")
1555 .arg(spectrum_descr.precursor_id));
1556 }
1557 if(want_binary_data)
1558 {
1559 qDebug() << " precursor_index=" << spectrum_descr.precursor_id;
1560 // peak_pick.filter(trace);
1561 Trace trace;
1563 {
1564 trace =
1565 tims_frame.get()->getTraceFromCumulatedScansBuiltinCentroid(
1566 raw_spectrum);
1567 }
1568 else
1569 {
1570 // no builtin centroid:
1571
1572 trace =
1573 tims_frame.get()->getTraceFromCumulatedScans(raw_spectrum);
1574 }
1575
1576 if(trace.size() > 0)
1577 {
1578 qDebug() << " precursor_index=" << spectrum_descr.precursor_id
1579 << " " << trace.size() << " "
1580 << (std::size_t)QThread::currentThreadId();
1581
1582 if(mcsp_ms2Filter != nullptr)
1583 {
1584 // FilterTriangle filter;
1585 // filter.setTriangleSlope(50, 0.02);
1586 // filter.filter(trace);
1587 // trace.filter(FilterHighPass(10));
1588 mcsp_ms2Filter->filter(trace);
1589 }
1590
1591 // FilterScaleFactorY filter_scale((double)1 /
1592 // (double)tims_frame_list.size());
1593 // filter_scale.filter(trace);
1594 qDebug() << " precursor_index=" << spectrum_descr.precursor_id;
1595 mass_spectrum.setMassSpectrumSPtr(
1596 MassSpectrum(trace).makeMassSpectrumSPtr());
1597 mass_spectrum.setEmptyMassSpectrum(false);
1598 }
1599 else
1600 {
1601 mass_spectrum.setMassSpectrumSPtr(nullptr);
1602 mass_spectrum.setEmptyMassSpectrum(true);
1603 }
1604
1605 qDebug();
1606 }
1607 qDebug();
1608 }
1609
1610 catch(PappsoException &error)
1611 {
1612 throw PappsoException(
1613 QObject::tr("ERROR in %1 (ms2_index=%2 precursor_index=%3):\n%4")
1614 .arg(__FUNCTION__)
1615 .arg(spectrum_descr.ms2_index)
1616 .arg(spectrum_descr.precursor_id)
1617 .arg(error.qwhat()));
1618 }
1619 catch(std::exception &error)
1620 {
1621 qDebug() << QString("Failure %1 ").arg(error.what());
1622 }
1623 qDebug();
1624}

References pappso::QualifiedMassSpectrum::appendPrecursorIonData(), pappso::BrukerPrecursorIndex, pappso::CollisionEnergy, pappso::TimsData::SpectrumDescr::collisionEnergy, getTimsFrameBaseCstSPtrCached(), getTimsFrameCstSPtrCached(), pappso::IsolationMz, pappso::TimsData::SpectrumDescr::isolationMz, pappso::IsolationWidth, pappso::TimsData::SpectrumDescr::isolationWidth, m_builtinMs2Centroid, mcsp_ms2Filter, pappso::TimsData::SpectrumDescr::ms1_index, pappso::TimsData::SpectrumDescr::ms2_index, pappso::OneOverK0begin, pappso::OneOverK0end, pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::precursor_ion_data, pappso::PappsoException::qwhat(), pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setMsRunId(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorNativeId(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::QualifiedMassSpectrum::setRtInSeconds(), pappso::MassSpectrumId::setSpectrumIndex(), pappso::TimsData::SpectrumDescr::tims_frame_list, and pappso::PappsoException::what().

Referenced by ms2ReaderGenerateMS1MS2Spectrum(), and pappso::TimsMsRunReaderMs2Selected::qualifiedMassSpectrum().

◆ getRawIndexFromCoordinate()

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

Definition at line 375 of file timsdata.cpp.

377{
378
379 for(auto frameDescr : m_frameIdDescrList)
380 {
381 if(frameDescr.m_frameId == frame_id)
382 {
383 return frameDescr.m_cumulSize + scan_num;
384 }
385 }
386
387 throw ExceptionNotFound(
388 QObject::tr("ERROR raw index with frame=%1 scan=%2 not found")
389 .arg(frame_id)
390 .arg(scan_num));
391}

References m_frameIdDescrList.

Referenced by getQualifiedMassSpectrumByRawIndex(), and rawReaderSpectrumCollectionByMsLevel().

◆ getRawMs2ByPrecursorId()

std::map< quint32, quint32 > pappso::TimsData::getRawMs2ByPrecursorId ( std::size_t  precursor_index)

get cumulated raw signal for a given precursorCMakeLists.txt.userCMakeLists.txt.userCMakeLists.txt.user only to use to see the raw signal

Parameters
precursor_indexprecursor index to extract signal from
Returns
a map of integers, x=time of flights, y= intensities

Definition at line 1287 of file timsdata.cpp.

1288{
1289 qDebug();
1290 std::map<quint32, quint32> raw_spectrum;
1291 try
1292 {
1293 QSqlDatabase qdb = openDatabaseConnection();
1294
1295 qdb = openDatabaseConnection();
1296 QSqlQuery q =
1297 qdb.exec(QString("SELECT PasefFrameMsMsInfo.*, Precursors.* FROM "
1298 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
1299 "PasefFrameMsMsInfo.Precursor=Precursors.Id where "
1300 "Precursors.Id=%1;")
1301 .arg(precursor_index));
1302 if(q.lastError().isValid())
1303 {
1304 qDebug();
1305 throw PappsoException(
1306 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
1307 "command %2:\n%3\n%4\n%5")
1308 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1309 .arg(q.lastQuery())
1310 .arg(qdb.lastError().databaseText())
1311 .arg(qdb.lastError().driverText())
1312 .arg(qdb.lastError().nativeErrorCode()));
1313 }
1314 qDebug();
1315 // m_mutex.unlock();
1316 if(q.size() == 0)
1317 {
1318
1319 throw ExceptionNotFound(
1320 QObject::tr(
1321 "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
1322 "id=%1 not found")
1323 .arg(precursor_index));
1324 }
1325 else
1326 {
1327 // qDebug() << " q.size()="<< q.size();
1328 qDebug();
1329 bool first = true;
1330 std::size_t scan_mobility_start = 0;
1331 std::size_t scan_mobility_end = 0;
1332 std::vector<std::size_t> tims_frame_list;
1333
1334 while(q.next())
1335 {
1336 tims_frame_list.push_back(q.value(0).toLongLong());
1337 if(first)
1338 {
1339
1340 scan_mobility_start = q.value(1).toLongLong();
1341 scan_mobility_end = q.value(2).toLongLong();
1342
1343 first = false;
1344 }
1345 }
1346 // QMutexLocker locker(&m_mutex_spectrum);
1347 qDebug();
1348 TimsFrameCstSPtr tims_frame, previous_frame;
1349 // TracePlusCombiner combiner;
1350 // MapTrace combiner_result;
1351 for(std::size_t tims_id : tims_frame_list)
1352 {
1353 tims_frame = getTimsFrameCstSPtrCached(tims_id);
1354 qDebug();
1355 /*combiner.combine(combiner_result,
1356 tims_frame.get()->cumulateScanToTrace(
1357 scan_mobility_start, scan_mobility_end));*/
1358 if(previous_frame.get() != nullptr)
1359 {
1360 if(previous_frame.get()->hasSameCalibrationData(
1361 *tims_frame.get()))
1362 {
1363 }
1364 else
1365 {
1366 throw ExceptionNotFound(
1367 QObject::tr(
1368 "ERROR in %1 %2, different calibration data "
1369 "between frame id %3 and frame id %4")
1370 .arg(__FILE__)
1371 .arg(__FUNCTION__)
1372 .arg(previous_frame.get()->getId())
1373 .arg(tims_frame.get()->getId()));
1374 }
1375 }
1376 tims_frame.get()->cumulateScansInRawMap(
1377 raw_spectrum, scan_mobility_start, scan_mobility_end);
1378 qDebug();
1379
1380 previous_frame = tims_frame;
1381 }
1382 qDebug() << " precursor_index=" << precursor_index
1383 << " num_rows=" << tims_frame_list.size()
1384 << " sql=" << q.lastQuery() << " "
1385 << (std::size_t)QThread::currentThreadId();
1386 if(first == true)
1387 {
1388 throw ExceptionNotFound(
1389 QObject::tr(
1390 "ERROR in getQualifiedMassSpectrumByPrecursorId, precursor "
1391 "id=%1 not found")
1392 .arg(precursor_index));
1393 }
1394 qDebug();
1395 }
1396 }
1397
1398 catch(PappsoException &error)
1399 {
1400 throw PappsoException(QObject::tr("ERROR in %1 (precursor_index=%2):\n%3")
1401 .arg(__FUNCTION__)
1402 .arg(precursor_index)
1403 .arg(error.qwhat()));
1404 }
1405 catch(std::exception &error)
1406 {
1407 qDebug() << QString("Failure %1 ").arg(error.what());
1408 }
1409 return raw_spectrum;
1410 qDebug();
1411}

References getTimsFrameCstSPtrCached(), m_timsDataDirectory, openDatabaseConnection(), pappso::PappsoException::qwhat(), and pappso::PappsoException::what().

◆ getRawMsBySpectrumIndex()

std::map< quint32, quint32 > pappso::TimsData::getRawMsBySpectrumIndex ( std::size_t  spectrum_index)

get raw signal for a spectrum index only to use to see the raw signal

Parameters
spectrum_indexspcetrum index
Returns
a map of integers, x=time of flights, y= intensities

Definition at line 2347 of file timsdata.cpp.

2348{
2349
2350 qDebug() << " spectrum_index=" << spectrum_index;
2351 auto coordinate = getScanCoordinateFromRawIndex(spectrum_index);
2352 TimsFrameBaseCstSPtr tims_frame;
2353 tims_frame = getTimsFrameCstSPtrCached(coordinate.first);
2354
2355 std::map<quint32, quint32> raw_spectrum;
2356 tims_frame.get()->cumulateScansInRawMap(
2357 raw_spectrum, coordinate.second, coordinate.second);
2358 return raw_spectrum;
2359}

References getScanCoordinateFromRawIndex(), and getTimsFrameCstSPtrCached().

◆ getRetentionTimeLine()

std::vector< double > pappso::TimsData::getRetentionTimeLine ( ) const
virtual

retention timeline get retention times along the MSrun in seconds

Returns
vector of retention times (seconds)

Definition at line 1982 of file timsdata.cpp.

1983{
1984 std::vector<double> timeline;
1985 timeline.reserve(m_mapFramesRecord.size());
1986 for(const TimsFrameRecord &frame_record : m_mapFramesRecord)
1987 {
1988 if(frame_record.mz_calibration_id != 0)
1989 {
1990 timeline.push_back(frame_record.frame_time);
1991 }
1992 }
1993 return timeline;
1994}

References m_mapFramesRecord.

◆ getScanCoordinateFromRawIndex()

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

Definition at line 339 of file timsdata.cpp.

340{
341
342 std::size_t fast_access = raw_index / 1000;
343 qDebug() << " fast_access=" << fast_access;
344 auto map_it = m_thousandIndexToFrameIdDescrListIndex.find(fast_access);
346 {
347 throw ExceptionNotFound(
348 QObject::tr("ERROR raw index %1 not found (fast_access)")
349 .arg(raw_index));
350 }
351 std::size_t start_point_index = map_it->second;
352 while((start_point_index > 0) &&
353 (m_frameIdDescrList[start_point_index].m_cumulSize > raw_index))
354 {
355 start_point_index--;
356 }
357 for(std::size_t i = start_point_index; i < m_frameIdDescrList.size(); i++)
358 {
359
360 if(raw_index <
361 (m_frameIdDescrList[i].m_cumulSize + m_frameIdDescrList[i].m_size))
362 {
363 return std::pair<std::size_t, std::size_t>(
364 m_frameIdDescrList[i].m_frameId,
365 raw_index - m_frameIdDescrList[i].m_cumulSize);
366 }
367 }
368
369 throw ExceptionNotFound(
370 QObject::tr("ERROR raw index %1 not found").arg(raw_index));
371}

References m_frameIdDescrList, and m_thousandIndexToFrameIdDescrListIndex.

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

◆ getSpectrumDescrWithPrecursorId()

TimsData::SpectrumDescr pappso::TimsData::getSpectrumDescrWithPrecursorId ( std::size_t  precursor_id)

get an intermediate structure describing a spectrum

Definition at line 1899 of file timsdata.cpp.

1900{
1901
1902 SpectrumDescr spectrum_descr;
1903 QSqlDatabase qdb = openDatabaseConnection();
1904 QSqlQuery q = qdb.exec(QString("SELECT PasefFrameMsMsInfo.Frame, " // 0
1905 "PasefFrameMsMsInfo.ScanNumBegin, " // 1
1906 "PasefFrameMsMsInfo.ScanNumEnd, " // 2
1907 "PasefFrameMsMsInfo.IsolationMz, " // 3
1908 "PasefFrameMsMsInfo.IsolationWidth, " // 4
1909 "PasefFrameMsMsInfo.CollisionEnergy, " // 5
1910 "PasefFrameMsMsInfo.Precursor, " // 6
1911 "Precursors.Id, " // 7
1912 "Precursors.LargestPeakMz, " // 8
1913 "Precursors.AverageMz, " // 9
1914 "Precursors.MonoisotopicMz, " // 10
1915 "Precursors.Charge, " // 11
1916 "Precursors.ScanNumber, " // 12
1917 "Precursors.Intensity, " // 13
1918 "Precursors.Parent " // 14
1919 "FROM PasefFrameMsMsInfo "
1920 "INNER JOIN Precursors ON "
1921 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
1922 "WHERE Precursors.Id=%1;")
1923 .arg(precursor_id));
1924 if(q.lastError().isValid())
1925 {
1926
1927 throw PappsoException(
1928 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
1929 "command %2:\n%3\n%4\n%5")
1930 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1931 .arg(q.lastQuery())
1932 .arg(qdb.lastError().databaseText())
1933 .arg(qdb.lastError().driverText())
1934 .arg(qdb.lastError().nativeErrorCode()));
1935 }
1936
1937
1938 bool first = true;
1939 while(q.next())
1940 {
1941
1942 qDebug() << " cumul tims frame:" << q.value(0).toLongLong();
1943 spectrum_descr.tims_frame_list.push_back(q.value(0).toLongLong());
1944 if(first)
1945 {
1946 // mass_spectrum.setPrecursorCharge(q.value(11).toInt());
1947 // mass_spectrum.setPrecursorMz(q.value(10).toDouble());
1948 // mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
1949 spectrum_descr.precursor_ion_data =
1950 PrecursorIonData(q.value(10).toDouble(),
1951 q.value(11).toInt(),
1952 q.value(13).toDouble());
1953
1954 spectrum_descr.precursor_id = q.value(6).toLongLong();
1955 spectrum_descr.ms2_index = (spectrum_descr.precursor_id * 2) - 1;
1956 spectrum_descr.ms1_index = (spectrum_descr.precursor_id * 2) - 2;
1957
1958 spectrum_descr.scan_mobility_start = q.value(1).toLongLong();
1959 spectrum_descr.scan_mobility_end = q.value(2).toLongLong();
1960
1961 spectrum_descr.isolationMz = q.value(3).toDouble();
1962 spectrum_descr.isolationWidth = q.value(4).toDouble();
1963 spectrum_descr.collisionEnergy = q.value(5).toFloat();
1964 spectrum_descr.parent_frame = q.value(14).toLongLong();
1965
1966
1967 first = false;
1968 }
1969 }
1970 if(spectrum_descr.precursor_id == 0)
1971 {
1972 throw ExceptionNotFound(
1973 QObject::tr("ERROR in %1 %2 : precursor id (%3) NOT FOUND ")
1974 .arg(__FILE__)
1975 .arg(__FUNCTION__)
1976 .arg(precursor_id));
1977 }
1978 return spectrum_descr;
1979}

References pappso::TimsData::SpectrumDescr::collisionEnergy, pappso::TimsData::SpectrumDescr::isolationMz, pappso::TimsData::SpectrumDescr::isolationWidth, m_timsDataDirectory, pappso::TimsData::SpectrumDescr::ms1_index, pappso::TimsData::SpectrumDescr::ms2_index, openDatabaseConnection(), pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::precursor_ion_data, pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, and pappso::TimsData::SpectrumDescr::tims_frame_list.

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

◆ getSpectrumDescrWithScanCoordinate()

TimsData::SpectrumDescr pappso::TimsData::getSpectrumDescrWithScanCoordinate ( const std::pair< std::size_t, std::size_t > &  scan_coordinate)
private

Definition at line 1997 of file timsdata.cpp.

1999{
2000
2001 SpectrumDescr spectrum_descr;
2002 QSqlDatabase qdb = openDatabaseConnection();
2003 QSqlQuery q =
2004 qdb.exec(QString("SELECT PasefFrameMsMsInfo.Frame, " // 0
2005 "PasefFrameMsMsInfo.ScanNumBegin, " // 1
2006 "PasefFrameMsMsInfo.ScanNumEnd, " // 2
2007 "PasefFrameMsMsInfo.IsolationMz, " // 3
2008 "PasefFrameMsMsInfo.IsolationWidth, " // 4
2009 "PasefFrameMsMsInfo.CollisionEnergy, " // 5
2010 "PasefFrameMsMsInfo.Precursor, " // 6
2011 "Precursors.Id, " // 7
2012 "Precursors.LargestPeakMz, " // 8
2013 "Precursors.AverageMz, " // 9
2014 "Precursors.MonoisotopicMz, " // 10
2015 "Precursors.Charge, " // 11
2016 "Precursors.ScanNumber, " // 12
2017 "Precursors.Intensity, " // 13
2018 "Precursors.Parent " // 14
2019 "FROM PasefFrameMsMsInfo "
2020 "INNER JOIN Precursors ON "
2021 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
2022 "WHERE "
2023 "PasefFrameMsMsInfo.Frame=%1 and "
2024 "(PasefFrameMsMsInfo.ScanNumBegin "
2025 "<= %2 and PasefFrameMsMsInfo.ScanNumEnd >= %2);")
2026 .arg(scan_coordinate.first)
2027 .arg(scan_coordinate.second));
2028 if(q.lastError().isValid())
2029 {
2030
2031 throw PappsoException(
2032 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
2033 "command %2:\n%3\n%4\n%5")
2034 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
2035 .arg(q.lastQuery())
2036 .arg(qdb.lastError().databaseText())
2037 .arg(qdb.lastError().driverText())
2038 .arg(qdb.lastError().nativeErrorCode()));
2039 }
2040
2041 if(q.next())
2042 {
2043
2044 qDebug() << " cumul tims frame:" << q.value(0).toLongLong();
2045 spectrum_descr.tims_frame_list.push_back(q.value(0).toLongLong());
2046 // mass_spectrum.setPrecursorCharge(q.value(11).toInt());
2047 // mass_spectrum.setPrecursorMz(q.value(10).toDouble());
2048 // mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
2049 spectrum_descr.precursor_ion_data = PrecursorIonData(
2050 q.value(10).toDouble(), q.value(11).toInt(), q.value(13).toDouble());
2051
2052 spectrum_descr.precursor_id = q.value(6).toLongLong();
2053 spectrum_descr.ms2_index = (spectrum_descr.precursor_id * 2) - 1;
2054 spectrum_descr.ms1_index = (spectrum_descr.precursor_id * 2) - 2;
2055
2056 spectrum_descr.scan_mobility_start = q.value(1).toLongLong();
2057 spectrum_descr.scan_mobility_end = q.value(2).toLongLong();
2058
2059 spectrum_descr.isolationMz = q.value(3).toDouble();
2060 spectrum_descr.isolationWidth = q.value(4).toDouble();
2061 spectrum_descr.collisionEnergy = q.value(5).toFloat();
2062 spectrum_descr.parent_frame = q.value(14).toLongLong();
2063 }
2064 return spectrum_descr;
2065}

References pappso::TimsData::SpectrumDescr::collisionEnergy, pappso::TimsData::SpectrumDescr::isolationMz, pappso::TimsData::SpectrumDescr::isolationWidth, m_timsDataDirectory, pappso::TimsData::SpectrumDescr::ms1_index, pappso::TimsData::SpectrumDescr::ms2_index, openDatabaseConnection(), pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::precursor_ion_data, pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, and pappso::TimsData::SpectrumDescr::tims_frame_list.

Referenced by getQualifiedMassSpectrumByRawIndex().

◆ getTicChromatogram()

Trace pappso::TimsData::getTicChromatogram ( ) const

Definition at line 887 of file timsdata.cpp.

888{
889 // In the Frames table, each frame has a record describing the
890 // SummedIntensities for all the mobility spectra.
891
892
893 MapTrace rt_tic_map_trace;
894
895 using Pair = std::pair<double, double>;
896 using Map = std::map<double, double>;
897 using Iterator = Map::iterator;
898
899
900 QSqlDatabase qdb = openDatabaseConnection();
901 QSqlQuery q =
902 qdb.exec(QString("SELECT Time, SummedIntensities "
903 "FROM Frames WHERE MsMsType = 0 "
904 "ORDER BY Time;"));
905
906 if(q.lastError().isValid())
907 {
908
909 throw PappsoException(
910 QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
911 "executing SQL "
912 "command %3:\n%4\n%5\n%6")
913 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
914 .arg(qdb.databaseName())
915 .arg(q.lastQuery())
916 .arg(qdb.lastError().databaseText())
917 .arg(qdb.lastError().driverText())
918 .arg(qdb.lastError().nativeErrorCode()));
919 }
920
921 while(q.next())
922 {
923
924 bool ok = false;
925
926 int cumulated_results = 2;
927
928 double rt = q.value(0).toDouble(&ok);
929 cumulated_results -= ok;
930
931 double sumY = q.value(1).toDouble(&ok);
932 cumulated_results -= ok;
933
934 if(cumulated_results)
935 {
936 throw PappsoException(
937 QObject::tr(
938 "ERROR in TIMS sqlite database file: could not read either the "
939 "retention time or the summed intensities (%1, database name "
940 "%2, "
941 "executing SQL "
942 "command %3:\n%4\n%5\n%6")
943 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
944 .arg(qdb.databaseName())
945 .arg(q.lastQuery())
946 .arg(qdb.lastError().databaseText())
947 .arg(qdb.lastError().driverText())
948 .arg(qdb.lastError().nativeErrorCode()));
949 }
950
951 // Try to insert value sumY at key rt.
952 std::pair<Iterator, bool> res = rt_tic_map_trace.insert(Pair(rt, sumY));
953
954 if(!res.second)
955 {
956 // One other same rt value was seen already (like in ion mobility
957 // mass spectrometry, for example). Only increment the y value.
958
959 res.first->second += sumY;
960 }
961 }
962
963 // qDebug().noquote() << "The TIC chromatogram:\n"
964 //<< rt_tic_map_trace.toTrace().toString();
965
966 return rt_tic_map_trace.toTrace();
967}
@ rt
Retention time.

References m_timsDataDirectory, openDatabaseConnection(), pappso::res, pappso::rt, and pappso::MapTrace::toTrace().

◆ getTimsFrameBaseCstSPtr()

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

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

Definition at line 419 of file timsdata.cpp.

420{
421
422 qDebug() << " timsId=" << timsId;
423
424 const TimsFrameRecord &frame_record = m_mapFramesRecord[timsId];
425 if(timsId > m_totalNumberOfScans)
426 {
427 throw ExceptionNotFound(
428 QObject::tr("ERROR Frames database id %1 not found").arg(timsId));
429 }
430 TimsFrameBaseSPtr tims_frame;
431
432
433 tims_frame = std::make_shared<TimsFrameBase>(
434 TimsFrameBase(timsId, frame_record.tims_offset));
435
436 auto it_map_record =
437 m_mapMzCalibrationRecord.find(frame_record.mz_calibration_id);
438 if(it_map_record != m_mapMzCalibrationRecord.end())
439 {
440
441 double T1_frame = frame_record.frame_t1; // Frames.T1
442 double T2_frame = frame_record.frame_t2; // Frames.T2
443
444
445 tims_frame.get()->setMzCalibrationInterfaceSPtr(
447 T1_frame, T2_frame, it_map_record->second));
448 }
449 else
450 {
451 throw ExceptionNotFound(
452 QObject::tr("ERROR MzCalibration database id %1 not found")
453 .arg(frame_record.mz_calibration_id));
454 }
455
456 tims_frame.get()->setAccumulationTime(frame_record.accumulation_time);
457
458 tims_frame.get()->setTime(frame_record.frame_time);
459 tims_frame.get()->setMsMsType(frame_record.msms_type);
460
461
462 auto it_map_record_tims_calibration =
463 m_mapTimsCalibrationRecord.find(frame_record.tims_calibration_id);
464 if(it_map_record_tims_calibration != m_mapTimsCalibrationRecord.end())
465 {
466
467 tims_frame.get()->setTimsCalibration(
468 it_map_record_tims_calibration->second.value(1).toInt(),
469 it_map_record_tims_calibration->second.value(2).toDouble(),
470 it_map_record_tims_calibration->second.value(3).toDouble(),
471 it_map_record_tims_calibration->second.value(4).toDouble(),
472 it_map_record_tims_calibration->second.value(5).toDouble(),
473 it_map_record_tims_calibration->second.value(6).toDouble(),
474 it_map_record_tims_calibration->second.value(7).toDouble(),
475 it_map_record_tims_calibration->second.value(8).toDouble(),
476 it_map_record_tims_calibration->second.value(9).toDouble(),
477 it_map_record_tims_calibration->second.value(10).toDouble(),
478 it_map_record_tims_calibration->second.value(11).toDouble());
479 }
480 else
481 {
482 throw ExceptionNotFound(
483 QObject::tr("ERROR TimsCalibration database id %1 not found")
484 .arg(frame_record.tims_calibration_id));
485 }
486
487 return tims_frame;
488}
MzCalibrationInterfaceSPtr getInstance(double T1_frame, double T2_frame, const QSqlRecord &mzcalibration_record)
std::shared_ptr< TimsFrameBase > TimsFrameBaseSPtr
Definition: timsframebase.h:40

References pappso::TimsFrameRecord::accumulation_time, pappso::TimsFrameRecord::frame_t1, pappso::TimsFrameRecord::frame_t2, pappso::TimsFrameRecord::frame_time, pappso::MzCalibrationStore::getInstance(), m_mapFramesRecord, m_mapMzCalibrationRecord, m_mapTimsCalibrationRecord, m_totalNumberOfScans, mpa_mzCalibrationStore, pappso::TimsFrameRecord::msms_type, pappso::TimsFrameRecord::mz_calibration_id, pappso::TimsFrameRecord::tims_calibration_id, and pappso::TimsFrameRecord::tims_offset.

Referenced by getTimsFrameBaseCstSPtrCached().

◆ getTimsFrameBaseCstSPtrCached()

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

Definition at line 1072 of file timsdata.cpp.

1073{
1074 QMutexLocker locker(&m_mutex);
1075 for(auto &tims_frame : m_timsFrameBaseCache)
1076 {
1077 if(tims_frame.get()->getId() == timsId)
1078 {
1079 m_timsFrameBaseCache.push_back(tims_frame);
1081 m_timsFrameBaseCache.pop_front();
1082 return tims_frame;
1083 }
1084 }
1085
1088 m_timsFrameBaseCache.pop_front();
1089 return m_timsFrameBaseCache.back();
1090}
std::size_t m_cacheSize
Definition: timsdata.h:311
QMutex m_mutex
Definition: timsdata.h:351
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtr(std::size_t timsId)
get a Tims frame base (no binary data file access) with his database ID
Definition: timsdata.cpp:419
std::deque< TimsFrameBaseCstSPtr > m_timsFrameBaseCache
Definition: timsdata.h:313

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

Referenced by getMatchPrecursorIdByKo(), getQualifiedMassSpectrumByRawIndex(), getQualifiedMs1MassSpectrumByPrecursorId(), getQualifiedMs2MassSpectrumByPrecursorId(), and rawReaderSpectrumCollectionByMsLevel().

◆ getTimsFrameCstSPtr()

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

get a Tims frame with his database ID

this function is not thread safe

Definition at line 527 of file timsdata.cpp.

528{
529
530 qDebug() << " timsId=" << timsId
531 << " m_mapFramesRecord.size()=" << m_mapFramesRecord.size();
532
533 /*
534 for(auto pair_i : m_mapFramesRecord)
535 {
536
537 qDebug() << " pair_i=" << pair_i.first;
538 }
539 */
540
541 const TimsFrameRecord &frame_record = m_mapFramesRecord[timsId];
542 if(timsId > m_totalNumberOfScans)
543 {
544 throw ExceptionNotFound(
545 QObject::tr("ERROR Frames database id %1 not found").arg(timsId));
546 }
547
548 TimsFrameSPtr tims_frame;
549
550
551 // QMutexLocker lock(&m_mutex);
552 tims_frame =
554 // lock.unlock();
555
556 qDebug();
557 auto it_map_record =
558 m_mapMzCalibrationRecord.find(frame_record.mz_calibration_id);
559 if(it_map_record != m_mapMzCalibrationRecord.end())
560 {
561
562 double T1_frame = frame_record.frame_t1; // Frames.T1
563 double T2_frame = frame_record.frame_t2; // Frames.T2
564
565
566 tims_frame.get()->setMzCalibrationInterfaceSPtr(
568 T1_frame, T2_frame, it_map_record->second));
569 }
570 else
571 {
572 throw ExceptionNotFound(
573 QObject::tr("ERROR MzCalibration database id %1 not found")
574 .arg(frame_record.mz_calibration_id));
575 }
576
577 tims_frame.get()->setAccumulationTime(frame_record.accumulation_time);
578
579 tims_frame.get()->setTime(frame_record.frame_time);
580 tims_frame.get()->setMsMsType(frame_record.msms_type);
581
582 qDebug();
583 auto it_map_record_tims_calibration =
584 m_mapTimsCalibrationRecord.find(frame_record.tims_calibration_id);
585 if(it_map_record_tims_calibration != m_mapTimsCalibrationRecord.end())
586 {
587
588 tims_frame.get()->setTimsCalibration(
589 it_map_record_tims_calibration->second.value(1).toInt(),
590 it_map_record_tims_calibration->second.value(2).toDouble(),
591 it_map_record_tims_calibration->second.value(3).toDouble(),
592 it_map_record_tims_calibration->second.value(4).toDouble(),
593 it_map_record_tims_calibration->second.value(5).toDouble(),
594 it_map_record_tims_calibration->second.value(6).toDouble(),
595 it_map_record_tims_calibration->second.value(7).toDouble(),
596 it_map_record_tims_calibration->second.value(8).toDouble(),
597 it_map_record_tims_calibration->second.value(9).toDouble(),
598 it_map_record_tims_calibration->second.value(10).toDouble(),
599 it_map_record_tims_calibration->second.value(11).toDouble());
600 }
601 else
602 {
603 throw ExceptionNotFound(
604 QObject::tr("ERROR TimsCalibration database id %1 not found")
605 .arg(frame_record.tims_calibration_id));
606 }
607 qDebug();
608 return tims_frame;
609}
TimsFrameSPtr getTimsFrameSPtrByOffset(std::size_t frameId, const std::vector< pappso::TimsFrameRecord > &frame_record_list)
Definition: timsbindec.cpp:147

References pappso::TimsFrameRecord::accumulation_time, pappso::TimsFrameRecord::frame_t1, pappso::TimsFrameRecord::frame_t2, pappso::TimsFrameRecord::frame_time, pappso::MzCalibrationStore::getInstance(), pappso::TimsBinDec::getTimsFrameSPtrByOffset(), m_mapFramesRecord, m_mapMzCalibrationRecord, m_mapTimsCalibrationRecord, m_totalNumberOfScans, mpa_mzCalibrationStore, mpa_timsBinDec, pappso::TimsFrameRecord::msms_type, pappso::TimsFrameRecord::mz_calibration_id, and pappso::TimsFrameRecord::tims_calibration_id.

Referenced by getTimsFrameCstSPtrCached().

◆ getTimsFrameCstSPtrCached()

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

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

thread safe

Definition at line 1093 of file timsdata.cpp.

1094{
1095 qDebug();
1096 QMutexLocker locker(&m_mutex);
1097 for(auto &tims_frame : m_timsFrameCache)
1098 {
1099 if(tims_frame.get()->getId() == timsId)
1100 {
1101 m_timsFrameCache.push_back(tims_frame);
1102 if(m_timsFrameCache.size() > m_cacheSize)
1103 m_timsFrameCache.pop_front();
1104 return tims_frame;
1105 }
1106 }
1107 TimsFrameCstSPtr frame_sptr = getTimsFrameCstSPtr(timsId);
1108
1109 // locker.relock();
1110 qDebug();
1111
1112 m_timsFrameCache.push_back(frame_sptr);
1113 if(m_timsFrameCache.size() > m_cacheSize)
1114 m_timsFrameCache.pop_front();
1115 qDebug();
1116 return m_timsFrameCache.back();
1117
1118
1119 /*
1120// the frame is not in the cache
1121if(std::find(m_someoneIsLoadingFrameId.begin(),
1122 m_someoneIsLoadingFrameId.end(),
1123 timsId) == m_someoneIsLoadingFrameId.end())
1124 {
1125 // not found, we are alone on this frame
1126 m_someoneIsLoadingFrameId.push_back(timsId);
1127 qDebug();
1128 //locker.unlock();
1129 TimsFrameCstSPtr frame_sptr = getTimsFrameCstSPtr(timsId);
1130
1131 // locker.relock();
1132 qDebug();
1133 m_someoneIsLoadingFrameId.erase(
1134 std::find(m_someoneIsLoadingFrameId.begin(),
1135 m_someoneIsLoadingFrameId.end(),
1136 timsId));
1137
1138 m_timsFrameCache.push_back(frame_sptr);
1139 if(m_timsFrameCache.size() > m_cacheSize)
1140 m_timsFrameCache.pop_front();
1141 qDebug();
1142 return m_timsFrameCache.back();
1143 }
1144else
1145 {
1146 // this frame is loading by someone else, we have to wait
1147 qDebug();
1148 // locker.unlock();
1149 // std::size_t another_frame_id = timsId;
1150 while(true)
1151 {
1152 QThread::usleep(1);
1153 // locker.relock();
1154
1155 for(auto &tims_frame : m_timsFrameCache)
1156 {
1157 if(tims_frame.get()->getId() == timsId)
1158 {
1159 m_timsFrameCache.push_back(tims_frame);
1160 return tims_frame;
1161 }
1162 }
1163 // locker.unlock();
1164}
1165} // namespace pappso
1166*/
1167}
TimsFrameCstSPtr getTimsFrameCstSPtr(std::size_t timsId)
get a Tims frame with his database ID
Definition: timsdata.cpp:527
std::deque< TimsFrameCstSPtr > m_timsFrameCache
Definition: timsdata.h:312

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

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

◆ getTimsFrameRecordList()

const std::vector< TimsFrameRecord > & pappso::TimsData::getTimsFrameRecordList ( ) const

Definition at line 2369 of file timsdata.cpp.

2370{
2371 return m_mapFramesRecord;
2372}

References m_mapFramesRecord.

◆ getTimsMS1FrameIdRange()

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

Definition at line 491 of file timsdata.cpp.

492{
493
494 qDebug() << " rt_begin=" << rt_begin << " rt_end=" << rt_end;
495 if(rt_begin < 0)
496 rt_begin = 0;
497 std::vector<std::size_t> tims_frameid_list;
498 QSqlDatabase qdb = openDatabaseConnection();
499 QSqlQuery q = qdb.exec(QString("SELECT Frames.Id FROM Frames WHERE "
500 "Frames.MsMsType=0 AND (Frames.Time>=%1) AND "
501 "(Frames.Time<=%2) ORDER BY Frames.Time;")
502 .arg(rt_begin)
503 .arg(rt_end));
504 if(q.lastError().isValid())
505 {
506
507 throw PappsoException(
508 QObject::tr("ERROR in TIMS sqlite database file %1, database name %2, "
509 "executing SQL "
510 "command %3:\n%4\n%5\n%6")
511 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
512 .arg(qdb.databaseName())
513 .arg(q.lastQuery())
514 .arg(qdb.lastError().databaseText())
515 .arg(qdb.lastError().driverText())
516 .arg(qdb.lastError().nativeErrorCode()));
517 }
518 while(q.next())
519 {
520
521 tims_frameid_list.push_back(q.value(0).toULongLong());
522 }
523 return tims_frameid_list;
524}

References m_timsDataDirectory, and openDatabaseConnection().

◆ getTotalNumberOfFrames()

std::size_t pappso::TimsData::getTotalNumberOfFrames ( ) const

Get total number of frames.

Definition at line 623 of file timsdata.cpp.

624{
626}

References m_totalNumberOfFrames.

◆ getTotalNumberOfPrecursors()

std::size_t pappso::TimsData::getTotalNumberOfPrecursors ( ) const

get the number of precursors analyzed by PASEF

Definition at line 637 of file timsdata.cpp.

638{
640}

References m_totalNumberOfPrecursors.

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

◆ getTotalNumberOfScans()

std::size_t pappso::TimsData::getTotalNumberOfScans ( ) const

get the total number of scans

Definition at line 630 of file timsdata.cpp.

631{
633}

References m_totalNumberOfScans.

Referenced by rawReaderSpectrumCollectionByMsLevel().

◆ getXicCoordTimsFromPrecursorId()

XicCoordTims pappso::TimsData::getXicCoordTimsFromPrecursorId ( std::size_t  precursor_id,
PrecisionPtr  precision_ptr 
)

Definition at line 1181 of file timsdata.cpp.

1183{
1184
1185 qDebug();
1186 XicCoordTims xic_coord_tims_struct;
1187
1188 try
1189 {
1190 if(m_mapXicCoordRecord.size() == 0)
1191 {
1192 QMutexLocker lock(&m_mutex);
1193 // Go get records!
1194
1195 // We proceed in this way:
1196
1197 // 1. For each Precursor reference to the Precursors table's ID
1198 // found in the PasefFrameMsMsInfo table, store the precursor ID for
1199 // step 2.
1200
1201 // 2. From the Precursors table's ID from step 1, get the
1202 // MonoisotopicMz.
1203
1204 // 3. From the PasefFrameMsMsInfo table, for the Precursors table's
1205 // ID reference, get a reference to the Frames table's ID. Thanks to
1206 // the Frames ID, look for the Time value (acquisition retention
1207 // time) for the MS/MS spectrum. The Time value in the Frames tables
1208 // always corresponds to a Frame of MsMsType 8 (that is, MS/MS),
1209 // which is expected since we are looking into MS/MS data.
1210
1211 // 4. From the PasefFrameMsMsInfo table, associate the values
1212 // ScanNumBegin and ScanNumEnd, the mobility bins in which the
1213 // precursor was found.
1214
1215
1216 QSqlDatabase qdb = openDatabaseConnection();
1217 QSqlQuery q = qdb.exec(
1218 QString("SELECT Precursors.id, "
1219 "min(Frames.Time), "
1220 "min(PasefFrameMsMsInfo.ScanNumBegin), "
1221 "max(PasefFrameMsMsInfo.ScanNumEnd), "
1222 "Precursors.MonoisotopicMz "
1223 "FROM "
1224 "PasefFrameMsMsInfo INNER JOIN Precursors ON "
1225 "PasefFrameMsMsInfo.Precursor=Precursors.Id INNER JOIN "
1226 "Frames ON PasefFrameMsMsInfo.Frame=Frames.Id "
1227 "GROUP BY Precursors.id;"));
1228 if(q.lastError().isValid())
1229 {
1230 qDebug();
1231 throw PappsoException(
1232 QObject::tr(
1233 "ERROR in TIMS sqlite database file %1, executing SQL "
1234 "command %2:\n%3\n%4\n%5")
1235 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1236 .arg(q.lastQuery())
1237 .arg(qdb.lastError().databaseText())
1238 .arg(qdb.lastError().driverText())
1239 .arg(qdb.lastError().nativeErrorCode()));
1240 }
1241
1242 q.last(); // strange bug : get the last sql record and get back,
1243 // otherwise it will not retrieve all records.
1244 q.first();
1245 // std::size_t i = 0;
1246 do
1247 {
1248 QSqlRecord record = q.record();
1249 m_mapXicCoordRecord.insert(std::pair<std::size_t, QSqlRecord>(
1250 (std::size_t)record.value(0).toULongLong(), record));
1251 }
1252 while(q.next());
1253 }
1254
1255
1256 auto it_map_xiccoord = m_mapXicCoordRecord.find(precursor_id);
1257 if(it_map_xiccoord == m_mapXicCoordRecord.end())
1258 {
1259
1260 throw ExceptionNotFound(
1261 QObject::tr("ERROR Precursors database id %1 not found")
1262 .arg(precursor_id));
1263 }
1264
1265 auto &q = it_map_xiccoord->second;
1266 xic_coord_tims_struct.mzRange =
1267 MzRange(q.value(4).toDouble(), precision_ptr);
1268 xic_coord_tims_struct.scanNumBegin = q.value(2).toUInt();
1269 xic_coord_tims_struct.scanNumEnd = q.value(3).toUInt();
1270 xic_coord_tims_struct.rtTarget = q.value(1).toDouble();
1271 // xic_structure.charge = q.value(5).toUInt();
1272 xic_coord_tims_struct.xicSptr = std::make_shared<Xic>();
1273 }
1274 catch(PappsoException &error)
1275 {
1276 throw error;
1277 }
1278 catch(std::exception &error)
1279 {
1280 qDebug() << QString("Failure %1 ").arg(error.what());
1281 }
1282 return xic_coord_tims_struct;
1283}
std::map< std::size_t, QSqlRecord > m_mapXicCoordRecord
Definition: timsdata.h:326

References m_mapXicCoordRecord, m_mutex, m_timsDataDirectory, pappso::XicCoord::mzRange, openDatabaseConnection(), pappso::XicCoord::rtTarget, pappso::XicCoordTims::scanNumBegin, pappso::XicCoordTims::scanNumEnd, pappso::PappsoException::what(), and pappso::XicCoord::xicSptr.

◆ ms2ReaderGenerateMS1MS2Spectrum()

void pappso::TimsData::ms2ReaderGenerateMS1MS2Spectrum ( const MsRunIdCstSPtr msrun_id,
std::vector< QualifiedMassSpectrum > &  qualified_mass_spectrum_list,
SpectrumCollectionHandlerInterface handler,
const SpectrumDescr spectrum_descr,
unsigned int  ms_level 
)
private

Definition at line 1865 of file timsdata.cpp.

1871{
1872
1873 qDebug() << " ms_level=" << ms_level;
1874 // The handler will receive the index of the mass spectrum in the
1875 // current run via the mass spectrum id member datum.
1876 if((ms_level == 0) || (ms_level == 1))
1877 {
1878 qualified_mass_spectrum_list.push_back(QualifiedMassSpectrum());
1880 msrun_id,
1881 qualified_mass_spectrum_list.back(),
1882 spectrum_descr,
1883 handler.needMsLevelPeakList(1));
1884 }
1885 if((ms_level == 0) || (ms_level == 2))
1886 {
1887 qualified_mass_spectrum_list.push_back(QualifiedMassSpectrum());
1889 msrun_id,
1890 qualified_mass_spectrum_list.back(),
1891 spectrum_descr,
1892 handler.needMsLevelPeakList(2));
1893 }
1894 qDebug();
1895}
void getQualifiedMs1MassSpectrumByPrecursorId(const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, const SpectrumDescr &spectrum_descr, bool want_binary_data)
Definition: timsdata.cpp:971
void getQualifiedMs2MassSpectrumByPrecursorId(const MsRunIdCstSPtr &msrun_id, QualifiedMassSpectrum &mass_spectrum, const SpectrumDescr &spectrum_descr, bool want_binary_data)
Definition: timsdata.cpp:1415

References getQualifiedMs1MassSpectrumByPrecursorId(), getQualifiedMs2MassSpectrumByPrecursorId(), and pappso::SpectrumCollectionHandlerInterface::needMsLevelPeakList().

Referenced by ms2ReaderSpectrumCollectionByMsLevel().

◆ ms2ReaderSpectrumCollectionByMsLevel()

void pappso::TimsData::ms2ReaderSpectrumCollectionByMsLevel ( const MsRunIdCstSPtr msrun_id,
SpectrumCollectionHandlerInterface handler,
unsigned int  ms_level 
)

function to visit an MsRunReader and get each Spectrum in a spectrum collection handler by Ms Levels

this function will retrieve processed qualified spectrum depending on each Bruker precursors

Definition at line 1627 of file timsdata.cpp.

1631{
1632 qDebug() << " ms_level=" << ms_level;
1634 {
1635 throw PappsoException(
1636 QObject::tr("unable to read spectrum list : this data file does not "
1637 "contain MS2 data, no precursor found."));
1638 }
1639
1640 QSqlDatabase qdb = openDatabaseConnection();
1641 QSqlQuery qprecursor_list = qdb.exec(QString(
1642 "SELECT PasefFrameMsMsInfo.Frame, " // 0
1643 "PasefFrameMsMsInfo.ScanNumBegin, " // 1
1644 "PasefFrameMsMsInfo.ScanNumEnd, " // 2
1645 "PasefFrameMsMsInfo.IsolationMz, " // 3
1646 "PasefFrameMsMsInfo.IsolationWidth, " // 4
1647 "PasefFrameMsMsInfo.CollisionEnergy, " // 5
1648 "PasefFrameMsMsInfo.Precursor, " // 6
1649 "Precursors.Id, " // 7
1650 "Precursors.LargestPeakMz, " // 8
1651 "Precursors.AverageMz, " // 9
1652 "Precursors.MonoisotopicMz, " // 10
1653 "Precursors.Charge, " // 11
1654 "Precursors.ScanNumber, " // 12
1655 "Precursors.Intensity, " // 13
1656 "Precursors.Parent " // 14
1657 "FROM PasefFrameMsMsInfo "
1658 "INNER JOIN Precursors ON "
1659 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
1660 "ORDER BY PasefFrameMsMsInfo.Precursor, PasefFrameMsMsInfo.Frame ;"));
1661 if(qprecursor_list.lastError().isValid())
1662 {
1663
1664 throw PappsoException(
1665 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
1666 "command %2:\n%3\n%4\n%5")
1667 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1668 .arg(qprecursor_list.lastQuery())
1669 .arg(qdb.lastError().databaseText())
1670 .arg(qdb.lastError().driverText())
1671 .arg(qdb.lastError().nativeErrorCode()));
1672 }
1673
1674
1675 qDebug() << "qprecursor_list.size()=" << qprecursor_list.size();
1676 qDebug() << QObject::tr(
1677 "TIMS sqlite database file %1, executing SQL "
1678 "command %2:\n%3\n%4\n%5")
1679 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
1680 .arg(qprecursor_list.lastQuery())
1681 .arg(qdb.lastError().databaseText())
1682 .arg(qdb.lastError().driverText())
1683 .arg(qdb.lastError().nativeErrorCode());
1684
1685 qDebug() << "qprecursor_list.isActive()=" << qprecursor_list.isActive();
1686 qDebug() << "qprecursor_list.isSelect()=" << qprecursor_list.isSelect();
1687 bool first = true;
1688 SpectrumDescr spectrum_descr;
1689
1690 /*
1691std::size_t i = 0;
1692while(qprecursor_list.next())
1693 {
1694 qDebug() << "i=" << i;
1695 i++;
1696 }*/
1697
1698 qprecursor_list.last(); // strange bug : get the last sql record and get
1699 // back, otherwise it will not retrieve all records.
1700
1701 qDebug() << "qprecursor_list.at()=" << qprecursor_list.at();
1702 qprecursor_list.first();
1703 std::vector<TimsData::SpectrumDescr> spectrum_description_list;
1704 spectrum_descr.precursor_id = 0;
1705 // std::size_t i = 0;
1706
1707 do
1708 {
1709
1710 if(spectrum_descr.precursor_id !=
1711 (std::size_t)qprecursor_list.value(6).toLongLong())
1712 {
1713 // new precursor
1714 if(spectrum_descr.precursor_id > 0)
1715 {
1716 spectrum_description_list.push_back(spectrum_descr);
1717 }
1718
1719 spectrum_descr.tims_frame_list.clear();
1720 first = true;
1721 }
1722 qDebug() << " qprecursor_list.value(6).toLongLong() ="
1723 << qprecursor_list.value(6).toLongLong();
1724 spectrum_descr.precursor_id =
1725 (std::size_t)qprecursor_list.value(6).toLongLong();
1726 qDebug() << " spectrum_descr.precursor_id ="
1727 << spectrum_descr.precursor_id;
1728 qDebug() << " cumul tims frame:" << qprecursor_list.value(0).toLongLong();
1729 spectrum_descr.tims_frame_list.push_back(
1730 qprecursor_list.value(0).toLongLong());
1731 qDebug() << " first =" << first;
1732 if(first)
1733 {
1734 qDebug();
1735 // mass_spectrum.setPrecursorCharge(q.value(11).toInt());
1736 // mass_spectrum.setPrecursorMz(q.value(10).toDouble());
1737 // mass_spectrum.setPrecursorIntensity(q.value(13).toDouble());
1738 spectrum_descr.precursor_ion_data =
1739 PrecursorIonData(qprecursor_list.value(10).toDouble(),
1740 qprecursor_list.value(11).toInt(),
1741 qprecursor_list.value(13).toDouble());
1742
1743 // spectrum_descr.precursor_id = q.value(6).toLongLong();
1744 spectrum_descr.ms2_index = (spectrum_descr.precursor_id * 2) - 1;
1745 spectrum_descr.ms1_index = (spectrum_descr.precursor_id * 2) - 2;
1746
1747 spectrum_descr.scan_mobility_start =
1748 qprecursor_list.value(1).toLongLong();
1749 spectrum_descr.scan_mobility_end =
1750 qprecursor_list.value(2).toLongLong();
1751
1752 spectrum_descr.isolationMz = qprecursor_list.value(3).toDouble();
1753 spectrum_descr.isolationWidth = qprecursor_list.value(4).toDouble();
1754 spectrum_descr.collisionEnergy = qprecursor_list.value(5).toFloat();
1755 spectrum_descr.parent_frame = qprecursor_list.value(14).toLongLong();
1756
1757
1758 first = false;
1759 }
1760 // qDebug() << "qprecursor_list.executedQuery()="
1761 // << qprecursor_list.executedQuery();
1762 // qDebug() << "qprecursor_list.last()=" << qprecursor_list.last();
1763 // i++;
1764 }
1765 while(qprecursor_list.next());
1766
1767 // last One
1768
1769 // new precursor
1770 if(spectrum_descr.precursor_id > 0)
1771 {
1772 spectrum_description_list.push_back(spectrum_descr);
1773 }
1774
1775
1776 QString local_filepath = m_timsDataDirectory.absoluteFilePath("analysis.tdf");
1777
1778 if(m_isMonoThread)
1779 {
1780 for(SpectrumDescr &spectrum_descr : spectrum_description_list)
1781 {
1782
1783 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1785 msrun_id, mass_spectrum_list, handler, spectrum_descr, ms_level);
1786
1787 for(auto &qualified_spectrum : mass_spectrum_list)
1788 {
1789 handler.setQualifiedMassSpectrum(qualified_spectrum);
1790 }
1791
1792 if(handler.shouldStop())
1793 {
1794 qDebug() << "The operation was cancelled. Breaking the loop.";
1795 throw ExceptionInterrupted(
1796 QObject::tr("reading TimsTOF job cancelled by the user :\n%1")
1797 .arg(local_filepath));
1798 }
1799 }
1800 }
1801 else
1802 {
1803
1804
1805 TimsData *itself = this;
1806 SpectrumCollectionHandlerInterface *pointer_handler = &handler;
1807
1808
1809 std::function<std::vector<QualifiedMassSpectrum>(
1810 const TimsData::SpectrumDescr &)>
1811 map_function_generate_spectrum =
1812 [itself, msrun_id, pointer_handler, ms_level](
1813 const TimsData::SpectrumDescr &spectrum_descr)
1814 -> std::vector<QualifiedMassSpectrum> {
1815 std::vector<QualifiedMassSpectrum> mass_spectrum_list;
1816 itself->ms2ReaderGenerateMS1MS2Spectrum(msrun_id,
1817 mass_spectrum_list,
1818 *pointer_handler,
1819 spectrum_descr,
1820 ms_level);
1821
1822
1823 return mass_spectrum_list;
1824 };
1825
1826 std::function<void(
1827 std::size_t,
1828 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list)>
1829 reduce_function_spectrum_list =
1830 [pointer_handler, local_filepath](
1831 std::size_t res,
1832 const std::vector<QualifiedMassSpectrum> &qualified_spectrum_list) {
1833 for(auto &qualified_spectrum : qualified_spectrum_list)
1834 {
1835 pointer_handler->setQualifiedMassSpectrum(qualified_spectrum);
1836 }
1837
1838 if(pointer_handler->shouldStop())
1839 {
1840 qDebug() << "The operation was cancelled. Breaking the loop.";
1841 throw ExceptionInterrupted(
1842 QObject::tr("reading TimsTOF job on %1 cancelled by the user")
1843 .arg(local_filepath));
1844 }
1845 res++;
1846 };
1847
1848
1849 QFuture<std::size_t> res;
1850 res = QtConcurrent::mappedReduced<std::size_t>(
1851 spectrum_description_list.begin(),
1852 spectrum_description_list.end(),
1853 map_function_generate_spectrum,
1854 reduce_function_spectrum_list,
1855 QtConcurrent::OrderedReduce);
1856 res.waitForFinished();
1857 }
1858 handler.loadingEnded();
1860}
void closeLinearRead()
close file access and flush cache
Definition: timsbindec.cpp:92
TimsData(QDir timsDataDirectory)
build using the tims data directory
Definition: timsdata.cpp:46
void ms2ReaderGenerateMS1MS2Spectrum(const MsRunIdCstSPtr &msrun_id, std::vector< QualifiedMassSpectrum > &qualified_mass_spectrum_list, SpectrumCollectionHandlerInterface &handler, const SpectrumDescr &spectrum_descr, unsigned int ms_level)
Definition: timsdata.cpp:1865
bool m_isMonoThread
Definition: timsdata.h:347

References pappso::TimsBinDec::closeLinearRead(), pappso::TimsData::SpectrumDescr::collisionEnergy, pappso::TimsData::SpectrumDescr::isolationMz, pappso::TimsData::SpectrumDescr::isolationWidth, pappso::SpectrumCollectionHandlerInterface::loadingEnded(), m_hasPrecursorTable, m_isMonoThread, m_timsDataDirectory, mpa_timsBinDec, pappso::TimsData::SpectrumDescr::ms1_index, pappso::TimsData::SpectrumDescr::ms2_index, ms2ReaderGenerateMS1MS2Spectrum(), openDatabaseConnection(), pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::precursor_ion_data, pappso::res, pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, pappso::SpectrumCollectionHandlerInterface::setQualifiedMassSpectrum(), pappso::SpectrumCollectionHandlerInterface::shouldStop(), and pappso::TimsData::SpectrumDescr::tims_frame_list.

◆ openDatabaseConnection()

QSqlDatabase pappso::TimsData::openDatabaseConnection ( ) const
private

Definition at line 233 of file timsdata.cpp.

234{
235 QString database_connection_name = QString("%1_%2")
236 .arg(m_timsDataDirectory.absolutePath())
237 .arg((quintptr)QThread::currentThread());
238 // Open the database
239 QSqlDatabase qdb = QSqlDatabase::database(database_connection_name);
240 if(!qdb.isValid())
241 {
242 qDebug() << database_connection_name;
243 qdb = QSqlDatabase::addDatabase("QSQLITE", database_connection_name);
244 qdb.setDatabaseName(m_timsDataDirectory.absoluteFilePath("analysis.tdf"));
245 }
246
247
248 if(!qdb.open())
249 {
250 qDebug();
251 throw PappsoException(
252 QObject::tr("ERROR opening TIMS sqlite database file %1, database name "
253 "%2 :\n%3\n%4\n%5")
254 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
255 .arg(database_connection_name)
256 .arg(qdb.lastError().databaseText())
257 .arg(qdb.lastError().driverText())
258 .arg(qdb.lastError().nativeErrorCode()));
259 }
260 return qdb;
261}

References m_timsDataDirectory.

Referenced by TimsData(), fillFrameIdDescrList(), getPrecursorsFromMzRtCharge(), getRawMs2ByPrecursorId(), getSpectrumDescrWithPrecursorId(), getSpectrumDescrWithScanCoordinate(), getTicChromatogram(), getTimsMS1FrameIdRange(), getXicCoordTimsFromPrecursorId(), ms2ReaderSpectrumCollectionByMsLevel(), and rawReaderSpectrumCollectionByMsLevel().

◆ rawReaderSpectrumCollectionByMsLevel()

void pappso::TimsData::rawReaderSpectrumCollectionByMsLevel ( const MsRunIdCstSPtr msrun_id,
SpectrumCollectionHandlerInterface handler,
unsigned int  ms_level 
)

function to visit an MsRunReader and get each raw Spectrum in a spectrum collection handler by Ms Levels

this function will retrieve every scans as a qualified mass spectrum

Definition at line 2099 of file timsdata.cpp.

2103{
2104
2106 {
2107 throw PappsoException(
2108 QObject::tr("unable to read spectrum list : this data file does not "
2109 "contain MS2 data, no precursor found."));
2110 }
2111
2112 // We'll need it to perform the looping in the spectrum list.
2113 std::size_t spectrum_list_size = getTotalNumberOfScans();
2114
2115 // qDebug() << "The spectrum list has size:" << spectrum_list_size;
2116
2117 // Inform the handler of the spectrum list so that it can handle feedback to
2118 // the user.
2119 handler.spectrumListHasSize(spectrum_list_size);
2120
2121 QSqlDatabase qdb = openDatabaseConnection();
2122 QSqlQuery qprecursor_list = qdb.exec(QString(
2123 "SELECT DISTINCT "
2124 "PasefFrameMsMsInfo.Frame, " // 0
2125 "PasefFrameMsMsInfo.ScanNumBegin, " // 1
2126 "PasefFrameMsMsInfo.ScanNumEnd, " // 2
2127 "PasefFrameMsMsInfo.IsolationMz, " // 3
2128 "PasefFrameMsMsInfo.IsolationWidth, " // 4
2129 "PasefFrameMsMsInfo.CollisionEnergy, " // 5
2130 "PasefFrameMsMsInfo.Precursor, " // 6
2131 "Precursors.Id, " // 7
2132 "Precursors.LargestPeakMz, " // 8
2133 "Precursors.AverageMz, " // 9
2134 "Precursors.MonoisotopicMz, " // 10
2135 "Precursors.Charge, " // 11
2136 "Precursors.ScanNumber, " // 12
2137 "Precursors.Intensity, " // 13
2138 "Precursors.Parent " // 14
2139 "FROM PasefFrameMsMsInfo "
2140 "INNER JOIN Precursors ON "
2141 "PasefFrameMsMsInfo.Precursor=Precursors.Id "
2142 "ORDER BY PasefFrameMsMsInfo.Frame, PasefFrameMsMsInfo.ScanNumBegin ;"));
2143 if(qprecursor_list.lastError().isValid())
2144 {
2145 throw PappsoException(
2146 QObject::tr("ERROR in TIMS sqlite database file %1, executing SQL "
2147 "command %2:\n%3\n%4\n%5")
2148 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf"))
2149 .arg(qprecursor_list.lastQuery())
2150 .arg(qdb.lastError().databaseText())
2151 .arg(qdb.lastError().driverText())
2152 .arg(qdb.lastError().nativeErrorCode()));
2153 }
2154
2155
2156 std::size_t i = 0; // iterate on each Spectrum
2157
2158 qprecursor_list.last(); // strange bug : get the last sql record and get
2159 // back, unless it will not retrieve all records.
2160
2161 qDebug() << "qprecursor_list.at()=" << qprecursor_list.at();
2162 qprecursor_list.first();
2163
2164 TimsFrameBaseCstSPtr tims_frame;
2165 SpectrumDescr spectrum_descr;
2166
2167 for(FrameIdDescr &current_frame : m_frameIdDescrList)
2168 {
2169
2170 // If the user of this reader instance wants to stop reading the
2171 // spectra, then break this loop.
2172 if(handler.shouldStop())
2173 {
2174 qDebug() << "The operation was cancelled. Breaking the loop.";
2175 throw ExceptionInterrupted(
2176 QObject::tr("reading TimsTOF job cancelled by the user :\n%1")
2177 .arg(m_timsDataDirectory.absoluteFilePath("analysis.tdf")));
2178 }
2179
2180 tims_frame = getTimsFrameBaseCstSPtrCached(current_frame.m_frameId);
2181 unsigned int tims_ms_level = tims_frame.get()->getMsLevel();
2182
2183 if((ms_level != 0) && (ms_level != tims_ms_level))
2184 { // bypass
2185 i += current_frame.m_size;
2186 }
2187 else
2188 {
2189 bool want_binary_data = handler.needMsLevelPeakList(tims_ms_level);
2190 qDebug() << "want_binary_data=" << want_binary_data;
2191 if(want_binary_data)
2192 {
2193 qDebug() << "bindec";
2194 tims_frame = getTimsFrameCstSPtrCached(current_frame.m_frameId);
2195 }
2196
2197 bool possible_precursor = false;
2198 if(tims_ms_level == 2)
2199 {
2200 // seek the precursor record:
2201 while(qprecursor_list.value(0).toULongLong() <
2202 current_frame.m_frameId)
2203 {
2204 qprecursor_list.next();
2205
2206 if(qprecursor_list.value(0).toULongLong() ==
2207 current_frame.m_frameId)
2208 {
2209 possible_precursor = true;
2210 }
2212 qprecursor_list);
2213 }
2214 }
2215
2216 for(std::size_t scan_num = 0; scan_num < current_frame.m_size;
2217 scan_num++)
2218 {
2219 bool has_a_precursor = false;
2220 if(possible_precursor)
2221 {
2222 if(spectrum_descr.scan_mobility_end < scan_num)
2223 {
2224 // seek the precursor record:
2225 while(qprecursor_list.value(0).toULongLong() <
2226 current_frame.m_frameId)
2227 {
2228 qprecursor_list.next();
2229
2230 if(qprecursor_list.value(0).toULongLong() !=
2231 current_frame.m_frameId)
2232 {
2233 possible_precursor = false;
2234 }
2236 qprecursor_list);
2237 }
2238 }
2239
2240 if(possible_precursor &&
2241 (spectrum_descr.scan_mobility_start < scan_num))
2242 {
2243 // we are in
2244 has_a_precursor = true;
2245 }
2246 } // end to determine if we are in a precursor for this
2247 // spectrum
2248
2249 QualifiedMassSpectrum mass_spectrum;
2250
2251
2252 MassSpectrumId spectrum_id;
2253
2254 spectrum_id.setSpectrumIndex(i);
2255 spectrum_id.setMsRunId(msrun_id);
2256 spectrum_id.setNativeId(QString("frame=%1 scan=%2 index=%3")
2257 .arg(current_frame.m_frameId)
2258 .arg(scan_num)
2259 .arg(i));
2260
2261 mass_spectrum.setMassSpectrumId(spectrum_id);
2262
2263 mass_spectrum.setMsLevel(tims_frame.get()->getMsLevel());
2264 mass_spectrum.setRtInSeconds(tims_frame.get()->getTime());
2265
2266 mass_spectrum.setDtInMilliSeconds(
2267 tims_frame.get()->getDriftTime(scan_num));
2268 // 1/K0
2269 mass_spectrum.setParameterValue(
2271 tims_frame.get()->getOneOverK0Transformation(scan_num));
2272
2273 mass_spectrum.setEmptyMassSpectrum(true);
2274 if(want_binary_data)
2275 {
2276 try
2277 {
2278 mass_spectrum.setMassSpectrumSPtr(
2279 tims_frame.get()->getMassSpectrumSPtr(scan_num));
2280 }
2281 catch(PappsoException &error)
2282 {
2283 throw PappsoException(
2284 QObject::tr(
2285 "ERROR in %1 (scan_num=%2 spectrum_index=%3):\n%4")
2286 .arg(__FUNCTION__)
2287 .arg(scan_num)
2288 .arg(spectrum_id.getSpectrumIndex())
2289 .arg(error.qwhat()));
2290 }
2291 if(mass_spectrum.size() > 0)
2292 {
2293 mass_spectrum.setEmptyMassSpectrum(false);
2294 }
2295 }
2296 else
2297 {
2298 // if(tims_frame.get()->getNbrPeaks(coordinate.second) > 0)
2299 //{
2300 mass_spectrum.setEmptyMassSpectrum(false);
2301 // }
2302 }
2303 if(has_a_precursor)
2304 {
2305 if(spectrum_descr.precursor_id > 0)
2306 {
2307
2308 mass_spectrum.appendPrecursorIonData(
2309 spectrum_descr.precursor_ion_data);
2310
2311 std::size_t prec_spectrum_index =
2312 getRawIndexFromCoordinate(spectrum_descr.parent_frame,
2313 scan_num);
2314
2315 mass_spectrum.setPrecursorSpectrumIndex(
2316 prec_spectrum_index);
2317 mass_spectrum.setPrecursorNativeId(
2318 QString("frame=%1 scan=%2 index=%3")
2319 .arg(spectrum_descr.parent_frame)
2320 .arg(scan_num)
2321 .arg(prec_spectrum_index));
2322
2323 mass_spectrum.setParameterValue(
2325 spectrum_descr.isolationMz);
2326 mass_spectrum.setParameterValue(
2328 spectrum_descr.isolationWidth);
2329
2330 mass_spectrum.setParameterValue(
2332 spectrum_descr.collisionEnergy);
2333 mass_spectrum.setParameterValue(
2335 (quint64)spectrum_descr.precursor_id);
2336 }
2337 }
2338
2339 handler.setQualifiedMassSpectrum(mass_spectrum);
2340 i++;
2341 }
2342 }
2343 }
2344}
void fillSpectrumDescriptionWithSqlRecord(SpectrumDescr &spectrum_descr, QSqlQuery &qprecursor_list)
Definition: timsdata.cpp:2069
std::size_t getTotalNumberOfScans() const
get the total number of scans
Definition: timsdata.cpp:630

References pappso::QualifiedMassSpectrum::appendPrecursorIonData(), pappso::BrukerPrecursorIndex, pappso::CollisionEnergy, pappso::TimsData::SpectrumDescr::collisionEnergy, fillSpectrumDescriptionWithSqlRecord(), getRawIndexFromCoordinate(), pappso::MassSpectrumId::getSpectrumIndex(), getTimsFrameBaseCstSPtrCached(), getTimsFrameCstSPtrCached(), getTotalNumberOfScans(), pappso::IsolationMz, pappso::TimsData::SpectrumDescr::isolationMz, pappso::IsolationWidth, pappso::TimsData::SpectrumDescr::isolationWidth, m_frameIdDescrList, m_hasPrecursorTable, m_timsDataDirectory, pappso::SpectrumCollectionHandlerInterface::needMsLevelPeakList(), pappso::OneOverK0, openDatabaseConnection(), pappso::TimsData::SpectrumDescr::parent_frame, pappso::TimsData::SpectrumDescr::precursor_id, pappso::TimsData::SpectrumDescr::precursor_ion_data, pappso::PappsoException::qwhat(), pappso::TimsData::SpectrumDescr::scan_mobility_end, pappso::TimsData::SpectrumDescr::scan_mobility_start, pappso::QualifiedMassSpectrum::setDtInMilliSeconds(), pappso::QualifiedMassSpectrum::setEmptyMassSpectrum(), pappso::QualifiedMassSpectrum::setMassSpectrumId(), pappso::QualifiedMassSpectrum::setMassSpectrumSPtr(), pappso::QualifiedMassSpectrum::setMsLevel(), pappso::MassSpectrumId::setMsRunId(), pappso::MassSpectrumId::setNativeId(), pappso::QualifiedMassSpectrum::setParameterValue(), pappso::QualifiedMassSpectrum::setPrecursorNativeId(), pappso::QualifiedMassSpectrum::setPrecursorSpectrumIndex(), pappso::SpectrumCollectionHandlerInterface::setQualifiedMassSpectrum(), pappso::QualifiedMassSpectrum::setRtInSeconds(), pappso::MassSpectrumId::setSpectrumIndex(), pappso::SpectrumCollectionHandlerInterface::shouldStop(), pappso::QualifiedMassSpectrum::size(), and pappso::SpectrumCollectionHandlerInterface::spectrumListHasSize().

◆ setMonoThread()

void pappso::TimsData::setMonoThread ( bool  is_mono_thread)

set only one is_mono_thread to true

this avoid to use qtconcurrent

Definition at line 227 of file timsdata.cpp.

228{
229 m_isMonoThread = is_mono_thread;
230}

References m_isMonoThread.

◆ setMs1FilterCstSPtr()

void pappso::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 1175 of file timsdata.cpp.

1176{
1177 mcsp_ms1Filter = filter;
1178}

References mcsp_ms1Filter.

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

◆ setMs2BuiltinCentroid()

void pappso::TimsData::setMs2BuiltinCentroid ( bool  centroid)

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

Definition at line 282 of file timsdata.cpp.

283{
284 m_builtinMs2Centroid = centroid;
285}

References m_builtinMs2Centroid.

◆ setMs2FilterCstSPtr()

void pappso::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 1170 of file timsdata.cpp.

1171{
1172 mcsp_ms2Filter = filter;
1173}

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 320 of file timsdata.h.

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

◆ m_cacheSize

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

Definition at line 311 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached(), and getTimsFrameCstSPtrCached().

◆ m_frameIdDescrList

std::vector<FrameIdDescr> pappso::TimsData::m_frameIdDescrList
private

store every frame id and corresponding sizes

Definition at line 333 of file timsdata.h.

Referenced by fillFrameIdDescrList(), getFrameIdDescrList(), getRawIndexFromCoordinate(), getScanCoordinateFromRawIndex(), and rawReaderSpectrumCollectionByMsLevel().

◆ m_hasPrecursorTable

bool pappso::TimsData::m_hasPrecursorTable
private

◆ m_isMonoThread

bool pappso::TimsData::m_isMonoThread = false
private

Definition at line 347 of file timsdata.h.

Referenced by ms2ReaderSpectrumCollectionByMsLevel(), and setMonoThread().

◆ m_mapFramesRecord

std::vector<TimsFrameRecord> pappso::TimsData::m_mapFramesRecord
private

◆ m_mapMzCalibrationRecord

std::map<int, QSqlRecord> pappso::TimsData::m_mapMzCalibrationRecord
private

Definition at line 323 of file timsdata.h.

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

◆ m_mapTimsCalibrationRecord

std::map<int, QSqlRecord> pappso::TimsData::m_mapTimsCalibrationRecord
private

Definition at line 324 of file timsdata.h.

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

◆ m_mapXicCoordRecord

std::map<std::size_t, QSqlRecord> pappso::TimsData::m_mapXicCoordRecord
private

Definition at line 326 of file timsdata.h.

Referenced by getXicCoordTimsFromPrecursorId().

◆ m_mutex

QMutex pappso::TimsData::m_mutex
private

◆ m_someoneIsLoadingFrameId

std::vector<std::size_t> pappso::TimsData::m_someoneIsLoadingFrameId
private

tells if someone is loading a frame id

Definition at line 345 of file timsdata.h.

◆ m_thousandIndexToFrameIdDescrListIndex

std::map<std::size_t, std::size_t> pappso::TimsData::m_thousandIndexToFrameIdDescrListIndex
private

index to find quickly a frameId in the description list with the raw index of spectrum modulo 1000 @key thousands of TOF scans @value corresponding m_frameIdDescrList index

Definition at line 340 of file timsdata.h.

Referenced by fillFrameIdDescrList(), and getScanCoordinateFromRawIndex().

◆ m_timsDataDirectory

◆ m_timsFrameBaseCache

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

Definition at line 313 of file timsdata.h.

Referenced by getTimsFrameBaseCstSPtrCached().

◆ m_timsFrameCache

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

Definition at line 312 of file timsdata.h.

Referenced by getTimsFrameCstSPtrCached().

◆ m_totalNumberOfFrames

std::size_t pappso::TimsData::m_totalNumberOfFrames
private

Definition at line 310 of file timsdata.h.

Referenced by TimsData(), and getTotalNumberOfFrames().

◆ m_totalNumberOfPrecursors

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

Definition at line 309 of file timsdata.h.

Referenced by TimsData(), and getTotalNumberOfPrecursors().

◆ m_totalNumberOfScans

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

◆ mcsp_ms1Filter

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

◆ mcsp_ms2Filter

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

◆ mpa_mzCalibrationStore

MzCalibrationStore* pappso::TimsData::mpa_mzCalibrationStore
private

Definition at line 328 of file timsdata.h.

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

◆ mpa_timsBinDec

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

The documentation for this class was generated from the following files: