pappsomspp
Library for mass spectrometry
timsdata.h
Go to the documentation of this file.
1 /**
2  * \file pappsomspp/vendors/tims/timsdata.h
3  * \date 27/08/2019
4  * \author Olivier Langella
5  * \brief main Tims data handler
6  */
7 
8 /*******************************************************************************
9  * Copyright (c) 2019 Olivier Langella <Olivier.Langella@u-psud.fr>.
10  *
11  * This file is part of the PAPPSOms++ library.
12  *
13  * PAPPSOms++ is free software: you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation, either version 3 of the License, or
16  * (at your option) any later version.
17  *
18  * PAPPSOms++ is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with PAPPSOms++. If not, see <http://www.gnu.org/licenses/>.
25  *
26  ******************************************************************************/
27 
28 #pragma once
29 
30 #include <QDir>
31 #include <QSqlDatabase>
32 #include "timsbindec.h"
33 #include "timsframe.h"
34 #include "../../massspectrum/qualifiedmassspectrum.h"
35 #include "../../processing/filters/filterinterface.h"
36 #include <deque>
37 #include <QMutex>
38 #include <QSqlQuery>
39 
40 namespace pappso
41 {
42 
43 /**
44  * @todo write docs
45  */
46 class TimsData
47 {
48  public:
49  /** @brief build using the tims data directory
50  */
51  TimsData(QDir timsDataDirectory);
52 
53  /**
54  * Copy constructor
55  *
56  * @param other TODO
57  */
58  TimsData(const TimsData &other);
59 
60  /**
61  * Destructor
62  */
63  ~TimsData();
64 
65 
66  /** @brief get a mass spectrum given its spectrum index
67  * @param raw_index a number begining at 0, corresponding to a Tims Scan in
68  * the order they lies in the binary data file
69  */
71  getMassSpectrumCstSPtrByRawIndex(std::size_t raw_index);
72 
73  /** @brief get a mass spectrum given the tims frame database id and scan
74  * number within tims frame
75  */
77  std::size_t scanNum);
78 
79  /** @brief get the total number of scans
80  */
81  std::size_t getTotalNumberOfScans() const;
82 
83  /** @brief get the number of precursors analyzes by PASEF
84  */
85  std::size_t getTotalNumberOfPrecursors() const;
86 
87 
88  unsigned int getMsLevelBySpectrumIndex(std::size_t spectrum_index);
89 
91  getQualifiedMassSpectrumByRawIndex(std::size_t spectrum_index,
92  bool want_binary_data);
93 
94  void
96  std::size_t ms2_index,
97  std::size_t precursor_index,
98  bool want_binary_data);
99 
101  std::size_t ms2_index, std::size_t precursor_index, bool want_binary_data);
102 
105 
106 
107  std::vector<std::size_t> getTimsMS1FrameIdRange(double rt_begin,
108  double rt_end) const;
109 
110 
111  /** @brief get a Tims frame with his database ID
112  */
113  TimsFrameCstSPtr getTimsFrameCstSPtr(std::size_t timsId) const;
114 
115  private:
116  std::pair<std::size_t, std::size_t>
117  getScanCoordinateFromRawIndex(std::size_t spectrum_index) const;
118 
119  std::size_t getRawIndexFromCoordinate(std::size_t frame_id,
120  std::size_t scan_num) const;
121 
122  QSqlDatabase openDatabaseConnection() const;
123 
124 
125  /** @brief get a Tims frame base (no binary data file access) with his
126  * database ID
127  */
128  TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtr(std::size_t timsId) const;
129 
130 
131  /** @brief get a Tims frame with his database ID
132  * but look in the cache first
133  */
134  TimsFrameCstSPtr getTimsFrameCstSPtrCached(std::size_t timsId);
135 
137 
138  private:
139  QDir m_timsDataDirectory;
140  TimsBinDec *mpa_timsBinDec = nullptr;
141  // QSqlDatabase *mpa_qdb = nullptr;
142  std::size_t m_totalNumberOfScans;
143  std::size_t m_totalNumberOfPrecursors;
144  std::size_t m_cacheSize = 60;
145  std::deque<TimsFrameCstSPtr> m_timsFrameCache;
146  std::deque<TimsFrameBaseCstSPtr> m_timsFrameBaseCache;
147 
150  QMutex m_mutex;
151 };
152 } // namespace pappso
pappso::TimsData::mcsp_ms2Filter
pappso::FilterInterfaceCstSPtr mcsp_ms2Filter
Definition: timsdata.h:181
pappso::TimsData::m_totalNumberOfPrecursors
std::size_t m_totalNumberOfPrecursors
Definition: timsdata.h:176
pappso::MassSpectrumCstSPtr
std::shared_ptr< const MassSpectrum > MassSpectrumCstSPtr
Definition: massspectrum.h:74
pappso::TimsData::setMs2FilterCstSPtr
void setMs2FilterCstSPtr(pappso::FilterInterfaceCstSPtr &filter)
Definition: timsdata.cpp:1078
pappso::TimsData::getMassSpectrumCstSPtrByRawIndex
pappso::MassSpectrumCstSPtr getMassSpectrumCstSPtrByRawIndex(std::size_t raw_index)
get a mass spectrum given its spectrum index
Definition: timsdata.cpp:293
pappso::TimsData::getQualifiedMs1MassSpectrumByPrecursorId
QualifiedMassSpectrum getQualifiedMs1MassSpectrumByPrecursorId(std::size_t ms2_index, std::size_t precursor_index, bool want_binary_data)
Definition: timsdata.cpp:663
timsbindec.h
binary file handler of Bruker's TimsTof raw data
pappso::TimsData::mcsp_ms1Filter
pappso::FilterInterfaceCstSPtr mcsp_ms1Filter
Definition: timsdata.h:182
pappso::TimsData::m_timsFrameBaseCache
std::deque< TimsFrameBaseCstSPtr > m_timsFrameBaseCache
Definition: timsdata.h:179
pappso::TimsData::getTimsFrameBaseCstSPtrCached
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtrCached(std::size_t timsId)
Definition: timsdata.cpp:1040
pappso::TimsData::getTimsMS1FrameIdRange
std::vector< std::size_t > getTimsMS1FrameIdRange(double rt_begin, double rt_end) const
Definition: timsdata.cpp:391
pappso::TimsBinDec
Definition: timsbindec.h:56
timsframe.h
handle a single Bruker's TimsTof frame
pappso
Definition: aa.cpp:38
pappso::FilterInterfaceCstSPtr
std::shared_ptr< const FilterInterface > FilterInterfaceCstSPtr
Definition: filterinterface.h:62
pappso::TimsData::m_cacheSize
std::size_t m_cacheSize
Definition: timsdata.h:177
pappso::TimsData::TimsData
TimsData(QDir timsDataDirectory)
build using the tims data directory
Definition: timsdata.cpp:43
pappso::TimsData::setMs1FilterCstSPtr
void setMs1FilterCstSPtr(pappso::FilterInterfaceCstSPtr &filter)
Definition: timsdata.cpp:1083
pappso::TimsFrameBaseCstSPtr
std::shared_ptr< const TimsFrameBase > TimsFrameBaseCstSPtr
Definition: timsframebase.h:56
pappso::TimsData::getMsLevelBySpectrumIndex
unsigned int getMsLevelBySpectrumIndex(std::size_t spectrum_index)
Definition: timsdata.cpp:536
pappso::TimsData::getTimsFrameBaseCstSPtr
TimsFrameBaseCstSPtr getTimsFrameBaseCstSPtr(std::size_t timsId) const
get a Tims frame base (no binary data file access) with his database ID
Definition: timsdata.cpp:302
pappso::TimsData::getTimsFrameCstSPtrCached
TimsFrameCstSPtr getTimsFrameCstSPtrCached(std::size_t timsId)
get a Tims frame with his database ID but look in the cache first
Definition: timsdata.cpp:1059
pappso::TimsData::m_mutex
QMutex m_mutex
Definition: timsdata.h:183
pappso::QualifiedMassSpectrum
Class representing a fully specified mass spectrum.
Definition: qualifiedmassspectrum.h:83
pappso::TimsData::getScanCoordinateFromRawIndex
std::pair< std::size_t, std::size_t > getScanCoordinateFromRawIndex(std::size_t spectrum_index) const
Definition: timsdata.cpp:199
pappso::TimsData::m_timsDataDirectory
QDir m_timsDataDirectory
Definition: timsdata.h:172
pappso::TimsData::getMassSpectrumCstSPtr
pappso::MassSpectrumCstSPtr getMassSpectrumCstSPtr(std::size_t timsId, std::size_t scanNum)
get a mass spectrum given the tims frame database id and scan number within tims frame
Definition: timsdata.cpp:515
pappso::TimsData::getQualifiedMassSpectrumByRawIndex
QualifiedMassSpectrum getQualifiedMassSpectrumByRawIndex(std::size_t spectrum_index, bool want_binary_data)
Definition: timsdata.cpp:545
pappso::TimsData::~TimsData
~TimsData()
Definition: timsdata.cpp:189
pappso::TimsData::getTotalNumberOfPrecursors
std::size_t getTotalNumberOfPrecursors() const
get the number of precursors analyzes by PASEF
Definition: timsdata.cpp:530
pappso::TimsData::m_totalNumberOfScans
std::size_t m_totalNumberOfScans
Definition: timsdata.h:175
pappso::TimsData::mpa_timsBinDec
TimsBinDec * mpa_timsBinDec
Definition: timsdata.h:173
pappso::TimsData::m_timsFrameCache
std::deque< TimsFrameCstSPtr > m_timsFrameCache
Definition: timsdata.h:178
pappso::TimsData::getTotalNumberOfScans
std::size_t getTotalNumberOfScans() const
get the total number of scans
Definition: timsdata.cpp:523
pappso::TimsData::getQualifiedMs2MassSpectrumByPrecursorId
void getQualifiedMs2MassSpectrumByPrecursorId(QualifiedMassSpectrum &mass_spectrum, std::size_t ms2_index, std::size_t precursor_index, bool want_binary_data)
Definition: timsdata.cpp:827
pappso::TimsData::getTimsFrameCstSPtr
TimsFrameCstSPtr getTimsFrameCstSPtr(std::size_t timsId) const
get a Tims frame with his database ID
Definition: timsdata.cpp:425
pappso::TimsData::getRawIndexFromCoordinate
std::size_t getRawIndexFromCoordinate(std::size_t frame_id, std::size_t scan_num) const
Definition: timsdata.cpp:244
pappso::TimsFrameCstSPtr
std::shared_ptr< const TimsFrame > TimsFrameCstSPtr
Definition: timsframe.h:57
pappso::TimsData::openDatabaseConnection
QSqlDatabase openDatabaseConnection() const
Definition: timsdata.cpp:154