Exemplo n.º 1
0
    def plot(self, gD01, gDbar01, repeat=False):
        N = gD01.GetN()

        xD01 = gD01.GetX()
        yD01 = gD01.GetY()
        zD01 = gD01.GetZ()
        xDbar01 = gDbar01.GetX()
        yDbar01 = gDbar01.GetY()
        zDbar01 = gDbar01.GetZ()
        gr1 = TGraph2D(N)
        gr1.SetName("delta" + self.obj)

        for i in range(N):
            x1 = xD01[i]
            y1 = yD01[i]
            if self.obj=="gAbs":
                z1 =  gDbar01.Interpolate(y1,x1) / zD01[i] * 100
            else:
                z1 = gDbar01.Interpolate(y1, x1) - zD01[i] * 100
                if (z1 < 0):
                    z1 += 2 * pi 
            #z1 *= 1/(2*pi)
            #z1 = zDbar01[i] - gD01.Interpolate(y1,x1)
            gr1.SetPoint(i, x1, y1, z1)

        xD1 = gr1.GetX()
        yD1 = gr1.GetY()
        zD1 = gr1.GetZ()


        #set_palette()

        theta = 89.9
        phi=0.1
        c1 = TCanvas("c1", "c1", 4000, 4000)
        gPad.SetLeftMargin(0.1)
        c1.cd()

        
        titles = {
            "gArg":"#delta_{D}",
            "gAbs": "|A_{#bar{D}^{0}}|/|A_{D^{0}}|"
        }
        title = titles[self.obj]
        if (repeat):
            title = "#Delta" + title
        gr1.SetTitle("%s ; m^{2}_{K_{S}^{0} #pi^{+}} ; m^{2}_{K_{S}^{0} #pi^{-}}" % (title))
        gr1.GetXaxis().SetLabelOffset(15)
        gr1.GetYaxis().SetLabelOffset(15)
        gr1.GetZaxis().SetLabelOffset(15)
        gr1.SetMargin(0.02)
        gr1.Draw(self.draw2D)
        gPad.SetTheta(theta)
        gPad.SetPhi(phi)
        gPad.SetLeftMargin(0.15)
        gStyle.SetPalette(55)
        gPad.Update()
        c1.SaveAs("%s/Delta_%s.%s" % (self.output, self.obj, self.imgtype))
        return gr1
Exemplo n.º 2
0
def rooFit103():

    print ">>> construct generic pdf from interpreted expression..."
    # To construct a proper p.d.f, the formula expression is explicitly normalized internally
    # by dividing  it by a numeric integral of the expresssion over x in the range [-20,20]
    x = RooRealVar("x", "x", -20, 20)
    alpha = RooRealVar("alpha", "alpha", 5, 0.1, 10)
    genpdf = RooGenericPdf("genpdf", "genpdf",
                           "(1+0.1*abs(x)+sin(sqrt(abs(x*alpha+0.1))))",
                           RooArgList(x, alpha))

    print ">>> generate and fit toy data...\n"
    data = genpdf.generate(RooArgSet(x), 10000)  # RooDataSet
    genpdf.fitTo(data)
    frame1 = x.frame(Title("Interpreted expression pdf"))  # RooPlot
    data.plotOn(frame1, Binning(40))
    genpdf.plotOn(frame1)

    print "\n>>> construct standard pdf with formula replacing parameter..."
    mean2 = RooRealVar("mean2", "mean^2", 10, 0, 200)
    sigma = RooRealVar("sigma", "sigma", 3, 0.1, 10)
    mean = RooFormulaVar("mean", "mean", "sqrt(mean2)", RooArgList(mean2))
    gaus2 = RooGaussian("gaus2", "gaus2", x, mean, sigma)

    print ">>> generate and fit toy data...\n"
    gaus1 = RooGaussian("gaus1", "gaus1", x, RooConst(10), RooConst(3))
    data2 = gaus1.generate(RooArgSet(x), 1000)  # RooDataSet
    result = gaus2.fitTo(data2, Save())  # RooFitResult
    result.Print()
    frame2 = x.frame(Title("Tailored Gaussian pdf"))  # RooPlot
    data2.plotOn(frame2, Binning(40))
    gaus2.plotOn(frame2)

    print "\n>>> draw pfds and fits on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 1400, 600)
    canvas.Divide(2)
    canvas.cd(1)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame1.GetYaxis().SetLabelOffset(0.008)
    frame1.GetYaxis().SetTitleOffset(1.6)
    frame1.GetYaxis().SetTitleSize(0.045)
    frame1.GetXaxis().SetTitleSize(0.045)
    frame1.Draw()
    canvas.cd(2)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame2.GetYaxis().SetLabelOffset(0.008)
    frame2.GetYaxis().SetTitleOffset(1.6)
    frame2.GetYaxis().SetTitleSize(0.045)
    frame2.GetXaxis().SetTitleSize(0.045)
    frame2.Draw()
    canvas.SaveAs("rooFit103.png")
Exemplo n.º 3
0
def rooFit101():

    print ">>> build gaussian pdf..."
    x = RooRealVar("x", "x", -10, 10)
    mean = RooRealVar("mean", "mean of gaussian", 1, -10, 10)
    sigma = RooRealVar("sigma", "width of gaussian", 1, 0.1, 10)
    gauss = RooGaussian("gauss", "gaussian PDF", x, mean, sigma)

    print ">>> plot pdf..."
    frame1 = x.frame(Title("Gaussian pdf"))  # RooPlot
    #xframe.SetTitle("Gaussian pdf")
    gauss.plotOn(frame1)

    print ">>> change parameter value and plot..."
    sigma.setVal(3)
    gauss.plotOn(frame1, LineColor(kRed))

    print ">>> generate events..."
    data = gauss.generate(RooArgSet(x), 10000)  # RooDataSet
    frame2 = x.frame()
    data.plotOn(frame2, Binning(40))
    gauss.plotOn(frame2)

    print ">>> fit gaussian...\n"
    gauss.fitTo(data)
    mean.Print()
    sigma.Print()

    print "\n>>> draw pdfs and fits on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 1400, 600)
    canvas.Divide(2)
    canvas.cd(1)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame1.GetYaxis().SetLabelOffset(0.008)
    frame1.GetYaxis().SetTitleOffset(1.6)
    frame1.GetYaxis().SetTitleSize(0.045)
    frame1.GetXaxis().SetTitleSize(0.045)
    frame1.Draw()
    canvas.cd(2)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame2.GetYaxis().SetLabelOffset(0.008)
    frame2.GetYaxis().SetTitleOffset(1.6)
    frame2.GetYaxis().SetTitleSize(0.045)
    frame2.GetXaxis().SetTitleSize(0.045)
    frame2.Draw()
    canvas.SaveAs("rooFit101.png")
