Skip to content
Snippets Groups Projects
Commit 833c0f58 authored by Christos Anastopoulos's avatar Christos Anastopoulos
Browse files

TrackParticleCreator : EventContext aware . Also pass the EventContext from...

TrackParticleCreator : EventContext aware . Also pass the EventContext from the EMBremCollectionBuilder
parent 3e754a82
No related branches found
No related tags found
No related merge requests found
......@@ -106,7 +106,7 @@ EMBremCollectionBuilder::execute(const EventContext& ctx) const
std::vector<const xAOD::TrackParticle*> siliconTrkTracks;
siliconTrkTracks.reserve(16);
std::vector<TrackWithIndex> trtAloneTrkTracks;
trtAloneTrkTracks.reserve(16);
trtAloneTrkTracks.reserve(8);
for(const xAOD::TrackParticle* track : *selectedTracks){
const Trk::Track* trktrack{nullptr};
if ( track->trackLink().isValid() ){
......@@ -209,21 +209,25 @@ EMBremCollectionBuilder::createCollections(
}
for (auto& Info : refitted){
ATH_CHECK(createNew(Info,finalTracks,finalTrkPartContainer,AllTracks));
ATH_CHECK(
createNew(ctx, Info, finalTracks, finalTrkPartContainer, AllTracks));
}
for (auto& Info : failedfit){
ATH_CHECK(createNew(Info,finalTracks,finalTrkPartContainer,AllTracks));
ATH_CHECK(
createNew(ctx, Info, finalTracks, finalTrkPartContainer, AllTracks));
}
for (auto& Info : trtAlone){
ATH_CHECK(createNew(Info,finalTracks,finalTrkPartContainer,AllTracks));
ATH_CHECK(
createNew(ctx, Info, finalTracks, finalTrkPartContainer, AllTracks));
}
return StatusCode::SUCCESS;
}
StatusCode
EMBremCollectionBuilder::createNew(
const EventContext& ctx,
TrackWithIndex& Info,
TrackCollection* finalTracks,
xAOD::TrackParticleContainer* finalTrkPartContainer,
......@@ -236,7 +240,7 @@ EMBremCollectionBuilder::createNew(
* Create TrackParticle it should be now owned by finalTrkPartContainer
*/
xAOD::TrackParticle* aParticle = m_particleCreatorTool->createParticle(
*(Info.track), finalTrkPartContainer, nullptr, xAOD::electron);
ctx, *(Info.track), finalTrkPartContainer, nullptr, xAOD::electron);
if (!aParticle) {
ATH_MSG_WARNING(
......
......@@ -75,7 +75,8 @@ private:
xAOD::TrackParticleContainer* finalTrkPartContainer,
const xAOD::TrackParticleContainer* AllTracks) const;
StatusCode createNew(TrackWithIndex& Info,
StatusCode createNew(const EventContext& ctx,
TrackWithIndex& Info,
TrackCollection* finalTracks,
xAOD::TrackParticleContainer* finalTrkPartContainer,
const xAOD::TrackParticleContainer* AllTracks) const;
......
......@@ -15,7 +15,6 @@ changes : 11.02.04 added docu
#define TRKPARTICLECREATOR_PARTICLECREATORTOOL_H
#include "AthenaBaseComps/AthAlgTool.h"
#include "GaudiKernel/EventContext.h"
#include "TrkToolInterfaces/ITrackParticleCreatorTool.h"
#include "AthContainers/AuxElement.h"
......@@ -77,17 +76,21 @@ public:
ownership of the Trk::Track or Vx::Candidate, so they should be passed by
reference.
*/
virtual Rec::TrackParticle* createParticle(const Trk::Track* track,
const Trk::VxCandidate* vxCandidate,
Trk::TrackParticleOrigin prtOrigin) const override;
virtual Rec::TrackParticle* createParticle(
const EventContext& ctx,
const Trk::Track* track,
const Trk::VxCandidate* vxCandidate,
Trk::TrackParticleOrigin prtOrigin) const override final;
/** Method to construct a xAOD::TrackParticle from a Rec::TrackParticle.
@param track particle
@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) const override;
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
const Rec::TrackParticle& trackParticle,
xAOD::TrackParticleContainer* container) const override final;
/** Method to construct a xAOD::TrackParticle from a passed Track. Currently,
it will ONLY fill the MeasuredPerigee i.e. the TrackParticle will not be
......@@ -101,11 +104,13 @@ public:
@param prtOrigin Particle type
@param prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/
virtual xAOD::TrackParticle* createParticle(const Trk::Track& track,
xAOD::TrackParticleContainer* container,
const xAOD::Vertex* vxCandidate,
xAOD::ParticleHypothesis prtOrigin,
const Trk::PRDtoTrackMap* prd_to_track_map) const override;
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
const Trk::Track& track,
xAOD::TrackParticleContainer* container,
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
will ONLY fill the MeasuredPerigee i.e. the TrackParticle will not be complete
......@@ -117,21 +122,28 @@ public:
@param prtOrigin
@param prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/
virtual xAOD::TrackParticle* createParticle(const ElementLink<TrackCollection>& trackLink,
xAOD::TrackParticleContainer* container,
const xAOD::Vertex* vxCandidate,
xAOD::ParticleHypothesis prtOrigin,
const Trk::PRDtoTrackMap* prd_to_track_map) const override;
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
const ElementLink<TrackCollection>& trackLink,
xAOD::TrackParticleContainer* container,
const xAOD::Vertex* vxCandidate,
xAOD::ParticleHypothesis prtOrigin,
const Trk::PRDtoTrackMap* prd_to_track_map) const override final;
/** create a xAOD::TrackParticle out of constituents */
virtual 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::TrackParticleContainer* container) const override;
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::TrackParticleContainer* container) const override final;
virtual const InDet::BeamSpotData* CacheBeamSpotData(
const EventContext& ctx) const override final;
/** Method to set FitQuality of a xAOD::TrackParticle */
void setFitQuality(xAOD::TrackParticle& tp, const FitQuality& fq) const;
......@@ -142,15 +154,19 @@ public:
xAOD::ParticleHypothesis prtOrigin) const;
/** 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 */
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 */
void setParameters(xAOD::TrackParticle& tp,
const std::vector<const Trk::TrackParameters*>& parameters,
const std::vector<xAOD::ParameterPosition>& positions) const;
void setParameters(
const EventContext& ctx,
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;
......@@ -163,8 +179,6 @@ public:
/** Get the name used for the decoration of the track particle with the number
* of used hits for TRT dE/dx computation.*/
static const std::string& trtdEdxUsedHitsAuxName() { return s_trtdEdxUsedHitsDecorationName; }
virtual const InDet::BeamSpotData* CacheBeamSpotData(const ::EventContext& ctx) const override;
private:
void compare(const Rec::TrackParticle& tp, const xAOD::TrackParticle& tpx) const;
void compare(const TrackParameters& tp1, const TrackParameters& tp2) const;
......@@ -208,12 +222,12 @@ private:
/** The pairs if enums of an eProbability which is added as a decoration to
* 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::Decorator<uint8_t>, Trk::SummaryType>> m_decorateSummaryTypes;
std::vector<std::pair<SG::AuxElement::Accessor<float>, Trk::eProbabilityType>> m_decorateEProbabilities;
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 .*/
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_useTrackSummaryTool;
......
......@@ -10,6 +10,7 @@
#include "GaudiKernel/IAlgTool.h"
#include "GaudiKernel/EventContext.h"
#include "GaudiKernel/ThreadLocalContext.h"
#include "TrkParticleBase/TrackParticleBase.h" // to know TrackParticleOrigin enum
#include "TrkTrack/TrackCollection.h"
#include "AthLinks/ElementLink.h"
......@@ -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 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
@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 Trk::Track* track,
const Trk::VxCandidate* vxCandidate = nullptr,
Trk::TrackParticleOrigin prtOrigin = Trk::NoVtx) const =0; // @TODO can this be removed ?
*/
virtual Rec::TrackParticle* createParticle(
const EventContext& ctx,
const Trk::Track* track,
const Trk::VxCandidate* vxCandidate = nullptr,
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.
@param track particle
@param TrackParticleContainer needed to have an AuxStore, if provided particle will be added to store which takes ownership
@param track particle
@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;
/** Method to construct a TrackParticle from a passed Track. Currently, it will ONLY fill the MeasuredPerigee
i.e. the TrackParticle will not be complete
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
const Rec::TrackParticle& trackParticle,
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 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 prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/
virtual 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 =0;
/** Method to construct a TrackParticle from a passed Track. Currently, it will ONLY fill the MeasuredPerigee
i.e. the TrackParticle will not be complete
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
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 = 0;
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 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 prd_to_track_map an optional PRD-to-track map to compute shared hits.
*/
virtual xAOD::TrackParticle* createParticle( const ElementLink<TrackCollection>& trackLink,
xAOD::TrackParticleContainer* container=nullptr,
const xAOD::Vertex* vxCandidate = nullptr,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
const Trk::PRDtoTrackMap *prd_to_track_map = nullptr) const =0;
/** create a xAOD::TrackParticle out of constituents (please don't use this - it will eventually be removed) */
virtual 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 = 0;
/** 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;
virtual xAOD::TrackParticle* createParticle(
const EventContext& ctx,
const ElementLink<TrackCollection>& trackLink,
xAOD::TrackParticleContainer* container = nullptr,
const xAOD::Vertex* vxCandidate = nullptr,
xAOD::ParticleHypothesis prtOrigin = xAOD::noHypothesis,
const Trk::PRDtoTrackMap* prd_to_track_map = nullptr) const = 0;
xAOD::TrackParticle* createParticle(
const ElementLink<TrackCollection>& trackLink,
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(),
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
......
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