Example #1
0
def get_roofit_model( histograms, fit_boundaries, name = 'model' ):
    data_label = 'data'
    samples = sorted( histograms.keys() )
    samples.remove( data_label )
    roofit_histograms = {}
    roofit_pdfs = {}
    roofit_variables = {}
    variables = RooArgList()
    variable_set = RooArgSet()

    fit_variable = RooRealVar( name , name, fit_boundaries[0], fit_boundaries[1] )
    variables.add( fit_variable )
    variable_set.add( fit_variable )
    
    roofit_histograms[data_label] = RooDataHist( data_label,
                                                     data_label,
                                                     variables,
                                                     histograms[data_label] )
    
    pdf_arglist = RooArgList()
    variable_arglist = RooArgList()
    N_total = histograms[data_label].Integral() * 2
    N_min = 0
    for sample in samples:
        roofit_histogram = RooDataHist( sample, sample, variables, histograms[sample] )
        roofit_histograms[sample] = roofit_histogram
        roofit_pdf = RooHistPdf ( 'pdf' + sample, 'pdf' + sample, variable_set, roofit_histogram, 0 )
        roofit_pdfs[sample] = roofit_pdf
        roofit_variable = RooRealVar( sample, "number of " + sample + " events", histograms[sample].Integral(), N_min, N_total, "event" )
        roofit_variables[sample] = roofit_variable
        pdf_arglist.add( roofit_pdf )
        variable_arglist.add( roofit_variable )
        
    model = RooAddPdf( name, name, pdf_arglist, variable_arglist )
    return model, roofit_histograms, fit_variable
Example #2
0
def performFitInLeptonAbsEta(data_histogram, signal_histogram, bkg1_histogram,
                             bkg2_histogram):
    N_Data = data_histogram.Integral()
    N_signal = signal_histogram.Integral()
    N_bkg1 = bkg1_histogram.Integral()
    N_bkg2 = bkg2_histogram.Integral()
    leptonAbsEta = RooRealVar("leptonAbsEta", "leptonAbsEta", 0., 3.)
    variables = RooArgList()
    variables.add(leptonAbsEta)
    variable_set = RooArgSet()
    variable_set.add(leptonAbsEta)

    lowerBound = 0
    upperBound = N_Data * 2

    data_RooDataHist = RooDataHist("data", "dataset with leptonAbsEta",
                                   variables, data_histogram)
    signal_RooDataHist = RooDataHist("rh_signal", "signal", variables,
                                     signal_histogram)
    bkg1_RooDataHist = RooDataHist("rh_bkg1", "bkg1", variables,
                                   bkg1_histogram)
    bkg2_RooDataHist = RooDataHist("rh_bkg2", "bkg2", variables,
                                   bkg2_histogram)

    signal_RooHistPdf = RooHistPdf("pdf_signal", "Signal PDF", variable_set,
                                   signal_RooDataHist, 0)
    signal_RooHistPdf = RooHistPdf("pdf_signal", "Signal PDF", variable_set,
                                   signal_RooDataHist, 0)
Example #3
0
def makePlot(s):
    if (type(s) == TH1D):
        s.SetStats(0)
        x = RooRealVar("x", "x", 0, 3)
        l = RooArgList(x)
        dh = RooDataHist("dh", "dh", l, s)
        frame = x.frame()

        dh.plotOn(frame)
        #frame.SetTitle(name)
        #frame.GetXaxis().SetTitle(s.GetXaxis().GetTitle())
        frame.GetYaxis().SetTitle(s.GetYaxis().GetTitle())

        #        frame.GetYaxis().SetTopMargin(0.15)
        #frame.Draw(draw)
        return frame

    elif (type(s) == TH2D):
        s.SetStats(0)
        x = RooRealVar("x", "x", 0, 3)
        y = RooRealVar("y", "y", 0, 3)
        l = RooArgList(x, y)
        dh = RooDataHist("dh", "dh", l, s)
        t = TGraph2D(s)
        s.SetMarkerSize(1.0)
        s.SetMarkerStyle(1)
        #t.GetXaxis().SetTitle(s.GetXaxis().GetTitle())
        return s

    elif (type(s) == TGraph2D):
        s.SetMarkerSize(1.0)
        s.SetMarkerStyle(1)
        return s