Exemplo n.º 4
0
def plot_theta():

    #polar angle of generated photons

    tbin = 0.01
    tmax = 3

    can = ut.box_canvas()

    ht = ut.prepare_TH1D("ht", tbin, 0, tmax)

    tree.Draw("(TMath::Pi()-phot_theta)*1000 >> ht")

    ht.SetYTitle("Events / ({0:.3f}".format(tbin) + " mrad)")
    ht.SetXTitle("#vartheta (mrad)")

    ht.SetTitleOffset(1.5, "Y")
    ht.SetTitleOffset(1.3, "X")

    gPad.SetTopMargin(0.02)
    gPad.SetRightMargin(0.025)
    gPad.SetBottomMargin(0.1)
    gPad.SetLeftMargin(0.11)

    ht.Draw()

    leg = ut.prepare_leg(0.2, 0.87, 0.18, 0.08, 0.035)
    leg.AddEntry(None, "Angular distribution of Bethe-Heitler photons", "")
    #leg.Draw("same")

    gPad.SetLogy()

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 5
0
def plotGroomed( obs="grthrust", filenames=[ "sjm136_test.root" ], ecm="136", logy=1, canv=None ):
    thplotoptions= { "xmin": 0.0, "xmax": 0.5, "ymin": 0.005, "ymax": 50.0, "markerStyle": 20, "markerSize": 0.5, "title": "groomed Thrust", "xlabel": "1-T_{gr}", "ylabel": "1/\sigma d\sigma/d(1-T_{gr})", "logy":logy }
    cpplotoptions= { "xmin": 0.0, "xmax": 1.0, "ymin": 0.03, "ymax": 30.0, "markerStyle": 20, "markerSize": 0.5, "title": "groomed C-parameter", "xlabel": "C_{gr}", "ylabel": "1/\sigma d\sigma/d(C_{gr})", "logy":logy }
    plotopts= { "grthrust": thplotoptions, "grcpar": cpplotoptions }
    if canv == None:
        canv= TCanvas( "canv", obs+" "+ecm, 1200, 800 )
    icanv= 0
    for beta in [ "0.0", "1.0" ]:
        for zcut in [ "0.05", "0.10", "0.15" ]:
            icanv= icanv+1
            canv.cd( icanv )
            gPad.SetLeftMargin( 0.15 )
            gPad.SetRightMargin( 0.025 )
            key= obs + "_" + beta + "_" + zcut
            print key
            aogr= createCombineAnalysisObservables( filenames, key )
            aogr.plot( plotopts[obs] )
            tl= TLegend( 0.4, 0.8, 0.85, 0.85 )
            tl.SetTextSize( 0.05 )
            tl.SetBorderSize( 0 )
            tl.AddEntry( key, "OPAL "+ecm+" GeV", "ep" )
            tl.Draw( "same" )
            txt= TLatex( 0.6, 0.7, "#beta="+beta+ " z_{cut}="+zcut )
            txt.SetNDC( True )
            txt.SetTextSize( 0.035 )
            txt.Draw()            
    return
def rooFit106():

    print ">>> setup model..."
    x = RooRealVar("x", "x", -3, 3)
    mean = RooRealVar("mean", "mean of gaussian", 1, -10, 10)
    sigma = RooRealVar("sigma", "width of gaussian", 1, 0.1, 10)
    gauss = RooGaussian("gauss", "gauss", x, mean, sigma)
    data = gauss.generate(RooArgSet(x), 10000)  # RooDataSet
    gauss.fitTo(data)

    print ">>> plot pdf and data..."
    frame = x.frame(Name("frame"), Title("RooPlot with decorations"),
                    Bins(40))  # RooPlot
    data.plotOn(frame)
    gauss.plotOn(frame)

    print ">>> RooGaussian::paramOn - add box with pdf parameters..."
    # https://root.cern.ch/doc/master/classRooAbsPdf.html#aa43b2556a1b419bad2b020ba9b808c1b
    # Layout(Double_t xmin, Double_t xmax, Double_t ymax)
    # left edge of box starts at 20% of x-axis
    gauss.paramOn(frame, Layout(0.55))

    print ">>> RooDataSet::statOn - add box with data statistics..."
    # https://root.cern.ch/doc/master/classRooAbsData.html#a538d58020b296a1623323a84d2bb8acb
    # x size of box is from 55% to 99% of x-axis range, top of box is at 80% of y-axis range)
    data.statOn(frame, Layout(0.20, 0.55, 0.8))

    print ">>> add text and arrow..."
    text = TText(2, 100, "Signal")
    text.SetTextSize(0.04)
    text.SetTextColor(kRed)
    frame.addObject(text)

    arrow = TArrow(2, 100, -1, 50, 0.01, "|>")
    arrow.SetLineColor(kRed)
    arrow.SetFillColor(kRed)
    arrow.SetLineWidth(3)
    frame.addObject(arrow)

    print ">>> persist frame with all decorations in ROOT file..."
    file = TFile("rooFit106.root", "RECREATE")
    frame.Write()
    file.Close()

    # To read back and plot frame with all decorations in clean root session do
    #   [0] TFile f("rooFit106.root")
    #   [1] xframe->Draw()

    print ">>> draw functions and toy data on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 800, 600)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.05)
    frame.GetYaxis().SetTitleOffset(1.6)
    frame.GetYaxis().SetLabelOffset(0.010)
    frame.GetYaxis().SetTitleSize(0.045)
    frame.GetYaxis().SetLabelSize(0.042)
    frame.GetXaxis().SetTitleSize(0.045)
    frame.GetXaxis().SetLabelSize(0.042)
    frame.Draw()
    canvas.SaveAs("rooFit106.png")
