ATLAS Offline Software
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
HGTD_IterativeExtensionTool Class Reference

#include <HGTD_IterativeExtensionTool.h>

Inheritance diagram for HGTD_IterativeExtensionTool:
Collaboration diagram for HGTD_IterativeExtensionTool:

Public Member Functions

 HGTD_IterativeExtensionTool (const std::string &, const std::string &, const IInterface *)
 
virtual StatusCode initialize () override final
 
virtual HGTD::ExtensionObject extendTrackToHGTD (const EventContext &ctx, const xAOD::TrackParticle &track_ptkl, const HGTD_ClusterContainer *container, const HepMC::GenEvent *hs_event=nullptr, const InDetSimDataCollection *sim_data=nullptr) const override final
 Finds the (up to) four measurements in HGTD that can be associated to the track. More...
 

Private Member Functions

const Trk::TrackStateOnSurfacegetLastHitOnTrack (const Trk::Track &track) const
 Retrieve the last hit on track stored in the Trk::Track. More...
 
std::vector< std::unique_ptr< const Trk::TrackParameters > > extrapolateToSurfaces (const EventContext &ctx, const Trk::TrackParameters &param, const std::vector< const Trk::Surface * > &surfaces) const
 After the compatible surfaces have been selected, the extrapolation is repeated to each of them. More...
 
std::unique_ptr< const Trk::TrackStateOnSurfaceupdateStateWithBestFittingCluster (const Trk::Track *track, const std::vector< std::unique_ptr< const Trk::TrackParameters >> &params, const HGTD_ClusterContainer *container) const
 Finds the overall best fitting cluster by keeping the one that gave the lowest chi2 after testing each surface and returning it. More...
 
std::unique_ptr< const Trk::TrackStateOnSurfacefindBestCompatibleCluster (const Trk::Track *track, const Trk::TrackParameters *param, const HGTD_ClusterContainer *container) const
 Find the cluster on a given surface that has the best chi2 passing the cut. More...
 
std::unique_ptr< const Trk::TrackStateOnSurfaceupdateState (const Trk::Track *track, const Trk::TrackParameters *param, const HGTD_Cluster *cluster) const
 Calls the TOF correction tool to build an HGTD_ClusterOnTrack with a calibrated time and resolution and then calls the Kalman updator tools to update the track state. More...
 
std::pair< const HGTD_Cluster *, HGTD::ClusterTruthInfogetTruthMatchedCluster (const std::vector< const Trk::Surface * > &surfaces, const HGTD_ClusterContainer *container, const xAOD::TruthParticle *truth_ptkl, const HepMC::GenEvent *hs_event, const InDetSimDataCollection *sim_data) const
 

Static Private Member Functions

static std::vector< const Trk::Surface * > getCompatibleSurfaces (const Trk::TrackParameters &param, const Trk::Layer *layer)
 Select all within the vincinity of the point of extrapolation. More...
 

Private Attributes

ToolHandle< Trk::IExtrapolatorm_extrapolator
 
ToolHandle< Trk::IUpdatorm_updator
 
ToolHandle< IHGTD_TOFcorrectionToolm_tof_corr_tool
 
ToolHandle< IHGTD_ClusterTruthToolm_truth_tool
 
const HGTD_DetectorManagerm_hgtd_det_mgr {nullptr}
 
const HGTD_IDm_hgtd_id_helper {nullptr}
 
FloatProperty m_chi2_cut
 Track extensions are only kept if the chi2/ndof is lower than the defined cut. More...
 
IntegerProperty m_particle_hypot
 Particle hypothesis used for the extrapolation. More...
 

Detailed Description

Definition at line 42 of file HGTD_IterativeExtensionTool.h.

Constructor & Destructor Documentation

◆ HGTD_IterativeExtensionTool()

HGTD_IterativeExtensionTool::HGTD_IterativeExtensionTool ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Definition at line 29 of file HGTD_IterativeExtensionTool.cxx.

32  : base_class(t, n, p) {}

Member Function Documentation

◆ extendTrackToHGTD()

HGTD::ExtensionObject HGTD_IterativeExtensionTool::extendTrackToHGTD ( const EventContext &  ctx,
const xAOD::TrackParticle track_ptkl,
const HGTD_ClusterContainer container,
const HepMC::GenEvent *  hs_event = nullptr,
const InDetSimDataCollection sim_data = nullptr 
) const
finaloverridevirtual

