コード例 #1
0
ファイル: dataFit.py プロジェクト: gdujany/chibAnalysis
def doDataFit(Chib1_parameters,Chib2_parameters, cuts, inputfile_name = None, RooDataSet = None, ptBin_label='', plotTitle = "#chi_{b}",fittedVariable='qValue', printSigReso = False, noPlots = False, useOtherSignalParametrization = False, useOtherBackgroundParametrization = False, massFreeToChange = False, sigmaFreeToChange = False, legendOnPlot=True, drawPulls=False, titleOnPlot=False, cmsOnPlot=True, printLegend=True):

    if RooDataSet != None:
        dataSet = RooDataSet 
    elif inputfile_name != None:
        print "Creating DataSet from file "+str(inputfile_name)
        dataSet = makeRooDataset(inputfile_name)
    else:
        raise ValueError('No dataset and no inputfile passed to function doDataFit')
    
    if(fittedVariable == 'refittedMass'):
        x_var = 'rf1S_chib_mass'
        output_suffix = '_refit'
        x_axis_label= 'm_{#mu^{+} #mu^{-} #gamma} [GeV]'
    else:
        x_var = 'invm1S'
        output_suffix = '_qValue'
        x_axis_label = 'm_{#gamma #mu^{+} #mu^{-}} - m_{#mu^{+} #mu^{-}} + m^{PDG}_{#Upsilon}  [GeV]'
    
    cuts_str = str(cuts)
    #cuts_str = quality_cut + "photon_pt > 0.5 && abs(photon_eta) < 1.0 && ctpv < 0.01  && abs(dimuon_rapidity) < 1.3 && pi0_abs_mass > 0.025 &&  abs(dz) < 0.5"
    data = dataSet.reduce( RooFit.Cut(cuts_str) )
    
    print 'Creating pdf'
    x=RooRealVar(x_var, 'm(#mu #mu #gamma) - m(#mu #mu) + m_{#Upsilon}',9.7,10.1,'GeV')
    numBins = 80 # define here so that if I change it also the ndof change accordingly
    x.setBins(numBins)
    
    # cristal balls
    mean_1 = RooRealVar("mean_1","mean ChiB1",Chib1_parameters.mean,"GeV")
    sigma_1 = RooRealVar("sigma_1","sigma ChiB1",Chib1_parameters.sigma,'GeV')
    a1_1 = RooRealVar('#alpha1_1', '#alpha1_1', Chib1_parameters.a1)
    n1_1 = RooRealVar('n1_1', 'n1_1', Chib1_parameters.n1)
    a2_1 = RooRealVar('#alpha2_1', '#alpha2_1',Chib1_parameters.a2)
    n2_1 = RooRealVar('n2_1', 'n2_1', Chib1_parameters.n2)
    parameters = RooArgSet(a1_1, a2_1, n1_1, n2_1)
    
    mean_2 = RooRealVar("mean_2","mean ChiB2",Chib2_parameters.mean,"GeV")
    sigma_2 = RooRealVar("sigma_2","sigma ChiB2",Chib2_parameters.sigma,'GeV')
    a1_2 = RooRealVar('#alpha1_2', '#alpha1_2', Chib2_parameters.a1)
    n1_2 = RooRealVar('n1_2', 'n1_2', Chib2_parameters.n1)
    a2_2 = RooRealVar('#alpha2_2', '#alpha2_2', Chib2_parameters.a2)
    n2_2 = RooRealVar('n2_2', 'n2_2', Chib2_parameters.n2)
    parameters.add(RooArgSet( a1_2, a2_2, n1_2, n2_2))

    if massFreeToChange:
        # scale_mean = RooRealVar('scale_mean', 'Scale that multiplies masses found with MC', 0.8,1.2)
        # mean_1_fixed = RooRealVar("mean_1_fixed","mean ChiB1",Chib1_parameters.mean,"GeV")
        # mean_2_fixed = RooRealVar("mean_2_fixed","mean ChiB2",Chib2_parameters.mean,"GeV")
        # mean_1 = RooFormulaVar("mean_1",'@0*@1', RooArgList(scale_mean, mean_1_fixed))
        # mean_2 = RooFormulaVar("mean_2",'@0*@1', RooArgList(scale_mean, mean_2_fixed))
        variazione_m = 0.05 # 50 MeV
        diff_m_12 = RooRealVar('diff_m_12', 'Difference between masses chib1 and chib2',0.0194,'GeV') # 19.4 MeV from PDG
        mean_1=RooRealVar("mean_1","mean ChiB1",Chib1_parameters.mean,Chib1_parameters.mean-variazione_m,Chib1_parameters.mean+variazione_m ,"GeV")
        mean_2=RooFormulaVar('mean_2', '@0+@1',RooArgList(mean_1, diff_m_12))
        # mean_2=RooRealVar("mean_2","mean ChiB2",Chib2_parameters.mean,Chib2_parameters.mean-variazione_m,Chib2_parameters.mean+variazione_m ,"GeV")
        parameters.add(mean_1)
    else:
        parameters.add(RooArgSet(mean_1, mean_2))
        
    
    chib1_pdf = My_double_CB('chib1', 'chib1', x, mean_1, sigma_1, a1_1, n1_1, a2_1, n2_1)
    chib2_pdf = My_double_CB('chib2', 'chib2', x, mean_2, sigma_2, a1_2, n1_2, a2_2, n2_2)
    
    if sigmaFreeToChange:
        scale_sigma = RooRealVar('scale_sigma', 'Scale that multiplies sigmases found with MC', 1, 1.1)#1.01
        sigma_1_fixed = RooRealVar("sigma_1","sigma ChiB1",Chib1_parameters.sigma,'GeV')
        sigma_2_fixed = RooRealVar("sigma_2","sigma ChiB2",Chib2_parameters.sigma,'GeV')
        sigma_1 = RooFormulaVar("sigma_1",'@0*@1', RooArgList(scale_sigma, sigma_1_fixed))
        sigma_2 = RooFormulaVar("sigma_2",'@0*@1', RooArgList(scale_sigma, sigma_2_fixed))
        parameters.add(scale_sigma)
    else:
        parameters.add(RooArgSet(sigma_1, sigma_2))

    chib1_pdf = My_double_CB('chib1', 'chib1', x, mean_1, sigma_1, a1_1, n1_1, a2_1, n2_1)
    chib2_pdf = My_double_CB('chib2', 'chib2', x, mean_2, sigma_2, a1_2, n1_2, a2_2, n2_2)

    if useOtherSignalParametrization: # In this case I redefine cb_pdf
        cb1 = RooCBShape('cb1', 'cb1', x, mean_1, sigma_1, a1_1, n1_1)
        cb2 = RooCBShape('cb2', 'cb2', x, mean_2, sigma_2, a1_2, n1_2)
        # I use a2 as the sigma of my gaussian 
        gauss1 = RooCBShape('gauss1', 'gauss1',x, mean_1, a2_1, a1_1, n1_1)
        gauss2 = RooCBShape('gauss2', 'gauss2',x, mean_2, a2_2, a1_2, n1_2)
        # I use n2 as the ratio of cb with respect to gauss 
        chib1_pdf = RooAddPdf('chib1','chib1',RooArgList(cb1, gauss1),RooArgList(n2_1))
        chib2_pdf = RooAddPdf('chib2','chib2',RooArgList(cb2, gauss2),RooArgList(n2_2))
        
    
    #background
    q01S_Start = 9.5
    alpha   =   RooRealVar("#alpha","#alpha",1.5,-1,3.5)#0.2 anziche' 1
    beta    =   RooRealVar("#beta","#beta",-2.5,-7.,0.)
    q0      =   RooRealVar("q0","q0",q01S_Start)#,9.5,9.7)
    delta   =   RooFormulaVar("delta","TMath::Abs(@0-@1)",RooArgList(x,q0))
    b1      =   RooFormulaVar("b1","@0*(@1-@2)",RooArgList(beta,x,q0))
    signum1 =   RooFormulaVar( "signum1","( TMath::Sign( -1.,@0-@1 )+1 )/2.", RooArgList(x,q0) )
    
    
    background = RooGenericPdf("background","Background", "signum1*pow(delta,#alpha)*exp(b1)", RooArgList(signum1,delta,alpha,b1) )

    if useOtherBackgroundParametrization: # in thies case I redefine background
        a0 = RooRealVar('a0','a0',1.,-1.,1.) #,0.5,0.,1.)
        a1 = RooRealVar('a1','a1',0.1,-1.,1.) #-0.2,0.,1.)
        #a2 = RooRealVar('a2','a2',-0.1,1.,-1.)
        background = RooChebychev('background','Background',x,RooArgList(a0,a1))
        parameters.add(RooArgSet(a0, a1))
    else:
        parameters.add(RooArgSet(alpha, beta, q0))

    #together
    chibs = RooArgList(chib1_pdf,chib2_pdf,background)    
    
    # ndof
    floatPars = parameters.selectByAttrib("Constant",ROOT.kFALSE)
    ndof = numBins - floatPars.getSize() - 1

    # # Here I have as parameters N1, N2, and N_background
    # n_chib1 = RooRealVar("n_chib1","n_chib1",1250, 0, 50000)
    # n_chib2 =  RooRealVar("n_chib2","n_chib2",825, 0, 50000)
    # n_background = RooRealVar('n_background','n_background',4550, 0, 50000)
    # ratio_list = RooArgList(n_chib1, n_chib2, n_background)
    # modelPdf = RooAddPdf('ModelPdf', 'ModelPdf', chibs, ratio_list)

    # Here I have as parameters N_12, ratio_12, N_background
    n_chib = RooRealVar("n_chib","n_chib",2075, 0, 100000)
    ratio_21 = RooRealVar("ratio_21","ratio_21",0.6, 0, 1)
    n_chib1 = RooFormulaVar("n_chib1","@0/(1+@1)",RooArgList(n_chib, ratio_21))
    n_chib2 = RooFormulaVar("n_chib2","@0/(1+1/@1)",RooArgList(n_chib, ratio_21))
    n_background = RooRealVar('n_background','n_background',4550, 0, 50000)
    ratio_list = RooArgList(n_chib1, n_chib2, n_background)
    parameters.add(RooArgSet(n_chib1, n_chib2, n_background))
    modelPdf = RooAddPdf('ModelPdf', 'ModelPdf', chibs, ratio_list)
    
    print 'Fitting to data'
    fit_region = x.setRange("fit_region",9.7,10.1)
    result=modelPdf.fitTo(data,RooFit.Save(), RooFit.Range("fit_region"))
    
        
    # define frame
    frame = x.frame()
    frame.SetNameTitle("fit_resonance","Fit Resonanace")
    frame.GetXaxis().SetTitle(x_axis_label )
    frame.GetYaxis().SetTitle( "Events/5 MeV " )
    frame.GetXaxis().SetTitleSize(0.04)
    frame.GetYaxis().SetTitleSize(0.04)
    frame.GetXaxis().SetTitleOffset(1.1)
    frame.GetXaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetLabelSize(0.04)
    frame.SetLineWidth(1)
    frame.SetTitle(plotTitle) 
    
    # plot things on frame
    data.plotOn(frame, RooFit.MarkerSize(0.7))
    chib1P_set = RooArgSet(chib1_pdf)
    modelPdf.plotOn(frame,RooFit.Components(chib1P_set), RooFit.LineColor(ROOT.kGreen+2), RooFit.LineStyle(2), RooFit.LineWidth(1))
    chib2P_set = RooArgSet(chib2_pdf)
    modelPdf.plotOn(frame, RooFit.Components(chib2P_set),RooFit.LineColor(ROOT.kRed), RooFit.LineStyle(2), RooFit.LineWidth(1))
    background_set =  RooArgSet(background)
    modelPdf.plotOn(frame,RooFit.Components(background_set), RooFit.LineColor(ROOT.kBlack), RooFit.LineStyle(2), RooFit.LineWidth(1))
    modelPdf.plotOn(frame, RooFit.LineWidth(2))
    frame.SetName("fit_resonance")  

    # Make numChib object
    numChib = NumChib(numChib=n_chib.getVal(), s_numChib=n_chib.getError(), ratio_21=ratio_21.getVal(), s_ratio_21=ratio_21.getError(), numBkg=n_background.getVal(), s_numBkg=n_background.getError(), corr_NB=result.correlation(n_chib, n_background),corr_NR=result.correlation(n_chib, ratio_21) , name='numChib'+output_suffix+ptBin_label,q0=q0.getVal(),s_q0=q0.getError(),alpha=alpha.getVal(),s_alpha=alpha.getError(), beta=beta.getVal(), s_beta=beta.getError(), chiSquare=frame.chiSquare())
    #numChib.saveToFile('numChib'+output_suffix+'.txt')

    if noPlots:
        chi2 = frame.chiSquare()
        del frame
        return numChib, chi2
    
    # Legend
    parameters_on_legend = RooArgSet()#n_chib, ratio_21, n_background)
    if massFreeToChange:
        #parameters_on_legend.add(scale_mean)
        parameters_on_legend.add(mean_1)
        #parameters_on_legend.add(mean_2)
    if sigmaFreeToChange:
        parameters_on_legend.add(scale_sigma)
    if massFreeToChange or sigmaFreeToChange:
        modelPdf.paramOn(frame, RooFit.Layout(0.1,0.6,0.2),RooFit.Parameters(parameters_on_legend))
    
    if printLegend: #chiquadro, prob, numchib...
        leg = TLegend(0.48,0.75,0.97,0.95)
        leg.SetBorderSize(0)
        #leg.SetTextSize(0.04)
        leg.SetFillStyle(0)
        chi2 = frame.chiSquare()
        probChi2 = TMath.Prob(chi2*ndof, ndof)
        chi2 = round(chi2,2)
        probChi2 = round(probChi2,2)
        leg.AddEntry(0,'#chi^{2} = '+str(chi2),'')
        leg.AddEntry(0,'Prob #chi^{2} = '+str(probChi2),'')
        N_bkg, s_N_bkg = roundPair(numChib.numBkg, numChib.s_numBkg)
        leg.AddEntry(0,'N_{bkg} = '+str(N_bkg)+' #pm '+str(s_N_bkg),'')
        N_chib12, s_N_chib12 = roundPair(numChib.numChib, numChib.s_numChib)
        leg.AddEntry(0,'N_{#chi_{b}} = '+str(N_chib12)+' #pm '+str(s_N_chib12),'')
        Ratio = numChib.calcRatio()
        s_Ratio = numChib.calcRatioError()
        Ratio, s_Ratio = roundPair(Ratio, s_Ratio)
        leg.AddEntry(0,'N_{2}/N_{1} = '+str(Ratio)+' #pm '+str(s_Ratio),'')

        if printSigReso: # Add Significance
            Sig =  numChib.calcSignificance()
            s_Sig = numChib.calcSignificanceError()
            Sig, s_Sig = roundPair(Sig, s_Sig)
            leg.AddEntry(0,'Sig = '+str(Sig)+' #pm '+str(s_Sig),'')
            if(Chib1_parameters.sigma>Chib2_parameters.sigma):
                Reso = Chib1_parameters.sigma * 1000 # So it's in MeV and not in GeV
                s_Reso = Chib1_parameters.s_sigma * 1000 # So it's in MeV and not in GeV
            else:
                Reso = Chib2_parameters.sigma * 1000 # So it's in MeV and not in GeV
                s_Reso = Chib2_parameters.s_sigma * 1000 # So it's in MeV and not in GeV
            Reso, s_Reso =roundPair(Reso, s_Reso)
            leg.AddEntry(0,'Reso = '+str(Reso)+' #pm '+str(s_Reso)+' MeV','')
            #N1 = numChib.numChib1
            #s_N1 = numChib.s_numChib1
            #N1, s_N1 = roundPair(N1, s_N1)
            #leg.AddEntry(0,'N_{1} = '+str(N1)+' #pm '+str(s_N1),'')
            #N2 = numChib.numChib2
            #s_N2 = numChib.s_numChib2
            #N2, s_N2 = roundPair(N2, s_N2)
            #leg.AddEntry(0,'N_{2} = '+str(N2)+' #pm '+str(s_N2),'')

        frame.addObject(leg)

    if legendOnPlot:  #  < pT <
        legend = TLegend(.06,.75,.53,.93)
        legend.SetFillStyle(0)
        legend.SetBorderSize(0)
        #legend.AddEntry(0,'CMS','')
        legend.AddEntry(0,str(cuts.upsilon_pt_lcut)+' GeV < p_{T}(#Upsilon) < '+str(cuts.upsilon_pt_hcut)+' GeV','')
        #legend.AddEntry(0,'p_{T}(#Upsilon)<'+str(cuts.upsilon_pt_hcut),'')
        frame.addObject(legend)

    if titleOnPlot:
        titleLegend = TLegend(.06,.4,.55,.73)
       
        #titleLegend.SetTextSize(0.03)
        titleLegend.SetFillStyle(0)
        titleLegend.SetBorderSize(0)
        titleLegend.AddEntry(0,plotTitle,'')
        frame.addObject(titleLegend)

    if cmsOnPlot:
        if printLegend:
            pvtxt = TPaveText(.1,.55,.55,.73,"NDC")
        else:
            pvtxt = TPaveText(0.5,0.75,0.97,0.9,"NDC") #(.06,.4,.55,.73)
        pvtxt.AddText('CMS Preliminary')
        pvtxt.AddText('pp, #sqrt{s} = 8 TeV')
        pvtxt.AddText('L = 20.7 fb^{-1}')
        pvtxt.SetFillStyle(0)
        pvtxt.SetBorderSize(0)
        pvtxt.SetTextSize(0.04)
        frame.addObject(pvtxt)
    
    # Canvas
    c1=TCanvas('Chib12_1P'+output_suffix+ptBin_label,'Chib12_1P'+output_suffix+ptBin_label)
    frame.Draw()
    if drawPulls:
        #c1=TCanvas(output_name+output_suffix,output_name+output_suffix,700, 625)
        hpull = frame.pullHist()
        framePulls = x.frame()
        framePulls.SetTitle(';;Pulls')
        framePulls.GetYaxis().SetLabelSize(0.18)
        framePulls.GetYaxis().SetTitle('Pulls')
        framePulls.GetYaxis().SetTitleSize(0.18)
        framePulls.GetYaxis().SetTitleOffset(0.15)
        framePulls.GetYaxis().SetNdivisions(005)
        framePulls.GetXaxis().SetLabelSize(0.16)
        framePulls.GetXaxis().SetTitle('')
        line0 = TLine(9.7, 0, 10.1, 0)
        line0.SetLineColor(ROOT.kBlue)
        line0.SetLineWidth(2)
        framePulls.addObject(line0)
        framePulls.addPlotable(hpull,"P") 
        framePulls.SetMaximum(5)
        framePulls.SetMinimum(-5)
        pad1 = TPad("pad1", "The pad 80% of the height",0.0,0.2,1.0,1.0)
        pad1.cd()
        frame.Draw()
        pad2 = TPad("pad2", "The pad 20% of the height",0.0,0.01,1.0,0.2)
        pad2.cd()
        framePulls.Draw()
        c1.cd()
        pad1.Draw()
        pad2.Draw()
    #c1.SaveAs('Chib12_1P'+output_suffix+'.png')
    print 'Chi2 = '+str(frame.chiSquare())
    

    # print ratio background/all in the signal refion
    signal_region = x.setRange("signal_region",9.87,9.92)
    pdf_integral = modelPdf.createIntegral(RooArgSet(x), RooFit.Range('signal_region')).getVal() * (n_chib.getVal() + n_background.getVal())
    bkg_integral = background.createIntegral(RooArgSet(x), RooFit.Range('signal_region')).getVal() * n_background.getVal()

    print 'Ratio bkg/all in signal region = '+str(bkg_integral/pdf_integral)

    return numChib, c1
