def dofit(self): mi = ModalInterval(self.data) mi.setSigmaLevel(1) self.mode.setVal(mi.halfSampleMode()) self.effsigma.setVal(0.5 * mi.length()) self.bootdata.add(self.bootset) resampler = Resampler(self.data) for iboot in range(self.nboot): mi = ModalInterval(resampler.bootstrap()) mi.setSigmaLevel(1) self.mode.setVal(mi.halfSampleMode()) self.effsigma.setVal(0.5 * mi.length()) self.bootdata.add(self.bootset) self.mode.setVal(self.bootdata.mean(self.mode)) self.effsigma.setVal(self.bootdata.mean(self.effsigma)) self.mode.setError(self.bootdata.rmsVar(self.mode).getVal()) self.effsigma.setError(self.bootdata.rmsVar(self.effsigma).getVal())
def dofit(self): mi = ModalInterval(self.data) mi.setSigmaLevel(1) self.mode.setVal(mi.halfSampleMode()) self.effsigma.setVal(0.5 * mi.length()) self.bootdata.add(self.bootset) resampler = Resampler(self.data) for iboot in range(self.nboot): mi = ModalInterval(resampler.bootstrap()) mi.setSigmaLevel(1) self.mode.setVal(mi.halfSampleMode()) self.effsigma.setVal(0.5 * mi.length()) self.bootdata.add(self.bootset) self.mode.setVal(self.bootdata.mean(self.mode)) self.effsigma.setVal(self.bootdata.mean(self.effsigma)) self.mode.setError(self.bootdata.rmsVar(self.mode).getVal()) self.effsigma.setError(self.bootdata.rmsVar(self.effsigma).getVal())
def test(): ''' Tests the RooRhoKeysPdf class. ''' import FWLite.Tools.canvases as canvases import FWLite.Tools.cmsstyle as cmsstyle ROOT.RooRandom.randomGenerator().SetSeed(2) global gnlls, hrhoval, hrhoerr hrhoval = ROOT.TH1F('hrhoval', 'hrhoval', 100, 0, 5) hrhoerr = ROOT.TH1F('hrhoerr', 'hrhoerr', 100, 0, 1) gnlls = [] for itoy in range(1): global w w = ROOT.RooWorkspace('w', 'w') # model = w.factory('Gaussian::model(x[-50, 50], mean[0], sigma[1])') model = w.factory('BreitWigner::model(x[-5, 5], mean[0], sigma[1])') x = w.var('x') oset = ROOT.RooArgSet(x) data = model.generate(oset, 1000) w.Import(data) # rho = w.factory('rho[1, 0, 100]') # testpdf = RooRhoKeysPdf('testpdf', 'testpdf', x, rho, data) # w.Import(testpdf) testpdf = w.factory('RooRhoKeysPdf::testpdf(x, rho[1, 0, 100], modelData)') rho = w.var('rho') plot = x.frame() data.plotOn(plot) model.plotOn(plot) testpdf.plotOn(plot, roo.LineColor(ROOT.kRed)) rho.setVal(2) testpdf.LoadDataSet(data) testpdf.plotOn(plot, roo.LineColor(ROOT.kGreen)) rho.setVal(3) testpdf.LoadDataSet(data) testpdf.plotOn(plot, roo.LineColor(ROOT.kBlack)) canvases.next('RooRhoKeysPdf_Test%d' % itoy) plot.Draw() canvases.update() resampler = Resampler(data) data0 = resampler.prescale(2, [0], 'data0') data1 = resampler.prescale(2, [1], 'data1') w.Import(data0) w.Import(data1) testpdf0 = w.factory('RooRhoKeysPdf::testpdf0(x, rho, data0)') testpdf1 = w.factory('RooRhoKeysPdf::testpdf1(x, rho, data1)') gnll = ROOT.TGraph() for rhoval in [0.5 + 0.05 * i for i in range(50)]: rho.setVal(rhoval) testpdf0.LoadDataSet(data0) testpdf1.LoadDataSet(data1) nll = 0 nll += testpdf0.createNLL(data1).getVal() nll += testpdf1.createNLL(data0).getVal() # print rhoval, nll gnll.SetPoint(gnll.GetN(), rhoval, nll) locmin = ROOT.TMath.LocMin(gnll.GetN(), gnll.GetY()) xmin = gnll.GetX()[max(locmin-5, 0)] xmax = gnll.GetX()[min(locmin+5, gnll.GetN()-1)] fres = gnll.Fit('pol2', 's', '', xmin, xmax) p1 = fres.Get().GetParams()[1] p2 = fres.Get().GetParams()[2] rhoval = - 0.5 * p1 / p2 rhoerr = 1/ROOT.TMath.Sqrt(2 * p2) hrhoval.Fill(rhoval) hrhoerr.Fill(rhoerr) canvases.next('gnll%d' % itoy) gnll.Draw('ap') gnll.GetXaxis().SetTitle('#rho') gnll.GetYaxis().SetTitle('- log L') gnlls.append(gnll) canvases.next('rhoerr') hrhoerr.Draw() canvases.next('rhoval') hrhoval.Draw() canvases.update() from FWLite.Tools.modalinterval import ModalInterval global mi mi = ModalInterval(w.data('data0')) print mi.halfSampleMode()