GGS(GenericGEANT4Simulation)Software
2.99.0
Main Page
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Macros
include
montecarlo
pluginmanagers
GGSMCPluginMacros.h
Go to the documentation of this file.
1
/*
2
* GGSMCPluginMacros.h
3
*
4
* Created on: 07 Aug 2013
5
* Author: Nicola Mori
6
*/
7
10
#ifndef GGSMCPLUGINMACROS_H_
11
#define GGSMCPLUGINMACROS_H_
12
14
#define PhysicsListPlugin(plClass) \
15
extern "C" G4VUserPhysicsList *PhysicsListBuilder() { return new plClass(); } \
16
extern "C" void PhysicsListDestroyer(plClass *p) { delete p; }
17
19
#define RegisterSD(sdClassName) \
20
G4VSensitiveDetector *sdClassName##Builder(std::string name) { return new sdClassName(name); } \
21
void sdClassName##Destroyer(sdClassName *p) { delete p; } \
22
class sdClassName##Proxy { \
23
public: \
24
sdClassName##Proxy() { \
25
GGSFactory<G4VSensitiveDetector, std::string>::GetInstance().RegisterBuilder(#sdClassName, \
26
sdClassName##Builder); \
27
} \
28
}; \
29
sdClassName##Proxy proxyFor##sdClassName
30
32
#include "
montecarlo/useractions/GGSUserAction.h
"
33
#include "
utils/GGSFactory.h
"
34
#define RegisterUA(uaClassName) \
35
template <typename Derived, typename Enable = void> struct BaseOf {}; \
36
template <typename Derived> \
37
struct BaseOf<Derived, typename std::enable_if<std::is_convertible<Derived *, GGSUserAction *>::value>::type> { \
38
using type = GGSUserAction; \
39
}; \
40
template <class Derived> \
41
struct BaseOf<Derived, \
42
typename std::enable_if<!std::is_convertible<Derived *, GGSUserAction *>::value && \
43
std::is_convertible<Derived *, G4UserSteppingAction *>::value>::type> { \
44
using type = G4UserSteppingAction; \
45
}; \
46
template <class Derived> \
47
struct BaseOf<Derived, \
48
typename std::enable_if<!std::is_convertible<Derived *, GGSUserAction *>::value && \
49
std::is_convertible<Derived *, G4UserTrackingAction *>::value>::type> { \
50
using type = G4UserTrackingAction; \
51
}; \
52
template <class Derived> \
53
struct BaseOf<Derived, typename std::enable_if<!std::is_convertible<Derived *, GGSUserAction *>::value && \
54
std::is_convertible<Derived *, G4UserEventAction *>::value>::type> { \
55
using type = G4UserEventAction; \
56
}; \
57
template <class Derived> \
58
struct BaseOf<Derived, typename std::enable_if<!std::is_convertible<Derived *, GGSUserAction *>::value && \
59
std::is_convertible<Derived *, G4UserRunAction *>::value>::type> { \
60
using type = G4UserRunAction; \
61
}; \
62
template <class Derived> \
63
struct BaseOf<Derived, \
64
typename std::enable_if<!std::is_convertible<Derived *, GGSUserAction *>::value && \
65
std::is_convertible<Derived *, G4UserStackingAction *>::value>::type> { \
66
using type = G4UserStackingAction; \
67
}; \
68
template <typename Derived> typename BaseOf<Derived>::type *uaClassName##Builder() { return new Derived; } \
69
class uaClassName##Proxy { \
70
public: \
71
uaClassName##Proxy() { \
72
GGSFactory<typename std::remove_pointer<decltype(uaClassName##Builder<uaClassName>())>::type>::GetInstance() \
73
.RegisterBuilder(#uaClassName, uaClassName##Builder<uaClassName>); \
74
} \
75
}; \
76
uaClassName##Proxy proxyFor##uaClassName##Builder
77
79
#include "G4VUserPrimaryGeneratorAction.hh"
80
#define RegisterGA(gaClassName, gaName) \
81
G4VUserPrimaryGeneratorAction *gaClassName##Builder() { return new gaClassName; } \
82
class gaClassName##Proxy { \
83
public: \
84
gaClassName##Proxy() { \
85
GGSFactory<G4VUserPrimaryGeneratorAction>::GetInstance().RegisterBuilder(#gaName, gaClassName##Builder); \
86
} \
87
}; \
88
gaClassName##Proxy proxyFor##gaClassName##Builder
89
90
#endif
/* GGSMCPLUGINMACROS_H_ */
GGSFactory.h
GGSUserAction.h
Generated on Mon May 13 2024 08:14:00 for GGS(GenericGEANT4Simulation)Software by
1.8.5