Exemplo n.º 7
0
def plot(obj, plot_name, plot_notes=[]):
    canvas = TCanvas('canvas' + plot_name, "Canvas", 450, 450)
    gPad.SetLeftMargin(.13)
    gPad.SetTopMargin(.05)

    gStyle.SetOptStat(11)
    gStyle.SetOptFit(1111)

    if 'TH2' in obj.ClassName():
        gPad.SetRightMargin(.13)
        draw_options = 'COLZ'

    if 'profile' in obj.GetName():
        gPad.SetRightMargin(.05)
        draw_options = ''

    if 'graph' in obj.GetName():
        gPad.SetRightMargin(.05)
        draw_options = 'APE'
        obj.SetMarkerSize(.7)
        obj.SetMarkerStyle(21)

    note = TPaveText(.2, .7, .5, .9, "brNDC")
    note.SetFillStyle(0)
    note.SetFillColor(0)
    note.SetBorderSize(0)
    note.SetTextColor(1)
    note.SetTextFont(42)
    note.SetTextAlign(11)
    for note_text in plot_notes:
        note.AddText(note_text)

    obj.Draw(draw_options)
    note.Draw()
    canvas.Print('output/' + plot_name + '.pdf')
Exemplo n.º 8
0
def plot_en():

    #energy distribution of generated photons

    ebin = 0.1
    emin = 4
    emax = 28

    can = ut.box_canvas()

    hE = ut.prepare_TH1D("hE", ebin, emin, emax)

    tree.Draw("phot_en >> hE")

    hE.SetYTitle("Events / ({0:.3f}".format(ebin) + " GeV)")
    hE.SetXTitle("#it{E}_{#gamma} (GeV)")

    hE.SetTitleOffset(1.9, "Y")
    hE.SetTitleOffset(1.3, "X")

    gPad.SetTopMargin(0.02)
    gPad.SetRightMargin(0.01)
    gPad.SetBottomMargin(0.1)
    gPad.SetLeftMargin(0.14)

    hE.GetYaxis().SetMoreLogLabels()

    hE.Draw()

    gPad.SetLogy()

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 9
0
def phot_xy():

    #photon detector first point in xy

    xbin = 0.1
    xmin = -12
    xmax = 12

    can = ut.box_canvas()

    hX = ut.prepare_TH2D("hX", xbin, xmin, xmax, xbin, xmin, xmax)

    #tree.Draw("phot_y/10:phot_x/10 >> hX")#, "phot_en<1000")
    tree.Draw("phot_hy/10:phot_hx/10 >> hX")  #, "phot_en<1000")

    hX.SetXTitle("Horizontal #it{x} (cm)")
    hX.SetYTitle("Vertical #it{y} (cm)")

    hX.GetXaxis().CenterTitle()
    hX.GetYaxis().CenterTitle()

    hX.SetTitleOffset(1.2, "Y")
    hX.SetTitleOffset(1.2, "X")

    gPad.SetTopMargin(0.01)
    gPad.SetRightMargin(0.11)
    gPad.SetBottomMargin(0.09)
    gPad.SetLeftMargin(0.09)

    hX.Draw()

    gPad.SetLogz()

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 10
0
 def setPadStyle():
     gPad.SetLeftMargin(0.05)
     gPad.SetRightMargin(0.08)
     gPad.SetTopMargin(0.10)
     gPad.SetBottomMargin(0.10)
     gPad.SetLogz(plots[plot].zLog)
     gPad.SetFillColor(kWhite)
     gPad.SetBorderMode(0)
Exemplo n.º 11
0
def gPadSet():
    gPad.SetTickx(1)
    gPad.SetTicky(1)
    gPad.SetLeftMargin(0.12)
    gPad.SetRightMargin(1.4)
    gPad.SetBottomMargin(0.10)
    gPad.SetFrameLineWidth(2)
    gPad.RedrawAxis()
Exemplo n.º 12
0
def rooFit203():

    print ">>> setup model..."
    x = RooRealVar("x", "x", -10, 10)
    mean = RooRealVar("mean", "mean of gaussian", 0, -10, 10)
    gauss = RooGaussian("gauss", "gaussian PDF", x, mean, RooConst(1))

    # Construct px = 1 (flat in x)
    px = RooPolynomial("px", "px", x)

    # Construct model = f*gx + (1-f)px
    f = RooRealVar("f", "f", 0., 1.)
    model = RooAddPdf("model", "model", RooArgList(gauss, px), RooArgList(f))
    data = model.generate(RooArgSet(x), 10000)  # RooDataSet

    print ">>> fit to full data range..."
    result_full = model.fitTo(data, Save(kTRUE))  # RooFitResult

    print "\n>>> fit \"signal\" range..."
    # Define "signal" range in x as [-3,3]
    x.setRange("signal", -3, 3)
    result_sig = model.fitTo(data, Save(kTRUE),
                             Range("signal"))  # RooFitResult

    print "\n>>> plot and print results..."
    # Make plot frame in x and add data and fitted model
    frame1 = x.frame(Title("Fitting a sub range"))  # RooPlot
    data.plotOn(frame1, Name("data"))
    model.plotOn(frame1, Range("Full"), LineColor(kBlue),
                 Name("model"))  # Add shape in full ranged dashed
    model.plotOn(frame1, LineStyle(kDashed), LineColor(kRed),
                 Name("model2"))  # By default only fitted range is shown

    print "\n>>> result of fit on all data:"
    result_full.Print()

    print "\n>>> result of fit in in signal region (note increased error on signal fraction):"
    result_sig.Print()

    print ">>> draw on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 800, 600)
    legend = TLegend(0.2, 0.85, 0.4, 0.65)
    legend.SetTextSize(0.032)
    legend.SetBorderSize(0)
    legend.SetFillStyle(0)
    gPad.SetLeftMargin(0.14)
    gPad.SetRightMargin(0.02)
    frame1.GetYaxis().SetLabelOffset(0.008)
    frame1.GetYaxis().SetTitleOffset(1.4)
    frame1.GetYaxis().SetTitleSize(0.045)
    frame1.GetXaxis().SetTitleSize(0.045)
    frame1.Draw()
    legend.AddEntry("data", "data", 'LEP')
    legend.AddEntry("model", "fit (full range)", 'L')
    legend.AddEntry("model2", "fit (signal range)", 'L')
    legend.Draw()
    canvas.SaveAs("rooFit203.png")
