19#ifndef _OPTICAL_ELEMENT_H
20#define _OPTICAL_ELEMENT_H
26#include <RayTracingEngine.h>
39 std::map<uint32_t, RayBeamStatistics> statistics;
41 mutable std::vector<Ray> hits;
44 mutable std::vector<Real> locationArray;
45 mutable std::vector<Real> directionArray;
47 std::vector<Real> &locations()
const;
48 std::vector<Real> &directions()
const;
50 void clearCache()
const;
51 void clearStatistics();
55 std::list<const OpticalSurface *> m_sequence;
56 std::map<std::string, const OpticalSurface *> m_nameToSurface;
61 const std::vector<Real> &hits(std::string
const &name)
const;
62 const std::vector<Real> &directions(std::string
const &name)
const;
65 getSurface(std::string
const &name)
const
67 auto it = m_nameToSurface.find(name);
69 if (it == m_nameToSurface.cend())
75 inline std::list<std::string>
78 std::list<std::string> list;
80 for (
auto &p : m_nameToSurface)
81 list.push_back(p.first);
88 using Element::Element;
89 std::list<OpticalSurface> m_surfaces;
90 std::map<std::string, OpticalSurface *> m_nameToSurf;
91 std::list<ReferenceFrame *> m_surfaceFrames;
93 bool m_recordHits =
false;
96 void pushOpticalSurface(
101 void defineOpticalSurface(
122 if (element->hasProperty(
"optical"))
128 virtual OpticalPath opticalPath(std::string
const &name =
"")
const;
131 const std::list<const OpticalSurface *> &opticalSurfaces()
const;
132 std::list<OpticalSurface *> opticalSurfaces();
133 std::list<std::string> surfaceNames()
const;
137 const std::vector<Real> &hits(std::string
const &name =
"")
const;
138 const std::vector<Real> &directions(std::string
const &name =
"")
const;
140 virtual void setRecordHits(
bool);
141 virtual void clearHits();
Definition: Element.h:393
Definition: Element.h:173
Definition: MediumBoundary.h:35
Definition: OpticalElement.h:87
Definition: ReferenceFrame.h:59
Definition: OpticalElement.h:54
Definition: OpticalElement.h:33