Example #4
0
def fit(model, hists, fitmethod, eps=1.0e-7):
    """Fit beam shapes to Beam Imaging data.

    model: Beam shape model (derived from BeamShapeCore).
    hists: List of four TH2F with BI data.
    fitmethod: Function(pdf, data) that fits pdf to data.
    eps: Value of convergence criteria.
    """

    RooAbsReal.defaultIntegratorConfig().setEpsAbs(eps)
    RooAbsReal.defaultIntegratorConfig().setEpsRel(eps)
    modfuncs = model.model_functions()

    datahist = [
        RooDataHist('scan{0}Beam{1}RestDataHist'.format(c, i),
                    'scan{0}Beam{1}RestDataHist'.format(c, i),
                    RooArgList(model.xvar(), model.yvar()), hists[j])
        for j, (i, c) in enumerate(ic)
    ]
    sample = RooCategory('sample', 'sample')
    for (i, c) in ic:
        sample.defineType('{0}_ScanData_Beam{1}Rest'.format(c, i))
    combdata = RooDataHist('combdata', 'combined data',
                           RooArgList(model.xvar(), model.yvar()),
                           RooFit.Index(sample),
                           RooFit.Import('X_ScanData_Beam1Rest', datahist[0]),
                           RooFit.Import('Y_ScanData_Beam1Rest', datahist[1]),
                           RooFit.Import('X_ScanData_Beam2Rest', datahist[2]),
                           RooFit.Import('Y_ScanData_Beam2Rest', datahist[3]))
    simpdf = RooSimultaneous('simpdf', 'simultaneous pdf', sample)
    for j, (i, c) in enumerate(ic):
        simpdf.addPdf(modfuncs[j], '{0}_ScanData_Beam{1}Rest'.format(c, i))

    result = fitmethod(simpdf, combdata)
    return result, modfuncs, datahist
def doFit(hist,output,rap="BB",flavour="DATA",trackType="TunePNew",funct="doubleCB"):

	
	sig    = []
	sige   = []
	meanList   = []
	meanListe  = []
	nChi2  = []
	gSystem.Load("./RooCruijff_cxx.so")
	gSystem.Load("./RooDCBShape_cxx.so")
	for i,h in enumerate(hist):
		ws = RooWorkspace("tempWS")

		mass = RooRealVar('mass','mass',91, xLow, xHigh )
		getattr(ws,'import')(mass,RooCmdArg())			
		dataHist = RooDataHist("hist","hist",RooArgList(ws.var("mass")),h)
		getattr(ws,'import')(dataHist,RooCmdArg())

		ws.writeToFile("tmpWorkspace.root")
		
		subprocess.call(["python","fitCapsule.py",output,rap,flavour,trackType,funct,"%d"%xLow,"%d"%xHigh,"%d"%rebinFactor,"%d"%i])
		
		returnFile = TFile("tmpWorkspaceReturn.root","OPEN")
		wsReturn = returnFile.Get("tempWS")
		
		sig.append(wsReturn.var("Sig").getVal())
		sige.append(wsReturn.var("Sige").getVal())
		meanList.append(wsReturn.var("Mean").getVal())
		meanListe.append(wsReturn.var("Meane").getVal())
		nChi2.append(wsReturn.var("chi2").getVal()/wsReturn.var("nDOF").getVal())


	return meanList,meanListe,sig,sige, nChi2	
    def addHistData(self,
                    ws,
                    ds_name,
                    item_title,
                    var_set_name,
                    var_set_type,
                    ds_object,
                    sets=None):
        legend = '[exostConfig::addHistData]:'

        arg_list = RooArgList()
        if (var_set_type == 'set'):
            #arg_list.add(ws.set(var_set_name))
            arg_list.add(sets[var_set_name])
        elif (var_set_type == 'var'):
            arg_list.add(ws.var(var_set_name))
        else:
            print legend, 'error: unknown var_set_type, cannot create dataset', ds_name
            return -1

        #create the hist dataset
        ds = RooDataHist(ds_name, item_title, arg_list, ds_object, 1)

        # import the datahist. Note workaround 'import' being a reserved word
        getattr(ws, 'import')(ds)
Example #7
0
    def _make_underlying_model(self):
        self.pdfs = {}
        self.yields = {}  # yields are plain floats
        self.ryields = {}  # keep track of roofit objects for memory management
        nbins, xmin, xmax = self.plot.histos[0].GetBinning()
        self.xvar = RooRealVar("x", "x", xmin, xmax)
        self.xvar.setBins(nbins)
        self.pdfs = {}
        self.hists = []
        pdfs = RooArgList()
        yields = RooArgList()
        for compname, comp in self.plot.histosDict.iteritems():
            if comp.weighted.Integral() == 0:
                continue
            assert (isinstance(comp, Histogram))
            hist = RooDataHist(compname, compname, RooArgList(self.xvar),
                               comp.weighted)
            SetOwnership(hist, False)
            # self.hists.append(hist)
            pdf = RooHistPdf(compname, compname, RooArgSet(self.xvar), hist)
            self.pdfs[compname] = pdf
            # self.pdfs[compname].Print()
            pdfs.add(pdf)
            nevts = comp.Integral(xmin=xmin, xmax=xmax)
            nmin = min(0, nevts * (1 - comp.uncertainty))
            nmax = nevts * (1 + comp.uncertainty)
            theyield = RooRealVar('n{}'.format(compname),
                                  'n{}'.format(compname), nevts, nmin, nmax)
            self.ryields[compname] = theyield
            self.yields[compname] = nevts
            yields.add(theyield)

        self.underlying_model = RooAddPdf('model', 'model', pdfs, yields)
