ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/HbbAnalysis/interface/TFileDirectory.hh
Revision: 1.1
Committed: Fri Oct 2 11:05:52 2009 UTC (15 years, 7 months ago) by amagnan
Content type: text/plain
Branch: MAIN
CVS Tags: v00-05-00, HbbAnaFor35X, v00-04-02, v00-04-01, v00-04-00
Log Message:
add histos classes to fill from tree

File Contents

# Content
1 #ifndef _TFileDirectory_hh
2 #define _TFileDirectory_hh
3
4 #include <string>
5
6 #include "TFile.h"
7 #include "TH1.h"
8
9 namespace HbbAnalysis {
10
11 class TH1AddDirectorySentry {
12
13 public:
14 TH1AddDirectorySentry():
15 status_(TH1::AddDirectoryStatus())
16 {
17 TH1::AddDirectory(true);
18 };
19 ~TH1AddDirectorySentry()
20 {
21 TH1::AddDirectory(status_);
22 };
23
24
25 private:
26 TH1AddDirectorySentry(const TH1AddDirectorySentry&);
27 TH1AddDirectorySentry& operator=(const TH1AddDirectorySentry&);
28 bool status_;
29
30 };
31
32 class TFileDirectory {
33
34 public:
35
36 TFileDirectory( TFile * file, const std::string & path );
37
38 /// descructor
39 virtual ~TFileDirectory() { };
40 /// make new ROOT object
41 template<typename T>
42 T * make() const {
43 TH1AddDirectorySentry sentry;
44 cd(); return new T();
45 }
46 /// make new ROOT object
47 template<typename T, typename Arg1>
48 T * make( const Arg1 & a1 ) const {
49 TH1AddDirectorySentry sentry;
50 cd(); return new T( a1 );
51 }
52 /// make new ROOT object
53 template<typename T, typename Arg1, typename Arg2>
54 T * make( const Arg1 & a1, const Arg2 & a2 ) const {
55 TH1AddDirectorySentry sentry;
56 cd(); return new T( a1, a2 );
57 }
58 /// make new ROOT object
59 template<typename T, typename Arg1, typename Arg2, typename Arg3>
60 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3 ) const {
61 TH1AddDirectorySentry sentry;
62 cd(); return new T( a1, a2, a3 );
63 }
64 /// make new ROOT object
65 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
66 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4 ) const {
67 TH1AddDirectorySentry sentry;
68 cd(); return new T( a1, a2, a3, a4 );
69 }
70 /// make new ROOT object
71 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
72 typename Arg5>
73 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
74 const Arg5 & a5 ) const {
75 TH1AddDirectorySentry sentry;
76 cd(); return new T( a1, a2, a3, a4, a5 );
77 }
78 /// make new ROOT object
79 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
80 typename Arg5, typename Arg6>
81 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
82 const Arg5 & a5, const Arg6 & a6 ) const {
83 TH1AddDirectorySentry sentry;
84 cd(); return new T( a1, a2, a3, a4, a5, a6 );
85 }
86 /// make new ROOT object
87 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
88 typename Arg5, typename Arg6, typename Arg7>
89 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
90 const Arg5 & a5, const Arg6 & a6, const Arg7 & a7 ) const {
91 TH1AddDirectorySentry sentry;
92 cd(); return new T( a1, a2, a3, a4, a5, a6, a7 );
93 }
94 /// make new ROOT object
95 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
96 typename Arg5, typename Arg6, typename Arg7, typename Arg8>
97 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
98 const Arg5 & a5, const Arg6 & a6, const Arg7 & a7, const Arg8 & a8 ) const {
99 TH1AddDirectorySentry sentry;
100 cd(); return new T( a1, a2, a3, a4, a5, a6, a7, a8 );
101 }
102 /// make new ROOT object
103 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
104 typename Arg5, typename Arg6, typename Arg7, typename Arg8,
105 typename Arg9>
106 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
107 const Arg5 & a5, const Arg6 & a6, const Arg7 & a7, const Arg8 & a8,
108 const Arg9 & a9 ) const {
109 TH1AddDirectorySentry sentry;
110 cd(); return new T( a1, a2, a3, a4, a5, a6, a7, a8, a9 );
111 }
112 /// make new ROOT object
113 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
114 typename Arg5, typename Arg6, typename Arg7, typename Arg8,
115 typename Arg9, typename Arg10>
116 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
117 const Arg5 & a5, const Arg6 & a6, const Arg7 & a7, const Arg8 & a8,
118 const Arg9 & a9, const Arg10 & a10 ) const {
119 TH1AddDirectorySentry sentry;
120 cd(); return new T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 );
121 }
122 /// make new ROOT object
123 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
124 typename Arg5, typename Arg6, typename Arg7, typename Arg8,
125 typename Arg9, typename Arg10, typename Arg11>
126 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
127 const Arg5 & a5, const Arg6 & a6, const Arg7 & a7, const Arg8 & a8,
128 const Arg9 & a9, const Arg10 & a10, const Arg11 & a11 ) const {
129 TH1AddDirectorySentry sentry;
130 cd(); return new T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11 );
131 }
132 /// make new ROOT object
133 template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4,
134 typename Arg5, typename Arg6, typename Arg7, typename Arg8,
135 typename Arg9, typename Arg10, typename Arg11, typename Arg12>
136 T * make( const Arg1 & a1, const Arg2 & a2, const Arg3 & a3, const Arg4 & a4,
137 const Arg5 & a5, const Arg6 & a6, const Arg7 & a7, const Arg8 & a8,
138 const Arg9 & a9, const Arg10 & a10, const Arg11 & a11, const Arg12 & a12 ) const {
139 TH1AddDirectorySentry sentry;
140 cd(); return new T( a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12 );
141 }
142 /// create a new subdirectory
143 TFileDirectory mkdir( const std::string & dir,
144 const std::string & descr = "" );
145
146 private:
147
148 TFileDirectory( const std::string & dir, const std::string & descr,
149 TFile * file, const std::string & path ):
150 file_( file ), dir_(dir), descr_(descr), path_( path )
151 {
152 };
153
154 TFile * file_;
155 std::string dir_, descr_, path_;
156 std::string fullPath() const;
157 void cd() const;
158
159
160
161 };
162
163 }//namespace
164
165 #endif