def addFile(self, filename) :
     sample = guessSampleFromFilename(filename)
     mc1, mn1 = self.parDb.mc1Mn1ByReqid(self.reqDb.reqidBySample(sample))
     fakeReqid = self.reqidProvider.reqidByMc1Mn1(mc1, mn1)
     self.filenamesByReqid[fakeReqid].append(filename)
     self.masspointByReqid[fakeReqid].append((mc1, mn1))
def main():
    parser = optparse.OptionParser(usage=usage)
    parser.add_option('-i', '--input-dir', default='./out/fakerate')
    parser.add_option('-o', '--output-dir', default='./out/tight_variables_plots', help='dir for plots')
    parser.add_option('-l', '--lepton', default='el', help='either el or mu')
    parser.add_option('-r', '--region', help='one of the regions for which we saved the fake ntuples')
    parser.add_option('-t', '--tag', help='tag used to select the input files (e.g. Apr_04)')
    parser.add_option('-f', '--fill-histos', action='store_true', default=False, help='force fill (default only if needed)')
    parser.add_option('-v', '--verbose', action='store_true', default=False)
    (options, args) = parser.parse_args()
    inputDir  = options.input_dir
    outputDir = options.output_dir
    lepton    = options.lepton
    region    = options.region
    tag       = options.tag
    verbose   = options.verbose
    if not tag : parser.error('tag is a required option')
    if lepton not in ['el', 'mu'] : parser.error("invalid lepton '%s'"%lepton)
    filestems, treenames = utils.verticalSlice(fakeu.tupleStemsAndNames)
    regions = filestems
    assert region in regions,"invalid region '%s', must be one of %s"%(region, str(regions))
    templateInputFilename = "*_%(region)s_tuple_%(tag)s.root" % {'tag':tag, 'region':region}
    templateOutputFilename =  "%(region)s_%(l)s_tight_plots.root" % {'region':region, 'l':lepton}
    treeName = treenames[regions.index(region)]
    outputDir = outputDir+'/'+region+'/'+lepton # split the output in subdirectories, so we don't overwrite things
    mkdirIfNeeded(outputDir)
    outputFileName = os.path.join(outputDir, templateOutputFilename)
    cacheFileName = outputFileName.replace('.root', '_'+region+'_cache.root')
    doFillHistograms = options.fill_histos or not os.path.exists(cacheFileName)
    optionsToPrint = ['inputDir', 'outputDir', 'region', 'tag', 'doFillHistograms']
    if verbose :
        print "working from %s"%os.getcwd()
        print "being called as : %s"%' '.join(os.sys.argv)
        print "options:\n"+'\n'.join(["%s : %s"%(o, eval(o)) for o in optionsToPrint])
    # collect inputs
    if verbose : print 'input files ',os.path.join(inputDir, templateInputFilename)
    tupleFilenames = glob.glob(os.path.join(inputDir, templateInputFilename))
    samples = setSameGroupForAllData(fastSamplesFromFilenames(tupleFilenames, verbose))
    if not samples : samples = [guessSampleFromFilename(f) for f in tupleFilenames] # if the fast guess didn't work, try the slow one
    samplesPerGroup = collections.defaultdict(list)
    filenamesPerGroup = collections.defaultdict(list)
    for s, f in zip(samples, tupleFilenames) :
        samplesPerGroup[s.group].append(s)
        filenamesPerGroup[s.group].append(f)
    vars = ['pt','eta','d0sig','z0SinTheta','etCone','ptCone','etConeCorr','ptConeCorr']
    vars += ['relEtConeStd', 'relPtConeStd', 'relEtConeMod', 'relPtConeMod']
    groups = samplesPerGroup.keys()
    sources = leptonSources
    #fill histos
    if doFillHistograms :
        lepLabel = "(probe %s)"%lepton
        histosPerGroup = bookHistosPerGroup(vars, groups, lepLabel=lepLabel)
        histosPerSource = bookHistosPerSource(vars, sources, lepLabel=lepLabel)
        for group in groups:
            isData = isDataSample(group)
            filenames = filenamesPerGroup[group]
            histosThisGroup = histosPerGroup[group]
            chain = r.TChain(treeName)
            [chain.Add(fn) for fn in filenames]
            print "%s : %d entries"%(group, chain.GetEntries())
            fillHistos(chain, histosThisGroup, histosPerSource, isData, lepton, group, verbose)
        writeHistos(cacheFileName, {'perGroup':histosPerGroup, 'perSource':histosPerSource}, verbose)
    # compute scale factors
    histosPerGroup = fetchHistos(cacheFileName, histoNames(vars, groups), verbose)
    histosPerSource = fetchHistos(cacheFileName, histoNames(vars, sources), verbose)
    plotStackedHistos(histosPerGroup,  outputDir+'/by_group',  region, colors=SampleUtils.colors, verbose=verbose)
    plotStackedHistos(histosPerSource, outputDir+'/by_source', region, colors=fakeu.colorsFillSources(), verbose=verbose)
    plotIsoComparison(histosPerSource, outputDir+'/',          region, lepton, verbose)
    channel, str(validChannels))
