def __init__(self, outputDir, inputFiles, cut=None, branchsel=None, modules=[], compression="LZMA:9", friend=False, postfix=None, jsonInput=None, noOut=False, justcount=False, provenance=False, haddFileName=None, fwkJobReport=False, histFileName=None, histDirName=None, outputbranchsel=None, maxEntries=None, firstEntry=0, prefetch=False, longTermCache=False, outtreeName="Friends"): self.outputDir = outputDir self.inputFiles = inputFiles self.cut = cut self.modules = modules self.compression = compression self.postfix = postfix self.json = jsonInput self.noOut = noOut self.friend = friend self.justcount = justcount self.provenance = provenance self.jobReport = JobReport() if fwkJobReport else None self.haddFileName = haddFileName self.histFile = None self.histDirName = None if self.jobReport and not self.haddFileName: print("Because you requested a FJR we assume you want the final " \ "hadd. No name specified for the output file, will use tree.root") self.haddFileName = "tree.root" self.branchsel = BranchSelection(branchsel) if branchsel else None if outputbranchsel is not None: self.outputbranchsel = BranchSelection(outputbranchsel) elif outputbranchsel is None and branchsel is not None: # Use the same branches in the output as in input self.outputbranchsel = BranchSelection(branchsel) else: self.outputbranchsel = None self.histFileName = histFileName self.histDirName = histDirName # 2^63 - 1, largest int64 self.maxEntries = maxEntries if maxEntries else 9223372036854775807 self.firstEntry = firstEntry self.prefetch = prefetch # prefetch files to TMPDIR using xrdcp # keep cached files across runs (it's then up to you to clean up the temp) self.longTermCache = longTermCache self.outtreeName = outtreeName
def __init__(self, outputDir, inputFiles, cut=None, branchsel=None, modules=[], compression="LZMA:9", friend=False, postfix=None, jsonInput=None, noOut=False, justcount=False, provenance=False, haddFileName=None, fwkJobReport=False, histFileName=None, histDirName=None, outputbranchsel=None, SMSMasses=None, doISR=None): self.outputDir = outputDir self.inputFiles = inputFiles self.cut = cut self.modules = modules self.compression = compression self.postfix = postfix self.json = jsonInput self.noOut = noOut self.friend = friend self.justcount = justcount self.provenance = provenance self.jobReport = JobReport() if fwkJobReport else None self.haddFileName = haddFileName self.histFile = None self.histDirName = None self.hcount = ROOT.TH1F("Count", "Count", 1, 0, 1) self.hsumofweights = ROOT.TH1F("SumWeights", "SumWeights", 1, 0, 1) self.SMSMasses = SMSMasses self.doISR = doISR if SMSMasses != None: self.hsmscount = ROOT.TH2F("SMSCount", "SMSCount", 2000, -0.5, 1999.5, 2000, -0.5, 1999.5) if doISR != None: self.isrconstant = 1. if self.jobReport and not self.haddFileName: print "Because you requested a FJR we assume you want the final hadd. No name specified for the output file, will use tree.root" self.haddFileName = "tree.root" self.branchsel = BranchSelection(branchsel) if branchsel else None self.outputbranchsel = BranchSelection( outputbranchsel) if outputbranchsel else None self.histFileName = histFileName self.histDirName = histDirName
def __init__(self, outputDir, inputFiles, cut=None, branchsel=None, modules=[], compression="LZMA:9", friend=False, postfix=None, jsonInput=None, noOut=False, justcount=False, provenance=False, haddFileName=None, fwkJobReport=False, histFileName=None, histDirName=None, outputbranchsel=None, outputbranchselsmear=None, typeofprocess=None, maxEvents=-1): self.outputDir = outputDir self.inputFiles = inputFiles self.cut = cut self.modules = modules self.compression = compression self.postfix = postfix self.json = jsonInput self.noOut = noOut self.friend = friend self.justcount = justcount self.provenance = provenance self.jobReport = JobReport() if fwkJobReport else None self.haddFileName = haddFileName self.histFile = None self.histDirName = None if self.jobReport and not self.haddFileName: print "Because you requested a FJR we assume you want the final hadd. No name specified for the output file, will use tree.root" self.haddFileName = "tree.root" self.branchsel = BranchSelection(branchsel) if branchsel else None self.outputbranchsel = BranchSelection( outputbranchsel) if outputbranchsel else None self.outputbranchselsmear = BranchSelection( outputbranchselsmear) if outputbranchselsmear else None self.typeofprocess = typeofprocess self.histFileName = histFileName self.histDirName = histDirName self.maxEvents = maxEvents
def __init__(self, outputDir, inputFiles, cut=None, branchsel=None, modules=[], compression="LZMA:9", friend=False, postfix=None, jsonInput=None, noOut=False, justcount=False, provenance=False, haddFileName=None, fwkJobReport=False, histFileName=None, histDirName=None, outputbranchsel=None, maxEntries=None, firstEntry=0, prefetch=False, longTermCache=False, perJet=False): self.outputDir = outputDir self.inputFiles = inputFiles self.cut = cut self.modules = modules self.compression = compression self.postfix = postfix self.json = jsonInput self.noOut = noOut self.friend = friend self.justcount = justcount self.provenance = provenance self.branchsel = BranchSelection(branchsel) if branchsel else None self.outputbranchsel = BranchSelection( outputbranchsel) if outputbranchsel else None self.histFileName = histFileName self.histDirName = histDirName self.maxEntries = maxEntries if maxEntries else 9223372036854775807 self.firstEntry = firstEntry self.perJet = perJet
def __init__(self,outputDir,inputFiles,cut=None,branchsel=None,modules=[],compression="LZMA:9",friend=False,postfix=None, jsonInput=None,noOut=False,justcount=False,provenance=False,haddFileName=None,fwkJobReport=False,histFileName=None,histDirName=None, outputbranchsel=None,maxEntries=None,firstEntry=0, prefetch=False,longTermCache=False, reportEvery=10000, postProcOut = sys.stdout, postProcErr = sys.stdout, eventLoopOut = sys.stdout): self.outputDir=outputDir self.inputFiles=inputFiles self.cut=cut self.modules=modules self.compression=compression self.postfix=postfix self.json=jsonInput self.noOut=noOut self.friend=friend self.justcount=justcount self.provenance=provenance self.jobReport = JobReport() if fwkJobReport else None self.haddFileName=haddFileName self.histFile = None self.histDirName = None if self.jobReport and not self.haddFileName : print "Because you requested a FJR we assume you want the final hadd. No name specified for the output file, will use tree.root" self.haddFileName="tree.root" self.branchsel = BranchSelection(branchsel) if branchsel else None self.outputbranchsel = BranchSelection(outputbranchsel) if outputbranchsel else None self.histFileName=histFileName self.histDirName=histDirName self.maxEntries = maxEntries if maxEntries else 9223372036854775807L # 2^63 - 1, largest int64 self.firstEntry = firstEntry self.prefetch = prefetch # prefetch files to TMPDIR using xrdcp self.longTermCache = longTermCache # keep cached files across runs (it's then up to you to clean up the temp) self.reportEvery=reportEvery self.postProcOut = postProcOut self.postProcErr = postProcErr self.eventLoopOut = eventLoopOut if self.postProcOut != sys.stdout: sys.stdout = self.postProcOut if self.postProcErr != sys.stdout: sys.stderr = self.postProcErr
def __init__(self, outputDir, inputFiles, cut=None, branchsel=None, modules=[], compression="LZMA:9", friend=False, postfix=None, json=None, noOut=False, justcount=False): self.outputDir = outputDir self.inputFiles = inputFiles self.cut = cut self.modules = modules self.compression = compression self.postfix = postfix self.json = json self.noOut = noOut self.friend = friend self.justcount = justcount self.branchsel = BranchSelection(branchsel) if branchsel else None
def HarvestNanoAOD(inFileList, outFilePath, sample): # # Create the output file # print "Create Output File: %s" % (outFilePath) f = ROOT.TFile(outFilePath, "RECREATE") f.cd() # # Initialize the tree jet # treeName = "TreeFatJet" isMC_QCD = "QCD" in sample print "Create Output Tree: %s" % (treeName) TreeFatJet = ROOT.TTree(treeName, treeName) # # FatJet branch # nFatJetSizeMax = 25 nFatJetString = 'nFatJet' nFatJet = bookIntBranch(TreeFatJet, nFatJetString) FatJetPt = bookFloatArrayBranch(TreeFatJet, 'FatJet_pt', nFatJetString, nFatJetSizeMax) FatJetEta = bookFloatArrayBranch(TreeFatJet, 'FatJet_eta', nFatJetString, nFatJetSizeMax) FatJetPhi = bookFloatArrayBranch(TreeFatJet, 'FatJet_phi', nFatJetString, nFatJetSizeMax) FatJetM = bookFloatArrayBranch(TreeFatJet, 'FatJet_mass', nFatJetString, nFatJetSizeMax) FatJetTau21 = bookFloatArrayBranch(TreeFatJet, 'FatJet_tau21', nFatJetString, nFatJetSizeMax) FatJetTau31 = bookFloatArrayBranch(TreeFatJet, 'FatJet_tau31', nFatJetString, nFatJetSizeMax) FatJetTau32 = bookFloatArrayBranch(TreeFatJet, 'FatJet_tau32', nFatJetString, nFatJetSizeMax) FatJetDeepTagTvsQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTag_TvsQCD', nFatJetString, nFatJetSizeMax) FatJetDeepTagWvsQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTag_WvsQCD', nFatJetString, nFatJetSizeMax) FatJetDeepTagZvsQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTag_ZvsQCD', nFatJetString, nFatJetSizeMax) FatJetDeepTagQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTag_QCD', nFatJetString, nFatJetSizeMax) FatJetDeepTagQCDOthers = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTag_QCDothers', nFatJetString, nFatJetSizeMax) FatJetDeepTagMDTvsQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTagMD_TvsQCD', nFatJetString, nFatJetSizeMax) FatJetDeepTagMDWvsQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTagMD_WvsQCD', nFatJetString, nFatJetSizeMax) FatJetDeepTagMDZvsQCD = bookFloatArrayBranch(TreeFatJet, 'FatJet_deepTagMD_ZvsQCD', nFatJetString, nFatJetSizeMax) FatJetMSoftDrop = bookFloatArrayBranch(TreeFatJet, 'FatJet_msoftdrop', nFatJetString, nFatJetSizeMax) FatJetRawFactor = bookFloatArrayBranch(TreeFatJet, 'FatJet_rawFactor', nFatJetString, nFatJetSizeMax) FatJetJetId = bookIntArrayBranch(TreeFatJet, 'FatJet_jetId', nFatJetString, nFatJetSizeMax) FatJetSubJetIdx1 = bookIntArrayBranch(TreeFatJet, 'FatJet_subJetIdx1', nFatJetString, nFatJetSizeMax) FatJetSubJetIdx2 = bookIntArrayBranch(TreeFatJet, 'FatJet_subJetIdx2', nFatJetString, nFatJetSizeMax) FatJetGenJetAK8Idx = bookIntArrayBranch(TreeFatJet, 'FatJet_genJetAK8Idx', nFatJetString, nFatJetSizeMax) # # GenPart branch # if isMC_QCD == False: nGenPartSizeMax = 1000 nGenPartString = 'nGenPart' nGenPart = bookIntBranch(TreeFatJet, nGenPartString) GenPartPt = bookFloatArrayBranch(TreeFatJet, 'GenPart_pt', nGenPartString, nGenPartSizeMax) GenPartEta = bookFloatArrayBranch(TreeFatJet, 'GenPart_eta', nGenPartString, nGenPartSizeMax) GenPartPhi = bookFloatArrayBranch(TreeFatJet, 'GenPart_phi', nGenPartString, nGenPartSizeMax) GenPartM = bookFloatArrayBranch(TreeFatJet, 'GenPart_mass', nGenPartString, nGenPartSizeMax) GenPartPdgId = bookIntArrayBranch(TreeFatJet, 'GenPart_pdgId', nGenPartString, nGenPartSizeMax) GenPartStatus = bookIntArrayBranch(TreeFatJet, 'GenPart_status', nGenPartString, nGenPartSizeMax) GenPartStatusFlags = bookIntArrayBranch(TreeFatJet, 'GenPart_statusFlags', nGenPartString, nGenPartSizeMax) GenPartGenPartIdxMother = bookIntArrayBranch( TreeFatJet, 'GenPart_genPartIdxMother', nGenPartString, nGenPartSizeMax) # # GenJetAK8 branch # nGenJetAK8SizeMax = 25 nGenJetAK8String = 'nGenJetAK8' nGenJetAK8 = bookIntBranch(TreeFatJet, nGenJetAK8String) GenJetAK8Pt = bookFloatArrayBranch(TreeFatJet, 'GenJetAK8_pt', nGenJetAK8String, nGenJetAK8SizeMax) GenJetAK8Eta = bookFloatArrayBranch(TreeFatJet, 'GenJetAK8_eta', nGenJetAK8String, nGenJetAK8SizeMax) GenJetAK8Phi = bookFloatArrayBranch(TreeFatJet, 'GenJetAK8_phi', nGenJetAK8String, nGenJetAK8SizeMax) GenJetAK8M = bookFloatArrayBranch(TreeFatJet, 'GenJetAK8_mass', nGenJetAK8String, nGenJetAK8SizeMax) GenJetAK8HadronFlavour = bookIntArrayBranch(TreeFatJet, 'GenJetAK8_hadronFlavour', nGenJetAK8String, nGenJetAK8SizeMax) GenJetAK8PartonFlavour = bookIntArrayBranch(TreeFatJet, 'GenJetAK8_partonFlavour', nGenJetAK8String, nGenJetAK8SizeMax) # # Subjet branch # nSubJetSizeMax = 50 nSubJetString = 'nSubJet' nSubJet = bookIntBranch(TreeFatJet, nSubJetString) SubJetPt = bookFloatArrayBranch(TreeFatJet, 'SubJet_pt', nSubJetString, nSubJetSizeMax) SubJetEta = bookFloatArrayBranch(TreeFatJet, 'SubJet_eta', nSubJetString, nSubJetSizeMax) SubJetPhi = bookFloatArrayBranch(TreeFatJet, 'SubJet_phi', nSubJetString, nSubJetSizeMax) SubJetM = bookFloatArrayBranch(TreeFatJet, 'SubJet_mass', nSubJetString, nSubJetSizeMax) SubJetRawFactor = bookFloatArrayBranch(TreeFatJet, 'SubJet_rawFactor', nSubJetString, nSubJetSizeMax) SubJetNBHadrons = bookIntArrayBranch(TreeFatJet, 'SubJet_nBHadrons', nSubJetString, nSubJetSizeMax) SubJetNCHadrons = bookIntArrayBranch(TreeFatJet, 'SubJet_nCHadrons', nSubJetString, nSubJetSizeMax) # # SubGenJetAK8 branch # nSubGenJetAK8SizeMax = 50 nSubGenJetAK8String = 'nSubGenJetAK8' nSubGenJetAK8 = bookIntBranch(TreeFatJet, nSubGenJetAK8String) SubGenJetAK8Pt = bookFloatArrayBranch(TreeFatJet, 'SubGenJetAK8_pt', nSubGenJetAK8String, nSubGenJetAK8SizeMax) SubGenJetAK8Eta = bookFloatArrayBranch(TreeFatJet, 'SubGenJetAK8_eta', nSubGenJetAK8String, nSubGenJetAK8SizeMax) SubGenJetAK8Phi = bookFloatArrayBranch(TreeFatJet, 'SubGenJetAK8_phi', nSubGenJetAK8String, nSubGenJetAK8SizeMax) SubGenJetAK8M = bookFloatArrayBranch(TreeFatJet, 'SubGenJetAK8_mass', nSubGenJetAK8String, nSubGenJetAK8SizeMax) # # PV branch # PVnpvs = bookIntBranch(TreeFatJet, 'nPVnpvs') PVnpvsGood = bookIntBranch(TreeFatJet, 'nPVnpvsGood') PileUpNTrueInt = bookFloatBranch(TreeFatJet, 'nPileUpNTrueInt') PileUpNPU = bookIntBranch(TreeFatJet, 'nPileUpNPU') # # SetupTChain # tree = ROOT.TChain("Events") for inFilePath in inFileList: print 'Adding files: %s' % (inFilePath) tree.Add(inFilePath) tree.ls() # # Use TChain and Setup TTreeReader. # inTree = InputTree(tree) # # # if isMC_QCD: branchSel = BranchSelection("branchSel_QCD.txt") else: branchSel = BranchSelection("branchSel.txt") branchSel.selectBranches(inTree) numEvents = inTree.GetEntries() # # Set max number of events to process # Set to -1 if you want to run over all events # maxevents = -1 # maxevents = 1000 # # Loop over events # print numEvents for iev in xrange(0, numEvents): # print iev if maxevents > 0 and iev > maxevents: break if (iev) % 1000 == 0: print "Processing event %d out of %d" % (iev, numEvents) # # Load Event # evt = Event(inTree, iev) # # Loop over fatjets # fatjets = Collection(evt, "FatJet") nFatJet[0] = 0 for i, fj in enumerate(fatjets): fj_p4 = fj.p4() FatJetPt[i] = fj_p4.Pt() FatJetEta[i] = fj_p4.Eta() FatJetPhi[i] = fj_p4.Phi() FatJetM[i] = fj_p4.M() if fj.tau1 > 0: FatJetTau21[i] = fj.tau2 / fj.tau1 else: FatJetTau21[i] = -1 if fj.tau1 > 0: FatJetTau31[i] = fj.tau3 / fj.tau1 else: FatJetTau31[i] = -1 if fj.tau2 > 0: FatJetTau32[i] = fj.tau3 / fj.tau2 else: FatJetTau32[i] = -1 FatJetDeepTagMDTvsQCD[i] = fj.deepTagMD_TvsQCD FatJetDeepTagMDWvsQCD[i] = fj.deepTagMD_WvsQCD FatJetDeepTagMDZvsQCD[i] = fj.deepTagMD_ZvsQCD FatJetDeepTagTvsQCD[i] = fj.deepTag_TvsQCD FatJetDeepTagWvsQCD[i] = fj.deepTag_WvsQCD FatJetDeepTagZvsQCD[i] = fj.deepTag_ZvsQCD FatJetDeepTagQCD[i] = fj.deepTag_QCD FatJetDeepTagQCDOthers[i] = fj.deepTag_QCDothers FatJetMSoftDrop[i] = fj.msoftdrop FatJetRawFactor[i] = fj.rawFactor FatJetJetId[i] = fj.jetId FatJetSubJetIdx1[i] = fj.subJetIdx1 FatJetSubJetIdx2[i] = fj.subJetIdx2 FatJetGenJetAK8Idx[i] = fj.genJetAK8Idx nFatJet[0] += 1 # # Loop over genparts # if isMC_QCD == False: particles = Collection(evt, "GenPart") nGenPart[0] = 0 for i, gp in enumerate(particles): GenPartPt[i] = gp.pt GenPartEta[i] = gp.eta GenPartPhi[i] = gp.phi GenPartM[i] = gp.mass GenPartPdgId[i] = gp.pdgId GenPartStatus[i] = gp.status GenPartStatusFlags[i] = gp.statusFlags GenPartGenPartIdxMother[i] = gp.genPartIdxMother nGenPart[0] += 1 # # Loop over GenJetAK8 # jets = Collection(evt, "GenJetAK8") nGenJetAK8[0] = 0 for i, gj in enumerate(jets): GenJetAK8Pt[i] = gj.pt GenJetAK8Eta[i] = gj.eta GenJetAK8Phi[i] = gj.phi GenJetAK8M[i] = gj.mass GenJetAK8HadronFlavour[i] = gj.hadronFlavour GenJetAK8PartonFlavour[i] = gj.partonFlavour nGenJetAK8[0] += 1 # # Subjet over GenJetAK8 # subjets = Collection(evt, "SubJet") nSubJet[0] = 0 for i, sj in enumerate(subjets): SubJetPt[i] = sj.pt SubJetEta[i] = sj.eta SubJetPhi[i] = sj.phi SubJetM[i] = sj.mass SubJetRawFactor[i] = sj.rawFactor SubJetNBHadrons[i] = sj.nBHadrons SubJetNCHadrons[i] = sj.nCHadrons nSubJet[0] += 1 # # Subjet over GenJetAK8 # subjets = Collection(evt, "SubGenJetAK8") nSubGenJetAK8[0] = 0 for i, sj in enumerate(subjets): SubGenJetAK8Pt[i] = sj.pt SubGenJetAK8Eta[i] = sj.eta SubGenJetAK8Phi[i] = sj.phi SubGenJetAK8M[i] = sj.mass nSubGenJetAK8[0] += 1 # # Loop over PV # PVnpvs[0] = evt.PV_npvs PVnpvsGood[0] = evt.PV_npvsGood PileUpNTrueInt[0] = evt.Pileup_nTrueInt PileUpNPU[0] = evt.Pileup_nPU # # Fill the tree for this event # TreeFatJet.Fill() # # Save the output ttree in the output file # print "Write tree to file" f.Write() # # Gracefully close the output file # print "Closing output" f.Close()
print("TTree::Draw done", time.ctime()) #now we will demonstrate running outside the Draw command which is more flexable #however this is slooow so we do things to speed it up like #pre skim things as it is slower with an entry list #and dropping branches we dont need so we dont waste time reading them #note I highly suggest you look into RDataFrames as that should be much faster Events.Draw( ">>elist", "Sum$(Electron_pt>25 && abs(Electron_eta+Electron_deltaEtaSC)<1.4442)>=1", "entrylist goff", max_events) elist = ROOT.gDirectory.Get('elist') elist.SetDirectory(0) #removing it from the file not to write it out Events.SetEntryList(elist) branchsel = BranchSelection( "EgammaUser/EgammaDAS2020/data/nano_electron_branches.txt") branchsel.selectBranches(Events) nr_events = elist.GetN() #2nd way, bare event loop for event_nr in range(0, nr_events): entry_nr = Events.GetEntryNumber(event_nr) Events.GetEntry(entry_nr) event = Events if event_nr % args.report == 0: print("processing event {} / {} {}".format(event_nr, nr_events, time.ctime())) for ele_nr in range(0, event.nElectron): if event.Electron_pt[ele_nr] > 25 and abs( event.Electron_eta[ele_nr] + event.Electron_deltaEtaSC[ele_nr]) < 1.4442:
default=("LZMA:9"), help="Compression: none, or (algo):(level) ") (options, args) = parser.parse_args() if options.friend: if options.cut or options.json: raise RuntimeError( "Can't apply JSON or cut selection when producing friends") if not options.noOut: outdir = args[0] args = args[1:] outpostfix = options.postfix if options.postfix != None else ( "_Friend" if options.friend else "_Skim") branchsel = BranchSelection( options.branchsel) if options.branchsel else None if options.compression != "none": ROOT.gInterpreter.ProcessLine("#include <Compression.h>") (algo, level) = options.compression.split(":") compressionLevel = int(level) if algo == "LZMA": compressionAlgo = ROOT.ROOT.kLZMA elif algo == "ZLIB": compressionAlgo = ROOT.ROOT.kZLIB else: raise RuntimeError("Unsupported compression %s" % algo) else: compressionLevel = 0 if not options.noOut: print "Will write selected trees to " + outdir if not options.justcount: if not os.path.exists(outdir): os.system("mkdir -p " + outdir)