ATLAS Offline Software
HGTD_IterativeExtensionTool.cxx
Go to the documentation of this file.
1 
12 
18 #include "TrkGeometry/DiscLayer.h"
23 #include "xAODTruth/TruthVertex.h"
25 
26 #include <iostream>
27 #include <vector>
28 
30  const std::string& n,
31  const IInterface* p)
32  : base_class(t, n, p) {}
33 
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 }
51 
53  const EventContext& ctx, const xAOD::TrackParticle& track_ptkl,
54  const HGTD_ClusterContainer* container, const HepMC::GenEvent* hs_event,
55  const InDetSimDataCollection* sim_data) const {
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 }
202 
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 }
227 
228 std::vector<const Trk::Surface*>
230  const Trk::TrackParameters& param, const Trk::Layer* layer) {
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 }
270 
271 std::vector<std::unique_ptr<const Trk::TrackParameters>>
273  const EventContext& ctx, const Trk::TrackParameters& param,
274  const std::vector<const Trk::Surface*>& surfaces) const {
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 }
293 
294 std::unique_ptr<const Trk::TrackStateOnSurface>
296  const Trk::Track* track,
297  const std::vector<std::unique_ptr<const Trk::TrackParameters>>& params,
298  const HGTD_ClusterContainer* container) const {
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 }
329 
330 std::unique_ptr<const Trk::TrackStateOnSurface>
332  const Trk::Track* track, const Trk::TrackParameters* param,
333  const HGTD_ClusterContainer* container) const {
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 }
381 
382 std::unique_ptr<const Trk::TrackStateOnSurface>
384  const HGTD_Cluster* cluster) const {
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 }
414 
415 std::pair<const HGTD_Cluster*, HGTD::ClusterTruthInfo>
417  const std::vector<const Trk::Surface*>& surfaces,
418  const HGTD_ClusterContainer* container,
419  const xAOD::TruthParticle* truth_ptkl, const HepMC::GenEvent* hs_event,
420  const InDetSimDataCollection* sim_data) const {
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 }
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
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:29
get_generator_info.result
result
Definition: get_generator_info.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
GeometrySignature.h
HGTD_IterativeExtensionTool.h
Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration.
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
TruthParticleContainer.h
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
DiscLayer.h
HGTD_IterativeExtensionTool::initialize
virtual StatusCode initialize() override final
Definition: HGTD_IterativeExtensionTool.cxx:34
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
InDetSimDataCollection
Definition: InDetSimDataCollection.h:25
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.
xAODTruthHelpers.h
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_DetectorManager.h
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
HGTD_Cluster
Definition: HGTD_Cluster.h:35
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
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
HGTD_IterativeExtensionTool::extendTrackToHGTD
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.
Definition: HGTD_IterativeExtensionTool.cxx:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
McEventCollection.h
lumiFormat.i
int i
Definition: lumiFormat.py:92
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:41
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
TruthVertex.h
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
HGTD_ID.h
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.
TrackingVolume.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::PrepRawDataContainer
Definition: PrepRawDataContainer.h:26
LArCellBinning.step
step
Definition: LArCellBinning.py:158
HGTD_IterativeExtensionTool::HGTD_IterativeExtensionTool
HGTD_IterativeExtensionTool(const std::string &, const std::string &, const IInterface *)
Definition: HGTD_IterativeExtensionTool.cxx:29
Trk::ParametersBase::eta
double eta() const
Access method for pseudorapidity - from momentum.
TrackingGeometry.h
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
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
TrackStateOnSurface.h
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
HGTD_ClusterOnTrack.h
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration.
Trk::Layer
Definition: Layer.h:73