GGS(GenericGEANT4Simulation)Software  2.6.0
 All Data Structures Namespaces Files Functions Variables Typedefs Macros
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() { \
16  return new plClass(); \
17  } \
18  extern "C" void PhysicsListDestroyer(plClass* p) { \
19  delete p; \
20  }
21 
24 
26 #define RegisterSD(sdClassName) \
27  G4VSensitiveDetector* sdClassName##Builder(G4String name){ \
28  return new sdClassName(name); \
29  }\
30  void sdClassName##Destroyer(sdClassName *p){ \
31  delete p; \
32  }\
33  class sdClassName##Proxy { \
34  public: \
35  sdClassName##Proxy(){ \
36  GGSScoringManager::GetInstance().GetMessenger()->CreateAddCommand(#sdClassName); \
37  GGSScoringManager::GetInstance().RegisterSDClass(#sdClassName, sdClassName##Builder); \
38  } \
39  };\
40  sdClassName##Proxy proxyFor##sdClassName
41 
43 #include "G4UImessenger.hh"
44 #include "G4UIcommand.hh"
46 
47 #define RegisterUA(uaClassName) \
48  class uaClassName##Builder: public G4UImessenger { \
49  public: \
50  uaClassName##Builder(){ \
51  _buildCmd = new G4UIcommand("/GGS/userActions/add" #uaClassName, this); \
52  _buildCmd->SetGuidance("Adds the uaClassName action"); \
53  _buildCmd->AvailableForStates(G4State_PreInit, G4State_Idle); \
54  } \
55  ~uaClassName##Builder(){ \
56  delete _buildCmd; \
57  } \
58  void SetNewValue(G4UIcommand* command, G4String){ \
59  if (command == _buildCmd) { \
60  GGSUserActionsManager::GetInstance()->AddAction(new uaClassName()); \
61  } \
62  } \
63  private: \
64  G4UIcommand* _buildCmd; \
65  }; \
66  uaClassName##Builder proxyFor##uaClassName##Builder
67 
68 
70 #include "montecarlo/generators/manager/GGSGeneratorActionsManager.h"
71 #define RegisterGA(gaClassName, gaName) \
72  G4VUserPrimaryGeneratorAction* gaClassName##Builder(){ \
73  return new gaClassName(); \
74  }\
75  class gaClassName##Proxy { \
76  public: \
77  gaClassName##Proxy(){ \
78  GGSGeneratorActionsManager::GetInstance().RegisterGABuilder(#gaName, gaClassName##Builder); \
79  } \
80  }; \
81  gaClassName##Proxy proxyFor##gaClassName##Builder
82 
83 #endif /* GGSMCPLUGINMACROS_H_ */