Exemplo n.º 13
0
 def draw(self):
     self.canvas = TCanvas('can' + self.name, self.name, 1000, 800)
     if self.histo == None:
         self.bookCorrelationHisto()
     self.histo.Draw('boxtext')
     gPad.SetBottomMargin(0.3)
     gPad.SetLeftMargin(0.3)
     gPad.SetRightMargin(0.2)
     gPad.SaveAs('cutCorr_' + self.name + '_' +
                 varStringToFileName(self.addtlCut) + '.png')
Exemplo n.º 14
0
def rooFit105():

    print ">>> bind TMath::Erf C function..."
    x = RooRealVar("x", "x", -3, 3)
    #print ">>> type(%s) = %s" % ("TMath.Erf",type(TMath.Erf))

    fa1 = TF1("fa2", "TMath::Erf(x)", 0, 10)
    erf = bindFunction(fa1, x)  # RooAbsReal
    #erf = bindFunction("erf",TMath.Erf,RooArgList(x)) # RooAbsReal
    erf.Print()
    frame1 = x.frame(Title("TMath::Erf bound as RooFit function"))  # RooPlot
    erf.plotOn(frame1)

    print ">>> bind ROOT::Math::beta_pdf C pdf..."
    x2 = RooRealVar("x2", "x2", 0, 0.999)
    a = RooRealVar("a", "a", 5, 0, 10)
    b = RooRealVar("b", "b", 2, 0, 10)
    print ">>> type(%s) = %s" % ("Math.beta_pdf", type(Math.beta_pdf))
    #beta = bindPdf("beta",Math.beta_pdf,RooArgList(x2,a,b)) # RooAbsPdf
    beta = bindPdf("beta", Math.beta_pdf, x2, a, b)  # RooAbsPdf
    beta.Print()

    print ">>> generate and fit data...\n"
    data = beta.generate(x2, 10000)  # RooDataSet
    beta.fitTo(data)
    frame2 = x2.frame(Title("ROOT::Math::Beta bound as RooFit pdf"))  # RooPlot
    data.plotOn(frame2)
    beta.plotOn(frame2)

    print ">>> bind ROOT::TF1 as RooFit function..."
    fa3 = TF1("fa3", "sin(x)/x", 0, 10)
    x3 = RooRealVar("x3", "x3", 0.01, 20)
    rfa1 = bindFunction(fa3, RooArgList(x3))  # RooAbsReal
    rfa1.Print()
    frame3 = x3.frame(Title("TF1 bound as RooFit function"))  # RooPlot
    rfa1.plotOn(frame3)

    print ">>> draw functions and toy data on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 1800, 600)
    canvas.Divide(3)
    for i, frame in enumerate([frame1, frame2, frame3], 1):
        canvas.cd(i)
        gPad.SetLeftMargin(0.15)
        gPad.SetRightMargin(0.05)
        frame.GetYaxis().SetTitleOffset(1.6)
        frame.GetYaxis().SetLabelOffset(0.010)
        frame.GetYaxis().SetTitleSize(0.045)
        frame.GetYaxis().SetLabelSize(0.042)
        frame.GetXaxis().SetTitleSize(0.045)
        frame.GetXaxis().SetLabelSize(0.042)
        frame.Draw()
    canvas.SaveAs("rooFit105.png")
Exemplo n.º 15
0
def plot_zdc_vtx():

    #ZDC vertex from selected events and from all triggered events

    vbin = 0.1
    vmin = -5.
    vmax = 7.

    mmin = 1.5
    mmax = 5.

    can = ut.box_canvas()

    #selection string
    strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax)

    #make the histograms
    hZdcVtx = ut.prepare_TH1D("hZdcVtx", vbin, vmin, vmax)
    hZdcVtxAll = ut.prepare_TH1D("hZdcVtxAll", vbin / 10., vmin, vmax)

    #convert to meters for plot
    tree.Draw("jZDCVtxZ/100. >> hZdcVtx", strsel)
    treeAll = inp.Get("jAllTree")
    treeAll.Draw("jZDCVtxZ/100. >> hZdcVtxAll")
    ut.norm_to_data(hZdcVtxAll, hZdcVtx, rt.kRed)

    hZdcVtx.SetYTitle("Events / {0:.0f} cm".format(vbin * 100.))
    hZdcVtx.SetXTitle("ZDC vertex along #it{z} (meters)")

    hZdcVtx.SetTitleOffset(1.5, "Y")
    hZdcVtx.SetTitleOffset(1.1, "X")

    gPad.SetTopMargin(0.01)
    gPad.SetRightMargin(0.04)
    gPad.SetBottomMargin(0.08)
    gPad.SetLeftMargin(0.1)

    leg = ut.prepare_leg(0.67, 0.8, 0.28, 0.14, 0.025)
    leg.SetMargin(0.17)
    ut.add_leg_mass(leg, mmin, mmax)
    leg.AddEntry(hZdcVtx, "Selected events")
    leg.AddEntry(hZdcVtxAll, "All UPC-JpsiB triggers", "l")

    #gPad.SetLogy()

    hZdcVtx.Draw()
    hZdcVtxAll.Draw("same")
    leg.Draw("same")

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 16
0
def rooFit510():

    print ">>> create and fill workspace..."
    workspace = RooWorkspace("workspace")  # RooWorkspace
    fillWorkspace(workspace)

    print ">>>\n>>> retrieve model from workspace..."
    # Exploit convention encoded in named set "parameters" and "observables"
    # to use workspace contents w/o need for introspected
    model = workspace.pdf("model")  # RooAbsPdf

    print ">>> generate and fit data in given observables"
    data = model.generate(workspace.set("observables"), 1000)  # RooDataSet
    model.fitTo(data)

    print ">>> plot model and data of first observables..."
    frame1 = workspace.set("observables").first().frame()  # RooPlot
    data.plotOn(frame1, Name("data"), Binning(50))
    model.plotOn(frame1, Name("model"))

    print ">>> overlay plots with reference parameters as stored in snapshots..."
    workspace.loadSnapshot("reference_fit")
    model.plotOn(frame1, LineColor(kRed), Name("model_ref"))
    workspace.loadSnapshot("reference_fit_bkgonly")
    model.plotOn(frame1, LineColor(kRed), LineStyle(kDashed), Name("bkg_ref"))

    print "\n>>> draw on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 800, 600)
    legend = TLegend(0.2, 0.8, 0.4, 0.6)
    legend.SetTextSize(0.032)
    legend.SetBorderSize(0)
    legend.SetFillStyle(0)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame1.GetYaxis().SetLabelOffset(0.008)
    frame1.GetYaxis().SetTitleOffset(1.5)
    frame1.GetYaxis().SetTitleSize(0.045)
    frame1.GetXaxis().SetTitleSize(0.045)
    frame1.Draw()
    legend.AddEntry("data", "data", 'LEP')
    legend.AddEntry("model", "model", 'L')
    legend.AddEntry("model_ref", "model fit", 'L')
    legend.AddEntry("bkg_ref", "background only fit", 'L')
    legend.Draw()
    canvas.SaveAs("rooFit510.png")

    # Print workspace contents
    workspace.Print()

    # Workspace will remain in memory after macro finishes
    gDirectory.Add(workspace)
