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 27 // Author: Ivana Hrivnacova, 18/06/2013 (ivan 28 29 #include "G4HnMessenger.hh" 30 #include "G4HnManager.hh" 31 #include "G4AnalysisUtilities.hh" 32 33 #include "G4UIcommand.hh" 34 #include "G4UIparameter.hh" 35 #include "G4UIcmdWithABool.hh" 36 #include "G4UIcmdWithAString.hh" 37 38 using namespace G4Analysis; 39 40 //____________________________________________ 41 G4HnMessenger::G4HnMessenger(G4HnManager& mana 42 : fManager(manager), 43 fHnType(manager.GetHnType()), 44 fHnDimension(std::stoi(manager.GetHnType() 45 { 46 SetHnAsciiCmd(); 47 SetHnActivationCmd(); 48 SetHnActivationToAllCmd(); 49 SetHnPlottingCmd(); 50 SetHnPlottingToAllCmd(); 51 SetHnFileNameCmd(); 52 SetHnFileNameToAllCmd(); 53 54 auto maxDim = (fHnDimension < kMaxDim) ? fHn 55 for (unsigned int idim = 0; idim < maxDim; + 56 fSetAxisLogCmd.push_back(CreateSetAxisLogC 57 } 58 } 59 60 //____________________________________________ 61 G4HnMessenger::~G4HnMessenger() = default; 62 63 // 64 // private functions 65 // 66 67 //____________________________________________ 68 G4String G4HnMessenger::GetObjectType() const 69 { 70 return (fHnType[0] == 'h') ? 71 fHnType.substr(1,1) + "D histogram" : 72 fHnType.substr(1,1) + "D profile"; 73 } 74 75 //____________________________________________ 76 void G4HnMessenger::AddIdParameter(G4UIcommand 77 { 78 auto htId = new G4UIparameter("id", 'i', fal 79 htId->SetGuidance("Histogram id"); 80 htId->SetParameterRange("id>=0"); 81 command.SetParameter(htId); 82 } 83 84 //____________________________________________ 85 void G4HnMessenger::AddOptionParameter(G4UIcom 86 { 87 auto param = new G4UIparameter(optionName, ' 88 auto guidance = GetObjectType() + " " + opti 89 param->SetGuidance(guidance.c_str()); 90 param->SetDefaultValue("true"); 91 command.SetParameter(param); 92 } 93 94 //____________________________________________ 95 void G4HnMessenger::SetHnAsciiCmd() 96 { 97 fSetAsciiCmd = 98 CreateCommand<G4UIcommand>("setAscii", "Pr 99 100 AddIdParameter(*fSetAsciiCmd); 101 AddOptionParameter(*fSetAsciiCmd, "hnAscii") 102 103 } 104 105 //____________________________________________ 106 void G4HnMessenger::SetHnActivationCmd() 107 { 108 fSetActivationCmd = 109 CreateCommand<G4UIcommand>("setActivation" 110 111 AddIdParameter(*fSetActivationCmd); 112 AddOptionParameter(*fSetActivationCmd, "hnAc 113 } 114 115 //____________________________________________ 116 void G4HnMessenger::SetHnActivationToAllCmd() 117 { 118 fSetActivationAllCmd = 119 CreateCommand<G4UIcmdWithABool>( 120 "setActivationToAll", "Set activation to 121 fSetActivationAllCmd->SetParameterName("Acti 122 } 123 124 //____________________________________________ 125 void G4HnMessenger::SetHnPlottingCmd() 126 { 127 fSetPlottingCmd = 128 CreateCommand<G4UIcommand>("setPlotting", 129 130 AddIdParameter(*fSetPlottingCmd); 131 AddOptionParameter(*fSetPlottingCmd, "hnPlot 132 } 133 134 //____________________________________________ 135 void G4HnMessenger::SetHnPlottingToAllCmd() 136 { 137 fSetPlottingAllCmd = 138 CreateCommand<G4UIcmdWithABool>( 139 "setPlottingToAll", "(In)Activate batch 140 fSetPlottingAllCmd->SetParameterName("Plotti 141 } 142 143 //____________________________________________ 144 void G4HnMessenger::SetHnFileNameCmd() 145 { 146 fSetFileNameCmd = 147 CreateCommand<G4UIcommand>("setFileName", 148 149 AddIdParameter(*fSetFileNameCmd); 150 151 auto param = new G4UIparameter("hnFileName", 152 auto guidance = GetObjectType() + " output f 153 param->SetGuidance(guidance.c_str()); 154 fSetFileNameCmd->SetParameter(param); 155 } 156 157 //____________________________________________ 158 void G4HnMessenger::SetHnFileNameToAllCmd() 159 { 160 fSetFileNameAllCmd = 161 CreateCommand<G4UIcmdWithAString>( 162 "setFileNameToAll", "Set output file nam 163 fSetFileNameAllCmd->SetParameterName("FileN 164 } 165 166 //____________________________________________ 167 std::unique_ptr<G4UIcommand> 168 G4HnMessenger::CreateSetAxisLogCommand(unsigne 169 { 170 G4String xyz{"XYZ"}; 171 auto axis = xyz.substr(idim, 1); 172 173 G4String commandName = "set" + axis + "axisL 174 G4String guidance = "Activate " + axis + "- 175 176 auto command = CreateCommand<G4UIcommand>(st 177 command->AvailableForStates(G4State_PreInit, 178 179 // Add Id parameter 180 AddIdParameter(*command); 181 182 auto parAxisLog = new G4UIparameter("axis", 183 guidance = GetObjectType() + " " + std::move 184 parAxisLog->SetGuidance(guidance.c_str()); 185 command->SetParameter(parAxisLog); 186 187 return command; 188 } 189 190 // 191 // public methods 192 // 193 194 //____________________________________________ 195 void G4HnMessenger::SetNewValue(G4UIcommand* c 196 { 197 // process "All" commands first 198 if ( command == fSetActivationAllCmd.get() ) 199 fManager.SetActivation(fSetActivationAllCm 200 return; 201 } 202 203 if ( command == fSetPlottingAllCmd.get() ) { 204 fManager.SetPlotting(fSetPlottingAllCmd->G 205 return; 206 } 207 208 if ( command == fSetFileNameAllCmd.get() ) { 209 fManager.SetFileName(newValues); 210 return; 211 } 212 213 // Tokenize parameters in a vector 214 std::vector<G4String> parameters; 215 G4Analysis::Tokenize(newValues, parameters); 216 // check consistency 217 if ( parameters.size() != command->GetParame 218 // Should never happen but let's check any 219 G4Analysis::Warn( 220 "Got wrong number of \"" + command->GetC 221 "\" parameters: " + std::to_string(param 222 " instead of " + std::to_string(command- 223 fkClass, "WarnAboutParameters"); 224 return; 225 } 226 227 auto counter = 0; 228 auto id = G4UIcommand::ConvertToInt(paramete 229 230 if ( command == fSetAsciiCmd.get() ) { 231 fManager.SetAscii(id, G4UIcommand::Convert 232 return; 233 } 234 235 if ( command == fSetActivationCmd.get() ) { 236 fManager.SetActivation(id, G4UIcommand::Co 237 return; 238 } 239 240 if ( command == fSetPlottingCmd.get() ) { 241 fManager.SetPlotting(id, G4UIcommand::Conv 242 return; 243 } 244 245 if ( command == fSetFileNameCmd.get() ) { 246 fManager.SetFileName(id, parameters[counte 247 return; 248 } 249 250 auto maxDim = (fHnDimension < kMaxDim) ? fHn 251 for (unsigned int idim = 0; idim < maxDim; + 252 if ( command == fSetAxisLogCmd[idim].get() 253 auto axisLog = G4UIcommand::ConvertToBoo 254 fManager.SetAxisIsLog(idim, id, axisLog) 255 return; 256 } 257 } 258 } 259