9 #ifndef LARCOREALG_GEOMETRY_AUXDETGEO_H
10 #define LARCOREALG_GEOMETRY_AUXDETGEO_H
21 #include "TGeoVolume.h"
22 #include "Math/GenVector/DisplacementVector3D.h"
23 #include "Math/GenVector/PositionVector3D.h"
29 #include <type_traits>
35 class GeoObjectSorter;
83 void GetCenter(
double* xyz,
double localz=0.0)
const;
169 (
double const worldLoc[3],
size_t& sv)
const;
200 template <
typename Stream>
202 (
Stream&& out, std::string indent =
"",
unsigned int verbosity = 1)
const;
212 (std::string indent =
"",
unsigned int verbosity = 1)
const;
235 static_assert(std::is_move_assignable_v<geo::AuxDetGeo>);
236 static_assert(std::is_move_constructible_v<geo::AuxDetGeo>);
244 template <
typename Stream>
248 unsigned int verbosity
252 out <<
"\"" <<
Name() <<
"\"";
254 if (verbosity-- <= 0)
return;
257 out <<
" centered at " <<
GetCenter() <<
" cm";
259 if (verbosity-- <= 0)
return;
268 if (verbosity-- <= 0)
return;
271 out <<
"\n" << indent
274 case 0: out <<
"no sensitive volume";
break;
275 case 1: out <<
"1 sensitive volume";
break;
279 if (verbosity-- <= 0)
return;
293 #endif // LARCOREALG_GEOMETRY_AUXDETGEO_H
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Vector_t
Type for representation of momenta in 3D space.
std::string AuxDetInfo(std::string indent="", unsigned int verbosity=1) const
Returns a string with auxiliary detector information.
LocalPoint_t toLocalCoords(geo::Point_t const &world) const
Transform point from world frame to local auxiliary detector frame.
void LocalToWorld(const double *auxdet, double *world) const
Transform point from local auxiliary detector frame to world frame.
constexpr bool nonEqual(Value_t a, Value_t b) const
Returns whether a and b are farther than the threshold.
double Length_t
Type used for coordinates and distances. They are measured in centimeters.
Encapsulate the geometry of the sensitive portion of an auxiliary detector.
AuxDetSensitiveGeo const & SensitiveVolume(size_t sv) const
double fHalfWidth2
2nd half width (width1==width2 for boxes), at +z/2
geo::Length_t DistanceToPoint(geo::Point_t const &point) const
Returns the distance of point from the center of the detector.
LocalTransformation_t fTrans
Auxiliary detector-to-world transformation.
void WorldToLocal(const double *world, double *auxdet) const
Transform point from world frame to local auxiliary detector frame.
LocalVector_t toLocalCoords(geo::Vector_t const &world) const
Transform direction vector from world to local.
double fHalfWidth1
1st half width of volume, at -z/2 in local coordinates
void WorldToLocalVect(const double *world, double *auxdet) const
Transform direction vector from world to local.
void SortSubVolumes(geo::GeoObjectSorter const &sorter)
geo::Vector_t toWorldCoords(LocalVector_t const &local) const
Transform direction vector from local to world.
geo::Point3DBase_t< AuxDetGeoCoordinatesTag > LocalPoint_t
Type of points in the local GDML auxiliary detector frame.
double fLength
length of volume, along z direction in local
Class for approximate comparisons.
AuxDetSensitiveGeo const & PositionToSensitiveVolume(geo::Point_t const &point, size_t &sv) const
double HalfWidth2() const
const TGeoVolume * fTotalVolume
Total volume of AuxDet, called vol*.
void LocalToWorldVect(const double *auxdet, double *world) const
Transform direction vector from local to world.
geo::Vector3DBase_t< AuxDetGeoCoordinatesTag > LocalVector_t
Type of displacement vectors in the local GDML auxiliary detector frame.
std::size_t FindSensitiveVolume(geo::Point_t const &point) const
double HalfHeight() const
Definitions of geometry vector data types.
size_t NSensitiveVolume() const
geo::Vector_t GetNormalVector() const
Returns the unit normal vector to the detector.
const TGeoVolume * TotalVolume() const
AuxDetGeo(TGeoNode const &node, geo::TransformationMatrix &&trans, AuxDetSensitiveList_t &&sensitive)
static constexpr unsigned int MaxVerbosity
Maximum verbosity supported by PrintAuxDetInfo().
GenPoint3DBase_t< double, C > Point3DBase_t
Type of 3D point with representation in double precision.
GenVector3DBase_t< double, C > Vector3DBase_t
double HalfWidth1() const
std::vector< geo::AuxDetSensitiveGeo > AuxDetSensitiveList_t
Type of list of sensitive volumes.
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Point_t
Type for representation of position in physical 3D space.
double fHalfHeight
half height of volume
void InitShapeSize()
Extracts the size of the detector from the geometry information.
void PrintAuxDetInfo(Stream &&out, std::string indent="", unsigned int verbosity=1) const
Prints information about this auxiliary detector.
ROOT::Math::Transform3D TransformationMatrix
Type of transformation matrix used in geometry.
geo::Point_t toWorldCoords(LocalPoint_t const &local) const
Transform point from local auxiliary detector frame to world frame.
std::vector< AuxDetSensitiveGeo > fSensitive
sensitive volumes in the detector
void GetCenter(double *xyz, double localz=0.0) const
Return the center position of an AuxDet.