diff --git a/Tools/PROCTools/CMakeLists.txt b/Tools/PROCTools/CMakeLists.txt index 7eb1c76e168c0f3f88caf7ba2b8454343cb1dea5..4b8d4131e3921ee3cdaeffbae0136fa84a4966be 100644 --- a/Tools/PROCTools/CMakeLists.txt +++ b/Tools/PROCTools/CMakeLists.txt @@ -7,5 +7,5 @@ atlas_subdir( PROCTools ) # Install files from the package: atlas_install_python_modules( python/*.py ) -atlas_install_scripts( python/compareTCTs.py python/UploadAMITag.py python/UploadTfAMITag.py python/getCurrentCOMCONDTag.py python/RunTier0Tests.py python/ExtractEvents.py python/checkUPD1.py python/runDiffRootOnChanged.py python/provideTwikiSummary.py python/evaluateDiffRoot.py python/outputTest_v2.py python/CreateTierZeroArgdict.py python/root_lsr_rank.py) +atlas_install_scripts( python/compareTCTs.py python/UploadAMITag.py python/UploadTfAMITag.py python/getCurrentCOMCONDTag.py python/RunTier0Tests.py python/ExtractEvents.py python/checkUPD1.py python/runDiffRootOnChanged.py python/provideTwikiSummary.py python/evaluateDiffRoot.py python/outputTest_v2.py python/CreateTierZeroArgdict.py python/root_lsr_rank.py python/xAODDigest.py ) diff --git a/Tools/PROCTools/python/xAODDigest.py b/Tools/PROCTools/python/xAODDigest.py new file mode 100755 index 0000000000000000000000000000000000000000..aeaee0df0deca8836ab7f5f6d0aec52e96339597 --- /dev/null +++ b/Tools/PROCTools/python/xAODDigest.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +#Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration + +from __future__ import print_function +import sys,os +import ROOT + + +def xAODDigest(evt): + result=list() + + for i in range(0,evt.getEntries()): + evt.getEntry(i) + ei=evt.retrieve("xAOD::EventInfo","EventInfo") + runnbr=ei.runNumber() + evtnbr=ei.eventNumber() + + #print (i,runnbr,evtnbr) + + clusters=evt.retrieve("xAOD::CaloClusterContainer","CaloCalTopoClusters") + nclus=len(clusters) + + idTracks=evt.retrieve("xAOD::TrackParticleContainer","InDetTrackParticles") + nIdTracks=len(idTracks) + + + jets = evt.retrieve("xAOD::JetContainer","AntiKt4EMTopoJets") + nJets=len(jets) + + muons=evt.retrieve("xAOD::MuonContainer","Muons"); + nMuons=len(muons) + + electrons=evt.retrieve("xAOD::ElectronContainer","Electrons"); + nElec=len(electrons) + + photons=evt.retrieve("xAOD::PhotonContainer","Photons"); + nPhot=len(photons) + + result.append((runnbr,evtnbr,nclus,nIdTracks,nJets,nMuons,nElec,nPhot)) + pass + + #Sort by run/event number + result.sort(key=lambda er: er[0]<<32 | er[1]) + return result + + +def main(): + if len(sys.argv)<2 or sys.argv[1]=="-h" or len(sys.argv)>3: + print("Usage:") + print("xAODDigest.py <xAODFile> [<outputFile>]") + print("Extracts a few basic quantities from the xAOD file and dumps them into a text file") + sys.exit(-1) + + #Check input file existnace + if not os.access(sys.argv[1],os.R_OK): + print ("ERROR, can't access file {}".format(sys.argv[1])) + sys.exit(-1) + + #Check output file ... + outfilename=None + if len(sys.argv)==3: + outfilename=sys.argv[2] + print("Writing to file ",outfilename) + + + evt = ROOT.POOL.TEvent(ROOT.POOL.TEvent.kClassAccess) + stat=evt.readFrom(sys.argv[1]) + if not stat: + print ("ERROR, failed to open file {} with POOL.TEvent".format(sys.argv[1])) + sys.exit(-1) + pass + + digest=xAODDigest(evt) + + if outfilename: + outstr=open(outfilename,"w") + else: + outstr=sys.stdout + + + header=("run","event","nTopo","nIdTracks","nJets","nMuons","nElec","nPhot") + + row_format ="{:>12}" * len(header) + row_format+=os.linesep + outstr.write(row_format.format(*header)) + for evt in digest: + outstr.write(row_format.format(*evt)) + + if outfilename: + outstr.close() + + return 0 + +if __name__ == "__main__": + + main() + + + + +