Skip to content
Snippets Groups Projects
Commit 6cc66798 authored by Edward Moyse's avatar Edward Moyse Committed by Frank Winklmeier
Browse files

Updates to DumpEventDataToJSONConfig for PHYSLITE

Updates to DumpEventDataToJSONConfig for PHYSLITE

Adding a feature to the DumpEventDataToJSONConfig configuration function
that checks if we are running on PHYSLITE (based on something that I
believe is trustworthy) and then configures the input collections
accordingly. At the moment there are no track particles that can be
output, which isn't great, but the rest seems to work reasonably well.

There were a few collections that appear to not exist in the C++ code,
so I've removed the setting of those collection names (it causes the
function to crash out of the box).

Fixing a typo in a comment as well.
parent 3fe8c9bf
No related branches found
No related tags found
No related merge requests found
......@@ -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} )
......@@ -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()
......@@ -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()) {
......
......@@ -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;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment