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]))
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))