LArSoft  v10_04_05
Liquid Argon Software toolkit - https://larsoft.org/
geo::details Namespace Reference

Classes

struct  AbsIDtypeStruct
 
struct  AbsIDtypeStruct< ID, Index, std::enable_if_t<(Index==ID::Level)> >
 
class  GeoContainerData
 
class  GeoIDdataContainerItemIterator
 Item iterator for geo::GeoIDdataContainer class. More...
 
class  GeoIDdataContainerIterator
 Iterator for geo::GeoIDdataContainer class. More...
 
class  geometry_element_iterator
 Forward iterator browsing all geometry elements in the detector. More...
 
class  GeometryIterationPolicy
 
struct  has_geometry_id_iterator_tag
 Stream output for all geometry ID iterator types: prints the pointed ID. More...
 
struct  has_geometry_id_iterator_tag< T, std::void_t< typename T::GeometryIDIteratorTag > >
 
struct  has_parent
 
struct  has_parent< T, std::void_t< typename T::ParentID_t > >
 
class  id_iterator_base
 Base forward iterator browsing all cryostat IDs in the detector. More...
 
class  id_iterator_base< CryostatID, GEOID, IterationPolicy >
 
struct  id_sentinel
 
struct  IDIteratorValueType
 
struct  IDIteratorValueType< T, std::void_t< typename T::ID_t > >
 
struct  IteratorFor
 
struct  IteratorFor< T, Policy, Transform, std::enable_if_t<!std::is_same_v< Transform, void_tag > and !std::is_base_of_v< CryostatID, T > > >
 
class  ReadoutIterationPolicy
 
struct  supported
 
class  ToGeometryElement
 
class  ToReadoutGeometryElement
 
struct  TransformationMatrixConverter
 

Typedefs

template<typename Owner , typename Element , typename IterationPolicy >
using element_iterator_for = geometry_element_iterator< Owner, Element, id_iterator< typename Element::ID_t, IterationPolicy >>
 
template<typename Element >
using element_sentinel_for = id_sentinel< typename Element::ID_t >
 
template<typename LocalID , typename SiblingPolicy >
using id_iterator = id_iterator_base< LocalID, LocalID, SiblingPolicy >
 
template<typename Begin , typename End >
using RangeType = decltype(ranges::make_subrange(std::declval< Begin >(), std::declval< End >()))
 
template<std::size_t Index, typename ID >
using AbsIDtype = typename AbsIDtypeStruct< ID, Index >::type
 

Functions

template<typename Owner , typename Element , typename GEOIDITER >
bool operator== (geometry_element_iterator< Owner, Element, GEOIDITER > const &a, geometry_element_iterator< Owner, Element, GEOIDITER > const &b)
 
template<typename Owner , typename Element , typename GEOIDITER >
bool operator!= (geometry_element_iterator< Owner, Element, GEOIDITER > const &a, geometry_element_iterator< Owner, Element, GEOIDITER > const &b)
 
template<typename Owner , typename Element , typename GEOIDITER >
bool operator== (geometry_element_iterator< Owner, Element, GEOIDITER > const &a, id_sentinel< typename Element::ID_t > const &b)
 
template<typename Owner , typename Element , typename GEOIDITER >
bool operator!= (geometry_element_iterator< Owner, Element, GEOIDITER > const &a, id_sentinel< typename Element::ID_t > const &b)
 
template<typename Owner , typename Element , typename GEOIDITER >
bool operator== (id_sentinel< typename Element::ID_t > const &a, geometry_element_iterator< Owner, Element, GEOIDITER > const &b)
 
template<typename Owner , typename Element , typename GEOIDITER >
bool operator!= (id_sentinel< typename Element::ID_t > const &a, geometry_element_iterator< Owner, Element, GEOIDITER > const &b)
 
template<std::size_t Levels = 4U>
static std::array< unsigned int, Levels > extractMaxGeometryElements (std::vector< CryostatGeo > const &Cryostats, WireReadoutGeom const &wireReadoutGeom)
 Extracts the maximum number of elements per type. More...
 
CryostatGeo const * getElementPtr (GeometryCore const *geom, CryostatID const &id)
 
TPCGeo const * getElementPtr (GeometryCore const *geom, TPCID const &id)
 
