PandaRoot
RhoColumn.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 #ifndef RHOCOLUMN_H
14 #define RHOCOLUMN_H
15 // //
17 // RhoColumn //
18 // //
19 // Nested class hierarchy to hold information about TTuple columns. //
20 // //
21 // Author List: //
22 // Marcel Kunze, RUB, Mar. 99 //
23 // Apr.2001 (MK), Inherit from TNamed to support THashList //
24 // Copyright (C) 1999-2001, Ruhr-University Bochum. //
25 // Ralf Kliemt, HIM/GSI Feb.2013 (Cleanup & Restructuring) //
26 // //
28 
29 #include "TNamed.h"
30 #include "TString.h"
31 #include "TVector.h"
32 
33 class TTree;
34 class TBranch;
35 
36 #ifndef RhoHTRange_HH
37 #define RhoHTRange_HH
38 
39 template <class T>
40 class RhoHTRange {
41 
42  //--------------------
43  // Declarations --
44  //--------------------
45 
46  // Typedefs, consts, and enums
47 
48  //--------------------
49  // Instance Members --
50  //--------------------
51 
52  public:
53  // Constructors
54  RhoHTRange() : fDefined(kFALSE), fLower(0), fUpper(0) {}
55 
56  RhoHTRange(T lowerv, T upperv) : fDefined(kTRUE), fLower(lowerv), fUpper(upperv) {}
57 
58  // Copy Constructor
59  RhoHTRange(const RhoHTRange<T> &o) : fDefined(o.fDefined), fLower(o.fLower), fUpper(o.fUpper) {}
60 
61  // Destructor
62  virtual ~RhoHTRange() {}
63 
64  // Operators
65 
67  {
68  if (&o == this) {
69  return *this;
70  }
71  fDefined = o.fDefined;
72  fLower = o.fLower;
73  fUpper = o.fUpper;
74  return *this;
75  }
76 
77  // Selectors (const)
78  Bool_t operator()() const { return fDefined; }
79 
80  // get upper/lower limits
81  T lower() const { return fLower; }
82  T upper() const { return fUpper; }
83 
84  // Modifiers
85 
86  protected:
87  // Helper functions
88 
89  private:
90  // Friends
91 
92  // Data members
93  Bool_t fDefined;
94  T fLower, fUpper;
95 };
96 #endif
97 
98 #ifndef RhoHTAbsValVector_HH
99 #define RhoHTAbsValVector_HH
100 
101 template <class T>
103 
104  public:
105  // This must return the number of the stored elements
106  virtual size_t length() const = 0;
107  virtual ~RhoHTAbsValVector(){};
108  // This provides access to the indifidual elements.
109  // Index runs from 0 to length()-1. Here () means that we do not requre
110  // index checking from it, though the real classe may do what they like.
111  virtual const T &operator()(size_t i) const = 0;
112 };
113 #endif
114 
115 // Parent class (abstract):
116 class RhoColumn : public TNamed {
117  public:
118  RhoColumn(const char *l) : TNamed(l, l), fLabel(l), fUseDefValue(0), fPointer(nullptr), fBranch(nullptr) {}
119  virtual ~RhoColumn() {}
120  const TString &GetLabel() const { return fLabel; }
121  TBranch *GetBrPointer() { return fBranch; }
122  void *GetPointer() { return fPointer; }
123  void SetPointer(void *p) { fPointer = p; }
124  void SetUseDefValue(Int_t b) { fUseDefValue = b; }
125  const Int_t &GetUseDefValue() const { return fUseDefValue; }
126  virtual void SetDefValue() = 0;
127  virtual void SetValue(const void *, RhoColumn *cp = nullptr) = 0;
128 
129  protected:
130  TString fLabel;
132  void *fPointer;
133  TBranch *fBranch;
134 };
135 
136 // Classes for Bool_t:
137 class RhoBoolColumn : public RhoColumn {
138  public:
139  RhoBoolColumn(const char *, const Bool_t &, const Bool_t &, TTree *);
140  virtual ~RhoBoolColumn() { delete (Bool_t *)fPointer; }
141  virtual void SetDefValue() { *(Char_t *)fPointer = fDefValue; }
142  virtual void SetValue(const void *p, RhoColumn *) { *(Char_t *)fPointer = *(const Bool_t *)p; }
143 
144  private:
145  Bool_t fDefValue;
146 };
147 
148 class RhoBoolArrColumn : public RhoColumn {
149  public:
150  RhoBoolArrColumn(const char *, const RhoHTAbsValVector<Bool_t> &, const Bool_t &, TTree *);
151  virtual ~RhoBoolArrColumn() { delete[](Bool_t *) fPointer; }
152  virtual void SetDefValue()
153  {
154  for (Int_t i = 0; i < fMax; ++i) {
155  ((Char_t *)fPointer)[i] = fDefValue;
156  }
157  }
158  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
159 
160  private:
161  Bool_t fDefValue;
162  Int_t fMax;
163 };
164 
166  public:
167  RhoBoolDynArrColumn(const char *, const RhoHTAbsValVector<Bool_t> &, const Bool_t &, RhoColumn *, TTree *);
168  virtual ~RhoBoolDynArrColumn() { delete[](Bool_t *) fPointer; }
169  virtual void SetDefValue();
170  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
171 
172  private:
173  Bool_t fDefValue;
174  RhoColumn *fIndexPtr;
175 };
176 
177 // Classes for Int_t:
178 class RhoIntColumn : public RhoColumn {
179  public:
180  RhoIntColumn(const char *, const Int_t &, const Int_t &, TTree *);
181  virtual ~RhoIntColumn() { delete (Int_t *)fPointer; }
182  virtual void SetDefValue() { *(Int_t *)fPointer = fDefValue; }
183  virtual void SetValue(const void *p, RhoColumn *) { *(Int_t *)fPointer = *(const Int_t *)p; }
184 
185  private:
186  Int_t fDefValue;
187 };
188 
189 class RhoIntArrColumn : public RhoColumn {
190  public:
191  RhoIntArrColumn(const char *, const RhoHTAbsValVector<Int_t> &, const Int_t &, TTree *);
192  virtual ~RhoIntArrColumn() { delete[](Int_t *) fPointer; }
193  virtual void SetDefValue()
194  {
195  for (Int_t i = 0; i < fMax; ++i) {
196  ((Int_t *)fPointer)[i] = fDefValue;
197  }
198  }
199  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
200 
201  private:
202  Int_t fDefValue;
203  Int_t fMax;
204 };
205 
207  public:
208  RhoIntDynArrColumn(const char *, const RhoHTAbsValVector<Int_t> &, const Int_t &, RhoColumn *, TTree *);
209  virtual ~RhoIntDynArrColumn() { delete[](Int_t *) fPointer; }
210  virtual void SetDefValue();
211  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
212 
213  private:
214  Int_t fDefValue;
215  RhoColumn *fIndexPtr;
216 };
217 
218 // Classes for Float_t:
219 class RhoFloatColumn : public RhoColumn {
220  public:
221  RhoFloatColumn(const char *, const Float_t &, const Float_t &, TTree *);
222  virtual ~RhoFloatColumn() { delete (Float_t *)fPointer; }
223  virtual void SetDefValue() { *(Float_t *)fPointer = fDefValue; }
224  virtual void SetValue(const void *p, RhoColumn *) { *(Float_t *)fPointer = *(const Float_t *)p; }
225 
226  private:
227  Float_t fDefValue;
228 };
229 
230 class RhoFloatArrColumn : public RhoColumn {
231  public:
232  RhoFloatArrColumn(const char *, const RhoHTAbsValVector<Float_t> &, const Float_t &, TTree *);
233  RhoFloatArrColumn(const char *, const TVector &, const Float_t &, TTree *);
234  virtual ~RhoFloatArrColumn() { delete[](Float_t *) fPointer; }
235  virtual void SetDefValue()
236  {
237  for (Int_t i = 0; i < fMax; ++i) {
238  ((Float_t *)fPointer)[i] = fDefValue;
239  }
240  }
241  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
242 
243  private:
244  Float_t fDefValue;
245  Int_t fMax;
246 };
247 
249  public:
250  RhoFloatDynArrColumn(const char *, const RhoHTAbsValVector<Float_t> &, const Float_t &, RhoColumn *, TTree *);
251  RhoFloatDynArrColumn(const char *, const TVector &, const Float_t &, RhoColumn *, TTree *);
252  virtual ~RhoFloatDynArrColumn() { delete[](Float_t *) fPointer; }
253  virtual void SetDefValue();
254  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
255 
256  private:
257  Float_t fDefValue;
258  RhoColumn *fIndexPtr;
259 };
260 
261 // Classes for Double_t:
262 class RhoDoubleColumn : public RhoColumn {
263  public:
264  RhoDoubleColumn(const char *, const Double_t &, const Double_t &, TTree *);
265  virtual ~RhoDoubleColumn() { delete (Double_t *)fPointer; }
266  virtual void SetDefValue() { *(Double_t *)fPointer = fDefValue; }
267  virtual void SetValue(const void *p, RhoColumn *) { *(Double_t *)fPointer = *(const Double_t *)p; }
268 
269  private:
270  Double_t fDefValue;
271 };
272 
274  public:
275  RhoDoubleArrColumn(const char *, const RhoHTAbsValVector<Double_t> &, const Double_t &, TTree *);
276  virtual ~RhoDoubleArrColumn() { delete[](Double_t *) fPointer; }
277  virtual void SetDefValue()
278  {
279  for (Int_t i = 0; i < fMax; ++i) {
280  ((Double_t *)fPointer)[i] = fDefValue;
281  }
282  }
283  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
284 
285  private:
286  Double_t fDefValue;
287  Int_t fMax;
288 };
289 
291  public:
292  RhoDoubleDynArrColumn(const char *, const RhoHTAbsValVector<Double_t> &, const Double_t &, RhoColumn *, TTree *);
293  virtual ~RhoDoubleDynArrColumn() { delete[](Double_t *) fPointer; }
294  virtual void SetDefValue();
295  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
296 
297  private:
298  Double_t fDefValue;
299  RhoColumn *fIndexPtr;
300 };
301 
302 // String column:
303 class RhoStringColumn : public RhoColumn {
304  public:
305  RhoStringColumn(const TString &, const TString &, const TString &, TTree *);
306  virtual ~RhoStringColumn() { delete[](TString *) fPointer; }
307  virtual void SetDefValue();
308  virtual void SetValue(const void *, RhoColumn *cp = nullptr);
309 
310  private:
311  TString fDefValue;
312 };
313 
314 #endif
RhoHTRange< T > & operator=(const RhoHTRange< T > &o)
Definition: RhoColumn.h:66
virtual ~RhoIntArrColumn()
Definition: RhoColumn.h:192
virtual void SetValue(const void *p, RhoColumn *)
Definition: RhoColumn.h:267
virtual void SetDefValue()
Definition: RhoColumn.h:223
RhoHTRange()
Definition: RhoColumn.h:54
virtual ~RhoFloatArrColumn()
Definition: RhoColumn.h:234
virtual void SetValue(const void *p, RhoColumn *)
Definition: RhoColumn.h:142
virtual void SetValue(const void *p, RhoColumn *)
Definition: RhoColumn.h:224
RhoColumn(const char *l)
Definition: RhoColumn.h:118
virtual ~RhoBoolColumn()
Definition: RhoColumn.h:140
TBranch * fBranch
Definition: RhoColumn.h:133
virtual void SetDefValue()
Definition: RhoColumn.h:235
Int_t fUseDefValue
Definition: RhoColumn.h:131
unsigned int i
Definition: P4_F32vec4.h:33
virtual ~RhoDoubleArrColumn()
Definition: RhoColumn.h:276
T lower() const
Definition: RhoColumn.h:81
virtual ~RhoHTRange()
Definition: RhoColumn.h:62
const Int_t & GetUseDefValue() const
Definition: RhoColumn.h:125
virtual void SetDefValue()
Definition: RhoColumn.h:277
void SetUseDefValue(Int_t b)
Definition: RhoColumn.h:124
virtual ~RhoDoubleColumn()
Definition: RhoColumn.h:265
virtual void SetDefValue()
Definition: RhoColumn.h:152
TBranch * GetBrPointer()
Definition: RhoColumn.h:121
void * GetPointer()
Definition: RhoColumn.h:122
TString fLabel
Definition: RhoColumn.h:130
virtual ~RhoBoolArrColumn()
Definition: RhoColumn.h:151
virtual ~RhoIntDynArrColumn()
Definition: RhoColumn.h:209
virtual ~RhoStringColumn()
Definition: RhoColumn.h:306
virtual void SetDefValue()
Definition: RhoColumn.h:266
virtual void SetDefValue()
Definition: RhoColumn.h:141
void SetPointer(void *p)
Definition: RhoColumn.h:123
virtual ~RhoBoolDynArrColumn()
Definition: RhoColumn.h:168
virtual ~RhoFloatColumn()
Definition: RhoColumn.h:222
virtual void SetDefValue()
Definition: RhoColumn.h:182
const TString & GetLabel() const
Definition: RhoColumn.h:120
virtual void SetDefValue()
Definition: RhoColumn.h:193
virtual ~RhoColumn()
Definition: RhoColumn.h:119
virtual void SetValue(const void *p, RhoColumn *)
Definition: RhoColumn.h:183
void * fPointer
Definition: RhoColumn.h:132
RhoHTRange(const RhoHTRange< T > &o)
Definition: RhoColumn.h:59
virtual ~RhoIntColumn()
Definition: RhoColumn.h:181
RhoHTRange(T lowerv, T upperv)
Definition: RhoColumn.h:56
T upper() const
Definition: RhoColumn.h:82
virtual ~RhoHTAbsValVector()
Definition: RhoColumn.h:107
virtual ~RhoFloatDynArrColumn()
Definition: RhoColumn.h:252
virtual ~RhoDoubleDynArrColumn()
Definition: RhoColumn.h:293
Bool_t operator()() const
Definition: RhoColumn.h:78