Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4NtupleMessenger.hh
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// The messenger class for ntuple management.
28// It implements commands in /analysis/ntuple directory.
29// It is asscoiciated with G4VAnalysisManager and this delegates
30// call to both ntuple booking and ntuple managers.
31//
32// Author: Ivana Hrivnacova, 05/05/2015 (ivana@ipno.in2p3.fr)
33
34#ifndef G4NtupleMessenger_h
35#define G4NtupleMessenger_h 1
36
38#include "G4UImessenger.hh"
39#include "globals.hh"
40
41#include <map>
42#include <memory>
43#include <string_view>
44
46class G4UIcommand;
49
51{
52 public:
53 explicit G4NtupleMessenger(G4VAnalysisManager* manager);
56
57 // Methods
58 void SetNewValue(G4UIcommand* command, G4String value) final;
59
60 private:
61 // Methods
62 template <typename CMD>
63 std::unique_ptr<CMD> CreateCommand(G4String name, G4String guidance);
64 void AddIdParameter(G4UIcommand& command);
65
66 void CreateCmd();
67 void CreateColumnCmds();
68 void FinishCmd();
69 void DeleteCmd();
70 void SetActivationCmd();
71 void SetActivationToAllCmd();
72 void SetFileNameCmd();
73 void SetFileNameToAllCmd();
74 void ListCmd();
75
76 // Static data members
77 static constexpr std::string_view fkClass { "G4NtupleMessenger" };
78
79 // Data members
80 G4VAnalysisManager* fManager { nullptr }; ///< Associated class
81
82 std::unique_ptr<G4UIdirectory> fNtupleDir;
83 std::unique_ptr<G4UIcommand> fCreateCmd;
84 std::map<char, std::unique_ptr<G4UIcommand>> fCreateColumnCmds;
85 std::unique_ptr<G4UIcommand> fFinishCmd;
86 std::unique_ptr<G4UIcommand> fDeleteCmd;
87 std::unique_ptr<G4UIcommand> fSetActivationCmd;
88 std::unique_ptr<G4UIcmdWithABool> fSetActivationAllCmd;
89 std::unique_ptr<G4UIcommand> fSetFileNameCmd;
90 std::unique_ptr<G4UIcmdWithAString> fSetFileNameAllCmd;
91 std::unique_ptr<G4UIcommand> fListCmd;
92 G4int fTmpNtupleId { G4Analysis::kInvalidId };
93};
94
95//_____________________________________________________________________________
96template <typename CMD>
97std::unique_ptr<CMD> G4NtupleMessenger::CreateCommand(
98 G4String name, G4String guidance)
99{
100 G4String fullName = "/analysis/ntuple/" + name;
101
102 auto command = std::make_unique<CMD>(fullName, this);
103 command->SetGuidance(guidance.c_str());
104 command->AvailableForStates(G4State_PreInit, G4State_Idle);
105
106 return command;
107}
108
109#endif
@ G4State_Idle
@ G4State_PreInit
int G4int
Definition G4Types.hh:85
void SetNewValue(G4UIcommand *command, G4String value) final
~G4NtupleMessenger() override
G4NtupleMessenger()=delete
constexpr G4int kInvalidId
const char * name(G4int ptype)