Example #8
0
	def add_data(self, data_histogram):
		print "[MjFit.add_data] INFO : Adding data histogram"
		# Add a data histogram
		self.data_histogram_ = data_histogram.Clone()
		self.data_histogram_.SetDirectory(0)		
		self.data_roohistogram_ = RooDataHist('data_roohistogram','data_roohistogram',RooArgList(self.mjj_),self.data_histogram_)
		self.data_roohistogram_.Print()
Example #9
0
def makeHistPdf(hist, ws, x):
    theVars = RooArgList(x)
    v = RooArgSet(x)
    dataHist = RooDataHist(hist.GetName() + '_dh', 'dataHist', theVars, hist)
    hpdf = RooHistPdf(hist.GetName() + '_pdf', 'hist pdf', v, dataHist)
    getattr(ws, 'import')(hpdf)
    return hpdf
Example #10
0
 def generate_hist(self, hist, varname, n):
     _var = RooRealVar(varname, varname, hist.GetMean())
     _dh = RooDataHist("dh", "dh", RooArgList(_var), hist)
     _pdf = RooHistPdf("pdf", "pdf", RooArgSet(_var), _dh)
     _ds = _pdf.generateBinned(RooArgSet(_var), n)
     _h = _ds.createHistogram('hist', _var)
     #_h.Draw()
     #raw_input('press <enter> to continue...')
     return copy.deepcopy(_h)
 def Gausintialization(self):
     round_energy = round(float(self.energy),-1)
     if round_energy ==240 : round_energy = 250
             
     self.x = RooRealVar("signal_%s_%dGeV"%(self.crystal,round_energy),"signal_%s_%dGeV"%(self.crystal,round_energy),max(0.,self.peak_position*(1-self.xaxis_scale)),self.peak_position*(1+self.xaxis_scale))
     self.roohist = RooDataHist("roohist_fit_%s_%s"%(self.crystal,self.energy),"roohist_fit_%s_%s"%(self.crystal,self.energy),RooArgList(self.x),self.hist)
     self.m = RooRealVar("mean_%s_%s"%(self.crystal,self.energy),"mean_%s_%s"%(self.crystal,self.energy),self.peak_position,max(0.,self.peak_position*(1-self.xaxis_scale)),self.peak_position*(1+self.xaxis_scale))
     self.s = RooRealVar("sigma_%s_%s"%(self.crystal,self.energy),"sigma_%s_%s"%(self.crystal,self.energy),self.s_initial,0.001,1.)
     self.sig = RooGaussian("signal_%s_%s"%(self.crystal,self.energy),"signal_%s_%s"%(self.crystal,self.energy),self.x,self.m,self.s)        
Example #12
0
def DoRooFit(histo, title):
    can = makeCMSCanvas(str(random.random()),"Fit result ",900,700)
    
    #Varible
    if "ele" in title:
      x1 = RooRealVar("x1","m_{e^{+}e^{-}}",80,100)
    if "mu" in title:
      x1 = RooRealVar("x1","m_{#mu^{+}#mu^{-}}",80,100)

    #Define CB function
    m = RooRealVar("mean_{CB}","mean of gaussian",60,120)
    s = RooRealVar("#sigma_{CB}","width of gaussian",0,3)
    a = RooRealVar("#alpha_{CB}","mean of gaussian",0,100)
    n = RooRealVar("n_{CB}","width of gaussian",0,5)
    CB = RooCBShape("CB","CB PDF",x1, m, s, a, n)
    
    m.setConstant(kFALSE)
    s.setConstant(kFALSE)
    a.setConstant(kFALSE)
    n.setConstant(kFALSE)
    
    
    #Define Gaussian function
    mean1 = RooRealVar("mean_{G}","mean of gaussian",-60,60)
    sigma1 = RooRealVar("#sigma_{G}","width of gaussian",0,10)
    gauss1 = RooGaussian("gauss1","gaussian PDF",x1,mean1,sigma1)
    
    mean1.setConstant(kFALSE)
    sigma1.setConstant(kFALSE)
    
    #Starting values of the parameters
    mean1.setVal(1.0)
    sigma1.setVal(1.0)
    m.setVal(90.0)
    s.setVal(1.0)
    a.setVal(10.0)
    n.setVal(2.0)

    # Construct CB (x) gauss
    x1.setBins(10000, "cache")
    CBxG = RooFFTConvPdf("CBxG", "CB (X) gauss", x1, CB, gauss1)
    
    can.cd()
    d = RooDataHist("d","d",RooArgList(x1),RooFit.Import(histo))
    CBxG.fitTo(d, RooLinkedList())
   
    # Plot PDF and toy data overlaid
    xframe2 = x1.frame(RooFit.Name("xframe"),RooFit.Title("")) # RooPlot
    d.plotOn(xframe2, RooLinkedList() )
    CBxG.paramOn(xframe2, RooFit.Layout(0.65,0.99,0.9))
    xframe2.getAttText().SetTextSize(0.03)
    CBxG.plotOn(xframe2)
    xframe2.Draw()
    can.SaveAs("DataVsMC/FitResults/"+title+"_Roofit.pdf")
    can.SaveAs("DataVsMC/FitResults/"+title+"_Roofit.png")
    
    return;
