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

Last change on this file since 1309 was 1230, checked in by garnier, 15 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.