inputFileNames = glob.glob(inputDir + '/' + '*' + prodTag +
                           '*.root') + glob.glob(signalFname)
inputFiles = [r.TFile.Open(f) for f in inputFileNames]
assert len(inputFileNames) == len(
    inputFiles), "Cannot open some of the input files"

refHistoType = HistoType(pr='',
                         ch=channel,
                         var=referenceHisto,
                         syst=referenceSyst)
histosByType = collections.defaultdict(list)
classifier = HistoNameClassifier()

for fname, infile in zip(inputFileNames, inputFiles):
    samplename = guessSampleFromFilename(fname)
    histoNames = [
        n for n in getAllHistoNames(infile, onlyTH1=True)
        if refHistoType.matchAllAvailabeAttrs(classifier.histoType(n))
    ]
    histos = [infile.Get(hn) for hn in histoNames]
    for h in histos:
        setHistoType(h, classifier.histoType(h.GetName()))
        setHistoSample(h, samplename)
    histos = [h for h in histos if h.type.pr in plotRegions]
    organizeHistosByType(histosByType, histos)
refHistos = histosByType  # already filtered histonames, all histosByType are refHistos


def isSignal(sampleName):
    return 'WH_' in sampleName
referenceHisto  = options.histo
plotRegions     = options.regions.split(',')
referenceSyst   = options.syst
verbose         = options.verbose
assert channel in validChannels,"Invalid channel %s (should be one of %s)" % (channel, str(validChannels))
inputFileNames = glob.glob(inputDir+'/'+'*'+prodTag+'*.root') + glob.glob(signalFname)
inputFiles = [r.TFile.Open(f) for f in inputFileNames]
assert len(inputFileNames)==len(inputFiles),"Cannot open some of the input files"


refHistoType = HistoType(pr='', ch=channel, var=referenceHisto, syst=referenceSyst)
histosByType = collections.defaultdict(list)
classifier = HistoNameClassifier()

for fname, infile in zip(inputFileNames, inputFiles) :
    samplename = guessSampleFromFilename(fname)
    histoNames = [n for n in getAllHistoNames(infile, onlyTH1=True)
                  if refHistoType.matchAllAvailabeAttrs( classifier.histoType( n ) )]
    histos = [infile.Get(hn) for hn in histoNames]
    for h in histos :
        setHistoType(h, classifier.histoType(h.GetName()))
        setHistoSample(h, samplename)
    histos = [h for h in histos if h.type.pr in plotRegions]
    organizeHistosByType(histosByType, histos)
refHistos = histosByType # already filtered histonames, all histosByType are refHistos

def isSignal(sampleName) : return 'WH_' in sampleName
allSamples = list(set([h.sample for histos in refHistos.values() for h in histos]))
allBkgNames  = [s for s in allSamples if not isSignal(s)]
sigName = next(s for s in allSamples if isSignal(s))
if verbose : print '\n'.join("%s : %s" % (s,l) for s,l in zip(['bkg','sig'], [str(allBkgNames), sigName]))
Exemplo n.º 5
0
 def addFile(self, filename):
     sample = guessSampleFromFilename(filename)
     mc1, mn1 = self.parDb.mc1Mn1ByReqid(self.reqDb.reqidBySample(sample))
     fakeReqid = self.reqidProvider.reqidByMc1Mn1(mc1, mn1)
     self.filenamesByReqid[fakeReqid].append(filename)
     self.masspointByReqid[fakeReqid].append((mc1, mn1))