Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4AnalysisMessenger.cc
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // $Id$
27 
28 // Author: Ivana Hrivnacova, 04/07/2012 (ivana@ipno.in2p3.fr)
29 //
30 // This messenger class is a generalization of the HistoMessenger class,
31 // originally developed for the extended/electromagnetic examples
32 // by Michel Maire (michel.maire@lapp.in2p3.fr)
33 
34 #include "G4AnalysisMessenger.hh"
35 #include "G4VAnalysisManager.hh"
36 #include "G4HnInformation.hh"
37 
38 #include "G4UIdirectory.hh"
39 #include "G4UIcommand.hh"
40 #include "G4UIparameter.hh"
41 #include "G4UIcmdWithAString.hh"
42 #include "G4UIcmdWithAnInteger.hh"
43 #include "G4UIcmdWithABool.hh"
44 
45 #include <iostream>
46 
47 //_____________________________________________________________________________
49  : G4UImessenger(),
50  fManager(manager),
51  fAnalysisDir(0),
52  fSetFileNameCmd(0),
53  fSetHistoDirNameCmd(0),
54  fSetNtupleDirNameCmd(0),
55  fSetActivationCmd(0),
56  fVerboseCmd(0),
57  fH1Dir(0),
58  fCreateH1Cmd(0),
59  fSetH1Cmd(0),
60  fSetH1AsciiCmd(0),
61  fSetH1TitleCmd(0),
62  fSetH1XAxisCmd(0),
63  fSetH1YAxisCmd(0),
64  fSetH1ActivationCmd(0),
65  fSetH1ActivationAllCmd(0),
66  fH2Dir(0),
67  fCreateH2Cmd(0),
68  fSetH2Cmd(0),
69  fSetH2AsciiCmd(0),
70  fSetH2TitleCmd(0),
71  fSetH2XAxisCmd(0),
72  fSetH2YAxisCmd(0),
73  fSetH2ActivationCmd(0),
74  fSetH2ActivationAllCmd(0)
75 {
76  fAnalysisDir = new G4UIdirectory("/analysis/");
77  fAnalysisDir->SetGuidance("analysis control");
78 
79  fSetFileNameCmd = new G4UIcmdWithAString("/analysis/setFileName",this);
80  fSetFileNameCmd->SetGuidance("Set name for the histograms & ntuple file");
81  fSetFileNameCmd->SetParameterName("Filename", false);
83 
84  fSetHistoDirNameCmd = new G4UIcmdWithAString("/analysis/setHistoDirName",this);
85  fSetHistoDirNameCmd->SetGuidance("Set name for the histograms directory");
86  fSetHistoDirNameCmd->SetParameterName("HistoDirName", false);
87  fSetHistoDirNameCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
88 
89  fSetNtupleDirNameCmd = new G4UIcmdWithAString("/analysis/setNtupleDirName",this);
90  fSetNtupleDirNameCmd->SetGuidance("Set name for the ntuple directory");
91  fSetNtupleDirNameCmd->SetParameterName("NtupleDirName", false);
92  fSetNtupleDirNameCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
93 
94  fSetActivationCmd = new G4UIcmdWithABool("/analysis/setActivation",this);
95  G4String guidance = "Set activation. \n";
96  guidance += "When this option is enabled, only the histograms marked as activated\n";
97  guidance += "are returned, filled or saved on file.\n";
98  guidance += "No warning is issued when Get or Fill is called on inactive histogram.";
99  fSetActivationCmd->SetGuidance(guidance);
100  fSetActivationCmd->SetParameterName("Activation",false);
101 
102  fVerboseCmd = new G4UIcmdWithAnInteger("/analysis/verbose",this);
103  fVerboseCmd->SetGuidance("Set verbose level");
104  fVerboseCmd->SetParameterName("VerboseLevel",false);
105  fVerboseCmd->SetRange("VerboseLevel>=0 && VerboseLevel<=4");
106 
107  fH1Dir = new G4UIdirectory("/analysis/h1/");
108  fH1Dir->SetGuidance("1D histograms control");
109 
110  CreateH1Cmd();
111  SetH1Cmd();
112 
113  fSetH1AsciiCmd = new G4UIcmdWithAnInteger("/analysis/h1/setAscii",this);
114  fSetH1AsciiCmd->SetGuidance("Print 1D histogram of #Id on ascii file.");
115  fSetH1AsciiCmd->SetParameterName("Id",false);
116  fSetH1AsciiCmd->SetRange("Id>=0");
118 
119  SetH1TitleCmd();
120  SetH1XAxisCmd();
121  SetH1YAxisCmd();
122  SetH1ActivationCmd();
123 
124  fSetH1ActivationAllCmd = new G4UIcmdWithABool("/analysis/h1/setActivationToAll",this);
125  fSetH1ActivationAllCmd->SetGuidance("Set activation to all 1D histograms.");
126  fSetH1ActivationAllCmd->SetParameterName("Activation",false);
127 
128  fH2Dir = new G4UIdirectory("/analysis/h2/");
129  fH2Dir->SetGuidance("2D histograms control");
130 
131  CreateH2Cmd();
132  SetH2Cmd();
133 
134  fSetH2AsciiCmd = new G4UIcmdWithAnInteger("/analysis/h2/setAscii",this);
135  fSetH2AsciiCmd->SetGuidance("Print 2D histogram of #Id on ascii file.");
136  fSetH2AsciiCmd->SetParameterName("Id",false);
137  fSetH2AsciiCmd->SetRange("Id>=0");
139 
140  SetH2TitleCmd();
141  SetH2XAxisCmd();
142  SetH2YAxisCmd();
143  SetH2ZAxisCmd();
144  SetH2ActivationCmd();
145 
146  fSetH2ActivationAllCmd = new G4UIcmdWithABool("/analysis/h2/setActivationToAll",this);
147  fSetH2ActivationAllCmd->SetGuidance("Set activation to all 2D histograms.");
148  fSetH2ActivationAllCmd->SetParameterName("Activation",false);
149 
150 }
151 
152 //_____________________________________________________________________________
154 {
155  delete fSetFileNameCmd;
156  delete fSetHistoDirNameCmd;
157  delete fSetNtupleDirNameCmd;
158  delete fSetActivationCmd;
159  delete fVerboseCmd;
160  delete fCreateH1Cmd;
161  delete fSetH1Cmd;
162  delete fSetH1AsciiCmd;
163  delete fSetH1TitleCmd;
164  delete fSetH1XAxisCmd;
165  delete fSetH1YAxisCmd;
166  delete fSetH1ActivationCmd;
167  delete fSetH1ActivationAllCmd;
168  delete fH1Dir;
169  delete fCreateH2Cmd;
170  delete fSetH2Cmd;
171  delete fSetH2AsciiCmd;
172  delete fSetH2TitleCmd;
173  delete fSetH2XAxisCmd;
174  delete fSetH2YAxisCmd;
175  delete fSetH2ZAxisCmd;
176  delete fSetH2ActivationCmd;
177  delete fSetH2ActivationAllCmd;
178  delete fH2Dir;
179  delete fAnalysisDir;
180 }
181 
182 //
183 // private functions
184 //
185 
186 //_____________________________________________________________________________
187 void G4AnalysisMessenger::CreateH1Cmd()
188 {
189  G4UIparameter* h1Name = new G4UIparameter("name", 's', false);
190  h1Name->SetGuidance("Histogram name (label)");
191 
192  G4UIparameter* h1Title = new G4UIparameter("title", 's', false);
193  h1Title->SetGuidance("Histogram title");
194 
195  G4UIparameter* h1Nbins0 = new G4UIparameter("nbins0", 'i', true);
196  h1Nbins0->SetGuidance("Number of bins (default = 100)");
197  h1Nbins0->SetGuidance("Can be reset with /analysis/h1/set command");
198  h1Nbins0->SetDefaultValue(100);
199 
200  G4UIparameter* h1ValMin0 = new G4UIparameter("valMin0", 'd', true);
201  h1ValMin0->SetGuidance("Minimum value, expressed in unit (default = 0.)");
202  h1ValMin0->SetGuidance("Can be reset with /analysis/h1/set command");
203  h1ValMin0->SetDefaultValue(0.);
204 
205  G4UIparameter* h1ValMax0 = new G4UIparameter("valMax0", 'd', true);
206  h1ValMax0->SetGuidance("Maximum value, expressed in unit (default = 1.)");
207  h1ValMax0->SetGuidance("Can be reset with /analysis/h1/set command");
208  h1ValMax0->SetDefaultValue(1.);
209 
210  G4UIparameter* h1ValUnit0 = new G4UIparameter("valUnit0", 's', true);
211  h1ValUnit0->SetGuidance("The unit of valMin0 and valMax0");
212  h1ValUnit0->SetDefaultValue("none");
213 
214  G4UIparameter* h1ValFcn0 = new G4UIparameter("valFcn0", 's', true);
215  G4String fcnGuidance = "The function applied to filled values (log, log10, exp).\n";
216  fcnGuidance += "Note that the unit parameter cannot be omitted in this case,\n";
217  fcnGuidance += "but none value should be used insted.";
218  h1ValFcn0->SetGuidance(fcnGuidance);
219  h1ValFcn0->SetParameterCandidates("log log10 exp none");
220  h1ValFcn0->SetDefaultValue("none");
221 
222  fCreateH1Cmd = new G4UIcommand("/analysis/h1/create", this);
223  fCreateH1Cmd->SetGuidance("Create 1D histogram");
224  fCreateH1Cmd->SetParameter(h1Name);
225  fCreateH1Cmd->SetParameter(h1Title);
226  fCreateH1Cmd->SetParameter(h1Nbins0);
227  fCreateH1Cmd->SetParameter(h1ValMin0);
228  fCreateH1Cmd->SetParameter(h1ValMax0);
229  fCreateH1Cmd->SetParameter(h1ValUnit0);
230  fCreateH1Cmd->SetParameter(h1ValFcn0);
232 }
233 
234 
235 //_____________________________________________________________________________
236 void G4AnalysisMessenger::SetH1Cmd()
237 {
238  G4UIparameter* h1Id = new G4UIparameter("id", 'i', false);
239  h1Id->SetGuidance("Histogram id");
240  h1Id->SetParameterRange("id>=0");
241 
242  G4UIparameter* h1Nbins = new G4UIparameter("nbins", 'i', false);
243  h1Nbins->SetGuidance("Number of bins");
244 
245  G4UIparameter* h1ValMin = new G4UIparameter("valMin", 'd', false);
246  h1ValMin->SetGuidance("Minimum value, expressed in unit");
247 
248  G4UIparameter* h1ValMax = new G4UIparameter("valMax", 'd', false);
249  h1ValMax->SetGuidance("Maximum value, expressed in unit");
250 
251  G4UIparameter* h1ValUnit = new G4UIparameter("valUnit", 's', true);
252  h1ValUnit->SetGuidance("The unit of valMin and valMax");
253  h1ValUnit->SetDefaultValue("none");
254 
255  G4UIparameter* h1ValFcn = new G4UIparameter("valFcn", 's', true);
256  h1ValFcn->SetParameterCandidates("log log10 exp none");
257  G4String fcnGuidance = "The function applied to filled values (log, log10, exp, none).\n";
258  fcnGuidance += "Note that the unit parameter cannot be omitted in this case,\n";
259  fcnGuidance += "but none value should be used insted.";
260  h1ValFcn->SetGuidance(fcnGuidance);
261  h1ValFcn->SetDefaultValue("none");
262 
263  fSetH1Cmd = new G4UIcommand("/analysis/h1/set", this);
264  fSetH1Cmd->SetGuidance("Set parameters for the 1D histogram of #Id :");
265  fSetH1Cmd->SetGuidance(" nbins; valMin; valMax; unit (of vmin and vmax)");
266  fSetH1Cmd->SetParameter(h1Id);
267  fSetH1Cmd->SetParameter(h1Nbins);
268  fSetH1Cmd->SetParameter(h1ValMin);
269  fSetH1Cmd->SetParameter(h1ValMax);
270  fSetH1Cmd->SetParameter(h1ValUnit);
271  fSetH1Cmd->SetParameter(h1ValFcn);
273 }
274 
275 //_____________________________________________________________________________
276 void G4AnalysisMessenger::SetH1TitleCmd()
277 {
278  G4UIparameter* h1Id = new G4UIparameter("idTitle", 'i', false);
279  h1Id->SetGuidance("Histogram id");
280  h1Id->SetParameterRange("idTitle>=0");
281 
282  G4UIparameter* h1Title = new G4UIparameter("h1Title", 's', true);
283  h1Title->SetGuidance("Histogram title");
284  h1Title->SetDefaultValue("none");
285 
286  fSetH1TitleCmd = new G4UIcommand("/analysis/h1/setTitle", this);
287  fSetH1TitleCmd->SetGuidance("Set title for the 1D histogram of #Id");
288  fSetH1TitleCmd->SetParameter(h1Id);
289  fSetH1TitleCmd->SetParameter(h1Title);
291 }
292 
293 //_____________________________________________________________________________
294 void G4AnalysisMessenger::SetH1XAxisCmd()
295 {
296  G4UIparameter* h1Id = new G4UIparameter("idXaxis", 'i', false);
297  h1Id->SetGuidance("Histogram id");
298  h1Id->SetParameterRange("idXaxis>=0");
299 
300  G4UIparameter* h1XAxis = new G4UIparameter("h1Xaxis", 's', true);
301  h1XAxis->SetGuidance("Histogram x-axis title");
302  h1XAxis->SetDefaultValue("none");
303 
304  fSetH1XAxisCmd = new G4UIcommand("/analysis/h1/setXaxis", this);
305  fSetH1XAxisCmd->SetGuidance("Set x-axis title for the 1D histogram of #Id");
306  fSetH1XAxisCmd->SetParameter(h1Id);
307  fSetH1XAxisCmd->SetParameter(h1XAxis);
309 }
310 
311 //_____________________________________________________________________________
312 void G4AnalysisMessenger::SetH1YAxisCmd()
313 {
314  G4UIparameter* h1Id = new G4UIparameter("idYaxis", 'i', false);
315  h1Id->SetGuidance("Histogram id");
316  h1Id->SetParameterRange("idYaxis>=0");
317 
318  G4UIparameter* h1YAxis = new G4UIparameter("h1Yaxis", 's', true);
319  h1YAxis->SetGuidance("Histogram y-axis title");
320  h1YAxis->SetDefaultValue("none");
321 
322  fSetH1YAxisCmd = new G4UIcommand("/analysis/h1/setYaxis", this);
323  fSetH1YAxisCmd->SetGuidance("Set y-axis title for the 1D histogram of #Id");
324  fSetH1YAxisCmd->SetParameter(h1Id);
325  fSetH1YAxisCmd->SetParameter(h1YAxis);
327 }
328 
329 //_____________________________________________________________________________
330 void G4AnalysisMessenger::SetH1ActivationCmd()
331 {
332  G4UIparameter* h1Id = new G4UIparameter("idActivation", 'i', false);
333  h1Id->SetGuidance("Histogram id");
334  h1Id->SetParameterRange("idActivation>=0");
335 
336  G4UIparameter* h1Activation = new G4UIparameter("h1Activation", 's', true);
337  h1Activation->SetGuidance("Histogram activation");
338  h1Activation->SetDefaultValue("none");
339 
340  fSetH1ActivationCmd = new G4UIcommand("/analysis/h1/setActivation", this);
341  fSetH1ActivationCmd->SetGuidance("Set activation for the 1D histogram of #Id");
342  fSetH1ActivationCmd->SetParameter(h1Id);
343  fSetH1ActivationCmd->SetParameter(h1Activation);
344  fSetH1ActivationCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
345 }
346 
347 //_____________________________________________________________________________
348 void G4AnalysisMessenger::CreateH2Cmd()
349 {
350  G4UIparameter* h2Name = new G4UIparameter("name", 's', false);
351  h2Name->SetGuidance("Histogram name (label)");
352 
353  G4UIparameter* h2Title = new G4UIparameter("title", 's', false);
354  h2Title->SetGuidance("Histogram title");
355 
356  G4UIparameter* h2xNbins0 = new G4UIparameter("xnbins0", 'i', true);
357  h2xNbins0->SetGuidance("Number of x-bins (default = 100)");
358  h2xNbins0->SetGuidance("Can be reset with /analysis/h2/set command");
359  h2xNbins0->SetDefaultValue(100);
360 
361  G4UIparameter* h2xValMin0 = new G4UIparameter("xvalMin0", 'd', true);
362  h2xValMin0->SetGuidance("Minimum x-value, expressed in unit (default = 0.)");
363  h2xValMin0->SetGuidance("Can be reset with /analysis/h2/set command");
364  h2xValMin0->SetDefaultValue(0.);
365 
366  G4UIparameter* h2xValMax0 = new G4UIparameter("xvalMax0", 'd', true);
367  h2xValMax0->SetGuidance("Maximum x-value, expressed in unit (default = 1.)");
368  h2xValMax0->SetGuidance("Can be reset with /analysis/h2/set command");
369  h2xValMax0->SetDefaultValue(1.);
370 
371  G4UIparameter* h2xValUnit0 = new G4UIparameter("xvalUnit0", 's', true);
372  h2xValUnit0->SetGuidance("The unit of xvalMin0 and xvalMax0");
373  h2xValUnit0->SetDefaultValue("none");
374 
375  G4UIparameter* h2xValFcn0 = new G4UIparameter("xvalFcn0", 's', true);
376  G4String fcnxGuidance = "The function applied to filled x-values (log, log10, exp, none).\n";
377  fcnxGuidance += "Note that the unit parameter cannot be omitted in this case,\n";
378  fcnxGuidance += "but none value should be used insted.";
379  h2xValFcn0->SetGuidance(fcnxGuidance);
380  h2xValFcn0->SetParameterCandidates("log log10 exp none");
381  h2xValFcn0->SetDefaultValue("none");
382 
383  G4UIparameter* h2yNbins0 = new G4UIparameter("ynbins0", 'i', true);
384  h2yNbins0->SetGuidance("Number of y-bins (default = 100)");
385  h2yNbins0->SetGuidance("Can be reset with /analysis/h2/set command");
386  h2yNbins0->SetDefaultValue(100);
387 
388  G4UIparameter* h2yValMin0 = new G4UIparameter("yvalMin0", 'd', true);
389  h2yValMin0->SetGuidance("Minimum y-value, expressed in unit (default = 0.)");
390  h2yValMin0->SetGuidance("Can be reset with /analysis/h2/set command");
391  h2yValMin0->SetDefaultValue(0.);
392 
393  G4UIparameter* h2yValMax0 = new G4UIparameter("yvalMax0", 'd', true);
394  h2yValMax0->SetGuidance("Maximum y-value, expressed in unit (default = 1.)");
395  h2yValMax0->SetGuidance("Can be reset with /analysis/h2/set command");
396  h2yValMax0->SetDefaultValue(1.);
397 
398  G4UIparameter* h2yValUnit0 = new G4UIparameter("yvalUnit0", 's', true);
399  h2yValUnit0->SetGuidance("The unit of xvalMin0 and yvalMax0");
400  h2yValUnit0->SetDefaultValue("none");
401 
402  G4UIparameter* h2yValFcn0 = new G4UIparameter("yvalFcn0", 's', true);
403  G4String fcnyGuidance = "The function applied to filled x-values (log, log10, exp, none).\n";
404  fcnyGuidance += "Note that the unit parameter cannot be omitted in this case,\n";
405  fcnyGuidance += "but none value should be used insted.";
406  h2yValFcn0->SetGuidance(fcnyGuidance);
407  h2yValFcn0->SetParameterCandidates("log log10 exp none");
408  h2yValFcn0->SetDefaultValue("none");
409 
410  fCreateH2Cmd = new G4UIcommand("/analysis/h2/create", this);
411  fCreateH2Cmd->SetGuidance("Create 2D histogram");
412  fCreateH2Cmd->SetParameter(h2Name);
413  fCreateH2Cmd->SetParameter(h2Title);
414  fCreateH2Cmd->SetParameter(h2xNbins0);
415  fCreateH2Cmd->SetParameter(h2xValMin0);
416  fCreateH2Cmd->SetParameter(h2xValMax0);
417  fCreateH2Cmd->SetParameter(h2xValUnit0);
418  fCreateH2Cmd->SetParameter(h2xValFcn0);
419  fCreateH2Cmd->SetParameter(h2yNbins0);
420  fCreateH2Cmd->SetParameter(h2yValMin0);
421  fCreateH2Cmd->SetParameter(h2yValMax0);
422  fCreateH2Cmd->SetParameter(h2yValUnit0);
423  fCreateH2Cmd->SetParameter(h2yValFcn0);
425 }
426 
427 
428 //_____________________________________________________________________________
429 void G4AnalysisMessenger::SetH2Cmd()
430 {
431  G4UIparameter* h2Id = new G4UIparameter("id", 'i', false);
432  h2Id->SetGuidance("Histogram id");
433  h2Id->SetParameterRange("id>=0");
434 
435  G4UIparameter* h2xNbins = new G4UIparameter("xnbins", 'i', false);
436  h2xNbins->SetGuidance("Number of x-bins");
437 
438  G4UIparameter* h2xValMin = new G4UIparameter("xvalMin", 'd', false);
439  h2xValMin->SetGuidance("Minimum x-value, expressed in unit");
440 
441  G4UIparameter* h2xValMax = new G4UIparameter("xvalMax", 'd', false);
442  h2xValMax->SetGuidance("Maximum x-value, expressed in unit");
443 
444  G4UIparameter* h2xValFcn = new G4UIparameter("xvalFcn", 's', false);
445  h2xValFcn->SetParameterCandidates("log log10 exp none");
446  G4String fcnxGuidance = "The function applied to filled x-values (log, log10, exp, none).\n";
447  fcnxGuidance += "Note that the unit parameter cannot be omitted in this case,\n";
448  fcnxGuidance += "but none value should be used insted.";
449  h2xValFcn->SetGuidance(fcnxGuidance);
450  h2xValFcn->SetDefaultValue("none");
451 
452  G4UIparameter* h2yValUnit = new G4UIparameter("yvalUnit", 's', false);
453  h2yValUnit->SetGuidance("The unit of yvalMin and yvalMax");
454  h2yValUnit->SetDefaultValue("none");
455 
456  G4UIparameter* h2yNbins = new G4UIparameter("nybins", 'i', false);
457  h2yNbins->SetGuidance("Number of y-bins");
458 
459  G4UIparameter* h2yValMin = new G4UIparameter("yvalMin", 'd', false);
460  h2yValMin->SetGuidance("Minimum y-value, expressed in unit");
461 
462  G4UIparameter* h2yValMax = new G4UIparameter("yvalMax", 'd', false);
463  h2yValMax->SetGuidance("Maximum y-value, expressed in unit");
464 
465  G4UIparameter* h2xValUnit = new G4UIparameter("xvalUnit", 's', true);
466  h2xValUnit->SetGuidance("The unit of xvalMin and xvalMax");
467  h2xValUnit->SetDefaultValue("none");
468 
469  G4UIparameter* h2yValFcn = new G4UIparameter("yvalFcn", 's', false);
470  h2yValFcn->SetParameterCandidates("log log10 exp none");
471  G4String fcnyGuidance = "The function applied to filled y-values (log, log10, exp, none).\n";
472  fcnyGuidance += "Note that the unit parameter cannot be omitted in this case,\n";
473  fcnyGuidance += "but none value should be used insted.";
474  h2yValFcn->SetGuidance(fcnyGuidance);
475  h2yValFcn->SetDefaultValue("none");
476 
477  fSetH2Cmd = new G4UIcommand("/analysis/h2/set", this);
478  fSetH2Cmd->SetGuidance("Set parameters for the 2D histogram of #Id :");
479  fSetH2Cmd->SetGuidance(" nbins; valMin; valMax; unit (of vmin and vmax)");
480  fSetH2Cmd->SetParameter(h2Id);
481  fSetH2Cmd->SetParameter(h2xNbins);
482  fSetH2Cmd->SetParameter(h2xValMin);
483  fSetH2Cmd->SetParameter(h2xValMax);
484  fSetH2Cmd->SetParameter(h2xValUnit);
485  fSetH2Cmd->SetParameter(h2xValFcn);
486  fSetH2Cmd->SetParameter(h2yNbins);
487  fSetH2Cmd->SetParameter(h2yValMin);
488  fSetH2Cmd->SetParameter(h2yValMax);
489  fSetH2Cmd->SetParameter(h2yValUnit);
490  fSetH2Cmd->SetParameter(h2yValFcn);
492 }
493 
494 //_____________________________________________________________________________
495 void G4AnalysisMessenger::SetH2TitleCmd()
496 {
497  G4UIparameter* h2Id = new G4UIparameter("idTitle", 'i', false);
498  h2Id->SetGuidance("Histogram id");
499  h2Id->SetParameterRange("idTitle>=0");
500 
501  G4UIparameter* h2Title = new G4UIparameter("h2Title", 's', true);
502  h2Title->SetGuidance("Histogram title");
503  h2Title->SetDefaultValue("none");
504 
505  fSetH2TitleCmd = new G4UIcommand("/analysis/h2/setTitle", this);
506  fSetH2TitleCmd->SetGuidance("Set title for the 2D histogram of #Id");
507  fSetH2TitleCmd->SetParameter(h2Id);
508  fSetH2TitleCmd->SetParameter(h2Title);
510 }
511 
512 //_____________________________________________________________________________
513 void G4AnalysisMessenger::SetH2XAxisCmd()
514 {
515  G4UIparameter* h2Id = new G4UIparameter("idXaxis", 'i', false);
516  h2Id->SetGuidance("Histogram id");
517  h2Id->SetParameterRange("idXaxis>=0");
518 
519  G4UIparameter* h2XAxis = new G4UIparameter("h2Xaxis", 's', true);
520  h2XAxis->SetGuidance("Histogram x-axis title");
521  h2XAxis->SetDefaultValue("none");
522 
523  fSetH2XAxisCmd = new G4UIcommand("/analysis/h2/setXaxis", this);
524  fSetH2XAxisCmd->SetGuidance("Set x-axis title for the 2D histogram of #Id");
525  fSetH2XAxisCmd->SetParameter(h2Id);
526  fSetH2XAxisCmd->SetParameter(h2XAxis);
528 }
529 
530 //_____________________________________________________________________________
531 void G4AnalysisMessenger::SetH2YAxisCmd()
532 {
533  G4UIparameter* h2Id = new G4UIparameter("idYaxis", 'i', false);
534  h2Id->SetGuidance("Histogram id");
535  h2Id->SetParameterRange("idYaxis>=0");
536 
537  G4UIparameter* h2YAxis = new G4UIparameter("h2Yaxis", 's', true);
538  h2YAxis->SetGuidance("Histogram y-axis title");
539  h2YAxis->SetDefaultValue("none");
540 
541  fSetH2YAxisCmd = new G4UIcommand("/analysis/h2/setYaxis", this);
542  fSetH2YAxisCmd->SetGuidance("Set y-axis title for the 2D histogram of #Id");
543  fSetH2YAxisCmd->SetParameter(h2Id);
544  fSetH2YAxisCmd->SetParameter(h2YAxis);
546 }
547 
548 //_____________________________________________________________________________
549 void G4AnalysisMessenger::SetH2ZAxisCmd()
550 {
551  G4UIparameter* h2Id = new G4UIparameter("idYaxis", 'i', false);
552  h2Id->SetGuidance("Histogram id");
553  h2Id->SetParameterRange("idYaxis>=0");
554 
555  G4UIparameter* h2YAxis = new G4UIparameter("h2Yaxis", 's', true);
556  h2YAxis->SetGuidance("Histogram y-axis title");
557  h2YAxis->SetDefaultValue("none");
558 
559  fSetH2ZAxisCmd = new G4UIcommand("/analysis/h2/setYaxis", this);
560  fSetH2ZAxisCmd->SetGuidance("Set y-axis title for the 2D histogram of #Id");
561  fSetH2ZAxisCmd->SetParameter(h2Id);
562  fSetH2ZAxisCmd->SetParameter(h2YAxis);
564 }
565 
566 //_____________________________________________________________________________
567 void G4AnalysisMessenger::SetH2ActivationCmd()
568 {
569  G4UIparameter* h2Id = new G4UIparameter("idActivation", 'i', false);
570  h2Id->SetGuidance("Histogram id");
571  h2Id->SetParameterRange("idActivation>=0");
572 
573  G4UIparameter* h2Activation = new G4UIparameter("h2Activation", 's', true);
574  h2Activation->SetGuidance("Histogram activation");
575  h2Activation->SetDefaultValue("none");
576 
577  fSetH2ActivationCmd = new G4UIcommand("/analysis/h2/setActivation", this);
578  fSetH2ActivationCmd->SetGuidance("Set activation for the 2D histogram of #Id");
579  fSetH2ActivationCmd->SetParameter(h2Id);
580  fSetH2ActivationCmd->SetParameter(h2Activation);
581  fSetH2ActivationCmd->AvailableForStates(G4State_PreInit, G4State_Idle);
582 }
583 
584 //_____________________________________________________________________________
586 {
587  if ( command == fSetFileNameCmd ) {
588  G4cout << "Set file name: " << newValues << G4endl;
589  fManager->SetFileName(newValues);
590  }
591  else if ( command == fSetHistoDirNameCmd ) {
592  fManager->SetHistoDirectoryName(newValues);
593  }
594  else if ( command == fSetNtupleDirNameCmd ) {
595  fManager->SetNtupleDirectoryName(newValues);
596  }
597  else if ( command == fSetActivationCmd ) {
598  fManager->SetActivation(fSetActivationCmd->GetNewBoolValue(newValues));
599  }
600  else if ( command == fVerboseCmd ) {
601  fManager->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValues));
602  }
603  else if ( command == fCreateH1Cmd ) {
605  G4int nbins;
606  G4double vmin,vmax;
607  G4String sunit;
608  G4String sfcn;
609  std::istringstream is(newValues.data());
610  is >> name >> title >> nbins >> vmin >> vmax >> sunit >> sfcn;
611  fManager->CreateH1(name, title, nbins, vmin, vmax, sunit, sfcn);
612  }
613  else if ( command == fSetH1Cmd ) {
614  G4int id;
615  G4int nbins;
616  G4double vmin, vmax;
617  G4String sunit;
618  G4String sfcn;
619  std::istringstream is(newValues.data());
620  is >> id >> nbins >> vmin >> vmax >> sunit >> sfcn;
621  fManager->SetH1(id, nbins, vmin, vmax, sunit, sfcn);
622  }
623  else if ( command == fSetH1AsciiCmd ) {
624  G4int id = fSetH1AsciiCmd->GetNewIntValue(newValues);
625  fManager->SetAscii(G4VAnalysisManager::kH1, id, true);
626  }
627  else if ( command == fSetH1TitleCmd ) {
628  G4int id;
629  G4String title;
630  std::istringstream is(newValues.data());
631  is >> id;
632  getline(is, title);
633  fManager->SetH1Title(id, title);
634  }
635  else if ( command == fSetH1XAxisCmd ) {
636  G4int id;
637  G4String xaxis;
638  std::istringstream is(newValues.data());
639  is >> id;
640  getline(is, xaxis);
641  fManager->SetH1XAxisTitle(id, xaxis);
642  }
643  else if ( command == fSetH1YAxisCmd ) {
644  G4int id;
645  G4String yaxis;
646  std::istringstream is(newValues.data());
647  is >> id;
648  getline(is, yaxis);
649  fManager->SetH1YAxisTitle(id, yaxis);
650  }
651  else if ( command == fSetH1ActivationCmd ) {
652  G4int id;
653  G4String sactivation;
654  std::istringstream is(newValues.data());
655  is >> id >> sactivation;
656  G4bool activation = G4UIcommand::ConvertToBool(sactivation);
657  fManager->SetActivation(G4VAnalysisManager::kH1, id, activation);
658  }
659  else if ( command == fSetH1ActivationAllCmd ) {
660  G4bool activation = fSetH1ActivationAllCmd->GetNewBoolValue(newValues);
661  fManager->SetActivation(G4VAnalysisManager::kH1, activation);
662  }
663  else if ( command == fCreateH2Cmd ) {
665  G4int xnbins, ynbins;
666  G4double xvmin, xvmax, yvmin, yvmax;
667  G4String xsunit,xsfcn, ysunit, ysfcn;
668  std::istringstream is(newValues.data());
669  is >> name >> title
670  >> xnbins >> xvmin >> xvmax >> xsunit >> xsfcn
671  >> ynbins >> yvmin >> yvmax >> ysunit >> ysfcn;
672  fManager->CreateH2(name, title,
673  xnbins, xvmin, xvmax, ynbins, yvmin, yvmax,
674  ysunit, ysfcn, ysunit, ysfcn);
675  }
676  else if ( command == fSetH2Cmd ) {
677  G4int id;
678  G4int xnbins, ynbins;
679  G4double xvmin, xvmax, yvmin, yvmax;
680  G4String xsunit,xsfcn, ysunit, ysfcn;
681  std::istringstream is(newValues.data());
682  is >> id
683  >> xnbins >> xvmin >> xvmax >> xsunit >> xsfcn
684  >> ynbins >> yvmin >> yvmax >> ysunit >> ysfcn;
685  fManager->SetH2(id,
686  xnbins, xvmin, xvmax, ynbins, yvmin, yvmax,
687  ysunit, ysfcn, ysunit, ysfcn);
688  }
689  else if ( command == fSetH2AsciiCmd ) {
690  G4int id = fSetH2AsciiCmd->GetNewIntValue(newValues);
691  fManager->SetAscii(G4VAnalysisManager::kH2, id, true);
692  }
693  else if ( command == fSetH2TitleCmd ) {
694  G4int id;
695  G4String title;
696  std::istringstream is(newValues.data());
697  is >> id;
698  getline(is, title);
699  fManager->SetH2Title(id, title);
700  }
701  else if ( command == fSetH2XAxisCmd ) {
702  G4int id;
703  G4String xaxis;
704  std::istringstream is(newValues.data());
705  is >> id;
706  getline(is, xaxis);
707  fManager->SetH2XAxisTitle(id, xaxis);
708  }
709  else if ( command == fSetH2YAxisCmd ) {
710  G4int id;
711  G4String yaxis;
712  std::istringstream is(newValues.data());
713  is >> id;
714  getline(is, yaxis);
715  fManager->SetH2YAxisTitle(id, yaxis);
716  }
717  else if ( command == fSetH2ZAxisCmd ) {
718  G4int id;
719  G4String zaxis;
720  std::istringstream is(newValues.data());
721  is >> id;
722  getline(is, zaxis);
723  fManager->SetH2ZAxisTitle(id, zaxis);
724  }
725  else if ( command == fSetH2ActivationCmd ) {
726  G4int id;
727  G4String sactivation;
728  std::istringstream is(newValues.data());
729  is >> id >> sactivation;
730  G4bool activation = G4UIcommand::ConvertToBool(sactivation);
731  fManager->SetActivation(G4VAnalysisManager::kH2, id, activation);
732  }
733  else if ( command == fSetH2ActivationAllCmd ) {
734  G4bool activation = fSetH2ActivationAllCmd->GetNewBoolValue(newValues);
735  fManager->SetActivation(G4VAnalysisManager::kH2, activation);
736  }
737 }