Finds the (up to) four measurements in HGTD that can be associated to the track.

The Track itself is not altered during this process. Since HGTD contains four active layers per endcap, four hits is the maximum. An extension can be of hole-type

Parameters
[in]trackTrack reconstructed in ITk.
Returns
Array of compatible HGTD hits in the form of HGTD_ClusterOnTrack.

Definition at line 52 of file HGTD_IterativeExtensionTool.cxx.

55  {
56 
57  ATH_MSG_DEBUG("Start extending");
58 
59  const Trk::Track* track = track_ptkl.track();
60 
62 
63  // get last hit on track in ITk as a starting point for the extrapolation
65  const Trk::TrackParameters* last_param = last_hit->trackParameters();
66 
67  ATH_MSG_DEBUG("last param x: " << last_param->position().x()
68  << ", y: " << last_param->position().y()
69  << ", z: " << last_param->position().z());
70  ATH_MSG_DEBUG("last param px: " << last_param->momentum().x()
71  << ", py: " << last_param->momentum().y()
72  << ", pz: " << last_param->momentum().z());
73 
74  const xAOD::TruthParticle* truth_ptkl =
76 
77  // get the tracking geometry
78  const Trk::TrackingGeometry* trk_geom = m_extrapolator->trackingGeometry();
79  if (not trk_geom) {
80  ATH_MSG_DEBUG("trackingGeometry returns null");
81  return result;
82  }
83 
84  bool is_pos_endcap = last_param->eta() > 0;
85 
86  // get the target volume
87  const Trk::TrackingVolume* hgtd_trk_volume = trk_geom->trackingVolume(
88  is_pos_endcap ? "HGTD::PositiveEndcap" : "HGTD::NegativeEndcap");
89 
90  if (not hgtd_trk_volume) {
91  ATH_MSG_DEBUG("trackingVolume returns null");
92  return result;
93  }
94 
95  const Trk::BinnedArray<Trk::Layer>* confined_layers =
96  hgtd_trk_volume->confinedLayers();
97  // careful, this array is not ordered from inside out (only in pos endcap)
98  if (not confined_layers) {
99  ATH_MSG_DEBUG("confinedLayers returns null");
100  return result;
101  }
102 
103  // get the layers, traverse depending on endcap used
104  // since they are not in ascending z order!!
106  confined_layers
107  ->arrayObjects(); // is CxxUtils::span<const Trk::Layer* const>
108  size_t layer_size = layers.size();
109 
110  short position = is_pos_endcap ? 0 : layer_size - 1;
111  short step = is_pos_endcap ? 1 : -1;
112  short hgtd_layer_i = -1; // start at -1 since the ++ happens at the beginning
113  for (size_t i = 0; i < layer_size - 1; i++, position = position + step) {
114 
115  const Trk::Layer* layer = layers[position];
116  // only use it, if it is an active one
117  if (layer->layerType() != 1) {
118  continue;
119  }
120  hgtd_layer_i++;
121 
122  const Trk::Surface& surf_obj = layer->surfaceRepresentation();
123  ATH_MSG_DEBUG("extrapolation surface z: " << surf_obj.center().z());
124 
125  // if it is a good surface, extrapolate to this surface
126  // uses same particle hypothesis used for the track itself
127  // TODO: BoundaryCheck set to false as in 20.20 -> what does this do?
128  std::unique_ptr<const Trk::TrackParameters> extrap_result = nullptr;
129 
130  Trk::ParticleHypothesis part = track->info().particleHypothesis();
131  if (part == Trk::undefined) {
132  part = static_cast<Trk::ParticleHypothesis>(m_particle_hypot.value());
133  }
134  extrap_result = m_extrapolator->extrapolate(
135  ctx, *last_param, surf_obj, Trk::PropDirection::alongMomentum, false,
136  part);
137 
138  //
139  if (not extrap_result) {
140  ATH_MSG_WARNING("Extrapolator returned null");
141  result.m_hits.at(hgtd_layer_i) = nullptr;
142  result.m_truth_primary_hits.at(hgtd_layer_i) = nullptr;
143  result.m_truth_primary_info.at(hgtd_layer_i) = HGTD::ClusterTruthInfo();
144  continue;
145  }
146 
147  // get the extrapolation position info only on the first layer
148  if (hgtd_layer_i == 0) {
149  result.m_extrap_x = extrap_result->position().x();
150  result.m_extrap_y = extrap_result->position().y();
151  }
152 
153  ATH_MSG_DEBUG("extrap. params x: "
154  << extrap_result->position().x()
155  << ", y: " << extrap_result->position().y()
156  << ", z: " << extrap_result->position().z());
157  ATH_MSG_DEBUG("extrap. params px: "
158  << extrap_result->momentum().x()
159  << ", py: " << extrap_result->momentum().y()
160  << ", pz: " << extrap_result->momentum().z());
161 
162  // find active surfaces in the vincinity
163  auto compatible_surfaces = getCompatibleSurfaces(*extrap_result, layer);
164 
165  if (compatible_surfaces.empty()) {
166  ATH_MSG_WARNING("No compatible surfaces for position");
167  result.m_hits.at(hgtd_layer_i) = nullptr;
168  result.m_truth_primary_hits.at(hgtd_layer_i) = nullptr;
169  result.m_truth_primary_info.at(hgtd_layer_i) = HGTD::ClusterTruthInfo();
170  continue;
171  }
172 
173  auto extrapolated_params =
174  extrapolateToSurfaces(ctx, *last_param, compatible_surfaces);
175 
176  std::unique_ptr<const Trk::TrackStateOnSurface> updated_state =
177  updateStateWithBestFittingCluster(track, extrapolated_params,
178  container);
179 
180  if (not updated_state) {
181  result.m_hits.at(hgtd_layer_i) = nullptr;
182  result.m_truth_primary_hits.at(hgtd_layer_i) = nullptr;
183  result.m_truth_primary_info.at(hgtd_layer_i) = HGTD::ClusterTruthInfo();
184  continue;
185  }
186  // if the state was updated with a measurement, the it becomes the new last
187  // parameter
188  last_param = updated_state->trackParameters();
189  // store the last track state to be returned
190 
191  std::pair<const HGTD_Cluster*, HGTD::ClusterTruthInfo> truth_info =
192  getTruthMatchedCluster(compatible_surfaces, container, truth_ptkl,
193  hs_event, sim_data);
194 
195  result.m_hits.at(hgtd_layer_i) = std::move(updated_state);
196  result.m_truth_primary_hits.at(hgtd_layer_i) = truth_info.first;
197  result.m_truth_primary_info.at(hgtd_layer_i) = truth_info.second;
198  }
199 
200  return result;
201 }