bool validElement (GeometryCore const *geom, CryostatID const &id)
 
bool validElement (GeometryCore const *geom, TPCID const &id)
 
template<typename ID >
 id_sentinel (ID) -> id_sentinel< ID >
 
template<typename ID >
std::ostream & operator<< (std::ostream &out, id_sentinel< ID > const &sentinel)
 
template<typename LocalID , typename SiblingPolicy >
auto iterator_for (LocalID const &id, SiblingPolicy const &siblingPolicy)
 
template<typename GEOIT >
std::enable_if_t< has_geometry_id_iterator_tag< GEOIT >::value, std::ostream & > operator<< (std::ostream &out, GEOIT const &it)
 
template<typename ID , typename IterationPolicy >
void IncrementID (ID &id, IterationPolicy const &policy)
 
template<typename GeoID , typename IterationPolicy >
GeoID GetNextID (GeoID const &id, IterationPolicy const &policy)
 Returns the ID next to the specified one. More...
 
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool operator== (id_iterator_base< LocalID, GeoID, IterationPolicy > const &a, id_iterator_base< LocalID, GeoID, IterationPolicy > const &b)
 
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool operator!= (id_iterator_base< LocalID, GeoID, IterationPolicy > const &a, id_iterator_base< LocalID, GeoID, IterationPolicy > const &b)
 
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool operator== (id_iterator_base< LocalID, GeoID, IterationPolicy > const &a, id_sentinel< LocalID > const &b)
 
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool operator!= (id_iterator_base< LocalID, GeoID, IterationPolicy > const &a, id_sentinel< LocalID > const &b)
 
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool operator== (id_sentinel< LocalID > const &a, id_iterator_base< LocalID, GeoID, IterationPolicy > const &b)
 
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool operator!= (id_sentinel< LocalID > const &a, id_iterator_base< LocalID, GeoID, IterationPolicy > const &b)
 
template<typename LocalID >
bool operator== (id_sentinel< LocalID > const &a, id_sentinel< LocalID > const &b)
 
template<typename LocalID >
bool operator!= (id_sentinel< LocalID > const &a, id_sentinel< LocalID > const &b)
 
std::string maybe_default_detector_name (fhicl::ParameterSet const &pset, std::string const &filename)
 
PlaneGeo const * getElementPtr (WireReadoutGeom const *wireReadoutGeom, PlaneID const &id)
 
WireGeo const * getElementPtr (WireReadoutGeom const *wireReadoutGeom, WireID const &id)
 
bool validElement (WireReadoutGeom const *wireReadoutGeom, PlaneID const &id)
 
bool validElement (WireReadoutGeom const *wireReadoutGeom, WireID const &id)
 
template<>
readout::TPCsetID ReadoutIterationPolicy::GetEndID< readout::TPCsetID > () const
 
template<>
readout::TPCsetID ReadoutIterationPolicy::GetEndID< readout::TPCsetID, CryostatID > (CryostatID const &id) const
 
template<>
readout::ROPID ReadoutIterationPolicy::GetEndID< readout::ROPID > () const
 
template<>
readout::ROPID ReadoutIterationPolicy::GetEndID< readout::ROPID, CryostatID > (CryostatID const &id) const
 
template<>
readout::ROPID ReadoutIterationPolicy::GetEndID< readout::ROPID, readout::TPCsetID > (readout::TPCsetID const &id) const
 
template<std::size_t N, typename T >
auto initializerListToArray (std::initializer_list< T > values)
 Returns a STL array of size N filled with values from the argument. More...
 
template<typename T >
std::string writeToString (T const &value)
 Write the argument into a string. More...
 
template<typename T >
constexpr auto index_impl (std::size_t &index)
 
template<typename T >
constexpr auto const index_for ()
 
template<std::size_t Index, typename ID >
constexpr auto getAbsIDindex (ID const &id)
 
template<std::size_t Index, typename ID >
auto & getAbsIDindex (ID &id)
 

Variables

constexpr CryostatID cryostat_zero {0}
 
constexpr TPCID tpc_zero {cryostat_zero, 0}
 
template<typename ID >
constexpr bool isTopGeoElementID = !has_parent<ID>::value
 Whether ID represents an element on top of the hierarchy. More...
 

