Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 /// \file biasing/ReverseMC01/src/RMC01Analysi 27 /// \brief Implementation of the RMC01Analysis 28 // 29 // 30 ////////////////////////////////////////////// 31 // Class Name: RMC01AnalysisManage 32 // Author: L. Desorgher 33 // Organisation: SpaceIT GmbH 34 // Contract: ESA contract 21435/ 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........oo 48 49 RMC01AnalysisManagerMessenger::RMC01AnalysisMa 50 : G4UImessenger(), 51 fAnalysisManager(analysisManager), 52 fAnalysisDir(0), 53 fSetPrecisionForConvergenceTestCmd(0), 54 fSetExpSpectrumToNormaliseAdjResCmd(0), 55 fSetPowerLawSpectrumToNormaliseAdjResCmd(0 56 { 57 fAnalysisDir = new G4UIdirectory("/RMC01/ana 58 fAnalysisDir->SetGuidance("Analysis commands 59 60 G4UIparameter* fluence_par = new G4UIparamet 61 fluence_par->SetParameterRange("Fluence > 0" 62 fluence_par->SetGuidance("Omnidirectional fl 63 64 G4UIparameter* fluence_unit_par = new G4UIpa 65 fluence_unit_par->SetParameterCandidates("1/ 66 67 G4UIparameter* alpha_par = new G4UIparameter 68 69 G4UIparameter* e0_par = new G4UIparameter("E 70 e0_par->SetParameterRange("E0 > 0"); 71 72 G4UIparameter* e1_par = new G4UIparameter("E 73 e1_par->SetParameterRange("E1 > 0"); 74 75 G4UIparameter* e2_par = new G4UIparameter("E 76 e2_par->SetParameterRange("E2 > 0"); 77 78 G4UIparameter* e_unit_par = new G4UIparamete 79 e_unit_par->SetParameterCandidates("eV keV M 80 81 G4UIparameter* part_name_par = new G4UIparam 82 part_name_par->SetParameterCandidates("e- ga 83 84 fSetPowerLawSpectrumToNormaliseAdjResCmd = 85 new G4UIcommand("/RMC01/analysis/SetPowerL 86 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 87 "Set the primary spectrum to which adjoint 88 "results will be normalised as a power law 89 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 90 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 91 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 92 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 93 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 94 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 95 fSetPowerLawSpectrumToNormaliseAdjResCmd->Se 96 fSetPowerLawSpectrumToNormaliseAdjResCmd->Av 97 98 fSetExpSpectrumToNormaliseAdjResCmd = new G4 99 "/RMC01/analysis/" 100 "SetExponentialSpectrumForAdjointSim", 101 this); 102 fSetExpSpectrumToNormaliseAdjResCmd->SetGuid 103 "Set the primary spectrum to which adjoint 104 "will be normalised as exponential (exp(-E 105 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 106 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 107 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 108 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 109 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 110 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 111 fSetExpSpectrumToNormaliseAdjResCmd->SetPara 112 fSetExpSpectrumToNormaliseAdjResCmd->Availab 113 114 fSetPrecisionForConvergenceTestCmd = new G4U 115 "/RMC01/analysis/" 116 "SetExpectedPrecisionOfResults", 117 this); 118 fSetPrecisionForConvergenceTestCmd->SetGuida 119 "Set the precision in % that the computed 120 "in the sensitive volume should reached. I 121 " before the end of the run, the run is ab 122 "registered."); 123 fSetPrecisionForConvergenceTestCmd->SetParam 124 fSetPrecisionForConvergenceTestCmd->Availabl 125 } 126 127 //....oooOO0OOooo........oooOO0OOooo........oo 128 129 RMC01AnalysisManagerMessenger::~RMC01AnalysisM 130 { 131 delete fAnalysisDir; 132 } 133 134 //....oooOO0OOooo........oooOO0OOooo........oo 135 136 void RMC01AnalysisManagerMessenger::SetNewValu 137 { 138 if (command == fSetPowerLawSpectrumToNormali 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 >> al 144 145 G4double factor_f_unit = 1 / cm2; 146 if (f_unit == "1/m2" || f_unit == "m-2") f 147 fluence *= factor_f_unit; 148 e1 *= G4UnitDefinition::GetValueOf(e_unit) 149 e2 *= G4UnitDefinition::GetValueOf(e_unit) 150 fAnalysisManager->SetPrimaryPowerLawSpectr 151 } 152 else if (command == fSetExpSpectrumToNormali 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 158 159 G4double factor_f_unit = 1 / cm2; 160 if (f_unit == "1/m2" || f_unit == "m-2") f 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->SetPrimaryExpSpectrumFor 168 } 169 else if (command == fSetPrecisionForConverge 170 fAnalysisManager->SetPrecision(fSetPrecisi 171 } 172 } 173 174 //....oooOO0OOooo........oooOO0OOooo........oo 175