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 /// \file biasing/ReverseMC01/src/RMC01Analysi 26 /// \file biasing/ReverseMC01/src/RMC01AnalysisManagerMessenger.cc 27 /// \brief Implementation of the RMC01Analysis 27 /// \brief Implementation of the RMC01AnalysisManagerMessenger class 28 // 28 // 29 // 29 // 30 ////////////////////////////////////////////// 30 ////////////////////////////////////////////////////////////// 31 // Class Name: RMC01AnalysisManage 31 // Class Name: RMC01AnalysisManagerMessenger 32 // Author: L. Desorgher 32 // Author: L. Desorgher 33 // Organisation: SpaceIT GmbH 33 // Organisation: SpaceIT GmbH 34 // Contract: ESA contract 21435/ 34 // Contract: ESA contract 21435/08/NL/AT 35 // Customer: ESA/ESTEC 35 // Customer: ESA/ESTEC 36 ////////////////////////////////////////////// 36 ////////////////////////////////////////////////////////////// 37 37 38 #include "RMC01AnalysisManagerMessenger.hh" 38 #include "RMC01AnalysisManagerMessenger.hh" 39 39 40 #include "RMC01AnalysisManager.hh" 40 #include "RMC01AnalysisManager.hh" 41 << 42 #include "G4SystemOfUnits.hh" << 43 #include "G4UIcmdWithADouble.hh" << 44 #include "G4UIdirectory.hh" 41 #include "G4UIdirectory.hh" >> 42 #include "G4UIcmdWithADouble.hh" 45 #include "G4UnitsTable.hh" 43 #include "G4UnitsTable.hh" >> 44 #include "G4SystemOfUnits.hh" 46 45 47 //....oooOO0OOooo........oooOO0OOooo........oo 46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 48 47 49 RMC01AnalysisManagerMessenger::RMC01AnalysisMa << 48 RMC01AnalysisManagerMessenger::RMC01AnalysisManagerMessenger( 50 : G4UImessenger(), << 49 RMC01AnalysisManager* analysisManager) 51 fAnalysisManager(analysisManager), << 50 : G4UImessenger(), 52 fAnalysisDir(0), << 51 fAnalysisManager(analysisManager), 53 fSetPrecisionForConvergenceTestCmd(0), << 52 fAnalysisDir(0), 54 fSetExpSpectrumToNormaliseAdjResCmd(0), << 53 fSetPrecisionForConvergenceTestCmd(0), 55 fSetPowerLawSpectrumToNormaliseAdjResCmd(0 << 54 fSetExpSpectrumToNormaliseAdjResCmd(0), 56 { << 55 fSetPowerLawSpectrumToNormaliseAdjResCmd(0) >> 56 { 57 fAnalysisDir = new G4UIdirectory("/RMC01/ana 57 fAnalysisDir = new G4UIdirectory("/RMC01/analysis/"); 58 fAnalysisDir->SetGuidance("Analysis commands 58 fAnalysisDir->SetGuidance("Analysis commands"); 59 << 59 60 G4UIparameter* fluence_par = new G4UIparamet << 60 G4UIparameter* fluence_par = new G4UIparameter("Fluence",'d',true); 61 fluence_par->SetParameterRange("Fluence > 0" 61 fluence_par->SetParameterRange("Fluence > 0"); 62 fluence_par->SetGuidance("Omnidirectional fl 62 fluence_par->SetGuidance("Omnidirectional fluence for primary spectrum"); 63 << 63 64 G4UIparameter* fluence_unit_par = new G4UIpa << 64 G4UIparameter* fluence_unit_par = new G4UIparameter("Fluence_unit",'s',true); 65 fluence_unit_par->SetParameterCandidates("1/ 65 fluence_unit_par->SetParameterCandidates("1/cm2 1/m2 cm-2 m-2"); 66 << 66 67 G4UIparameter* alpha_par = new G4UIparameter << 67 G4UIparameter* alpha_par = new G4UIparameter("alpha",'d',true); 68 << 68 69 G4UIparameter* e0_par = new G4UIparameter("E << 69 G4UIparameter* e0_par = new G4UIparameter("E0",'d',true); 70 e0_par->SetParameterRange("E0 > 0"); 70 e0_par->SetParameterRange("E0 > 0"); 71 << 71 72 G4UIparameter* e1_par = new G4UIparameter("E << 72 G4UIparameter* e1_par = new G4UIparameter("E1",'d',true); 73 e1_par->SetParameterRange("E1 > 0"); 73 e1_par->SetParameterRange("E1 > 0"); 74 << 74 75 G4UIparameter* e2_par = new G4UIparameter("E << 75 G4UIparameter* e2_par = new G4UIparameter("E2",'d',true); 76 e2_par->SetParameterRange("E2 > 0"); 76 e2_par->SetParameterRange("E2 > 0"); 77 << 77 78 G4UIparameter* e_unit_par = new G4UIparamete << 78 G4UIparameter* e_unit_par = new G4UIparameter("E_unit",'s',true); 79 e_unit_par->SetParameterCandidates("eV keV M 79 e_unit_par->SetParameterCandidates("eV keV MeV GeV TeV"); 80 << 80 81 G4UIparameter* part_name_par = new G4UIparam << 81 G4UIparameter* part_name_par = new G4UIparameter("particle_name",'s',true); 82 part_name_par->SetParameterCandidates("e- ga 82 part_name_par->SetParameterCandidates("e- gamma proton "); 83 << 83 84 fSetPowerLawSpectrumToNormaliseAdjResCmd = 84 fSetPowerLawSpectrumToNormaliseAdjResCmd = 85 new G4UIcommand("/RMC01/analysis/SetPowerL << 85 new G4UIcommand("/RMC01/analysis/SetPowerLawPrimSpectrumForAdjointSim",this); 86 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se << 86 fSetPowerLawSpectrumToNormaliseAdjResCmd 87 "Set the primary spectrum to which adjoint << 87 ->SetGuidance("Set the primary spectrum to which adjoint simulation " 88 "results will be normalised as a power law << 88 "results will be normalised as a power law (Ekin^-alpha)."); 89 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 89 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(part_name_par); 90 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 90 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(fluence_par); 91 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 91 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(fluence_unit_par); 92 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 92 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(alpha_par); 93 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 93 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(e1_par); 94 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 94 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(e2_par); 95 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 95 fSetPowerLawSpectrumToNormaliseAdjResCmd->SetParameter(e_unit_par); 96 fSetPowerLawSpectrumToNormaliseAdjResCmd->Av << 96 fSetPowerLawSpectrumToNormaliseAdjResCmd 97 << 97 ->AvailableForStates(G4State_PreInit,G4State_Idle); 98 fSetExpSpectrumToNormaliseAdjResCmd = new G4 << 98 99 "/RMC01/analysis/" << 99 100 "SetExponentialSpectrumForAdjointSim", << 100 fSetExpSpectrumToNormaliseAdjResCmd = new G4UIcommand("/RMC01/analysis/" 101 this); << 101 "SetExponentialSpectrumForAdjointSim",this); 102 fSetExpSpectrumToNormaliseAdjResCmd->SetGuid << 102 fSetExpSpectrumToNormaliseAdjResCmd 103 "Set the primary spectrum to which adjoint << 103 ->SetGuidance("Set the primary spectrum to which adjoint simulation results" 104 "will be normalised as exponential (exp(-E << 104 "will be normalised as exponential (exp(-Ekin/E0))."); 105 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 105 fSetExpSpectrumToNormaliseAdjResCmd 106 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 106 ->SetParameter(new G4UIparameter(*part_name_par)); 107 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 107 fSetExpSpectrumToNormaliseAdjResCmd 108 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 108 ->SetParameter(new G4UIparameter(*fluence_par)); 109 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 109 fSetExpSpectrumToNormaliseAdjResCmd 110 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 110 ->SetParameter(new G4UIparameter(*fluence_unit_par)); 111 fSetExpSpectrumToNormaliseAdjResCmd->SetPara << 111 fSetExpSpectrumToNormaliseAdjResCmd 112 fSetExpSpectrumToNormaliseAdjResCmd->Availab << 112 ->SetParameter(new G4UIparameter(*e0_par)); 113 << 113 fSetExpSpectrumToNormaliseAdjResCmd 114 fSetPrecisionForConvergenceTestCmd = new G4U << 114 ->SetParameter(new G4UIparameter(*e1_par)); 115 "/RMC01/analysis/" << 115 fSetExpSpectrumToNormaliseAdjResCmd 116 "SetExpectedPrecisionOfResults", << 116 ->SetParameter(new G4UIparameter(*e2_par)); 117 this); << 117 fSetExpSpectrumToNormaliseAdjResCmd 118 fSetPrecisionForConvergenceTestCmd->SetGuida << 118 ->SetParameter(new G4UIparameter(*e_unit_par)); 119 "Set the precision in % that the computed << 119 fSetExpSpectrumToNormaliseAdjResCmd 120 "in the sensitive volume should reached. I << 120 ->AvailableForStates(G4State_PreInit,G4State_Idle); 121 " before the end of the run, the run is ab << 121 122 "registered."); << 122 123 fSetPrecisionForConvergenceTestCmd->SetParam << 123 fSetPrecisionForConvergenceTestCmd = new G4UIcmdWithADouble("/RMC01/analysis/" 124 fSetPrecisionForConvergenceTestCmd->Availabl << 124 "SetExpectedPrecisionOfResults",this); >> 125 fSetPrecisionForConvergenceTestCmd >> 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); >> 131 fSetPrecisionForConvergenceTestCmd >> 132 ->AvailableForStates(G4State_PreInit,G4State_Idle); 125 } 133 } 126 134 127 //....oooOO0OOooo........oooOO0OOooo........oo 135 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 128 136 129 RMC01AnalysisManagerMessenger::~RMC01AnalysisM 137 RMC01AnalysisManagerMessenger::~RMC01AnalysisManagerMessenger() 130 { 138 { 131 delete fAnalysisDir; 139 delete fAnalysisDir; 132 } 140 } 133 141 134 //....oooOO0OOooo........oooOO0OOooo........oo 142 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 135 143 136 void RMC01AnalysisManagerMessenger::SetNewValu << 144 void RMC01AnalysisManagerMessenger::SetNewValue( >> 145 G4UIcommand* command,G4String newValue) 137 { 146 { 138 if (command == fSetPowerLawSpectrumToNormali << 147 if( command == fSetPowerLawSpectrumToNormaliseAdjResCmd){ 139 G4double alpha, e1, e2, fluence; << 148 G4double alpha,e1,e2,fluence; 140 G4String f_unit, e_unit, part_name; << 149 G4String f_unit,e_unit,part_name; 141 const char* nv = (const char*)newValue; 150 const char* nv = (const char*)newValue; 142 std::istringstream is(nv); 151 std::istringstream is(nv); 143 is >> part_name >> fluence >> f_unit >> al << 152 is >> part_name>>fluence>>f_unit>>alpha>>e1>>e2>>e_unit; 144 << 153 145 G4double factor_f_unit = 1 / cm2; << 154 G4double factor_f_unit=1/cm2; 146 if (f_unit == "1/m2" || f_unit == "m-2") f << 155 if (f_unit == "1/m2" || f_unit =="m-2") factor_f_unit=1/m2; 147 fluence *= factor_f_unit; << 156 fluence*=factor_f_unit; 148 e1 *= G4UnitDefinition::GetValueOf(e_unit) << 157 e1*= G4UnitDefinition::GetValueOf(e_unit); 149 e2 *= G4UnitDefinition::GetValueOf(e_unit) << 158 e2*= G4UnitDefinition::GetValueOf(e_unit); 150 fAnalysisManager->SetPrimaryPowerLawSpectr << 159 fAnalysisManager->SetPrimaryPowerLawSpectrumForAdjointSim( >> 160 part_name, fluence, alpha, e1, e2); 151 } 161 } 152 else if (command == fSetExpSpectrumToNormali << 162 else if( command == fSetExpSpectrumToNormaliseAdjResCmd){ 153 G4double e0, e1, e2, fluence; << 163 G4double e0,e1,e2,fluence; 154 G4String f_unit, e_unit, part_name; << 164 G4String f_unit,e_unit,part_name; 155 const char* nv = (const char*)newValue; 165 const char* nv = (const char*)newValue; 156 std::istringstream is(nv); 166 std::istringstream is(nv); 157 is >> part_name >> fluence >> f_unit >> e0 << 167 is >> part_name>>fluence>>f_unit>>e0>>e1>>e2>>e_unit; 158 << 168 159 G4double factor_f_unit = 1 / cm2; << 169 G4double factor_f_unit=1/cm2; 160 if (f_unit == "1/m2" || f_unit == "m-2") f << 170 if (f_unit == "1/m2" || f_unit =="m-2") factor_f_unit=1/m2; 161 << 171 162 fluence *= factor_f_unit; << 172 fluence*=factor_f_unit; 163 e0 *= G4UnitDefinition::GetValueOf(e_unit) << 173 e0*= G4UnitDefinition::GetValueOf(e_unit); 164 e1 *= G4UnitDefinition::GetValueOf(e_unit) << 174 e1*= G4UnitDefinition::GetValueOf(e_unit); 165 e2 *= G4UnitDefinition::GetValueOf(e_unit) << 175 e2*= G4UnitDefinition::GetValueOf(e_unit); 166 << 176 167 fAnalysisManager->SetPrimaryExpSpectrumFor << 177 fAnalysisManager->SetPrimaryExpSpectrumForAdjointSim(part_name, >> 178 fluence, e0, e1, e2); >> 179 168 } 180 } 169 else if (command == fSetPrecisionForConverge << 181 else if( command == fSetPrecisionForConvergenceTestCmd){ 170 fAnalysisManager->SetPrecision(fSetPrecisi << 182 fAnalysisManager->SetPrecision( >> 183 fSetPrecisionForConvergenceTestCmd->GetNewDoubleValue(newValue)); 171 } 184 } 172 } 185 } 173 186 174 //....oooOO0OOooo........oooOO0OOooo........oo 187 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 175 188