Typedef Documentation

template<std::size_t Index, typename ID >
using geo::details::AbsIDtype = typedef typename AbsIDtypeStruct<ID, Index>::type

Definition at line 59 of file geo_types.h.

template<typename Owner , typename Element , typename IterationPolicy >
using geo::details::element_iterator_for = typedef geometry_element_iterator<Owner, Element, id_iterator<typename Element::ID_t, IterationPolicy>>

Definition at line 120 of file element_iterators.h.

template<typename Element >
using geo::details::element_sentinel_for = typedef id_sentinel<typename Element::ID_t>

Definition at line 123 of file element_iterators.h.

template<typename LocalID , typename SiblingPolicy >
using geo::details::id_iterator = typedef id_iterator_base<LocalID, LocalID, SiblingPolicy>

Definition at line 233 of file id_iterators.h.

template<typename Begin , typename End >
using geo::details::RangeType = typedef decltype(ranges::make_subrange(std::declval<Begin>(), std::declval<End>()))

Definition at line 52 of file Iterable.h.

Function Documentation

template<std::size_t Levels = 4U>
static std::array<unsigned int, Levels> geo::details::extractMaxGeometryElements ( std::vector< CryostatGeo > const &  Cryostats,
WireReadoutGeom const &  wireReadoutGeom 
)
static

Extracts the maximum number of elements per type.

Template Parameters
Levelsthe number of detector elements to discover
Parameters
Cryostatsthe sorted list of cryostats in the detector
Returns
an array with maximum number of cryostats, TPCs, planes and wires

The returned array includes:

  • index [0]: number of cryostats
  • index [1]: maximum number of TPCs in any of the cryostats (enabled only if Levels is 2 or higher)
  • index [2]: maximum number of wire planes in any of the TPCs (enabled only if Levels is 3 or higher)
  • index [3]: maximum number of wires in any of the wire planes (enabled only if Levels is 4)
template<std::size_t Index, typename ID >
constexpr auto geo::details::getAbsIDindex ( ID const &  id)

Definition at line 62 of file geo_types.h.

63  {
64  static_assert(Index <= ID::Level, "Index not available for this type.");
65  if constexpr (Index == ID::Level)
66  return id.deepestIndex();
67  else
68  return getAbsIDindex<Index>(id.parentID());
69  }
Level
Definition: Level.h:13
auto & getAbsIDindex(ID &id)
Definition: geo_types.h:72
template<std::size_t Index, typename ID >
auto& geo::details::getAbsIDindex ( ID &  id)

Definition at line 72 of file geo_types.h.

73  {
74  static_assert(Index <= ID::Level, "Index not available for this type.");
75  if constexpr (Index == ID::Level)
76  return id.deepestIndex();
77  else
78  return getAbsIDindex<Index>(id.parentID());
79  }
Level
Definition: Level.h:13
auto & getAbsIDindex(ID &id)
Definition: geo_types.h:72
CryostatGeo const * geo::details::getElementPtr ( GeometryCore const *  geom,
CryostatID const &  id 
)
TPCGeo const * geo::details::getElementPtr ( GeometryCore const *  geom,
TPCID const &  id 
)

Definition at line 44 of file GeometryIterationPolicy.cxx.

References geo::GeometryCore::GetElementPtr().

45  {
46  assert(geom);
47  return geom->GetElementPtr(id);
48  }
PlaneGeo const * geo::details::getElementPtr ( WireReadoutGeom const *  wireReadoutGeom,
PlaneID const &  id 
)

Definition at line 101 of file ReadoutIterationPolicy.cxx.

References geo::WireReadoutGeom::PlanePtr().

102  {
103  assert(wireReadoutGeom);
104  return wireReadoutGeom->PlanePtr(id);
105  }
WireGeo const * geo::details::getElementPtr ( WireReadoutGeom const *  wireReadoutGeom,
WireID const &  id 
)

Definition at line 107 of file ReadoutIterationPolicy.cxx.

References geo::WireReadoutGeom::WirePtr().

108  {
109  assert(wireReadoutGeom);
110  return wireReadoutGeom->WirePtr(id);
111  }
template<typename GeoID , typename IterationPolicy >
GeoID geo::details::GetNextID ( GeoID const &  id,
IterationPolicy const &  policy 
)

