ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/JECFWLite.h
Revision: 1.3
Committed: Wed Feb 6 13:49:51 2013 UTC (12 years, 2 months ago) by arizzi
Content type: text/plain
Branch: MAIN
CVS Tags: EDMV42_Step2_V5a, EDMV42_Step2_V5
Changes since 1.2: +23 -20 lines
Log Message:
add possibility of using different jet types in corrections

File Contents

# User Rev Content
1 arizzi 1.1 #ifndef JECFWLITE
2     #define JECFWLITE
3    
4     #include <iostream>
5     #include <string>
6     #include "VHbbAnalysis/VHbbDataFormats/interface/VHbbEvent.h"
7     #include "CondFormats/JetMETObjects/interface/FactorizedJetCorrector.h"
8     #include "CondFormats/JetMETObjects/interface/JetCorrectorParameters.h"
9    
10    
11     class JECFWLite
12     {
13     public:
14    
15 arizzi 1.3 JECFWLite(std::string base,std::string jettype="AK5PFchs")
16 arizzi 1.1 {
17 arizzi 1.3 //std::string prefix = base + "/Summer12V3MC";
18     std::string prefix = base + "/START53_V15MC";
19     parMC.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
20     parMC.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
21     parMC.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
22 arizzi 1.1 jetCorrectorMC= new FactorizedJetCorrector(parMC);
23    
24 arizzi 1.3 /* prefix = base + "/ReferenceMC";
25 arizzi 1.2 parMCRefW.push_back( JetCorrectorParameters((prefix+"_L1FastJet_AK5PF.txt").c_str()));
26     parMCRefW.push_back( JetCorrectorParameters((prefix+"_L2Relative_AK5PF.txt").c_str()));
27     parMCRefW.push_back( JetCorrectorParameters((prefix+"_L3Absolute_AK5PF.txt").c_str()));
28     jetCorrectorMCRefWrong= new FactorizedJetCorrector(parMCRefW);
29 arizzi 1.3 */
30 arizzi 1.2
31 arizzi 1.1
32     prefix = base + "/ReferenceMC";
33 arizzi 1.3 parMCRef.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
34     parMCRef.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
35     parMCRef.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
36 arizzi 1.1 jetCorrectorMCRef= new FactorizedJetCorrector(parMCRef);
37    
38    
39 arizzi 1.3 prefix = base + "/GR_P_V42_AN3DATA";
40     parData.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
41     parData.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
42     parData.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
43     parData.push_back( JetCorrectorParameters((prefix+"_L2L3Residual_"+jettype+".txt").c_str()));
44 arizzi 1.1 jetCorrectorData= new FactorizedJetCorrector(parData);
45    
46     prefix = base + "/Reference";
47 arizzi 1.3 parDataRef.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
48     parDataRef.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
49     parDataRef.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
50     parDataRef.push_back( JetCorrectorParameters((prefix+"_L2L3Residual_"+jettype+".txt").c_str()));
51 arizzi 1.1 jetCorrectorDataRef= new FactorizedJetCorrector(parDataRef);
52    
53    
54     }
55    
56 arizzi 1.2 VHbbEvent::SimpleJet correctRight(const VHbbEvent::SimpleJet &j, float rho, bool isMC, bool checkRef = false)
57 arizzi 1.1 {
58     VHbbEvent::SimpleJet c=j;
59     FactorizedJetCorrector * corr=0;
60     if(checkRef && isMC) corr=jetCorrectorMCRef;
61     if(!checkRef && isMC) corr=jetCorrectorMC;
62     if(checkRef && !isMC) corr=jetCorrectorDataRef;
63     if(!checkRef && !isMC) corr=jetCorrectorData;
64     corr->setJetEta(j.p4.Eta());
65     corr->setJetPt(j.ptRaw);
66     corr->setJetA(j.jetArea);
67 arizzi 1.2 corr->setRho(rho);
68     float scale=corr->getCorrection()*j.ptRaw/j.p4.Pt();
69     c.p4= scale * j.p4 ;
70     return c;
71    
72     }
73    
74     VHbbEvent::SimpleJet correct(const VHbbEvent::SimpleJet &j, float rho, bool isMC, bool checkRef = false)
75     {
76     VHbbEvent::SimpleJet c=j;
77     FactorizedJetCorrector * corr=0;
78 arizzi 1.3 if(checkRef && isMC) corr=jetCorrectorMCRef;
79 arizzi 1.2 if(!checkRef && isMC) corr=jetCorrectorMC;
80     if(checkRef && !isMC) corr=jetCorrectorDataRef;
81     if(!checkRef && !isMC) corr=jetCorrectorData;
82 arizzi 1.1 corr->setJetEta(j.p4.Eta());
83     corr->setJetPt(j.ptRaw);
84     corr->setJetA(j.jetArea);
85 arizzi 1.2 corr->setRho(rho);
86     float scale=corr->getCorrection()*j.ptRaw/j.p4.Pt();
87     c.p4= scale * j.p4 ;
88 arizzi 1.1 if(checkRef)
89     {
90     if(fabs(c.p4.Pt()-j.p4.Pt()) > 0.01 * (c.p4.Pt()+j.p4.Pt()) )
91     {
92 arizzi 1.2 corr->setJetEta(j.p4.Eta());
93     corr->setJetPt(j.ptRaw);
94     corr->setJetA(j.jetArea);
95     corr->setRho(rho);
96     std::cout << "ERROR CORRECTIONS ARE NOT CLOSING: " << c.p4.Pt() << " vs " << j.p4.Pt() << " raw " << j.ptRaw << " new corr " << corr->getCorrection() << " old " << j.p4.Pt()/j.ptRaw << std::endl;
97 arizzi 1.1 }
98    
99 arizzi 1.3 }
100     //else {std::cout << "Check ok: " << c.p4.Pt() << " vs " << j.p4.Pt() << " raw " << j.ptRaw << " new corr " << corr->getCorrection() << " old " << j.p4.Pt()/j.ptRaw << std::endl;}
101 arizzi 1.1 return c;
102     }
103    
104     std::vector<JetCorrectorParameters> parMC;
105     std::vector<JetCorrectorParameters> parMCRef;
106 arizzi 1.2 std::vector<JetCorrectorParameters> parMCRefW;
107 arizzi 1.1 std::vector<JetCorrectorParameters> parData;
108     std::vector<JetCorrectorParameters> parDataRef;
109     FactorizedJetCorrector * jetCorrectorMC;
110 arizzi 1.2 FactorizedJetCorrector * jetCorrectorMCRefWrong;
111 arizzi 1.1 FactorizedJetCorrector * jetCorrectorMCRef;
112     FactorizedJetCorrector * jetCorrectorData;
113     FactorizedJetCorrector * jetCorrectorDataRef;
114    
115     };
116    
117     #endif