Skip to content
Snippets Groups Projects
Commit 28e12363 authored by Edward Moyse's avatar Edward Moyse
Browse files

Merge branch 'TrackParticleCreatorTool_eventContext' into 'master'

TrackParticleCreator : EventContext aware .

See merge request atlas/athena!38887
parents f0fa6b23 833c0f58
No related branches found
No related tags found
No related merge requests found
...@@ -106,7 +106,7 @@ EMBremCollectionBuilder::execute(const EventContext& ctx) const ...@@ -106,7 +106,7 @@ EMBremCollectionBuilder::execute(const EventContext& ctx) const
std::vector<const xAOD::TrackParticle*> siliconTrkTracks; std::vector<const xAOD::TrackParticle*> siliconTrkTracks;
siliconTrkTracks.reserve(16); siliconTrkTracks.reserve(16);
std::vector<TrackWithIndex> trtAloneTrkTracks; std::vector<TrackWithIndex> trtAloneTrkTracks;
trtAloneTrkTracks.reserve(16); trtAloneTrkTracks.reserve(8);
for(const xAOD::TrackParticle* track : *selectedTracks){ for(const xAOD::TrackParticle* track : *selectedTracks){
const Trk::Track* trktrack{nullptr}; const Trk::Track* trktrack{nullptr};
if ( track->trackLink().isValid() ){ if ( track->trackLink().isValid() ){
...@@ -209,21 +209,25 @@ EMBremCollectionBuilder::createCollections( ...@@ -209,21 +209,25 @@ EMBremCollectionBuilder::createCollections(
} }
for (auto& Info : refitted){ for (auto& Info : refitted){
ATH_CHECK(createNew(Info,finalTracks,finalTrkPartContainer,AllTracks)); ATH_CHECK(
createNew(ctx, Info, finalTracks, finalTrkPartContainer, AllTracks));
} }
for (auto& Info : failedfit){ for (auto& Info : failedfit){
ATH_CHECK(createNew(Info,finalTracks,finalTrkPartContainer,AllTracks)); ATH_CHECK(
createNew(ctx, Info, finalTracks, finalTrkPartContainer, AllTracks));
} }
for (auto& Info : trtAlone){ for (auto& Info : trtAlone){
ATH_CHECK(createNew(Info,finalTracks,finalTrkPartContainer,AllTracks)); ATH_CHECK(
createNew(ctx, Info, finalTracks, finalTrkPartContainer, AllTracks));
} }
return StatusCode::SUCCESS; return StatusCode::SUCCESS;
} }
StatusCode StatusCode
EMBremCollectionBuilder::createNew( EMBremCollectionBuilder::createNew(
const EventContext& ctx,
TrackWithIndex& Info, TrackWithIndex& Info,
TrackCollection* finalTracks, TrackCollection* finalTracks,
xAOD::TrackParticleContainer* finalTrkPartContainer, xAOD::TrackParticleContainer* finalTrkPartContainer,
...@@ -236,7 +240,7 @@ EMBremCollectionBuilder::createNew( ...@@ -236,7 +240,7 @@ EMBremCollectionBuilder::createNew(
* Create TrackParticle it should be now owned by finalTrkPartContainer * Create TrackParticle it should be now owned by finalTrkPartContainer
*/ */
xAOD::TrackParticle* aParticle = m_particleCreatorTool->createParticle( xAOD::TrackParticle* aParticle = m_particleCreatorTool->createParticle(
*(Info.track), finalTrkPartContainer, nullptr, xAOD::electron); ctx, *(Info.track), finalTrkPartContainer, nullptr, xAOD::electron);
if (!aParticle) { if (!aParticle) {
ATH_MSG_WARNING( ATH_MSG_WARNING(
......
...@@ -75,7 +75,8 @@ private: ...@@ -75,7 +75,8 @@ private:
xAOD::TrackParticleContainer* finalTrkPartContainer, xAOD::TrackParticleContainer* finalTrkPartContainer,
const xAOD::TrackParticleContainer* AllTracks) const; const xAOD::TrackParticleContainer* AllTracks) const;
StatusCode createNew(TrackWithIndex& Info, StatusCode createNew(const EventContext& ctx,
TrackWithIndex& Info,
TrackCollection* finalTracks, TrackCollection* finalTracks,
xAOD::TrackParticleContainer* finalTrkPartContainer, xAOD::TrackParticleContainer* finalTrkPartContainer,
const xAOD::TrackParticleContainer* AllTracks) const; const xAOD::TrackParticleContainer* AllTracks) const;
......
...@@ -15,7 +15,6 @@ changes : 11.02.04 added docu ...@@ -15,7 +15,6 @@ changes : 11.02.04 added docu
#define TRKPARTICLECREATOR_PARTICLECREATORTOOL_H #define TRKPARTICLECREATOR_PARTICLECREATORTOOL_H
#include "AthenaBaseComps/AthAlgTool.h" #include "AthenaBaseComps/AthAlgTool.h"
#include "GaudiKernel/EventContext.h"
#include "TrkToolInterfaces/ITrackParticleCreatorTool.h" #include "TrkToolInterfaces/ITrackParticleCreatorTool.h"
#include "AthContainers/AuxElement.h" #include "AthContainers/AuxElement.h"
...@@ -77,17 +76,21 @@ public: ...@@ -77,17 +76,21 @@ public:
ownership of the Trk::Track or Vx::Candidate, so they should be passed by ownership of the Trk::Track or Vx::Candidate, so they should be passed by
reference. reference.
*/ */
virtual Rec::TrackParticle* createParticle(const Trk::Track* track, virtual Rec::TrackParticle* createParticle(
const Trk::VxCandidate* vxCandidate, const EventContext& ctx,
Trk::TrackParticleOrigin prtOrigin) const override; const Trk::Track* track,
const Trk::VxCandidate* vxCandidate,
Trk::TrackParticleOrigin prtOrigin) const override final;
/** Method to construct a xAOD::TrackParticle from a Rec::TrackParticle. /** Method to construct a xAOD::TrackParticle from a Rec::TrackParticle.
@param track particle @param track particle
@param TrackParticleContainer needed to have an AuxStore, if provided particle @param TrackParticleContainer needed to have an AuxStore, if provided particle
will be added to store which takes ownership will be added to store which takes ownership
*/ */
virtual xAOD::TrackParticle* createParticle(const Rec::TrackParticle& trackParticle, virtual xAOD::TrackParticle* createParticle(
xAOD::TrackParticleContainer* container) const override; const EventContext& ctx,
const Rec::TrackParticle& trackParticle,
xAOD::TrackParticleContainer* container) const override final;
/** Method to construct a xAOD::TrackParticle from a passed Track. Currently, /** Method to construct a xAOD::TrackParticle from a passed Track. Currently,
it will ONLY fill the MeasuredPerigee i.e. the TrackParticle will not be it will ONLY fill the MeasuredPerigee i.e. the TrackParticle will not be
...@@ -101,11 +104,13 @@ public: ...@@ -101,11 +104,13 @@ public:
@param prtOrigin Particle type @param prtOrigin Particle type
@param prd_to_track_map an optional PRD-to-track map to compute shared hits. @param prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/ */
virtual xAOD::TrackParticle* createParticle(const Trk::Track& track, virtual xAOD::TrackParticle* createParticle(
xAOD::TrackParticleContainer* container, const EventContext& ctx,
const xAOD::Vertex* vxCandidate, const Trk::Track& track,
xAOD::ParticleHypothesis prtOrigin, xAOD::TrackParticleContainer* container,
const Trk::PRDtoTrackMap* prd_to_track_map) const override; const xAOD::Vertex* vxCandidate,
xAOD::ParticleHypothesis prtOrigin,
const Trk::PRDtoTrackMap* prd_to_track_map) const override final;
/** Method to construct a TrackParticle from a passed Track. Currently, it /** Method to construct a TrackParticle from a passed Track. Currently, it
will ONLY fill the MeasuredPerigee i.e. the TrackParticle will not be complete will ONLY fill the MeasuredPerigee i.e. the TrackParticle will not be complete
...@@ -117,21 +122,28 @@ public: ...@@ -117,21 +122,28 @@ public:
@param prtOrigin @param prtOrigin
@param prd_to_track_map an optional PRD-to-track map to compute shared hits. @param prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/ */
virtual xAOD::TrackParticle* createParticle(const ElementLink<TrackCollection>& trackLink, virtual xAOD::TrackParticle* createParticle(
xAOD::TrackParticleContainer* container, const EventContext& ctx,
const xAOD::Vertex* vxCandidate, const ElementLink<TrackCollection>& trackLink,
xAOD::ParticleHypothesis prtOrigin, xAOD::TrackParticleContainer* container,
const Trk::PRDtoTrackMap* prd_to_track_map) const override; const xAOD::Vertex* vxCandidate,
xAOD::ParticleHypothesis prtOrigin,
const Trk::PRDtoTrackMap* prd_to_track_map) const override final;
/** create a xAOD::TrackParticle out of constituents */ /** create a xAOD::TrackParticle out of constituents */
virtual xAOD::TrackParticle* createParticle(const Perigee* perigee, virtual xAOD::TrackParticle* createParticle(
const FitQuality* fq, const EventContext& ctx,
const TrackInfo* trackInfo, const Perigee* perigee,
const TrackSummary* summary, const FitQuality* fq,
const std::vector<const Trk::TrackParameters*>& parameters, const TrackInfo* trackInfo,
const std::vector<xAOD::ParameterPosition>& positions, const TrackSummary* summary,
xAOD::ParticleHypothesis prtOrigin, const std::vector<const Trk::TrackParameters*>& parameters,
xAOD::TrackParticleContainer* container) const override; const std::vector<xAOD::ParameterPosition>& positions,
xAOD::ParticleHypothesis prtOrigin,
xAOD::TrackParticleContainer* container) const override final;
virtual const InDet::BeamSpotData* CacheBeamSpotData(
const EventContext& ctx) const override final;
/** Method to set FitQuality of a xAOD::TrackParticle */ /** Method to set FitQuality of a xAOD::TrackParticle */
void setFitQuality(xAOD::TrackParticle& tp, const FitQuality& fq) const; void setFitQuality(xAOD::TrackParticle& tp, const FitQuality& fq) const;
...@@ -142,15 +154,19 @@ public: ...@@ -142,15 +154,19 @@ public:
xAOD::ParticleHypothesis prtOrigin) const; xAOD::ParticleHypothesis prtOrigin) const;
/** Method to set TrackSummary of a xAOD::TrackParticle */ /** Method to set TrackSummary of a xAOD::TrackParticle */
void setTrackSummary(xAOD::TrackParticle& tp, const TrackSummary& summary) const; void setTrackSummary(xAOD::TrackParticle& tp,
const TrackSummary& summary) const;
/** Method to set Defining parameters of a xAOD::TrackParticle */ /** Method to set Defining parameters of a xAOD::TrackParticle */
void setDefiningParameters(xAOD::TrackParticle& tp, const Perigee& perigee) const; void setDefiningParameters(xAOD::TrackParticle& tp,
const Perigee& perigee) const;
/** Method to set parameters of a xAOD::TrackParticle */ /** Method to set parameters of a xAOD::TrackParticle */
void setParameters(xAOD::TrackParticle& tp, void setParameters(
const std::vector<const Trk::TrackParameters*>& parameters, const EventContext& ctx,
const std::vector<xAOD::ParameterPosition>& positions) const; xAOD::TrackParticle& tp,
const std::vector<const Trk::TrackParameters*>& parameters,
const std::vector<xAOD::ParameterPosition>& positions) const;
void setTilt(xAOD::TrackParticle& tp, float tiltx, float tilty) const; void setTilt(xAOD::TrackParticle& tp, float tiltx, float tilty) const;
...@@ -163,8 +179,6 @@ public: ...@@ -163,8 +179,6 @@ public:
/** Get the name used for the decoration of the track particle with the number /** Get the name used for the decoration of the track particle with the number
* of used hits for TRT dE/dx computation.*/ * of used hits for TRT dE/dx computation.*/
static const std::string& trtdEdxUsedHitsAuxName() { return s_trtdEdxUsedHitsDecorationName; } static const std::string& trtdEdxUsedHitsAuxName() { return s_trtdEdxUsedHitsDecorationName; }
virtual const InDet::BeamSpotData* CacheBeamSpotData(const ::EventContext& ctx) const override;
private: private:
void compare(const Rec::TrackParticle& tp, const xAOD::TrackParticle& tpx) const; void compare(const Rec::TrackParticle& tp, const xAOD::TrackParticle& tpx) const;
void compare(const TrackParameters& tp1, const TrackParameters& tp2) const; void compare(const TrackParameters& tp1, const TrackParameters& tp2) const;
...@@ -208,12 +222,12 @@ private: ...@@ -208,12 +222,12 @@ private:
/** The pairs if enums of an eProbability which is added as a decoration to /** The pairs if enums of an eProbability which is added as a decoration to
* the track particle and the name of the decoration.*/ * the track particle and the name of the decoration.*/
std::vector<std::pair<SG::AuxElement::Decorator<float>, Trk::eProbabilityType>> m_decorateEProbabilities; std::vector<std::pair<SG::AuxElement::Accessor<float>, Trk::eProbabilityType>> m_decorateEProbabilities;
std::vector<std::pair<SG::AuxElement::Decorator<uint8_t>, Trk::SummaryType>> m_decorateSummaryTypes; std::vector<std::pair<SG::AuxElement::Accessor<uint8_t>, Trk::SummaryType>> m_decorateSummaryTypes;
/** Name used for the decoration of the track particle with TRT dE/dx .*/ /** Name used for the decoration of the track particle with TRT dE/dx .*/
static const std::string s_trtdEdxUsedHitsDecorationName; static const std::string s_trtdEdxUsedHitsDecorationName;
static const SG::AuxElement::Decorator<uint8_t> s_trtdEdxUsedHitsDecoration; static const SG::AuxElement::Accessor<uint8_t> s_trtdEdxUsedHitsDecoration;
bool m_doIBL; bool m_doIBL;
bool m_useTrackSummaryTool; bool m_useTrackSummaryTool;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "GaudiKernel/IAlgTool.h" #include "GaudiKernel/IAlgTool.h"
#include "GaudiKernel/EventContext.h" #include "GaudiKernel/EventContext.h"
#include "GaudiKernel/ThreadLocalContext.h"
#include "TrkParticleBase/TrackParticleBase.h" // to know TrackParticleOrigin enum #include "TrkParticleBase/TrackParticleBase.h" // to know TrackParticleOrigin enum
#include "TrkTrack/TrackCollection.h" #include "TrkTrack/TrackCollection.h"
#include "AthLinks/ElementLink.h" #include "AthLinks/ElementLink.h"
...@@ -49,58 +50,137 @@ namespace Trk ...@@ -49,58 +50,137 @@ namespace Trk
@param track Pointer to a valid track (i.e. do not pass a zero!). Ownership is not taken (i.e. it will not be deleted) @param track Pointer to a valid track (i.e. do not pass a zero!). Ownership is not taken (i.e. it will not be deleted)
@param vxCandidate Pointer to a valid vxCandidate (i.e. do not pass a zero!). Ownership is not taken (i.e. it will not be deleted) @param vxCandidate Pointer to a valid vxCandidate (i.e. do not pass a zero!). Ownership is not taken (i.e. it will not be deleted)
@param prtOrigin @param prtOrigin
@warning In my opinion, the interface is not optimal - we're not taking ownership of the Trk::Track or Vx::Candidate, */
so they should be passed by reference. virtual Rec::TrackParticle* createParticle(
*/ const EventContext& ctx,
virtual Rec::TrackParticle* createParticle( const Trk::Track* track, const Trk::Track* track,
const Trk::VxCandidate* vxCandidate = nullptr, const Trk::VxCandidate* vxCandidate = nullptr,
Trk::TrackParticleOrigin prtOrigin = Trk::NoVtx) const =0; // @TODO can this be removed ? Trk::TrackParticleOrigin prtOrigin = Trk::NoVtx) const = 0;
Rec::TrackParticle* createParticle(
const Trk::Track* track,
const Trk::VxCandidate* vxCandidate = nullptr,
Trk::TrackParticleOrigin prtOrigin = Trk::NoVtx) const
{
return createParticle(
Gaudi::Hive::currentContext(), track, vxCandidate, prtOrigin);
}
/** Method to construct a xAOD::TrackParticle from a Rec::TrackParticle. /** Method to construct a xAOD::TrackParticle from a Rec::TrackParticle.
@param track particle @param track particle
@param TrackParticleContainer needed to have an AuxStore, if provided particle will be added to store which takes ownership @param TrackParticleContainer needed to have an AuxStore, if provided
particle will be added to store which takes ownership
*/ */
virtual xAOD::TrackParticle* createParticle( const Rec::TrackParticle& trackParticle, xAOD::TrackParticleContainer* container=nullptr ) const = 0; virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
/** Method to construct a TrackParticle from a passed Track. Currently, it will ONLY fill the MeasuredPerigee const Rec::TrackParticle& trackParticle,
i.e. the TrackParticle will not be complete xAOD::TrackParticleContainer* container = nullptr) const = 0;
xAOD::TrackParticle* createParticle(
const Rec::TrackParticle& trackParticle,
xAOD::TrackParticleContainer* container = nullptr) const
{
return createParticle(
Gaudi::Hive::currentContext(), trackParticle, container);
}
/** Method to construct a TrackParticle from a passed Track.
@param track element link to the track is not set, use the method with the element link if you want the link as well @param track element link to the track is not set, use the method with the element link if you want the link as well
@param TrackParticleContainer needed to have an AuxStore, if provided particle will be added to store which takes ownership @param TrackParticleContainer needed to have an AuxStore, if provided particle will be added to store which takes ownership
@param xAOD::Vertex Pointer to a valid vxCandidate (i.e. do not pass a zero!). Ownership is not taken (i.e. it will not be deleted) @param xAOD::Vertex Pointer to a vxCandidate . Ownership is not taken
@param prtOrigin @param prtOrigin
@param prd_to_track_map an optional PRD-to-track map to compute shared hits. @param prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/ */
virtual xAOD::TrackParticle* createParticle( const Trk::Track& track, virtual xAOD::TrackParticle* createParticle(
xAOD::TrackParticleContainer* container=nullptr, const EventContext& ctx,
const xAOD::Vertex* vxCandidate = nullptr, const Trk::Track& track,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis, xAOD::TrackParticleContainer* container = nullptr,
const Trk::PRDtoTrackMap *prd_to_track_map = nullptr) const =0; const xAOD::Vertex* vxCandidate = nullptr,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
/** Method to construct a TrackParticle from a passed Track. Currently, it will ONLY fill the MeasuredPerigee const Trk::PRDtoTrackMap* prd_to_track_map = nullptr) const = 0;
i.e. the TrackParticle will not be complete
xAOD::TrackParticle* createParticle(
const Trk::Track& track,
xAOD::TrackParticleContainer* container = nullptr,
const xAOD::Vertex* vxCandidate = nullptr,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
const Trk::PRDtoTrackMap* prd_to_track_map = nullptr) const
{
return createParticle(Gaudi::Hive::currentContext(),
track,
container,
vxCandidate,
prtOrigin,
prd_to_track_map);
}
/** Method to construct a TrackParticle from a passed Track.
@param track element link to a valid track (i.e. do not pass a zero!). @param track element link to a valid track (i.e. do not pass a zero!).
@param TrackParticleContainer needed to have an AuxStore, if provided particle will be added to store which takes ownership @param TrackParticleContainer needed to have an AuxStore, if provided particle will be added to store which takes ownership
@param xAOD::Vertex Pointer to a valid vxCandidate (i.e. do not pass a zero!). Ownership is not taken (i.e. it will not be deleted) @param xAOD::Vertex Pointer to a vxCandidate.
@param prtOrigin @param prtOrigin
@param prd_to_track_map an optional PRD-to-track map to compute shared hits. @param prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/ */
virtual xAOD::TrackParticle* createParticle( const ElementLink<TrackCollection>& trackLink, virtual xAOD::TrackParticle* createParticle(
xAOD::TrackParticleContainer* container=nullptr, const EventContext& ctx,
const xAOD::Vertex* vxCandidate = nullptr, const ElementLink<TrackCollection>& trackLink,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis, xAOD::TrackParticleContainer* container = nullptr,
const Trk::PRDtoTrackMap *prd_to_track_map = nullptr) const =0; const xAOD::Vertex* vxCandidate = nullptr,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
/** create a xAOD::TrackParticle out of constituents (please don't use this - it will eventually be removed) */ const Trk::PRDtoTrackMap* prd_to_track_map = nullptr) const = 0;
virtual xAOD::TrackParticle* createParticle( const Perigee* perigee, const FitQuality* fq,
const TrackInfo* trackInfo, const TrackSummary* summary, xAOD::TrackParticle* createParticle(
const std::vector<const Trk::TrackParameters*>& parameters, const ElementLink<TrackCollection>& trackLink,
const std::vector< xAOD::ParameterPosition>& positions, xAOD::TrackParticleContainer* container = nullptr,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis, const xAOD::Vertex* vxCandidate = nullptr,
xAOD::TrackParticleContainer* container = nullptr ) const = 0; xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
const Trk::PRDtoTrackMap* prd_to_track_map = nullptr) const
/** Convenience method to retrieve Beamspot Data object -- cache this once per event for optimal performance */ {
virtual const InDet::BeamSpotData* CacheBeamSpotData(const ::EventContext &ctx) const =0; return createParticle(Gaudi::Hive::currentContext(),
trackLink,
container,
vxCandidate,
prtOrigin,
prd_to_track_map);
}
/** create a xAOD::TrackParticle out of constituents (please don't use this
* - it will eventually be removed) */
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
const Perigee* perigee,
const FitQuality* fq,
const TrackInfo* trackInfo,
const TrackSummary* summary,
const std::vector<const Trk::TrackParameters*>& parameters,
const std::vector<xAOD::ParameterPosition>& positions,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
xAOD::TrackParticleContainer* container = nullptr) const = 0;
xAOD::TrackParticle* createParticle(
const Perigee* perigee,
const FitQuality* fq,
const TrackInfo* trackInfo,
const TrackSummary* summary,
const std::vector<const Trk::TrackParameters*>& parameters,
const std::vector<xAOD::ParameterPosition>& positions,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
xAOD::TrackParticleContainer* container = nullptr) const
{
return createParticle(Gaudi::Hive::currentContext(),
perigee,
fq,
trackInfo,
summary,
parameters,
positions,
prtOrigin,
container);
}
/** Convenience method to retrieve Beamspot Data object */
virtual const InDet::BeamSpotData* CacheBeamSpotData(
const EventContext& ctx) const = 0;
}; };
} // end of namespace } // end of namespace
......
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