15 #ifndef DD4HEP_DDG4_GEANT4CONVERSION_H
16 #define DD4HEP_DDG4_GEANT4CONVERSION_H
27 namespace Simulation {
60 typedef std::map<const std::type_info*, Geant4Conversion*>
Converters;
67 virtual OUTPUT*
operator()(
const ARGS& args)
const = 0;
72 #if defined(DDG4_MAKE_INSTANTIATIONS)
83 namespace Simulation {
85 template <
typename OUTPUT,
typename ARGS>
87 : Geant4ConversionHelper()
91 template <
typename OUTPUT,
typename ARGS>
96 template <
typename OUTPUT,
typename ARGS>
97 typename Geant4Conversion<OUTPUT,ARGS>::Converters&
100 static Converters s_converter;
104 template <
typename OUTPUT,
typename ARGS>
105 const Geant4Conversion<OUTPUT,ARGS>&
108 typename Converters::const_iterator i = conversions().find(&typ);
109 if ( i != conversions().end() ) {
110 return *((*i).second);
112 throw std::runtime_error(
typeName(
typeid(self_t))+
113 ": No appropriate LCIO_OUTPUT conversion "
114 "mechanism known for tag:"+
124 template <
typename OUTPUT,
typename ARGS,
typename TAG>
125 class Geant4DataConversion :
public Geant4Conversion<OUTPUT,ARGS> {
129 typedef OUTPUT output_t;
130 typedef Geant4Conversion<output_t,arg_t> self_t;
131 Geant4DataConversion(
void*) : Geant4Conversion<OUTPUT,ARGS>()
133 this->self_t::conversions().insert(make_pair(&
typeid(TAG),
this));
136 virtual OUTPUT* operator()(
const ARGS& args)
const;
142 #define GEANT4_CNAME(a,b) a ## _instance_ ## b
143 #define DECLARE_GEANT4_DATACONVERTER(output_type,args_type,tag,serial) \
144 DD4hep::Simulation::Geant4DataConversion<output_type,args_type,tag> GEANT4_CNAME(s_g4_data_cnv,serial) (0);
146 #define DECLARE_GEANT4_HITCONVERTER(output_type,args_type,tag) DECLARE_GEANT4_DATACONVERTER(output_type,args_type,tag,__LINE__)
150 #endif // DD4HEP_DDG4_GEANT4CONVERSION_H
Geant4Conversion()
Default constructor.
Geant4ConversionHelper()
Default constructor.
static std::string encoding(Geometry::VolumeManager vm, Geometry::VolumeManager::VolumeID vid)
Access to the data encoding using the volume manager and a specified volume id.
virtual OUTPUT * operator()(const ARGS &args) const =0
std::map< const std::type_info *, Geant4Conversion * > Converters
std::string typeName(const std::type_info &type)
ABI information about type names.
static const Geant4Conversion & converter(const std::type_info &typ)
Handle to the implementation of the readout structure of a subdetector.
Helper class for data conversion.
virtual ~Geant4ConversionHelper()
Default destructor.
virtual ~Geant4Conversion()
Default destructor.
Class to support the retrieval of detector elements and volumes given a valid identifier.
Handle: a templated class like a shared pointer, which allows specialized access to tgeometry objects...
static Converters & conversions()
Geant4Conversion< output_t, arg_t > self_t
DD4hep::VolumeID VolumeID