GGS(GenericGEANT4Simulation)Software  2.7.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() { return new plClass(); } \
16  extern "C" void PhysicsListDestroyer(plClass *p) { delete p; }
17 
20 
22 #define RegisterSD(sdClassName) \
23  G4VSensitiveDetector *sdClassName##Builder(G4String name) { return new sdClassName(name); } \
24  void sdClassName##Destroyer(sdClassName *p) { delete p; } \
25  class sdClassName##Proxy { \
26  public: \
27  sdClassName##Proxy() { \
28  GGSScoringManager::GetInstance().GetMessenger()->CreateAddCommand(#sdClassName); \
29  GGSScoringManager::GetInstance().RegisterSDClass(#sdClassName, sdClassName##Builder); \
30  } \
31  }; \
32  sdClassName##Proxy proxyFor##sdClassName
33 
35 #include "G4UIcommand.hh"
36 #include "G4UImessenger.hh"
38 
39 #define RegisterUA(uaClassName) \
40  class uaClassName##Builder : public G4UImessenger { \
41  public: \
42  uaClassName##Builder() { \
43  _buildCmd = new G4UIcommand("/GGS/userActions/add" #uaClassName, this); \
44  _buildCmd->SetGuidance("Adds the uaClassName action"); \
45  _buildCmd->AvailableForStates(G4State_PreInit, G4State_Idle); \
46  } \
47  ~uaClassName##Builder() { delete _buildCmd; } \
48  void SetNewValue(G4UIcommand *command, G4String) { \
49  if (command == _buildCmd) { \
50  GGSUserActionsManager::GetInstance()->AddAction(new uaClassName()); \
51  } \
52  } \
53  \
54  private: \
55  G4UIcommand *_buildCmd; \
56  }; \
57  uaClassName##Builder proxyFor##uaClassName##Builder
58 
60 #include "montecarlo/generators/manager/GGSGeneratorActionsManager.h"
61 #define RegisterGA(gaClassName, gaName) \
62  G4VUserPrimaryGeneratorAction *gaClassName##Builder() { return new gaClassName(); } \
63  class gaClassName##Proxy { \
64  public: \
65  gaClassName##Proxy() { \
66  GGSGeneratorActionsManager::GetInstance().RegisterGABuilder(#gaName, gaClassName##Builder); \
67  } \
68  }; \
69  gaClassName##Proxy proxyFor##gaClassName##Builder
70 
71 #endif /* GGSMCPLUGINMACROS_H_ */