![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
20 ISvcLocator* pSvcLocator)
34 return StatusCode::SUCCESS;
45 trk_ptkl_container_handle.
cptr();
46 if (not track_particles) {
48 "[TrackTimeDefAndQualityAlg] TrackParticleContainer not found, "
50 return StatusCode::FAILURE;
62 for (
const auto* track_ptkl : *track_particles) {
76 short prime_pattern = 0x0;
77 for (
short i = 0;
i < n_hgtd_layers;
i++) {
78 if (
res.m_hits.at(
i).m_isprime) {
79 prime_pattern |= (1 <<
i);
85 time_handle(*track_ptkl) =
res.m_time;
86 timeres_handle(*track_ptkl) =
res.m_resolution;
87 hasValidTime_handle(*track_ptkl) =
res.m_hasValidTime;
88 summary_handle(*track_ptkl) =
res.m_field;
90 return StatusCode::SUCCESS;
101 std::array<Hit, n_hgtd_layers> valid_hits =
getValidHits(track_particle);
104 result.m_hits = valid_hits;
108 result.m_hasValidTime = 0;
114 short nhits = std::count_if(valid_hits.begin(), valid_hits.end(),
115 [](
const Hit& hit) { return hit.m_isvalid; });
121 result.m_hasValidTime = recoed_pattern ? 1 : 0;
123 }
else if (nhits == 2) {
131 result.m_hasValidTime = 1;
149 nhits = std::count_if(valid_hits.begin(), valid_hits.end(),
150 [](
const Hit& hit) { return hit.m_isvalid; });
163 result.m_hasValidTime = 1;
176 result.m_hasValidTime = 1;
182 std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>
188 std::vector<float>
times = layerClusterTimeHandle(*track_particle);
192 std::vector<bool> has_clusters = layerHasExtensionHandle(*track_particle);
196 std::vector<int> hit_classification =
197 layerClusterTruthClassHandle(*track_particle);
199 std::array<Hit, n_hgtd_layers> valid_hits;
201 for (
size_t i = 0;
i < n_hgtd_layers;
i++) {
203 if (has_clusters.at(
i)) {
205 newhit.
m_isprime = hit_classification.at(
i) == 1;
209 valid_hits.at(
i) = newhit;
216 const std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>&
hits)
219 for (
short i = 0;
i < n_hgtd_layers;
i++) {
220 if (
hits.at(
i).m_isvalid) {
228 const std::array<Hit, n_hgtd_layers>&
hits)
const {
233 for (
const auto& hit :
hits) {
236 (hit.m_resolution * hit.m_resolution);
243 const std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>&
hits)
246 short n_valid = std::count_if(
hits.begin(),
hits.end(),
247 [](
const Hit& hit) { return hit.m_isvalid; });
252 std::vector<float>
times;
253 std::vector<float>
res;
254 for (
const auto& hit :
hits) {
266 const std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>&
hits)
270 for (
const auto& hit :
hits) {
280 const std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>&
hits)
284 for (
const auto& hit :
hits) {
286 sum += 1. / (hit.m_resolution * hit.m_resolution);
290 :
static_cast<float>(std::sqrt(1. /
sum));
294 std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>
hits)
const {
295 short remove_layer = -1;
296 float local_min_chi2 = 999999;
297 for (
auto& hit :
hits) {
299 bool validbuff = hit.m_isvalid;
300 hit.m_isvalid =
false;
302 hit.m_isvalid = validbuff;
303 if (local_chi2 < local_min_chi2) {
304 local_min_chi2 = local_chi2;
305 remove_layer = hit.m_layer;
312 std::array<TrackTimeDefAndQualityAlg::Hit, n_hgtd_layers>&
hits,
314 for (
auto& hit :
hits) {
315 if (hit.m_layer ==
layer) {
316 hit.m_isvalid =
false;
325 track.trackStateOnSurfaces();
332 for (
auto i = tsos->rbegin();
i != tsos->rend(); ++
i) {
333 const auto* curr_last_tsos = *
i;
334 if (not curr_last_tsos) {
338 curr_last_tsos->trackParameters() and
339 curr_last_tsos->measurementOnTrack()) {
340 return curr_last_tsos->trackParameters();
352 float abs_z = std::abs(last_hit_param->
position().z());
357 if (radius < 350 and abs_z > 2400) {
361 if (
radius > 205 and radius < 350 and abs_z > 2100) {
365 if (radius < 220 and abs_z > 2200) {
369 if (radius < 140 and abs_z > 1890) {
virtual StatusCode execute(const EventContext &ctx) const override final
void mean(std::vector< double > &bins, std::vector< double > &values, const std::vector< std::string > &files, const std::string &histname, const std::string &tplotname, const std::string &label="")
virtual StatusCode initialize() override final
bool passesDeltaT(const std::array< Hit, n_hgtd_layers > &hits) const
Checks two hits for time compatibility.
const_pointer_type cptr()
Dereference the pointer.
void setLayerAsInvalid(std::array< Hit, n_hgtd_layers > &hits, short layer) const
Given a layer number, the hit sitting on this layer is flagged as invalid.
const Amg::Vector3D & position() const
Access method for the position.
bool lastHitIsOnLastSurface(const xAOD::TrackParticle &track_particle) const
Checks if the last hit on track was found on a pre-specified set of Pixel and Strip layers close to t...
short findLayerWithBadChi2(std::array< Hit, n_hgtd_layers > hits) const
Identifies time outliers by finding the layer within which a hit contributes negatively to the overal...
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterTruthClassKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_hasValidTime_dec_key
const Trk::TrackParameters * getLastHitOnTrack(const Trk::Track &track) const
An algorithm that can be simultaneously executed in multiple threads.
Handle class for reading a decoration on an object.
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration.
float trackTimeResolution(const std::array< Hit, n_hgtd_layers > &hits) const
Calculates the combined resolution.
::StatusCode StatusCode
StatusCode definition for legacy code.
Handle class for adding a decoration to an object.
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_summarypattern_dec_key
short getValidPattern(const std::array< Hit, n_hgtd_layers > &hits) const
Returns the pattern of valid hits in HGTD as a 4-bit bitfield, where a 1 encodes that a valid hit was...
std::pair< std::vector< unsigned int >, bool > res
Handle class for adding a decoration to an object.
double chi2(TH1 *h0, TH1 *h1)
std::array< Hit, n_hgtd_layers > getValidHits(const xAOD::TrackParticle *track_particle) const
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
float calculateChi2(const std::array< Hit, n_hgtd_layers > &hits) const
Calculates the chi2 of the hit times given their resolution.
CleaningResult runTimeConsistencyCuts(const xAOD::TrackParticle *track_particle) const
float meanTime(const std::array< Hit, n_hgtd_layers > &hits) const
Calculates the arithmetic mean of the valid hit times;.
FloatProperty m_default_time_res
FloatProperty m_deltat_cut
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterTimeKey
const short m_comp_ptrn_sft
FloatProperty m_default_time
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_time_dec_key
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
const short m_holes_ptrn_sft
TrackTimeDefAndQualityAlg(const std::string &name, ISvcLocator *pSvcLocator)
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_time_res_dec_key
const short m_primes_ptrn_sft
Handle class for reading a decoration on an object.
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_layerHasExtensionKey
const short m_recoed_ptrn_sft
Class describing a TrackParticle.
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
Handle class for reading from StoreGate.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
FloatProperty m_chi2_threshold