◆ extrapolateToSurfaces()

std::vector< std::unique_ptr< const Trk::TrackParameters > > HGTD_IterativeExtensionTool::extrapolateToSurfaces ( const EventContext &  ctx,
const Trk::TrackParameters param,
const std::vector< const Trk::Surface * > &  surfaces 
) const
private

After the compatible surfaces have been selected, the extrapolation is repeated to each of them.

Parameters
[in]paramThe last track parameter before extrapolation.
[in]surfacesTarget layer of the extrapolation.
Returns
Vector of the updated track parameters.

FIXME Is this really necessary to call the extrapolation on each target surface?

Definition at line 272 of file HGTD_IterativeExtensionTool.cxx.

274  {
275 
276  std::vector<std::unique_ptr<const Trk::TrackParameters>> params;
277  params.reserve(surfaces.size());
278 
279  for (const auto* surface : surfaces) {
280  std::unique_ptr<const Trk::TrackParameters> extrapolated_params = nullptr;
281 
282  extrapolated_params = m_extrapolator->extrapolate(
283  ctx, param, *surface, Trk::alongMomentum, false,
284  static_cast<Trk::ParticleHypothesis>(m_particle_hypot.value()));
285  if (not extrapolated_params) {
286  continue;
287  }
288  params.push_back(std::move(extrapolated_params));
289  }
290 
291  return params;
292 }

◆ findBestCompatibleCluster()

std::unique_ptr< const Trk::TrackStateOnSurface > HGTD_IterativeExtensionTool::findBestCompatibleCluster ( const Trk::Track track,
const Trk::TrackParameters param,
const HGTD_ClusterContainer container 
) const
private

Find the cluster on a given surface that has the best chi2 passing the cut.

Is called within updateStateWithBestFittingCluster.

Definition at line 331 of file HGTD_IterativeExtensionTool.cxx.

