Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SeedAnalysisAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "SeedAnalysisAlg.h"
6 
9 
12 
13 #include "Acts/Definitions/Units.hpp"
14 #include "Acts/MagneticField/MagneticFieldContext.hpp"
17 
18 namespace ActsTrk {
19 
20  SeedAnalysisAlg::SeedAnalysisAlg(const std::string& name, ISvcLocator* pSvcLocator)
21  : AthMonitorAlgorithm(name, pSvcLocator)
22  {}
23 
25  ATH_MSG_INFO("Initializing " << name() << " ...");
26 
29 
30  ATH_CHECK( m_inputSeedColletionKey.initialize() );
31 
34 
36 
37  if (not m_prdTruth.empty()) {
38  ATH_CHECK( m_paramEstimationTool.retrieve() );
39  ATH_CHECK( m_trackingGeometryTool.retrieve() );
40  ATH_CHECK( m_ATLASConverterTool.retrieve() );
41  }
42 
43  ATH_MSG_DEBUG("Monitoring settings ...");
45 
47  }
48 
49  StatusCode SeedAnalysisAlg::fillHistograms(const EventContext& ctx) const {
50  ATH_MSG_DEBUG( "Filling Histograms for " << name() << " ... " );
51 
52  // CONDS
53  // Read the Beam Spot information
55  ATH_CHECK( beamSpotHandle.isValid() );
56  auto beamSpotData = beamSpotHandle.cptr();
57 
58  // Read the b-field information
60  ATH_CHECK( readHandle.isValid() );
61  const AtlasFieldCacheCondObj* fieldCondObj{ *readHandle };
62 
63  // Get the magnetic field
64  // Using ACTS classes in order to be sure we are consistent
65  Acts::MagneticFieldContext magFieldContext(fieldCondObj);
66  // Beam Spot Position
67  Acts::Vector2 beamPos( beamSpotData->beamPos()[ Amg::x ] * Acts::UnitConstants::mm,
68  beamSpotData->beamPos()[ Amg::y ] * Acts::UnitConstants::mm );
69 
70  // Magnetic Field
71  ATLASMagneticFieldWrapper magneticField;
72  Acts::MagneticFieldProvider::Cache magFieldCache = magneticField.makeCache( magFieldContext );
73  Acts::Vector3 bField = *magneticField.getField( Acts::Vector3(beamPos.x(), beamPos.y(), 0),
74  magFieldCache );
75 
76 
77  // SEEDS
78  ATH_MSG_DEBUG( "Reading input collection with key " << m_inputSeedColletionKey.key() );
80  ATH_CHECK( handle.isValid() );
81  const ActsTrk::SeedContainer* seed_collection = handle.get();
82  ATH_MSG_DEBUG( "Retrieved " << seed_collection->size() << " input elements from key " << m_inputSeedColletionKey.key() );
83 
84  auto monitor_nseed = Monitored::Scalar<int>("Nseed", seed_collection->size());
85  fill(m_monGroupName.value(), monitor_nseed);
86 
87  // bottom
88  auto monitor_x1 =
89  Monitored::Collection("x1", *seed_collection,
90  [] (const auto* seed) -> double
91  { return seed->sp()[0]->x(); });
92  auto monitor_y1 =
93  Monitored::Collection("y1", *seed_collection,
94  [] (const auto* seed) -> double
95  { return seed->sp()[0]->y(); });
96  auto monitor_z1 =
97  Monitored::Collection("z1", *seed_collection,
98  [] (const auto* seed) -> double
99  { return seed->sp()[0]->z(); });
100  auto monitor_r1 =
101  Monitored::Collection("r1", *seed_collection,
102  [] (const auto* seed) -> double
103  {
104  const auto* sp = seed->sp()[0];
105  return std::sqrt(sp->x()*sp->x() + sp->y()*sp->y());
106  });
107 
108  // middle
109  auto monitor_x2 =
110  Monitored::Collection("x2", *seed_collection,
111  [] (const auto* seed) -> double
112  { return seed->sp()[1]->x(); });
113  auto monitor_y2 =
114  Monitored::Collection("y2", *seed_collection,
115  [] (const auto* seed) -> double
116  { return seed->sp()[1]->y(); });
117  auto monitor_z2 =
118  Monitored::Collection("z2", *seed_collection,
119  [] (const auto* seed) -> double
120  { return seed->sp()[1]->z(); });
121  auto monitor_r2 =
122  Monitored::Collection("r2", *seed_collection,
123  [] (const auto* seed) -> double
124  {
125  const auto* sp = seed->sp()[1];
126  return std::sqrt(sp->x()*sp->x() + sp->y()*sp->y());
127  });
128 
129  // top
130  auto monitor_x3 =
131  Monitored::Collection("x3", *seed_collection,
132  [] (const auto* seed) -> double
133  { return seed->sp()[2]->x(); });
134  auto monitor_y3 =
135  Monitored::Collection("y3", *seed_collection,
136  [] (const auto* seed) -> double
137  { return seed->sp()[2]->y(); });
138  auto monitor_z3 =
139  Monitored::Collection("z3", *seed_collection,
140  [] (const auto* seed) -> double
141  { return seed->sp()[2]->z(); });
142  auto monitor_r3 =
143  Monitored::Collection("r3", *seed_collection,
144  [] (const auto* seed) -> double
145  {
146  const auto* sp = seed->sp()[2];
147  return std::sqrt(sp->x()*sp->x() + sp->y()*sp->y());
148  });
149 
150  std::vector< std::array<float, 7> > parametersCollection;
151  parametersCollection.reserve(seed_collection->size());
152 
153  for (const auto* seed : *seed_collection) {
154  parametersCollection.push_back( estimateParameters(*seed, 300. * bField[2] / 1000.) );
155  }
156 
157  auto monitor_param_pt = Monitored::Collection("pt", parametersCollection,
158  [] (const auto& params) -> float
159  { return params[0]; });
160  auto monitor_param_theta = Monitored::Collection("theta", parametersCollection,
161  [] (const auto& params) -> float
162  { return params[1]; });
163  auto monitor_param_eta = Monitored::Collection("eta", parametersCollection,
164  [] (const auto& params) -> float
165  { return params[2]; });
166  auto monitor_param_d0 = Monitored::Collection("d0", parametersCollection,
167  [] (const auto& params) -> float
168  { return params[3]; });
169 
170  auto monitor_param_dzdr_b = Monitored::Collection("dzdr_b", parametersCollection,
171  [] (const auto& params) -> float
172  { return params[4]; });
173  auto monitor_param_dzdr_t = Monitored::Collection("dzdr_t", parametersCollection,
174  [] (const auto& params) -> float
175  { return params[5]; });
176 
177 
178  auto monitor_param_penalty = Monitored::Collection("penalty", parametersCollection,
179  [] (const auto& params) -> float
180  { return params[6]; });
181 
182 
184  ATH_CHECK(eventInfo.isValid());
185 
186  auto monitor_event_number = Monitored::Scalar<long>("event_number", static_cast<long>(eventInfo->eventNumber()));
187  auto monitor_actual_mu = Monitored::Scalar<float>("actual_mu", eventInfo->actualInteractionsPerCrossing());
188 
189  std::vector<int> vec_truthBarcode;
190  std::vector<double> vec_truthProb;
191  if (not m_prdTruth.empty())
192  ATH_CHECK( fillTruthHistograms(ctx, *seed_collection, vec_truthBarcode, vec_truthProb) );
193  auto monitor_truth_barcode = Monitored::Collection("truth_barcode", vec_truthBarcode);
194  auto monitor_truth_prob = Monitored::Collection("truth_prob", vec_truthProb);
195 
196  fill(m_monGroupName.value(),
197  monitor_x1, monitor_y1, monitor_z1, monitor_r1,
198  monitor_x2, monitor_y2, monitor_z2, monitor_r2,
199  monitor_x3, monitor_y3, monitor_z3, monitor_r3,
200  monitor_param_pt, monitor_param_theta, monitor_param_eta, monitor_param_d0,
201  monitor_param_dzdr_b, monitor_param_dzdr_t,
202  monitor_param_penalty,
203  monitor_event_number, monitor_actual_mu,
204  monitor_truth_barcode, monitor_truth_prob);
205 
206  return StatusCode::SUCCESS;
207  }
208 
210  const ActsTrk::SeedContainer& seed_container,
211  std::vector<int>& truthBarCodeVec,
212  std::vector<double>& truthProbVec) const
213  {
214  ATH_MSG_DEBUG( "Filling Truth Histograms for " << name() << " ... " );
215 
217  ATH_CHECK(prdTruthHandle.isValid());
218  const PRD_MultiTruthCollection* prdTruth = prdTruthHandle.get();
219 
221  ATH_CHECK( detEleHandle.isValid() );
222  const InDetDD::SiDetectorElementCollection& detElements = *detEleHandle.retrieve();
223 
224  // Read the b-field information
226  ATH_CHECK( readHandle.isValid() );
227 
228  const AtlasFieldCacheCondObj* fieldCondObj{ *readHandle };
229  ATH_CHECK( fieldCondObj != nullptr );
230 
231  Acts::MagneticFieldContext magFieldContext(fieldCondObj);
232  auto geo_context = m_trackingGeometryTool->getNominalGeometryContext();
233 
234 
235  // utilities
236  // Used for param estimation
237  auto retrieveSurfaceFunction =
238  [this, &detElements] (const ActsTrk::Seed& seed, bool useTopSp) -> const Acts::Surface&
239  {
240  const xAOD::SpacePoint* sp = useTopSp ? seed.sp().back() : seed.sp().front();
241  const InDetDD::SiDetectorElement* element = detElements.getDetectorElement(
242  useTopSp ? sp->elementIdList().back() : sp->elementIdList().front());
243  const Trk::Surface& atlas_surface = element->surface();
244  return this->m_ATLASConverterTool->trkSurfaceToActsSurface(atlas_surface);
245  };
246 
247 
248  // computation
249  std::vector<bool> vec_pass;
250  vec_pass.reserve(seed_container.size());
251 
252  std::vector<double> estimated_pt;
253  std::vector<double> estimated_eta;
254  estimated_pt.reserve(seed_container.size());
255  estimated_eta.reserve(seed_container.size());
256 
257  for (const auto* seed : seed_container) {
258  std::optional<Acts::BoundTrackParameters> optTrackParams =
259  m_paramEstimationTool->estimateTrackParameters(
260  *seed,
261  m_useTopSp,
262  geo_context.context(),
263  magFieldContext,
264  retrieveSurfaceFunction);
265 
266  if ( not optTrackParams.has_value() ) continue;
267 
268  const auto param = optTrackParams.value();
269  estimated_pt.push_back( param.transverseMomentum() );
270  estimated_eta.push_back( -std::log( std::tan(0.5 * param.parameters()[Acts::eBoundTheta]) ) );
271 
272  std::map<int, int> truthHits;
273 
274  const auto& sps = seed->sp();
275  for (const auto* sp : sps) {
276  int number_of_clusters = m_usePixel ? 1 : 2;
277  for (int cluster_number(0); cluster_number < number_of_clusters; cluster_number++) {
278  const auto& els = sp->measurements();
279  const auto* cluster = els[cluster_number];
280  const xAOD::UncalibMeasType cluster_type = cluster->type();
281  const Identifier id = cluster_type == xAOD::UncalibMeasType::PixelClusterType
282  ? identify(*reinterpret_cast<const xAOD::PixelCluster*>(cluster))
283  : identify(*reinterpret_cast<const xAOD::StripCluster*>(cluster));
284  matchParticleToSeedClusters(prdTruth, id, truthHits);
285  }
286  }
287 
288  auto [barcode, prob] = findSeedMajorityTruthParticle(truthHits);
289  truthBarCodeVec.push_back(barcode);
290  truthProbVec.push_back(prob);
291  vec_pass.push_back( barcode != 0 and prob > 0.5 );
292  }
293 
294  auto monitor_estimated_pt = Monitored::Collection("estimated_pt", estimated_pt);
295  auto monitor_estimated_eta = Monitored::Collection("estimated_eta", estimated_eta);
296  auto monitor_pass = Monitored::Collection("passed", vec_pass);
297 
298  fill(m_monGroupName.value(),
299  monitor_pass,
300  monitor_estimated_pt, monitor_estimated_eta);
301 
302  return StatusCode::SUCCESS;
303  }
304 
306  {
307  static const SG::ConstAccessor< ElementLink< InDet::PixelClusterCollection > > pixelLinkAcc("pixelClusterLink");
308 
309  // TO-DO -- AODs will not have this decoration, we'll need to provide a function for recomputing
310  // the identifier from local position
311  if (not pixelLinkAcc.isAvailable (cluster))
312  return Identifier();
313 
314  ElementLink<InDet::PixelClusterCollection> pixelLink = pixelLinkAcc(cluster);
315  return (*pixelLink)->identify();
316  }
317 
319  {
320  static const SG::ConstAccessor< ElementLink< InDet::SCT_ClusterCollection > > stripLinkAcc("sctClusterLink");
321 
322  // TO-DO -- AODs will not have this decoration, we'll need to provide a function for recomputing
323  // the identifier from local position
324  if (not stripLinkAcc.isAvailable (cluster))
325  return Identifier();
326 
327  ElementLink<InDet::SCT_ClusterCollection> stripLink = stripLinkAcc(cluster);
328  return (*stripLink)->identify();
329  }
330 
331 
333  const Identifier& id,
334  std::map<int, int>& countMap) const {
335  auto n1 = prdTruth->count(id);
336  if (n1 == 0) {
337  int bc = 0;
338  auto nBC = countMap.count(bc);
339  if (nBC == 0) {
340  countMap[bc] = 1;
341  } else {
342  countMap[bc] += 1;
343  }
344  } else {
345  using iprdt = PRD_MultiTruthCollection::const_iterator;
346  std::pair<iprdt, iprdt> range = prdTruth->equal_range(id);
347  for (iprdt itr = range.first; itr != range.second; ++itr) {
348  auto bc = itr->second.barcode();
349  auto nBC = countMap.count(bc);
350  if (nBC == 0) {
351  countMap[bc] = 1;
352  } else {
353  countMap[bc] += 1;
354  }
355  }
356  }
357  }
358 
359 
360 
361  std::pair<int, double> SeedAnalysisAlg::findSeedMajorityTruthParticle(const std::map<int, int>& countMap) const {
362  int bestCount = 0;
363  int bestBarcode = std::numeric_limits<int>::min();
364 
365  for (auto const& [barcode, count] : countMap) {
366  if (count > bestCount) {
367  bestCount = count;
368  bestBarcode = barcode;
369  }
370  }
371 
372  // 3 spacepoints per seed, 1 (2) clusters per spacepoint for pixel (strip)
373  double nTotal = m_usePixel ? 3. : 6.;
374  double prob = bestCount / nTotal;
375 
376  return std::make_pair(bestBarcode, prob);
377  }
378 
379  // Same computation as in ActsTrk::SiSpacePointsSeedMaker
380  std::array<float, 7> SeedAnalysisAlg::estimateParameters(const ActsTrk::Seed& seed,
381  float pTPerHelixRadius) const
382  {
383  auto extractCoordinates =
384  [] (const xAOD::SpacePoint* sp) -> std::array<float,4>
385  {
386  std::array<float, 4> coordinates {static_cast<float>(sp->x()),
387  static_cast<float>(sp->y()),
388  static_cast<float>(sp->z()),
389  static_cast<float>(std::sqrt(sp->x()*sp->x() + sp->y()*sp->y()))};
390  return coordinates;
391  };
392 
393  auto extractQuantities =
394  [] (const std::array<float, 4>& sp,
395  const std::array<float, 4>& spM,
396  bool isBottom) -> std::array<float, 5>
397  {
398  auto& [xM, yM, zM, rM] = spM;
399  auto& [xO, yO, zO, rO] = sp;
400 
401  float cosPhiM = xM / rM;
402  float sinPhiM = yM / rM;
403  float deltaX = xO - xM;
404  float deltaY = yO - yM;
405  float deltaZ = zO - zM;
406  float x = deltaX * cosPhiM + deltaY * sinPhiM;
407  float y = deltaY * cosPhiM - deltaX * sinPhiM;
408  float iDeltaR2 = 1. / (deltaX * deltaX + deltaY * deltaY);
409  float iDeltaR = std::sqrt(iDeltaR2);
410  int bottomFactor = int(not isBottom) - int(isBottom);
411  float cot_theta = deltaZ * iDeltaR * bottomFactor;
412 
413  // cotTheta, Zo, iDeltaR, U, V
414  std::array<float, 5> params =
415  {
416  cot_theta,
417  zM - rM * cot_theta,
418  iDeltaR,
419  x * iDeltaR2,
420  y * iDeltaR2
421  };
422 
423  return params;
424  };
425 
426  const auto& sps = seed.sp();
427  const auto* bottom = sps[0];
428  const auto* medium = sps[1];
429  const auto* top = sps[2];
430 
431  auto coo_b = extractCoordinates(bottom);
432  auto coo_m = extractCoordinates(medium);
433  auto coo_t = extractCoordinates(top);
434 
435  // Compute the variables we need
436  auto [cotThetaB, Zob, iDeltaRB, Ub, Vb] = extractQuantities(coo_b, coo_m, true);
437  auto [cotThetaT, Zot, iDeltaRT, Ut, Vt] = extractQuantities(coo_t, coo_m, false);
438 
439  float squarediDeltaR2B = iDeltaRB*iDeltaRB;
440  float squarediDeltaR2T = iDeltaRB*iDeltaRT;
441  float squarediDeltaR = std::min(squarediDeltaR2B, squarediDeltaR2T);
442 
443  auto& [xB, yB, zB, rB] = coo_b;
444  auto& [xM, yM, zM, rM] = coo_m;
445  auto& [xT, yT, zT, rT] = coo_t;
446 
447  float ax = xM / rM;
448  float ay = yM/ rM;
449 
450  float dxb = xM - xB;
451  float dyb = yM - yB;
452  float dzb = zM - zB;
453  float xb = dxb * ax + dyb *ay;
454  float yb = dyb * ax - dxb * ay;
455  float dxyb = xb * xb + yb * yb;
456  float dxt = xT - xM;
457  float dyt = yT - yM;
458  float dzt = zT - zM;
459  float xt = dxt * ax + dyt *ay;
460  float yt = dyt * ax - dxt * ay;
461  float dxyt = xt * xt + yt * yt;
462 
463  float tzb = dzb * std::sqrt( 1./dxyb );
464  float tzt = dzt * std::sqrt( 1./dxyt );
465 
466  float sTzb2 = std::sqrt(1 + tzb*tzb);
467 
468  float dU = Ut - Ub;
469  if (dU == 0.) {
470  return {-1, -1, -1, -1, -1, -1, -1};
471  }
472 
473  float A = (Vt - Vb) / dU;
474  float S2 = 1. + A * A;
475  float B = Vb - A * Ub;
476  float B2 = B * B;
477  if (B2 == 0) B2 = 1e-8;
478 
479  // dzdr
480  float dzdr_b = (zM - zB) / (rM - rB);
481  float dzdr_t = (zT - zM) / (rT - rM);
482 
483  // eta
484  float cotThetaAvg2 = cotThetaB * cotThetaT;
485  if (cotThetaAvg2 <= 0) {
486  return {-1, -1, -1, -1, -1, -1, -1};
487  }
488  float theta = std::atan(1. / std::sqrt(cotThetaAvg2));
489  float eta = -std::log(std::tan(0.5 * theta));
490 
491  // pt
492  float pt = pTPerHelixRadius * std::sqrt(S2 / B2) / 2.;
493 
494  // d0
495  float d0 = std::abs((A - B * rM) * rM);
496 
497  // curvature
498  // not used in current version of the code. We may want to use it later
499  // float curvature = B / std::sqrt(S2);
500  float penalty = std::abs((tzb - tzt) / (squarediDeltaR * sTzb2));
501 
502  return {pt, theta, eta, d0, dzdr_b, dzdr_t, penalty};
503  }
504 
505 }
PixelID.h
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
ActsTrk::SeedAnalysisAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: SeedAnalysisAlg.cxx:24
ActsTrk::SeedAnalysisAlg::m_prdTruth
SG::ReadHandleKey< PRD_MultiTruthCollection > m_prdTruth
Definition: SeedAnalysisAlg.h:71
ATLASMagneticFieldWrapper
Definition: ATLASMagneticFieldWrapper.h:15
yt
#define yt
fitman.ax
ax
Definition: fitman.py:522
InDetDD::SiDetectorElementCollection
Definition: SiDetectorElementCollection.h:30
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
AtlasFieldCacheCondObj
Definition: AtlasFieldCacheCondObj.h:19
makeComparison.deltaY
int deltaY
Definition: makeComparison.py:44
ActsTrk::SeedAnalysisAlg::m_detEleCollKey
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_detEleCollKey
Definition: SeedAnalysisAlg.h:72
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
PRD_MultiTruthCollection
A PRD is mapped onto all contributing particles.
Definition: PRD_MultiTruthCollection.h:24
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
ActsTrk::SeedAnalysisAlg::fillTruthHistograms
StatusCode fillTruthHistograms(const EventContext &ctx, const ActsTrk::SeedContainer &seed_container, std::vector< int > &, std::vector< double > &) const
Definition: SeedAnalysisAlg.cxx:209
Amg::y
@ y
Definition: GeoPrimitives.h:35
AthMonitorAlgorithm::m_EventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_EventInfoKey
Key for retrieving EventInfo from StoreGate.
Definition: AthMonitorAlgorithm.h:362
test_pyathena.pt
pt
Definition: test_pyathena.py:11
InDetDD::SolidStateDetectorElementBase::surface
Trk::Surface & surface()
Element Surface.
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
ATLASMagneticFieldWrapper.h
ActsTrk::SeedAnalysisAlg::SeedAnalysisAlg
SeedAnalysisAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: SeedAnalysisAlg.cxx:20
xAOD::SpacePoint_v1
Definition: SpacePoint_v1.h:29
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:55
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
covarianceTool.prob
prob
Definition: covarianceTool.py:678
x
#define x
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
ATLASMagneticFieldWrapper::makeCache
MagneticFieldProvider::Cache makeCache(const Acts::MagneticFieldContext &mctx) const override
Definition: ATLASMagneticFieldWrapper.h:34
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
xAOD::SpacePoint_v1::elementIdList
const std::vector< DetectorIDHashType > & elementIdList() const
Returns the IdentifierHash of the spacepoint (corresponds to the detector element IdentifierHash)
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
ActsTrk::SeedAnalysisAlg::findSeedMajorityTruthParticle
std::pair< int, double > findSeedMajorityTruthParticle(const std::map< int, int > &countMap) const
Definition: SeedAnalysisAlg.cxx:361
ActsTrk::SeedAnalysisAlg::m_useTopSp
Gaudi::Property< bool > m_useTopSp
Definition: SeedAnalysisAlg.h:81
A
xt
#define xt
SG::ReadCondHandle::retrieve
const_pointer_type retrieve()
Definition: ReadCondHandle.h:162
ActsTrk::SeedAnalysisAlg::m_paramEstimationTool
ToolHandle< ActsTrk::ITrackParamsEstimationTool > m_paramEstimationTool
Definition: SeedAnalysisAlg.h:65
isBottom
bool isBottom(const T &p)
Definition: AtlasPID.h:172
z
#define z
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
SG::ReadHandle::get
const_pointer_type get() const
Dereference the pointer, but don't cache anything.
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
HepMC::barcode
int barcode(const T *p)
Definition: Barcode.h:16
Amg::x
@ x
Definition: GeoPrimitives.h:34
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
ActsTrk::SeedAnalysisAlg::m_ATLASConverterTool
ToolHandle< ActsTrk::IActsToTrkConverterTool > m_ATLASConverterTool
Definition: SeedAnalysisAlg.h:67
ActsTrk::SeedAnalysisAlg::m_fieldCondObjInputKey
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCondObjInputKey
Definition: SeedAnalysisAlg.h:75
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
ActsTrk::SeedAnalysisAlg::m_beamSpotKey
SG::ReadCondHandleKey< InDet::BeamSpotData > m_beamSpotKey
Definition: SeedAnalysisAlg.h:74
xAOD::StripCluster_v1
Definition: StripCluster_v1.h:17
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
ActsTrk::Seed
Acts::Seed< xAOD::SpacePoint, 3ul > Seed
Definition: Seed.h:12
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
DataVector
Derived DataVector<T>.
Definition: DataVector.h:794
SiLocalPosition.h
compareGeometries.deltaX
float deltaX
Definition: compareGeometries.py:32
ActsTrk::SeedAnalysisAlg::m_monGroupName
Gaudi::Property< std::string > m_monGroupName
Definition: SeedAnalysisAlg.h:79
ActsTrk::SeedAnalysisAlg::matchParticleToSeedClusters
void matchParticleToSeedClusters(const PRD_MultiTruthCollection *prdTruth, const Identifier &id, std::map< int, int > &countMap) const
Definition: SeedAnalysisAlg.cxx:332
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
ActsTrk::SeedAnalysisAlg::estimateParameters
std::array< float, 7 > estimateParameters(const ActsTrk::Seed &seed, float pTPerHelixRadius) const
Definition: SeedAnalysisAlg.cxx:380
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
SiDetectorElement.h
DataModelTestDataCommonDict::xb
DMTest::CView::Pers_t xb
Definition: DataModelTestDataCommonDict.h:55
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
Rtt_histogram.n1
n1
Definition: Rtt_histogram.py:21
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
ActsTrk::SeedAnalysisAlg::m_usePixel
Gaudi::Property< bool > m_usePixel
Definition: SeedAnalysisAlg.h:82
xAOD::PixelCluster_v1
Definition: PixelCluster_v1.h:17
y
#define y
ATLASMagneticFieldWrapper::getField
Acts::Result< Acts::Vector3 > getField(const Acts::Vector3 &position, Acts::MagneticFieldProvider::Cache &gcache) const override
Definition: ATLASMagneticFieldWrapper.h:39
ActsTrk::SeedAnalysisAlg::identify
const Identifier identify(const xAOD::PixelCluster &) const
Definition: SeedAnalysisAlg.cxx:305
ActsTrk::SeedAnalysisAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: SeedAnalysisAlg.cxx:49
PixelModuleDesign.h
xAOD::UncalibMeasType
UncalibMeasType
Define the type of the uncalibrated measurement.
Definition: MeasurementDefs.h:25
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
S2
struct TBPatternUnitContext S2
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
ActsTrk
The AlignStoreProviderAlg loads the rigid alignment corrections and pipes them through the readout ge...
Definition: MuonDetectorBuilderTool.cxx:55
top
@ top
Definition: TruthClasses.h:64
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
PowhegControl_ttFCNC_NLO.params
params
Definition: PowhegControl_ttFCNC_NLO.py:226
makeComparison.deltaZ
int deltaZ
Definition: makeComparison.py:46
ActsTrk::SeedAnalysisAlg::m_inputSeedColletionKey
SG::ReadHandleKey< ActsTrk::SeedContainer > m_inputSeedColletionKey
Definition: SeedAnalysisAlg.h:69
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
SeedAnalysisAlg.h
InDetDD::SiDetectorElementCollection::getDetectorElement
const SiDetectorElement * getDetectorElement(const IdentifierHash &hash) const
Definition: SiDetectorElementCollection.cxx:15
xAOD::UncalibMeasType::PixelClusterType
@ PixelClusterType
fitman.ay
ay
Definition: fitman.py:525
ActsTrk::SeedAnalysisAlg::m_trackingGeometryTool
PublicToolHandle< IActsTrackingGeometryTool > m_trackingGeometryTool
Definition: SeedAnalysisAlg.h:66
Identifier
Definition: IdentifierFieldParser.cxx:14