Skip to content
Snippets Groups Projects
Commit 8d410913 authored by Edward Moyse's avatar Edward Moyse Committed by Johannes Elmsheuser
Browse files

DumpEventDataToJsonAlg: Clean up configuration and simplify algorithm

DumpEventDataToJsonAlg: Clean up configuration and simplify algorithm
parent ec752897
No related branches found
No related tags found
No related merge requests found
......@@ -5,7 +5,7 @@ from AthenaConfiguration.ComponentFactory import CompFactory
from AthenaCommon.Constants import VERBOSE
def DumpEventDataToJSONAlgCfg(flags, doExtrap=False, **kwargs):
def DumpEventDataToJSONAlgCfg(flags, doExtrap=False, doACTSEDM = True, **kwargs):
result = ComponentAccumulator()
extrapolationEngine = ""
if doExtrap:
......@@ -19,19 +19,31 @@ def DumpEventDataToJSONAlgCfg(flags, doExtrap=False, **kwargs):
result.merge(extrapAcc)
kwargs.setdefault('Extrapolator', extrapolationEngine)
dumpAlg = CompFactory.DumpEventDataToJsonAlg(
ExtrapolateTrackParticles=doExtrap, **kwargs)
else:
kwargs.setdefault('Extrapolator', '')
if doACTSEDM:
from ActsConfig.ActsGeometryConfig import ActsTrackingGeometryToolCfg
kwargs.setdefault('TrackingGeometryTool', result.popToolsAndMerge(ActsTrackingGeometryToolCfg(flags)))
else:
kwargs.setdefault('TrackingGeometryTool', '')
kwargs.setdefault('VectorTrackContainerKeys', [])
kwargs.setdefault('TrackStatesLocation', [])
kwargs.setdefault('TrackJacobiansLocation', [])
kwargs.setdefault('TrackMeasurementsLocation', [])
kwargs.setdefault('TrackParametersLocation', [])
dumpAlg = CompFactory.DumpEventDataToJsonAlg( **kwargs)
result.addEventAlgo(dumpAlg)
return result
if __name__ == "__main__":
# Run this with python -m DumpEventDataToJSON.DumpEventDataToJSONConfig myESD.pool.root
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("input",
help="Input pool file", default="../q221/myESD.pool.root")
from AthenaConfiguration.AllConfigFlags import initConfigFlags
flags = initConfigFlags()
parser = flags.getArgumentParser()
parser.add_argument("-o", "--output", dest="output", default='Event.json',
help="write JSON to FILE", metavar="FILE")
parser.add_argument("--prependCalib", help="Prepend a calibartion event with some labelled objects at specific eta/phi.",
......@@ -39,10 +51,9 @@ if __name__ == "__main__":
args = parser.parse_args()
print('Running DumpEventDataToJSON on {} and outputting to {}. Prepend calib event is {}'.format(
args.input, args.output, args.prependCalib))
args.filesInput, args.output, args.prependCalib))
from AthenaCommon.Logging import log
from AthenaConfiguration.AllConfigFlags import initConfigFlags
from AthenaConfiguration.MainServicesConfig import MainServicesCfg
from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
......@@ -50,11 +61,7 @@ if __name__ == "__main__":
# from AthenaCommon.Constants import DEBUG
# log.setLevel(DEBUG)
flags = initConfigFlags()
# To run on MC do e.g.
flags.Input.Files = [args.input]
# To run on data do e.g.
# flags.Input.Files = ["../q431/myESD.pool.root"]
args = flags.fillFromArgs(parser = parser)
# This should run serially for the moment.
flags.Concurrency.NumThreads = 1
......@@ -103,9 +110,6 @@ if __name__ == "__main__":
from MuonConfig.MuonGeometryConfig import MuonGeoModelCfg
cfg.merge(MuonGeoModelCfg(flags))
from TrkConfig.AtlasTrackingGeometrySvcConfig import TrackingGeometrySvcCfg
cfg.merge(TrackingGeometrySvcCfg(flags))
from TrkConfig.TrackCollectionReadConfig import TrackCollectionReadCfg
cfg.merge(TrackCollectionReadCfg(flags, 'Tracks'))
......@@ -114,7 +118,7 @@ if __name__ == "__main__":
# Disable doExtrap if you would prefer not to use the extrapolator.
topoAcc = DumpEventDataToJSONAlgCfg(
flags, doExtrap=False, OutputLevel=VERBOSE, DumpTestEvent=args.prependCalib, OutputLocation=args.output,
flags, doExtrap=True, doACTSEDM=False, OutputLevel=VERBOSE, DumpTestEvent=args.prependCalib, OutputLocation=args.output,
CscPrepRawDataKey = "CSC_Clusters" if flags.Detector.EnableCSC else "",
MMPrepRawDataKey = "MM_Measurements" if flags.Detector.EnableMM else "",
sTgcPrepRawDataKey = "STGC_Measurements" if flags.Detector.EnablesTGC else "",
......@@ -123,6 +127,3 @@ if __name__ == "__main__":
cfg.merge(topoAcc)
cfg.run(2)
f = open("DumpEventDataToJSONConfig.pkl", "wb")
cfg.store(f)
f.close()
......@@ -65,14 +65,13 @@ StatusCode DumpEventDataToJsonAlg::initialize() {
if (!m_trtPrepRawDataKey.empty())
ATH_CHECK(m_trtPrepRawDataKey.initialize());
if (m_extrapolateTrackParticless) {
ATH_CHECK(m_extrapolator.retrieve());
ATH_CHECK(m_extrapolator.retrieve( DisableTool{m_extrapolator.empty()} ));
ATH_CHECK(m_trackingGeometryTool.retrieve( DisableTool{m_trackingGeometryTool.empty()} ));
if (m_extrapolator.empty()) {
ATH_MSG_WARNING("No extrapolator found. Will not be able to extrapolate tracks.");
} else {
m_extrapolator.disable();
ATH_MSG_INFO("Extrapolator found. Will be able to extrapolate tracks.");
}
ATH_CHECK(m_trackingGeometryTool.retrieve());
return StatusCode::SUCCESS;
}
......@@ -161,38 +160,34 @@ StatusCode DumpEventDataToJsonAlg::execute() {
ATH_CHECK(getAndFillArrayOfContainers(j, m_trackCollectionKeys, "Tracks"));
// ACTS
auto vtcHandles = m_vectorTrackContainerKeys.makeHandles();
auto tsHandles = m_trackStatesKeys.makeHandles();
auto jHandles = m_jacobiansKeys.makeHandles();
auto mHandles = m_measurementsKeys.makeHandles();
auto pHandles = m_parametersKeys.makeHandles();
unsigned int i = 0;
for ( ; i < vtcHandles.size(); ++i) {
SG::ReadHandle<Acts::ConstVectorTrackContainer> vtcHandle = vtcHandles[i];
SG::ReadHandle<xAOD::TrackStateContainer> tsHandle = tsHandles[i];
SG::ReadHandle<xAOD::TrackJacobianContainer> jHandle = jHandles[i];
SG::ReadHandle<xAOD::TrackMeasurementContainer> mHandle = mHandles[i];
SG::ReadHandle<xAOD::TrackParametersContainer> pHandle = pHandles[i];
// Temporary debugging information
ATH_MSG_VERBOSE("TrackStateContainer has "<< tsHandle->size() << " elements");
ATH_MSG_VERBOSE("TrackParametersContainer has "<< pHandle->size() << " elements");
ATH_MSG_VERBOSE("Trying to load " << vtcHandle.key() << " with " << vtcHandle->size_impl() << " tracks");
auto multiTraj = std::make_unique<ActsTrk::ConstMultiTrajectory>(&(*tsHandle), &(*pHandle), &(*jHandle), &(*mHandle));
multiTraj->fillSurfaces(m_trackingGeometryTool->trackingGeometry().get(),
m_trackingGeometryTool->getGeometryContext(getContext()));
ATH_MSG_VERBOSE("Surfaces restored");
Acts::TrackContainer<Acts::ConstVectorTrackContainer,
ActsTrk::ConstMultiTrajectory, Acts::detail::ConstRefHolder>
tc{*vtcHandle, *multiTraj};
ATH_MSG_VERBOSE("Found " << tc.size() << " tracks in " << vtcHandle.key());
for (auto track : tc) {
nlohmann::json tmp = getData(track);
j["TrackContainers"][vtcHandle.key()].push_back(tmp);
if (!m_vectorTrackContainerKeys.empty()) {
auto vtcHandles = m_vectorTrackContainerKeys.makeHandles();
auto tsHandles = m_trackStatesKeys.makeHandles();
auto jHandles = m_jacobiansKeys.makeHandles();
auto mHandles = m_measurementsKeys.makeHandles();
auto pHandles = m_parametersKeys.makeHandles();
unsigned int i = 0;
for ( ; i < vtcHandles.size(); ++i) {
SG::ReadHandle<Acts::ConstVectorTrackContainer> vtcHandle = vtcHandles[i];
SG::ReadHandle<xAOD::TrackStateContainer> tsHandle = tsHandles[i];
SG::ReadHandle<xAOD::TrackJacobianContainer> jHandle = jHandles[i];
SG::ReadHandle<xAOD::TrackMeasurementContainer> mHandle = mHandles[i];
SG::ReadHandle<xAOD::TrackParametersContainer> pHandle = pHandles[i];
auto multiTraj = std::make_unique<ActsTrk::ConstMultiTrajectory>(&(*tsHandle), &(*pHandle), &(*jHandle), &(*mHandle));
multiTraj->fillSurfaces(m_trackingGeometryTool->trackingGeometry().get(),
m_trackingGeometryTool->getGeometryContext(getContext()));
ATH_MSG_VERBOSE("Surfaces restored");
Acts::TrackContainer<Acts::ConstVectorTrackContainer,
ActsTrk::ConstMultiTrajectory, Acts::detail::ConstRefHolder>
tc{*vtcHandle, *multiTraj};
ATH_MSG_VERBOSE("Found " << tc.size() << " tracks in " << vtcHandle.key());
for (auto track : tc) {
nlohmann::json tmp = getData(track);
j["TrackContainers"][vtcHandle.key()].push_back(tmp);
}
}
}
......@@ -335,7 +330,7 @@ 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_extrapolateTrackParticless) {
if (m_extrapolator.empty()) {
data["pos"] = {tp.perigeeParameters().position().x(),
tp.perigeeParameters().position().y(),
tp.perigeeParameters().position().z()};
......
......@@ -103,8 +103,6 @@ protected:
SG::ReadHandleKey<InDet::SCT_ClusterContainer> m_sctPrepRawDataKey{this, "SctPrepRawDataKey", "SCT_Clusters", "Key for SCT PRD Container"};
SG::ReadHandleKey<InDet::TRT_DriftCircleContainer> m_trtPrepRawDataKey{this, "TrtPrepRawDataKey", "TRT_DriftCircles", "Key for TRT PRD Container"};
Gaudi::Property<bool> m_extrapolateTrackParticless{this, "ExtrapolateTrackParticles", false, "If true, attempt to extrapolate tracks and add additional positions."};
ToolHandle<Trk::IExtrapolationEngine> m_extrapolator{this, "Extrapolator", "Trk::ExtrapolationEngine/AtlasExtrapolation"};
ToolHandle<IActsTrackingGeometryTool> m_trackingGeometryTool{this, "TrackingGeometryTool", "ActsTrackingGeometryTool"};
......
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