Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.44 KB | None | 0 0
  1. import argparse
  2.  
  3. parser = argparse.ArgumentParser(description="")
  4. # parser.add_argument("inputfile" , help = "Path to the input ROOT file")
  5. parser.add_argument("elesel" , help = "Define if pfpf, pflp, lplp")
  6. parser.add_argument("-d", "--doubleg" , dest = "doubleg", help = "Define if use 1 or 2 gaussian for the signal model", default = '0')
  7. args = parser.parse_args()
  8.  
  9. import os, sys, math
  10. sys.path.insert(0, os.environ['HOME'] + '/.local/lib/python2.7/site-packages')
  11.  
  12. import ROOT
  13. from ROOT import gSystem
  14. gSystem.Load('libRooFit')
  15. from ROOT import RooFit, RooRealVar, RooDataSet, RooArgList, RooTreeData, RooArgSet, RooAddPdf, RooFormulaVar
  16. from ROOT import RooGaussian, RooExponential, RooChebychev
  17. from uncertainties import ufloat
  18.  
  19. cut_ele = ''
  20. if args.elesel =='pfpf':
  21. cut_ele = '(e1pf==1 && e2pf==1) && '
  22. if args.elesel =='pflp':
  23. cut_ele = '((e1pf==1 && e2pf==0) || (e2pf==1 && e1pf==0)) && '
  24. if args.elesel =='lplp':
  25. cut_ele = '(e1pf==0 && e2pf==0) &&'
  26.  
  27. tree = ROOT.TChain('my_ttree')
  28. tree.Add('group2_multicands_data_ALL.root')
  29.  
  30.  
  31. BMass_ = 5.277
  32. JPsiMass_ = 3.096916
  33. PsiPMass_ = 3.686109
  34.  
  35. BMass = RooRealVar("BMass" , "BMass" , BMass_ )
  36. JPsiMass = RooRealVar("JPsiMass" , "JPsiMass", JPsiMass_)
  37. PsiPMass = RooRealVar("PsiPMass" , "PsiPMass", PsiPMass_)
  38.  
  39. Bmass = RooRealVar("Bmass" , "e^{+}e^{-}K mass", 4.8, 5.8, "GeV")
  40. Bmll = RooRealVar("Bmll" , "Bmll" , 0, 6);
  41. e1pf = RooRealVar("e1pf" , "e1pf" , 0, 2);
  42. e2pf = RooRealVar("e2pf" , "e2pf" , 0, 2);
  43.  
  44.  
  45. thevars = RooArgSet()
  46. thevars.add(Bmass)
  47. thevars.add(Bmll)
  48. thevars.add(e1pf)
  49. thevars.add(e2pf)
  50.  
  51. fulldata = RooDataSet('fulldata', 'fulldataset', tree, RooArgSet(thevars))
  52.  
  53. q2binning = [
  54. 1, ## 0
  55. 8.41, ## 1 = Jpsi (2.9-3.3)
  56. 10.89, ## 2
  57. 12.86, ## 3 = psiPrime
  58. 14.18, ## 4
  59. 19,
  60. ]
  61.  
  62.  
  63. c1 = ROOT.TCanvas()
  64.  
  65. yields = {}
  66. sigmas = {}
  67.  
  68. for ibin in range(len(q2binning)-1):
  69. cut = cut_ele + '(Bmll*Bmll > %s && Bmll*Bmll < %s)'%(q2binning[ibin], q2binning[ibin+1])
  70. print cut
  71. data = fulldata.reduce(RooArgSet(Bmass,Bmll), cut)
  72.  
  73. mean = RooRealVar ("mass" , "mean" , BMass_, 5, 5.3, "GeV")
  74. sigma = RooRealVar ("#sigma_{1}" , "sigma" , 0.028, 0, 10, "GeV")
  75. signalGauss = RooGaussian("signalGauss" , "signal gauss" , Bmass, mean,sigma)
  76.  
  77. sigma2 = RooRealVar ("#sigma_{2}" , "sigma2" , 0.048, 0, 0.07, "GeV")
  78. signalGauss2 = RooGaussian("signalGauss2" , "signal gauss2" , Bmass, mean,sigma2)
  79. f1 = RooRealVar ("f1" , "f1" , 0.8 , 0., 1.)
  80. gaus = RooAddPdf ("gaus" , "gaus1+gaus2" , RooArgList(signalGauss,signalGauss2), RooArgList(f1))
  81.  
  82. pol_c1 = RooRealVar ("p1" , "coeff x^0 term", 0.5, -10, 10);
  83. pol_c2 = RooRealVar ("p2" , "coeff x^1 term", 0.5, -10, 10);
  84. pol_c3 = RooRealVar ("p3" , "coeff x^2 term", 0.5, -10, 10);
  85. slope = RooRealVar ("slope" , "slope" , 0.5, -10, 10);
  86. bkg_exp = RooExponential("bkg_exp" , "exponential" , slope, Bmass );
  87. bkg_pol = RooChebychev("bkg_pol" , "2nd order pol" , Bmass, RooArgList(pol_c1,pol_c2));
  88.  
  89. nsig = RooRealVar("Yield" , "signal frac" , 4000, 0, 1000000);
  90. nbkg = RooRealVar("nbkg" , "bkg fraction" , 1000, 0, 550000);
  91.  
  92. fitFunction = RooAddPdf ("fitfunction" , "fit function" , RooArgList(signalGauss, bkg_exp), RooArgList(nsig, nbkg))
  93. if int(args.doubleg) == 2:
  94. fitFunction = RooAddPdf ("fitfunction" , "fit function" , RooArgList(gaus, bkg_exp), RooArgList(nsig, nbkg))
  95. r = fitFunction.fitTo(data, RooFit.Extended(True), RooFit.Save(), RooFit.Range( 4.8, 5.8,))
  96.  
  97. frame = Bmass.frame()
  98. data.plotOn(frame, RooFit.Binning(25), RooFit.MarkerSize(.7))
  99. fitFunction.plotOn(frame, );
  100. fitFunction.plotOn(frame, RooFit.Components("bkg_exp") , RooFit.LineStyle(ROOT.kDotted), RooFit.LineColor(ROOT.kRed));
  101. if int(args.doubleg) != 2:
  102. fitFunction.plotOn(frame, RooFit.Components("signalGauss") , RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kBlue), RooFit.FillColor(ROOT.kBlue), RooFit.DrawOption("F"), RooFit.FillStyle(3004))
  103. fitFunction.plotOn(frame, RooFit.Components("signalGauss") , RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kBlue))
  104.  
  105. elif int(args.doubleg) == 2:
  106. fitFunction.plotOn(frame, RooFit.Components("signalGauss") , RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kGreen+1))
  107. fitFunction.plotOn(frame, RooFit.Components("signalGauss2"), RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kOrange+1));
  108. fitFunction.plotOn(frame, RooFit.Components("gaus") , RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kBlue), RooFit.FillColor(ROOT.kBlue), RooFit.DrawOption("F"), RooFit.FillStyle(3004))
  109. fitFunction.plotOn(frame, RooFit.Components("gaus") , RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kBlue));
  110.  
  111. parList = RooArgSet (nsig,sigma,sigma2, mean)
  112. # fitFunction.plotOn(frame, RooFit.Components("signalGauss2"), RooFit.LineStyle(ROOT.kDashed), RooFit.LineColor(ROOT.kGreen+2));
  113.  
  114. fitFunction.paramOn(frame, RooFit.Parameters(parList), RooFit.Layout(0.62,0.86,0.88))
  115.  
  116. frame.GetYaxis().SetTitleOffset(1.35)
  117. frame.getAttText().SetTextSize(0.022)
  118. frame.getAttText().SetTextFont(42)
  119. frame.getAttLine().SetLineColor(0)
  120. frame.SetTitle('')
  121.  
  122. frame.Draw()
  123. c1.SaveAs('save_fit_data_%s_%s_Mauro_NoCleaning.pdf'%(ibin,args.elesel))
  124.  
  125. resSigma1 = ufloat (sigma.getVal(), sigma.getError())
  126. resSigma2 = ufloat (0, 0)
  127. resF = ufloat (1, 0)
  128. if int(args.doubleg) == 2:
  129. resSigma2 = ufloat (sigma2.getVal(), sigma2.getError())
  130. resF = ufloat (f1.getVal(), f1.getError())
  131.  
  132. totSigma = resF*(resSigma1**2) + (1-resF)*(resSigma2**2)
  133.  
  134. totSigma_v = math.sqrt(totSigma.n)
  135. totSigma_e = totSigma.s/2/math.sqrt(totSigma.n)
  136.  
  137.  
  138. yields[ibin] = [nsig.getVal(), nsig.getError()]
  139. sigmas[ibin] = [totSigma_v, totSigma_e]
  140.  
  141.  
  142. for k,v in yields.items():
  143. print 'bin ', k, '\t B0 yield: ', v[0], '+/-', v[1]
  144.  
  145. for k,v in sigmas.items():
  146. print 'bin ', k, '\t B0 sigma: ', v[0], '+/-', v[1]
  147.  
  148.  
  149.  
  150.  
  151. #pragma link C++ class RooTreeData ;
  152. #pragma link C++ class RooTreeData::PlotOpt ;
  153. #pragma link C++ class RooTruthModel ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement