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

# User Rev Content
1 amagnan 1.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