Exemplo n.º 17
0
def phot_theta():

    #polar angle of generated photons

    tbin = 0.01
    tmax = 4

    gdir = "/home/jaroslav/sim/GETaLM/cards/"
    inp = "bg.root"

    infile = TFile.Open(gdir + inp)
    tree = infile.Get("ltree")

    can = ut.box_canvas()

    ht1 = ut.prepare_TH1D("ht1", tbin, 0, tmax)
    ht2 = ut.prepare_TH1D("ht2", tbin, 0, tmax)
    ht2.SetMarkerColor(rt.kRed)
    ht2.SetLineColor(rt.kRed)

    #tree.Draw("(TMath::Pi()-true_phot_theta)*1000 >> ht")
    tree.Draw("(TMath::Pi()-phot_theta)*1000 >> ht1",
              "vtx_z>5000 && vtx_z<12000")
    tree.Draw("(TMath::Pi()-phot_theta)*1000 >> ht2",
              "vtx_z>-5000 && vtx_z<5000")

    #ht.SetYTitle("Events / ({0:.3f}".format(tbin)+" mrad)")
    #ht.SetYTitle("Counts")
    #ht.SetXTitle("Photon #it{#theta} (mrad)")

    #ht.SetTitleOffset(1.5, "Y")
    #ht.SetTitleOffset(1.3, "X")

    gPad.SetTopMargin(0.02)
    gPad.SetRightMargin(0.025)
    gPad.SetBottomMargin(0.1)
    gPad.SetLeftMargin(0.11)

    gPad.SetGrid()

    ht1.Draw()
    ht2.Draw("e1same")

    #leg = ut.prepare_leg(0.2, 0.87, 0.18, 0.08, 0.035)
    #leg.AddEntry(None, "Angular distribution of Bethe-Heitler photons", "")
    #leg.Draw("same")

    gPad.SetLogy()

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 18
0
def plot_vtx_z():

    #primary vertex position along z from data and MC
    vbin = 4.
    vmax = 120.

    mmin = 1.5
    mmax = 5

    strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax)

    can = ut.box_canvas()

    hVtx = ut.prepare_TH1D("hVtx", vbin, -vmax, vmax)
    hVtxMC = ut.prepare_TH1D("hVtxMC", vbin/2., -vmax, vmax)

    tree.Draw("jVtxZ >> hVtx", strsel)
    mctree.Draw("jVtxZ >> hVtxMC", strsel)
    ut.norm_to_data(hVtxMC, hVtx, rt.kBlue, -40, 40)

    hVtx.SetYTitle("Counts / {0:.0f} cm".format(vbin));
    hVtx.SetXTitle("#it{z} of primary vertex (cm)");

    hVtx.SetTitleOffset(1.5, "Y")
    hVtx.SetTitleOffset(1.3, "X")

    gPad.SetTopMargin(0.02)
    gPad.SetRightMargin(0.02)
    gPad.SetBottomMargin(0.1)
    gPad.SetLeftMargin(0.11)

    cut_lo = ut.cut_line(-30, 0.8, hVtx)
    cut_hi = ut.cut_line(30, 0.8, hVtx)

    leg = ut.prepare_leg(0.16, 0.82, 0.26, 0.12, 0.025)
    #leg.SetMargin(0.15)
    #leg.SetBorderSize(1)
    ut.add_leg_mass(leg, mmin, mmax)
    leg.AddEntry(hVtx, "Data")
    #leg.AddEntry(hVtxMC, "MC, coherent J/#it{#psi}", "l")
    leg.AddEntry(hVtxMC, "MC, #it{#gamma}#it{#gamma} #rightarrow e^{+}e^{-}", "l")
    leg.AddEntry(cut_lo, "Cut at #pm30 cm", "l")

    hVtx.Draw()
    hVtxMC.Draw("same")
    leg.Draw("same")
    cut_lo.Draw("same")
    cut_hi.Draw("same")

    #ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 19
0
def plot_zdc():

    #ZDC ADC counts east or west 1D

    ew = 0

    zbin = 10.
    zmin = 0.
    zmax = 1300.

    znam = ["jZDCUnAttEast", "jZDCUnAttWest"]
    xtit = ["ZDC East ADC", "ZDC West ADC"]
    lhead = ["East ZDC", "West ZDC"]

    #global gPad
    can = ut.box_canvas()

    hZdc = ut.prepare_TH1D("hZdc", zbin, zmin, zmax)
    hZdcAll = ut.prepare_TH1D("hZdcAll", zbin, zmin, zmax)

    tree.Draw(znam[ew] + " >> hZdc")
    treeAll = inp.Get("jAllTree")
    treeAll.Draw(znam[ew] + " >> hZdcAll")
    ut.norm_to_data(hZdcAll, hZdc, rt.kRed)

    hZdc.SetYTitle("Events / {0:.1f}".format(zbin))
    hZdc.SetXTitle(xtit[ew])

    hZdc.SetTitleOffset(1.5, "Y")
    hZdc.SetTitleOffset(1.1, "X")

    gPad.SetTopMargin(0.01)
    gPad.SetRightMargin(0.08)
    gPad.SetBottomMargin(0.08)
    gPad.SetLeftMargin(0.1)

    leg = ut.prepare_leg(0.5, 0.76, 0.39, 0.16, 0.035)
    leg.SetMargin(0.17)
    leg.AddEntry(None, lhead[ew], "")
    leg.AddEntry(hZdc, "Selected events")
    leg.AddEntry(hZdcAll, "All UPC-JpsiB triggers", "l")

    hZdc.Draw()
    hZdcAll.Draw("same")
    leg.Draw("same")

    #ut.print_pad(rt.gPad)
    ut.invert_col(rt.gPad)

    can.SaveAs("01fig.pdf")
