Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4RootPNtupleManager.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// Class for Root pntuple management.
28//
29// Author: Ivana Hrivnacova, 04/10/2016 (ivana@ipno.in2p3.fr)
30
31#ifndef G4RootPNtupleManager_h
32#define G4RootPNtupleManager_h 1
33
39#include "G4AutoLock.hh"
40#include "globals.hh"
41
42#include <vector>
43#include <string_view>
44
46
47namespace tools {
48namespace wroot {
49class file;
50class ntuple;
51class imt_ntuple;
52}
53}
54
55// Mutex implementation as in pwroot.cpp
56// with replacement tools::mutex -> G4Mutex
57
58class mutex : public virtual tools::wroot::imutex {
59 using parent = tools::wroot::imutex;
60public:
61 bool lock() override
62 {
63 // G4cout << "!!! Mutex lock" << G4endl;
64 m_mutex.lock();
65 return true;
66 }
67 bool unlock() override
68 {
70 // G4cout << "!!! Mutex unlock" << G4endl;
71 return true;
72 }
73 //virtual bool trylock() {return m_mutex.trylock();}
74public:
75 mutex(G4AutoLock& a_mutex):m_mutex(a_mutex){}
76 ~mutex() override = default;
77
78protected:
79 mutex(const mutex& a_from) = default;
80 mutex& operator=(const mutex&){return *this;}
81protected:
83};
84
86{
89
90 public:
92 std::shared_ptr<G4NtupleBookingManager> bookingManger,
93 std::shared_ptr<G4RootMainNtupleManager> main,
94 G4bool rowWise, G4bool rowMode);
96 ~G4RootPNtupleManager() override;
97
98 private:
99 // Methods to manipulate ntuples
100 void CreateNtupleFromMain(G4RootPNtupleDescription* ntupleDescription,
101 tools::wroot::ntuple* mainNtuple);
102 void CreateNtupleDescriptionsFromBooking();
103 void CreateNtuplesFromMain();
104 void CreateNtuplesIfNeeded();
105
106 // Methods to create ntuples
107 //
108 G4int CreateNtuple(G4NtupleBooking* booking) final;
109
110 // Methods to fill ntuples
111 // Methods for ntuple with id = FirstNtupleId (from base class)
117 // Methods for ntuple with id > FirstNtupleId (when more ntuples exist)
118 G4bool FillNtupleIColumn(G4int ntupleId, G4int columnId, G4int value) final;
119 G4bool FillNtupleFColumn(G4int ntupleId, G4int columnId, G4float value) final;
120 G4bool FillNtupleDColumn(G4int ntupleId, G4int columnId, G4double value) final;
121 G4bool FillNtupleSColumn(G4int ntupleId, G4int columnId, const G4String& value) final;
122 G4bool AddNtupleRow(G4int ntupleId) final;
123 virtual G4bool Merge() final;
124
125 virtual G4bool Reset();
126 void Clear() final;
127
128 // Activation option
129 //
130 void SetActivation(G4bool activation) final;
131 void SetActivation(G4int ntupleId, G4bool activation) final;
132 G4bool GetActivation(G4int ntupleId) const final;
133
134 // New cycle option
135 void SetNewCycle(G4bool value) final;
136 G4bool GetNewCycle() const final;
137
138 // Access methods
139 G4int GetNofNtuples() const final;
140
141 // Set methods
142 void SetNtupleRowWise(G4bool rowWise, G4bool rowMode);
143
144 // List ntuples
145 G4bool List(std::ostream& output, G4bool onlyIfActive = true) final;
146
147 private:
149 GetNtupleDescriptionInFunction(G4int id, std::string_view function, G4bool warn = true) const;
150 tools::wroot::base_pntuple*
151 GetNtupleInFunction(G4int id, std::string_view function, G4bool warn = true) const;
152 tools::wroot::ntuple*
153 GetMainNtupleInFunction(G4int id, std::string_view function, G4bool warn = true) const;
154
155 template <typename T>
156 G4bool FillNtupleTColumn(G4int ntupleId, G4int columnId, const T& value);
157
158 template <typename T>
159 G4bool FillNtupleTColumn(G4int columnId, const T& value);
160
161 // Static data members
162 static constexpr std::string_view fkClass { "G4RootPNtupleManager" };
163
164 // Data members
165 std::shared_ptr<G4NtupleBookingManager> fBookingManager;
166 std::shared_ptr<G4RootMainNtupleManager> fMainNtupleManager;
167 std::vector<G4RootPNtupleDescription*> fNtupleDescriptionVector;
168 std::vector<tools::wroot::imt_ntuple*> fNtupleVector;
169 G4bool fRowWise;
170 G4bool fRowMode;
171 G4bool fCreateNtuples { true };
172 G4bool fNewCycle { false };
173};
174
175#include "G4RootPNtupleManager.icc"
176
177#endif
G4double(*)(G4double) function
float G4float
Definition: G4Types.hh:84
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4bool FillNtupleSColumn(G4int id, const G4String &value) final
G4bool FillNtupleFColumn(G4int id, G4float value) final
G4bool FillNtupleDColumn(G4int id, G4double value) final
G4bool FillNtupleIColumn(G4int id, G4int value) final
G4bool AddNtupleRow() final
G4RootPNtupleManager()=delete
mutex & operator=(const mutex &)
~mutex() override=default
mutex(G4AutoLock &a_mutex)
mutex(const mutex &a_from)=default
bool unlock() override
bool lock() override
G4AutoLock & m_mutex