コード例 #2
0
def pdf_logPt2_prelim():

    #PDF fit to log_10(pT^2) for preliminary figure

    #tree_in = tree_incoh
    tree_in = tree

    #ptbin = 0.04
    ptbin = 0.12
    ptmin = -5.
    ptmax = 1.

    mmin = 2.8
    mmax = 3.2

    #fitran = [-5., 1.]
    fitran = [-0.9, 0.1]

    binned = False

    #gamma-gamma 131 evt for pT<0.18

    #input data
    pT = RooRealVar("jRecPt", "pT", 0, 10)
    m = RooRealVar("jRecM", "mass", 0, 10)
    dataIN = RooDataSet("data", "data", tree_in, RooArgSet(pT, m))
    strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax)
    data = dataIN.reduce(strsel)
    #x is RooRealVar for log(Pt2)
    draw = "TMath::Log10(jRecPt*jRecPt)"
    draw_func = RooFormulaVar(
        "x", "Dielectron log_{10}( #it{p}_{T}^{2} ) ((GeV/c)^{2})", draw,
        RooArgList(pT))
    x = data.addColumn(draw_func)
    x.setRange("fitran", fitran[0], fitran[1])

    #binned data
    nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax)
    hPt = TH1D("hPt", "hPt", nbins, ptmin, ptmax)
    hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin, ptmin, ptmax)
    hPtCoh.SetLineWidth(2)
    #fill in binned data
    tree_in.Draw(draw + " >> hPt", strsel)
    tree_coh.Draw(draw + " >> hPtCoh", strsel)
    dataH = RooDataHist("dataH", "dataH", RooArgList(x), hPt)

    #range for plot
    x.setMin(ptmin)
    x.setMax(ptmax)
    x.setRange("plotran", ptmin, ptmax)

    #create the pdf
    b = RooRealVar("b", "b", 5., 0., 10.)
    pdf_func = "log(10.)*pow(10.,x)*exp(-b*pow(10.,x))"
    pdf_logPt2 = RooGenericPdf("pdf_logPt2", pdf_func, RooArgList(x, b))

    #make the fit
    if binned == True:
        r1 = pdf_logPt2.fitTo(dataH, rf.Range("fitran"), rf.Save())
    else:
        r1 = pdf_logPt2.fitTo(data, rf.Range("fitran"), rf.Save())

    #calculate norm to number of events
    xset = RooArgSet(x)
    ipdf = pdf_logPt2.createIntegral(xset, rf.NormSet(xset),
                                     rf.Range("fitran"))
    print "PDF integral:", ipdf.getVal()
    if binned == True:
        nevt = tree_incoh.Draw(
            "", strsel + " && " + draw + ">{0:.3f}".format(fitran[0]) +
            " && " + draw + "<{1:.3f}".format(fitran[0], fitran[1]))
    else:
        nevt = data.sumEntries("x", "fitran")

    print "nevt:", nevt
    pdf_logPt2.setNormRange("fitran")
    print "PDF norm:", pdf_logPt2.getNorm(RooArgSet(x))

    #a = nevt/ipdf.getVal()
    a = nevt / pdf_logPt2.getNorm(RooArgSet(x))
    print "a =", a

    #gamma-gamma contribution
    hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax)
    tree_gg.Draw(draw + " >> hPtGG", strsel)
    #ut.norm_to_data(hPtGG, hPt, rt.kGreen, -5., -2.9)
    ut.norm_to_num(hPtGG, 131., rt.kGreen + 1)

    print "Int GG:", hPtGG.Integral()

    #sum of all contributions
    hSum = ut.prepare_TH1D("hSum", ptbin, ptmin, ptmax)
    hSum.SetLineWidth(3)
    #add ggel to the sum
    hSum.Add(hPtGG)
    #add incoherent contribution
    func_logPt2 = TF1("pdf_logPt2",
                      "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10.,
                      10.)
    func_logPt2.SetParameters(a, b.getVal())
    hInc = ut.prepare_TH1D("hInc", ptbin, ptmin, ptmax)
    ut.fill_h1_tf(hInc, func_logPt2)
    hSum.Add(hInc)
    #add coherent contribution
    ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5., -2.2)  # norm for coh
    hSum.Add(hPtCoh)
    #set to draw as a lines
    ut.line_h1(hSum, rt.kBlack)

    #create canvas frame
    can = ut.box_canvas()
    ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.01, 0.01)

    frame = x.frame(rf.Bins(nbins), rf.Title(""))
    frame.SetTitle("")

    frame.SetYTitle("J/#psi candidates / ({0:.3f}".format(ptbin) +
                    " (GeV/c)^{2})")

    frame.GetXaxis().SetTitleOffset(1.2)
    frame.GetYaxis().SetTitleOffset(1.6)

    print "Int data:", hPt.Integral()

    #plot the data
    if binned == True:
        dataH.plotOn(frame, rf.Name("data"))
    else:
        data.plotOn(frame, rf.Name("data"))

    pdf_logPt2.plotOn(frame, rf.Range("fitran"), rf.LineColor(rt.kRed),
                      rf.Name("pdf_logPt2"))
    pdf_logPt2.plotOn(frame, rf.Range("plotran"), rf.LineColor(rt.kRed),
                      rf.Name("pdf_logPt2_full"), rf.LineStyle(rt.kDashed))

    frame.Draw()

    leg = ut.prepare_leg(0.61, 0.77, 0.16, 0.19, 0.03)
    #ut.add_leg_mass(leg, mmin, mmax)
    hx = ut.prepare_TH1D("hx", 1, 0, 1)
    hx.Draw("same")
    ln = ut.col_lin(rt.kRed, 2)
    leg.AddEntry(hx, "Data", "p")
    leg.AddEntry(hSum, "Sum", "l")
    leg.AddEntry(hPtCoh, "Coherent J/#psi", "l")
    leg.AddEntry(ln, "Incoherent parametrization", "l")
    leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-}", "l")
    #leg.AddEntry(ln, "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})", "l")
    leg.Draw("same")

    l0 = ut.cut_line(fitran[0], 0.9, frame)
    l1 = ut.cut_line(fitran[1], 0.9, frame)
    #l0.Draw()
    #l1.Draw()

    pleg = ut.prepare_leg(0.12, 0.75, 0.14, 0.22, 0.03)
    pleg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "")
    ut.add_leg_mass(pleg, mmin, mmax)
    pleg.AddEntry(None, "STAR Preliminary", "")
    pleg.AddEntry(None, "AuAu@200 GeV", "")
    pleg.AddEntry(None, "UPC sample", "")
    pleg.Draw("same")

    desc = pdesc(frame, 0.14, 0.9, 0.057)
    desc.set_text_size(0.03)
    desc.itemD("#chi^{2}/ndf", frame.chiSquare("pdf_logPt2", "data", 2), -1,
               rt.kRed)
    desc.itemD("#it{A}", a, -1, rt.kRed)
    desc.itemR("#it{b}", b, rt.kRed)
    #desc.draw()

    #put the sum
    hSum.Draw("same")

    frame.Draw("same")

    #put gamma-gamma and coherent J/psi
    hPtGG.Draw("same")
    hPtCoh.Draw("same")

    #ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
