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