Example #13
0
def get_num_sig_bkg(hist_DataTemplate, hist_SignalTemplate,
                    hist_BackgdTemplate, fit_range_min, fit_range_max):
    '''Given 3 input histograms (TH1F), and a fit range, this function finds
    the amount of signal and background that sum up to the data histogram.
    It does histogram fits.'''
    # Find range of data template
    data_min = hist_DataTemplate.GetXaxis().GetXmin()
    data_max = hist_DataTemplate.GetXaxis().GetXmax()

    # Create basic variables
    x = RooRealVar("x", "x", data_min, data_max)
    x.setBins(hist_DataTemplate.GetXaxis().GetNbins())  # Binned x values
    nsig = RooRealVar("nsig", "number of signal events", 0,
                      hist_DataTemplate.Integral())
    nbkg = RooRealVar("nbkg", "number of background events", 0,
                      hist_DataTemplate.Integral())

    # Create RooDataHists from input TH1Fs
    dh = RooDataHist("dh", "dh", RooArgList(x), hist_DataTemplate)
    ds = RooDataHist("ds", "ds", RooArgList(x), hist_SignalTemplate)
    db = RooDataHist("db", "db", RooArgList(x), hist_BackgdTemplate)

    # Create Probability Distribution Functions from Monte Carlo
    sigPDF = RooHistPdf("sigPDF", "sigPDF", RooArgSet(x), ds)
    bkgPDF = RooHistPdf("bkgPDF", "bkgPDF", RooArgSet(x), db)

    model = RooAddPdf("model", "(g1+g2)+a", RooArgList(bkgPDF, sigPDF),
                      RooArgList(nbkg, nsig))

    # Find the edges of the bins that contain the fit range min/max
    data_min = hist_DataTemplate.GetXaxis().GetBinLowEdge(
        hist_DataTemplate.GetXaxis().FindFixBin(fit_range_min))
    data_max = hist_DataTemplate.GetXaxis().GetBinUpEdge(
        hist_DataTemplate.GetXaxis().FindFixBin(fit_range_max))

    r = model.fitTo(dh, RooFit.Save(), RooFit.Minos(0),
                    RooFit.PrintEvalErrors(0), RooFit.Extended(),
                    RooFit.Range(data_min, data_max))
    r.Print("v")

    #print nsig.getVal(), nsig.getError(), nbkg.getVal(), nbkg.getError()
    return [nsig.getVal(), nsig.getError(), nbkg.getVal(), nbkg.getError()]
Example #14
0
def Fit(h, Lc_M):
    h_LcM = RooDataHist('h_LcM', 'h_LcM', RooArgList(Lc_M), h)

    #Create a workspace named 'w' with the model to fit the Lc_Mass peak
    nsig = RooRealVar("nsig", "N signal evts", 100000, 0, 5000000)
    nbkg = RooRealVar("nbkg", "N bkg evts", 400000, 0, 1E10)

    w = CreateMassFitModel(Lc_M, nsig, nbkg)
    model = w.pdf("model")
    model.fitTo(h_LcM, RF.Extended(True))
    return model, w, h_LcM
 def CB2intialization(self):
     round_energy = round(float(self.energy),-1)
     self.x = RooRealVar("signal_%s_%dGeV"%(self.crystal,round_energy),"signal_%s_%dGeV"%(self.crystal,round_energy),max(0.,self.peak_position*(1-self.xaxis_scale)),self.peak_position*(1+self.xaxis_scale))
     self.roohist = RooDataHist("roohist_fit_%s_%s"%(self.crystal,self.energy),"roohist_fit_%s_%s"%(self.crystal,self.energy),RooArgList(self.x),self.hist)
     self.m = RooRealVar("mean_%s_%s"%(self.crystal,self.energy),"mean_%s_%s"%(self.crystal,self.energy),self.peak_position,max(0.,self.peak_position*(1-self.xaxis_scale)),self.peak_position*(1+self.xaxis_scale))
     self.s = RooRealVar("sigma_%s_%s"%(self.crystal,self.energy),"sigma_%s_%s"%(self.crystal,self.energy),self.s_initial,10,500)
     self.a = RooRealVar("alpha_%s_%s"%(self.crystal,self.energy),"alpha_%s_%s"%(self.crystal,self.energy),self.a_initial,-10.,10)
     self.a2 = RooRealVar("alpha2_%s_%s"%(self.crystal,self.energy),"alpha2_%s_%s"%(self.crystal,self.energy),self.a2_initial,-10.,10)
     self.n = RooRealVar("exp_%s_%s"%(self.crystal,self.energy),"exp_%s_%s"%(self.crystal,self.energy),self.n_initial,0.,30)
     self.n2 = RooRealVar("exp2_%s_%s"%(self.crystal,self.energy),"exp2_%s_%s"%(self.crystal,self.energy),self.n2_initial,0.,30)
     self.sig = ROOT.My_double_CB("signal_%s_%s"%(self.crystal,self.energy),"signal_%s_%s"%(self.crystal,self.energy),self.x,self.m,self.s,self.a,self.n,self.a2,self.n2)        
 def CBintialization(self):
     round_energy = round(float(self.energy),-1)
     if round_energy ==240 : round_energy = 250
             
     self.x = RooRealVar("signal_%s_%dGeV"%(self.crystal,round_energy),"signal_%s_%dGeV"%(self.crystal,round_energy),max(0.,self.peak_position*(1-self.xaxis_scale)),self.peak_position*(1+self.xaxis_scale))
     self.roohist = RooDataHist("roohist_fit_%s_%s"%(self.crystal,self.energy),"roohist_fit_%s_%s"%(self.crystal,self.energy),RooArgList(self.x),self.hist)
     self.m = RooRealVar("mean_%s_%s"%(self.crystal,self.energy),"mean_%s_%s"%(self.crystal,self.energy),self.peak_position,max(0.,self.peak_position*(1-self.xaxis_scale)),self.peak_position*(1+self.xaxis_scale))
     self.s = RooRealVar("sigma_%s_%s"%(self.crystal,self.energy),"sigma_%s_%s"%(self.crystal,self.energy),self.s_initial,0.001,1.) #500.
     self.a = RooRealVar("alpha_%s_%s"%(self.crystal,self.energy),"alpha_%s_%s"%(self.crystal,self.energy),self.a_initial,-10.,10)
     self.n = RooRealVar("exp_%s_%s"%(self.crystal,self.energy),"exp_%s_%s"%(self.crystal,self.energy),self.n_initial,0.,30)
     self.sig = RooCBShape("signal_%s_%s"%(self.crystal,self.energy),"signal_%s_%s"%(self.crystal,self.energy),self.x,self.m,self.s,self.a,self.n)
