libpappsomspp
Library for mass spectrometry
msrundatasettree.h
Go to the documentation of this file.
1 // GPL 3+
2 // Filippo Rusconi
3 
4 #pragma once
5 
6 /////////////////////// StdLib includes
7 
8 
9 /////////////////////// Qt includes
10 
11 
12 /////////////////////// Local includes
14 #include "msrundatasettreenode.h"
15 #include "msrunid.h"
16 #include "../exportinmportconfig.h"
17 #include "../processing/combiners/selectionpolygon.h"
18 
19 
20 namespace pappso
21 {
22 
23 class MsRunDataSetTree;
24 
25 typedef std::shared_ptr<MsRunDataSetTree> MsRunDataSetTreeSPtr;
26 typedef std::shared_ptr<const MsRunDataSetTree> MsRunDataSetTreeCstSPtr;
27 
29 {
30  public:
31  MsRunDataSetTree(MsRunIdCstSPtr ms_run_id_csp);
32  virtual ~MsRunDataSetTree();
33 
35  addMassSpectrum(QualifiedMassSpectrumCstSPtr mass_spectrum);
36 
37  const std::map<std::size_t, MsRunDataSetTreeNode *> &getIndexNodeMap() const;
38  const std::vector<MsRunDataSetTreeNode *> &getRootNodes() const;
39 
40  void accept(MsRunDataSetTreeNodeVisitorInterface &visitor);
41  void accept(MsRunDataSetTreeNodeVisitorInterface &visitor,
42  std::vector<pappso::MsRunDataSetTreeNode *>::const_iterator
43  nodes_begin_iterator,
44  std::vector<pappso::MsRunDataSetTreeNode *>::const_iterator
45  nodes_end_iterator);
46 
48  findNode(QualifiedMassSpectrumCstSPtr mass_spectrum_csp) const;
49  MsRunDataSetTreeNode *findNode(std::size_t spectrum_index) const;
50 
51  std::size_t massSpectrumIndex(const MsRunDataSetTreeNode *node) const;
52  std::size_t massSpectrumIndex(
53  QualifiedMassSpectrumCstSPtr qualified_mass_spectrum_csp) const;
54 
55  /****************** Flattened views ******************/
56 
57  std::vector<MsRunDataSetTreeNode *> flattenedView();
58 
59  std::vector<MsRunDataSetTreeNode *>
60  flattenedViewMsLevel(std::size_t ms_level, bool with_descendants = false);
61 
62  /****************** Flattened views ******************/
63 
65  precursorNodeByProductSpectrumIndex(std::size_t product_spectrum_index);
66 
67  std::vector<MsRunDataSetTreeNode *>
68  productNodesByPrecursorSpectrumIndex(std::size_t precursor_spectrum_index);
69 
70  std::vector<MsRunDataSetTreeNode *>
71  precursorNodesByPrecursorMz(pappso_double mz, PrecisionPtr precision_ptr);
72 
73  // Utility functions.
74  std::size_t depth() const;
75 
76  // The tree size as computed by going down the tree nodes.
77  std::size_t size() const;
78 
79  // The size of the flat index/node map as filled in during file loading.
80  std::size_t indexNodeMapSize() const;
81 
82  std::size_t getSpectrumCount() const;
83 
84  using NodeVector = std::vector<MsRunDataSetTreeNode *>;
85  using QualMassSpectraVector = std::vector<QualifiedMassSpectrumCstSPtr>;
86 
87  using DoubleNodeVectorMap = std::map<double, NodeVector>;
88 
89  std::size_t addDataSetTreeNodesInsideDtRtRange(double start,
90  double end,
91  NodeVector &nodes,
92  DataKind data_kind) const;
93 
94  std::size_t addDataSetTreeNodesInsideDtRtPolygon(const SelectionPolygon &selectionPolygon,
95  NodeVector &nodes,
96  DataKind data_kind) const;
97 
98  std::size_t removeDataSetTreeNodesOutsideDtRtRange(double start,
99  double end,
100  NodeVector &nodes,
101  DataKind data_kind) const;
102 
103  std::size_t
104  addDataSetQualMassSpectraInsideDtRtRange(double start,
105  double end,
106  QualMassSpectraVector &mass_spectra,
107  DataKind data_kind) const;
108 
109  std::size_t removeDataSetQualMassSpectraOutsideDtRtRange(
110  double start,
111  double end,
112  QualMassSpectraVector &mass_spectra,
113  DataKind data_kind) const;
114 
115  private:
117 
118  std::size_t m_spectrumCount = std::numeric_limits<std::size_t>::min();
119 
120  std::vector<MsRunDataSetTreeNode *> m_rootNodes;
121  std::map<std::size_t, MsRunDataSetTreeNode *> m_indexNodeMap;
122 
123  // We want to be able to list easily all the mass spectra that were acquired
124  // at any given RT or DT.
125 
128 
129  bool documentNodeInDtRtMap(double time,
130  MsRunDataSetTreeNode *node_p,
131  DataKind data_kind);
132 
133  // These addMassSpectrum functions are for forensic science.
135  addMassSpectrum(QualifiedMassSpectrumCstSPtr mass_spectrum,
136  MsRunDataSetTreeNode *parent);
137 
139  addMassSpectrum(QualifiedMassSpectrumCstSPtr mass_spectrum,
140  std::size_t precursor_spectrum_index);
141 };
142 
143 } // namespace pappso
std::vector< QualifiedMassSpectrumCstSPtr > QualMassSpectraVector
std::map< std::size_t, MsRunDataSetTreeNode * > m_indexNodeMap
std::vector< MsRunDataSetTreeNode * > m_rootNodes
std::map< double, NodeVector > DoubleNodeVectorMap
std::vector< MsRunDataSetTreeNode * > NodeVector
std::size_t addDataSetTreeNodesInsideDtRtPolygon(const SelectionPolygon &selectionPolygon, NodeVector &nodes, DataKind data_kind) const
DoubleNodeVectorMap m_rtDoubleNodeVectorMap
DoubleNodeVectorMap m_dtDoubleNodeVectorMap
#define PMSPP_LIB_DECL
tries to keep as much as possible monoisotopes, removing any possible C13 peaks and changes multichar...
Definition: aa.cpp:39
std::shared_ptr< MsRunDataSetTree > MsRunDataSetTreeSPtr
std::shared_ptr< const MsRunDataSetTree > MsRunDataSetTreeCstSPtr
std::shared_ptr< const MsRunId > MsRunIdCstSPtr
Definition: msrunid.h:44
double pappso_double
A type definition for doubles.
Definition: types.h:49
std::shared_ptr< const QualifiedMassSpectrum > QualifiedMassSpectrumCstSPtr
DataKind
Definition: types.h:172