29 ISvcLocator* pSvcLocator)
53 return StatusCode::SUCCESS;
57EMBremCollectionBuilder::EMBremCollectionBuilder::finalize()
59 ATH_MSG_INFO(
"====> GSF fitting Statistics ============");
61 ATH_MSG_INFO(
"Failed Fit Tracks: " << m_FailedFitTracks);
62 ATH_MSG_INFO(
"Not refitted due to selection: " << m_FailedSiliconRequirFit);
63 ATH_MSG_INFO(
"<========================================");
64 return StatusCode::SUCCESS;
87 std::make_unique<xAOD::TrackParticleContainer>(),
88 std::make_unique<xAOD::TrackParticleAuxContainer>()));
100 std::vector<const xAOD::TrackParticle*> siliconTrkTracks;
101 siliconTrkTracks.reserve(16);
102 std::vector<TrackWithIndex> trtAloneTrkTracks;
103 trtAloneTrkTracks.reserve(8);
106 ATH_CHECK(trackParticle->trackLink().isValid());
107 const Trk::Track* trktrack = trackParticle->track();
113 siliconTrkTracks.push_back(trackParticle);
116 trtAloneTrkTracks.emplace_back(std::make_unique<Trk::Track>(*trktrack),
117 trackParticle->index());
122 std::vector<TrackWithIndex> refitted;
123 refitted.reserve(siliconTrkTracks.size());
124 std::vector<TrackWithIndex> failedfit;
136 const size_t refittedCount = refitted.size();
137 const size_t failedCount = failedfit.size();
138 const size_t trtCount = trtAloneTrkTracks.size();
139 const size_t totalCount = refittedCount + failedCount + trtCount;
142 cPtrTracks->
reserve(totalCount);
143 cPtrTrkPart->
reserve(totalCount);
157 return StatusCode::SUCCESS;
162 const EventContext& ctx,
163 const std::vector<const xAOD::TrackParticle*>& input,
164 std::vector<TrackWithIndex>& refitted,
165 std::vector<TrackWithIndex>& failedfit)
const
170 StatusCode status =
m_trkRefitTool->refitTrack(ctx, track, cache);
171 if (status == StatusCode::SUCCESS) {
173 refitted.emplace_back(std::move(cache.
refittedTrack), in->index());
176 failedfit.emplace_back(std::make_unique<Trk::Track>(*track), in->index());
179 return StatusCode::SUCCESS;
184 const EventContext& ctx,
185 std::vector<TrackWithIndex>& refitted,
186 std::vector<TrackWithIndex>& failedfit,
187 std::vector<TrackWithIndex>& trtAlone,
194 for (
auto& trk : refitted) {
198 finalTrkPartContainer,
199 inputTrkPartContainer,
203 for (
auto& trk : failedfit) {
207 finalTrkPartContainer,
208 inputTrkPartContainer,
212 for (
auto& trk : trtAlone) {
216 finalTrkPartContainer,
217 inputTrkPartContainer,
220 return StatusCode::SUCCESS;
225 const EventContext& ctx,
230 bool isRefitted)
const
239 "Could not create TrackParticle!!! for Track: " << *(trk_info.
track));
240 return StatusCode::SUCCESS;
248 tP(
"originalTrackParticle");
250 *inputTrkPartContainer, origIndex, ctx);
251 tP(*aParticle) = linkToOriginal;
257 (*rtsos)->trackParameters() !=
nullptr &&
258 (*rtsos)->measurementOnTrack() !=
nullptr &&
259 !(*rtsos)->measurementOnTrack()->type(
261 QoverPLast = (*rtsos)->trackParameters()->parameters()[
Trk::qOverP];
266 QoverPLM(*aParticle) = QoverPLast;
282 *finalTracks, finalTracks->
size() - 1, ctx);
284 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
An algorithm that can be simultaneously executed in multiple threads.
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
const T * at(size_type n) const
Access an element, as an rvalue.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const_reverse_iterator rbegin() const noexcept
Return a const_reverse_iterator pointing past the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
Gaudi::Property< bool > m_doTruth
Option to do truth.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
ToolHandle< Trk::ITrackSlimmingTool > m_slimTool
Tool to slim tracks.
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_OutputTrkPartContainerKey
Gaudi::Property< bool > m_doTRT
Option to copy TRT holes estimation.
std::atomic_uint m_FailedFitTracks
Gaudi::Property< bool > m_doHGTD
Option to copy HGTD time to new gsf tracks.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_selectedTrackParticleContainerKey
Names of input output collections.
StatusCode createCollections(const EventContext &ctx, std::vector< TrackWithIndex > &refitted, std::vector< TrackWithIndex > &failedfit, std::vector< TrackWithIndex > &trtAlone, TrackCollection *finalTracks, xAOD::TrackParticleContainer *finalTrkPartContainer, const xAOD::TrackParticleContainer *inputTrkPartContainer) const
StatusCode createNew(const EventContext &ctx, TrackWithIndex &Info, TrackCollection *finalTracks, xAOD::TrackParticleContainer *finalTrkPartContainer, const xAOD::TrackParticleContainer *inputTrkPartContainer, bool isRefitted) const
Gaudi::Property< bool > m_doSCT
Option to copy SCT holes estimation.
virtual StatusCode initialize() override final
ToolHandle< IegammaTrkRefitterTool > m_trkRefitTool
The track refitter.
std::atomic_uint m_FailedSiliconRequirFit
Gaudi::Property< bool > m_doSlimTrkTracks
Option to slim the Trk::Tracks.
ToolHandle< Trk::ITrackParticleCreatorTool > m_particleCreatorTool
Tool to create track particle.
SG::WriteHandleKey< TrackCollection > m_OutputTrackContainerKey
StatusCode refitTracks(const EventContext &ctx, const std::vector< const xAOD::TrackParticle * > &input, std::vector< TrackWithIndex > &refitted, std::vector< TrackWithIndex > &failedfit) const
EMBremCollectionBuilder(const std::string &name, ISvcLocator *pSvcLocator)
Gaudi::Property< int > m_MinNoSiHits
@Cut on minimum silicon hits
std::atomic_uint m_RefittedTracks
virtual StatusCode execute(const EventContext &ctx) const override final
Gaudi::Property< bool > m_doPix
Option to copy pixel holes estimation.
ElementLink implementation for ROOT usage.
SG::Accessor< T, ALLOC > Accessor
const_pointer_type ptr()
Dereference the pointer.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
void setTrackLink(const ElementLink< TrackCollection > &track)
Set the link to the original track.
@ PseudoMeasurementOnTrack
void copy(xAOD::TrackParticle &created, const xAOD::TrackParticle &original, const egammaCopyTrackParticleInfo::ToCopy &toCopy)
int summaryValueInt(const xAOD::TrackParticle &tp, const xAOD::SummaryType &info, int deflt=-999)
return the summary value for a TrackParticle or default value (-999) (to be used mostly in python whe...
TrackParticle_v1 TrackParticle
Reference the current persistent version:
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Helper struct to store the Trk::Track corresponding to a TrackParticle and the index of the Track Par...
std::unique_ptr< Trk::Track > track