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 : G4VPhysicsConstructor(name)
28 //_____________________________________________________________________________
29 TG4PhysicsConstructorSpecialControls::~TG4PhysicsConstructorSpecialControls() {
35 //_____________________________________________________________________________
36 void TG4PhysicsConstructorSpecialControls::ConstructParticle()
38 // The particles are constructed in the
39 // TG4ModularPhysicsList.
43 //_____________________________________________________________________________
44 void TG4PhysicsConstructorSpecialControls::ConstructProcess()
46 // Adds TG4SpecialControls "process" that activates
47 // the control process controls defined in TG4Limits.
50 TG4G3PhysicsManager* g3PhysicsManager
51 = TG4G3PhysicsManager::Instance();
53 if (g3PhysicsManager->IsSpecialControls()) {
54 TG4boolVector* isControlVector
55 = g3PhysicsManager->GetIsControlVector();
57 theParticleIterator->reset();
58 while ((*theParticleIterator)())
60 G4ParticleDefinition* particle = theParticleIterator->value();
61 TG4G3ParticleWSP particleWSP
62 = g3PhysicsManager->GetG3ParticleWSP(particle);
64 //GetG3ParticleWSPName(particleWSP, name);
66 // special process is set in case
67 // the special control is set by TG4Limits
68 if ((particleWSP !=kNofParticlesWSP) &&
69 ((*isControlVector)[particleWSP])) {
70 // check if process already exists
71 G4String processName = "specialControl";
72 G4VProcess* process = g3PhysicsManager->FindProcess(processName);
74 process = new TG4SpecialControls(processName);
76 //particle->GetProcessManager()->AddProcess(process, 0, -1, 1);
77 particle->GetProcessManager()->AddDiscreteProcess(process);
82 G4cout << "### Special Controls constructed. " << G4endl;
83 G4cout << " Special controls process is defined for: " << G4endl
85 for (G4int i=0; i<kNofParticlesWSP; i++) {
86 if ((*isControlVector)[i])
87 G4cout << g3PhysicsManager->GetG3ParticleWSPName(i) << " ";