ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/VHbbAnalysisCode/interface/tools.h
Revision: 1.2
Committed: Wed Aug 15 22:37:47 2012 UTC (12 years, 8 months ago) by grimes
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +37 -0 lines
Log Message:
Long overdue commit with several new files

File Contents

# User Rev Content
1 grimes 1.1 #ifndef trkupgradeanalysis_tools_h
2     #define trkupgradeanalysis_tools_h
3    
4     #include <memory> // required for std::auto_ptr
5     #include <string>
6     #include <utility> // required for std::pair
7 grimes 1.2 #include <map>
8 grimes 1.1
9     // Forward declarations
10     class TFile;
11     class TH1F;
12 grimes 1.2 class TTree;
13     class TDirectory;
14 grimes 1.1
15     namespace trkupgradeanalysis
16     {
17     namespace tools
18     {
19    
20     /** @brief Class to automatically clean up a TFile when it goes out of scope.
21     *
22     * Since I'm using exceptions I need something to keep track of the open TFile
23     * that is exception safe. I can't use auto_ptr class directly because I want
24     * the "Close" method to be called before deletion.
25     *
26     * I'm not sure if inheriting from auto_ptr is a good idea. I'll give it a go
27     * and see what happens.
28     *
29     * @author Mark Grimes (mark.grimes@bristol.ac.uk)
30     * @date 27/Apr/2012
31     */
32     class TFile_auto_ptr : public std::auto_ptr<TFile>
33     {
34     public:
35     TFile_auto_ptr( const std::string& filename );
36     ~TFile_auto_ptr();
37     bool operator==( const TFile* pOtherFile );
38     };
39    
40    
41    
42 grimes 1.2 /** @brief Class to simplify getting entries from a TTree.
43     *
44     * @author Mark Grimes (mark.grimes@bristol.ac.uk)
45     * @date 07/Jul/2012
46     */
47     class NTupleRow
48     {
49     public:
50     NTupleRow( TTree* pTree );
51     const double& getDouble( const std::string& name ) const;
52     bool nextRow();
53     void returnToStart();
54     protected:
55     std::map<std::string,double> branchAddresses_;
56     TTree* pTree_;
57     int maxCandidateNumber_;
58     int candidateNumber_;
59     };
60    
61    
62    
63 grimes 1.1 /** @brief Uses linear interpolation of two points to find and x value that corresponds to the supplied requiredY.
64     *
65     * @param[in] point1 The first point to interpolate between, with x as the first member and y as the second.
66     * @param[in] point2 The second point to interpolate between, with x as the first member and y as the second.
67     * @param[in] requiredY The y value for the interpolated point you want to find the x value for.
68     * @return The x value for the point with y=requiredY on the straight line between point1 and point2
69     *
70     * @author Mark Grimes (mark.grimes@bristol.ac.uk)
71     * @date 30/Apr/2012
72     */
73     float linearInterpolate( std::pair<float,float> point1, std::pair<float,float> point2, float requiredY );
74    
75    
76    
77     /** @brief Calculates the btag operating point that would give the requested tag efficiency.
78     *
79     * Finds the two histogram bins either side of the requested efficiency and then uses linear
80     * interpolation between the two to get the operating point.
81     *
82     * @param[in] pEventsVersusDiscriminatorHistogram The histogram of number of events versus btag discriminator to calculate from.
83     * @param[in] requiredEfficiency The efficiency that you want an operating point for.
84     * @param[in] verbose (Defaults to true) Whether to print extra information to standard output.
85     * @return The discriminator value that would give an efficiency of requiredEfficiency for the supplied histogram.
86     * @throw std::runtime_error If something goes wrong.
87     *
88     * @author Mark Grimes (mark.grimes@bristol.ac.uk)
89     * @date 30/Apr/2012
90     */
91     float findDiscriminator( const TH1F* pEventsVersusDiscriminatorHistogram, const float requiredEfficiency, const bool verbose=true );
92    
93    
94    
95     /** @brief Calculates the efficiency for the supplied btag operating point.
96     *
97     * Finds the two histogram bins either side of the requested operating point and then uses linear
98     * interpolation between the two to get the efficiency.
99     *
100     * @param[in] pEventsVersusDiscriminatorHistogram The histogram of number of events versus btag discriminator to calculate from.
101     * @param[in] requiredDiscriminator The operating point that you want to know the efficiency for.
102     * @param[in] verbose (Defaults to true) Whether to print extra information to standard output.
103     * @return The efficiency that the supplied discriminator would give for the supplied histogram.
104     * @throw std::runtime_error If something goes wrong.
105     *
106     * @author Mark Grimes (mark.grimes@bristol.ac.uk)
107     * @date 30/Apr/2012
108     */
109     float findEfficiency( const TH1F* pEventsVersusDiscriminatorHistogram, const float requiredDiscriminator, const bool verbose=true );
110    
111 grimes 1.2
112     /** @brief Creates a directory structure in the root TDirectory, with parent directories separated by slashes also created.
113     *
114     * @param[in] fullPath The directory name to be created. Slashes will create a series of directories inside each other.
115     * @param[in] pParent The already existing directory to create the new directories in.
116     * @return The TDirectory created.
117     * @throw std::runtime_error If the pParent is NULL or one of the directories couldn't be created.
118     *
119     * @author Mark Grimes (mark.grimes@bristol.ac.uk)
120     * @date 08/Jul/2012
121     */
122     TDirectory* createDirectory( const std::string& fullPath, TDirectory* pParent );
123    
124 grimes 1.1 } // end of namespace tools
125    
126     } // end of namespace trkupgradeanalysis
127    
128    
129     #endif // end of "#ifndef trkupgradeanalysis_tools_h"