ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitHzz4l/Util/src/ElectronEnergySmearingScaling.cc
Revision: 1.7
Committed: Mon Dec 17 17:23:06 2012 UTC (12 years, 5 months ago) by dkralph
Content type: text/plain
Branch: MAIN
CVS Tags: compiled
Changes since 1.6: +17 -40 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "ElectronEnergySmearingScaling.h"
2 #include "CommonDefs.h"
3 #include <TRandom.h>
4 #include <TRandom1.h>
5
6
7 //based on
8 //http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/EgammaAnalysis/ElectronTools/src/PatElectronEnergyCalibrator.cc?revision=1.6&view=markup
9
10 pair<float,float> apply_claudes_electron_energy_corrections(ControlFlags &ctrl, Electron * ele, const float energy, const float energy_error, unsigned run, string dataset_){
11
12 float corr=0., scale=1.;
13 float dsigMC=0., corrMC=0.;
14
15 if (!ctrl.mc) {
16 if (dataset_=="Jan16ReReco") { // corrections for january 16 ReReco
17 // values from http://indico.cern.ch/getFile.py/access?contribId=2&resId=0&materialId=slides&confId=176520
18 if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()<0.94) {
19 if (run>=160431 && run<=167913) corr = -0.0014;
20 if (run>=170000 && run<=172619) corr = -0.0016;
21 if (run>=172620 && run<=173692) corr = -0.0017;
22 if (run>=175830 && run<=177139) corr = -0.0021;
23 if (run>=177140 && run<=178421) corr = -0.0025;
24 if (run>=178424 && run<=180252) corr = -0.0024;
25 } else if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()>=0.94) {
26 if (run>=160431 && run<=167913) corr = 0.0059;
27 if (run>=170000 && run<=172619) corr = 0.0046;
28 if (run>=172620 && run<=173692) corr = 0.0045;
29 if (run>=175830 && run<=177139) corr = 0.0042;
30 if (run>=177140 && run<=178421) corr = 0.0038;
31 if (run>=178424 && run<=180252) corr = 0.0039;
32 } else if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()<0.94) {
33 if (run>=160431 && run<=167913) corr = -0.0045;
34 if (run>=170000 && run<=172619) corr = -0.0066;
35 if (run>=172620 && run<=173692) corr = -0.0058;
36 if (run>=175830 && run<=177139) corr = -0.0073;
37 if (run>=177140 && run<=178421) corr = -0.0075;
38 if (run>=178424 && run<=180252) corr = -0.0071;
39 } else if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()>=0.94) {
40 if (run>=160431 && run<=167913) corr = 0.0084;
41 if (run>=170000 && run<=172619) corr = 0.0063;
42 if (run>=172620 && run<=173692) corr = 0.0071;
43 if (run>=175830 && run<=177139) corr = 0.0056;
44 if (run>=177140 && run<=178421) corr = 0.0054;
45 if (run>=178424 && run<=180252) corr = 0.0058;
46 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()<0.94) {
47 if (run>=160431 && run<=167913) corr = -0.0082;
48 if (run>=170000 && run<=172619) corr = -0.0025;
49 if (run>=172620 && run<=173692) corr = -0.0035;
50 if (run>=175830 && run<=177139) corr = -0.0017;
51 if (run>=177140 && run<=178421) corr = -0.0010;
52 if (run>=178424 && run<=180252) corr = 0.0030;
53 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()>=0.94) {
54 if (run>=160431 && run<=167913) corr = -0.0033;
55 if (run>=170000 && run<=172619) corr = 0.0024;
56 if (run>=172620 && run<=173692) corr = 0.0014;
57 if (run>=175830 && run<=177139) corr = 0.0032;
58 if (run>=177140 && run<=178421) corr = 0.0040;
59 if (run>=178424 && run<=180252) corr = 0.0079;
60 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()<0.94) {
61 if (run>=160431 && run<=167913) corr = -0.0064;
62 if (run>=170000 && run<=172619) corr = -0.0046;
63 if (run>=172620 && run<=173692) corr = -0.0029;
64 if (run>=175830 && run<=177139) corr = -0.0040;
65 if (run>=177140 && run<=178421) corr = -0.0050;
66 if (run>=178424 && run<=180252) corr = -0.0059;
67 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()>=0.94) {
68 if (run>=160431 && run<=167913) corr = 0.0042;
69 if (run>=170000 && run<=172619) corr = 0.0060;
70 if (run>=172620 && run<=173692) corr = 0.0077;
71 if (run>=175830 && run<=177139) corr = 0.0067;
72 if (run>=177140 && run<=178421) corr = 0.0056;
73 if (run>=178424 && run<=180252) corr = 0.0047;
74 }
75 }
76 else if (dataset_=="2012Jul13ReReco") {
77 // values from https://twiki.cern.ch/twiki/bin/view/CMS/ECALELF
78 if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()<0.94) {
79 if (run>=190645 && run<=190781) scale = 1.0020;
80 if (run>=190782 && run<=191042) scale = 1.0079;
81 if (run>=191043 && run<=193555) scale = 0.9989;
82 if (run>=193556 && run<=194150) scale = 0.9974;
83 if (run>=194151 && run<=194532) scale = 0.9980;
84 if (run>=194533 && run<=195113) scale = 0.9983;
85 if (run>=195114 && run<=195915) scale = 0.9984;
86 if (run>=195916 && run<=198115) scale = 0.9975;
87 if (run>=198116 && run<=199803) scale = 1.0010;
88 if (run>=199804 && run<=200048) scale = 1.0021;
89 if (run>=200049 && run<=200151) scale = 1.0035;
90 if (run>=200152 && run<=200490) scale = 1.0013;
91 if (run>=200491 && run<=200531) scale = 1.0035;
92 if (run>=200532 && run<=201656) scale = 1.0017;
93 if (run>=201657 && run<=202305) scale = 1.0026;
94 if (run>=202305 && run<=203002) scale = 1.0037;
95 } else if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()>=0.94) {
96 if (run>=190645 && run<=190781) scale = 0.9980;
97 if (run>=190782 && run<=191042) scale = 1.0039;
98 if (run>=191043 && run<=193555) scale = 0.9949;
99 if (run>=193556 && run<=194150) scale = 0.9934;
100 if (run>=194151 && run<=194532) scale = 0.9940;
101 if (run>=194533 && run<=195113) scale = 0.9943;
102 if (run>=195114 && run<=195915) scale = 0.9944;
103 if (run>=195916 && run<=198115) scale = 0.9936;
104 if (run>=198116 && run<=199803) scale = 0.9970;
105 if (run>=199804 && run<=200048) scale = 0.9982;
106 if (run>=200049 && run<=200151) scale = 0.9996;
107 if (run>=200152 && run<=200490) scale = 0.9973;
108 if (run>=200491 && run<=200531) scale = 0.9995;
109 if (run>=200532 && run<=201656) scale = 0.9978;
110 if (run>=201657 && run<=202305) scale = 0.9986;
111 if (run>=202305 && run<=203002) scale = 0.9998;
112 } else if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()<0.94) {
113 if (run>=190645 && run<=190781) scale = 1.0032;
114 if (run>=190782 && run<=191042) scale = 1.0063;
115 if (run>=191043 && run<=193555) scale = 0.9998;
116 if (run>=193556 && run<=194150) scale = 0.9954;
117 if (run>=194151 && run<=194532) scale = 0.9965;
118 if (run>=194533 && run<=195113) scale = 0.9984;
119 if (run>=195114 && run<=195915) scale = 0.9977;
120 if (run>=195916 && run<=198115) scale = 0.9965;
121 if (run>=198116 && run<=199803) scale = 0.9999;
122 if (run>=199804 && run<=200048) scale = 1.0008;
123 if (run>=200049 && run<=200151) scale = 1.0017;
124 if (run>=200152 && run<=200490) scale = 1.0003;
125 if (run>=200491 && run<=200531) scale = 1.0017;
126 if (run>=200532 && run<=201656) scale = 0.9999;
127 if (run>=201657 && run<=202305) scale = 1.0003;
128 if (run>=202305 && run<=203002) scale = 1.0010;
129 } else if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()>=0.94) {
130 if (run>=190645 && run<=190781) scale = 0.9919;
131 if (run>=190782 && run<=191042) scale = 0.9951;
132 if (run>=191043 && run<=193555) scale = 0.9885;
133 if (run>=193556 && run<=194150) scale = 0.9841;
134 if (run>=194151 && run<=194532) scale = 0.9852;
135 if (run>=194533 && run<=195113) scale = 0.9872;
136 if (run>=195114 && run<=195915) scale = 0.9864;
137 if (run>=195916 && run<=198115) scale = 0.9852;
138 if (run>=198116 && run<=199803) scale = 0.9886;
139 if (run>=199804 && run<=200048) scale = 0.9895;
140 if (run>=200049 && run<=200151) scale = 0.9905;
141 if (run>=200152 && run<=200490) scale = 0.9890;
142 if (run>=200491 && run<=200531) scale = 0.9905;
143 if (run>=200532 && run<=201656) scale = 0.9887;
144 if (run>=201657 && run<=202305) scale = 0.9891;
145 if (run>=202305 && run<=203002) scale = 0.9897;
146 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()<0.94) {
147 if (run>=190645 && run<=190781) scale = 0.9945;
148 if (run>=190782 && run<=191042) scale = 0.9996;
149 if (run>=191043 && run<=193555) scale = 0.9968;
150 if (run>=193556 && run<=194150) scale = 0.9969;
151 if (run>=194151 && run<=194532) scale = 0.9986;
152 if (run>=194533 && run<=195113) scale = 1.0006;
153 if (run>=195114 && run<=195915) scale = 1.0010;
154 if (run>=195916 && run<=198115) scale = 1.0020;
155 if (run>=198116 && run<=199803) scale = 0.9963;
156 if (run>=199804 && run<=200048) scale = 0.9965;
157 if (run>=200049 && run<=200151) scale = 0.9992;
158 if (run>=200152 && run<=200490) scale = 0.9991;
159 if (run>=200491 && run<=200531) scale = 0.9995;
160 if (run>=200532 && run<=201656) scale = 0.9978;
161 if (run>=201657 && run<=202305) scale = 0.9987;
162 if (run>=202305 && run<=203002) scale = 1.0003;
163 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()>=0.94) {
164 if (run>=190645 && run<=190781) scale = 0.9881;
165 if (run>=190782 && run<=191042) scale = 0.9932;
166 if (run>=191043 && run<=193555) scale = 0.9904;
167 if (run>=193556 && run<=194150) scale = 0.9905;
168 if (run>=194151 && run<=194532) scale = 0.9922;
169 if (run>=194533 && run<=195113) scale = 0.9943;
170 if (run>=195114 && run<=195915) scale = 0.9946;
171 if (run>=195916 && run<=198115) scale = 0.9956;
172 if (run>=198116 && run<=199803) scale = 0.9899;
173 if (run>=199804 && run<=200048) scale = 0.9901;
174 if (run>=200049 && run<=200151) scale = 0.9928;
175 if (run>=200152 && run<=200490) scale = 0.9927;
176 if (run>=200491 && run<=200531) scale = 0.9931;
177 if (run>=200532 && run<=201656) scale = 0.9914;
178 if (run>=201657 && run<=202305) scale = 0.9923;
179 if (run>=202305 && run<=203002) scale = 0.9940;
180 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()<0.94) {
181 if (run>=190645 && run<=190781) scale = 0.9965;
182 if (run>=190782 && run<=191042) scale = 1.0010;
183 if (run>=191043 && run<=193555) scale = 0.9987;
184 if (run>=193556 && run<=194150) scale = 0.9988;
185 if (run>=194151 && run<=194532) scale = 0.9994;
186 if (run>=194533 && run<=195113) scale = 0.9999;
187 if (run>=195114 && run<=195915) scale = 1.0004;
188 if (run>=195916 && run<=198115) scale = 0.9992;
189 if (run>=198116 && run<=199803) scale = 1.0044;
190 if (run>=199804 && run<=200048) scale = 1.0060;
191 if (run>=200049 && run<=200151) scale = 1.0101;
192 if (run>=200152 && run<=200490) scale = 1.0073;
193 if (run>=200491 && run<=200531) scale = 1.0106;
194 if (run>=200532 && run<=201656) scale = 1.0069;
195 if (run>=201657 && run<=202305) scale = 1.0121;
196 if (run>=202305 && run<=203002) scale = 1.0144;
197 } else if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()>=0.94) {
198 if (run>=190645 && run<=190781) scale = 0.9862;
199 if (run>=190782 && run<=191042) scale = 0.9907;
200 if (run>=191043 && run<=193555) scale = 0.9884;
201 if (run>=193556 && run<=194150) scale = 0.9885;
202 if (run>=194151 && run<=194532) scale = 0.9891;
203 if (run>=194533 && run<=195113) scale = 0.9896;
204 if (run>=195114 && run<=195915) scale = 0.9900;
205 if (run>=195916 && run<=198115) scale = 0.9889;
206 if (run>=198116 && run<=199803) scale = 0.9941;
207 if (run>=199804 && run<=200048) scale = 0.9957;
208 if (run>=200049 && run<=200151) scale = 0.9999;
209 if (run>=200152 && run<=200490) scale = 0.9970;
210 if (run>=200491 && run<=200531) scale = 1.0004;
211 if (run>=200532 && run<=201656) scale = 0.9967;
212 if (run>=201657 && run<=202305) scale = 1.0018;
213 if (run>=202305 && run<=203002) scale = 1.0042;
214 }
215 }
216 else
217 assert(0);
218
219 assert(scale!=1 || corr!=0); // make sure run number was ok
220 }
221
222 if (dataset_=="Summer12_DR53X_HCP2012" || dataset_ == "2012Jul13ReReco") {
223 if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()<0.94) dsigMC = 0.0103;
224 if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0090;
225 if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()<0.94) dsigMC = 0.0190;
226 if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0156;
227 if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()<0.94) dsigMC = 0.0269;
228 if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0287;
229 if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()<0.94) dsigMC = 0.0364;
230 if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0321;
231 }
232 else if (dataset_=="Fall11" ||dataset_ == "Jan16ReReco") { // values from https://hypernews.cern.ch/HyperNews/CMS/get/higgs2g/634.html, consistant with Jan16ReReco corrections
233 if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()<0.94) dsigMC = 0.0096;
234 if (ele->IsEB() && fabs(ele->SCluster()->Eta())<1 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0074;
235 if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()<0.94) dsigMC = 0.0196;
236 if (ele->IsEB() && fabs(ele->SCluster()->Eta())>=1 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0141;
237 if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()<0.94) dsigMC = 0.0279;
238 if (ele->IsEE() && fabs(ele->SCluster()->Eta())<2 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0268;
239 if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()<0.94) dsigMC = 0.0301;
240 if (ele->IsEE() && fabs(ele->SCluster()->Eta())>=2 && ele->SCluster()->R9()>=0.94) dsigMC = 0.0293;
241 }
242 else
243 assert(!ctrl.mc);
244
245 float corrected_energy = -999;
246 if (!ctrl.mc){
247 if(dataset_ == "Jan16ReReco") corrected_energy = energy/(1+corr);
248 else if (dataset_ == "2012Jul13ReReco") corrected_energy = energy*scale;
249 else assert(0);
250 }
251 if (ctrl.mc) {
252 TRandom1 rand;
253 rand.SetSeed(0);
254 if(ctrl.turnOffRandomization)
255 corrMC = 1+dsigMC; // use this only for synchronization
256 else
257 corrMC = rand.Gaus(1,dsigMC);
258 corrected_energy = energy*corrMC;
259 }
260
261 if(ctrl.debug) cout << " corr'ting regr E " << setprecision(7) << setw(12) << energy << " -> " << setprecision(7) << setw(12) << corrected_energy << endl;
262 float corrected_energy_error = sqrt(energy_error*energy_error + dsigMC*dsigMC*corrected_energy*corrected_energy) ;
263
264 return pair<float,float>(corrected_energy,corrected_energy_error);
265
266 }