333  {
334 
335  ATH_MSG_DEBUG("[findBestCompatibleCluster] start");
336 
337  std::unique_ptr<const Trk::TrackStateOnSurface> tsos = nullptr;
338 
339  double lowest_chi2 = -1;
340  for (const auto* collection : *container) {
341  // find the one collection that can be associated to the surface
342  if (collection->identify() !=
344  continue;
345  }
347  "[findBestCompatibleCluster] found collection of given surface");
348  // test the clusters on this surface for compatibility, keep the best
349  for (const auto* cluster : *collection) {
350  // update the track parameters with the found cluster
351  std::unique_ptr<const Trk::TrackStateOnSurface> candidate =
352  updateState(track, param, cluster);
353 
354  if (not candidate) {
355  continue;
356  }
357  if (not candidate->measurementOnTrack() and
358  not candidate->fitQualityOnSurface()) {
359  continue;
360  }
361  double chi2 = candidate->fitQualityOnSurface().chiSquared() /
362  candidate->fitQualityOnSurface().doubleNumberDoF();
363  ATH_MSG_DEBUG("found cluster with chi2 of " << chi2);
364  // apply cut on the chi2
365  if (chi2 > m_chi2_cut) {
366  continue;
367  }
368  // make sure only one TSOS is kept
369  if (not tsos or chi2 < lowest_chi2) {
370  tsos.swap(candidate);
371  lowest_chi2 = chi2;
372  }
373  }
374  // per trackparameter, there is only one fitting surface
375  // break after having found it
376  break;
377  }
378 
379  return tsos; // no need to std::move thanks to Return Value Optimization (RVO)
380 }

◆ getCompatibleSurfaces()

std::vector< const Trk::Surface * > HGTD_IterativeExtensionTool::getCompatibleSurfaces ( const Trk::TrackParameters param,
const Trk::Layer layer 
)
staticprivate

Select all within the vincinity of the point of extrapolation.

Parameters
[in]paramThe already extrapolated track parameter.
[in]layerTarget layer of the extrapolation.
Returns
Vector of compatible surfaces that represent modules.

FIXME exchange the loop with the neighbour functionality (wherever that is)

Definition at line 229 of file HGTD_IterativeExtensionTool.cxx.

230  {
231 
232  std::vector<const Trk::Surface*> surfaces;
233 
234  // point of extrapolation as global position
235  const Amg::Vector3D& position = param.position();
236  // get the surface at the point of extrapolation
237  const auto* surface_arr = layer->surfaceArray(); // these are the modules
238  if (!surface_arr) {
239  return surfaces;
240  }
241  const Trk::Surface* module_surface = surface_arr->object(
242  position); // from this binned object, get the module closeby
243  if (!module_surface) {
244  return surfaces;
245  }
246  surfaces.push_back(module_surface);
247 
248  // pick up additional surfaces in a 4cm radius
249  // TODO REPLACE THIS BY NEIGHBOUR FUNCTIONALITY IN FUTURE!!
250  short steps = 16;
251  float delta_angle = 6.2831853 / (float)steps;
252  float angle = 0.;
253  float radius = 20.0;
254  for (short i = 0; i < steps; i++, angle = angle + delta_angle) {
256  Amg::Vector3D result = position + delta;
257  const Trk::Surface* additional_surface = surface_arr->object(result);
258  if (!additional_surface) {
259  continue;
260  }
261  // check if surface was added to avoid duplicates
262  if (std::find(surfaces.begin(), surfaces.end(), additional_surface) ==
263  surfaces.end()) {
264  surfaces.push_back(additional_surface);
265  }
266  }
267 
268  return surfaces;
269 }

◆ getLastHitOnTrack()

const Trk::TrackStateOnSurface * HGTD_IterativeExtensionTool::getLastHitOnTrack ( const Trk::Track track) const
private

Retrieve the last hit on track stored in the Trk::Track.

Parameters
[in]trackTrack reconstructed in ITk.
Returns
The last hit on track, i.e. the closest one to HGTD.

FIXME: returns a const*, but the Track manages this TSOS. Could I return rather const&? But: I want to check if type is OK... should I return an "empty" TSOS if nothing passes the requirements?

Definition at line 204 of file HGTD_IterativeExtensionTool.cxx.