Returns the ID next to the specified one.

Template Parameters
GeoIDtype of the ID to be returned
Parameters
idthe element ID to be incremented
Returns
ID of the next subelement after id

Definition at line 285 of file id_iterators.h.

References IncrementID().

Referenced by geo::details::ReadoutIterationPolicy::EndPlaneID(), geo::details::ReadoutIterationPolicy::EndROPID(), geo::details::GeometryIterationPolicy::EndTPCID(), geo::details::ReadoutIterationPolicy::EndTPCsetID(), and geo::details::ReadoutIterationPolicy::EndWireID().

286  {
287  auto nextID(id);
288  IncrementID(nextID, policy);
289  return nextID;
290  }
void IncrementID(ID &id, IterationPolicy const &policy)
Definition: id_iterators.h:266
template<typename ID >
geo::details::id_sentinel ( ID  ) -> id_sentinel< ID >
template<typename ID , typename IterationPolicy >
void geo::details::IncrementID ( ID &  id,
IterationPolicy const &  policy 
)

Sets the ID to the ID after the specified one.

Returns
whether the ID is actually valid (validity flag is also set)

Definition at line 266 of file id_iterators.h.

Referenced by GetNextID().

267  {
268  static_assert(supported<ID, IterationPolicy>::check(&IterationPolicy::NSiblings));
269 
270  if (++id.deepestIndex() < policy.NSiblings(id)) return;
271  if constexpr (has_parent<ID>::value) {
272  // go to next parent element and reset index
273  id.deepestIndex() = 0;
274  IncrementID(id.parentID(), policy);
275  }
276  }
void IncrementID(ID &id, IterationPolicy const &policy)
Definition: id_iterators.h:266
double value
Definition: spectrum.C:18
template<typename T >
constexpr auto const geo::details::index_for ( )
template<typename T >
constexpr auto geo::details::index_impl ( std::size_t &  index)

Definition at line 42 of file geo_types.h.

43  {
44  if constexpr (has_parent<T>::value) { index_impl<typename T::ParentID_t>(++index); }
45  }
double value
Definition: spectrum.C:18
template<std::size_t N, typename T >
auto geo::details::initializerListToArray ( std::initializer_list< T >  values)

Returns a STL array of size N filled with values from the argument.

Definition at line 391 of file GeometryIDmapper.h.

392 {
393  std::array<T, N> data{}; // <- initializing to quiet the compiler
394  std::copy(values.begin(), values.end(), data.begin());
395  return data;
396 }
decltype(auto) values(Coll &&coll)
Range-for loop helper iterating across the values of the specified collection.
template<typename LocalID , typename SiblingPolicy >
auto geo::details::iterator_for ( LocalID const &  id,
SiblingPolicy const &  siblingPolicy 
)

Definition at line 236 of file id_iterators.h.

References geo::details::id_sentinel< ID >::id.

Referenced by geo::Iterable< details::ReadoutIterationPolicy, details::ToReadoutGeometryElement >::begin().

237  {
238  return id_iterator<LocalID, SiblingPolicy>(id, siblingPolicy);
239  }
std::string geo::details::maybe_default_detector_name ( fhicl::ParameterSet const &  pset,
std::string const &  filename 
)

Definition at line 8 of file maybe_default_detector_name.cxx.

References fhicl::ParameterSet::get_if_present().

Referenced by geo::AuxDetGeometryCore::AuxDetGeometryCore(), and geo::GeometryCore::GeometryCore().

10  {
11  if (auto name = pset.get_if_present<std::string>("Name")) { return *name; }
12  return boost::filesystem::path{filename}.stem().native();
13  }
template<typename Owner , typename Element , typename GEOIDITER >
bool geo::details::operator!= ( geometry_element_iterator< Owner, Element, GEOIDITER > const &  a,
geometry_element_iterator< Owner, Element, GEOIDITER > const &  b 
)

Definition at line 134 of file element_iterators.h.

136  {
137  return !(a == b);
138  }
template<typename Owner , typename Element , typename GEOIDITER >
bool geo::details::operator!= ( geometry_element_iterator< Owner, Element, GEOIDITER > const &  a,
id_sentinel< typename Element::ID_t > const &  b 
)

