Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
Loading...
Searching...
No Matches
SolidBox.hh
Go to the documentation of this file.
1#ifndef G_SOLID_BOX_H
2#define G_SOLID_BOX_H
3
4#include <array>
5
6#include "Garfield/Solid.hh"
7
8namespace Garfield {
9
11
12class SolidBox : public Solid {
13 public:
15 SolidBox(const double cx, const double cy, const double cz, const double lx,
16 const double ly, const double lz);
18 SolidBox(const double cx, const double cy, const double cz, const double lx,
19 const double ly, const double lz, const double dx, const double dy,
20 const double dz);
23
24 bool IsInside(const double x, const double y, const double z,
25 const bool tesselated) const override;
26 bool GetBoundingBox(double& xmin, double& ymin, double& zmin, double& xmax,
27 double& ymax, double& zmax) const override;
28 bool IsBox() const override { return true; }
29
30 double GetHalfLengthX() const override { return m_lX; }
31 double GetHalfLengthY() const override { return m_lY; }
32 double GetHalfLengthZ() const override { return m_lZ; }
33
34 void SetHalfLengthX(const double lx);
35 void SetHalfLengthY(const double ly);
36 void SetHalfLengthZ(const double lz);
37
38 bool SolidPanels(std::vector<Panel>& panels) override;
39 void SetDiscretisationLevel(const double dis) override { m_dis.fill(dis); }
40 double GetDiscretisationLevel(const Panel& panel) override;
41
42 void Cut(const double x0, const double y0, const double z0, const double xn,
43 const double yn, const double zn,
44 std::vector<Panel>& panels) override;
45
46 private:
48 double m_lX = 0., m_lY = 0., m_lZ = 0.;
50 std::array<double, 6> m_dis{{-1, -1, -1, -1, -1, -1}};
51};
52} // namespace Garfield
53
54#endif
double GetHalfLengthZ() const override
Return the half-length along z.
Definition SolidBox.hh:32
SolidBox(const double cx, const double cy, const double cz, const double lx, const double ly, const double lz, const double dx, const double dy, const double dz)
Constructor from centre, half-widths, and orientation.
void SetHalfLengthX(const double lx)
SolidBox(const double cx, const double cy, const double cz, const double lx, const double ly, const double lz)
Constructor from centre and half-widths.
bool IsBox() const override
Return true if the solid is a box.
Definition SolidBox.hh:28
double GetHalfLengthY() const override
Return the half-length along y.
Definition SolidBox.hh:31
double m_lX
Half lengths.
Definition SolidBox.hh:48
bool SolidPanels(std::vector< Panel > &panels) override
Retrieve the surface panels of the solid.
std::array< double, 6 > m_dis
Discretisation levels.
Definition SolidBox.hh:50
~SolidBox()
Destructor.
Definition SolidBox.hh:22
bool IsInside(const double x, const double y, const double z, const bool tesselated) const override
Check whether a given point is inside the solid.
void SetHalfLengthZ(const double lz)
bool GetBoundingBox(double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) const override
Return the bounding box of the solid.
double GetHalfLengthX() const override
Return the half-length along x.
Definition SolidBox.hh:30
double GetDiscretisationLevel(const Panel &panel) override
Retrieve the discretisation level of a panel.
void SetDiscretisationLevel(const double dis) override
Set the discretisation level (for all panels).
Definition SolidBox.hh:39
void Cut(const double x0, const double y0, const double z0, const double xn, const double yn, const double zn, std::vector< Panel > &panels) override
void SetHalfLengthY(const double ly)
Solid()=delete
Default constructor.
Surface panel.
Definition Solid.hh:11