204  {
205 
206  const Trk::TrackStates* tsos =
207  track.trackStateOnSurfaces();
208  if (not tsos) {
209  ATH_MSG_ERROR("Failed to retrieve track state on surfaces");
210  return nullptr;
211  }
212  // loop over the associated hits in ITk in reverse order, since we want to
213  // select the one closest to HGTD to start the extrapolation
214  for (auto i = tsos->rbegin(); i != tsos->rend(); ++i) {
215  const auto* curr_last_tsos = *i;
216  if (not curr_last_tsos) {
217  continue;
218  }
219  if (curr_last_tsos->type(Trk::TrackStateOnSurface::Measurement) and
220  curr_last_tsos->trackParameters() and
221  curr_last_tsos->measurementOnTrack()) {
222  return curr_last_tsos;
223  }
224  }
225  return nullptr;
226 }

◆ getTruthMatchedCluster()

std::pair< const HGTD_Cluster *, HGTD::ClusterTruthInfo > HGTD_IterativeExtensionTool::getTruthMatchedCluster ( const std::vector< const Trk::Surface * > &  surfaces,
const HGTD_ClusterContainer container,
const xAOD::TruthParticle truth_ptkl,
const HepMC::GenEvent *  hs_event,
const InDetSimDataCollection sim_data 
) const
private

Definition at line 416 of file HGTD_IterativeExtensionTool.cxx.

420  {
421 
422  if (not truth_ptkl or not sim_data) {
423  if (not truth_ptkl)
424  ATH_MSG_DEBUG("truth_ptkl is null");
425  if (not sim_data)
426  ATH_MSG_DEBUG("sim_data is null");
427 
428  return {nullptr, HGTD::ClusterTruthInfo()};
429  }
430 
431  std::vector<Identifier> ids;
432  std::for_each(surfaces.begin(), surfaces.end(),
433  [&](const Trk::Surface* surf) {
434  ids.push_back(surf->associatedDetectorElementIdentifier());
435  });
436 
437  for (const auto *const collection : *container) {
438  // if the ID corresponding to this collection is not in the list, skip
439 
440  if (std::find(ids.begin(), ids.end(), collection->identify()) ==
441  ids.end()) {
442  continue;
443  }
444  for (const auto* cluster : *collection) {
445 
446  HGTD::ClusterTruthInfo truth_info = m_truth_tool->classifyCluster(
447  cluster, truth_ptkl, sim_data, hs_event);
448  // return cluster and truth info if the hit is matched to the truth
449  // particle
451  return {cluster, truth_info};
452  }
453  }
454  }
455  // no matched cluster found
456  return {nullptr, HGTD::ClusterTruthInfo()};
457 }

◆ initialize()

StatusCode HGTD_IterativeExtensionTool::initialize ( )
finaloverridevirtual

Definition at line 34 of file HGTD_IterativeExtensionTool.cxx.

34  {
36 
37  ATH_CHECK(m_extrapolator.retrieve());
38 
39  ATH_CHECK(m_updator.retrieve());
40 
41  ATH_CHECK(m_tof_corr_tool.retrieve());
42 
43  ATH_CHECK(m_truth_tool.retrieve());
44 
45  // get HGTD Detector Description Manager and HGTD Helper
48 
49  return sc;
50 }

◆ updateState()

std::unique_ptr< const Trk::TrackStateOnSurface > HGTD_IterativeExtensionTool::updateState ( const Trk::Track track,
const Trk::TrackParameters param,
const HGTD_Cluster cluster 
) const
private

Calls the TOF correction tool to build an HGTD_ClusterOnTrack with a calibrated time and resolution and then calls the Kalman updator tools to update the track state.

Definition at line 383 of file HGTD_IterativeExtensionTool.cxx.

384  {
385  ATH_MSG_DEBUG("[updateState] calling the updator");
386 
387  // FIXME: the HGTD_Cluster should know its detector element here. needs
388  // to be set up in the converter at some point!!
389  const auto* det_el = m_hgtd_det_mgr->getDetectorElement(cluster->identify());
390 
391  // apply the time of flight correction before setting the time and resolution
392  // in the HGTD_ClusterOnTrack
393  std::pair<float, float> corr_time_and_res =
394  m_tof_corr_tool->correctTimeAndResolution(
395  *track, *cluster, cluster->time(), cluster->timeResolution());
396 
397  std::unique_ptr<HGTD_ClusterOnTrack> cot =
398  std::make_unique<HGTD_ClusterOnTrack>(
399  cluster, Trk::LocalParameters(cluster->localPosition()),
400  Amg::MatrixX(cluster->localCovariance()), corr_time_and_res.first,
401  corr_time_and_res.second, det_el->identifyHash());
402 
403  Trk::FitQualityOnSurface* quality = nullptr;
404 
405  std::unique_ptr<Trk::TrackParameters> pars = m_updator->addToState(
406  *param, cot->localParameters(), cot->localCovariance(), quality);
407  //Here one could fix the addToState intefaces to
408  //avoid them allocating memory for Fit Quality On Surface
409  auto uniqueQuality= std::unique_ptr<Trk::FitQualityOnSurface>(quality);
410  auto QoS = uniqueQuality? *uniqueQuality : Trk::FitQualityOnSurface{};
411  return std::make_unique<const Trk::TrackStateOnSurface>(QoS, std::move(cot),
412  std::move(pars));
413 }

