24 return StatusCode::SUCCESS;
41 return StatusCode::SUCCESS;
54 static const SG::AuxElement::Accessor<int> acc_gsfCaloStatus(
"gsfCaloStatus");
55 static const SG::AuxElement::Accessor<float> acc_gsfChi2oNDF(
56 "gsfChiSquareOverNDOF");
57 static const SG::AuxElement::Accessor<float> acc_gsfCaloChi2oNDF(
58 "gsfCaloChiSquareOverNDOF");
59 static const SG::AuxElement::Accessor<ElementLink<xAOD::ElectronContainer>>
60 acc_usedElectronLink(
"usedElectronLink");
61 static const SG::AuxElement::ConstAccessor<
63 read_originalTP(
"originalTrackParticle");
64 static const SG::AuxElement::Accessor<
66 write_originalTP(
"originalTrackParticle");
73 std::make_unique<xAOD::TrackParticleContainer>(),
74 std::make_unique<xAOD::TrackParticleAuxContainer>()));
88 <<
" TrackParticle!");
95 int gsfCaloStatus = -1;
96 float gsfChiSquareOverNDOF = -1;
97 float gsfCaloChiSquareOverNDOF = -1;
119 gsfChiSquareOverNDOF = electronTrackQuality->
chiSquared() /
120 electronTrackQuality->numberDoF();
122 auto electronTrackRefit = std::make_unique<Trk::Track>();
125 cache.electron = electron;
128 if (
sc == StatusCode::SUCCESS) {
129 electronTrackRefit.reset(cache.refittedTrack.release());
138 ctx, *electronTrackRefit, cPtrTrkPart, electronTrackVertex,
140 if (electronTPRefit) {
142 auto electronTrackRefitQuality = electronTrackRefit->fitQuality();
143 gsfCaloChiSquareOverNDOF = electronTrackRefitQuality->chiSquared() /
144 electronTrackRefitQuality->numberDoF();
147 "Can't create a new xAOD::TrackParticle from the re-fitted "
148 "Trk::Track! Using the original xAOD::TrackParticle!");
154 "CALO-improved Trk::Track re-fit failed! Using the original "
155 "xAOD::TrackParticle!");
162 <<
" has a valid track particle but is a TRT-only track");
167 if (gsfCaloStatus != 1) {
170 *electronTPRefit = *electronTP;
173 acc_gsfCaloStatus(*electronTPRefit) = gsfCaloStatus;
174 acc_gsfChi2oNDF(*electronTPRefit) = gsfChiSquareOverNDOF;
175 acc_gsfCaloChi2oNDF(*electronTPRefit) = gsfCaloChiSquareOverNDOF;
181 electronTPRefit, *cPtrTrkPart);
182 dec_gsfCaloTrackLink(*electron) = linkToRefittedTrackParticle;
187 acc_usedElectronLink(*electronTPRefit) = linkToElectron;
190 if (read_originalTP.isAvailable(*electronTP)) {
191 linkToOriginal = read_originalTP(*electronTP);
193 write_originalTP(*electronTPRefit) = linkToOriginal;
197 return StatusCode::SUCCESS;
202 bool isRefitted)
const {
205 static const SG::AuxElement::Accessor<
207 tPL(
"truthParticleLink");
208 if (tPL.isAvailable(original)) {
211 tPL(created) = linkToTruth;
213 static const SG::AuxElement::Accessor<float> tMP(
"truthMatchProbability");
214 if (tMP.isAvailable(original)) {
215 float originalProbability = tMP(original);
216 tMP(created) = originalProbability;
218 static const SG::AuxElement::Accessor<int> tT(
"truthType");
219 if (tT.isAvailable(original)) {
220 int truthType = tT(original);
221 tT(created) = truthType;
223 static const SG::AuxElement::Accessor<int> tO(
"truthOrigin");
224 if (tO.isAvailable(original)) {
225 int truthOrigin = tO(original);
226 tO(created) = truthOrigin;
267 int nPixHitsRefitted =
269 int nPixOutliersRefitted =
272 int nPixHitsOriginal =
274 int nPixOutliersOriginal =
277 int nPixHolesOriginal =
280 uint8_t nPixHolesRefitted = nPixHitsOriginal + nPixHolesOriginal +
281 nPixOutliersOriginal - nPixOutliersRefitted -
288 int nSCTHitsRefitted =
290 int nSCTOutliersRefitted =
293 int nSCTHitsOriginal =
295 int nSCTHolesOriginal =
297 int nSCTOutliersOriginal =
300 uint8_t nSCTHolesRefitted = nSCTHitsOriginal + nSCTHolesOriginal +
301 nSCTOutliersOriginal - nSCTOutliersRefitted -
308 int nTRTHitsRefitted =
310 int nTRTOutliersRefitted =
313 int nTRTHitsOriginal =
315 int nTRTHolesOriginal =
317 int nTRTOutliersOriginal =
320 uint8_t nTRTHolesRefitted = nTRTHitsOriginal + nTRTHolesOriginal +
321 nTRTOutliersOriginal - nTRTOutliersRefitted -
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Handle class for adding a decoration to an object.
xAOD::ElectronContainer * electronContainer
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
ToolHandle< Trk::ITrackParticleCreatorTool > m_particleCreatorTool
Tool to create track particle.
void copySummaryValue(const xAOD::TrackParticle &src, xAOD::TrackParticle &dest, const xAOD::SummaryType &information) const
std::atomic< unsigned int > m_noTP
std::atomic< unsigned int > m_noRefTP
SG::WriteDecorHandleKey< xAOD::ElectronContainer > m_gsfCaloTrackLinkKey
std::atomic< unsigned int > m_allElectrons
Counters.
PublicToolHandle< Trk::IExtendedTrackSummaryTool > m_trackSummaryTool
Gaudi::Property< bool > m_doTRT
Gaudi::Property< bool > m_doTruth
std::atomic< unsigned int > m_successfulCopyInfos
std::atomic< unsigned int > m_successfulFits
virtual StatusCode finalize() override final
finalize method
virtual StatusCode initialize() override final
initialize method
Gaudi::Property< int > m_minNSiHits
Minimum number of silicon hits on track before it is allowed to be refitted.
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_OutputTrkPartContainerKey
Gaudi::Property< bool > m_doSCT
std::atomic< unsigned int > m_allNewTP
SG::ReadHandleKey< xAOD::ElectronContainer > m_electronCollectionKey
std::atomic< unsigned int > m_failedFits
ToolHandle< IegammaTrkRefitterTool > m_trkRefitTool
The track refitter.
Gaudi::Property< bool > m_isAOD
std::atomic< unsigned int > m_onlyTRT
std::atomic< unsigned int > m_noTrk
Gaudi::Property< bool > m_doPix
std::atomic< unsigned int > m_tsos
void copyInfo(const xAOD::TrackParticle &original, xAOD::TrackParticle &created, bool isRefitted) const
Copy TrackParticle info from the original TP.
virtual StatusCode addBranches(const EventContext &ctx) const override final
addBranches method
ElementLink implementation for ROOT usage.
bool toIndexedElement(BaseConstReference container, index_type index)
Set link to point to given index (slower).
bool isValid() const
Check if the element can be found.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
Handle class for adding a decoration to an object.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
double chiSquared() const
returns the of the overall track fit
const FitQuality * fitQuality() const
return a pointer to the fit quality const-overload
void setTrackLink(const ElementLink< TrackCollection > &track)
Set the link to the original track.
const ElementLink< TrackCollection > & trackLink() const
Returns a link (which can be invalid) to the Trk::Track which was used to make this TrackParticle.
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
void setSummaryValue(uint8_t &value, const SummaryType &information)
Set method for TrackSummary values.
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Vertex_v1 Vertex
Define the latest version of the vertex class.
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
@ numberOfNextToInnermostPixelLayerSharedHits
number of Pixel 1st layer barrel hits shared by several tracks.
@ numberOfNextToInnermostPixelLayerSplitHits
number of Pixel 1st layer barrel hits split by cluster splitting
@ numberOfPixelSplitHits
number of Pixel all-layer hits split by cluster splitting [unit8_t].
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
@ numberOfPixelOutliers
these are the pixel outliers, including the b-layer [unit8_t].
@ numberOfTRTHits
number of TRT hits [unit8_t].
@ numberOfTRTHoles
number of TRT holes [unit8_t].
@ numberOfBLayerHits
these are the hits in the first pixel layer, i.e.
@ numberOfSCTDeadSensors
number of dead SCT sensors crossed [unit8_t].
@ numberOfBLayerSharedHits
number of Pixel b-layer hits shared by several tracks [unit8_t].
@ numberOfInnermostPixelLayerSplitHits
number of Pixel 0th layer barrel hits split by cluster splitting
@ numberOfSCTHits
number of hits in SCT [unit8_t].
@ numberOfSCTDoubleHoles
number of Holes in both sides of a SCT module [unit8_t].
@ numberOfSCTOutliers
number of SCT outliers [unit8_t].
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
@ numberOfTRTHighThresholdHits
number of TRT hits which pass the high threshold (only xenon counted) [unit8_t].
@ numberOfTRTSharedHits
number of TRT hits used by more than one track
@ numberOfTRTOutliers
number of TRT outliers [unit8_t].
@ numberOfPixelDeadSensors
number of dead pixel sensors crossed [unit8_t].
@ numberOfSCTHoles
number of SCT holes [unit8_t].