コード例 #3
0
def fit():

    #fit to log_10(pT^2) with components and plot of plain pT^2

    #range in log_10(pT^2)
    ptbin = 0.12
    ptmin = -5.
    ptmax = 0.99  # 1.01

    #range in pT^2
    ptsq_bin = 0.03
    ptsq_min = 1e-5
    ptsq_max = 1

    mmin = 2.8
    mmax = 3.2

    #range for incoherent fit
    fitran = [-0.9, 0.1]

    #number of gamma-gamma events
    ngg = 131

    #number of psi' events
    npsiP = 20

    #input data
    pT = RooRealVar("jRecPt", "pT", 0, 10)
    m = RooRealVar("jRecM", "mass", 0, 10)
    data_all = RooDataSet("data", "data", tree, RooArgSet(pT, m))
    #select for mass range
    strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax)
    data = data_all.reduce(strsel)

    #create log(pT^2) from pT
    ptsq_draw = "jRecPt*jRecPt"  # will be used for pT^2
    logPtSq_draw = "TMath::Log10(" + ptsq_draw + ")"
    logPtSq_form = RooFormulaVar("logPtSq", "logPtSq", logPtSq_draw,
                                 RooArgList(pT))
    logPtSq = data.addColumn(logPtSq_form)
    logPtSq.setRange("fitran", fitran[0], fitran[1])

    #bins and range for the plot
    nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax)
    logPtSq.setMin(ptmin)
    logPtSq.setMax(ptmax)
    logPtSq.setRange("plotran", ptmin, ptmax)

    #range for pT^2
    ptsq_nbins, ptsq_max = ut.get_nbins(ptsq_bin, ptsq_min, ptsq_max)

    #incoherent parametrization
    bval = RooRealVar("bval", "bval", 3.3, 0, 10)
    inc_form = "log(10.)*pow(10.,logPtSq)*exp(-bval*pow(10.,logPtSq))"
    incpdf = RooGenericPdf("incpdf", inc_form, RooArgList(logPtSq, bval))

    #make the incoherent fit
    res = incpdf.fitTo(data, rf.Range("fitran"), rf.Save())

    #get incoherent norm to the number of events
    lset = RooArgSet(logPtSq)
    iinc = incpdf.createIntegral(lset, rf.NormSet(lset), rf.Range("fitran"))
    inc_nevt = data.sumEntries("logPtSq", "fitran")
    incpdf.setNormRange("fitran")
    aval = RooRealVar("aval", "aval", inc_nevt / incpdf.getNorm(lset))
    #print "A =", aval.getVal()
    #print "b =", bval.getVal()

    #incoherent distribution from log_10(pT^2) function for the sum with gamma-gamma
    hIncPdf = ut.prepare_TH1D_n("hGG", nbins, ptmin, ptmax)
    func_incoh_logPt2 = TF1("func_incoh_logPt2",
                            "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))",
                            -10., 10.)
    func_incoh_logPt2.SetNpx(1000)
    func_incoh_logPt2.SetLineColor(rt.kMagenta)
    func_incoh_logPt2.SetParameters(
        aval.getVal(),
        bval.getVal())  # 4.9 from incoherent mc, 3.3 from data fit
    ut.fill_h1_tf(hIncPdf, func_incoh_logPt2, rt.kMagenta)

    #gamma-gamma contribution
    hGG = ut.prepare_TH1D_n("hGG", nbins, ptmin, ptmax)
    tree_gg.Draw(logPtSq_draw + " >> hGG", strsel)
    ut.norm_to_num(hGG, ngg, rt.kGreen + 1)

    #sum of incoherent distribution and gamma-gamma
    hSumIncGG = ut.prepare_TH1D_n("hSumIncGG", nbins, ptmin, ptmax)
    hSumIncGG.Add(hIncPdf)
    hSumIncGG.Add(hGG)
    ut.line_h1(hSumIncGG, rt.kMagenta)

    #gamma-gamma in pT^2
    hGG_ptsq = ut.prepare_TH1D_n("hGG_ptsq", ptsq_nbins, ptsq_min, ptsq_max)
    tree_gg.Draw(ptsq_draw + " >> hGG_ptsq", strsel)
    ut.norm_to_num(hGG_ptsq, ngg, rt.kGreen + 1)

    #psi' contribution
    psiP_file = TFile.Open(basedir_mc + "/ana_slight14e4x1_s6_sel5z.root")
    psiP_tree = psiP_file.Get("jRecTree")
    hPsiP = ut.prepare_TH1D_n("hPsiP", nbins, ptmin, ptmax)
    psiP_tree.Draw(logPtSq_draw + " >> hPsiP", strsel)
    ut.norm_to_num(hPsiP, npsiP, rt.kViolet)

    #psi' in pT^2
    hPsiP_ptsq = ut.prepare_TH1D_n("hPsiP_ptsq", ptsq_nbins, ptsq_min,
                                   ptsq_max)
    psiP_tree.Draw(ptsq_draw + " >> hPsiP_ptsq", strsel)
    ut.norm_to_num(hPsiP_ptsq, npsiP, rt.kViolet)

    #create canvas frame
    gStyle.SetPadTickY(1)
    can = ut.box_canvas(1086, 543)  # square area is still 768^2
    can.SetMargin(0, 0, 0, 0)
    can.Divide(2, 1, 0, 0)
    gStyle.SetLineWidth(1)

    can.cd(1)
    ut.set_margin_lbtr(gPad, 0.11, 0.1, 0.01, 0)

    frame = logPtSq.frame(rf.Bins(nbins))
    frame.SetTitle("")
    frame.SetMaximum(80)

    frame.SetYTitle("Events / ({0:.3f}".format(ptbin) + " GeV^{2})")
    frame.SetXTitle("log_{10}( #it{p}_{T}^{2} ) (GeV^{2})")

    frame.GetXaxis().SetTitleOffset(1.2)
    frame.GetYaxis().SetTitleOffset(1.6)

    #plot the data
    data.plotOn(frame, rf.Name("data"), rf.LineWidth(2))

    #incoherent parametrization
    incpdf.plotOn(frame, rf.Range("fitran"), rf.LineColor(rt.kRed),
                  rf.Name("incpdf"), rf.LineWidth(2))
    incpdf.plotOn(frame, rf.Range("plotran"), rf.LineColor(rt.kRed),
                  rf.Name("incpdf_full"), rf.LineStyle(rt.kDashed),
                  rf.LineWidth(2))

    frame.Draw()

    #add gamma-gamma contribution
    hGG.Draw("same")

    #sum of incoherent distribution and gamma-gamma
    #hSumIncGG.Draw("same")

    #add psi'
    #hPsiP.Draw("same")

    #legend for log_10(pT^2)
    leg = ut.prepare_leg(0.15, 0.77, 0.28, 0.19, 0.035)
    hxl = ut.prepare_TH1D("hxl", 1, 0, 1)
    hxl.Draw("same")
    ilin = ut.col_lin(rt.kRed, 2)
    ilin2 = ut.col_lin(rt.kRed, 2)
    ilin2.SetLineStyle(rt.kDashed)
    leg.AddEntry(ilin, "Incoherent parametrization, fit region", "l")
    leg.AddEntry(ilin2, "Incoherent parametrization, extrapolation region",
                 "l")
    leg.AddEntry(hGG, "#gamma#gamma#rightarrow e^{+}e^{-}", "l")
    #leg.AddEntry(hxl, "Data", "lp")
    leg.AddEntry(hxl, "Data, log_{10}( #it{p}_{T}^{2} )", "lp")
    leg.Draw("same")

    #----- plot pT^2 on the right -----

    #pT^2 variable from pT
    ptsq_form = RooFormulaVar("ptsq", "ptsq", ptsq_draw, RooArgList(pT))
    ptsq = data.addColumn(ptsq_form)

    #range for pT^2 plot
    ptsq.setMin(ptsq_min)
    ptsq.setMax(ptsq_max)

    #make the pT^2 plot
    can.cd(2)
    gPad.SetLogy()
    #gPad.SetLineWidth(3)
    #gPad.SetFrameLineWidth(1)
    ut.set_margin_lbtr(gPad, 0, 0.1, 0.01, 0.15)

    ptsq_frame = ptsq.frame(rf.Bins(ptsq_nbins), rf.Title(""))

    #print type(ptsq_frame), type(ptsq)

    ptsq_frame.SetTitle("")

    ptsq_frame.SetXTitle("#it{p}_{T}^{2} (GeV^{2})")
    ptsq_frame.GetXaxis().SetTitleOffset(1.2)

    data.plotOn(ptsq_frame, rf.Name("data"), rf.LineWidth(2))

    ptsq_frame.SetMaximum(9e2)
    ptsq_frame.SetMinimum(0.8)  # 0.101

    ptsq_frame.Draw()

    #incoherent parametrization in pT^2 over the fit region, scaled to the plot
    inc_ptsq = TF1("inc_ptsq", "[0]*exp(-[1]*x)", 10**fitran[0], 10**fitran[1])
    inc_ptsq.SetParameters(aval.getVal() * ptsq_bin, bval.getVal())

    #incoherent parametrization in the extrapolation region, below and above the fit region
    inc_ptsq_ext1 = TF1("inc_ptsq_ext1", "[0]*exp(-[1]*x)", 0., 10**fitran[0])
    inc_ptsq_ext2 = TF1("inc_ptsq_ext2", "[0]*exp(-[1]*x)", 10**fitran[1], 10)
    inc_ptsq_ext1.SetParameters(aval.getVal() * ptsq_bin, bval.getVal())
    inc_ptsq_ext1.SetLineStyle(rt.kDashed)
    inc_ptsq_ext2.SetParameters(aval.getVal() * ptsq_bin, bval.getVal())
    inc_ptsq_ext2.SetLineStyle(rt.kDashed)

    inc_ptsq.Draw("same")
    inc_ptsq_ext1.Draw("same")
    inc_ptsq_ext2.Draw("same")

    #add gamma-gamma in pT^2
    hGG_ptsq.Draw("same")

    #add psi' in pT^2
    #hPsiP_ptsq.Draw("same")

    #redraw the frame
    #ptsq_frame.Draw("same")

    ptsq_frame.GetXaxis().SetLimits(-9e-3, ptsq_frame.GetXaxis().GetXmax())

    #vertical axis for pT^2 plot
    xpos = ptsq_frame.GetXaxis().GetXmax()
    ypos = ptsq_frame.GetMaximum()
    ymin = ptsq_frame.GetMinimum()

    ptsq_axis = TGaxis(xpos, 0, xpos, ypos, ymin, ypos, 510, "+GL")
    ut.set_axis(ptsq_axis)
    ptsq_axis.SetMoreLogLabels()

    ptsq_axis.SetTitle("Events / ({0:.3f}".format(ptsq_bin) + " GeV^{2})")
    ptsq_axis.SetTitleOffset(2.2)

    ptsq_axis.Draw()

    #legend for input data
    #dleg = ut.prepare_leg(0.4, 0.77, 0.14, 0.18, 0.035)
    dleg = ut.prepare_leg(0.4, 0.71, 0.16, 0.24, 0.035)
    dleg.AddEntry(None, "#bf{|#kern[0.3]{#it{y}}| < 1}", "")
    ut.add_leg_mass(dleg, mmin, mmax)
    dleg.AddEntry(None, "AuAu@200 GeV", "")
    dleg.AddEntry(None, "UPC sample", "")
    dleg.AddEntry(hxl, "Data, #it{p}_{T}^{2}", "lp")
    dleg.Draw("same")

    #ut.invert_col_can(can)
    can.SaveAs("01fig.pdf")
