ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/JECFWLite.h
Revision: 1.5
Committed: Tue Mar 12 15:13:26 2013 UTC (12 years, 1 month ago) by arizzi
Content type: text/plain
Branch: MAIN
CVS Tags: EDMV42_Step2_V8, EDMV42_Step2_V7, EDMV42_Step2_V6, HEAD
Changes since 1.4: +4 -2 lines
Error occurred while calculating annotation data.
Log Message:
compute also jecUNC and apply them in correction

File Contents

# Content
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 #include "CondFormats/JetMETObjects/interface/JetCorrectionUncertainty.h"
10
11
12 class JECFWLite
13 {
14 public:
15
16 JECFWLite(std::string base,std::string jettype="AK5PFchs")
17 {
18 //std::string prefix = base + "/Summer12V3MC";
19 std::string prefix = base + "/START53_V15MC";
20 parMC.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
21 parMC.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
22 parMC.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
23 jetCorrectorMC= new FactorizedJetCorrector(parMC);
24 jecUncMC = new JetCorrectionUncertainty((prefix+"_Uncertainty_"+jettype+".txt").c_str());
25
26 /* prefix = base + "/ReferenceMC";
27 parMCRefW.push_back( JetCorrectorParameters((prefix+"_L1FastJet_AK5PF.txt").c_str()));
28 parMCRefW.push_back( JetCorrectorParameters((prefix+"_L2Relative_AK5PF.txt").c_str()));
29 parMCRefW.push_back( JetCorrectorParameters((prefix+"_L3Absolute_AK5PF.txt").c_str()));
30 jetCorrectorMCRefWrong= new FactorizedJetCorrector(parMCRefW);
31 */
32
33
34 prefix = base + "/ReferenceMC";
35 parMCRef.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
36 parMCRef.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
37 parMCRef.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
38 jetCorrectorMCRef= new FactorizedJetCorrector(parMCRef);
39 jecUncMCRef = new JetCorrectionUncertainty((prefix+"_Uncertainty_"+jettype+".txt").c_str());
40
41
42 prefix = base + "/GR_P_V42_AN3DATA";
43 parData.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
44 parData.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
45 parData.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
46 parData.push_back( JetCorrectorParameters((prefix+"_L2L3Residual_"+jettype+".txt").c_str()));
47 jetCorrectorData= new FactorizedJetCorrector(parData);
48 jecUncData = new JetCorrectionUncertainty((prefix+"_Uncertainty_"+jettype+".txt").c_str());
49
50 prefix = base + "/Reference";
51 parDataRef.push_back( JetCorrectorParameters((prefix+"_L1FastJet_"+jettype+".txt").c_str()));
52 parDataRef.push_back( JetCorrectorParameters((prefix+"_L2Relative_"+jettype+".txt").c_str()));
53 parDataRef.push_back( JetCorrectorParameters((prefix+"_L3Absolute_"+jettype+".txt").c_str()));
54 parDataRef.push_back( JetCorrectorParameters((prefix+"_L2L3Residual_"+jettype+".txt").c_str()));
55 jetCorrectorDataRef= new FactorizedJetCorrector(parDataRef);
56 jecUncDataRef = new JetCorrectionUncertainty((prefix+"_Uncertainty_"+jettype+".txt").c_str());
57
58
59 }
60
61 VHbbEvent::SimpleJet correctRight(const VHbbEvent::SimpleJet &j, float rho, bool isMC, bool checkRef = false)
62 {
63 VHbbEvent::SimpleJet c=j;
64 FactorizedJetCorrector * corr=0;
65 if(checkRef && isMC) corr=jetCorrectorMCRef;
66 if(!checkRef && isMC) corr=jetCorrectorMC;
67 if(checkRef && !isMC) corr=jetCorrectorDataRef;
68 if(!checkRef && !isMC) corr=jetCorrectorData;
69 corr->setJetEta(j.p4.Eta());
70 corr->setJetPt(j.ptRaw);
71 corr->setJetA(j.jetArea);
72 corr->setRho(rho);
73 float scale=corr->getCorrection()*j.ptRaw/j.p4.Pt();
74 c.p4= scale * j.p4 ;
75 c.jecunc=uncert(c,isMC,checkRef);
76 return c;
77
78 }
79 float uncert(float eta, float pt, bool isMC, bool checkRef = false)
80 {
81 JetCorrectionUncertainty *jecUnc;
82 if(checkRef && isMC) jecUnc=jecUncMCRef;
83 if(!checkRef && isMC) jecUnc=jecUncMC;
84 if(checkRef && !isMC) jecUnc=jecUncDataRef;
85 if(!checkRef && !isMC) jecUnc=jecUncData;
86
87 jecUnc->setJetEta(eta);
88 jecUnc->setJetPt(pt); // here you must use the CORRECTED jet pt
89 double unc = jecUnc->getUncertainty(true);
90 return unc;
91 }
92
93
94 float uncert(const VHbbEvent::SimpleJet &j, bool isMC, bool checkRef = false)
95 {
96 JetCorrectionUncertainty *jecUnc;
97 if(checkRef && isMC) jecUnc=jecUncMCRef;
98 if(!checkRef && isMC) jecUnc=jecUncMC;
99 if(checkRef && !isMC) jecUnc=jecUncDataRef;
100 if(!checkRef && !isMC) jecUnc=jecUncData;
101
102 jecUnc->setJetEta(j.p4.Eta());
103 jecUnc->setJetPt(j.p4.Pt()); // here you must use the CORRECTED jet pt
104 double unc = jecUnc->getUncertainty(true);
105 return unc;
106 }
107
108 VHbbEvent::SimpleJet correct(const VHbbEvent::SimpleJet &j, float rho, bool isMC, bool checkRef = false)
109 {
110 VHbbEvent::SimpleJet c=j;
111 FactorizedJetCorrector * corr=0;
112 if(checkRef && isMC) corr=jetCorrectorMCRef;
113 if(!checkRef && isMC) corr=jetCorrectorMC;
114 if(checkRef && !isMC) corr=jetCorrectorDataRef;
115 if(!checkRef && !isMC) corr=jetCorrectorData;
116 corr->setJetEta(j.p4.Eta());
117 corr->setJetPt(j.ptRaw);
118 corr->setJetA(j.jetArea);
119 corr->setRho(rho);
120 float scale=corr->getCorrection()*j.ptRaw/j.p4.Pt();
121 c.p4= scale * j.p4 ;
122 if(checkRef)
123 {
124 if(fabs(c.p4.Pt()-j.p4.Pt()) > 0.01 * (c.p4.Pt()+j.p4.Pt()) )
125 {
126 corr->setJetEta(j.p4.Eta());
127 corr->setJetPt(j.ptRaw);
128 corr->setJetA(j.jetArea);
129 corr->setRho(rho);
130 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;
131 }
132
133 }
134 //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;}
135 c.jecunc=uncert(c,isMC,checkRef);
136 return c;
137 }
138
139 std::vector<JetCorrectorParameters> parMC;
140 std::vector<JetCorrectorParameters> parMCRef;
141 std::vector<JetCorrectorParameters> parMCRefW;
142 std::vector<JetCorrectorParameters> parData;
143 std::vector<JetCorrectorParameters> parDataRef;
144 FactorizedJetCorrector * jetCorrectorMC;
145 FactorizedJetCorrector * jetCorrectorMCRefWrong;
146 FactorizedJetCorrector * jetCorrectorMCRef;
147 FactorizedJetCorrector * jetCorrectorData;
148 FactorizedJetCorrector * jetCorrectorDataRef;
149 JetCorrectionUncertainty *jecUncMC;
150 JetCorrectionUncertainty *jecUncMCRef;
151 JetCorrectionUncertainty *jecUncData;
152 JetCorrectionUncertainty *jecUncDataRef;
153
154
155 };
156
157 #endif