Example #17
0
def compare_binning(filename):
    scans = ('X1', 'Y1', 'X2', 'Y2')

    with BareRootFile(filename) as f:
        oldres = [f.get('residualHist{0}'.format(scan)) for scan in scans]
        oldchi = [f.get_val('chisq{0}'.format(scan)) for scan in scans]
        olddof = [f.get_val('dof{0}'.format(scan)) for scan in scans]
        name = f.get_val('name')
    bcidpos = name.find('bcid')
    dataname = name[16:name.rfind('_', 0, bcidpos - 1)]
    fitname = name[name.rfind('_', 0, bcidpos - 1) + 1:bcidpos - 1]
    bcid = int(name[bcidpos + 4:])

    model = {
        'SG': SingleGauss,
        'DG': DoubleGaussFit,
        'TG': TripleGaussFit
    }[fitname]()
    model.load_root(filename)
    modfuncs = model.model_functions()

    with open('res/hist/{0}.json'.format(dataname)) as f:
        json = load(f)
    nbins = json['nbins']
    scaling = json['scaling']
    datafile = '{0}/{1}.root'.format(json['datapath'], json['name'])

    hists = []
    with BareRootFile(datafile) as f:
        for histname in [
                'hist_Beam2MoveX_bunch{0}Add', 'hist_Beam2MoveY_bunch{0}Add',
                'hist_Beam1MoveX_bunch{0}Add', 'hist_Beam1MoveY_bunch{0}Add'
        ]:
            hist = f.get(histname.format(bcid))
            hists.append(hist)
    datahist = [
        RooDataHist('scan{0}Beam{1}RestDataHist'.format(c, i),
                    'scan{0}Beam{1}RestDataHist'.format(c, i),
                    RooArgList(model.xvar(), model.yvar()), hists[j])
        for j, (i, c) in enumerate([('1', 'X'), ('1', 'Y'), ('2',
                                                             'X'), ('2', 'Y')])
    ]

    chisq, dof, hdata, hmodel = compute_chisq(model, modfuncs, datahist, nbins)
    scDat, scMod, scRes = residual_hist(hdata, hmodel, scaling)

    for i, scan in enumerate(scans):
        oldval = oldchi[i] / olddof[i]
        newval = chisq[i] / dof[i]
        print '{0}: {1:.4f} {2:.4f}'.format(scan, oldval, newval)

    return scRes, oldres
Example #18
0
	def add_signal(self, signal_name, signal_histogram):
		print "[MjjFit.add_signal] INFO : Adding signal histogram " + signal_name
		# Add a signal histogram. 
		# Scale to sigma=1 (in whatever units the data luminosity is given in), so the 'r' parameter corresponds to the limit on the cross section.
		if self.luminosity_ == 0:
			print "[MjjFit.add_signal] ERROR : Please set luminosity first (MjjFit.set_luminosity(###))."
			sys.exit(1)
		self.signal_names_.append(signal_name)
		self.signal_histograms_[signal_name] = signal_histogram.Clone()
		self.signal_histograms_[signal_name].SetDirectory(0)
		self.signal_histograms_[signal_name].Scale(1. * self.luminosity_ / self.signal_histograms_[signal_name].Integral())
		self.signal_roohistograms_[signal_name] = RooDataHist(signal_histogram.GetName() + "_rdh", signal_histogram.GetName() + "_rdh", RooArgList(self.mjj_), signal_histograms[signal_name])
		self.signal_roohistograms_[signal_name].Print()
