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

Last change on this file since 1323 was 1230, checked in by garnier, 16 years ago

update to geant4.9.3

File size: 7.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 fClearPhysicsCMD = new G4UIcmdWithoutParameter("/exp/phys/clearPhysics",this);
91 fClearPhysicsCMD->SetGuidance("Clear the physics list");
92 fClearPhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
93
94 fRemovePhysicsCMD = new G4UIcmdWithAString("/exp/phys/removePhysics",this);
95 fRemovePhysicsCMD->SetGuidance("Remove a physics process from Physics List");
96 fRemovePhysicsCMD->SetParameterName("PList",false);
97 fRemovePhysicsCMD->AvailableForStates(G4State_PreInit,G4State_Idle);
98*/
99 fDecayDirectory = new G4UIdirectory("/decay/");
100 fDecayDirectory->SetGuidance("Decay chain control commands.");
101
102 fPienuCMD = new G4UIcmdWithoutParameter("/decay/pienu", this);
103 fPienuCMD->SetGuidance("Sets the pi+ to decay into e+, nu");
104
105 fPimunuCMD = new G4UIcmdWithoutParameter("/decay/pimunu", this);
106 fPimunuCMD->SetGuidance("Sets the pi+ to decay into mu+, nu");
107
108}
109
110F04PhysicsListMessenger::~F04PhysicsListMessenger()
111{
112 delete fGammaCutCMD;
113 delete fElectCutCMD;
114 delete fPosCutCMD;
115 delete fAllCutCMD;
116/*
117 delete fClearPhysicsCMD;
118 delete fRemovePhysicsCMD;
119*/
120 delete fPienuCMD;
121 delete fPimunuCMD;
122}
123
124void F04PhysicsListMessenger::SetNewValue(G4UIcommand* command,
125 G4String newValue)
126{
127
128 if (command == fPienuCMD) {
129 particleTable = G4ParticleTable::GetParticleTable();
130 particleDef = particleTable->FindParticle("pi+");
131 mode = new G4PhaseSpaceDecayChannel("pi+",0.999983,2,"e+","nu_e");
132 table=new G4DecayTable();
133 table->Insert(mode);
134 mode = new G4PionRadiativeDecayChannel("pi+",0.000017);
135 table->Insert(mode);
136 particleDef->SetDecayTable(table);
137 }
138
139 if (command == fPimunuCMD) {
140 particleTable = G4ParticleTable::GetParticleTable();
141 particleDef = particleTable->FindParticle("pi+");
142 mode = new G4PhaseSpaceDecayChannel("pi+",1.000,2,"mu+","nu_mu");
143 table=new G4DecayTable();
144 table->Insert(mode);
145 particleDef->SetDecayTable(table);
146 }
147
148 if (command == fGammaCutCMD) {
149 fPhysicsList->SetCutForGamma(fGammaCutCMD
150 ->GetNewDoubleValue(newValue));
151 }
152 else if (command == fElectCutCMD) {
153 fPhysicsList->SetCutForElectron(fElectCutCMD
154 ->GetNewDoubleValue(newValue));
155 }
156 else if (command == fPosCutCMD) {
157 fPhysicsList->SetCutForPositron(fPosCutCMD
158 ->GetNewDoubleValue(newValue));
159 }
160 else if (command == fAllCutCMD) {
161 G4double cut = fAllCutCMD->GetNewDoubleValue(newValue);
162 fPhysicsList->SetCutForGamma(cut);
163 fPhysicsList->SetCutForElectron(cut);
164 fPhysicsList->SetCutForPositron(cut);
165 }
166 else if (command == fStepMaxCMD) {
167 fPhysicsList->SetStepMax(fStepMaxCMD
168 ->GetNewDoubleValue(newValue));
169 }
170/* else if (command == fClearPhysicsCMD) {
171 fPhysicsList->ClearPhysics();
172 }
173 else if (command == fRemovePhysicsCMD) {
174 G4String name = newValue;
175 fPhysicsList->RemoveFromPhysicsList(name);
176 }
177*/
178}
Note: See TracBrowser for help on using the repository browser.