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

Last change on this file since 1027 was 807, checked in by garnier, 16 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.