morphology.h
1 #pragma once
2 
3 #include <memory> //std::unique_ptr
4 
5 #include <highfive/H5Group.hpp>
6 #include <morphio/properties.h>
7 #include <morphio/section_iterators.hpp>
8 #include <morphio/types.h>
9 
10 namespace morphio {
11 enum SomaClasses { SOMA_CONTOUR, SOMA_CYLINDER };
12 
13 using breadth_iterator = breadth_iterator_t<Section, Morphology>;
14 using depth_iterator = depth_iterator_t<Section, Morphology>;
15 
22 {
23  public:
24  virtual ~Morphology();
25 
26  Morphology& operator=(const Morphology&);
27  Morphology(Morphology&&) noexcept;
28  Morphology& operator=(Morphology&&) noexcept;
29 
40  explicit Morphology(const std::string& source, unsigned int options = NO_MODIFIER);
41  explicit Morphology(const HighFive::Group& group, unsigned int options = NO_MODIFIER);
42  explicit Morphology(mut::Morphology);
43 
47  Soma soma() const;
48 
52  Mitochondria mitochondria() const;
53 
58 
62  const std::vector<Property::Annotation>& annotations() const;
63 
67  const std::vector<Property::Marker>& markers() const;
68 
73  std::vector<Section> rootSections() const;
74 
78  std::vector<Section> sections() const;
79 
85  Section section(uint32_t id) const;
86 
91  const Points& points() const noexcept;
92 
103  std::vector<uint32_t> sectionOffsets() const;
104 
109  const std::vector<morphio::floatType>& diameters() const;
110 
114  const std::vector<morphio::floatType>& perimeters() const;
115 
119  const std::vector<SectionType>& sectionTypes() const;
120 
126  const std::map<int, std::vector<unsigned int>>& connectivity() const;
127 
128 
134  depth_iterator depth_begin() const;
135  depth_iterator depth_end() const;
136 
144  breadth_iterator breadth_end() const;
145 
149  const SomaType& somaType() const;
150 
154  const CellFamily& cellFamily() const;
155 
159  const MorphologyVersion& version() const;
160 
161  protected:
162  friend class mut::Morphology;
163  Morphology(const Property::Properties& properties, unsigned int options);
164 
165  std::shared_ptr<Property::Properties> _properties;
166 
167  template <typename Property>
168  const std::vector<typename Property::Type>& get() const;
169 };
170 } // namespace morphio
const EndoplasmicReticulum endoplasmicReticulum() const
depth_iterator depth_begin() const
const std::vector< morphio::floatType > & diameters() const
const Points & points() const noexcept
Definition: section_iterators.hpp:53
Soma soma() const
const std::vector< Property::Marker > & markers() const
std::vector< Section > sections() const
std::vector< uint32_t > sectionOffsets() const
Section section(uint32_t id) const
const std::vector< SectionType > & sectionTypes() const
Definition: soma.h:28
Mitochondria mitochondria() const
Definition: endoplasmic_reticulum.h:5
const SomaType & somaType() const
Definition: morphology.h:26
Definition: section_iterators.hpp:81
Definition: endoplasmic_reticulum.h:11
Definition: properties.h:168
Definition: morphology.h:21
breadth_iterator breadth_begin() const
const CellFamily & cellFamily() const
const std::vector< morphio::floatType > & perimeters() const
const std::map< int, std::vector< unsigned int > > & connectivity() const
Definition: mitochondria.h:14
const std::vector< Property::Annotation > & annotations() const
std::vector< Section > rootSections() const
const MorphologyVersion & version() const
Definition: section.h:36