4 // Author: I. Hrivnacova
6 // Class TG4PhysicsConstructorSpecialControls
7 // ------------------------------------------
8 // See the class description in the header file.
10 #include "TG4PhysicsConstructorSpecialControls.h"
11 #include "TG4SpecialControls.h"
12 #include "TG4G3PhysicsManager.h"
13 #include "TG4G3ControlVector.h"
15 #include <G4ParticleDefinition.hh>
16 #include <G4ProcessManager.hh>
17 #include <G4VProcess.hh>
19 //_____________________________________________________________________________
20 TG4PhysicsConstructorSpecialControls::TG4PhysicsConstructorSpecialControls(
22 : TG4VPhysicsConstructor(name) {
26 //_____________________________________________________________________________
27 TG4PhysicsConstructorSpecialControls::TG4PhysicsConstructorSpecialControls(
30 : TG4VPhysicsConstructor(name, verboseLevel) {
34 //_____________________________________________________________________________
35 TG4PhysicsConstructorSpecialControls::~TG4PhysicsConstructorSpecialControls() {
41 //_____________________________________________________________________________
42 void TG4PhysicsConstructorSpecialControls::ConstructParticle()
44 // The particles are constructed in the
45 // TG4ModularPhysicsList.
49 //_____________________________________________________________________________
50 void TG4PhysicsConstructorSpecialControls::ConstructProcess()
52 // Adds TG4SpecialControls "process" that activates
53 // the control process controls defined in TG4Limits.
56 TG4G3PhysicsManager* g3PhysicsManager
57 = TG4G3PhysicsManager::Instance();
59 if (g3PhysicsManager->IsSpecialControls()) {
60 TG4boolVector* isControlVector
61 = g3PhysicsManager->GetIsControlVector();
63 theParticleIterator->reset();
64 while ((*theParticleIterator)())
66 G4ParticleDefinition* particle = theParticleIterator->value();
67 TG4G3ParticleWSP particleWSP
68 = g3PhysicsManager->GetG3ParticleWSP(particle);
70 //GetG3ParticleWSPName(particleWSP, name);
72 // special process is set in case
73 // the special control is set by TG4Limits
74 if ((particleWSP !=kNofParticlesWSP) &&
75 ((*isControlVector)[particleWSP])) {
76 // check if process already exists
77 G4String processName = "specialControl";
78 G4VProcess* process = g3PhysicsManager->FindProcess(processName);
80 process = new TG4SpecialControls(processName);
82 //particle->GetProcessManager()->AddProcess(process, 0, -1, 1);
83 particle->GetProcessManager()->AddDiscreteProcess(process);
87 if (VerboseLevel() > 0) {
88 G4cout << "### Special Controls constructed. " << G4endl;
89 G4cout << " Special controls process is defined for: " << G4endl
91 for (G4int i=0; i<kNofParticlesWSP; i++) {
92 if ((*isControlVector)[i])
93 G4cout << g3PhysicsManager->GetG3ParticleWSPName(i) << " ";