コード例 #4
0
def pdf_logPt2_incoh():

    #PDF fit to log_10(pT^2)

    #tree_in = tree_incoh
    tree_in = tree

    #ptbin = 0.04
    ptbin = 0.12
    ptmin = -5.
    ptmax = 1.

    mmin = 2.8
    mmax = 3.2

    #fitran = [-5., 1.]
    fitran = [-0.9, 0.1]

    binned = False

    #gamma-gamma 131 evt for pT<0.18

    #output log file
    out = open("out.txt", "w")
    ut.log_results(
        out, "in " + infile + " in_coh " + infile_coh + " in_gg " + infile_gg)
    loglist = [(x, eval(x)) for x in
               ["ptbin", "ptmin", "ptmax", "mmin", "mmax", "fitran", "binned"]]
    strlog = ut.make_log_string(loglist)
    ut.log_results(out, strlog + "\n")

    #input data
    pT = RooRealVar("jRecPt", "pT", 0, 10)
    m = RooRealVar("jRecM", "mass", 0, 10)
    dataIN = RooDataSet("data", "data", tree_in, RooArgSet(pT, m))
    strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax)
    data = dataIN.reduce(strsel)
    #x is RooRealVar for log(Pt2)
    draw = "TMath::Log10(jRecPt*jRecPt)"
    draw_func = RooFormulaVar("x", "log_{10}( #it{p}_{T}^{2} ) (GeV^{2})",
                              draw, RooArgList(pT))
    x = data.addColumn(draw_func)
    x.setRange("fitran", fitran[0], fitran[1])

    #binned data
    nbins, ptmax = ut.get_nbins(ptbin, ptmin, ptmax)
    hPt = TH1D("hPt", "hPt", nbins, ptmin, ptmax)
    tree_in.Draw(draw + " >> hPt", strsel)
    dataH = RooDataHist("dataH", "dataH", RooArgList(x), hPt)

    #range for plot
    x.setMin(ptmin)
    x.setMax(ptmax)
    x.setRange("plotran", ptmin, ptmax)

    #create the pdf
    b = RooRealVar("b", "b", 5., 0., 10.)
    pdf_func = "log(10.)*pow(10.,x)*exp(-b*pow(10.,x))"
    pdf_logPt2 = RooGenericPdf("pdf_logPt2", pdf_func, RooArgList(x, b))

    #make the fit
    if binned == True:
        r1 = pdf_logPt2.fitTo(dataH, rf.Range("fitran"), rf.Save())
    else:
        r1 = pdf_logPt2.fitTo(data, rf.Range("fitran"), rf.Save())

    ut.log_results(out, ut.log_fit_result(r1))

    #calculate norm to number of events
    xset = RooArgSet(x)
    ipdf = pdf_logPt2.createIntegral(xset, rf.NormSet(xset),
                                     rf.Range("fitran"))
    print "PDF integral:", ipdf.getVal()
    if binned == True:
        nevt = tree_incoh.Draw(
            "", strsel + " && " + draw + ">{0:.3f}".format(fitran[0]) +
            " && " + draw + "<{1:.3f}".format(fitran[0], fitran[1]))
    else:
        nevt = data.sumEntries("x", "fitran")

    print "nevt:", nevt
    pdf_logPt2.setNormRange("fitran")
    print "PDF norm:", pdf_logPt2.getNorm(RooArgSet(x))

    #a = nevt/ipdf.getVal()
    a = nevt / pdf_logPt2.getNorm(RooArgSet(x))
    ut.log_results(out, "log_10(pT^2) parametrization:")
    ut.log_results(out, "A = {0:.2f}".format(a))
    ut.log_results(out, ut.log_fit_parameters(r1, 0, 2))
    print "a =", a

    #Coherent contribution
    hPtCoh = ut.prepare_TH1D("hPtCoh", ptbin, ptmin, ptmax)
    hPtCoh.Sumw2()
    #tree_coh.Draw(draw + " >> hPtCoh", strsel)
    tree_coh.Draw("TMath::Log10(jGenPt*jGenPt) >> hPtCoh", strsel)
    ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5., -2.2)  # norm for coh
    #ut.norm_to_data(hPtCoh, hPt, rt.kBlue, -5, -2.1)
    #ut.norm_to_num(hPtCoh, 405, rt.kBlue)
    print "Coherent integral:", hPtCoh.Integral()

    #TMath::Log10(jRecPt*jRecPt)

    #Sartre generated coherent shape
    sartre = TFile.Open(
        "/home/jaroslav/sim/sartre_tx/sartre_AuAu_200GeV_Jpsi_coh_2p7Mevt.root"
    )
    sartre_tree = sartre.Get("sartre_tree")
    hSartre = ut.prepare_TH1D("hSartre", ptbin, ptmin, ptmax)
    sartre_tree.Draw("TMath::Log10(pT*pT) >> hSartre",
                     "rapidity>-1 && rapidity<1")
    ut.norm_to_data(hSartre, hPt, rt.kViolet, -5, -2)  # norm for Sartre

    #gamma-gamma contribution
    hPtGG = ut.prepare_TH1D("hPtGG", ptbin, ptmin, ptmax)
    tree_gg.Draw(draw + " >> hPtGG", strsel)
    #ut.norm_to_data(hPtGG, hPt, rt.kGreen, -5., -2.9)
    ut.norm_to_num(hPtGG, 131., rt.kGreen)

    print "Int GG:", hPtGG.Integral()

    #psi' contribution
    psiP = TFile.Open(basedir_mc + "/ana_slight14e4x1_s6_sel5z.root")
    psiP_tree = psiP.Get("jRecTree")
    hPtPsiP = ut.prepare_TH1D("hPtPsiP", ptbin, ptmin, ptmax)
    psiP_tree.Draw(draw + " >> hPtPsiP", strsel)
    ut.norm_to_num(hPtPsiP, 12, rt.kViolet)

    #sum of all contributions
    hSum = ut.prepare_TH1D("hSum", ptbin, ptmin, ptmax)
    hSum.SetLineWidth(3)
    #add ggel to the sum
    hSum.Add(hPtGG)
    #add incoherent contribution
    func_logPt2 = TF1("pdf_logPt2",
                      "[0]*log(10.)*pow(10.,x)*exp(-[1]*pow(10.,x))", -10.,
                      10.)
    func_logPt2.SetParameters(a, b.getVal())
    hInc = ut.prepare_TH1D("hInc", ptbin, ptmin, ptmax)
    ut.fill_h1_tf(hInc, func_logPt2)
    hSum.Add(hInc)
    #add coherent contribution
    hSum.Add(hPtCoh)
    #add psi(2S) contribution
    #hSum.Add(hPtPsiP)
    #set to draw as a lines
    ut.line_h1(hSum, rt.kBlack)

    #create canvas frame
    can = ut.box_canvas()
    ut.set_margin_lbtr(gPad, 0.11, 0.09, 0.01, 0.01)

    frame = x.frame(rf.Bins(nbins), rf.Title(""))
    frame.SetTitle("")
    frame.SetMaximum(75)

    frame.SetYTitle("Events / ({0:.3f}".format(ptbin) + " GeV^{2})")

    print "Int data:", hPt.Integral()

    #plot the data
    if binned == True:
        dataH.plotOn(frame, rf.Name("data"))
    else:
        data.plotOn(frame, rf.Name("data"))

    pdf_logPt2.plotOn(frame, rf.Range("fitran"), rf.LineColor(rt.kRed),
                      rf.Name("pdf_logPt2"))
    pdf_logPt2.plotOn(frame, rf.Range("plotran"), rf.LineColor(rt.kRed),
                      rf.Name("pdf_logPt2_full"), rf.LineStyle(rt.kDashed))

    frame.Draw()

    amin = TMath.Power(10, ptmin)
    amax = TMath.Power(10, ptmax) - 1
    print amin, amax
    pt2func = TF1("f1", "TMath::Power(10, x)", amin,
                  amax)  #TMath::Power(x, 10)
    aPt2 = TGaxis(-5, 75, 1, 75, "f1", 510, "-")
    ut.set_axis(aPt2)
    aPt2.SetTitle("pt2")
    #aPt2.Draw();

    leg = ut.prepare_leg(0.57, 0.78, 0.14, 0.19, 0.03)
    ut.add_leg_mass(leg, mmin, mmax)
    hx = ut.prepare_TH1D("hx", 1, 0, 1)
    hx.Draw("same")
    ln = ut.col_lin(rt.kRed)
    leg.AddEntry(hx, "Data")
    leg.AddEntry(hPtCoh, "Sartre MC", "l")
    leg.AddEntry(hPtGG, "#gamma#gamma#rightarrow e^{+}e^{-} MC", "l")
    #leg.AddEntry(ln, "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})", "l")
    #leg.AddEntry(ln, "Incoherent fit", "l")
    leg.Draw("same")

    l0 = ut.cut_line(fitran[0], 0.9, frame)
    l1 = ut.cut_line(fitran[1], 0.9, frame)
    #l0.Draw()
    #l1.Draw()

    desc = pdesc(frame, 0.14, 0.8, 0.054)
    desc.set_text_size(0.03)
    desc.itemD("#chi^{2}/ndf", frame.chiSquare("pdf_logPt2", "data", 2), -1,
               rt.kRed)
    desc.itemD("#it{A}", a, -1, rt.kRed)
    desc.itemR("#it{b}", b, rt.kRed)
    desc.draw()

    #put the sum
    #hSum.Draw("same")

    #gPad.SetLogy()

    frame.Draw("same")

    #put gamma-gamma
    hPtGG.Draw("same")
    #put coherent J/psi
    hPtCoh.Draw("same")

    #put Sartre generated coherent shape
    #hSartre.Draw("same")

    #put psi(2S) contribution
    #hPtPsiP.Draw("same")

    leg2 = ut.prepare_leg(0.14, 0.9, 0.14, 0.08, 0.03)
    leg2.AddEntry(
        ln,
        "ln(10)*#it{A}*10^{log_{10}#it{p}_{T}^{2}}exp(-#it{b}10^{log_{10}#it{p}_{T}^{2}})",
        "l")
    #leg2.AddEntry(hPtCoh, "Sartre MC reconstructed", "l")
    #leg2.AddEntry(hSartre, "Sartre MC generated", "l")
    leg2.Draw("same")

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
コード例 #5
0
ファイル: xsPlotBu.py プロジェクト: vjmastra/JPsiPhiAnalysis
   #RooArgSet(RooArgSet(mass_ref_c_kkk,dimuonditrk_m_rf_c,dimuonditrk_ctauPV,dimuonditrk_ctauErrPV,dimuon_pt),RooArgSet(ditrak_pt,mass_ref_c_kkk,dimuonditrk_charge,ditrak_m,dimuon_m))

