Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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
27// Author: Ivana Hrivnacova, 24/06/2013 ([email protected])
28
30#include "G4VAnalysisManager.hh"
31#include "G4NtupleMessenger.hh"
32
33#include "G4UIcmdWithABool.hh"
35#include "G4UIcmdWithAString.hh"
37#include "G4Threading.hh"
38
39using namespace G4Analysis;
40
41//_____________________________________________________________________________
43 : fManager(manager)
44{
45 fAnalysisDir = std::make_unique<G4UIdirectory>("/analysis/");
46 fAnalysisDir->SetGuidance("analysis control");
47
48 fOpenFileCmd = CreateCommand<G4UIcmdWithAString>(
49 "openFile", "Open analysis file", "FileName", true);
50 fOpenFileCmd->SetDefaultValue("");
51 fOpenFileCmd->SetToBeBroadcasted(true);
52
53 fWriteCmd = CreateCommandWithoutParameter(
54 "write", "Write analysis data.");
55 fWriteCmd->SetToBeBroadcasted(false);
56
57 fResetCmd = CreateCommandWithoutParameter(
58 "reset", "Reset analysis data.");
59 fResetCmd->SetToBeBroadcasted(false);
60
61 fCloseFileCmd = CreateCommand<G4UIcmdWithABool>(
62 "closeFile", "Close analysis file and (optionally) reset data.", "IsReset", true);
63 fCloseFileCmd->SetDefaultValue(true);
64 fCloseFileCmd->SetToBeBroadcasted(false);
65
66 fListCmd = CreateCommand<G4UIcmdWithABool>(
67 "list", "List all/activate analysis objects.", "OnlyIfActive", true);
68 fListCmd->SetDefaultValue(true);
69
70 fSetDefaultFileTypeCmd = CreateCommand<G4UIcmdWithAString>(
71 "setDefaultFileType", "Set default output file type", "DefaultFileType", false);
72#ifdef TOOLS_USE_HDF5
73 fSetDefaultFileTypeCmd->SetCandidates("csv hdf5 root xml");
74#else
75 fSetDefaultFileTypeCmd->SetCandidates("csv root xml");
76#endif
77
78 fSetActivationCmd = CreateCommand<G4UIcmdWithABool>(
79 "setActivation",
80 "Set activation. \n"
81 "When this option is enabled, only the histograms marked as activated\n"
82 "are returned, filled or saved on file.\n"
83 "No warning is issued when Get or Fill is called on inactive histogram.",
84 "Activation");
85
86 fVerboseCmd = CreateCommand<G4UIcmdWithAnInteger>(
87 "verbose", "Set verbose level", "VerboseLevel");
88 fVerboseCmd->SetRange("VerboseLevel>=0 && VerboseLevel<=4");
89
90 fCompressionCmd = CreateCommand<G4UIcmdWithAnInteger>(
91 "compression", "Set compression level", "CompressionLevel");
92 fCompressionCmd->SetRange("CompressionLevel>=0 && CompressionLevel<=4");
93
94 fSetFileNameCmd = CreateCommand<G4UIcmdWithAString>(
95 "setFileName", "Set name for the histograms & ntuple file", "Filename");
96
97 fSetHistoDirNameCmd = CreateCommand<G4UIcmdWithAString>(
98 "setHistoDirName", "Set name for the histograms directory", "HistoDirName");
99
100 fSetNtupleDirNameCmd = CreateCommand<G4UIcmdWithAString>(
101 "setNtupleDirName", "Set name for the ntuple directory", "NtupleDirName");
102
103 fNtupleMessenger = std::make_unique<G4NtupleMessenger>(manager);
104}
105
106//_____________________________________________________________________________
108
109//
110// private functions
111//
112
113
114//_____________________________________________________________________________
115std::unique_ptr<G4UIcmdWithoutParameter>
116G4AnalysisMessenger::CreateCommandWithoutParameter(
117 G4String name, G4String guidance)
118{
119 G4String fullName = "/analysis/" + name;
120
121 auto command = std::make_unique<G4UIcmdWithoutParameter>(fullName, this);
122 command->SetGuidance(guidance.c_str());
123 command->AvailableForStates(G4State_PreInit, G4State_Idle);
124
125 return command;
126}
127
128//
129// public functions
130//
131
132//_____________________________________________________________________________
134{
135 if ( command == fOpenFileCmd.get() ) {
136 // G4cout << "Calling OpenFile from command for " << fManager << G4endl;
137 fManager->OpenFile(newValues);
138 return;
139 }
140
141 if ( command == fWriteCmd.get() ) {
142 fManager->WriteFromUI();
143 return;
144 }
145
146 if ( command == fResetCmd.get() ) {
147 fManager->ResetFromUI();
148 return;
149 }
150
151 if ( command == fCloseFileCmd.get() ) {
152 fManager->CloseFileFromUI(fCloseFileCmd->GetNewBoolValue(newValues));
153 return;
154 }
155
156 if ( command == fListCmd.get() ) {
157 fManager->List(fListCmd->GetNewBoolValue(newValues));
158 return;
159 }
160
161 if ( command == fSetDefaultFileTypeCmd.get() ) {
162 fManager->SetDefaultFileType(newValues);
163 return;
164 }
165
166 if ( command == fSetActivationCmd.get() ) {
167 fManager->SetActivation(fSetActivationCmd->GetNewBoolValue(newValues));
168 return;
169 }
170
171 if ( command == fVerboseCmd.get() ) {
172 fManager->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValues));
173 return;
174 }
175
176 if ( command == fCompressionCmd.get() ) {
177 fManager->SetCompressionLevel(fCompressionCmd->GetNewIntValue(newValues));
178 return;
179 }
180
181 if ( command == fSetFileNameCmd.get() ) {
182 fManager->SetFileName(newValues);
183 return;
184 }
185
186 if ( command == fSetHistoDirNameCmd.get() ) {
187 fManager->SetHistoDirectoryName(newValues);
188 return;
189 }
190
191 if ( command == fSetNtupleDirNameCmd.get() ) {
192 fManager->SetNtupleDirectoryName(newValues);
193 return;
194 }
195}
@ G4State_Idle
@ G4State_PreInit
G4AnalysisMessenger()=delete
~G4AnalysisMessenger() override
void SetNewValue(G4UIcommand *command, G4String value) final
void SetActivation(G4bool activation)
G4bool OpenFile(const G4String &fileName="")
G4bool SetHistoDirectoryName(const G4String &dirName)
void SetVerboseLevel(G4int verboseLevel)
G4bool List(G4bool onlyIfActive=true) const
G4bool SetFileName(const G4String &fileName)
void SetCompressionLevel(G4int level)
G4bool SetNtupleDirectoryName(const G4String &dirName)
void SetDefaultFileType(const G4String &value)