Jpp master_rocky-44-g75b7c4f75
the software that should make you happy
Loading...
Searching...
No Matches
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
17namespace JROOT {}
18namespace JPP { using namespace JROOT; }
19
20namespace 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 */
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>
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(...);
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 &)
static const bool result
true if TTree parameters available; else false
Data structure for TTree parameters.
int getBasketSize() const
Get basket size.
const JTreeParameters & getTreeParameters() const
Get TTree parameters.
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.
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 & getBranchName() const
Get TBranch name.
TString treeTitle
TTree title.
const TString & getTreeTitle() const
Get TTree title.
const TString & getTreeName() const
Get TTree name.
int compressionLevel
TBranch compression level.
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.
JTreeParameters getTreeParameters()
Template definition for method returning TTree parameters.
Auxiliary class for no type definition.
Definition JNullType.hh:19
Auxiliary class for a type holder.
Definition JType.hh:19