def mergeFunc(self,products) : self.setupDicts() for eLumis in products["staticEpochLumis"] : for epoch in eLumis : for run in eLumis[epoch] : self.epochLumis[epoch][run] |= eLumis[epoch][run] if not self.epochLumis : return lumiDir = self.outputFileName if not os.path.exists(lumiDir) : utils.mkdir(lumiDir) lumis = luminosity.recordedInvMicrobarnsShotgun( [utils.jsonFromRunDict(self.epochLumis[epoch]) for epoch in self.epochLumis ] , cores = 4, cacheDir = lumiDir) probs = [ [1./prescale if prescale else 0 for prescale in epoch] for epoch in self.epochLumis ] inclu = [ [utils.unionProbability(prob[:i+1]) for i in range(len(prob))] for prob in probs ] thresholds = sorted(set(self.thresholds)) inclusives = [ [max([0]+[p for p,t in zip(inc,self.thresholds) if t is thresh]) for thresh in thresholds] for inc in inclu ] weights = np.array(lumis).dot(inclusives) / sum(lumis) # write total lumi and weight by threshold lumiHist = r.TH1D('susyTreeLumi','luminosity from susyTree;;1/pb',1,0,1) lumiHist.SetBinContent(1,sum(lumis)) lumiHist.Write() weightHist = r.TH1D(self.name,";%s;%s"%(self.var,self.name), len(thresholds), np.array([0.]+thresholds+[max(thresholds)+10])) for i,w in enumerate(weights) : weightHist.SetBinContent(i+2, w) weightHist.SetBinContent(len(thresholds)+3, 1) weightHist.Write()
def pickleEnsemble(self, iStep, dist, qqFrac ) : utils.mkdir(self.globalStem+'/ensembles') templates,observed = self.templates(iStep, dist, qqFrac) ensemble = templateFit.templateEnsembles(2e3, *zip(*templates) ) utils.writePickle(self.ensembleFileName(iStep,dist,qqFrac), ensemble) name = self.ensembleFileName(iStep,dist,qqFrac,'') canvas = r.TCanvas() canvas.Print(name+'.ps[') stuff = templateFit.drawTemplateEnsembles(ensemble, canvas) canvas.Print(name+".ps") import random for i in range(20) : par, templ = random.choice(zip(ensemble.pars,ensemble.templates)[2:-2]) pseudo = [np.random.poisson(mu) for mu in templ] tf = templateFit.templateFitter(pseudo,ensemble.pars,ensemble.templates, 1e3) stuff = templateFit.drawTemplateFitter(tf,canvas, trueVal = par) canvas.Print(name+".ps") for item in sum([i if type(i) is list else [i] for i in stuff[1:]],[]) : utils.delete(item) canvas.Print(name+'.ps]') os.system('ps2pdf %s.ps %s.pdf'%(name,name)) os.system('rm %s.ps'%name)