Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 /// \file field/field04/src/F04PhysicsListMess << 28 /// \brief Implementation of the F04PhysicsLis << 29 // 27 // 30 28 31 #include "F04PhysicsListMessenger.hh" << 29 #include "globals.hh" 32 30 >> 31 #include "F04PhysicsListMessenger.hh" 33 #include "F04PhysicsList.hh" 32 #include "F04PhysicsList.hh" 34 33 35 #include "G4DecayTable.hh" << 34 #include <G4UIdirectory.hh> 36 #include "G4ParticleDefinition.hh" << 37 #include "G4ParticleTable.hh" << 38 #include "G4PhaseSpaceDecayChannel.hh" << 39 #include "G4PionRadiativeDecayChannel.hh" << 40 #include "G4VDecayChannel.hh" << 41 #include "globals.hh" << 42 << 43 #include <G4UIcmdWithADoubleAndUnit.hh> << 44 #include <G4UIcmdWithAString.hh> 35 #include <G4UIcmdWithAString.hh> 45 #include <G4UIcmdWithoutParameter.hh> 36 #include <G4UIcmdWithoutParameter.hh> 46 #include <G4UIdirectory.hh> << 37 #include <G4UIcmdWithADoubleAndUnit.hh> 47 38 48 //....oooOO0OOooo........oooOO0OOooo........oo << 39 #include "G4PhaseSpaceDecayChannel.hh" >> 40 #include "G4PionRadiativeDecayChannel.hh" 49 41 50 F04PhysicsListMessenger::F04PhysicsListMesseng << 42 F04PhysicsListMessenger::F04PhysicsListMessenger(F04PhysicsList* pPhys) >> 43 : fPhysicsList(pPhys) 51 { 44 { 52 fDirectory = new G4UIdirectory("/exp/phys/") << 45 fDirectory = new G4UIdirectory("/exp/phys/"); 53 fDirectory->SetGuidance("Control the physics << 46 fDirectory->SetGuidance("Control the physics lists"); 54 47 55 fStepMaxCMD = new G4UIcmdWithADoubleAndUnit( << 48 fGammaCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/gammaCut",this); 56 fStepMaxCMD->SetGuidance("Set max. step leng << 49 fGammaCutCMD->SetGuidance("Set gamma cut"); 57 fStepMaxCMD->SetParameterName("mxStep", fals << 50 fGammaCutCMD->SetParameterName("Gcut",false); 58 fStepMaxCMD->SetUnitCategory("Length"); << 51 fGammaCutCMD->SetUnitCategory("Length"); 59 fStepMaxCMD->SetRange("mxStep>0.0"); << 52 fGammaCutCMD->SetRange("Gcut>0.0"); 60 fStepMaxCMD->SetDefaultUnit("mm"); << 53 fGammaCutCMD->SetDefaultUnit("mm"); 61 fStepMaxCMD->AvailableForStates(G4State_PreI << 54 fGammaCutCMD->AvailableForStates(G4State_PreInit,G4State_Idle); 62 /* << 55 63 fClearPhysicsCMD = new G4UIcmdWithoutPar << 56 fElectCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/electronCut", 64 << 57 this); 65 fClearPhysicsCMD->SetGuidance("Clear the << 58 fElectCutCMD->SetGuidance("Set electron cut"); 66 fClearPhysicsCMD->AvailableForStates(G4S << 59 fElectCutCMD->SetParameterName("Ecut",false); 67 << 60 fElectCutCMD->SetUnitCategory("Length"); 68 fRemovePhysicsCMD = new G4UIcmdWithAStri << 61 fElectCutCMD->SetRange("Ecut>0.0"); 69 fRemovePhysicsCMD-> << 62 fElectCutCMD->SetDefaultUnit("mm"); 70 SetGuidance("Remove a p << 63 fElectCutCMD->AvailableForStates(G4State_PreInit,G4State_Idle); 71 fRemovePhysicsCMD->SetParameterName("PLi << 64 72 fRemovePhysicsCMD->AvailableForStates(G4 << 65 fPosCutCMD = new G4UIcmdWithADoubleAndUnit("/exp/phys/positronCut", 73 */ << 66 this); 74 fDecayDirectory = new G4UIdirectory("/decay/ << 67 fPosCutCMD->SetGuidance("Set positron cut"); 75 fDecayDirectory->SetGuidance("Decay chain co << 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."); 76 101 77 fPienuCMD = new G4UIcmdWithoutParameter("/de << 102 fPienuCMD = new G4UIcmdWithoutParameter("/decay/pienu", this); 78 fPienuCMD->SetGuidance("Sets the pi+ to deca << 103 fPienuCMD->SetGuidance("Sets the pi+ to decay into e+, nu"); 79 104 80 fPimunuCMD = new G4UIcmdWithoutParameter("/d << 105 fPimunuCMD = new G4UIcmdWithoutParameter("/decay/pimunu", this); 81 fPimunuCMD->SetGuidance("Sets the pi+ to dec << 106 fPimunuCMD->SetGuidance("Sets the pi+ to decay into mu+, nu"); 82 } << 83 107 84 //....oooOO0OOooo........oooOO0OOooo........oo << 108 } 85 109 86 F04PhysicsListMessenger::~F04PhysicsListMessen 110 F04PhysicsListMessenger::~F04PhysicsListMessenger() 87 { 111 { 88 /* << 112 delete fGammaCutCMD; 89 delete fClearPhysicsCMD; << 113 delete fElectCutCMD; 90 delete fRemovePhysicsCMD; << 114 delete fPosCutCMD; 91 */ << 115 delete fAllCutCMD; 92 delete fPienuCMD; << 116 /* 93 delete fPimunuCMD; << 117 delete fClearPhysicsCMD; >> 118 delete fRemovePhysicsCMD; >> 119 */ >> 120 delete fPienuCMD; >> 121 delete fPimunuCMD; 94 } 122 } 95 123 96 //....oooOO0OOooo........oooOO0OOooo........oo << 124 void F04PhysicsListMessenger::SetNewValue(G4UIcommand* command, 97 << 125 G4String newValue) 98 void F04PhysicsListMessenger::SetNewValue(G4UI << 99 { 126 { 100 G4ParticleTable* fParticleTable = G4Particle << 101 127 102 if (command == fPienuCMD) { << 128 if (command == fPienuCMD) { 103 G4ParticleDefinition* fParticleDef = fPart << 129 particleTable = G4ParticleTable::GetParticleTable(); 104 G4VDecayChannel* fMode = new G4PhaseSpaceD << 130 particleDef = particleTable->FindParticle("pi+"); 105 auto fTable = new G4DecayTable(); << 131 mode = new G4PhaseSpaceDecayChannel("pi+",0.999983,2,"e+","nu_e"); 106 fTable->Insert(fMode); << 132 table=new G4DecayTable(); 107 fMode = new G4PionRadiativeDecayChannel("p << 133 table->Insert(mode); 108 fTable->Insert(fMode); << 134 mode = new G4PionRadiativeDecayChannel("pi+",0.000017); 109 fParticleDef->SetDecayTable(fTable); << 135 table->Insert(mode); 110 } << 136 particleDef->SetDecayTable(table); 111 << 137 } 112 if (command == fPimunuCMD) { << 138 113 G4ParticleDefinition* fParticleDef = fPart << 139 if (command == fPimunuCMD) { 114 G4VDecayChannel* fMode = new G4PhaseSpaceD << 140 particleTable = G4ParticleTable::GetParticleTable(); 115 auto fTable = new G4DecayTable(); << 141 particleDef = particleTable->FindParticle("pi+"); 116 fTable->Insert(fMode); << 142 mode = new G4PhaseSpaceDecayChannel("pi+",1.000,2,"mu+","nu_mu"); 117 fParticleDef->SetDecayTable(fTable); << 143 table=new G4DecayTable(); 118 } << 144 table->Insert(mode); 119 << 145 particleDef->SetDecayTable(table); 120 else if (command == fStepMaxCMD) { << 146 } 121 fPhysicsList->SetStepMax(fStepMaxCMD->GetN << 147 122 } << 148 if (command == fGammaCutCMD) { 123 /* else if (command == fClearPhysicsCMD) { << 149 fPhysicsList->SetCutForGamma(fGammaCutCMD 124 fPhysicsList->ClearPhysics(); << 150 ->GetNewDoubleValue(newValue)); 125 } << 151 } 126 else if (command == fRemovePhysicsCMD) { << 152 else if (command == fElectCutCMD) { 127 G4String name = newValue; << 153 fPhysicsList->SetCutForElectron(fElectCutCMD 128 fPhysicsList->RemoveFromPhysicsList( << 154 ->GetNewDoubleValue(newValue)); 129 } << 155 } 130 */ << 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 */ 131 } 178 } 132 179