57 }
else if (first ==
"p") {
66 void Replace(std::string& str,
const std::string& from,
const std::string& to) {
68 if (from.empty())
return;
70 while ((start_pos = str.find(from, start_pos)) != std::string::npos) {
71 str.
replace(start_pos, from.length(), to);
72 start_pos += to.length();
99 Replace(newStr,
"UHNTYPE_", upperHnType);
102 Replace(newStr,
"HNTYPE_",
fHnType);
106 Replace(newStr,
"NDIM_", second);
111 Replace(newStr,
"LOBJECT", lowerObjectType);
114 Replace(newStr,
"OBJECT", ObjectType(
fHnType));
119 Replace(newStr,
"UAXIS", upperAxis);
122 Replace(newStr,
"AXIS", axis);
133 std::unique_ptr<G4UIdirectory>
137 directory->SetGuidance(
Update(
"NDIM_D LOBJECT control"));
142 std::unique_ptr<G4UIcommand>
146 parId->SetGuidance(
Update(
"OBJECT id"));
147 parId->SetParameterRange(
"id>=0");
150 parTitle->SetGuidance(
Update(
"OBJECT title"));
151 parTitle->SetDefaultValue(
"none");
153 std::unique_ptr<G4UIcommand> command(
155 command->SetGuidance(
Update(
"Set title for the NDIM_D LOBJECT of given id"));
156 command->SetParameter(parId);
157 command->SetParameter(parTitle);
165 std::unique_ptr<G4UIcommand>
170 parId->SetGuidance(
Update(
"OBJECT id"));
171 parId->SetParameterRange(
"id>=0");
174 parNbins->SetGuidance(
"Number of bins");
177 parValMin->SetGuidance(
"Minimum value, expressed in unit");
180 parValMax->SetGuidance(
"Maximum value, expressed in unit");
183 parValUnit->SetGuidance(
"The unit applied to filled values and valMin, valMax");
184 parValUnit->SetDefaultValue(
"none");
187 parValFcn->SetParameterCandidates(
"log log10 exp none");
188 G4String fcnGuidance =
"The function applied to filled values (log, log10, exp, none).\n";
189 fcnGuidance +=
"Note that the unit parameter cannot be omitted in this case,\n";
190 fcnGuidance +=
"but none value should be used instead.";
191 parValFcn->SetGuidance(fcnGuidance);
192 parValFcn->SetDefaultValue(
"none");
194 auto parValBinScheme =
new G4UIparameter(
"valBinScheme",
's',
true);
195 parValBinScheme->SetParameterCandidates(
"linear log");
196 G4String binSchemeGuidance =
"The binning scheme (linear, log).\n";
198 +=
"Note that the unit and fcn parameters cannot be omitted in this case,\n";
199 binSchemeGuidance +=
"but none value should be used instead.";
200 parValBinScheme->SetGuidance(binSchemeGuidance);
201 parValBinScheme->SetDefaultValue(
"linear");
203 auto commandName =
Update(
"/analysis/HNTYPE_/setUAXIS", axis);
204 std::unique_ptr<G4UIcommand> command(
206 command->SetGuidance(
Update(
"Set parameters for the NDIM_D LOBJECT of given id:"));
207 command->SetGuidance(
208 Update(
" nAXISbins; AXISvalMin; AXISvalMax; AXISunit; AXISfunction; AXISbinScheme", axis));
209 command->SetParameter(parId);
210 command->SetParameter(parNbins);
211 command->SetParameter(parValMin);
212 command->SetParameter(parValMax);
213 command->SetParameter(parValUnit);
214 command->SetParameter(parValFcn);
215 command->SetParameter(parValBinScheme);
222 std::unique_ptr<G4UIcommand>
227 parId->SetGuidance(
Update(
"OBJECT id"));
228 parId->SetParameterRange(
"id>=0");
231 parValMin->SetGuidance(
Update(
"Minimum AXIS-value expressed in unit", axis));
234 parValMax->SetGuidance(
Update(
"Maximum AXIS-value expressed in unit", axis));
237 parValUnit->SetGuidance(
"The unit applied to filled values and valMin, valMax");
238 parValUnit->SetDefaultValue(
"none");
241 parValFcn->SetParameterCandidates(
"log log10 exp none");
242 G4String fcnGuidance =
"The function applied to filled values (log, log10, exp, none).\n";
243 fcnGuidance +=
"Note that the unit parameter cannot be omitted in this case,\n";
244 fcnGuidance +=
"but none value should be used instead.";
245 parValFcn->SetGuidance(fcnGuidance);
246 parValFcn->SetDefaultValue(
"none");
248 std::unique_ptr<G4UIcommand> command(
250 command->SetGuidance(
Update(
"Set parameters for the NDIM_D LOBJECT of #id:"));
251 command->SetGuidance(
252 Update(
" AXISvalMin; AXISvalMax; AXISunit; AXISfunction", axis));
253 command->SetParameter(parId);
254 command->SetParameter(parValMin);
255 command->SetParameter(parValMax);
256 command->SetParameter(parValUnit);
257 command->SetParameter(parValFcn);
264 std::unique_ptr<G4UIcommand>
269 parId->SetGuidance(
Update(
"OBJECT id"));
270 parId->SetParameterRange(
"id>=0");
273 parAxis->SetGuidance(
Update(
"Histogram AXIS-axis title", axis));
274 parAxis->SetDefaultValue(
"none");
276 std::unique_ptr<G4UIcommand> command(
278 command->SetGuidance(
Update(
"Set AXIS-axis title for the NDIM_D LOBJECT of given id", axis));
279 command->SetParameter(parId);
280 command->SetParameter(parAxis);
288 std::vector<G4String>& parameters,
289 G4int& counter)
const
294 data.
fSunit = parameters[counter++];
295 data.
fSfcn = parameters[counter++];
301 std::vector<G4String>& parameters,
302 G4int& counter)
const
306 data.
fSunit = parameters[counter++];
307 data.
fSfcn = parameters[counter++];
312 G4int nofParameters)
const
317 <<
"\" parameters: " << nofParameters
330 <<
"Command setX, setY, setZ must be called sucessively in this order. " <<
G4endl
331 <<
"Command was ignored." <<
G4endl;
G4String Update(const G4String &str, const G4String &axis="") const
void WarnAboutParameters(G4UIcommand *command, G4int nofParameters) const
std::ostringstream G4ExceptionDescription
std::unique_ptr< G4UIcommand > CreateSetValuesCommand(const G4String &axis, G4UImessenger *messenger) const
std::unique_ptr< G4UIcommand > CreateSetAxisCommand(const G4String &axis, G4UImessenger *messenger) const
static constexpr double second
std::unique_ptr< G4UIcommand > CreateSetBinsCommand(const G4String &axis, G4UImessenger *messenger) const
void WarnAboutSetCommands() const
G4String & replace(unsigned int, unsigned int, const char *, unsigned int)
static G4double ConvertToDouble(const char *st)
std::unique_ptr< G4UIcommand > CreateSetTitleCommand(G4UImessenger *messenger) const
~G4AnalysisMessengerHelper()
static G4int ConvertToInt(const char *st)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
const G4String & GetCommandName() const
G4AnalysisMessengerHelper(const G4String &hnType)
void GetBinData(BinData &data, std::vector< G4String > ¶meters, G4int &counter) const
G4int GetParameterEntries() const
void GetValueData(ValueData &data, std::vector< G4String > ¶meters, G4int &counter) const
std::unique_ptr< G4UIdirectory > CreateHnDirectory() const