◆ updateStateWithBestFittingCluster()

std::unique_ptr< const Trk::TrackStateOnSurface > HGTD_IterativeExtensionTool::updateStateWithBestFittingCluster ( const Trk::Track track,
const std::vector< std::unique_ptr< const Trk::TrackParameters >> &  params,
const HGTD_ClusterContainer container 
) const
private

Finds the overall best fitting cluster by keeping the one that gave the lowest chi2 after testing each surface and returning it.

Definition at line 295 of file HGTD_IterativeExtensionTool.cxx.

298  {
299  ATH_MSG_DEBUG("[updateStateWithBestFittingCluster] start updating");
300 
301  std::unique_ptr<const Trk::TrackStateOnSurface> updated_state = nullptr;
302 
303  double lowest_chi2 = -1.;
304  // all compatible surfaces are tested for the best fitting cluster
305  for (const auto& param : params) {
306  std::unique_ptr<const Trk::TrackStateOnSurface> best_tsos =
307  findBestCompatibleCluster(track, param.get(), container);
308  if (not best_tsos) {
309  ATH_MSG_DEBUG("[updateStateWithBestFittingCluster] tsos is null");
310  continue;
311  }
312  ATH_MSG_DEBUG("[updateStateWithBestFittingCluster] tsos found");
313 
314  double chi2 = best_tsos->fitQualityOnSurface().chiSquared() /
315  best_tsos->fitQualityOnSurface().doubleNumberDoF();
317  "[updateStateWithBestFittingCluster] found state with chi2 of "
318  << chi2);
319  // make sure only one TSOS is kept
320  if (!updated_state or chi2 < lowest_chi2) {
321  updated_state.swap(best_tsos);
322  lowest_chi2 = chi2;
323  }
324  }
325 
326  return updated_state; // no need to std::move thanks to Return Value
327  // Optimization (RVO)
328 }

Member Data Documentation

◆ m_chi2_cut

FloatProperty HGTD_IterativeExtensionTool::m_chi2_cut
private
Initial value:
{this, "Chi2Cut", 5.0,
"Quality cut for decision to keep track extension"}

Track extensions are only kept if the chi2/ndof is lower than the defined cut.

Definition at line 172 of file HGTD_IterativeExtensionTool.h.

◆ m_extrapolator

ToolHandle<Trk::IExtrapolator> HGTD_IterativeExtensionTool::m_extrapolator
private
Initial value:
{
this, "ExtrapolatorTool", "Trk::Extrapolator/AtlasExtrapolator",
"Tool for extrapolating the track to the HGTD surfaces"}

Definition at line 149 of file HGTD_IterativeExtensionTool.h.

◆ m_hgtd_det_mgr

const HGTD_DetectorManager* HGTD_IterativeExtensionTool::m_hgtd_det_mgr {nullptr}
private

Definition at line 165 of file HGTD_IterativeExtensionTool.h.

◆ m_hgtd_id_helper

const HGTD_ID* HGTD_IterativeExtensionTool::m_hgtd_id_helper {nullptr}
private

Definition at line 166 of file HGTD_IterativeExtensionTool.h.

◆ m_particle_hypot

IntegerProperty HGTD_IterativeExtensionTool::m_particle_hypot
private
Initial value:
{
this, "ParticleHypothesis", Trk::ParticleHypothesis::pion,
"The hypothesis of the track's particle type"}

Particle hypothesis used for the extrapolation.

Definition at line 178 of file HGTD_IterativeExtensionTool.h.

◆ m_tof_corr_tool

ToolHandle<IHGTD_TOFcorrectionTool> HGTD_IterativeExtensionTool::m_tof_corr_tool
private
Initial value:
{
this, "TOFCorrTool", "StraightLineTOFcorrectionTool",
"Tool for correcting for time of flight"}