DATA = RooDataSet("alldata","alldata",xTuple,theSet)

splotData = RooDataSet("alldata_sig","alldata_sig",DATA,theSet,"dimuonditrk_charge==0")
#splotBkgData = RooDataSet("alldata_bkg","alldata_bkg",DATA,theSet,"dimuonditrk_charge!=0 && dimuonditrk_m_rf_c<5.0 && dimuonditrk_m_rf_c>4.0")

print "Tree entries %d"%(splotData.numEntries())

print "PHSP fit"

BkgTotalMPdf = RooGenericPdf("BkgPdf","BkgPdf","sqrt( pow(dimuonditrk_m_rf_c,4) + pow(3.0967,4) + pow(1.01946,4) - 2*pow(dimuonditrk_m_rf_c,2)*pow(3.0967,2) - 2*pow(3.0967,2)*pow(1.01946,2) - 2*pow(dimuonditrk_m_rf_c,2)*pow(1.01946,2) ) * sqrt( pow(5.279,4) + pow(dimuonditrk_m_rf_c,4) + pow(0.493677,4) - 2*pow(5.279,2)*pow(dimuonditrk_m_rf_c,2) - 2*pow(5.279,2)*pow(0.493677,2) - 2*pow(dimuonditrk_m_rf_c,2)*pow(0.493677,2) ) / (dimuonditrk_m_rf_c)", RooArgList(dimuonditrk_m_rf_c));

dimuonditrk_m_rf_c.setBins(80)
dimuonditrk_m_rf_c.setRange("baserange",4.0,5.0)
s = BkgTotalMPdf.createIntegral(RooArgSet(dimuonditrk_m_rf_c),"baserange").getVal()

#bkgFit = BkgTotalMPdf.fitTo(splotBkgData,Range(4.0,5.0),RooFit.NumCPU(args.ncpu),RooFit.Verbose(False))

cb = TCanvas("canvas_b","canvas_b",1200,800) 
print s
mumukkFrame = dimuonditrk_m_rf_c.frame(Title("Phase Space Fit"),Range(4.0,5.0),Normalization(1.0))
splotData.plotOn(mumukkFrame)

BkgTotalMPdf.plotOn(mumukkFrame,Normalization(1.65))

mumukkFrame.Draw()

if args.phsps:
    cb.SaveAs(args.path[:-5] + '_bu_phsp_plot.root')
    cb.SaveAs(args.path[:-5] + '_bu_phsp_plot.png')