28 from basf2
import B2FATAL
33 from operator
import itemgetter
35 if len(sys.argv) != 4:
37 "Must provide 3 arguments: [input_sim_file] or ['input_sim_file*'] wildcards, [treeName] " +
38 "and [VXD_requirement (PXD or SVD)]")
42 workingFile = sys.argv[1]
43 workingFiles = glob.glob(str(workingFile))
50 treeName = str(sys.argv[2])
55 if str(sys.argv[3]) ==
"PXD":
56 VXDReqs = [
"PXD0",
"PXD2"]
57 elif str(sys.argv[3]) ==
"SVD":
58 VXDReqs = [
"SVD0",
"SVD2"]
60 B2FATAL(
'Not available VXD requirement " + str(sys.argv[3]) + ". Available are "PXD" and "SVD".')
62 ROOT.RooMsgService.instance().setGlobalKillBelow(ROOT.RooFit.WARNING)
67 for VXDReq
in VXDReqs:
70 tdat = ROOT.TChain(treeName)
72 for iFile
in workingFiles:
75 B0_DeltaT = ROOT.RooRealVar(
"DeltaT",
"DeltaT", 0.)
76 deltaTErr = ROOT.RooRealVar(
"DeltaTErr",
"DeltaTErr", 0, limDeltaTErr,
"ps")
77 B0_TruthDeltaT = ROOT.RooRealVar(
"MCDeltaT",
"MCDeltaT", 0.)
79 B0_qrMC = ROOT.RooRealVar(
"qrMC",
"qrMC", 0., -100, 100)
80 B0_isSignal = ROOT.RooRealVar(
"isSignal",
"isSignal", 0., 0., 512.)
82 B0_TagVz = ROOT.RooRealVar(
"TagVz",
"TagVz", 0., -100, 100,
"cm")
83 B0_TruthTagVz = ROOT.RooRealVar(
"mcTagVz",
"mcTagVz", 0., -100, 100,
"cm")
85 B0_Z = ROOT.RooRealVar(
"z",
"z", 0., -100, 100,
"cm")
86 B0_TruthZ = ROOT.RooRealVar(
"mcZ",
"mcZ", 0., -100, 100,
"cm")
88 B0_Jpsi_mu0_nPXDHits = ROOT.RooRealVar(
"Jpsi_mu_0_nPXDHits",
"Jpsi_mu_0_nPXDHits", 0., -10., 100.)
89 B0_Jpsi_mu1_nPXDHits = ROOT.RooRealVar(
"Jpsi_mu_1_nPXDHits",
"Jpsi_mu_1_nPXDHits", 0., -10., 100.)
90 B0_Jpsi_mu0_nSVDHits = ROOT.RooRealVar(
"Jpsi_mu_0_nSVDHits",
"Jpsi_mu_0_nSVDHits", 0., -10., 100.)
91 B0_Jpsi_mu1_nSVDHits = ROOT.RooRealVar(
"Jpsi_mu_1_nSVDHits",
"Jpsi_mu_1_nSVDHits", 0., -10., 100.)
96 DT = ROOT.RooRealVar(
"DT",
"DT", 0., -limDeltaT, limDeltaT,
"ps")
97 DSigZ = ROOT.RooRealVar(
"DSigZ",
"DSigZ", 0., -limZSig, limZSig,
"cm")
99 DTagZ = ROOT.RooRealVar(
"DSigZ",
"DSigZ", 0., -limZTag, limZTag,
"cm")
102 histo_DeltaT = ROOT.TH1F(
'B0_DeltaT_' + VXDReq,
'Residual of DeltaT',
103 100, -limDeltaT, limDeltaT)
104 histo_DeltaTErr = ROOT.TH1F(
'B0_DeltaTErr_' + VXDReq,
'Residual of DeltaZsig',
106 histo_DeltaZSig = ROOT.TH1F(
'B0_DeltaZsig_' + VXDReq,
'Residual of DeltaZsig',
107 100, -limZSig, limZSig)
108 histo_DeltaZTag = ROOT.TH1F(
'B0_DeltaZtag_' + VXDReq,
'Residual of DeltaZsig',
109 100, -limZTag, limZTag)
111 cut =
"isSignal == 1 "
114 cut = cut +
"&& (Jpsi_mu_0_nPXDHits> 0 || Jpsi_mu_1_nPXDHits> 0) "
116 cut = cut +
"&& Jpsi_mu_0_nPXDHits> 0 && Jpsi_mu_1_nPXDHits> 0 "
119 cut = cut +
"&& (Jpsi_mu_0_SVDHits> 0 || Jpsi_mu_1_nSVDHits> 0) "
121 cut = cut +
"&& Jpsi_mu_0_nSVDHits> 0 && Jpsi_mu_1_nSVDHits> 0 "
123 argSet = ROOT.RooArgSet(
131 argSet.add(B0_Jpsi_mu0_nPXDHits)
132 argSet.add(B0_Jpsi_mu1_nPXDHits)
133 argSet.add(B0_Jpsi_mu0_nSVDHits)
134 argSet.add(B0_Jpsi_mu1_nSVDHits)
136 argSet.add(B0_isSignal)
138 data = ROOT.RooDataSet(
145 if VXDReq ==
'PXD1' or VXDReq ==
'PXD2':
146 fitDataDTErr = ROOT.RooDataSet(
"data",
"data", tdat, ROOT.RooArgSet(
147 B0_isSignal, B0_Jpsi_mu0_nPXDHits, B0_Jpsi_mu1_nPXDHits, deltaTErr), cut)
148 elif VXDReq ==
'SVD1' or VXDReq ==
'SVD2':
149 fitDataDTErr = ROOT.RooDataSet(
"data",
"data", tdat, ROOT.RooArgSet(
150 B0_isSignal, B0_Jpsi_mu0_nSVDHits, B0_Jpsi_mu1_nSVDHits, deltaTErr), cut)
152 fitDataDTErr = ROOT.RooDataSet(
"data",
"data", tdat, ROOT.RooArgSet(B0_isSignal, deltaTErr), cut)
156 fitDataDT = ROOT.RooDataSet(
"fitDataDT",
"fitDataDT", ROOT.RooArgSet(DT))
157 fitDataSigZ = ROOT.RooDataSet(
"fitDataSigZ",
"fitDataSigZ", ROOT.RooArgSet(DSigZ))
158 fitDataTagZ = ROOT.RooDataSet(
"fitDataTagZ",
"fitDataTagZ", ROOT.RooArgSet(DTagZ))
160 for i
in range(data.numEntries()):
164 tDT = row.getRealValue(
"DeltaT", 0, ROOT.kTRUE) - row.getRealValue(
"MCDeltaT", 0, ROOT.kTRUE)
165 if abs(tDT) < limDeltaT:
167 fitDataDT.add(ROOT.RooArgSet(DT))
169 tDSigZ = row.getRealValue(
"z", 0, ROOT.kTRUE) - row.getRealValue(
"mcZ", 0, ROOT.kTRUE)
171 if abs(tDSigZ) < limZSig:
173 fitDataSigZ.add(ROOT.RooArgSet(DSigZ))
175 tDTagZ = row.getRealValue(
"TagVz", 0, ROOT.kTRUE) - row.getRealValue(
"mcTagVz", 0, ROOT.kTRUE)
177 if abs(tDTagZ) < limZTag:
179 fitDataTagZ.add(ROOT.RooArgSet(DTagZ))
185 numberOfEntries.append(data.numEntries())
189 Mu1 = ROOT.RooRealVar(
"Mu1",
"Mu1", 0., -limDeltaT, limDeltaT)
190 Mu2 = ROOT.RooRealVar(
"Mu2",
"Mu2", 0., -limDeltaT, limDeltaT)
191 Mu3 = ROOT.RooRealVar(
"Mu3",
"Mu3", 0., -limDeltaT, limDeltaT)
192 Sigma1 = ROOT.RooRealVar(
"Sigma1",
"Sigma1", 1.88046e+00, 0., limDeltaT)
193 Sigma2 = ROOT.RooRealVar(
"Sigma2",
"Sigma2", 3.40331e+00, 0., limDeltaT)
194 Sigma3 = ROOT.RooRealVar(
"Sigma3",
"Sigma3", 8.23171e-01, 0., limDeltaT)
195 frac1 = ROOT.RooRealVar(
"frac1",
"frac1", 5.48703e-01, 0.0, 1.)
196 frac2 = ROOT.RooRealVar(
"frac2",
"frac2", 2.60604e-01, 0.0, 1.)
198 g1 = ROOT.RooGaussModel(
"g1",
"g1", DT, Mu1, Sigma1)
199 g2 = ROOT.RooGaussModel(
"g2",
"g2", DT, Mu2, Sigma2)
200 g3 = ROOT.RooGaussModel(
"g3",
"g3", DT, Mu3, Sigma3)
202 argset1 = ROOT.RooArgSet(g1)
203 argset2 = ROOT.RooArgSet(g2)
204 argset3 = ROOT.RooArgSet(g3)
206 model = ROOT.RooAddModel(
"model",
"model", ROOT.RooArgList(g1, g2, g3), ROOT.RooArgList(frac1, frac2))
208 DT.setRange(
"fitRange", -limDeltaT, limDeltaT)
210 fitRes = model.fitTo(
212 ROOT.RooFit.Minos(ROOT.kFALSE), ROOT.RooFit.Extended(ROOT.kFALSE),
213 ROOT.RooFit.NumCPU(8), ROOT.RooFit.Save())
219 resFrame = DT.frame()
220 fitDataDT.plotOn(resFrame)
222 meanCBS = ROOT.RooRealVar(
"meanCBS",
"meanCBS", 5.37602e-01, 0.5, 1,
"ps")
223 sigmaCBS = ROOT.RooRealVar(
"sigmaCBS",
"sigmaCBS", 8.16334e-02, 0, 0.1,
"ps")
224 alphaCBS = ROOT.RooRealVar(
"alphaCBS",
"alphaCBS", -4.85571e-01, -1, 0,
"")
225 nCBS = ROOT.RooRealVar(
"nCBS",
"nCBS", 1.86325e+00, 0.5, 3,
"")
226 dtErrCBS = ROOT.RooCBShape(
"dtErrGen",
"dtErrGen", deltaTErr, meanCBS, sigmaCBS, alphaCBS, nCBS)
228 MuErr1 = ROOT.RooRealVar(
"MuErr1",
"MuErr1", 4.12399e-01, 0.3, 0.6,
"ps")
229 SigmaErr1 = ROOT.RooRealVar(
"SigmaErr1",
"SigmaErr1", 5.41152e-02, 0. - 1, 0.07,
"ps")
230 gErr1 = ROOT.RooGaussModel(
"gErr1",
"gErr1", deltaTErr, MuErr1, SigmaErr1)
231 fracErr1 = ROOT.RooRealVar(
"fracErr1",
"fracErr1", 7.50810e-01, 0.0, 1.)
233 MuErr2 = ROOT.RooRealVar(
"MuErr2",
"MuErr2", 3.26658e-01, 0.2, 0.4,
"ps")
234 SigmaErr2 = ROOT.RooRealVar(
"SigmaErr2",
"SigmaErr2", 3.66794e-02, 0.01, 0.08,
"ps")
235 gErr2 = ROOT.RooGaussModel(
"gErr2",
"gErr2", deltaTErr, MuErr2, SigmaErr2)
236 fracErr2 = ROOT.RooRealVar(
"fracErr2",
"fracErr2", 1.82254e-01, 0.0, 1.)
238 modelTErr = ROOT.RooAddModel(
239 "modelErr",
"modelErr", ROOT.RooArgList(
240 dtErrCBS, gErr1, gErr2), ROOT.RooArgList(
243 if VXDReq ==
'PXD0' or VXDReq ==
'PXD1' or VXDReq ==
'PXD2':
244 CBSFitRes = modelTErr.fitTo(
246 ROOT.RooFit.Minos(ROOT.kFALSE), ROOT.RooFit.Extended(ROOT.kFALSE),
247 ROOT.RooFit.NumCPU(8), ROOT.RooFit.Save())
251 argset1TErr = ROOT.RooArgSet(dtErrCBS)
252 argset2TErr = ROOT.RooArgSet(gErr1)
253 argset3TErr = ROOT.RooArgSet(gErr2)
255 resFrameDtErr = deltaTErr.frame()
256 fitDataDTErr.plotOn(resFrameDtErr)
257 modelTErr.plotOn(resFrameDtErr)
260 ROOT.RooFit.Components(argset1TErr),
261 ROOT.RooFit.LineColor(ROOT.kRed + 2),
262 ROOT.RooFit.LineWidth(4))
265 ROOT.RooFit.Components(argset2TErr),
266 ROOT.RooFit.LineColor(ROOT.kGreen + 3),
267 ROOT.RooFit.LineWidth(4))
270 ROOT.RooFit.Components(argset3TErr),
271 ROOT.RooFit.LineColor(ROOT.kMagenta + 2),
272 ROOT.RooFit.LineWidth(4))
279 argsetList.append([argset1, f1])
280 argsetList.append([argset2, f2])
281 argsetList.append([argset3, f3])
283 argsetList = sorted(argsetList, key=itemgetter(1))
285 model.plotOn(resFrame, ROOT.RooFit.LineWidth(3))
286 model.plotOn(resFrame, ROOT.RooFit.Components(argsetList[2][0]), ROOT.RooFit.LineColor(ROOT.kRed + 2), ROOT.RooFit.LineWidth(4))
288 resFrame, ROOT.RooFit.Components(
289 argsetList[1][0]), ROOT.RooFit.LineColor(
290 ROOT.kGreen + 3), ROOT.RooFit.LineWidth(4))
292 resFrame, ROOT.RooFit.Components(
293 argsetList[0][0]), ROOT.RooFit.LineColor(
294 ROOT.kMagenta + 2), ROOT.RooFit.LineWidth(4))
296 resFrame.SetTitle(
"")
297 sXtitle =
"#Deltat - Gen. #Delta t / ps"
298 resFrame.GetXaxis().SetTitle(sXtitle)
299 resFrame.GetXaxis().SetTitleSize(0.05)
300 resFrame.GetXaxis().SetLabelSize(0.045)
301 resFrame.GetYaxis().SetTitleSize(0.05)
302 resFrame.GetYaxis().SetTitleOffset(1.5)
303 resFrame.GetYaxis().SetLabelSize(0.045)
305 shift = Mu1.getVal() * f1 + Mu2.getVal() * f2 + Mu3.getVal() * f3
306 resolution = Sigma1.getVal() * f1 + Sigma2.getVal() * f2 + Sigma3.getVal() * f3
308 shiftErr = math.sqrt((Mu1.getError() * f1)**2 + (Mu2.getError() * f2)**2 + (Mu3.getError() * f3)**2)
309 resolutionErr = math.sqrt((Sigma1.getError() * f1)**2 + (Sigma2.getError() * f2)**2 + (Sigma3.getError() * f3)**2)
314 if resolutionErr < 0.01:
317 Numbr =
'{:d}'.format(int((f1 + f2) * fitDataDT.numEntries()))
319 c1 = ROOT.TCanvas(
"c1",
"c1", 1400, 1100)
321 Pad = ROOT.TPad(
"p1",
"p1", 0, 0, 1, 1, 0, 0, 0)
322 Pad.SetLeftMargin(0.15)
323 Pad.SetBottomMargin(0.15)
327 legend = ROOT.TLegend(0.59, 0.6, 0.9, 0.9)
331 '#splitline{#mu_{#Delta t} =' +
332 '{: 4.2f}'.format(shift) +
334 '{:4.2f}'.format(shiftErr) +
336 legend.AddEntry(0,
'#splitline{#sigma_{#Delta t} =' +
'{: 4.2f}'.format(resolution) +
'}{ #pm ' +
337 '{:4.2f}'.format(resolutionErr) +
' ps}')
338 legend.SetTextSize(0.054)
339 legend.SetFillColorAlpha(ROOT.kWhite, 0)
342 nPlot = PATH +
"/test6_CPVResDeltaT" + VXDReq +
".pdf"
346 iResult.append([
'mu = ' +
'{: 4.3f}'.format(shift) +
' +- ' +
'{:4.3f}'.format(shiftErr) +
' ps',
347 'sigma =' +
'{: 4.3f}'.format(resolution) +
' +- ' +
'{:4.3f}'.format(resolutionErr) +
' ps'])
349 resFrameDtErr.SetTitle(
"")
350 sXtitleLandau =
"#sigma_{#Deltat} / ps"
351 resFrameDtErr.GetXaxis().SetTitle(sXtitleLandau)
352 resFrameDtErr.GetXaxis().SetTitleSize(0.05)
353 resFrameDtErr.GetXaxis().SetLabelSize(0.045)
354 resFrameDtErr.GetYaxis().SetTitleSize(0.05)
355 resFrameDtErr.GetYaxis().SetTitleOffset(1.5)
356 resFrameDtErr.GetYaxis().SetLabelSize(0.045)
358 c1 = ROOT.TCanvas(
"c1",
"c1", 1400, 1100)
360 Pad = ROOT.TPad(
"p1",
"p1", 0, 0, 1, 1, 0, 0, 0)
361 Pad.SetLeftMargin(0.15)
362 Pad.SetBottomMargin(0.15)
366 legend = ROOT.TLegend(0.59, 0.6, 0.9, 0.9)
368 legend.AddEntry(0,
'#splitline{#mu_{#Delta t} =' +
'{: 4.2f}'.format(meanCBS.getVal()) +
'}{ #pm ' +
369 '{:4.2f}'.format(meanCBS.getError()) +
' ps}')
370 legend.AddEntry(0,
'#splitline{#sigma_{#Delta t} =' +
'{: 4.2f}'.format(sigmaCBS.getVal()) +
371 '}{ #pm ' +
'{:4.2f}'.format(sigmaCBS.getError()) +
' ps}')
372 legend.SetTextSize(0.054)
373 legend.SetFillColorAlpha(ROOT.kWhite, 0)
376 nPlot = PATH +
"/test6_CPVResDeltaTError" + VXDReq +
".pdf"
385 Mu1SigZ = ROOT.RooRealVar(
"Mu1SigZ",
"Mu1SigZ", -6.03806e-06, -limZSig, limZSig)
386 Mu2SigZ = ROOT.RooRealVar(
"Mu2SigZ",
"Mu2SigZ", 1.45755e-05, -limZSig, limZSig)
387 Mu3SigZ = ROOT.RooRealVar(
"Mu3SigZ",
"Mu3SigZ", -1.84464e-04, -limZSig, limZSig)
388 Sigma1SigZ = ROOT.RooRealVar(
"Sigma1SigZ",
"Sigma1SigZ", 4.03530e-03, 0., limZSig)
389 Sigma2SigZ = ROOT.RooRealVar(
"Sigma2SigZ",
"Sigma2SigZ", 1.73995e-03, 0., limZSig)
390 Sigma3SigZ = ROOT.RooRealVar(
"Sigma3SigZ",
"Sigma3SigZ", 2.18176e-02, 0., limZSig)
391 frac1SigZ = ROOT.RooRealVar(
"frac1SigZ",
"frac1SigZ", 2.08032e-01, 0.0, 1.)
392 frac2SigZ = ROOT.RooRealVar(
"frac2SigZ",
"frac2SigZ", 7.80053e-01, 0.0, 1.)
394 g1SigZ = ROOT.RooGaussian(
"g1",
"g1", DSigZ, Mu1SigZ, Sigma1SigZ)
395 g2SigZ = ROOT.RooGaussian(
"g2",
"g2", DSigZ, Mu2SigZ, Sigma2SigZ)
396 g3SigZ = ROOT.RooGaussian(
"g3",
"g3", DSigZ, Mu3SigZ, Sigma3SigZ)
398 argset1SigZ = ROOT.RooArgSet(g1SigZ)
399 argset2SigZ = ROOT.RooArgSet(g2SigZ)
400 argset3SigZ = ROOT.RooArgSet(g3SigZ)
402 modelSigZ = ROOT.RooAddPdf(
403 "modelSigZ",
"modelSigZ", ROOT.RooArgList(g1SigZ, g2SigZ, g3SigZ),
404 ROOT.RooArgList(frac1SigZ, frac2SigZ))
406 DSigZ.setRange(
"fitRange", -limZSig, limZSig)
408 fitResSigZ = modelSigZ.fitTo(
409 fitDataSigZ, ROOT.RooFit.Minos(ROOT.kFALSE),
410 ROOT.RooFit.Extended(ROOT.kFALSE), ROOT.RooFit.NumCPU(1), ROOT.RooFit.Save())
412 resFrameSigZ = DSigZ.frame()
414 f1SigZ = frac1SigZ.getVal()
415 f2SigZ = frac2SigZ.getVal()
416 f3SigZ = 1 - f1SigZ - f2SigZ
419 argsetList.append([argset1SigZ, f1SigZ])
420 argsetList.append([argset2SigZ, f2SigZ])
421 argsetList.append([argset3SigZ, f3SigZ])
423 argsetList = sorted(argsetList, key=itemgetter(1))
425 fitDataSigZ.plotOn(resFrameSigZ)
426 modelSigZ.plotOn(resFrameSigZ, ROOT.RooFit.LineWidth(4))
427 modelSigZ.plotOn(resFrameSigZ, ROOT.RooFit.Components(argsetList[2][0]), ROOT.RooFit.LineColor(ROOT.kRed + 2),
428 ROOT.RooFit.LineWidth(4))
429 modelSigZ.plotOn(resFrameSigZ, ROOT.RooFit.Components(argsetList[1][0]), ROOT.RooFit.LineColor(ROOT.kGreen + 3),
430 ROOT.RooFit.LineWidth(4))
433 ROOT.RooFit.Components(argsetList[0][0]),
434 ROOT.RooFit.LineColor(
436 ROOT.RooFit.LineWidth(4))
437 resFrameSigZ.SetTitle(
"")
439 sXtitleSigZ =
"z - mcZ / cm"
441 resFrameSigZ.GetXaxis().SetTitle(sXtitleSigZ)
442 resFrameSigZ.GetXaxis().SetLimits(-limZSig, limZSig)
443 resFrameSigZ.GetXaxis().SetTitleSize(0.05)
444 resFrameSigZ.GetXaxis().SetLabelSize(0.045)
445 resFrameSigZ.GetYaxis().SetTitleSize(0.05)
446 resFrameSigZ.GetYaxis().SetTitleOffset(1.5)
447 resFrameSigZ.GetYaxis().SetLabelSize(0.045)
449 shiftSigZ = Mu1SigZ.getVal() * f1SigZ + Mu2SigZ.getVal() * f2SigZ + Mu3SigZ.getVal() * f3SigZ
450 resolutionSigZ = Sigma1SigZ.getVal() * f1SigZ + Sigma2SigZ.getVal() * f2SigZ + Sigma3SigZ.getVal() * f3SigZ
452 shiftSigZ = shiftSigZ * 10000
453 resolutionSigZ = resolutionSigZ * 10000
455 shiftErrSigZ = math.sqrt((Mu1SigZ.getError() * f1SigZ)**2 + (Mu2SigZ.getError() * f2SigZ) ** 2 +
456 (Mu3SigZ.getError() * f3SigZ)**2) * 10000
457 resolutionErrSigZ = math.sqrt((Sigma1SigZ.getError() * f1SigZ)**2 + (Sigma2SigZ.getError() * f2SigZ)**2 +
458 (Sigma3SigZ.getError() * f3SigZ)**2) * 10000
460 cSig = ROOT.TCanvas(
"c1",
"c1", 1400, 1100)
462 Pad = ROOT.TPad(
"p1",
"p1", 0, 0, 1, 1, 0, 0, 0)
463 Pad.SetLeftMargin(0.15)
464 Pad.SetBottomMargin(0.15)
468 legend = ROOT.TLegend(0.63, 0.65, 0.9, 0.9)
474 '#splitline{#mu_{#Delta z} =' +
475 '{: 1.1f}'.format(shiftSigZ) +
477 '{:1.1f}'.format(shiftErrSigZ) +
481 '#splitline{#sigma_{#Delta z} =' +
482 '{: 1.1f}'.format(resolutionSigZ) +
484 '{:1.1f}'.format(resolutionErrSigZ) +
487 legend.SetTextSize(0.05)
488 legend.SetFillColorAlpha(ROOT.kWhite, 0)
491 nPlot = PATH +
"/test6_CPVResDeltaZsig" + VXDReq +
".pdf"
498 iResult.append([
'mu = ' +
'{:^5.3f}'.format(shiftSigZ) +
' +- ' +
'{:^4.3f}'.format(shiftErrSigZ) +
' mum',
499 'sigma = ' +
'{:^4.3f}'.format(resolutionSigZ) +
' +- ' +
'{:^4.3f}'.format(resolutionErrSigZ) +
' mum'])
503 Mu1TagZ = ROOT.RooRealVar(
"Mu1TagZ",
"Mu1TagZ", 0., -limZTag, limZTag)
504 Mu2TagZ = ROOT.RooRealVar(
"Mu2TagZ",
"Mu2TagZ", 0., -limZTag, limZTag)
505 Mu3TagZ = ROOT.RooRealVar(
"Mu3TagZ",
"Mu3TagZ", 0., -limZTag, limZTag)
506 Sigma1TagZ = ROOT.RooRealVar(
"Sigma1TagZ",
"Sigma1TagZ", 2.51877e-02, 0., limZTag)
507 Sigma2TagZ = ROOT.RooRealVar(
"Sigma2TagZ",
"Sigma2TagZ", 1.54011e-02, 0., limZTag)
508 Sigma3TagZ = ROOT.RooRealVar(
"Sigma3TagZ",
"Sigma3TagZ", 1.61081e-02, 0., limZTag)
509 frac1TagZ = ROOT.RooRealVar(
"frac1TagZ",
"frac1TagZ", 1.20825e-01, 0.0, 1.)
510 frac2TagZ = ROOT.RooRealVar(
"frac2TagZ",
"frac2TagZ", 1.10840e-01, 0.0, 1.)
512 g1TagZ = ROOT.RooGaussian(
"g1",
"g1", DTagZ, Mu1TagZ, Sigma1TagZ)
513 g2TagZ = ROOT.RooGaussian(
"g2",
"g2", DTagZ, Mu2TagZ, Sigma2TagZ)
514 g3TagZ = ROOT.RooGaussian(
"g3",
"g3", DTagZ, Mu3TagZ, Sigma3TagZ)
516 argset1TagZ = ROOT.RooArgSet(g1TagZ)
517 argset2TagZ = ROOT.RooArgSet(g2TagZ)
518 argset3TagZ = ROOT.RooArgSet(g3TagZ)
520 modelTagZ = ROOT.RooAddPdf(
"modelTagZ",
"modelTagZ", ROOT.RooArgList(
521 g1TagZ, g2TagZ, g3TagZ), ROOT.RooArgList(frac1TagZ, frac2TagZ))
523 DTagZ.setRange(
"fitRange", -limZTag, limZTag)
525 fitResTagZ = modelTagZ.fitTo(
526 fitDataTagZ, ROOT.RooFit.Minos(
527 ROOT.kFALSE), ROOT.RooFit.Extended(
528 ROOT.kFALSE), ROOT.RooFit.NumCPU(1), ROOT.RooFit.Save())
530 fitResTagZ.Print(
"v")
531 resFrameTagZ = DTagZ.frame()
533 f1TagZ = frac1TagZ.getVal()
534 f2TagZ = frac2TagZ.getVal()
535 f3TagZ = 1 - f1TagZ - f2TagZ
538 argsetList.append([argset1TagZ, f1TagZ])
539 argsetList.append([argset2TagZ, f2TagZ])
540 argsetList.append([argset3TagZ, f3TagZ])
542 argsetList = sorted(argsetList, key=itemgetter(1))
544 fitDataTagZ.plotOn(resFrameTagZ)
545 modelTagZ.plotOn(resFrameTagZ, ROOT.RooFit.LineWidth(4))
547 resFrameTagZ, ROOT.RooFit.Components(
548 argsetList[2][0]), ROOT.RooFit.LineColor(
549 ROOT.kRed + 2), ROOT.RooFit.LineWidth(4))
552 ROOT.RooFit.Components(argsetList[1][0]),
553 ROOT.RooFit.LineColor(ROOT.kGreen + 3),
554 ROOT.RooFit.LineWidth(4))
557 ROOT.RooFit.Components(argsetList[0][0]),
558 ROOT.RooFit.LineColor(ROOT.kMagenta + 2),
559 ROOT.RooFit.LineWidth(4))
560 resFrameTagZ.SetTitle(
"")
562 sXtitleTagZ =
"TagVz - mcTagVz / cm"
564 resFrameTagZ.GetXaxis().SetTitle(sXtitleTagZ)
565 resFrameTagZ.GetXaxis().SetTitleSize(0.05)
566 resFrameTagZ.GetXaxis().SetLabelSize(0.045)
567 resFrameTagZ.GetYaxis().SetTitleSize(0.05)
568 resFrameTagZ.GetYaxis().SetTitleOffset(1.5)
569 resFrameTagZ.GetYaxis().SetLabelSize(0.045)
571 shiftTagZ = Mu1TagZ.getVal() * f1TagZ + Mu2TagZ.getVal() * f2TagZ + Mu3TagZ.getVal() * f3TagZ
572 resolutionTagZ = Sigma1TagZ.getVal() * f1TagZ + Sigma2TagZ.getVal() * f2TagZ + Sigma3TagZ.getVal() * f3TagZ
574 shiftTagZ = shiftTagZ * 10000
575 resolutionTagZ = resolutionTagZ * 10000
577 shiftErrTagZ = math.sqrt((Mu1TagZ.getError() * f1TagZ)**2 + (Mu2TagZ.getError() * f2TagZ) ** 2 +
578 (Mu3TagZ.getError() * f3TagZ)**2) * 10000
579 resolutionErrTagZ = math.sqrt((Sigma1TagZ.getError() * f1TagZ)**2 + (Sigma2TagZ.getError() * f2TagZ)**2 +
580 (Sigma3TagZ.getError() * f3TagZ)**2) * 10000
582 cTag = ROOT.TCanvas(
"c1",
"c1", 1400, 1100)
584 Pad = ROOT.TPad(
"p1",
"p1", 0, 0, 1, 1, 0, 0, 0)
585 Pad.SetLeftMargin(0.15)
586 Pad.SetBottomMargin(0.15)
590 legend = ROOT.TLegend(0.64, 0.65, 0.9, 0.9)
594 legend.AddEntry(0,
'#splitline{#mu_{#Delta z} =' +
'{: 1.1f}'.format(shiftTagZ) +
595 '}{ #pm ' +
'{: 1.1f}'.format(shiftErrTagZ) +
' #mum}')
596 legend.AddEntry(0,
'#splitline{#sigma_{#Delta z} =' +
'{: 1.1f}'.format(resolutionTagZ) +
597 '}{ #pm ' +
'{: 1.1f}'.format(resolutionErrTagZ) +
' #mum}')
598 legend.SetTextSize(0.05)
599 legend.SetFillColorAlpha(ROOT.kWhite, 0)
602 nPlot = PATH +
"/test6_CPVResDeltaZtag" + VXDReq +
".pdf"
606 iResult.append([
'mu = ' +
'{:^5.3f}'.format(shiftTagZ) +
' +- ' +
'{:^4.3f}'.format(shiftErrTagZ) +
' mum',
607 'sigma = ' +
'{:^4.3f}'.format(resolutionTagZ) +
' +- ' +
'{:^4.3f}'.format(resolutionErrTagZ) +
' mum'])
609 fitResults.append(iResult)
612 print(
'*********************** FIT RESULTS ***************************')
614 print(
'* WEIGHTED AVERAGES OF THE PARAMETERS *')
615 print(
'* OF THE FITTED 3 GAUSSIAN *')
617 print(
'**************** WITHOUT VXD HIT REQUIREMENT ******************')
619 print(
'* DeltaT - Gen. DeltaT *')
621 print(
'* ' + fitResults[0][0][0] +
' ' + fitResults[0][0][1] +
' *')
623 print(
'* SigZ - Gen. SigZ *')
625 print(
'* ' + fitResults[0][1][0] +
' ' + fitResults[0][1][1] +
' *')
627 print(
'* TagZ - Gen. TagZ *')
629 print(
'* ' + fitResults[0][2][0] +
' ' + fitResults[0][2][1] +
' *')
631 print(
'********REQUIRING BOTH MUON TRACKS TO HAVE A ' + sys.argv[3] +
' HIT***********')
633 print(
'* Efficiency *')
635 print(
'* N_' + VXDReqs[1] +
'/N_' + VXDReqs[0] +
' = ' + str(numberOfEntries[1]) +
"/" + str(numberOfEntries[0]) +
' = ' +
636 '{:^3.2f}'.format(float((numberOfEntries[1] / numberOfEntries[0]) * 100)) +
'% *')
638 print(
'* DeltaT - Gen. DeltaT *')
640 print(
'* ' + fitResults[1][0][0] +
' ' + fitResults[1][0][1] +
' *')
642 print(
'* SigZ - Gen. SigZ *')
644 print(
'* ' + fitResults[1][1][0] +
' ' + fitResults[1][1][1] +
' *')
646 print(
'* TagZ - Gen. TagZ *')
648 print(
'* ' + fitResults[1][2][0] +
' ' + fitResults[1][2][1] +
' *')
650 print(
'***************************************************************')