Definition at line 157 of file HGTD_IterativeExtensionTool.h.

◆ m_truth_tool

ToolHandle<IHGTD_ClusterTruthTool> HGTD_IterativeExtensionTool::m_truth_tool
private
Initial value:
{
this, "ClusterTruthTool", "HGTD::ClusterTruthTool/ClusterTruthTool",
"Tool for classifying HGTD clusters with truth information"}

Definition at line 161 of file HGTD_IterativeExtensionTool.h.

◆ m_updator

ToolHandle<Trk::IUpdator> HGTD_IterativeExtensionTool::m_updator
private
Initial value:
{
this, "UpdatorTool", "Trk::KalmanUpdator/KalmanUpdator",
"Tool for updating the track parameters accounting for new measurements"}

Definition at line 153 of file HGTD_IterativeExtensionTool.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
HGTD::ExtensionObject
Definition: IHGTD_TrackTimeExtensionTool.h:32
make_hlt_rep.pars
pars
Definition: make_hlt_rep.py:90
Trk::LocalParameters
Definition: LocalParameters.h:98
Trk::TrackStateOnSurface::trackParameters
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:27
get_generator_info.result
result
Definition: get_generator_info.py:21
HGTD_IterativeExtensionTool::getCompatibleSurfaces
static std::vector< const Trk::Surface * > getCompatibleSurfaces(const Trk::TrackParameters &param, const Trk::Layer *layer)
Select all within the vincinity of the point of extrapolation.
Definition: HGTD_IterativeExtensionTool.cxx:229
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::ParametersBase::associatedSurface
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
initialize
void initialize()
Definition: run_EoverP.cxx:894
HGTD_IterativeExtensionTool::m_hgtd_id_helper
const HGTD_ID * m_hgtd_id_helper
Definition: HGTD_IterativeExtensionTool.h:166
Trk::Surface::associatedDetectorElementIdentifier
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
HGTD_IterativeExtensionTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: HGTD_IterativeExtensionTool.h:149
Trk::PrepRawData::localCovariance
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
module_driven_slicing.layers
layers
Definition: module_driven_slicing.py:114
HGTD::ClusterTruthInfo
Definition: IHGTD_ClusterTruthTool.h:35
xAOD::pion
@ pion
Definition: TrackingPrimitives.h:196
HGTD_IterativeExtensionTool::getTruthMatchedCluster
std::pair< const HGTD_Cluster *, HGTD::ClusterTruthInfo > getTruthMatchedCluster(const std::vector< const Trk::Surface * > &surfaces, const HGTD_ClusterContainer *container, const xAOD::TruthParticle *truth_ptkl, const HepMC::GenEvent *hs_event, const InDetSimDataCollection *sim_data) const
Definition: HGTD_IterativeExtensionTool.cxx:416
Trk::alongMomentum
@ alongMomentum
Definition: PropDirection.h:20
Trk::undefined
@ undefined
Definition: ParticleHypothesis.h:38
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
HGTD_IterativeExtensionTool::extrapolateToSurfaces
std::vector< std::unique_ptr< const Trk::TrackParameters > > extrapolateToSurfaces(const EventContext &ctx, const Trk::TrackParameters &param, const std::vector< const Trk::Surface * > &surfaces) const
After the compatible surfaces have been selected, the extrapolation is repeated to each of them.
Definition: HGTD_IterativeExtensionTool.cxx:272
HGTD_IterativeExtensionTool::m_updator
ToolHandle< Trk::IUpdator > m_updator
Definition: HGTD_IterativeExtensionTool.h:153
HGTD_IterativeExtensionTool::m_hgtd_det_mgr
const HGTD_DetectorManager * m_hgtd_det_mgr
Definition: HGTD_IterativeExtensionTool.h:165
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Trk::FitQualityOnSurface
Definition: FitQualityOnSurface.h:19
Trk::ParticleHypothesis
ParticleHypothesis
Definition: ParticleHypothesis.h:25
HGTD_IterativeExtensionTool::m_truth_tool
ToolHandle< IHGTD_ClusterTruthTool > m_truth_tool
Definition: HGTD_IterativeExtensionTool.h:161
HGTD_IterativeExtensionTool::getLastHitOnTrack
const Trk::TrackStateOnSurface * getLastHitOnTrack(const Trk::Track &track) const
Retrieve the last hit on track stored in the Trk::Track.
Definition: HGTD_IterativeExtensionTool.cxx:204
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:210
HGTD_IterativeExtensionTool::m_tof_corr_tool
ToolHandle< IHGTD_TOFcorrectionTool > m_tof_corr_tool
Definition: HGTD_IterativeExtensionTool.h:157
beamspotman.steps
int steps
Definition: beamspotman.py:505
HGTD_IterativeExtensionTool::updateState
std::unique_ptr< const Trk::TrackStateOnSurface > updateState(const Trk::Track *track, const Trk::TrackParameters *param, const HGTD_Cluster *cluster) const
Calls the TOF correction tool to build an HGTD_ClusterOnTrack with a calibrated time and resolution a...
Definition: HGTD_IterativeExtensionTool.cxx:383
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
beamspotman.n
n
Definition: beamspotman.py:731
Trk::TrackingGeometry
Definition: TrackingGeometry.h:67
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
HGTD::ClusterTruthInfo::origin
ClusterTruthOrigin origin
Definition: IHGTD_ClusterTruthTool.h:36
Trk::ParametersBase
Definition: ParametersBase.h:55
HGTD_Cluster::timeResolution
virtual float timeResolution() const
Definition: HGTD_Cluster.h:117
DataVector< const Trk::TrackStateOnSurface >
HGTD::ClusterTruthOrigin::TRUTH_PARTICLE
@ TRUTH_PARTICLE
Trk::MeasurementBase::localCovariance
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Definition: MeasurementBase.h:138
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
HGTD_IterativeExtensionTool::m_particle_hypot
IntegerProperty m_particle_hypot
Particle hypothesis used for the extrapolation.
Definition: HGTD_IterativeExtensionTool.h:178
Trk::TrackStateOnSurface
represents the track state (measurement, material, fit parameters and quality) at a surface.
Definition: TrackStateOnSurface.h:71
python.subdetectors.mmg.ids
ids
Definition: mmg.py:8
xAOD::TruthHelpers::getTruthParticle
const xAOD::TruthParticle * getTruthParticle(const xAOD::IParticle &p)
Return the truthParticle associated to the given IParticle (if any)
Definition: xAODTruthHelpers.cxx:25
Trk::PrepRawData::localPosition
const Amg::Vector2D & localPosition() const
return the local position reference
HGTD_IterativeExtensionTool::findBestCompatibleCluster
std::unique_ptr< const Trk::TrackStateOnSurface > findBestCompatibleCluster(const Trk::Track *track, const Trk::TrackParameters *param, const HGTD_ClusterContainer *container) const
Find the cluster on a given surface that has the best chi2 passing the cut.
Definition: HGTD_IterativeExtensionTool.cxx:331
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
HGTD_IterativeExtensionTool::m_chi2_cut
FloatProperty m_chi2_cut
Track extensions are only kept if the chi2/ndof is lower than the defined cut.
Definition: HGTD_IterativeExtensionTool.h:172
HGTD_DetectorManager::getDetectorElement
InDetDD::HGTD_DetectorElement * getDetectorElement(const Identifier &id) const
access to individual elements : via Identifier
Definition: HGTD_DetectorManager.cxx:57
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
LArCellBinning.step
step
Definition: LArCellBinning.py:158
Trk::ParametersBase::eta
double eta() const
Access method for pseudorapidity - from momentum.
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1::track
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
Definition: TrackParticle_v1.cxx:805
Trk::BinnedArray
Definition: BinnedArray.h:38
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Trk::BinnedArraySpan
std::span< T > BinnedArraySpan
Definition: BinnedArray.h:34
readCCLHist.float
float
Definition: readCCLHist.py:83
HGTD_Cluster::time
virtual float time() const
Definition: HGTD_Cluster.h:115
Trk::TrackStateOnSurface::Measurement
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Definition: TrackStateOnSurface.h:101
HGTD_IterativeExtensionTool::updateStateWithBestFittingCluster
std::unique_ptr< const Trk::TrackStateOnSurface > updateStateWithBestFittingCluster(const Trk::Track *track, const std::vector< std::unique_ptr< const Trk::TrackParameters >> &params, const HGTD_ClusterContainer *container) const
Finds the overall best fitting cluster by keeping the one that gave the lowest chi2 after testing eac...
Definition: HGTD_IterativeExtensionTool.cxx:295
Trk::Layer
Definition: Layer.h:73