Example #19
0
def saveLandauHistoAmplitude(histo,
                             outfile,
                             canvas,
                             XaxisTitle="",
                             YaxisTitle="",
                             plotTitle="",
                             stats=0):
    ex = "Null Fit"
    amplitude = RooRealVar("amplitude", "Cluster Amplitude", 0, 5000)
    landau_data = RooDataHist("landau_data", "landau_data",
                              RooArgList(amplitude), histo)

    ml = RooRealVar("ml", "mean landau", 1500., 1000, 2000)
    sl = RooRealVar("sl", "sigma landau", 250, 100, 1000)
    landau = RooLandau("lx", "lx", amplitude, ml, sl)

    mg = RooRealVar("mg", "mg", 0)
    sg = RooRealVar("sg", "sg", 100, 20, 500)
    gauss = RooGaussian("gauss", "gauss", amplitude, mg, sg)

    lxg = RooNumConvPdf("lxg", "lxg", amplitude, landau, gauss)

    result = lxg.fitTo(landau_data)

    frame = amplitude.frame()
    landau_data.plotOn(frame)

    lxg.plotOn(frame)

    frame.Draw("")
    frame.SetTitle(plotTitle)
    frame.GetXaxis().SetTitle(XaxisTitle)
    frame.GetYaxis().SetTitle(YaxisTitle)
    frame.SetStats(stats)
    frame.Write(plotTitle)

    canvas.Print(outfile + ".pdf")

    peak = []

    try:
        mean = RooRealVar(result.floatParsFinal().find("landau_mean"))
        err = RooRealVar(mean.errorVar())
        peak.append(mean.GetVal())
        peak.append(err.GetVal())
    except Exception as ex:
        print(ex)
        peak.append(0)
        peak.append(0)

    return peak
Example #20
0
    def loadData(self, weight = False):
        if self.ws.data('data_obs'):
            return self.ws.data('data_obs')

        unbinnedName = 'data_obs'
        if self.pars.binData:
            unbinnedName = 'data_unbinned'
        data = self.utils.File2Dataset(self.pars.DataFile, unbinnedName, 
                                       self.ws, weighted = weight)
        if self.pars.binData:
            data = RooDataHist('data_obs', 'data_obs', self.ws.set('obsSet'), 
                               data)
            getattr(self.ws, 'import')(data)
            data = self.ws.data('data_obs')

        return data
Example #21
0
def makePDFs(Files, pdf_list, evntCount):
    for (inputMass, inputFilename) in Files:
        histo = load_histos(inputFilename)
        evntCount.append(histo.Integral())
        # could construct name and title from inputmass
        if 'nom' in inputFilename:
            myString = inputFilename.partition("230_")[2].partition(
                "_result")[0] + str(inputMass)
        else:
            myString = inputFilename.partition("jes_")[2].partition(
                "_result")[0] + str(inputMass)
        # Convert the TH1F Histogram (data_hist) into a RooDataHist object
        data_hist = RooDataHist(myString, myString, RooArgList(x), histo)
        # Turn the RooDataHist object into a RooHistPdf object
        pdf = RooHistPdf(myString, myString, RooArgSet(x), data_hist)
        # both the data_hist and pdf must survive
        pdf_list.append([data_hist, pdf])
Example #22
0
def histoToRooHistFunc(ws, cfg, section, histo, name):
    nBins = len(cfg.get(section, 'obsBins').split(',')) - 1
    makeLastBinOverflow(histo, nBins)
    histo.SetName('%s_%s_input' % (section, name))
    getattr(ws, 'import')(histo)

    #make the histogram, using the binning defined by the histogram
    rdh = RooDataHist(
        '%s_%s_yields' % (section, name), '%s_%s_yields' % (section, name),
        RooArgList(ws.var('%s_%s' % (cfg.get(section, 'obsVar'), section))),
        RooFit.Import(ws.obj('%s_%s_input' % (section, name)), False))
    getattr(ws, 'import')(rdh)

    #make the hist func so we can get at the yield
    ws.factory("""
    RooHistFunc::%s_%s_model
    ({%s_%s},%s_%s_yields)
    """ % (section, name, cfg.get(section, 'obsVar'), section, section, name))
    def Hist2Pdf(self, hist, pdfName, ws, order=0):
        if ws.pdf(pdfName):
            return ws.pdf(pdfName)

        try:
            obs = [self.pars.varNames[x] for x in self.pars.var]
        except AttributeError:
            obs = self.pars.var

        varList = RooArgList()
        for v in obs:
            varList.add(ws.var(v))
        newHist = RooDataHist(pdfName + '_hist', pdfName + '_hist', varList,
                              hist)

        thePdf = RooHistPdf(pdfName, pdfName, RooArgSet(varList), newHist,
                            order)
        getattr(ws, 'import')(thePdf)

        return ws.pdf(pdfName)