Exemplo n.º 20
0
def setpad(left, right, top, bottom):
    gPad.SetFillColor(10)
    gPad.SetBorderMode(0)
    gPad.SetBorderSize(0)
    gPad.SetFrameFillColor(10)
    gPad.SetFrameBorderMode(0)
    gPad.SetFrameBorderSize(0)
    gPad.SetLeftMargin(left)
    gPad.SetRightMargin(right)
    gPad.SetTopMargin(top)
    gPad.SetBottomMargin(bottom)
    gPad.SetGridx(0)
    gPad.SetGridy(0)
    gStyle.SetOptStat(0)
Exemplo n.º 21
0
def rooFit208():

    print ">>> setup component pdfs..."
    t = RooRealVar("t", "t", -10, 30)
    ml = RooRealVar("ml", "mean landau", 5., -20, 20)
    sl = RooRealVar("sl", "sigma landau", 1, 0.1, 10)
    landau = RooLandau("lx", "lx", t, ml, sl)
    mg = RooRealVar("mg", "mg", 0)
    sg = RooRealVar("sg", "sg", 2, 0.1, 10)
    gauss = RooGaussian("gauss", "gauss", t, mg, sg)

    print ">>> construct convolution pdf..."
    # Set #bins to be used for FFT sampling to 10000
    t.setBins(10000, "cache")

    # Construct landau (x) gauss
    convolution = RooFFTConvPdf("lxg", "landau (X) gauss", t, landau, gauss)

    print ">>> sample, fit and plot convoluted pdf..."
    data = convolution.generate(RooArgSet(t), 10000)  # RooDataSet
    convolution.fitTo(data)

    print "\n>>> plot everything..."
    frame1 = t.frame(Title("landau #otimes gauss convolution"))  # RooPlot
    data.plotOn(frame1, Binning(50), Name("data"))
    convolution.plotOn(frame1, Name("lxg"))
    gauss.plotOn(frame1, LineStyle(kDashed), LineColor(kRed), Name("gauss"))
    landau.plotOn(frame1, LineStyle(kDashed), LineColor(kGreen),
                  Name("landau"))

    print "\n>>> draw pfds and fits on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 800, 600)
    legend = TLegend(0.6, 0.8, 0.8, 0.6)
    legend.SetTextSize(0.032)
    legend.SetBorderSize(0)
    legend.SetFillStyle(0)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame1.GetYaxis().SetLabelOffset(0.008)
    frame1.GetYaxis().SetTitleOffset(1.5)
    frame1.GetYaxis().SetTitleSize(0.045)
    frame1.GetXaxis().SetTitleSize(0.045)
    frame1.Draw()
    legend.AddEntry("data", "data", 'LEP')
    legend.AddEntry("lxg", "convolution", 'L')
    legend.AddEntry("landau", "landau", 'L')
    legend.AddEntry("gauss", "gauss", 'L')
    legend.Draw()
    canvas.SaveAs("rooFit208.png")
Exemplo n.º 22
0
def plot_zdc_vtx_alltrg():

    #ZDC vertex from all triggered events

    vbin = 0.01
    #vmin = -20.
    #vmax = 20.
    #vmin = -26
    #vmax = -12
    vmin = -800
    vmax = 800

    can = ut.box_canvas()

    #make the histogram
    hZdcVtx = ut.prepare_TH1D("hZdcVtxAll", vbin, vmin, vmax)
    hZdcVtx.SetOption("L")

    #convert to meters for plot
    treeAll = inp.Get("jAllTree")
    print("Number of all trg events:", treeAll.GetEntries())
    treeAll.Draw("jZDCVtxZ/100. >> hZdcVtxAll")

    hZdcVtx.SetYTitle("Events / {0:.0f} cm".format(vbin * 100.))
    hZdcVtx.SetXTitle("ZDC vertex along #it{z} (meters)")

    hZdcVtx.SetTitleOffset(1.5, "Y")
    hZdcVtx.SetTitleOffset(1.1, "X")

    gPad.SetTopMargin(0.04)
    gPad.SetRightMargin(0.04)
    gPad.SetBottomMargin(0.08)
    gPad.SetLeftMargin(0.1)

    leg = ut.prepare_leg(0.67, 0.8, 0.28, 0.14, 0.025)
    leg.SetMargin(0.17)
    #leg.AddEntry(None, "UPC-JpsiB 2014", "")
    #leg.AddEntry(None, "UPC-main 2010+2011", "")
    #leg.AddEntry(None, "UPC-main 2014", "")
    leg.AddEntry(None, "Zero bias 2014", "")
    #leg.AddEntry(None, "VPD-ZDC-novtx-mon", "")

    #gPad.SetLogy()

    hZdcVtx.Draw()
    leg.Draw("same")

    #ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 23
0
def plot_2d(plot_pdf):

    plot_pdf.pdf.GetXaxis().SetTitleOffset(2.3)
    plot_pdf.pdf.GetYaxis().SetTitleOffset(1.9)
    plot_pdf.pdf.GetZaxis().SetTitleOffset(1.7)

    gPad.SetTopMargin(0.01)
    gPad.SetRightMargin(0.05)
    gPad.SetBottomMargin(0.11)
    gPad.SetLeftMargin(0.12)

    plot_pdf.plot()

    gPad.SetPhi(-125.)
    gPad.Update()
Exemplo n.º 24
0
def plot_projection(frame, ew):

    xtit = ["ZDC East ADC", "ZDC West ADC"]

    frame.SetXTitle(xtit[ew])

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

    gPad.SetTopMargin(0.01)
    gPad.SetRightMargin(0.01)
    gPad.SetBottomMargin(0.1)
    gPad.SetLeftMargin(0.1)

    frame.Draw()
