Jpp  17.0.0-rc.1
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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
int compressionLevel
TBranch compression level.
const TString & getBranchName() const
Get TBranch name.
JTreeParameters(const TString &treeName, const TString &treeTitle, const TString &branchName="", const int compressionLevel=1, const int basketSize=65536, const int splitLevel=1)
Constructor.
Test availability of TTree parameters for given class.
TString treeName
TTree name.
int getCompressionLevel() const
Get compression level.
Auxiliary class for a type holder.
Definition: JType.hh:19
int getSplitLevel() const
Get split level.
const JTreeParameters & getTreeParameters() const
Get TTree parameters.
TString branchName
TBranch name.
const TString & getTreeTitle() const
Get TTree title.
Auxiliary base class for compile time evaluation of test.
Definition: JTest.hh:21
return result
Definition: JPolint.hh:743
Auxiliary class for no type definition.
Definition: JNullType.hh:19
int basketSize
TBranch basket size.
int splitLevel
TBranch split level.
int getBasketSize() const
Get basket size.
Data structure for TTree parameters.
friend std::ostream & operator<<(std::ostream &out, const JTreeParameters &object)
Write TTree parameters to output.
const TString & getTreeName() const
Get TTree name.
TString treeTitle
TTree title.