ATLAS Offline Software
TrackTimeDefAndQualityAlg.h
Go to the documentation of this file.
1 
41 #ifndef HGTD_RECALGS_TRACKTIMEDEFANDQUALITYALG_H
42 #define HGTD_RECALGS_TRACKTIMEDEFANDQUALITYALG_H
43 
45 
50 
51 namespace {
52 static constexpr unsigned short s_hgtd_layers = 4; // two double sided layers
53 } // namespace
54 
55 namespace HGTD {
56 
58 
59 private:
60  // different shift distances for bitfield definition
61  const short m_recoed_ptrn_sft = 0;
62  //const short m_exp_ptrn_sft = 4;
63  const short m_comp_ptrn_sft = 8;
64  const short m_holes_ptrn_sft = 12;
65  const short m_primes_ptrn_sft = 16;
66 
67 public:
68  TrackTimeDefAndQualityAlg(const std::string& name, ISvcLocator* pSvcLocator);
70  virtual StatusCode initialize() override final;
71  virtual StatusCode execute(const EventContext& ctx) const override final;
72 
73 private:
74  std::pair<float, float> getRadiusAndZ(const xAOD::TrackParticle& track_particle) const;
75 
76 private:
78  this, "TrackParticleContainerName", "InDetTrackParticles",
79  "Name of the TrackParticle container"};
80 
82  this, "HGTD_has_extension", m_trackParticleContainerKey, "HGTD_has_extension",
83  "deco with a handle for an extension"};
85  this, "HGTD_cluster_time", m_trackParticleContainerKey, "HGTD_cluster_time",
86  "deco with a handle for cluster time"};
89  this, "HGTD_cluster_truth_class", m_trackParticleContainerKey,
90  "HGTD_cluster_truth_class",
91  "deco with a handle for a truth time"};
92 
94  this, "time", m_trackParticleContainerKey, "time", "Time assigned to this track"};
96  this, "timeResolution", m_trackParticleContainerKey, "timeResolution",
97  "Time resolution assigned to this track"};
99  this, "hasValidTime", m_trackParticleContainerKey, "hasValidTime", "Time assigned to this track is valid"};
102  "HGTD_summaryinfo",
103  "Bitfield for working point definition"};
104 
105  Gaudi::Property<bool> m_doActs {this, "doActs", false};
106 
107  // TODO: the resolution is fixed to 0.035 ps, should add the resolution
108  // calculation after the irradiation
109  struct Hit {
110  float m_time = 0.;
111  float m_resolution = 0.035;
112  bool m_isprime = false;
113  bool m_isvalid = false;
114  short m_layer = -1;
115  };
116 
117  struct CleaningResult {
118  std::array<Hit, s_hgtd_layers> m_hits;
120  float m_time;
123  };
124 
125  FloatProperty m_chi2_threshold{
126  this, "Chi2Threshold", 1.5,
127  "Quality cut for decision to keep hits compatible in time"};
128  FloatProperty m_deltat_cut{this, "DeltaTCut", 2.0,
129  "Upper limit for a cluster delta t cut"};
130 
131  FloatProperty m_default_time{
132  this, "DefaultTime", 0.0,
133  "Default time used for tracks without HGTD timing info"};
134  // time resolution default value, set to +- half a bunch crossing, using flat
135  // distribution
136  FloatProperty m_default_time_res{
137  this, "DefaultTimeRes", 50. / std::sqrt(12.),
138  "Default time resolution used for tracks without HGTD timing info"};
139 
140  CleaningResult
141  runTimeConsistencyCuts(const std::vector<float>& times,
142  const std::vector<bool>& has_clusters,
143  const std::vector<int>& hit_classification) const;
144 
145  std::array<Hit, s_hgtd_layers>
146  getValidHits(const std::vector<float>& times,
147  const std::vector<bool>& has_clusters,
148  const std::vector<int>& hit_classification) const;
149 
157  float calculateChi2(const std::array<Hit, s_hgtd_layers>& hits) const;
158 
159  // float calculateChi2(const std::vector<Hit>& hits) const;
160 
168  bool passesDeltaT(const std::array<Hit, s_hgtd_layers>& hits) const;
169 
178  float meanTime(const std::array<Hit, s_hgtd_layers>& hits) const;
179 
183  float trackTimeResolution(const std::array<Hit, s_hgtd_layers>& hits) const;
184 
194  short findLayerWithBadChi2(std::array<Hit, s_hgtd_layers> hits) const;
195 
203  void setLayerAsInvalid(std::array<Hit, s_hgtd_layers>& hits,
204  short layer) const;
205 
215  short getValidPattern(const std::array<Hit, s_hgtd_layers>& hits) const;
216 
227  bool lastHitIsOnLastSurface(const xAOD::TrackParticle& track_particle) const;
228 
230 };
231 
232 } // namespace HGTD
233 
234 #endif // HGTD_RECALGS_TRACKTIMEDEFANDQUALITYALG_H
HGTD::TrackTimeDefAndQualityAlg::getValidHits
std::array< Hit, s_hgtd_layers > getValidHits(const std::vector< float > &times, const std::vector< bool > &has_clusters, const std::vector< int > &hit_classification) const
Definition: TrackTimeDefAndQualityAlg.cxx:211
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer >
HGTD::TrackTimeDefAndQualityAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override final
Definition: TrackTimeDefAndQualityAlg.cxx:47
HGTD::TrackTimeDefAndQualityAlg::setLayerAsInvalid
void setLayerAsInvalid(std::array< Hit, s_hgtd_layers > &hits, short layer) const
Given a layer number, the hit sitting on this layer is flagged as invalid.
Definition: TrackTimeDefAndQualityAlg.cxx:325
ReadDecorHandleKey.h
Property holding a SG store/key/clid/attr name from which a ReadDecorHandle is made.
TRTCalib_Extractor.hits
hits
Definition: TRTCalib_Extractor.py:35
SG
Forward declaration.
Definition: CaloCellPacker_400_500.h:32
HGTD::TrackTimeDefAndQualityAlg::initialize
virtual StatusCode initialize() override final
Definition: TrackTimeDefAndQualityAlg.cxx:30
HGTD::TrackTimeDefAndQualityAlg::meanTime
float meanTime(const std::array< Hit, s_hgtd_layers > &hits) const
Calculates the arithmetic mean of the valid hit times;.
Definition: TrackTimeDefAndQualityAlg.cxx:279
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:558
HGTD::TrackTimeDefAndQualityAlg::Hit::m_isvalid
bool m_isvalid
Definition: TrackTimeDefAndQualityAlg.h:113
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
AthCUDAExamples::TrackParticleContainer
vecmem::edm::container< TrackParticleInterface, vecmem::edm::type::vector< float >, vecmem::edm::type::vector< float >, vecmem::edm::type::vector< float > > TrackParticleContainer
SoA, GPU friendly TrackParticleContainer.
Definition: Control/AthenaExamples/AthExCUDA/src/TrackParticleContainer.h:46
HGTD::TrackTimeDefAndQualityAlg::CleaningResult::m_field
uint32_t m_field
Definition: TrackTimeDefAndQualityAlg.h:119
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
HGTD::TrackTimeDefAndQualityAlg::lastHitIsOnLastSurface
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...
Definition: TrackTimeDefAndQualityAlg.cxx:422
xAOD
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Definition: ICaloAffectedTool.h:24
HGTD::TrackTimeDefAndQualityAlg::m_layerClusterTruthClassKey
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterTruthClassKey
Definition: TrackTimeDefAndQualityAlg.h:88
HGTD::TrackTimeDefAndQualityAlg::Hit::m_resolution
float m_resolution
Definition: TrackTimeDefAndQualityAlg.h:111
HGTD::TrackTimeDefAndQualityAlg::CleaningResult::m_hits
std::array< Hit, s_hgtd_layers > m_hits
Definition: TrackTimeDefAndQualityAlg.h:118
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
HGTD::TrackTimeDefAndQualityAlg::m_hasValidTime_dec_key
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_hasValidTime_dec_key
Definition: TrackTimeDefAndQualityAlg.h:98
HGTD::TrackTimeDefAndQualityAlg::trackTimeResolution
float trackTimeResolution(const std::array< Hit, s_hgtd_layers > &hits) const
Calculates the combined resolution.
Definition: TrackTimeDefAndQualityAlg.cxx:293
HGTD::TrackTimeDefAndQualityAlg::getLastHitOnTrack
const Trk::TrackParameters * getLastHitOnTrack(const Trk::Track &track) const
Definition: TrackTimeDefAndQualityAlg.cxx:336
AthReentrantAlgorithm
An algorithm that can be simultaneously executed in multiple threads.
Definition: AthReentrantAlgorithm.h:74
xAOD::TrackParticle
TrackParticle_v1 TrackParticle
Reference the current persistent version:
Definition: Event/xAOD/xAODTracking/xAODTracking/TrackParticle.h:13
HGTD::TrackTimeDefAndQualityAlg
Definition: TrackTimeDefAndQualityAlg.h:57
WriteDecorHandleKey.h
Property holding a SG store/key/clid/attr name from which a WriteDecorHandle is made.
HGTD
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration.
Definition: Clustering.h:28
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
HGTD::TrackTimeDefAndQualityAlg::m_summarypattern_dec_key
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_summarypattern_dec_key
Definition: TrackTimeDefAndQualityAlg.h:101
HGTD::TrackTimeDefAndQualityAlg::runTimeConsistencyCuts
CleaningResult runTimeConsistencyCuts(const std::vector< float > &times, const std::vector< bool > &has_clusters, const std::vector< int > &hit_classification) const
Definition: TrackTimeDefAndQualityAlg.cxx:123
Trk::ParametersBase
Definition: ParametersBase.h:55
HGTD::TrackTimeDefAndQualityAlg::calculateChi2
float calculateChi2(const std::array< Hit, s_hgtd_layers > &hits) const
Calculates the chi2 of the hit times given their resolution.
Definition: TrackTimeDefAndQualityAlg.cxx:241
HGTD::TrackTimeDefAndQualityAlg::CleaningResult::m_time
float m_time
Definition: TrackTimeDefAndQualityAlg.h:120
HGTD::TrackTimeDefAndQualityAlg::Hit
Definition: TrackTimeDefAndQualityAlg.h:109
AthReentrantAlgorithm.h
HGTD::TrackTimeDefAndQualityAlg::CleaningResult::m_resolution
float m_resolution
Definition: TrackTimeDefAndQualityAlg.h:121
HGTD::TrackTimeDefAndQualityAlg::m_default_time_res
FloatProperty m_default_time_res
Definition: TrackTimeDefAndQualityAlg.h:136
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
HGTD::TrackTimeDefAndQualityAlg::m_doActs
Gaudi::Property< bool > m_doActs
Definition: TrackTimeDefAndQualityAlg.h:105
HGTD::TrackTimeDefAndQualityAlg::m_deltat_cut
FloatProperty m_deltat_cut
Definition: TrackTimeDefAndQualityAlg.h:128
HGTD::TrackTimeDefAndQualityAlg::~TrackTimeDefAndQualityAlg
virtual ~TrackTimeDefAndQualityAlg()
Definition: TrackTimeDefAndQualityAlg.h:69
HGTD::TrackTimeDefAndQualityAlg::m_layerClusterTimeKey
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_layerClusterTimeKey
Definition: TrackTimeDefAndQualityAlg.h:84
HGTD::TrackTimeDefAndQualityAlg::m_comp_ptrn_sft
const short m_comp_ptrn_sft
Definition: TrackTimeDefAndQualityAlg.h:63
HGTD::TrackTimeDefAndQualityAlg::Hit::m_layer
short m_layer
Definition: TrackTimeDefAndQualityAlg.h:114
HGTD::TrackTimeDefAndQualityAlg::CleaningResult::m_hasValidTime
uint8_t m_hasValidTime
Definition: TrackTimeDefAndQualityAlg.h:122
HGTD::TrackTimeDefAndQualityAlg::m_default_time
FloatProperty m_default_time
Definition: TrackTimeDefAndQualityAlg.h:131
HGTD::TrackTimeDefAndQualityAlg::Hit::m_isprime
bool m_isprime
Definition: TrackTimeDefAndQualityAlg.h:112
HGTD::TrackTimeDefAndQualityAlg::m_trackParticleContainerKey
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_trackParticleContainerKey
Definition: TrackTimeDefAndQualityAlg.h:77
TrackParticle.h
HGTD::TrackTimeDefAndQualityAlg::getRadiusAndZ
std::pair< float, float > getRadiusAndZ(const xAOD::TrackParticle &track_particle) const
Definition: TrackTimeDefAndQualityAlg.cxx:362
HGTD::TrackTimeDefAndQualityAlg::m_time_dec_key
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_time_dec_key
Definition: TrackTimeDefAndQualityAlg.h:93
HGTD::TrackTimeDefAndQualityAlg::m_holes_ptrn_sft
const short m_holes_ptrn_sft
Definition: TrackTimeDefAndQualityAlg.h:64
HGTD::TrackTimeDefAndQualityAlg::TrackTimeDefAndQualityAlg
TrackTimeDefAndQualityAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrackTimeDefAndQualityAlg.cxx:26
HGTD::TrackTimeDefAndQualityAlg::m_time_res_dec_key
SG::WriteDecorHandleKey< xAOD::TrackParticleContainer > m_time_res_dec_key
Definition: TrackTimeDefAndQualityAlg.h:95
HGTD::TrackTimeDefAndQualityAlg::m_primes_ptrn_sft
const short m_primes_ptrn_sft
Definition: TrackTimeDefAndQualityAlg.h:65
private
#define private
Definition: xAODTruthCnvAlg.h:20
HGTD::TrackTimeDefAndQualityAlg::Hit::m_time
float m_time
Definition: TrackTimeDefAndQualityAlg.h:110
HGTD::TrackTimeDefAndQualityAlg::m_layerHasExtensionKey
SG::ReadDecorHandleKey< xAOD::TrackParticleContainer > m_layerHasExtensionKey
Definition: TrackTimeDefAndQualityAlg.h:81
HGTD::TrackTimeDefAndQualityAlg::m_recoed_ptrn_sft
const short m_recoed_ptrn_sft
Definition: TrackTimeDefAndQualityAlg.h:61
HGTD::TrackTimeDefAndQualityAlg::passesDeltaT
bool passesDeltaT(const std::array< Hit, s_hgtd_layers > &hits) const
Checks two hits for time compatibility.
Definition: TrackTimeDefAndQualityAlg.cxx:256
xAOD::track
@ track
Definition: TrackingPrimitives.h:513
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
SG::ReadDecorHandleKey
Property holding a SG store/key/clid/attr name from which a ReadDecorHandle is made.
Definition: StoreGate/StoreGate/ReadDecorHandleKey.h:85
HGTD::TrackTimeDefAndQualityAlg::getValidPattern
short getValidPattern(const std::array< Hit, s_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...
Definition: TrackTimeDefAndQualityAlg.cxx:229
HGTD::TrackTimeDefAndQualityAlg::CleaningResult
Definition: TrackTimeDefAndQualityAlg.h:117
TrackParticleContainer.h
HGTD::TrackTimeDefAndQualityAlg::m_chi2_threshold
FloatProperty m_chi2_threshold
Definition: TrackTimeDefAndQualityAlg.h:125
plot_times.times
def times(fn)
Definition: plot_times.py:10
HGTD::TrackTimeDefAndQualityAlg::findLayerWithBadChi2
short findLayerWithBadChi2(std::array< Hit, s_hgtd_layers > hits) const
Identifies time outliers by finding the layer within which a hit contributes negatively to the overal...
Definition: TrackTimeDefAndQualityAlg.cxx:307