Loading...
Searching...
No Matches
RMC01AnalysisManagerMessenger.cc
Go to the documentation of this file.
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/// \file biasing/ReverseMC01/src/RMC01AnalysisManagerMessenger.cc
27/// \brief Implementation of the RMC01AnalysisManagerMessenger class
28//
29//
30//////////////////////////////////////////////////////////////
31// Class Name: RMC01AnalysisManagerMessenger
32// Author: L. Desorgher
33// Organisation: SpaceIT GmbH
34// Contract: ESA contract 21435/08/NL/AT
35// Customer: ESA/ESTEC
36//////////////////////////////////////////////////////////////
37
39
41#include "G4UIdirectory.hh"
42#include "G4UIcmdWithADouble.hh"
43#include "G4UnitsTable.hh"
44#include "G4SystemOfUnits.hh"
45
46//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
47
49 RMC01AnalysisManager* analysisManager)
51 fAnalysisManager(analysisManager),
52 fAnalysisDir(0),
53 fSetPrecisionForConvergenceTestCmd(0),
54 fSetExpSpectrumToNormaliseAdjResCmd(0),
55 fSetPowerLawSpectrumToNormaliseAdjResCmd(0)
56{
57 fAnalysisDir = new G4UIdirectory("/RMC01/analysis/");
58 fAnalysisDir->SetGuidance("Analysis commands");
59
60 G4UIparameter* fluence_par = new G4UIparameter("Fluence",'d',true);
61 fluence_par->SetParameterRange("Fluence > 0");
62 fluence_par->SetGuidance("Omnidirectional fluence for primary spectrum");
63
64 G4UIparameter* fluence_unit_par = new G4UIparameter("Fluence_unit",'s',true);
65 fluence_unit_par->SetParameterCandidates("1/cm2 1/m2 cm-2 m-2");
66
67 G4UIparameter* alpha_par = new G4UIparameter("alpha",'d',true);
68
69 G4UIparameter* e0_par = new G4UIparameter("E0",'d',true);
70 e0_par->SetParameterRange("E0 > 0");
71
72 G4UIparameter* e1_par = new G4UIparameter("E1",'d',true);
73 e1_par->SetParameterRange("E1 > 0");
74
75 G4UIparameter* e2_par = new G4UIparameter("E2",'d',true);
76 e2_par->SetParameterRange("E2 > 0");
77
78 G4UIparameter* e_unit_par = new G4UIparameter("E_unit",'s',true);
79 e_unit_par->SetParameterCandidates("eV keV MeV GeV TeV");
80
81 G4UIparameter* part_name_par = new G4UIparameter("particle_name",'s',true);
82 part_name_par->SetParameterCandidates("e- gamma proton ");
83
85 new G4UIcommand("/RMC01/analysis/SetPowerLawPrimSpectrumForAdjointSim",this);
87 ->SetGuidance("Set the primary spectrum to which adjoint simulation "
88 "results will be normalised as a power law (Ekin^-alpha).");
89 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(part_name_par);
90 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(fluence_par);
91 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(fluence_unit_par);
92 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(alpha_par);
93 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(e1_par);
94 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(e2_par);
95 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(e_unit_par);
97 ->AvailableForStates(G4State_PreInit,G4State_Idle);
98
99
100 fSetExpSpectrumToNormaliseAdjResCmd = new G4UIcommand("/RMC01/analysis/"
101 "SetExponentialSpectrumForAdjointSim",this);
103 ->SetGuidance("Set the primary spectrum to which adjoint simulation results"
104 "will be normalised as exponential (exp(-Ekin/E0)).");
106 ->SetParameter(new G4UIparameter(*part_name_par));
108 ->SetParameter(new G4UIparameter(*fluence_par));
110 ->SetParameter(new G4UIparameter(*fluence_unit_par));
112 ->SetParameter(new G4UIparameter(*e0_par));
114 ->SetParameter(new G4UIparameter(*e1_par));
116 ->SetParameter(new G4UIparameter(*e2_par));
118 ->SetParameter(new G4UIparameter(*e_unit_par));
120 ->AvailableForStates(G4State_PreInit,G4State_Idle);
121
122
124 "SetExpectedPrecisionOfResults",this);
126 ->SetGuidance("Set the precision in % that the computed energy deposited "
127 "in the sensitive volume should reached. If this precision is reached"
128 " before the end of the run, the run is aborted and the results are "
129 "registered.");
130 fSetPrecisionForConvergenceTestCmd->SetParameterName("Precision",true);
132 ->AvailableForStates(G4State_PreInit,G4State_Idle);
133}
134
135//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
136
141
142//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
143
145 G4UIcommand* command,G4String newValue)
146{
148 G4double alpha,e1,e2,fluence;
149 G4String f_unit,e_unit,part_name;
150 const char* nv = (const char*)newValue;
151 std::istringstream is(nv);
152 is >> part_name>>fluence>>f_unit>>alpha>>e1>>e2>>e_unit;
153
154 G4double factor_f_unit=1/cm2;
155 if (f_unit == "1/m2" || f_unit =="m-2") factor_f_unit=1/m2;
156 fluence*=factor_f_unit;
157 e1*= G4UnitDefinition::GetValueOf(e_unit);
158 e2*= G4UnitDefinition::GetValueOf(e_unit);
160 part_name, fluence, alpha, e1, e2);
161 }
162 else if( command == fSetExpSpectrumToNormaliseAdjResCmd){
163 G4double e0,e1,e2,fluence;
164 G4String f_unit,e_unit,part_name;
165 const char* nv = (const char*)newValue;
166 std::istringstream is(nv);
167 is >> part_name>>fluence>>f_unit>>e0>>e1>>e2>>e_unit;
168
169 G4double factor_f_unit=1/cm2;
170 if (f_unit == "1/m2" || f_unit =="m-2") factor_f_unit=1/m2;
171
172 fluence*=factor_f_unit;
173 e0*= G4UnitDefinition::GetValueOf(e_unit);
174 e1*= G4UnitDefinition::GetValueOf(e_unit);
175 e2*= G4UnitDefinition::GetValueOf(e_unit);
176
178 fluence, e0, e1, e2);
179
180 }
181 else if( command == fSetPrecisionForConvergenceTestCmd){
183 fSetPrecisionForConvergenceTestCmd->GetNewDoubleValue(newValue));
184 }
185}
186
187//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
Definition of the RMC01AnalysisManagerMessenger class.
Definition of the RMC01AnalysisManager class.
virtual void SetNewValue(G4UIcommand *, G4String)
RMC01AnalysisManagerMessenger(RMC01AnalysisManager *)
void SetPrecision(G4double precision)
void SetPrimaryPowerLawSpectrumForAdjointSim(const G4String &particle_name, G4double fluence, G4double alpha, G4double Emin, G4double Emax)
void SetPrimaryExpSpectrumForAdjointSim(const G4String &particle_name, G4double fluence, G4double E0, G4double Emin, G4double Emax)

Applications | User Support | Publications | Collaboration