diff --git a/Event/DumpEventDataToJSON/CMakeLists.txt b/Event/DumpEventDataToJSON/CMakeLists.txt index 56cedf1805f000b082feac8ae87647253b540110..6682c4db95ac2ef54fb4ec4a187202e9edb00f63 100644 --- a/Event/DumpEventDataToJSON/CMakeLists.txt +++ b/Event/DumpEventDataToJSON/CMakeLists.txt @@ -11,7 +11,7 @@ find_package( Acts COMPONENTS Core ) atlas_add_component( DumpEventDataToJSON src/*.cxx src/components/*.cxx - LINK_LIBRARIES ActsEventLib AthenaBaseComps CaloEvent GaudiKernel StoreGateLib TrkExInterfaces MuonPrepRawData InDetPrepRawData TrkTrack nlohmann_json::nlohmann_json xAODCaloEvent xAODEventInfo xAODJet xAODMuon xAODTracking ) + LINK_LIBRARIES ActsEventLib AthenaBaseComps CaloEvent GaudiKernel StoreGateLib TrkExInterfaces MuonPrepRawData InDetPrepRawData TrkTrack nlohmann_json::nlohmann_json xAODCaloEvent xAODEgamma xAODEventInfo xAODJet xAODMuon xAODTau xAODTracking ) # Install files from the package: atlas_install_python_modules( python/*.py POST_BUILD_CMD ${ATLAS_FLAKE8} ) diff --git a/Event/DumpEventDataToJSON/python/DumpEventDataToJSONConfig.py b/Event/DumpEventDataToJSON/python/DumpEventDataToJSONConfig.py index 50117c30c430b29bfa958822c81b4b81d6819a70..93b2df107d02535b71c2b11e03ea36d241cf5746 100644 --- a/Event/DumpEventDataToJSON/python/DumpEventDataToJSONConfig.py +++ b/Event/DumpEventDataToJSON/python/DumpEventDataToJSONConfig.py @@ -31,18 +31,25 @@ def DumpEventDataToJSONAlgCfg(flags, doExtrap=False, doACTSEDM = True, **kwargs) kwargs.setdefault('TrackContainerKeys', []) if 'StreamDAOD_PHYSLITE' in flags.Input.Collections: + # Not all data is available in PhysLite files. + kwargs.setdefault('PHYSLITE', True) # AnalysisJets and AnalysisLargeRJets are the standard jet containers kwargs.setdefault('JetContainerKeys', ['AnalysisJets','AnalysisLargeRJets']) # AnalysisMuons are the standard calibrated muon container kwargs.setdefault('MuonContainerKeys', ['AnalysisMuons']) + # AnalysisTauJets are the calibrated tau jet container + kwargs.setdefault('TauJetContainerKeys', ['AnalysisTauJets']) + # AnalysisElectrons are the standard calibrated electron container + kwargs.setdefault('ElectronContainerKeys', ['AnalysisElectrons']) + # AnalysisPhotons are the standard calibrated photon container + kwargs.setdefault('PhotonContainerKeys', ['AnalysisPhotons']) # No clusters or cells in DAOD_PHYSLITE kwargs.setdefault('CaloClusterContainerKeys', []) kwargs.setdefault('CaloCellContainerKey', []) # No real track collections in DAOD_PHYSLITE kwargs.setdefault('TrackCollectionKeys', []) kwargs.setdefault('TrackContainerKeys', []) - # InDetTrackParticles are heavily skimmed, so not useful output - keep only muons - kwargs.setdefault('TrackParticleContainerKeys', []) #['CombinedMuonTrackParticles']) + kwargs.setdefault('TrackParticleContainerKeys', ['InDetTrackParticles', 'CombinedMuonTrackParticles']) #['CombinedMuonTrackParticles']) # No prep raw data in DAOD_PHYSLITE kwargs.setdefault('MdtPrepRawDataKey', '') kwargs.setdefault('RpcPrepRawDataKey', '') @@ -59,7 +66,8 @@ def DumpEventDataToJSONAlgCfg(flags, doExtrap=False, doACTSEDM = True, **kwargs) if __name__ == "__main__": - # Run this with python -m DumpEventDataToJSON.DumpEventDataToJSONConfig myESD.pool.root + # Run this with python -m DumpEventDataToJSON.DumpEventDataToJSONConfig --filesInput myESD.pool.root + # For help, python -m DumpEventDataToJSON.DumpEventDataToJSONConfig --help from AthenaConfiguration.AllConfigFlags import initConfigFlags flags = initConfigFlags() parser = flags.getArgumentParser() @@ -145,4 +153,4 @@ if __name__ == "__main__": cfg.merge(topoAcc) - cfg.run(2) + cfg.run() diff --git a/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.cxx b/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.cxx index cc7492c71bca2193f842213d37ea58cf5ca63402..8f86ccd1b287758697345aefdf87f8f51c87405a 100644 --- a/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.cxx +++ b/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.cxx @@ -37,6 +37,9 @@ StatusCode DumpEventDataToJsonAlg::initialize() { ATH_CHECK(m_caloClustersKeys.initialize(!m_caloClustersKeys.empty())); ATH_CHECK(m_caloCellKey.initialize(!m_caloCellKey.empty())); ATH_CHECK(m_muonKeys.initialize(!m_muonKeys.empty())); + ATH_CHECK(m_tauJetKeys.initialize(!m_tauJetKeys.empty())); + ATH_CHECK(m_electronKeys.initialize(!m_electronKeys.empty())); + ATH_CHECK(m_photonKeys.initialize(!m_photonKeys.empty())); ATH_CHECK(m_trackCollectionKeys.initialize(!m_trackCollectionKeys.empty())); // ACTS @@ -152,6 +155,9 @@ StatusCode DumpEventDataToJsonAlg::execute() { ATH_CHECK(getAndFillArrayOfContainers(j, m_jetKeys, "Jets")); ATH_CHECK(getAndFillArrayOfContainers(j, m_trackParticleKeys, "Tracks")); ATH_CHECK(getAndFillArrayOfContainers(j, m_muonKeys, "Muons")); + ATH_CHECK(getAndFillArrayOfContainers(j, m_tauJetKeys, "Taus")); + ATH_CHECK(getAndFillArrayOfContainers(j, m_electronKeys, "Electrons")); + ATH_CHECK(getAndFillArrayOfContainers(j, m_photonKeys, "Photons")); ATH_CHECK(getAndFillArrayOfContainers(j, m_caloClustersKeys, "CaloClusters")); ATH_CHECK(getAndFillArrayOfContainers(j, m_caloCellKey, "CaloCells")); ATH_CHECK(getAndFillArrayOfContainers(j, m_trackCollectionKeys, "Tracks")); @@ -312,6 +318,11 @@ nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::TrackParticle &tp) { data["dof"] = tp.numberDoF(); data["dparams"] = {tp.d0(), tp.z0(), tp.phi0(), tp.theta(), tp.qOverP()}; + if (m_physlite) { + ATH_MSG_VERBOSE("Physlite mode enabled. Not adding track parameters."); + return data; + } + if (m_extrapolator.empty()) { data["pos"] = {tp.perigeeParameters().position().x(), tp.perigeeParameters().position().y(), @@ -354,12 +365,14 @@ nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::TrackParticle &tp) { data["pos"].push_back(pos.y()); data["pos"].push_back(pos.z()); } + } else { ATH_MSG_WARNING( "Failure in extrapolation for Track with start parameters " << startParameters); } } + return data; } @@ -429,6 +442,38 @@ nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Muon &muon) { return data; } +// Specialisation for Tau Jets +template <> +nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::TauJet &tauJet) { + nlohmann::json data; + data["phi"] = tauJet.phi(); + data["eta"] = tauJet.eta(); + data["energy"] = tauJet.e(); + return data; +} + +// Specialisation for Electrons +template <> +nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Electron &electron) { + nlohmann::json data; + data["phi"] = electron.phi(); + data["eta"] = electron.eta(); + data["energy"] = electron.e(); + + return data; +} + +// Specialisation for Photons +template <> +nlohmann::json DumpEventDataToJsonAlg::getData(const xAOD::Photon &photon) { + nlohmann::json data; + data["phi"] = photon.phi(); + data["eta"] = photon.eta(); + data["energy"] = photon.e(); + + return data; +} + template <class TYPE> void DumpEventDataToJsonAlg::addLink(const TYPE &link, nlohmann::json &data) { if (link.isValid()) { diff --git a/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.h b/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.h index 3521d2c0be7c0cb321001f1432714783c2066c3b..5a87fdca3a1a84a3bf9e06aaab192981c5d7ed7e 100644 --- a/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.h +++ b/Event/DumpEventDataToJSON/src/DumpEventDataToJsonAlg.h @@ -14,6 +14,9 @@ #include "xAODTracking/TrackParticleContainer.h" #include "xAODJet/JetContainer.h" #include "xAODMuon/MuonContainer.h" +#include "xAODTau/TauJetContainer.h" +#include "xAODEgamma/ElectronContainer.h" +#include "xAODEgamma/PhotonContainer.h" #include "xAODCaloEvent/CaloClusterContainer.h" #include "CaloEvent/CaloCellContainer.h" #include "TrkTrack/TrackCollection.h" @@ -79,6 +82,12 @@ protected: SG::ReadHandleKeyArray<xAOD::MuonContainer> m_muonKeys{this, "MuonContainerKeys", {"Muons"}, "Keys for Muon Containers"}; + SG::ReadHandleKeyArray<xAOD::TauJetContainer> m_tauJetKeys{this, "TauJetContainerKeys", {"TauJets"}, "Keys for Tau Containers"}; + + SG::ReadHandleKeyArray<xAOD::ElectronContainer> m_electronKeys{this, "ElectronContainerKeys", {"Electrons"}, "Keys for Electron Containers"}; + + SG::ReadHandleKeyArray<xAOD::PhotonContainer> m_photonKeys{this, "PhotonContainerKeys", {"Photons"}, "Keys for Photon Containers"}; + SG::ReadHandleKeyArray<xAOD::CaloClusterContainer> m_caloClustersKeys{this, "CaloClusterContainerKeys", {"CaloCalTopoClusters"}, "Keys for CaloClusters Containers"}; SG::ReadHandleKeyArray<CaloCellContainer> m_caloCellKey{this, "CaloCellContainerKey", {"AllCalo"}, "Key for CaloCell Container"}; @@ -104,6 +113,7 @@ protected: Gaudi::Property<std::string> m_outputJSON_Name{this, "OutputLocation", "EventData.json", "Default filename for "}; Gaudi::Property<bool> m_dumpTestEvent{this, "DumpTestEvent", false, "If true, prepend a test event with some calibration data in it."}; + Gaudi::Property<bool> m_physlite{this, "PHYSLITE", false, "If true, do not try to access data which is not available in PHYSLITE files."}; nlohmann::json m_eventData; };