Geant4 11.1.1
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 fSetActivationCmd = CreateCommand<G4UIcmdWithABool>(
71 "setActivation",
72 "Set activation. \n"
73 "When this option is enabled, only the histograms marked as activated\n"
74 "are returned, filled or saved on file.\n"
75 "No warning is issued when Get or Fill is called on inactive histogram.",
76 "Activation");
77
78 fVerboseCmd = CreateCommand<G4UIcmdWithAnInteger>(
79 "verbose", "Set verbose level", "VerboseLevel");
80 fVerboseCmd->SetRange("VerboseLevel>=0 && VerboseLevel<=4");
81
82 fCompressionCmd = CreateCommand<G4UIcmdWithAnInteger>(
83 "compression", "Set compression level", "CompressionLevel");
84 fCompressionCmd->SetRange("CompressionLevel>=0 && CompressionLevel<=4");
85
86 fSetFileNameCmd = CreateCommand<G4UIcmdWithAString>(
87 "setFileName", "Set name for the histograms & ntuple file", "Filename");
88
89 fSetHistoDirNameCmd = CreateCommand<G4UIcmdWithAString>(
90 "setHistoDirName", "Set name for the histograms directory", "HistoDirName");
91
92 fSetNtupleDirNameCmd = CreateCommand<G4UIcmdWithAString>(
93 "setNtupleDirName", "Set name for the ntuple directory", "NtupleDirName");
94
95 fNtupleMessenger = std::make_unique<G4NtupleMessenger>(manager);
96}
97
98//_____________________________________________________________________________
100
101//
102// private functions
103//
104
105
106//_____________________________________________________________________________
107std::unique_ptr<G4UIcmdWithoutParameter>
108G4AnalysisMessenger::CreateCommandWithoutParameter(
109 G4String name, G4String guidance)
110{
111 G4String fullName = "/analysis/" + name;
112
113 auto command = std::make_unique<G4UIcmdWithoutParameter>(fullName, this);
114 command->SetGuidance(guidance.c_str());
115 command->AvailableForStates(G4State_PreInit, G4State_Idle);
116
117 return command;
118}
119
120//
121// public functions
122//
123
124//_____________________________________________________________________________
126{
127 if ( command == fOpenFileCmd.get() ) {
128 // G4cout << "Calling OpenFile from command for " << fManager << G4endl;
129 fManager->OpenFile(newValues);
130 return;
131 }
132
133 if ( command == fWriteCmd.get() ) {
134 fManager->WriteFromUI();
135 return;
136 }
137
138 if ( command == fResetCmd.get() ) {
139 fManager->ResetFromUI();
140 return;
141 }
142
143 if ( command == fCloseFileCmd.get() ) {
144 fManager->CloseFileFromUI(fCloseFileCmd->GetNewBoolValue(newValues));
145 return;
146 }
147
148 if ( command == fListCmd.get() ) {
149 fManager->List(fListCmd->GetNewBoolValue(newValues));
150 return;
151 }
152
153 if ( command == fSetActivationCmd.get() ) {
154 fManager->SetActivation(fSetActivationCmd->GetNewBoolValue(newValues));
155 return;
156 }
157
158 if ( command == fVerboseCmd.get() ) {
159 fManager->SetVerboseLevel(fVerboseCmd->GetNewIntValue(newValues));
160 return;
161 }
162
163 if ( command == fCompressionCmd.get() ) {
164 fManager->SetCompressionLevel(fCompressionCmd->GetNewIntValue(newValues));
165 return;
166 }
167
168 if ( command == fSetFileNameCmd.get() ) {
169 fManager->SetFileName(newValues);
170 return;
171 }
172
173 if ( command == fSetHistoDirNameCmd.get() ) {
174 fManager->SetHistoDirectoryName(newValues);
175 return;
176 }
177
178 if ( command == fSetNtupleDirNameCmd.get() ) {
179 fManager->SetNtupleDirectoryName(newValues);
180 return;
181 }
182}
@ 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)