34 from __future__
import division
35 from __future__
import print_function
38 OPTION =
"StatisticalPlusSystematicAverage"
41 print(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
42 print(
">>>>> METHOD TO AVERAGE MUONS AND ELECTRONS is: '%s'" % (OPTION))
43 print(
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n")
55 absCorrWenu = Wenu*
sqrt(0.008**2+0.0116**2)
57 print(
"\nWenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wenu, absStatWenu, absUncWenu, absCorrWenu, Wenu*relSysLumi))
58 print(
" Systematics >>>>>>>")
59 print(
"\tUncorrelated with muons: %.2f %%" % (100./Wenu*absUncWenu))
60 print(
"\tTheory: %.2f %%" % (100./Wenu*absCorrWenu))
61 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wenu*
sqrt(absUncWenu**2+absCorrWenu**2)))
64 absStatWplusenu = 0.0793
65 absCorrWplusenu = Wplusenu*
sqrt(0.009**2+0.0133**2)
66 absUncWplusenu = 0.3446
67 print(
"\nWplusenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wplusenu, absStatWplusenu, absUncWplusenu, absCorrWplusenu, Wplusenu*relSysLumi))
68 print(
" Systematics >>>>>>>")
69 print(
"\tUncorrelated with muons: %.2f %%" % (100./Wplusenu*absUncWplusenu))
70 print(
"\tTheory: %.2f %%" % (100./Wplusenu*absCorrWplusenu))
71 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wplusenu*
sqrt(absUncWplusenu**2+absCorrWplusenu**2)))
74 absStatWminusenu = 0.0690
75 absCorrWminusenu = Wminusenu*
sqrt(0.015**2+0.0090**2)
76 absUncWminusenu = 0.2432
77 print(
"\nWminusenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wminusenu, absStatWminusenu, absUncWminusenu, absCorrWminusenu, Wminusenu*relSysLumi))
78 print(
" Systematics >>>>>>>")
79 print(
"\tUncorrelated with muons: %.2f %%" % (100./Wminusenu*absUncWminusenu))
80 print(
"\tTheory: %.2f %%" % (100./Wminusenu*absCorrWminusenu))
81 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wminusenu*
sqrt(absUncWminusenu**2+absCorrWminusenu**2)))
85 absCorrZee = Zee*
sqrt(0.011**2+0.0134**2)
87 print(
"\nZee cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Zee, absStatZee, absUncZee, absCorrZee, Zee*relSysLumi))
88 print(
" Systematics >>>>>>>")
89 print(
"\tUncorrelated with muons: %.2f %%" % (100./Zee*absUncZee))
90 print(
"\tTheory: %.2f %%" % (100./Zee*absCorrZee))
91 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Zee*
sqrt(absUncZee**2+absCorrZee**2)))
93 Ratioenu = Wplusenu/Wminusenu
94 absStatRatioenu = 0.02883
95 absCorrRatioenu = Ratioenu*
sqrt(0.017**2+0.0127**2)
96 absUncRatioenu = 0.076
97 print(
"\nRatioenu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (Ratioenu, absStatRatioenu, absUncRatioenu, absCorrRatioenu))
98 print(
" Systematics >>>>>>>")
99 print(
"\tUncorrelated with muons: %.2f %%" % (100./Ratioenu*absUncRatioenu))
100 print(
"\tTheory: %.2f %%" % (100./Ratioenu*absCorrRatioenu))
101 print(
"\tTOTAL: %.2f %%\n" % (100./Ratioenu*
sqrt(absUncRatioenu**2+absCorrRatioenu**2)))
105 absCorrWZe = WZe*
sqrt(0.009**2+0.0103**2)
107 print(
"\nWZe cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (WZe, absStatWZe, absUncWZe, absCorrWZe))
108 print(
" Systematics >>>>>>>")
109 print(
"\tUncorrelated with muons: %.2f %%" % (100./WZe*absUncWZe))
110 print(
"\tTheory: %.2f %%" % (100./WZe*absCorrWZe))
111 print(
"\tTOTAL: %.2f %%\n" % (100./WZe*
sqrt(absUncWZe**2+absCorrWZe**2)))
116 absCorrWmunu = Wmunu*
sqrt(0.011**2+0.0136**2)
118 relUncPreTrig = 0.5e-2
119 relUncSysEff = 0.5e-2
120 relUncEff =
sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2)
121 relUncMomRes = 0.3e-2
122 relUncRecoil = 0.4e-2
124 relUncBkg =
sqrt(2.0e-2**2+0.2e-2**2)
125 absUncWmunu=Wmunu*
sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2)
126 print(
"\nWmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wmunu, absStatWmunu, absUncWmunu, absCorrWmunu, Wmunu*relSysLumi))
127 print(
" Systematics >>>>>>>")
128 print(
"\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff))
129 print(
"\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes))
130 print(
"\tBackground subtraction: %.2f %%" % (100*relUncBkg))
131 print(
"\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil))
132 print(
"\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat))
133 print(
"\tTheory: %.2f %%" % (100./Wmunu*absCorrWmunu))
134 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wmunu*
sqrt(absUncWmunu**2+absCorrWmunu**2)))
137 absStatWplusmunu = 0.069
138 absCorrWplusmunu = Wplusmunu*
sqrt(0.013**2+0.0142**2)
140 relUncPreTrig = 0.5e-2
141 relUncSysEff = 0.5e-2
142 relUncEff =
sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2)
143 relUncMomRes = 0.3e-2
144 relUncRecoil = 0.4e-2
145 relUncMCStat = 1.4e-3
146 relUncBkg =
sqrt(1.7e-2**2+0.2e-2**2)
147 absUncWplusmunu=Wplusmunu*
sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2)
148 print(
"\nWplusmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wplusmunu, absStatWplusmunu, absUncWplusmunu, absCorrWplusmunu, Wplusmunu*relSysLumi))
149 print(
" Systematics >>>>>>>")
150 print(
"\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff))
151 print(
"\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes))
152 print(
"\tBackground subtraction: %.2f %%" % (100*relUncBkg))
153 print(
"\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil))
154 print(
"\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat))
155 print(
"\tTheory: %.2f %%" % (100./Wplusmunu*absCorrWplusmunu))
156 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wplusmunu*
sqrt(absUncWplusmunu**2+absCorrWplusmunu**2)))
159 absStatWminusmunu = 0.057
160 absCorrWminusmunu = Wminusmunu*
sqrt(0.019**2+0.0126**2)
162 relUncPreTrig = 0.5e-2
163 relUncSysEff = 0.5e-2
164 relUncEff =
sqrt(relUncFit**2+relUncPreTrig**2+relUncSysEff**2)
165 relUncMomRes = 0.3e-2
166 relUncRecoil = 0.4e-2
167 relUncMCStat = 1.4e-3
168 relUncBkg =
sqrt(2.3e-2**2+0.2e-2**2)
169 absUncWminusmunu=Wminusmunu*
sqrt(relUncEff**2+relUncMomRes**2+relUncRecoil**2+relUncMCStat**2+relUncBkg**2)
170 print(
"\nWminusmunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Wminusmunu, absStatWminusmunu, absUncWminusmunu, absCorrWminusmunu, Wminusmunu*relSysLumi))
171 print(
" Systematics >>>>>>>")
172 print(
"\tEfficiency(Zfit,Pretrig,Z->W): %.2f %%" % (100*relUncEff))
173 print(
"\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes))
174 print(
"\tBackground subtraction: %.2f %%" % (100*relUncBkg))
175 print(
"\tSignal Recoil modeling: %.2f %%" % (100*relUncRecoil))
176 print(
"\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat))
177 print(
"\tTheory: %.2f %%" % (100./Wminusmunu*absCorrWminusmunu))
178 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Wminusmunu*
sqrt(absUncWminusmunu**2+absCorrWminusmunu**2)))
182 absCorrZmumu = Zmumu*
sqrt(0.012**2+0.0158**2)
185 relUncMomRes = 0.2e-2
186 relUncMCStat = 0.4e-2
187 relUncBkg =
sqrt(relUncFit**2+0.2e-2**2)
188 absUncZmumu=Zmumu*
sqrt(relUncEff**2+relUncMomRes**2+relUncBkg**2+relUncMCStat**2)
189 print(
"\nZmumu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.) +- %.4f (lumi.) [nb]" % (Zmumu, absStatZmumu, absUncZmumu, absCorrZmumu, Zmumu*relSysLumi))
190 print(
" Systematics >>>>>>>")
191 print(
"\tEfficiency(Pretriggering): %.2f %%" % (100*relUncEff))
192 print(
"\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes))
193 print(
"\tBackground subtraction/fit: %.2f %%" % (100*relUncBkg))
194 print(
"\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat))
195 print(
"\tTheory: %.2f %%" % (100./Zmumu*absCorrZmumu))
196 print(
"\tTOTAL (LUMI excluded): %.2f %%\n" % (100./Zmumu*
sqrt(absUncZmumu**2+absCorrZmumu**2)))
198 Ratiomunu = Wplusmunu/Wminusmunu
199 absStatRatiomunu = 0.026
200 absCorrRatiomunu = Ratiomunu*
sqrt(0.021**2+0.0119**2)
202 relUncMomRes = 0.3e-2
203 relUncMCStat =
sqrt(2)*1.4e-3
205 absUncRatiomunu = Ratiomunu*
sqrt(relUncEff**2+relUncMomRes**2+relUncMCStat**2+relUncBkg**2)
206 print(
"\nRatiomunu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (Ratiomunu, absStatRatiomunu, absUncRatiomunu, absCorrRatiomunu))
207 print(
" Systematics >>>>>>>")
208 print(
"\tEfficiency(W+ versus W- tests): %.2f %%" % (100*relUncEff))
209 print(
"\tMomentum scale/resolution: %.2f %%" % (100*relUncMomRes))
210 print(
"\tBackground subtraction: %.2f %%" % (100*relUncBkg))
211 print(
"\tMC statistics (acceptance): %.2f %%" % (100*relUncMCStat))
212 print(
"\tTheory: %.2f %%" % (100./Ratiomunu*absCorrRatiomunu))
213 print(
"\tTOTAL: %.2f %%\n" % (100./Ratiomunu*
sqrt(absUncRatiomunu**2+absCorrRatiomunu**2)))
217 absCorrWZmu = WZmu*
sqrt(0.011**2+0.0135**2)
219 relUncMomResW = 0.3e-2
220 relUncMomResZ = 0.2e-2
221 relSysSubtract =
sqrt(relUncEffW**2+relUncMomResW**2+relUncMomResZ**2)
222 relSysAdd =
abs(relUncMomResW-relUncMomResZ)
223 absUncWZmu = WZmu*
sqrt((absUncWmunu/Wmunu)**2 + (absUncZmumu/Zmumu)**2 - relSysSubtract**2 + relSysAdd**2)
224 print(
"\nWZmu cross section = %.4f +- %.4f (stat.) +- %.4f (syst.) +- %.4f (theo.)" % (WZmu, absStatWZmu, absUncWZmu, absCorrWZmu))
225 print(
" STATISTICAL UNCERTAINTY INCLUDES EFFICIENCY (via Zmumu fit)")
226 print(
" Systematics >>>>>>>")
227 print(
"\tUncorrelated with electrons: %.2f %%" % (100./WZmu*absUncWZmu))
228 print(
"\tTheory: %.2f %%" % (100./WZmu*absCorrWZmu))
229 print(
"\tTOTAL: %.2f %%\n" % (100./WZmu*
sqrt(absUncWZmu**2+absCorrWZmu**2)))
237 absSysLumi = xsection*relSysLumi
238 print(
"VBTF inputs: %s = %.4f +- %.4f (stat.) +- %.4f (exp.) +- %.4f (the.) +- %.4f (lumi) [nb]" % (title, xsection, exsection, sysUnc, sysCor, absSysLumi))
241 def vbtfXSectionAverage(title, xsection1, xsection2, exsection1, exsection2, sysUnc1, sysUnc2, sysCor1, sysCor2, relSysLumi):
242 if OPTION==
"StatisticalAverage":
247 V11 = exsection1**2+sysUnc1**2+sysCor1**2
248 V22 = exsection2**2+sysUnc2**2+sysCor2**2
249 V12 = sysCor1*sysCor2
251 a1 = (V22-V12)/(V11+V22-2*V12)
252 a2 = (V11-V12)/(V11+V22-2*V12)
253 average = a1*xsection1 + a2*xsection2
254 errstat =
sqrt(a1**2*exsection1**2+a2**2*exsection2**2)
255 errunco =
sqrt(a1**2*sysUnc1**2 + a2**2*sysUnc2**2)
256 errtheo =
sqrt(a1**2*sysCor1**2 + a2**2*sysCor2**2 + 2*a1*a2*sysCor1*sysCor2)
257 errsyst =
sqrt(errunco**2+errtheo**2)
259 print(
"VBTF average: %s = %.4f +- %.4f (stat.) [nb]" % (title, average, errstat))
261 absSysLumi = average*relSysLumi
262 print(
"\tVBTF systematics (1): +- %.4f (exp) +- %.4f (the) +- %.4f (lumi) [nb]" % (errunco, errtheo, absSysLumi))
263 print(
"\tVBTF systematics (2): +- %.4f (exp+the) +- %.4f (lumi) [nb]" % (errsyst, absSysLumi))
267 print(
"VBTF inputs: %s = %.4f +- %.4f (stat.) +- %.4f (exp.) +- %.4f (the.)" % (title, ratio, absStat, sysUnc, sysCor))
270 def vbtfRatioAverage(title, ratio1, ratio2, eratio1, eratio2, sysUnc1, sysUnc2, sysCor1, sysCor2):
271 if OPTION==
"StatisticalAverage":
276 V11 = eratio1**2+(sysUnc1**2+sysCor1**2)
277 V22 = eratio2**2+(sysUnc2**2+sysCor2**2)
278 V12 = sysCor1*sysCor2
280 a1 = (V22-V12)/(V11+V22-2*V12)
281 a2 = (V11-V12)/(V11+V22-2*V12)
282 average = a1*ratio1 + a2*ratio2
283 errstat =
sqrt(a1**2*eratio1**2+a2**2*eratio2**2)
284 errunco =
sqrt(a1**2*sysUnc1**2 + a2**2*sysUnc2**2)
285 errtheo =
sqrt(a1**2*sysCor1**2 + a2**2*sysCor2**2 + 2*a1*a2*sysCor1*sysCor2)
286 errsyst =
sqrt(errunco**2+errtheo**2)
288 print(
"VBTF average: %s = %.4f +- %.4f (stat.)" % (title, average, errstat))
290 print(
"\tVBTF systematics (1): +- %.4f (exp) +- %.4f (the)" % (errunco, errtheo))
291 print(
"\tVBTF systematics (2): +- %.4f (exp+the)" % (errsyst))
300 print(
"\n>>>>>>>>>>>>>>>")
301 vbtfXSectionCheck(
"W -> munu cross section",Wmunu,absStatWmunu,absUncWmunu,absCorrWmunu,relSysLumi)
302 vbtfXSectionCheck(
"W -> enu cross section",Wenu,absStatWenu,absUncWenu,absCorrWenu,relSysLumi)
303 vbtfXSectionAverage(
"W -> lnu cross section",Wmunu,Wenu,absStatWmunu,absStatWenu,absUncWmunu,absUncWenu,absCorrWmunu,absCorrWenu,relSysLumi)
308 print(
"\n>>>>>>>>>>>>>>>")
309 vbtfXSectionCheck(
"W+ -> munu cross section",Wplusmunu,absStatWplusmunu,absUncWplusmunu,absCorrWplusmunu,relSysLumi)
310 vbtfXSectionCheck(
"W+ -> enu cross section",Wplusenu,absStatWplusenu,absUncWplusenu,absCorrWplusenu,relSysLumi)
311 vbtfXSectionAverage(
"W+ -> lnu cross section",Wplusmunu,Wplusenu,absStatWplusmunu,absStatWplusenu,absUncWplusmunu,absUncWplusenu,absCorrWplusmunu,absCorrWplusenu,relSysLumi)
316 print(
"\n>>>>>>>>>>>>>>>")
317 vbtfXSectionCheck(
"W- -> munu cross section",Wminusmunu,absStatWminusmunu,absUncWminusmunu,absCorrWminusmunu,relSysLumi)
318 vbtfXSectionCheck(
"W- -> enu cross section",Wminusenu,absStatWminusenu,absUncWminusenu,absCorrWminusenu,relSysLumi)
319 vbtfXSectionAverage(
"W- -> lnu cross section",Wminusmunu,Wminusenu,absStatWminusmunu,absStatWminusenu,absUncWminusmunu,absUncWminusenu,absCorrWminusmunu,absCorrWminusenu,relSysLumi)
325 print(
"\n>>>>>>>>>>>>>>>")
326 vbtfRatioCheck(
"W+ / W- cross section ratio, muon channel",Ratiomunu,absStatRatiomunu,absUncRatiomunu,absCorrRatiomunu)
327 vbtfRatioCheck(
"W+ / W- cross section ratio, electron channel",Ratioenu,absStatRatioenu,absUncRatioenu,absCorrRatioenu)
328 vbtfRatioAverage(
"W+ / W- cross section ratio",Ratiomunu,Ratioenu,absStatRatiomunu,absStatRatioenu,absUncRatiomunu,absUncRatioenu,absCorrRatiomunu,absCorrRatioenu)
334 print(
"\n>>>>>>>>>>>>>>>")
335 vbtfXSectionCheck(
"Z -> mumu cross section",Zmumu,absStatZmumu,absUncZmumu,absCorrZmumu,relSysLumi)
336 vbtfXSectionCheck(
"Z -> ee cross section",Zee,absStatZee,absUncZee,absCorrZee,relSysLumi)
337 vbtfXSectionAverage(
"Z -> ll cross section",Zmumu,Zee,absStatZmumu,absStatZee,absUncZmumu,absUncZee,absCorrZmumu,absCorrZee,relSysLumi)
343 print(
"\n>>>>>>>>>>>>>>>")
344 vbtfRatioCheck(
"W/Z ratio muons",WZmu,absStatWZmu,absUncWZmu,absCorrWZmu)
345 vbtfRatioCheck(
"W/Z ratio electrons",WZe,absStatWZe,absUncWZe,absCorrWZe)
346 vbtfRatioAverage(
"W/Z ratio",WZmu,WZe,absStatWZmu,absStatWZe,absUncWZmu,absUncWZe,absCorrWZmu,absCorrWZe)