mitochondria.h
1 #pragma once
2 
3 #include <map>
4 #include <memory>
5 
6 #include <morphio/mito_section.h>
7 #include <morphio/properties.h>
8 #include <morphio/types.h>
9 
10 #include <morphio/mut/mito_section.h>
11 
12 namespace morphio {
13 namespace mut {
14 
15 using mito_upstream_iterator = morphio::upstream_iterator_t<std::shared_ptr<MitoSection>>;
16 using mito_breadth_iterator =
18 using mito_depth_iterator = morphio::depth_iterator_t<std::shared_ptr<MitoSection>, Mitochondria>;
19 
21 class Mitochondria
22 {
23  using MitoSectionP = std::shared_ptr<MitoSection>;
24 
25  public:
26  Mitochondria()
27  : _counter(0) {}
28 
29  const std::vector<MitoSectionP>& children(const MitoSectionP&) const;
30  const MitoSectionP& section(uint32_t id) const;
31  const std::map<uint32_t, MitoSectionP>& sections() const noexcept;
32 
39  mito_depth_iterator depth_begin(const MitoSectionP& section) const;
40  mito_depth_iterator depth_end() const;
41 
49  mito_breadth_iterator breadth_begin(const MitoSectionP& section) const;
50  mito_breadth_iterator breadth_end() const;
51 
59  mito_upstream_iterator upstream_begin(const MitoSectionP& section) const;
60  mito_upstream_iterator upstream_end() const;
61 
65  const MitoSectionP& parent(const MitoSectionP& parent) const;
66 
70  bool isRoot(const MitoSectionP& section) const;
71 
76  const std::vector<MitoSectionP>& rootSections() const noexcept;
77 
81  MitoSectionP appendRootSection(const Property::MitochondriaPointLevel& points);
82 
89  MitoSectionP appendRootSection(const morphio::MitoSection&, bool recursive = false);
90  MitoSectionP appendRootSection(const MitoSectionP&, bool recursive = false);
91 
92  const MitoSectionP& mitoSection(uint32_t id) const;
93 
97  void _buildMitochondria(Property::Properties& properties) const;
98 
99  private:
100  friend class MitoSection;
101 
102  uint32_t _register(const MitoSectionP& section);
103 
104  uint32_t _counter;
105  std::map<uint32_t, std::vector<MitoSectionP>> _children;
106  std::map<uint32_t, uint32_t> _parent;
107  std::vector<MitoSectionP> _rootSections;
108  std::map<uint32_t, MitoSectionP> _sections;
109 };
110 
111 inline const std::map<uint32_t, Mitochondria::MitoSectionP>& Mitochondria::sections() const
112  noexcept {
113  return _sections;
114 }
115 
116 inline const std::vector<Mitochondria::MitoSectionP>& Mitochondria::rootSections() const noexcept {
117  return _rootSections;
118 }
119 
120 } // namespace mut
121 } // namespace morphio
Definition: section_iterators.hpp:109
Definition: section_iterators.hpp:53
void _buildMitochondria(Property::Properties &properties) const
mito_breadth_iterator breadth_begin() const
const MitoSectionP & parent(const MitoSectionP &parent) const
Definition: mito_section.h:14
MitoSectionP appendRootSection(const Property::MitochondriaPointLevel &points)
Definition: mito_section.h:11
Definition: dendritic_spine.h:9
Definition: section_iterators.hpp:81
const std::vector< MitoSectionP > & rootSections() const noexcept
Definition: mitochondria.h:116
Definition: properties.h:203
mito_depth_iterator depth_begin() const
mito_upstream_iterator upstream_begin() const
bool isRoot(const MitoSectionP &section) const