Geant4-11
G4TRNtupleManager.icc
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, 20/07/2017 (ivana@ipno.in2p3.fr)
28
29#include "G4AnalysisManagerState.hh"
30#include "G4AnalysisUtilities.hh"
31
32using std::to_string;
33
34//_____________________________________________________________________________
35template <typename NT>
36G4TRNtupleManager<NT>::G4TRNtupleManager(const G4AnalysisManagerState& state)
37 : G4BaseRNtupleManager(state)
38{}
39
40//_____________________________________________________________________________
41template <typename NT>
42G4TRNtupleManager<NT>::~G4TRNtupleManager()
43{
44 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
45 delete ntupleDescription;
46 }
47}
48
49//
50// private methods
51//
52
53//_____________________________________________________________________________
54template <typename NT>
55G4TRNtupleDescription<NT>*
56G4TRNtupleManager<NT>::GetNtupleDescriptionInFunction(
57 G4int id, std::string_view functionName, G4bool warn) const
58{
59 G4int index = id - fFirstId;
60 if ( index < 0 || index >= G4int(fNtupleDescriptionVector.size()) ) {
61 if ( warn) {
62 G4Analysis::Warn("ntuple " + to_string(id) + " does not exist.",
63 fkClass, functionName);
64 }
65 return nullptr;
66 }
67
68 return fNtupleDescriptionVector[index];
69}
70
71//_____________________________________________________________________________
72template <typename NT>
73template <typename T>
74G4bool
75G4TRNtupleManager<NT>::SetNtupleTColumn(
76 G4int ntupleId, const G4String& columnName, T& value)
77{
78 Message(G4Analysis::kVL4, "set", "ntuple T column",
79 " ntupleId " + to_string(ntupleId) + " " + columnName);
80
81 auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "SetNtupleTColumn");
82 if ( ! ntupleDescription ) return false;
83
84 auto ntupleBinding = ntupleDescription->fNtupleBinding;
85 ntupleBinding->add_column(columnName, value);
86
87 Message(G4Analysis::kVL2, "set", "ntuple T column",
88 " ntupleId " + to_string(ntupleId) + " " + columnName);
89
90 return true;
91}
92
93//_____________________________________________________________________________
94template <typename NT>
95template <typename T>
96G4bool
97G4TRNtupleManager<NT>::SetNtupleTColumn(
98 G4int ntupleId, const G4String& columnName, std::vector<T>& vector)
99{
100 Message(G4Analysis::kVL4, "set", "ntuple T column",
101 " ntupleId " + to_string(ntupleId) + " " + columnName);
102
103 auto ntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "SetNtupleTColumn");
104 if ( ! ntupleDescription ) return false;
105
106 auto ntupleBinding = ntupleDescription->fNtupleBinding;
107 ntupleBinding->add_column(columnName, vector);
108
109 Message(G4Analysis::kVL2, "set", "ntuple T column",
110 " ntupleId " + to_string(ntupleId) + " " + columnName);
111
112
113 return true;
114}
115
116//
117// protected methods
118//
119
120//_____________________________________________________________________________
121template <typename NT>
122G4bool G4TRNtupleManager<NT>::IsEmpty() const
123{
124 return ! fNtupleDescriptionVector.size();
125}
126
127//_____________________________________________________________________________
128template <typename NT>
129G4bool G4TRNtupleManager<NT>::Reset()
130{
131// Reset ntuples
132
133 for ( auto ntupleDescription : fNtupleDescriptionVector ) {
134 delete ntupleDescription->fNtuple;
135 ntupleDescription->fNtuple=nullptr;
136 }
137 return true;
138}
139
140//_____________________________________________________________________________
141template <typename NT>
142NT*
143G4TRNtupleManager<NT>::GetNtuple() const
144{
145 return GetNtuple(fFirstId);
146}
147
148//_____________________________________________________________________________
149template <typename NT>
150NT*
151G4TRNtupleManager<NT>::GetNtuple(
152 G4int ntupleId) const
153{
154 auto rntupleDescription = GetNtupleDescriptionInFunction(ntupleId, "GetNtuple");
155
156 if ( ! rntupleDescription ) return nullptr;
157
158 return rntupleDescription->fNtuple;
159}
160
161//_____________________________________________________________________________
162template <typename NT>
163G4int G4TRNtupleManager<NT>::SetNtuple(
164 G4TRNtupleDescription<NT>* rntupleDescription)
165{
166 G4int id = fNtupleDescriptionVector.size() + fFirstId;
167
168 fNtupleDescriptionVector.push_back(rntupleDescription);
169
170 return id;
171}
172
173//_____________________________________________________________________________
174template <typename NT>
175G4bool
176G4TRNtupleManager<NT>::SetNtupleIColumn(
177 G4int ntupleId, const G4String& columnName, G4int& value)
178{
179 return SetNtupleTColumn<int>(ntupleId, columnName, value);
180}
181
182//_____________________________________________________________________________
183template <typename NT>
184G4bool
185G4TRNtupleManager<NT>::SetNtupleFColumn(
186 G4int ntupleId, const G4String& columnName, G4float& value)
187{
188 return SetNtupleTColumn<float>(ntupleId, columnName, value);
189}
190
191//_____________________________________________________________________________
192template <typename NT>
193G4bool
194G4TRNtupleManager<NT>::SetNtupleDColumn(
195 G4int ntupleId, const G4String& columnName, G4double& value)
196{
197 return SetNtupleTColumn<double>(ntupleId, columnName, value);
198}
199
200//_____________________________________________________________________________
201template <typename NT>
202G4bool
203G4TRNtupleManager<NT>::SetNtupleIColumn(
204 G4int ntupleId, const G4String& columnName, std::vector<G4int>& vector)
205{
206 return SetNtupleTColumn<int>(ntupleId, columnName, vector);
207}
208
209//_____________________________________________________________________________
210template <typename NT>
211G4bool
212G4TRNtupleManager<NT>::SetNtupleFColumn(
213 G4int ntupleId, const G4String& columnName, std::vector<G4float>& vector)
214{
215 return SetNtupleTColumn<float>(ntupleId, columnName, vector);
216}
217
218//_____________________________________________________________________________
219template <typename NT>
220G4bool
221G4TRNtupleManager<NT>::SetNtupleDColumn(
222 G4int ntupleId, const G4String& columnName, std::vector<G4double>& vector)
223{
224 return SetNtupleTColumn<double>(ntupleId, columnName, vector);
225}
226
227//_____________________________________________________________________________
228template <typename NT>
229G4bool
230G4TRNtupleManager<NT>::SetNtupleSColumn(
231 G4int ntupleId, const G4String& columnName, G4String& value)
232{
233 return SetNtupleTColumn<std::string>(ntupleId, columnName, value);
234}
235
236//_____________________________________________________________________________
237template <typename NT>
238G4bool
239G4TRNtupleManager<NT>::SetNtupleSColumn(
240 G4int ntupleId, const G4String& columnName, std::vector<std::string>& vector)
241{
242 return SetNtupleTColumn<std::string>(ntupleId, columnName, vector);
243}
244
245//_____________________________________________________________________________
246template <typename NT>
247G4bool G4TRNtupleManager<NT>::GetNtupleRow(G4int ntupleId)
248{
249 Message(G4Analysis::kVL4, "get", "ntuple row",
250 "ntupleId " + to_string(ntupleId));
251
252 auto ntupleDescription
253 = GetNtupleDescriptionInFunction(ntupleId, "GetNtupleRow");
254 if ( ! ntupleDescription ) return false;
255
256 auto next = GetTNtupleRow(ntupleDescription);
257
258 Message(G4Analysis::kVL2, "get", "ntuple row",
259 "ntupleId " + to_string(ntupleId));
260
261 return next;
262}
263
264
265//_____________________________________________________________________________
266template <typename NT>
267G4int
268G4TRNtupleManager<NT>::GetNofNtuples() const
269{
270 return G4int(fNtupleDescriptionVector.size());
271}
272
273