Definition at line 148 of file element_iterators.h.

150  {
151  return !(a == b);
152  }
template<typename Owner , typename Element , typename GEOIDITER >
bool geo::details::operator!= ( id_sentinel< typename Element::ID_t > const &  a,
geometry_element_iterator< Owner, Element, GEOIDITER > const &  b 
)

Definition at line 162 of file element_iterators.h.

164  {
165  return !(a == b);
166  }
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool geo::details::operator!= ( id_iterator_base< LocalID, GeoID, IterationPolicy > const &  a,
id_iterator_base< LocalID, GeoID, IterationPolicy > const &  b 
)

Definition at line 301 of file id_iterators.h.

303  {
304  return !(a == b);
305  }
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool geo::details::operator!= ( id_iterator_base< LocalID, GeoID, IterationPolicy > const &  a,
id_sentinel< LocalID > const &  b 
)

Definition at line 315 of file id_iterators.h.

317  {
318  return !(a == b);
319  }
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool geo::details::operator!= ( id_sentinel< LocalID > const &  a,
id_iterator_base< LocalID, GeoID, IterationPolicy > const &  b 
)

Definition at line 329 of file id_iterators.h.

331  {
332  return !(a == b);
333  }
template<typename LocalID >
bool geo::details::operator!= ( id_sentinel< LocalID > const &  a,
id_sentinel< LocalID > const &  b 
)

Definition at line 342 of file id_iterators.h.

343  {
344  return !(a == b);
345  }
template<typename ID >
std::ostream& geo::details::operator<< ( std::ostream &  out,
id_sentinel< ID > const &  sentinel 
)

Definition at line 25 of file id_iterators.h.

References geo::details::id_sentinel< ID >::id.

26  {
27  return out << "id_sentinel{ " << sentinel.id << " }";
28  }
template<typename GEOIT >
std::enable_if_t<has_geometry_id_iterator_tag<GEOIT>::value, std::ostream&> geo::details::operator<< ( std::ostream &  out,
GEOIT const &  it 
)

Definition at line 250 of file id_iterators.h.

253  {
254  return out << "geometry_iterator{ " << *it << " }";
255  }
template<typename Owner , typename Element , typename GEOIDITER >
bool geo::details::operator== ( geometry_element_iterator< Owner, Element, GEOIDITER > const &  a,
geometry_element_iterator< Owner, Element, GEOIDITER > const &  b 
)

Definition at line 127 of file element_iterators.h.

References geo::details::geometry_element_iterator< Owner, Element, GEOIDITER >::id_iterator().

129  {
130  return a.id_iterator() == b.id_iterator();
131  }
template<typename Owner , typename Element , typename GEOIDITER >
bool geo::details::operator== ( geometry_element_iterator< Owner, Element, GEOIDITER > const &  a,
id_sentinel< typename Element::ID_t > const &  b 
)

Definition at line 141 of file element_iterators.h.

References geo::details::geometry_element_iterator< Owner, Element, GEOIDITER >::id_iterator().

143  {
144  return a.id_iterator() == b;
145  }
template<typename Owner , typename Element , typename GEOIDITER >
bool geo::details::operator== ( id_sentinel< typename Element::ID_t > const &  a,
geometry_element_iterator< Owner, Element, GEOIDITER > const &  b 
)

Definition at line 155 of file element_iterators.h.

References geo::details::geometry_element_iterator< Owner, Element, GEOIDITER >::id_iterator().

157  {
158  return a == b.id_iterator();
159  }
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool geo::details::operator== ( id_iterator_base< LocalID, GeoID, IterationPolicy > const &  a,
id_iterator_base< LocalID, GeoID, IterationPolicy > const &  b 
)

Definition at line 294 of file id_iterators.h.

References geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::localID().

296  {
297  return a.localID() == b.localID();
298  }
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool geo::details::operator== ( id_iterator_base< LocalID, GeoID, IterationPolicy > const &  a,
id_sentinel< LocalID > const &  b 
)

Definition at line 308 of file id_iterators.h.

References geo::details::id_sentinel< ID >::id, and geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::localID().

