source: trunk/examples/extended/field/field04/src/F04PhysicsListMessenger.cc@ 1036

Last change on this file since 1036 was 807, checked in by garnier, 17 years ago

update

File size: 9.1 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27//
28
29#include "globals.hh"
30
31#include "F04PhysicsListMessenger.hh"
32#include "F04PhysicsList.hh"
33
34#include <G4UIdirectory.hh>
35#include <G4UIcmdWithAString.hh>
36#include <G4UIcmdWithoutParameter.hh>
37#include <G4UIcmdWithADoubleAndUnit.hh>
38
39#include "G4PhaseSpaceDecayChannel.hh"
40#include "G4PionRadiativeDecayChannel.hh"
41
42F04PhysicsListMessenger::F04PhysicsListMessenger(F04PhysicsList* pPhys)
43 : fPhysicsList(pPhys)
44{
45 fDirectory = new G4UIdirectory("/exp/phys/");
46 fDirectory->SetGuidance("Control the physics lists");
47
48 fGammaCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/gammaCut",this);
49 fGammaCutCMD->SetGuidance("Set gamma cut");
50 fGammaCutCMD->SetParameterName("Gcut",false);
51 fGammaCutCMD->SetUnitCategory("Length");
52 fGammaCutCMD->SetRange("Gcut>0.0");
53 fGammaCutCMD->SetDefaultUnit("mm");
54 fGammaCutCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
55
56 fElectCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/electronCut",
57 this);
58 fElectCutCMD->SetGuidance("Set electron cut");
59 fElectCutCMD->SetParameterName("Ecut",false);
60 fElectCutCMD->SetUnitCategory("Length");
61 fElectCutCMD->SetRange("Ecut>0.0");
62 fElectCutCMD->SetDefaultUnit("mm");
63 fElectCutCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
64
65 fPosCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/positronCut",
66 this);
67 fPosCutCMD->SetGuidance("Set positron cut");
68 fPosCutCMD->SetParameterName("Pcut",false);
69 fPosCutCMD->SetUnitCategory("Length");
70 fPosCutCMD->SetRange("Pcut>0.0");
71 fPosCutCMD->SetDefaultUnit("mm");
72 fPosCutCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
73
74 fAllCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/allCuts",this);
75 fAllCutCMD->SetGuidance("Set cut for all");
76 fAllCutCMD->SetParameterName("cut",false);
77 fAllCutCMD->SetUnitCategory("Length");
78 fAllCutCMD->SetRange("cut>0.0");
79 fAllCutCMD->SetDefaultUnit("mm");
80 fAllCutCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
81
82 fStepMaxCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/stepMax",this);
83 fStepMaxCMD->SetGuidance("Set max. step length in the detector");
84 fStepMaxCMD->SetParameterName("mxStep",false);
85 fStepMaxCMD->SetUnitCategory("Length");
86 fStepMaxCMD->SetRange("mxStep>0.0");
87 fStepMaxCMD->SetDefaultUnit("mm");
88 fStepMaxCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
89
90 fAddPhysicsCMD = new G4UIcmdWithAString("/exp/phys/addPhysics",this);
91 fAddPhysicsCMD->SetGuidance("Add to modular physics list");
92 fAddPhysicsCMD->SetParameterName("PList",false);
93 fAddPhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
94
95 fClearEMPhysicsCMD = new G4UIcmdWithoutParameter("/exp/phys/clearEMPhysics",this);
96 fClearEMPhysicsCMD->SetGuidance("Clear the EM physics list");
97 fClearEMPhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
98
99 fClearHadronPhysicsCMD = new G4UIcmdWithoutParameter("/exp/phys/clearHadronPhysics",this);
100 fClearHadronPhysicsCMD->SetGuidance("Clear the Hadron physics list");
101 fClearHadronPhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
102
103 fRemoveEMPhysicsCMD = new G4UIcmdWithAString("/exp/phys/removeEMPhysics",this);
104 fRemoveEMPhysicsCMD->SetGuidance("Remove a physics process from EM Physics List");
105 fRemoveEMPhysicsCMD->SetParameterName("PList",false);
106 fRemoveEMPhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
107
108 fRemoveHadronPhysicsCMD = new G4UIcmdWithAString("/exp/phys/removeHadronPhysics",this);
109 fRemoveHadronPhysicsCMD->SetGuidance("Remove a physics process from Hadron Physics List");
110 fRemoveHadronPhysicsCMD->SetParameterName("PList",false);
111 fRemoveHadronPhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
112
113 fListCMD = new G4UIcmdWithoutParameter("/exp/phys/list",this);
114 fListCMD->SetGuidance("Available Physics Lists");
115 fListCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
116
117 fDecayDirectory = new G4UIdirectory("/decay/");
118 fDecayDirectory->SetGuidance("Decay chain control commands.");
119
120 fPienuCMD = new G4UIcmdWithoutParameter("/decay/pienu", this);
121 fPienuCMD->SetGuidance("Sets the pi+ to decay into e+, nu");
122
123 fPimunuCMD = new G4UIcmdWithoutParameter("/decay/pimunu", this);
124 fPimunuCMD->SetGuidance("Sets the pi+ to decay into mu+, nu");
125
126}
127
128F04PhysicsListMessenger::~F04PhysicsListMessenger()
129{
130 delete fGammaCutCMD;
131 delete fElectCutCMD;
132 delete fPosCutCMD;
133 delete fAllCutCMD;
134
135 delete fAddPhysicsCMD;
136 delete fClearEMPhysicsCMD;
137 delete fClearHadronPhysicsCMD;
138 delete fRemoveEMPhysicsCMD;
139 delete fRemoveHadronPhysicsCMD;
140
141 delete fListCMD;
142
143 delete fPienuCMD;
144 delete fPimunuCMD;
145}
146
147void F04PhysicsListMessenger::SetNewValue(G4UIcommand* command,
148 G4String newValue)
149{
150
151 if (command == fPienuCMD) {
152 particleTable = G4ParticleTable::GetParticleTable();
153 particleDef = particleTable->FindParticle("pi+");
154 mode = new G4PhaseSpaceDecayChannel("pi+",0.999983,2,"e+","nu_e");
155 table=new G4DecayTable();
156 table->Insert(mode);
157 mode = new G4PionRadiativeDecayChannel("pi+",0.000017);
158 table->Insert(mode);
159 particleDef->SetDecayTable(table);
160 }
161
162 if (command == fPimunuCMD) {
163 particleTable = G4ParticleTable::GetParticleTable();
164 particleDef = particleTable->FindParticle("pi+");
165 mode = new G4PhaseSpaceDecayChannel("pi+",1.000,2,"mu+","nu_mu");
166 table=new G4DecayTable();
167 table->Insert(mode);
168 particleDef->SetDecayTable(table);
169 }
170
171 if (command == fGammaCutCMD) {
172 fPhysicsList->SetCutForGamma(fGammaCutCMD
173 ->GetNewDoubleValue(newValue));
174 }
175 else if (command == fElectCutCMD) {
176 fPhysicsList->SetCutForElectron(fElectCutCMD
177 ->GetNewDoubleValue(newValue));
178 }
179 else if (command == fPosCutCMD) {
180 fPhysicsList->SetCutForPositron(fPosCutCMD
181 ->GetNewDoubleValue(newValue));
182 }
183 else if (command == fAllCutCMD) {
184 G4double cut = fAllCutCMD->GetNewDoubleValue(newValue);
185 fPhysicsList->SetCutForGamma(cut);
186 fPhysicsList->SetCutForElectron(cut);
187 fPhysicsList->SetCutForPositron(cut);
188 }
189 else if (command == fStepMaxCMD) {
190 fPhysicsList->SetStepMax(fStepMaxCMD
191 ->GetNewDoubleValue(newValue));
192 }
193 else if (command == fAddPhysicsCMD) {
194 G4String name = newValue;
195 if (name == "PHYSLIST") {
196 char* path = getenv(name);
197 if (path) name = G4String(path);
198 else {
199 G4cout << "### F04PhysicsListMessenger WARNING: "
200 << " environment variable PHYSLIST is not defined"
201 << G4endl;
202 return;
203 }
204 }
205 fPhysicsList->AddPhysicsList(name);
206 }
207 else if (command == fClearEMPhysicsCMD) {
208 fPhysicsList->ClearEMPhysics();
209 }
210 else if (command == fClearHadronPhysicsCMD) {
211 fPhysicsList->ClearHadronPhysics();
212 }
213 else if (command == fRemoveEMPhysicsCMD) {
214 G4String name = newValue;
215 fPhysicsList->RemoveFromEMPhysicsList(name);
216 }
217 else if (command == fRemoveHadronPhysicsCMD) {
218 G4String name = newValue;
219 fPhysicsList->RemoveFromHadronPhysicsList(name);
220 }
221 else if (command == fListCMD) {
222 fPhysicsList->List();
223 }
224}
Note: See TracBrowser for help on using the repository browser.