Exemplo n.º 25
0
def draw_canvas_2d(name):

    f_mc = TFile("plots/mc/%s_mcc7.root" % name)
    h_mc = gDirectory.Get("h_%s_reco" % name)
    f = TFile("plots/data/e_%s_pandoraCosmic.root" % name)
    h = gDirectory.Get("h_%s" % name)
    h.Divide(h_mc)
    h.GetZaxis().SetRangeUser(0.5, 1.5)
    #h.GetZaxis().SetTitle("Data/Monte Carlo")
    #h.GetZaxis().RotateTitle()
    h.SetMarkerSize(2)
    x_minbin = h.FindFirstBinAbove(0, 1)
    low_x = h.GetXaxis().GetBinLowEdge(x_minbin)
    x_maxbin = h.FindLastBinAbove(0, 1)
    high_x = h.GetXaxis().GetBinUpEdge(x_maxbin)

    y_minbin = h.FindFirstBinAbove(0, 2)
    low_y = h.GetYaxis().GetBinLowEdge(y_minbin)
    y_maxbin = h.FindLastBinAbove(0, 2)
    high_y = h.GetYaxis().GetBinUpEdge(y_maxbin)

    h.GetXaxis().SetRangeUser(low_x, high_x)
    h.GetYaxis().SetRangeUser(low_y, high_y)

    c = TCanvas("c_%s" % name)
    h.SetMarkerSize(2.5)
    gPad.SetBottomMargin(0.17)
    gPad.SetLeftMargin(0.13)
    gPad.SetTopMargin(0.15)
    gPad.SetRightMargin(0.15)

    h.GetYaxis().SetTitleSize(0.07)
    h.GetXaxis().SetTitleSize(0.07)
    h.GetYaxis().SetTitleOffset(0.8)

    pt = TPaveText(0.13, 0.855, 0.42, 0.98, "ndc")
    pt.AddText("MicroBooNE")
    pt.SetFillColor(0)
    pt.SetBorderSize(0)
    pt.SetShadowColor(0)
    h.Draw("colz texte")

    pt.Draw()
    c.Update()
    c.SaveAs("plots/%s.pdf" % name)
    c.SaveAs("plots/%s.p" % name)

    return c
Exemplo n.º 26
0
def up_down_en():

    #up and down spectrometers energy sum

    ebin = 0.1
    emin = 0
    emax = 20

    edet = 1

    can = ut.box_canvas()

    hE = ut.prepare_TH1D("hE", ebin, emin, emax)

    sel = "up_en>" + str(edet * 1e3) + " && down_en>" + str(edet * 1e3)

    #tree.Draw("(up_en+down_en)/1000. >> hE", sel)
    #tree.Draw("up_en/1000. >> hE")#, sel)
    #tree.Draw("down_en/1000. >> hE")
    #tree.Draw("up_en >> hE")#, sel)
    tree.Draw("down_en >> hE")

    print "Entries:", hE.GetEntries()

    hE.SetYTitle("Events / ({0:.3f}".format(ebin) + " GeV)")
    hE.SetXTitle("#it{E}_{#gamma} = #it{E}_{up} + #it{E}_{down} (GeV)")

    hE.SetTitleOffset(1.4, "Y")
    hE.SetTitleOffset(1.3, "X")

    gPad.SetTopMargin(0.01)
    gPad.SetRightMargin(0.02)
    gPad.SetBottomMargin(0.1)
    gPad.SetLeftMargin(0.1)

    #hE.GetYaxis().SetMoreLogLabels()

    hE.Draw()

    gPad.SetLogy()

    leg = ut.prepare_leg(0.58, 0.8, 0.2, 0.15, 0.035)  # x, y, dx, dy, tsiz
    leg.AddEntry(hE, "#it{E}_{up} + #it{E}_{down}", "lp")
    leg.AddEntry(None, "#it{E}_{up}>1 #bf{and} #it{E}_{down}>1 GeV", "")
    leg.Draw("same")

    ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 27