Example #24
0
    def loadDataFromWorkspace(self, other, cut = None):
        #pull unbinned data from other workspace
        unbinnedData = other.data('data_unbinned')
        if not unbinnedData:
            unbinnedData = other.data('data_obs')

        if cut:
            unbinnedData = unbinnedData.reduce(cut)

        unbinnedData.Print()
        if self.pars.binData:
            #bin and import data
            unbinnedData.SetName('data_unbinned')
            getattr(self.ws, 'import')(unbinnedData)
            data = RooDataHist('data_obs', 'data_obs', other.set('obsSet'), 
                               unbinnedData)
            getattr(self.ws, 'import')(data)
        else:
            #just import data
            unbinnedData.SetName('data_obs')
            getattr(self.ws, 'import')(unbinnedData)
Example #25
0
    def __init__( self, fit_data ):
        MapStrRootPtr = stl.map( stl.string, "TH1*" )
        StrHist = stl.pair( stl.string, "TH1*" )
        self.fit_data = fit_data
        self.models = {}
        self.sample = RooCategory( 'sample', 'sample' )
        self.roofit_variables = []
        input_hists = MapStrRootPtr()

        # first create observables
        # Since we are looking for normalisation in equivalent regions
        # the number of events in each sample has to be identical
        # Hence, pick one fit_data to create the set of observables
        fit_data_1 = fit_data.itervalues().next()
        samples = fit_data_1.samples
        self.observables = {}
        N_min = 0
        N_max = fit_data_1.n_data() * 2
        for sample in samples:
            self.observables[sample] = Observable( 'n_' + sample,
                                                  'number of ' + sample + " events",
                                                  fit_data_1.normalisation[sample],
                                                  N_min,
                                                  N_max,
                                                  "events" )

        # next create the models
        for variable, fit_input in fit_data.iteritems():
            self.models[variable] = fit_input.get_roofit_model( variable, self.observables )
            self.sample.defineType( variable )
            self.sample.setLabel ( variable )
            data = deepcopy( fit_input.real_data_histogram() )
            input_hists.insert( StrHist( variable, data ) )
            self.roofit_variables.append( fit_input.fit_variable )
        self.comb_data = RooDataHist( "combData",
                                    "combined data",
                                    RooArgList( self.roofit_variables[0] ),
                                    self.sample,
                                    input_hists,
                                    )
Example #26
0
def generate(histList, varName, varLow, varHigh, histSig="", weightSig=0.):
    """
    Generate toy data

    @param histList List of histograms
    @param varname Variable name to use
    @param varLow Lower edge of left bin
    @param varHigh Upper edge of right bin
    @param histSig Optional signal histogram
    @param weightSig Optional signal weight
    """

    testHist_pred = TH1D()
    for (iHist, hist) in enumerate(histList):
        if not iHist:
            testHist_pred = hist.Clone("hPRED")
        else:
            testHist_pred.Add(hist)

    testHist_pred_ds = TH1D(
        "hPSDATA", "hPSDATA", testHist_pred.GetNbinsX(),
        testHist_pred.GetXaxis().GetBinLowEdge(1),
        testHist_pred.GetXaxis().GetBinUpEdge(testHist_pred.GetNbinsX()))

    nEvents_pred = int(testHist_pred.Integral())
    print "nEvents_pred = %d" % nEvents_pred

    var = RooRealVar(varName, varName, varLow, varHigh)

    dh_pred = RooDataHist("dhPSDATA", "dhPSDATA", RooArgList(var),
                          RooFit.Import(testHist_pred))

    ph_pred = RooHistPdf("phPSDATA", "phPSDATA", RooArgSet(var), dh_pred)

    ds_pred = ph_pred.generate(RooArgSet(var), nEvents_pred)

    testHist_pred_ds = ds_pred.fillHistogram(testHist_pred_ds, RooArgList(var))

    return testHist_pred_ds
