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