0
def plot_dSigDe():

    # dSigma / dEgamma according to ZEUS parametrization

    parse = ConfigParser.RawConfigParser()
    parse.add_section("main")
    parse.set("main", "emin", "6")
    parse.set("main", "Ee", "18")
    parse.set("main", "Ep", "275")
    gen = gen_zeus(parse)
    sig = gen.dSigDe

    gStyle.SetPadTickY(1)
    can = ut.box_canvas()

    #frame = gPad.DrawFrame(6, 0, 29, 6)
    frame = gPad.DrawFrame(5, 0, 19, 7.2)

    sig.SetLineWidth(3)
    sig.SetNpx(1000)
    sig.SetTitle("")
    sig.Draw("same")

    frame.GetXaxis().SetTitle("#it{E}_{#gamma} (GeV)")
    frame.GetYaxis().SetTitle("d#sigma / d#it{E}_{#gamma} (mb/GeV)")

    frame.GetYaxis().SetTitleOffset(1.1)
    frame.GetXaxis().SetTitleOffset(1.3)

    frame.SetTickLength(0.015, "X")
    frame.SetTickLength(0.015, "Y")

    gPad.SetTopMargin(0.02)
    gPad.SetRightMargin(0.01)
    gPad.SetLeftMargin(0.09)

    leg = ut.prepare_leg(0.65, 0.73, 0.24, 0.2, 0.035)  # x, y, dx, dy, tsiz
    leg.AddEntry(sig, "#frac{d#sigma}{d#it{E}_{#gamma}}", "l")
    leg.AddEntry(None, "", "")
    #leg.AddEntry(None, "#it{E}_{e} = 27.6 GeV", "")
    #leg.AddEntry(None, "#it{E}_{p} = 920 GeV", "")
    leg.AddEntry(None, "#it{E}_{e} = 18 GeV", "")
    leg.AddEntry(None, "#it{E}_{p} = 275 GeV", "")
    leg.Draw("same")

    ut.invert_col(gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 28
0
def plot_zdc_tpc_vtx():

    #2D ZDC and TPC vertices

    zbin = 2.
    #zmin = -50.
    #zmax = 100.
    zmin = -100
    zmax = 150

    tbin = 2.
    #tmin = -55.
    #tmax = 55.
    tmin = -110
    tmax = 110

    mmin = 1.5
    mmax = 5.

    can = ut.box_canvas()

    strsel = "jRecM>{0:.3f} && jRecM<{1:.3f}".format(mmin, mmax)

    hVtx = ut.prepare_TH2D("hVtx", tbin, tmin, tmax, zbin, zmin, zmax)

    tree.Draw("jZDCVtxZ:jVtxZ >> hVtx", strsel)
    hVtx.SetXTitle("TPC vertex along #it{z} / " + "{0:.0f} cm".format(zbin))
    hVtx.SetYTitle("ZDC vertex along #it{z} / " + "{0:.0f} cm".format(zbin))

    hVtx.SetTitleOffset(1.5, "Y")
    hVtx.SetTitleOffset(1.1, "X")

    gPad.SetTopMargin(0.02)
    gPad.SetRightMargin(0.09)
    gPad.SetBottomMargin(0.08)
    gPad.SetLeftMargin(0.11)

    leg = ut.prepare_leg(0.16, 0.82, 0.23, 0.05, 0.025)
    leg.SetMargin(0.02)
    leg.SetBorderSize(1)
    ut.add_leg_mass(leg, mmin, mmax)

    hVtx.Draw()
    leg.Draw("same")

    #ut.invert_col(rt.gPad)
    can.SaveAs("01fig.pdf")
Exemplo n.º 29
0
def rooFit503():

    print ">>> open and workspace file, list its contents and get workspace object..."
    file = TFile("rooFit502_workspace.root")
    file.ls()
    workspace = file.Get("workspace")  # RooWorkspace

    print "\n>>> retrieve pdf, data from workspace..."
    x = workspace.var("x")  # RooRealVar
    model = workspace.pdf("model")  # RooAbsPdf
    data = workspace.data("modelData")

    print ">>> print model tree:..."
    model.Print("t")

    print "\n>>> fit model to data..."
    model.fitTo(data)
    frame1 = x.frame(Title("Model and data read from workspace"))  # RooPlot

    print ">>> plot everything..."
    data.plotOn(frame1, Name("data"), Binning(40))
    model.plotOn(frame1, Name("model"))
    model.plotOn(frame1, Components("bkg"), LineStyle(kDashed), Name("bkg"))
    model.plotOn(frame1, Components("bkg,sig2"), LineStyle(kDotted),
                 Name("bkgsig2"))

    print "\n>>> draw on canvas..."
    canvas = TCanvas("canvas", "canvas", 100, 100, 800, 600)
    legend = TLegend(0.2, 0.8, 0.4, 0.6)
    legend.SetTextSize(0.032)
    legend.SetBorderSize(0)
    legend.SetFillStyle(0)
    gPad.SetLeftMargin(0.15)
    gPad.SetRightMargin(0.02)
    frame1.GetYaxis().SetLabelOffset(0.008)
    frame1.GetYaxis().SetTitleOffset(1.5)
    frame1.GetYaxis().SetTitleSize(0.045)
    frame1.GetXaxis().SetTitleSize(0.045)
    frame1.Draw()
    legend.AddEntry("data", "data", 'LEP')
    legend.AddEntry("model", "model", 'L')
    legend.AddEntry("bkg", "background only", 'L')
    legend.AddEntry("bkgsig2", "background + signal 2", 'L')
    legend.Draw()
    canvas.SaveAs("rooFit503.png")
Exemplo n.º 30
0
def rooFit107():
    
    print ">>> setup model..."
    x      = RooRealVar("x","x",-3,3)
    mean   = RooRealVar("mean","mean of gaussian",1,-10,10)
    sigma  = RooRealVar("sigma","width of gaussian",1,0.1,10)
    gauss  = RooGaussian("gauss","gauss",x,mean,sigma)
    data   = gauss.generate(RooArgSet(x),1000) # RooDataSet
    gauss.fitTo(data)
    
    print ">>> plot pdf and data..."
    frame1 = x.frame(Name("frame1"),Title("Red Curve / SumW2 Histo errors"),Bins(20)) # RooPlot
    frame2 = x.frame(Name("frame2"),Title("Dashed Curve / No XError bars"),Bins(20)) # RooPlot
    frame3 = x.frame(Name("frame3"),Title("Filled Curve / Blue Histo"),Bins(20)) # RooPlot
    frame4 = x.frame(Name("frame4"),Title("Partial Range / Filled Bar chart"),Bins(20)) # RooPlot
    
    print ">>> data plotting styles..."
    data.plotOn(frame1,DataError(RooAbsData.SumW2))
    data.plotOn(frame2,XErrorSize(0))                           # Remove horizontal error bars
    data.plotOn(frame3,MarkerColor(kBlue),LineColor(kBlue))     # Blue markers and error bors
    data.plotOn(frame4,DrawOption("B"),DataError(RooAbsData.None),
                       XErrorSize(0),FillColor(kGray))          # Filled bar chart
    
    print ">>> data plotting styles..."
    gauss.plotOn(frame1,LineColor(kRed))    
    gauss.plotOn(frame2,LineStyle(kDashed))                              # Change line style to dashed
    gauss.plotOn(frame3,DrawOption("F"),FillColor(kOrange),MoveToBack()) # Filled shapes in green color
    gauss.plotOn(frame4,Range(-8,3),LineColor(kMagenta))
    
    print ">>> draw pfds and fits on canvas..."
    canvas = TCanvas("canvas","canvas",100,100,1000,1200)
    canvas.Divide(2,2)
    for i, frame in enumerate([frame1,frame2,frame3,frame4],1):
        canvas.cd(i)
        gPad.SetLeftMargin(0.15); gPad.SetRightMargin(0.05)
        frame.GetYaxis().SetTitleOffset(1.6)
        frame.GetYaxis().SetLabelOffset(0.010)
        frame.GetYaxis().SetTitleSize(0.045)
        frame.GetYaxis().SetLabelSize(0.042)
        frame.GetXaxis().SetTitleSize(0.045)
        frame.GetXaxis().SetLabelSize(0.042)
        frame.Draw()
    canvas.SaveAs("rooFit107.png")