Example #27
0
    def _make_underlying_model(self):
        self.pdfs = {}
        self.yields = {}  # yields are plain floats
        self.ryields = {}  # keep track of roofit objects for memory management
        h = self._histos[0]
        nbins = h.GetXaxis().GetNbins()
        xmin = h.GetXaxis().GetXmin()
        xmax = h.GetXaxis().GetXmax()
        self.xvar = RooRealVar("x", "x", xmin, xmax)
        self.xvar.setBins(nbins)
        self.pdfs = {}
        self.hists = []
        pdfs = RooArgList()
        yields = RooArgList()
        for histo in self._histos:
            if histo.Integral() == 0:
                continue
            compname = histo.GetName()
            hist = RooDataHist(compname, compname, RooArgList(self.xvar),
                               histo)
            SetOwnership(hist, False)
            # self.hists.append(hist)
            pdf = RooHistPdf(compname, compname, RooArgSet(self.xvar), hist)
            self.pdfs[compname] = pdf
            # self.pdfs[compname].Print()
            pdfs.add(pdf)
            nevts = histo.Integral()
            uncertainty = self._uncertainty
            nmin = min(0, nevts * (1 - uncertainty))
            nmax = nevts * (1 + uncertainty)
            theyield = RooRealVar('n{}'.format(compname),
                                  'n{}'.format(compname), nevts, nmin, nmax)
            self.ryields[compname] = theyield
            self.yields[compname] = nevts
            yields.add(theyield)

        self.underlying_model = RooAddPdf('model', 'model', pdfs, yields)
Example #28
0
def MakeRooDataHist(phys_process, fullrange_=False):
    MPruned_Merged.Scale(0.0)
    iweight = 0
    for irootfile in Utils.samples[phys_process]['files']:

        file01 = TFile('AnalysisHistograms_V7/' + irootfile, 'READ')
        #file01 = TFile(irootfile, 'READ')

        MPruned_ttbar_sb = file01.Get('histfacFatJet_ZLight/h_Mjj0')
        MPruned_ttbar_sig = file01.Get(
            'MonoHFatJetSelection_JetAndLeptonVeto/h_Mjj0')

        if debug_:
            print "before ", MPruned_ttbar_sb.Integral()
            print "before ", MPruned_ttbar_sig.Integral()

        if phys_process != 'data_obs':
            MPruned_ttbar_sb.Scale(
                Utils.samples[phys_process]['weight'][iweight])
            MPruned_ttbar_sig.Scale(
                Utils.samples[phys_process]['weight'][iweight])

        if debug_:
            print "weight = ", Utils.samples[phys_process]['weight'][iweight]
            print "after ", MPruned_ttbar_sb.Integral()
            print "after ", MPruned_ttbar_sig.Integral()

        MPruned_Merged.Add(MPruned_ttbar_sb)
        if fullrange_ | options.fullrange:
            MPruned_Merged.Add(MPruned_ttbar_sig)
        ## convert Histogram to RooDataHist
        MPruned_ttbar_hist = RooDataHist('MPruned_ttbar_hist',
                                         'MPruned_ttbar_hist',
                                         RooArgList(J_Mass), MPruned_Merged)
        iweight = iweight + 1
    print "final intgral = ", MPruned_Merged.Integral()
    return MPruned_ttbar_hist
Example #29
0
def broadenspec(ms, E_0):
    spec = decayspec(ms, E_0)
    smear = core(E_0_center)
    newspec = TH1D("", "", spec.GetNbinsX(), -17.5, 17.5)
    for i in range(1, spec.GetNbinsX() + 1):
        newspec.SetBinContent(i, spec.GetBinContent(i))

    #x = RooRealVar("x","x",-30+E_0_center, 5+E_0_center)
    x = RooRealVar("x", "x", -17.5, 17.5)
    data = RooDataHist("", "", RooArgList(x), newspec)
    specpdf = RooHistPdf("", "", RooArgSet(x), data)
    #y = RooRealVar("y","y",-30, 5)
    x.setBins(10000)
    smearpdf = RooFit.bindPdf(smear, x)
    fft = RooFFTConvPdf("tt", "tt", x, specpdf, smearpdf)
    #fft.setShift(0, -18574)
    #c1 = TCanvas()
    #frame = x.frame()
    #fft.plotOn(frame)
    #frame.Draw()
    tf = fft.asTF(RooArgList(x))
    tf.SetNpx(10000)
    rtf = tf.Clone()
    return rtf
Example #30
0
def generate(histList,varName,varLow,varHigh,histSig="",weightSig=0.):
    testHist_pred = TH1D()
    for (iHist,hist) in enumerate(histList):
        if not iHist:
            testHist_pred = hist.Clone("hPRED")
        else:
            testHist_pred.Add(hist)

    testHist_pred_ds = TH1D("hPSDATA","hPSDATA",testHist_pred.GetNbinsX(),testHist_pred.GetXaxis().GetBinLowEdge(1),testHist_pred.GetXaxis().GetBinUpEdge(testHist_pred.GetNbinsX()))

    nEvents_pred = int(testHist_pred.Integral())
    print "nEvents_pred = %d" % nEvents_pred

    var = RooRealVar(varName,varName,varLow,varHigh)

    dh_pred = RooDataHist("dhPSDATA","dhPSDATA",RooArgList(var),RooFit.Import(testHist_pred))

    ph_pred = RooHistPdf("phPSDATA","phPSDATA",RooArgSet(var),dh_pred)

    ds_pred = ph_pred.generate(RooArgSet(var),nEvents_pred)

    testHist_pred_ds = ds_pred.fillHistogram(testHist_pred_ds,RooArgList(var))

    return testHist_pred_ds