Jpp  master_rocky
the software that should make you happy
JTreeParameters.hh
Go to the documentation of this file.
1 #ifndef __JROOT__JTREEPARAMETERS__
2 #define __JROOT__JTREEPARAMETERS__
3 
4 #include <ostream>
5 #include <iomanip>
6 
7 #include "TString.h"
8 
9 #include "JLang/JType.hh"
10 #include "JLang/JNullType.hh"
11 
12 
13 /**
14  * \author mdejong
15  */
16 
17 namespace JROOT {}
18 namespace JPP { using namespace JROOT; }
19 
20 namespace JROOT {
21 
22  using JLANG::JType;
23  using JLANG::JNullType;
24 
25 
26  /**
27  * Data structure for TTree parameters.
28  */
30  public:
31  /**
32  * Constructor.
33  *
34  * \param treeName TTree name
35  * \param treeTitle TTree title
36  * \param branchName TBranch name
37  * \param compressionLevel TBranch compression level
38  * \param basketSize TBranch basket size
39  * \param splitLevel TBranch split level
40  */
41  JTreeParameters(const TString& treeName,
42  const TString& treeTitle,
43  const TString& branchName = "",
44  const int compressionLevel = 1,
45  const int basketSize = 65536,
46  const int splitLevel = 1)
47 
48  {
49  this->treeName = treeName;
50  this->treeTitle = treeTitle;
51  this->branchName = branchName;
53  this->basketSize = basketSize;
54  this->splitLevel = splitLevel;
55  }
56 
57 
58  /**
59  * Get TTree parameters.
60  *
61  * \return TTree parameters
62  */
63  inline const JTreeParameters& getTreeParameters() const
64  {
65  return static_cast<const JTreeParameters&>(*this);
66  }
67 
68 
69  /**
70  * Get TTree name.
71  *
72  * \return TTree name
73  */
74  const TString& getTreeName() const
75  {
76  return treeName;
77  }
78 
79 
80  /**
81  * Get TTree title.
82  *
83  * \return TTree title
84  */
85  const TString& getTreeTitle() const
86  {
87  return treeTitle;
88  }
89 
90 
91  /**
92  * Get TBranch name.
93  *
94  * \return TBranch name
95  */
96  const TString& getBranchName() const
97  {
98  return (branchName != "" ? branchName : treeName);
99  }
100 
101 
102  /**
103  * Get compression level.
104  *
105  * \return compression level
106  */
107  int getCompressionLevel() const
108  {
109  return compressionLevel;
110  }
111 
112 
113  /**
114  * Get basket size.
115  *
116  * \return basket size
117  */
118  int getBasketSize() const
119  {
120  return basketSize;
121  }
122 
123 
124  /**
125  * Get split level.
126  *
127  * \return split level
128  */
129  int getSplitLevel() const
130  {
131  return splitLevel;
132  }
133 
134 
135  /**
136  * Write TTree parameters to output.
137  *
138  * \param out output stream
139  * \param object TTree parameters
140  * \return output stream
141  */
142  friend inline std::ostream& operator<<(std::ostream& out, const JTreeParameters& object)
143  {
144  using namespace std;
145 
146  return out << setw(24) << left << object.getTreeName() << right << ' '
147  << setw(24) << left << object.getBranchName() << right << ' '
148  << setw(1) << object.getCompressionLevel() << ' '
149  << setw(8) << object.getBasketSize() << ' '
150  << setw(1) << object.getSplitLevel();
151  }
152 
153 
154  protected:
155  TString treeName; //!< TTree name
156  TString treeTitle; //!< TTree title
157  TString branchName; //!< TBranch name
158  int compressionLevel; //!< TBranch compression level
159  int basketSize; //!< TBranch basket size
160  int splitLevel; //!< TBranch split level
161  };
162 
163 
164  /**
165  * Template definition for method returning TTree parameters.
166  * The template argument refers to the class for which ROOT TTree I/O is desired.
167  *
168  * \return TTree parameters
169  */
170  template<class T>
172  {
173  return getTreeParameters(JType<T>());
174  }
175 
176 
177  /**
178  * Method with argument definition for obtaining TTree parameters.
179  * The method argument refers to the class for which ROOT TTree I/O is desired.
180  * This method should then be overloaded and the overloaded method should
181  * return a JTreeParameters object with the corresponding TTree parameters.
182  *
183  * \param type data type
184  * \return TTree parameters
185  */
186  template<class T>
187  inline JNullType getTreeParameters(const JType<T>& type);
188 
189 
190  /**
191  * Test availability of TTree parameters for given class.
192  *
193  * The parameter result evaluates to true if for this class TTree parameters are defined.
194  */
195  template<class T>
197  {
198  private:
199 
200  class JSmall { char buffer; };
201  class JBig { int buffer; };
202 
203  static JBig JTest(...);
204  static JSmall JTest(const JTreeParameters&);
205 
206  public:
207  static const bool result = sizeof(JTest(getTreeParameters(JType<T>()))) == sizeof(JSmall); //!< true if TTree parameters available; else false
208  };
209 }
210 
211 #endif
Test availability of TTree parameters for given class.
static JSmall JTest(const JTreeParameters &)
Data structure for TTree parameters.
int getBasketSize() const
Get basket size.
const TString & getBranchName() const
Get TBranch name.
friend std::ostream & operator<<(std::ostream &out, const JTreeParameters &object)
Write TTree parameters to output.
int getCompressionLevel() const
Get compression level.
int basketSize
TBranch basket size.
int getSplitLevel() const
Get split level.
int splitLevel
TBranch split level.
TString branchName
TBranch name.
const TString & getTreeName() const
Get TTree name.
JTreeParameters(const TString &treeName, const TString &treeTitle, const TString &branchName="", const int compressionLevel=1, const int basketSize=65536, const int splitLevel=1)
Constructor.
const TString & getTreeTitle() const
Get TTree title.
TString treeTitle
TTree title.
int compressionLevel
TBranch compression level.
const JTreeParameters & getTreeParameters() const
Get TTree parameters.
TString treeName
TTree name.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for ROOT I/O.
Definition: JSTDTypes.hh:14
Auxiliary class for no type definition.
Definition: JNullType.hh:19
Auxiliary base class for compile time evaluation of test.
Definition: JTest.hh:21
Auxiliary class for a type holder.
Definition: JType.hh:19