8 randm =
new TRandom3(seed);
21 randm->SetSeed((
int)((eta+5)*100000));
23 Bool_t btagged = kFALSE;
26 if(csv>0.679) btagged = kTRUE;
27 else btagged = kFALSE;
32 Double_t eff_b = 0.719;
34 SFb =
getSFb(pt, btagsys, is2012);
36 Double_t promoteProb_btag=0;
37 Double_t demoteProb_btag=0;
40 demoteProb_btag =
std::abs(1.0 - SFb);
42 promoteProb_btag =
std::abs(SFb - 1.0)/((SFb/eff_b) - 1.0);
48 if(demoteProb_btag > 0 &&
randm->Uniform() > demoteProb_btag) btagged = kTRUE;
49 else btagged = kFALSE;
52 if(promoteProb_btag > 0 &&
randm->Uniform() < promoteProb_btag) btagged = kTRUE;
53 else btagged = kFALSE;
60 Double_t SFl = 0, eff_l = 0;
65 SFl =
getSFc(pt, btagsys, is2012);
68 SFl =
getSFl(pt, eta, mistagsys, is2012);
72 Double_t promoteProb_mistag=0;
73 Double_t demoteProb_mistag=0;
76 promoteProb_mistag =
std::abs(SFl - 1.0)/((SFl/eff_l) - 1.0);
79 demoteProb_mistag = SFl;
84 if(demoteProb_mistag > 0 &&
randm->Uniform() > demoteProb_mistag) btagged = kFALSE;
89 if(promoteProb_mistag > 0 &&
randm->Uniform() < promoteProb_mistag) btagged = kTRUE;
90 else btagged = kFALSE;
108 if(!is2012 && pt >= 670.0) x = 669.9;
109 if(!is2012 && pt < 30.0) x = 30.0;
110 if(is2012 && pt >= 800.0) x = 799.9;
111 if(is2012 && pt < 20.0) x = 20.0;
115 SFb = 0.6981*((1.+(0.414063*x))/(1.+(0.300155*x)));
117 SFb = (0.938887+(0.00017124*x))+(-2.76366e-07*(x*x));
119 if(btagsys ==
kNo)
return SFb;
121 Double_t SFb_error_2011[] = {0.0295675, 0.0295095, 0.0210867, 0.0219349, 0.0227033, 0.0204062, 0.0185857, 0.0256242, 0.0383341, 0.0409675, 0.0420284, 0.0541299, 0.0578761, 0.0655432};
122 Float_t ptmin_2011[] = {30, 40, 50, 60, 70, 80, 100, 120, 160, 210, 260, 320, 400, 500};
123 Float_t ptmax_2011[] = {40, 50, 60, 70, 80,100, 120, 160, 210, 260, 320, 400, 500, 670};
124 Double_t SFb_error_2012[] = {0.0415707, 0.0204209, 0.0223227, 0.0206655, 0.0199325, 0.0174121, 0.0202332, 0.0182446, 0.0159777, 0.0218531, 0.0204688, 0.0265191, 0.0313175, 0.0415417, 0.0740446, 0.0596716};
125 Float_t ptmin_2012[] = {20, 30, 40, 50, 60, 70, 80, 100, 120, 160, 210, 260, 320, 400, 500, 600};
126 Float_t ptmax_2012[] = {30, 40, 50, 60, 70, 80,100, 120, 160, 210, 260, 320, 400, 500, 600, 800};
128 Double_t SFb_error_x = 0.0;
130 UInt_t
nbins = is2012 ? 16: 14;
132 for (UInt_t ibin=0; ibin<
nbins; ibin++) {
134 if(x >= ptmin_2011[ibin] && x < ptmax_2011[ibin]) SFb_error_x = SFb_error_2011[ibin];
136 if(x >= ptmin_2012[ibin] && x < ptmax_2012[ibin]) SFb_error_x = SFb_error_2012[ibin];
140 if(pt >= 670.0) SFb_error_x = 2.0*0.0655432;
141 if(pt < 30.0) SFb_error_x = 0.12;
143 if(pt >= 800.0) SFb_error_x = 2.0*0.0717567;
144 if(pt < 20.0) SFb_error_x = 2.0*0.0554504;
149 if(btagsys ==
kDown) scalefactor = (SFb - SFb_error_x);
150 if(btagsys ==
kUp) scalefactor = (SFb + SFb_error_x);
162 if(!is2012 && pt >= 670.0) x = 669.9;
163 if(!is2012 && pt < 30.0) x = 30.0;
164 if(is2012 && pt >= 800.0) x = 799.9;
165 if(is2012 && pt < 20.0) x = 20.0;
169 SFc = 0.6981*((1.+(0.414063*x))/(1.+(0.300155*x)));
171 SFc = (0.938887+(0.00017124*x))+(-2.76366e-07*(x*x));
173 if(btagsys ==
kNo)
return SFc;
175 Double_t SFb_error_2011[] = {0.0295675, 0.0295095, 0.0210867, 0.0219349, 0.0227033, 0.0204062, 0.0185857, 0.0256242, 0.0383341, 0.0409675, 0.0420284, 0.0541299, 0.0578761, 0.0655432};
176 Float_t ptmin_2011[] = {30, 40, 50, 60, 70, 80, 100, 120, 160, 210, 260, 320, 400, 500};
177 Float_t ptmax_2011[] = {40, 50, 60, 70, 80,100, 120, 160, 210, 260, 320, 400, 500, 670};
178 Double_t SFb_error_2012[] = {0.0415707, 0.0204209, 0.0223227, 0.0206655, 0.0199325, 0.0174121, 0.0202332, 0.0182446, 0.0159777, 0.0218531, 0.0204688, 0.0265191, 0.0313175, 0.0415417, 0.0740446, 0.0596716};
179 Float_t ptmin_2012[] = {20, 30, 40, 50, 60, 70, 80, 100, 120, 160, 210, 260, 320, 400, 500, 600};
180 Float_t ptmax_2012[] = {30, 40, 50, 60, 70, 80,100, 120, 160, 210, 260, 320, 400, 500, 600, 800};
182 Double_t SFc_error_x = 0.0;
184 UInt_t
nbins = is2012 ? 16: 14;
186 for (UInt_t ibin=0; ibin<
nbins; ibin++) {
188 if(x >= ptmin_2011[ibin] && x < ptmax_2011[ibin]) SFc_error_x = 2.0*SFb_error_2011[ibin];
190 if(x >= ptmin_2012[ibin] && x < ptmax_2012[ibin]) SFc_error_x = 2.0*SFb_error_2012[ibin];
195 if(pt >= 670.0) SFc_error_x = 2.0*2.0*0.0655432;
196 if(pt < 30.0) SFc_error_x = 2.0*0.12;
198 if(pt >= 800.0) SFc_error_x = 2.0*2.0*0.0717567;
199 if(pt < 20.0) SFc_error_x = 2.0*2.0*0.0554504;
204 if(btagsys ==
kDown) scalefactor = (SFc - SFc_error_x);
205 if(btagsys ==
kUp) scalefactor = (SFc + SFc_error_x);
214 Float_t x =
std::min(
double(pt), is2012 ? 670.0 : 800.0);
220 if(mistagsys ==
kNo) SFl = ((1.06182+(0.000617034*x))+(-1.5732e-06*(x*x)))+(3.02909
e-10*(x*(x*x)));
221 else if(mistagsys ==
kDown) SFl = ((0.972455+(7.51396e-06*x))+(4.91857e-07*(x*x)))+(-1.47661
e-09*(x*(x*x)));
222 else if(mistagsys ==
kUp) SFl = ((1.15116+(0.00122657*x))+(-3.63826e-06*(x*x)))+(2.08242
e-09*(x*(x*x)));
224 if(mistagsys ==
kNo) SFl = ((1.111+(-9.64191e-06*x))+(1.80811e-07*(x*x)))+(-5.44868
e-10*(x*(x*x)));
225 else if(mistagsys ==
kDown) SFl = ((1.02055+(-0.000378856*x))+(1.49029e-06*(x*x)))+(-1.74966
e-09*(x*(x*x)));
226 else if(mistagsys ==
kUp) SFl = ((1.20146+(0.000359543*x))+(-1.12866e-06*(x*x)))+(6.59918
e-10*(x*(x*x)));
228 if(mistagsys ==
kNo) SFl = ((1.08498+(-0.000701422*x))+(3.43612e-06*(x*x)))+(-4.11794
e-09*(x*(x*x)));
229 else if(mistagsys ==
kDown) SFl = ((0.983476+(-0.000607242*x))+(3.17997e-06*(x*x)))+(-4.01242
e-09*(x*(x*x)));
230 else if(mistagsys ==
kUp) SFl = ((1.18654+(-0.000795808*x))+(3.69226e-06*(x*x)))+(-4.22347
e-09*(x*(x*x)));
234 if(mistagsys ==
kNo) SFl = ((1.07541+(0.00231827*x))+(-4.74249e-06*(x*x)))+(2.70862
e-09*(x*(x*x)));
235 else if(mistagsys ==
kDown) SFl = ((0.964527+(0.00149055*x))+(-2.78338e-06*(x*x)))+(1.51771
e-09*(x*(x*x)));
236 else if(mistagsys ==
kUp) SFl = ((1.18638+(0.00314148*x))+(-6.68993e-06*(x*x)))+(3.89288
e-09*(x*(x*x)));
238 if(mistagsys ==
kNo) SFl = ((1.05613+(0.00114031*x))+(-2.56066e-06*(x*x)))+(1.67792
e-09*(x*(x*x)));
239 else if(mistagsys ==
kDown) SFl = ((0.946051+(0.000759584*x))+(-1.52491e-06*(x*x)))+(9.65822
e-10*(x*(x*x)));
240 else if(mistagsys ==
kUp) SFl = ((1.16624+(0.00151884*x))+(-3.59041e-06*(x*x)))+(2.38681
e-09*(x*(x*x)));
242 if(mistagsys ==
kNo) SFl = ((1.05625+(0.000487231*x))+(-2.22792e-06*(x*x)))+(1.70262
e-09*(x*(x*x)));
243 else if(mistagsys ==
kDown) SFl = ((0.956736+(0.000280197*x))+(-1.42739e-06*(x*x)))+(1.0085
e-09*(x*(x*x)));
244 else if(mistagsys ==
kUp) SFl = ((1.15575+(0.000693344*x))+(-3.02661e-06*(x*x)))+(2.39752
e-09*(x*(x*x)));
255 Float_t x =
std::min(
double(pt), 670.0);
257 Double_t eff_l = 0.0;
260 eff_l = ((0.00967751+(2.54564e-05*x))+(-6.92256e-10*(x*x)));
262 eff_l = ((0.00974141+(5.09503e-05*x))+(2.0641e-08*(x*x)));
264 eff_l = ((0.013595+(0.000104538*x))+(-1.36087e-08*(x*x)));
Abs< T >::type abs(const T &t)
TAKEN FROM http://cmssw.cvs.cern.ch/cgi-bin/cmssw.cgi/CMSSW/ElectroWeakAnalysis/Utilities/src/PdfWeig...