From b62d6c710f90bb63e7aa0296af6ac25c315c62b5 Mon Sep 17 00:00:00 2001 From: Steven Schramm <steven.schramm@cern.ch> Date: Thu, 23 Sep 2021 15:03:09 +0200 Subject: [PATCH] Switching TCC algorithm to use DetectorEta in r22 --- .../TrackParticleClusterAssociationAlg.cxx | 36 +++++++++++++++++-- .../src/TrackParticleClusterAssociationAlg.h | 6 ++++ .../python/TrackCaloClusterConfig.py | 11 +++--- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.cxx b/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.cxx index c506ebdd1b00..c6e04a617a67 100644 --- a/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.cxx +++ b/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.cxx @@ -4,6 +4,7 @@ #include "TrackParticleClusterAssociationAlg.h" +#include "StoreGate/ReadDecorHandle.h" #include "StoreGate/WriteDecorHandle.h" #include "FourMomUtils/P4Helpers.h" @@ -12,14 +13,23 @@ TrackParticleClusterAssociationAlg::TrackParticleClusterAssociationAlg(const std::string& name, ISvcLocator* pSvcLocator): - AthAlgorithm(name,pSvcLocator) { } + AthAlgorithm(name,pSvcLocator), m_doDetEta{false} { } StatusCode TrackParticleClusterAssociationAlg::initialize() { + if (m_detectorEtaDecor.key().empty()) + m_doDetEta = false; + else + { + m_doDetEta = true; + m_detectorEtaDecor = m_caloClusters.key() + "." + m_detectorEtaDecor.key(); + } + ATH_CHECK( m_caloExtKey.initialize() ); ATH_CHECK( m_trackParticleCollectionHandle.initialize() ); ATH_CHECK( m_caloClusters.initialize() ); + ATH_CHECK( m_detectorEtaDecor.initialize(m_doDetEta) ); ATH_CHECK( m_assocClustersDecor.initialize() ); ATH_CHECK(m_caloEntryParsDecor.initialize( !m_caloEntryParsDecor.empty() ) ); @@ -51,7 +61,17 @@ StatusCode TrackParticleClusterAssociationAlg::execute() cl->retrieveMoment(xAOD::CaloCluster::SECOND_R,rad); double cent; cl->retrieveMoment(xAOD::CaloCluster::CENTER_MAG,cent); - double sigmaWidth = atan(sqrt(rad)/cent)*cosh(cl->eta()); + + float cl_eta {99}; + if (m_doDetEta) + { + SG::ReadDecorHandle<xAOD::CaloClusterContainer, float> detEta(m_detectorEtaDecor); + cl_eta = detEta(*cl); + } + else + cl_eta = cl->eta(); + + double sigmaWidth = atan(sqrt(rad)/cent)*cosh(cl_eta); sig_dec(*cl) = sigmaWidth; } @@ -151,7 +171,17 @@ std::vector<const xAOD::CaloCluster* > TrackParticleClusterAssociationAlg::assoc for(const xAOD::CaloCluster * cl : allClusters){ float dPhi = P4Helpers::deltaPhi( cl->phi(), phi); - float dEta = cl->eta()-eta; + + float cl_eta {99}; + if (m_doDetEta) + { + SG::ReadDecorHandle<xAOD::CaloClusterContainer, float> detEta(m_detectorEtaDecor); + cl_eta = detEta(*cl); + } + else + cl_eta = cl->eta(); + + float dEta = cl_eta - eta; float dr2 = dPhi*dPhi+ dEta*dEta; float dr2Cut = dr2Cut0; diff --git a/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.h b/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.h index 8399686db448..c18c73350dcd 100644 --- a/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.h +++ b/Reconstruction/RecoAlgs/TrackParticleAssociationAlgs/src/TrackParticleClusterAssociationAlg.h @@ -8,6 +8,7 @@ #include "AthenaBaseComps/AthAlgorithm.h" #include "GaudiKernel/ToolHandle.h" #include "StoreGate/ReadHandleKey.h" +#include "StoreGate/ReadDecorHandleKey.h" #include "StoreGate/WriteHandleKey.h" #include "StoreGate/WriteDecorHandleKey.h" @@ -60,6 +61,11 @@ class TrackParticleClusterAssociationAlg : public AthAlgorithm SG::ReadHandleKey<xAOD::TrackParticleContainer> m_trackParticleCollectionHandle {this,"TrackParticleContainerName", "InDetTrackParticles", "input tracks" }; SG::ReadHandleKey<xAOD::CaloClusterContainer> m_caloClusters {this, "CaloClusterLocation", "CaloCalTopoClusters","input calo clusters"}; + // Whether or not to use the DetectorEta attribute of the clusters, which is important if the input cluster container has had the origin correction applied + // Default assumes no origin correction, must be configured if desired + SG::ReadDecorHandleKey<xAOD::CaloClusterContainer> m_detectorEtaDecor { this, "DetectorEtaName", "", "Decoration for CaloCluster DetectorEta" }; + bool m_doDetEta; + // vertex handling SG::ReadHandleKey<xAOD::VertexContainer> m_vertexContHandle {this, "VertexContainerName", "", "if empty all tracks will be decorated. if not only those corresponding to the PV[0] will."}; ToolHandle<CP::ITrackVertexAssociationTool> m_trackvertexassoTool {this, "TrackVertexAssoTool", "" }; diff --git a/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecTools/python/TrackCaloClusterConfig.py b/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecTools/python/TrackCaloClusterConfig.py index b8f7dc7a3dcd..789b1e06f1d8 100644 --- a/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecTools/python/TrackCaloClusterConfig.py +++ b/Reconstruction/TrackCaloClusterRec/TrackCaloClusterRecTools/python/TrackCaloClusterConfig.py @@ -104,7 +104,7 @@ def getDecorationKeyFunc(trackParticleName, assocPostfix): """Simple helper returning a function to build decoration keys """ return lambda d : trackParticleName+'.'+d+assocPostfix -def setupTrackCaloAssoc(configFlags, caloClusterName="CaloCalTopoClusters",trackParticleName="InDetTrackParticles", assocPostfix = "TCC", onlyPV0Tracks=False): +def setupTrackCaloAssoc(configFlags, caloClusterName="CaloCalTopoClusters",detectorEtaName="default",trackParticleName="InDetTrackParticles", assocPostfix = "TCC", onlyPV0Tracks=False): """ Schedule a TrackParticleClusterAssociationAlg in the top sequence, taking as input clusters and tracks defined by the keys caloClusterName and trackParticleName. @@ -133,6 +133,7 @@ def setupTrackCaloAssoc(configFlags, caloClusterName="CaloCalTopoClusters",track PtCut = 400., CaloExtensionName = "ParticleCaloExtension", CaloClusterLocation = caloClusterName, + DetectorEtaName = detectorEtaName if detectorEtaName.lower() != "default" else ("DetectorEta" if "Origin" in caloClusterName else ""), TrackVertexAssoTool=setupTrackVertexAssocTool(), # will associate trks from PV0 only VertexContainerName = "PrimaryVertices" if onlyPV0Tracks else "", AssociatedClusterDecorKey = decorKey("AssoClusters"), @@ -144,7 +145,7 @@ def setupTrackCaloAssoc(configFlags, caloClusterName="CaloCalTopoClusters",track return components -def runTCCReconstruction(configFlags, caloClusterName="CaloCalTopoClusters",trackParticleName="InDetTrackParticles", +def runTCCReconstruction(configFlags, caloClusterName="CaloCalTopoClusters", detectorEtaName = "default", trackParticleName="InDetTrackParticles", assocPostfix="TCC", doCombined=False, doNeutral=True, doCharged=False, outputTCCName="TrackCaloClusters"): """Create a TrackCaloCluster collection from clusters and tracks (caloClusterName and trackParticleName). Depending on options, the collection contains combined, neutral and/or charged TCC. @@ -161,7 +162,7 @@ def runTCCReconstruction(configFlags, caloClusterName="CaloCalTopoClusters",trac components = ComponentAccumulator() components.merge( - setupTrackCaloAssoc(configFlags, caloClusterName, trackParticleName, assocPostfix, onlyPV0Tracks=False) + setupTrackCaloAssoc(configFlags, caloClusterName, detectorEtaName, trackParticleName, assocPostfix, onlyPV0Tracks=False) ) @@ -242,7 +243,7 @@ def runTCCReconstruction(configFlags, caloClusterName="CaloCalTopoClusters",trac return components -def runUFOReconstruction( constits, configFlags, caloClusterName="CaloCalTopoClusters", trackParticleName="InDetTrackParticles", +def runUFOReconstruction( constits, configFlags, caloClusterName="CaloCalTopoClusters", detectorEtaName = "default", trackParticleName="InDetTrackParticles", assocPostfix="TCC", ): """Create a TrackCaloCluster collection from PFlow and tracks (PFO retrieved from PFOPrefix and tracks directly from trackParticleName). This functions schedules 2 UFO specific algs : @@ -258,7 +259,7 @@ def runUFOReconstruction( constits, configFlags, caloClusterName="CaloCalTopoClu components.merge( - setupTrackCaloAssoc(configFlags, caloClusterName, trackParticleName, assocPostfix, onlyPV0Tracks=True) + setupTrackCaloAssoc(configFlags, caloClusterName, detectorEtaName, trackParticleName, assocPostfix, onlyPV0Tracks=True) ) -- GitLab