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>
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.
Provides simple real number checks.
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.
Verifies that the geometry check information is available.
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.