Geant4 Cross Reference |
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 38 #include "RMC01AnalysisManagerMessenger.hh" 39 40 #include "RMC01AnalysisManager.hh" 41 42 #include "G4SystemOfUnits.hh" 43 #include "G4UIcmdWithADouble.hh" 44 #include "G4UIdirectory.hh" 45 #include "G4UnitsTable.hh" 46 47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 48 49 RMC01AnalysisManagerMessenger::RMC01AnalysisManagerMessenger(RMC01AnalysisManager* analysisManager) 50 : G4UImessenger(), 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 84 fSetPowerLawSpectrumToNormaliseAdjResCmd = 85 new G4UIcommand("/RMC01/analysis/SetPowerLawPrimSpectrumForAdjointSim", this); 86 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetGuidance( 87 "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); 96 fSetPowerLawSpectrumToNormaliseAdjResCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 97 98 fSetExpSpectrumToNormaliseAdjResCmd = new G4UIcommand( 99 "/RMC01/analysis/" 100 "SetExponentialSpectrumForAdjointSim", 101 this); 102 fSetExpSpectrumToNormaliseAdjResCmd->SetGuidance( 103 "Set the primary spectrum to which adjoint simulation results" 104 "will be normalised as exponential (exp(-Ekin/E0))."); 105 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*part_name_par)); 106 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*fluence_par)); 107 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*fluence_unit_par)); 108 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*e0_par)); 109 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*e1_par)); 110 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*e2_par)); 111 fSetExpSpectrumToNormaliseAdjResCmd->SetParameter(new G4UIparameter(*e_unit_par)); 112 fSetExpSpectrumToNormaliseAdjResCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 113 114 fSetPrecisionForConvergenceTestCmd = new G4UIcmdWithADouble( 115 "/RMC01/analysis/" 116 "SetExpectedPrecisionOfResults", 117 this); 118 fSetPrecisionForConvergenceTestCmd->SetGuidance( 119 "Set the precision in % that the computed energy deposited " 120 "in the sensitive volume should reached. If this precision is reached" 121 " before the end of the run, the run is aborted and the results are " 122 "registered."); 123 fSetPrecisionForConvergenceTestCmd->SetParameterName("Precision", true); 124 fSetPrecisionForConvergenceTestCmd->AvailableForStates(G4State_PreInit, G4State_Idle); 125 } 126 127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 128 129 RMC01AnalysisManagerMessenger::~RMC01AnalysisManagerMessenger() 130 { 131 delete fAnalysisDir; 132 } 133 134 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 135 136 void RMC01AnalysisManagerMessenger::SetNewValue(G4UIcommand* command, G4String newValue) 137 { 138 if (command == fSetPowerLawSpectrumToNormaliseAdjResCmd) { 139 G4double alpha, e1, e2, fluence; 140 G4String f_unit, e_unit, part_name; 141 const char* nv = (const char*)newValue; 142 std::istringstream is(nv); 143 is >> part_name >> fluence >> f_unit >> alpha >> e1 >> e2 >> e_unit; 144 145 G4double factor_f_unit = 1 / cm2; 146 if (f_unit == "1/m2" || f_unit == "m-2") factor_f_unit = 1 / m2; 147 fluence *= factor_f_unit; 148 e1 *= G4UnitDefinition::GetValueOf(e_unit); 149 e2 *= G4UnitDefinition::GetValueOf(e_unit); 150 fAnalysisManager->SetPrimaryPowerLawSpectrumForAdjointSim(part_name, fluence, alpha, e1, e2); 151 } 152 else if (command == fSetExpSpectrumToNormaliseAdjResCmd) { 153 G4double e0, e1, e2, fluence; 154 G4String f_unit, e_unit, part_name; 155 const char* nv = (const char*)newValue; 156 std::istringstream is(nv); 157 is >> part_name >> fluence >> f_unit >> e0 >> e1 >> e2 >> e_unit; 158 159 G4double factor_f_unit = 1 / cm2; 160 if (f_unit == "1/m2" || f_unit == "m-2") factor_f_unit = 1 / m2; 161 162 fluence *= factor_f_unit; 163 e0 *= G4UnitDefinition::GetValueOf(e_unit); 164 e1 *= G4UnitDefinition::GetValueOf(e_unit); 165 e2 *= G4UnitDefinition::GetValueOf(e_unit); 166 167 fAnalysisManager->SetPrimaryExpSpectrumForAdjointSim(part_name, fluence, e0, e1, e2); 168 } 169 else if (command == fSetPrecisionForConvergenceTestCmd) { 170 fAnalysisManager->SetPrecision(fSetPrecisionForConvergenceTestCmd->GetNewDoubleValue(newValue)); 171 } 172 } 173 174 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 175