4 // See the class description in the header file.
6 #include "TG4PhysicsConstructorSpecialCuts.h"
7 #include "TG4G3PhysicsManager.h"
8 #include "TG4SpecialCuts.h"
10 #include <G4ParticleDefinition.hh>
11 #include <G4ProcessManager.hh>
12 #include <G4VProcess.hh>
15 //_____________________________________________________________________________
16 TG4PhysicsConstructorSpecialCuts::TG4PhysicsConstructorSpecialCuts(
18 : G4VPhysicsConstructor(name)
24 //_____________________________________________________________________________
25 TG4PhysicsConstructorSpecialCuts::~TG4PhysicsConstructorSpecialCuts() {
31 //_____________________________________________________________________________
32 void TG4PhysicsConstructorSpecialCuts::ConstructParticle()
34 // The particles are constructed in the
35 // TG4ModularPhysicsList.
39 //_____________________________________________________________________________
40 void TG4PhysicsConstructorSpecialCuts::ConstructProcess()
42 // Adds TG4SpecialCuts "process" that activates
43 // the kinetic energy cuts defined in
44 // the vector of cuts (PhysicsManager::fCutVector) or in TG4Limits.
47 TG4G3PhysicsManager* g3PhysicsManager
48 = TG4G3PhysicsManager::Instance();
50 if (g3PhysicsManager->IsSpecialCuts())
52 TG4G3CutVector* cutVector
53 = g3PhysicsManager->GetCutVector();
54 TG4boolVector* isCutVector
55 = g3PhysicsManager->GetIsCutVector();
57 theParticleIterator->reset();
58 while ((*theParticleIterator)())
60 G4ParticleDefinition* particle = theParticleIterator->value();
61 TG4G3ParticleWSP particleWSP
62 = g3PhysicsManager->GetG3ParticleWSP(particle);
64 g3PhysicsManager->GetG3ParticleWSPName(particleWSP, name);
66 // uncomment this to see all particles "WSP"
67 //G4cout << "Iterating particle: "
68 // << particle->GetParticleName() << " " << particleWSP << " "
71 // special process is created in case
72 // cutVector (vector of kinetic energy cuts) is set
73 // or the special cut is set by TG4Limits
74 if ((particleWSP !=kNofParticlesWSP) &&
75 ((*isCutVector)[particleWSP])) {
76 // check if process already exists
77 G4String processName = "specialCutFor" + name;
78 G4VProcess* process = g3PhysicsManager->FindProcess(processName);
80 process = new TG4SpecialCuts(particleWSP, cutVector, processName);
82 //particle->GetProcessManager()->AddProcess(process, 0, -1, 1);
83 particle->GetProcessManager()->AddDiscreteProcess(process);
88 G4cout << "TG4PhysicsList::ConstructSpecialCuts: " << G4endl;
90 G4cout << " Global kinetic energy cuts are set." << G4endl;
91 G4cout << " Special cuts process is defined for: " << G4endl
93 for (G4int i=0; i<kAny; i++) {
95 g3PhysicsManager->GetG3ParticleWSPName(i, name);
96 if ((*isCutVector)[i]) G4cout << name << " ";