4 // See the class description in the header file.
6 #include "TG4PhysicsConstructorSpecialControls.h"
7 #include "TG4SpecialControls.h"
8 #include "TG4G3PhysicsManager.h"
9 #include "TG4G3ControlVector.h"
11 #include <G4ParticleDefinition.hh>
12 #include <G4ProcessManager.hh>
13 #include <G4VProcess.hh>
15 //_____________________________________________________________________________
16 TG4PhysicsConstructorSpecialControls::TG4PhysicsConstructorSpecialControls(
18 : G4VPhysicsConstructor(name)
24 //_____________________________________________________________________________
25 TG4PhysicsConstructorSpecialControls::~TG4PhysicsConstructorSpecialControls() {
31 //_____________________________________________________________________________
32 void TG4PhysicsConstructorSpecialControls::ConstructParticle()
34 // The particles are constructed in the
35 // TG4ModularPhysicsList.
39 //_____________________________________________________________________________
40 void TG4PhysicsConstructorSpecialControls::ConstructProcess()
42 // Adds TG4SpecialControls "process" that activates
43 // the control process controls defined in TG4Limits.
46 TG4G3PhysicsManager* g3PhysicsManager
47 = TG4G3PhysicsManager::Instance();
49 if (g3PhysicsManager->IsSpecialControls())
51 G4cout << "IsSpecialControls started" << G4endl;
52 TG4boolVector* isControlVector
53 = g3PhysicsManager->GetIsControlVector();
55 theParticleIterator->reset();
56 while ((*theParticleIterator)())
58 G4ParticleDefinition* particle = theParticleIterator->value();
59 TG4G3ParticleWSP particleWSP
60 = g3PhysicsManager->GetG3ParticleWSP(particle);
62 //GetG3ParticleWSPName(particleWSP, name);
64 // special process is set in case
65 // the special control is set by TG4Limits
66 if ((particleWSP !=kNofParticlesWSP) &&
67 ((*isControlVector)[particleWSP])) {
68 // check if process already exists
69 G4String processName = "specialControl";
70 G4VProcess* process = g3PhysicsManager->FindProcess(processName);
72 process = new TG4SpecialControls(processName);
74 //particle->GetProcessManager()->AddProcess(process, 0, -1, 1);
75 particle->GetProcessManager()->AddDiscreteProcess(process);
80 G4cout << "TG4PhysicsConstructorSpecialControls::ConstructProcess: " << G4endl;
81 G4cout << " Special controls process is defined for: " << G4endl
83 for (G4int i=0; i<kNofParticlesWSP; i++) {
85 g3PhysicsManager->GetG3ParticleWSPName(i, name);
86 if ((*isControlVector)[i]) G4cout << name << " ";