Kak W., 2018-09-28
FitManager
/data/users/kakw/Resonances/LepGamma_elg_newblind_2018_09_23_beta
cd /home/kakw/efake/WG_Analysis/Plotting
%run interactiveStackTree.py --baseDir /data/users/kakw/Resonances/LepGamma_elg_newblind_2018_09_23_beta \
--samplesConf Modules/Resonance.py --xsFile cross_sections/photon15.py \
--lumi 35900. --treeName UMDNTuple/EventTree --fileName tree.root --jupyt --quiet
base = 'ph_n>=1 && el_n==1'
baseeta = base + ' && abs(ph_eta[0])<1.4'
base1 = 'ph_n==1 && el_n==1'
base1eta = base1 + ' && ph_IsEB[0]'
#a4 = '&& ph_hasPixSeed[0]==0' #Pixel seed
#b4 = '&& ph_hasPixSeed[0]==1'
passpix = '&& ph_hasPixSeed[0]==0' #Pixel seed
failpix = '&& ph_hasPixSeed[0]==1'
passcsev = '&& ph_passEleVeto[0]==1' #CSEV
failcsev = '&& ph_passEleVeto[0]==0'
ltmet = '&&met_pt<25'
gtmet = '&&met_pt>25'
phpt50 = "&&ph_pt[0]>50"
unblind = "ph_hasPixSeed[0]==1 || met_pt<25"
weight = "PUWeight*NLOWeight"
ROOT.gStyle.SetOptStat(0)
ROOT.gStyle.SetOptFit(1)
#samples.change_stack_order("GammaGamma","Wjets") # not working :/
samples.deactivate_all_samples()
samples.activate_sample(["Z+jets","Zgamma"])
samples.Draw("m_lep_ph",base1eta+gtmet + passpix,(200,0,200),
{"xlabel":"m(e,#gamma) " , "weight": weight,"logy":1 })
samples.Draw("m_lep_ph",base1eta+gtmet+"&&ph_pt[0]>50&&ph_pt[0]<80",(200,0,200),
{"xlabel":"m(e,#gamma) " , "weight": weight,'normalize':1,"logy":1 })
h1 = samples.get_samples(name='__AllStack__')[0].hist.Clone()
h1.Scale(1./h1.Integral())
cv = samples.Draw("m_lep_ph",base1eta+ltmet+"&&ph_pt[0]>100",(200,0,200),
{"xlabel":"m(e,#gamma) " , "weight": weight,'normalize':1 })
h2 = samples.get_samples(name='__AllStack__')[0].hist.Clone()
h2.Scale(1./h2.Integral())
h1.Draw()
h2.Draw("same")
h1.SetLineColor(2)
h1.SetLineWidth(2)
h2.SetLineWidth(2)
h2.SetLineColor(6)
h1.GetXaxis().SetRangeUser(20,160)
h1.GetYaxis().SetRangeUser(0,0.15)
samples.curr_canvases["top"]
#samples.CompareSelections("m_lep_ph",[base1eta+ltmet+"&&ph_pt[0]>100",base1eta+ltmet+"&&ph_pt[0]>50&&ph_pt[0]<60"],
# ["Z+jets"]*2,(200,0,400), {"xlabel":"m(e,#gamma) " , "weight": weight,'normalize':1 ,'logy':1,
# "doratio":1,'rlabel':"red/black", 'colors' : [ROOT.kBlack, ROOT.kRed]})
#samples.curr_canvases['top'].cd();samples.samples[-2].hist.GetYaxis().UnZoom();ROOT.gPad.Modified();ROOT.gPad.Update();
#samples.curr_canvases["base"]
x = ROOT.RooRealVar("x","x",85,195)
x2 = ROOT.RooRealVar("x","reco mass [GeV]",0,200) #plot range
#import DrawConfig; reload(DrawConfig)
import FitManager; reload(FitManager);from FitManager import FitManager
fm = FitManager("cb",h1)
froo_cb = fm.setup_fit((85,195))
with power-law tail (in high end for us)
$f(x;\alpha,n,x,\sigma) = \begin{cases} \text{exp}\left(-\frac{(x-x_{0})^{2}}{2\sigma^{2}}\right)&\text{for }x-x_{0}<\alpha\sigma \\ A\left(B-\frac{x-x_{0}}{\sigma}\right)&\text{for }x-x_{0}\geq\alpha\sigma\end{cases}$
With A and B fixed so that the pdf is continuous and differentiable at juncture
c=fm.draw("Fit of Z reco mass with electron fakes",(1e-4,1),logy=1)
c.Draw()
froo_cb = fm.run_fit((85,155))
fm.draw(" ",(1e-4,1),logy=1,layout=(0.55,0.9,0.82));
#fm.func_pdf.paramOn(fm.frame,RooFit.Layout(0.65)).Draw()
fm.canvas.Draw()
fm.fitresult.Print()
fm.canvas.SetLogy(0); fm.frame.SetMaximum(0.15);fm.canvas.Draw()
fm.frame.chiSquare() # 70 is dof
For the generation of custom piece-wise function:
run in ROOT CINT interactive and edit evaluate()
RooClassFactory::makePdf("DoubleCB","m,m0,sigma,alpha1,n1,alpha2,n2")
in pyROOT: ROOT.gROOT.ProcessLineSync(".x DoubleCB.cxx+")
import FitManager; reload(FitManager);from FitManager import FitManager
fm = FitManager("dcb",h1, xvardata = (40,200,"GeV"))
froo_dcb = fm.setup_fit((60,195))
c=fm.draw(" ",(1e-4,1),logy=1)
#fm.func_pdf.paramOn(fm.frame,RooFit.Layout(0.65,0.9,0.9)).Draw()
c.Draw()
froo_dcb = fm.run_fit((70,180))
c=fm.draw(" ",(2e-5,1),logy=1,paramlayout=(0.55,0.9,0.82),subplot="pull")
know bug in plot normalization https://sft.its.cern.ch/jira/browse/ROOT-7485
meaning of chi sq in RooFit
#fm.func_pdf.paramOn(fm.frame,RooFit.Layout(0.65)).Draw()
%jsroot off
c.Draw()
fm.draw(" ",(2e-5,1),logy=1,paramlayout=0,subplot="pull").Draw()
fm.fitresult.Print()
fm.frame.chiSquare(6)
fm.defs["dcb_alpha2"].getVal()
ROOT.RooArgSet(fm.xvarfit)
pm = fm.func_pdf.getParameters(ROOT.RooArgSet(fm.xvarfit))
pm.printLatex()
$\newcommand\T{\Rule{0pt}{1em}{.3em}} \begin{array}{lrl} \verb+fit range+& [75,&195]\\ \hline \verb+dcb_alpha1+ & 1.08&\pm 0.03\\ \verb+dcb_alpha2+ & 1.14&\pm 0.01\\ \verb+dcb_mass+ & 90.92&\pm 0.02\\ \verb+dcb_power1+ & 8&\pm 1\\ \verb+dcb_power2+ & 1.47&\pm 0.02\\ \verb+dcb_sigma+ & 2.40&\pm 0.03\\ \end{array}$
pm.printLatex()
$\newcommand\T{\Rule{0pt}{1em}{.3em}} \begin{array}{lc} \verb+fit range+& [75,155]\\ \hline \verb+dcb_alpha1+ & 1.10\pm 0.04\\ \verb+dcb_alpha2+ & 1.19\pm 0.02\\ \verb+dcb_mass+ & 90.89\pm 0.02\\ \verb+dcb_power1+ & 8\pm 2\\ \verb+dcb_power2+ & 1.32\pm 0.02\\ \verb+dcb_sigma+ & 2.42\pm 0.03\\ \end{array}$
froo_dcb = fm.run_fit((75,195))
documentation: http://hepcms-hn.umd.edu/~kakw/2018_09_28_FitManager_Rework.html
MET<25 | MET>25, inv Z cut | |
---|---|---|
pass eVeto | A | Signal |
fail eVeto | B | D |
!bash /home/kakw/forjupyter/jupyterconvert.sh /home/kakw/public_html/ 2018_09_28_FitManager_Rework.ipynb
display(Math(r"f(x;\alpha,n,x,\sigma) = \begin{cases}"
r"\text{exp}\left(-\frac{(x-x_{0})^{2}}{2\sigma^{2}}\right)&\text{for }x-x_{0}<\alpha\sigma \\"
r"A\left(B-\frac{x-x_{0}}{\sigma}\right)&\text{for }x-x_{0}\geq\alpha\sigma\end{cases}"))