示例#1
0
    def doEff(self, type, file, dir, outdir=''):
        file = TFile(file)
        fGet = file.Get
#        for i in self.inputdirs:
        after = fGet(dir + self.after + '/' + self.hists['weighted']).Clone('nVSdiscTight')
        unwafter = fGet(dir + self.after + '/' + self.hists['simple']).Clone('nVSdiscTightSimple')
        before = fGet(dir + self.before + '/' + self.hists['weighted']).Clone('nVSdiscLoose')
        unwbefore = fGet(dir + self.before + '/' + self.hists['simple']).Clone('nVSdiscLooseSimple')
        if after == None or before == None or unwbefore == None:
            print 'Histogram not found'
        else:
            self.setMCTruth(type, dir, before, after)
            self.output.cd(type + '/' + outdir + '/' + dir)
            result = self.getEffHist(before, after, unwbefore)
            #caluclate MC Efficiency without binning
            mceff = after.Integral() / before.Integral()
            mcerr = self.getStatError(mceff, unwbefore.Integral())#sqrt((mceff * (1 - mceff)) / unwbefore.Integral())
                
#                print 'MC Eff for', i, ':[', mceff, ',', mcerr, ']' 
            self.setEff(type, dir, - 1, mceff, mcerr)
#                for effs in result[1]:          
#                    print 'Eff for %s disc < %1.2f : %1.3f +- %1.3f' % (i, effs[0], effs[1], effs[2])
#                    self.setEff(type, i,  effs[0], effs[1], effs[2])
            leg = Drawer.makePlainLegend(25 , 95, 70, 25)
            title1 = 'overall eff. %1.4f \pm %1.4f' % (mceff, mcerr)   
            leg.SetHeader(title1)
            leg = Drawer.setLegendStyle(leg)
            eff = result[0]
            eff.SetTitle(title1)
            eff.Write()
            after.Scale(self.scale[type])
            before.Scale(self.scale[type])
            after.Write()
            unwafter.Write()
            before.Write()
            unwbefore.Write()
            self.output.Cd('/')