310  {
311  return a.localID() == b.id;
312  }
template<typename LocalID , typename GeoID , typename IterationPolicy >
bool geo::details::operator== ( id_sentinel< LocalID > const &  a,
id_iterator_base< LocalID, GeoID, IterationPolicy > const &  b 
)

Definition at line 322 of file id_iterators.h.

References geo::details::id_sentinel< ID >::id, and geo::details::id_iterator_base< LocalID, GEOID, IterationPolicy >::localID().

324  {
325  return a.id == b.localID();
326  }
template<typename LocalID >
bool geo::details::operator== ( id_sentinel< LocalID > const &  a,
id_sentinel< LocalID > const &  b 
)

Definition at line 336 of file id_iterators.h.

References geo::details::id_sentinel< ID >::id.

337  {
338  return a.id == b.id;
339  }

Definition at line 108 of file ReadoutIterationPolicy.h.

References geo::details::ReadoutIterationPolicy::EndROPID().

109  {
110  return EndROPID();
111  }

Definition at line 114 of file ReadoutIterationPolicy.h.

References geo::details::ReadoutIterationPolicy::EndROPID().

116  {
117  return EndROPID(id);
118  }

Definition at line 121 of file ReadoutIterationPolicy.h.

References geo::details::ReadoutIterationPolicy::EndROPID(), getElementPtr(), and validElement().

123  {
124  return EndROPID(id);
125  }

Definition at line 94 of file ReadoutIterationPolicy.h.

References geo::details::ReadoutIterationPolicy::EndTPCsetID().

95  {
96  return EndTPCsetID();
97  }

Definition at line 100 of file ReadoutIterationPolicy.h.

References geo::details::ReadoutIterationPolicy::EndTPCsetID().

102  {
103  return EndTPCsetID(id);
104  }
bool geo::details::validElement ( GeometryCore const *  geom,
CryostatID const &  id 
)
bool geo::details::validElement ( GeometryCore const *  geom,
TPCID const &  id 
)

Definition at line 55 of file GeometryIterationPolicy.cxx.

References getElementPtr().

56  {
57  return geom && getElementPtr(geom, id) != nullptr;
58  }
TPCGeo const * getElementPtr(GeometryCore const *geom, TPCID const &id)
bool geo::details::validElement ( WireReadoutGeom const *  wireReadoutGeom,
PlaneID const &  id 
)

Definition at line 113 of file ReadoutIterationPolicy.cxx.

References getElementPtr().

114  {
115  return wireReadoutGeom && getElementPtr(wireReadoutGeom, id) != nullptr;
116  }
WireGeo const * getElementPtr(WireReadoutGeom const *wireReadoutGeom, WireID const &id)
bool geo::details::validElement ( WireReadoutGeom const *  wireReadoutGeom,
WireID const &  id 
)

Definition at line 118 of file ReadoutIterationPolicy.cxx.

References getElementPtr().

119  {
120  return wireReadoutGeom && getElementPtr(wireReadoutGeom, id) != nullptr;
121  }
WireGeo const * getElementPtr(WireReadoutGeom const *wireReadoutGeom, WireID const &id)
template<typename T >
std::string geo::details::writeToString ( T const &  value)
inline

Write the argument into a string.

Definition at line 627 of file geo_types.h.

References value.

Referenced by geo::OpDetID::first(), geo::TPCID::first(), geo::PlaneID::first(), geo::WireID::first(), geo::CryostatID::markInvalid(), and readout::details::writeToString().

628  {
629  std::ostringstream sstr;
630  sstr << value;
631  return sstr.str();
632  }
double value
Definition: spectrum.C:18

Variable Documentation

constexpr CryostatID geo::details::cryostat_zero {0}
inline

Definition at line 7 of file ZeroIDs.h.

Referenced by geo::GeometryCore::GetElementPtr(), and geo::GeometryCore::HasElement().

template<typename ID >
constexpr bool geo::details::isTopGeoElementID = !has_parent<ID>::value

Whether ID represents an element on top of the hierarchy.

Definition at line 39 of file geo_types.h.

constexpr TPCID geo::details::tpc_zero {cryostat_zero, 0}
inline

Definition at line 8 of file ZeroIDs.h.

Referenced by geo::WireReadoutGeom::HasElement().