ATLAS Offline Software
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
MuonR4::MsTrackSeeder Class Reference

Helper class to group muon sgements that may belong to a muon trajectory. More...

#include <MsTrackSeeder.h>

Inheritance diagram for MuonR4::MsTrackSeeder:
Collaboration diagram for MuonR4::MsTrackSeeder:

Classes

struct  Config
 Configuration object. More...
 

Public Types

enum  SectorProjector : std::int8_t { SectorProjector::leftOverlap = -1, SectorProjector::center = 0, SectorProjector::rightOverlap = 1 }
 Enumeration to select the sector projection. More...
 
enum  SeedCoords : std::uint8_t { SeedCoords::eDetSection, SeedCoords::eSector, SeedCoords::ePosOnCylinder }
 Abrivation of the seed coordinates. More...
 
using SearchTree_t = Acts::KDTree< 3, const xAOD::MuonSegment *, double, std::array, 6 >
 Definition of the search tree class. More...
 
using Location = MsTrackSeed::Location
 Enum toggling whether the segment is in the endcap or barrel. More...
 
using VecOpt_t = std::optional< Amg::Vector3D >
 

Public Member Functions

 MsTrackSeeder (const std::string &msgName, Config &&cfg)
 Standard constructor. More...
 
SearchTree_t constructTree (const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegmentContainer &segments) const
 Construct a complete search tree from a MuonSegment container. More...
 
Amg::Vector2D expressOnCylinder (const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const Location loc, const SectorProjector proj) const
 Expresses the segment on the cylinder surface. More...
 
Amg::Vector3D projectOntoPhiPlane (const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const double projectPhi) const
 
Amg::Vector3D projectOntoSector (const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const SectorProjector proj) const
 Projects the segment's position onto the sector centre or onto the overlap point with one of the neighbouring sector. More...
 
Amg::Vector3D projectOntoSector (const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const MsTrackSeed &seed) const
 Projects the segment's position onto the sector centre or onto the overlap point with one of the neighbouring sector. More...
 
double estimateQtimesP (const ActsTrk::GeometryContext &gctx, const AtlasFieldCacheCondObj &magField, const MsTrackSeed &seed) const
 Estimate the q /p of the seed candidate from the contained segments. More...
 
bool withinBounds (const Amg::Vector2D &projPos, const Location loc) const
 Returns whether the expression on the cylinder is within the surface bounds. More...
 
std::unique_ptr< MsTrackSeedContainerfindTrackSeeds (const EventContext &ctx, const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegmentContainer &segments) const
 Constructs the MS track seeds from the segment container. More...
 
const MuonGMR4::SpectrometerSectorenvelope (const xAOD::MuonSegment &segment) const
 Returns the spectrometer envelope associated to the segment (Coord system where the parameter are expressed) More...
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

Static Public Member Functions

static double projectedPhi (const int sector, const SectorProjector proj)
 Returns the projected phi for a given sector and projector. More...
 
static SectorProjector projectorFromSeed (const xAOD::MuonSegment &seg, const MsTrackSeed &refSeed)
 Returns the Sector projector within the context of a MsTrackSeed. More...
 

Private Types

using TreeRawVec_t = SearchTree_t::vector_t
 Abbrivation of the KDTree raw data vector. More...
 

Private Member Functions

std::optional< double > calculateRadius (VecOpt_t &&pI, VecOpt_t &&pM, VecOpt_t &&pO, const Amg::Vector3D &planeNorm) const
 Calculates the radius of the bending circle from three points using the sagitta. More...
 
void appendSegment (const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment *segment, const Location loc, TreeRawVec_t &outContainer) const
 Append the to the raw data container. More...
 
std::unique_ptr< MsTrackSeedContainerresolveOverlaps (MsTrackSeedContainer &&unresolved) const
 Removes exact duplciates or partial subsets of the MsTrackSeeds. More...
 
void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

Private Attributes

Config m_cfg {}
 
std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging) More...
 

Detailed Description

Helper class to group muon sgements that may belong to a muon trajectory.

The reconstructed muon segments are projected onto the surface of a cylinder crossing roughly the middle stations of the MS. They are then appended to a 3-dimensional search tree using the extrapolated coordinate on the cylnder, the cylinder surface index and the segment's associated sector number.

Definition at line 29 of file MsTrackSeeder.h.

Member Typedef Documentation

◆ Location

Enum toggling whether the segment is in the endcap or barrel.

Definition at line 56 of file MsTrackSeeder.h.

◆ SearchTree_t

using MuonR4::MsTrackSeeder::SearchTree_t = Acts::KDTree<3, const xAOD::MuonSegment*, double, std::array, 6>

Definition of the search tree class.

Definition at line 54 of file MsTrackSeeder.h.

◆ TreeRawVec_t

using MuonR4::MsTrackSeeder::TreeRawVec_t = SearchTree_t::vector_t
private

Abbrivation of the KDTree raw data vector.

Definition at line 160 of file MsTrackSeeder.h.

◆ VecOpt_t

Definition at line 58 of file MsTrackSeeder.h.

Member Enumeration Documentation

◆ SectorProjector

enum MuonR4::MsTrackSeeder::SectorProjector : std::int8_t
strong

Enumeration to select the sector projection.

Enumerator
leftOverlap 
center 

Project the segment onto the overlap with the previous sector.

rightOverlap 

Project the segment onto the sector centre.

Definition at line 60 of file MsTrackSeeder.h.

60  : std::int8_t {
61  leftOverlap = -1,
62  center = 0,
63  rightOverlap = 1
64  };

◆ SeedCoords

enum MuonR4::MsTrackSeeder::SeedCoords : std::uint8_t
strong

Abrivation of the seed coordinates.

Enumerator
eDetSection 

Encode the seed location (-1,1 -> endcaps, 0 -> barrel

eSector 

Sector of the associated spectrometer sector.

ePosOnCylinder 

Extrapolation position along the cylinder surface.

Definition at line 66 of file MsTrackSeeder.h.

66  : std::uint8_t{
68  eDetSection,
70  eSector,
72  ePosOnCylinder
73  };

Constructor & Destructor Documentation

◆ MsTrackSeeder()

MuonR4::MsTrackSeeder::MsTrackSeeder ( const std::string &  msgName,
Config &&  cfg 
)

Standard constructor.

Parameters
msgNameName of the seeder's msgStream
cfgConfigured cylinder dimensions, cuts & selection tool

Definition at line 80 of file MsTrackSeeder.cxx.

80  :
81  AthMessaging{msgName},
82  m_cfg{std::move(cfg)}{
83  auto& v{m_cfg.fieldExtpSteps};
84  v.insert(0.); v.insert(1.);
85  if (std::ranges::any_of(v, [](const double x){
86  return x < 0. || x > 1.;
87  })) {
88  THROW_EXCEPTION("Found invalid extrapolation steps.");
89  }
90  }

Member Function Documentation

◆ appendSegment()

void MuonR4::MsTrackSeeder::appendSegment ( const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegment segment,
const Location  loc,
TreeRawVec_t outContainer 
) const
private

Append the to the raw data container.

If the projection onto the barrel cylinder / endcap discs exceeds the bounds, the segment is not added. Segments in sector 1/16 are mirrored into sector 0/17 to complete the search range

Parameters
gctxGeometry context to fetch the transforms of the associated sector envelope
segmentPointer to the segment to add
locSwitch whether the segment shall be projected onto barrel/endcap
outContainerRaw KDTree data vector where the segment is appended

Check whether the segment belongs to the left or right sector as well

Blow-up the number of sectors by a factor of 2. The even numbers represent the segments expressed @ the sector centre. The odd numbers represent the overlap region between two adjacent sectors. For sector 16, the right overlap region is mapped to 1

Enumeration to indicate whether the segment is expressed on the negative endcap (-1), the barrel (0) or the positive endcap

Coordinate on the cylinder

Definition at line 349 of file MsTrackSeeder.cxx.

352  {
353 
354  const int segSector = segment->sector();
357  const int projSector = ringSector(segSector + Acts::toUnderlying(proj));
358  if (segment->nPhiLayers() > 0 && proj != SectorProjector::center &&
359  !sectorMap.insideSector(projSector, segment->position().phi())) {
360  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Segment @"<<Amg::toString(segment->position())
361  <<" is not in sector "<<projSector<<" which is "<<to_string(proj) <<" to "<<segment->sector());
362  continue;
363  }
364  const Amg::Vector2D refPoint{expressOnCylinder(gctx, *segment, loc, proj)};
365  if (!withinBounds(refPoint, loc)) {
366  continue;
367  }
368  using enum SeedCoords;
369  std::array<double, 3> coords{};
373  const int treeSector = 2*segSector + Acts::toUnderlying(proj);
374  coords[Acts::toUnderlying(eSector)] = ringOverlap(treeSector);
377  coords[Acts::toUnderlying(eDetSection)] = Acts::toUnderlying(loc) * sign(refPoint[1]);
379  coords[Acts::toUnderlying(ePosOnCylinder)] = refPoint[Location::Barrel == loc];
380  ATH_MSG_VERBOSE("Add segment "<<print(*segment)<<", seed quality: "
381  <<m_cfg.selector->passSeedingQuality(Gaudi::Hive::currentContext(), *detailedSegment(*segment))
382  <<" with "<<coords<<" to the search tree");
383  outContainer.emplace_back(std::move(coords), segment);
384  }
385  }

◆ calculateRadius()

std::optional< double > MuonR4::MsTrackSeeder::calculateRadius ( VecOpt_t &&  pI,
VecOpt_t &&  pM,
VecOpt_t &&  pO,
const Amg::Vector3D planeNorm 
) const
private

Calculates the radius of the bending circle from three points using the sagitta.

If one point is not defined, the origin is inserted instead. If two or more points are not set, a nullopt is returned

Derive the radius from the two equations. The line connecting pI and pO divides up the radius in the sagitta and the complementary section H R = S + H Also H is the catheter of the triangle <R, L / 2, H> R^{2} = L^{2} / 4 + H^{2} —> R^{2} = L^{2} / 4 + (R-S)^{2} —> 2*S*R = L^{2} / 4 + S^{2} (Approximating S^{2} = 0) —> R = L^{2} / (8 * s)

Definition at line 187 of file MsTrackSeeder.cxx.

188  {
189  if (!pI || !pM || !pO) {
190  return std::nullopt;
191  }
192  const Amg::Vector3D leverL = (*pO) - (*pI);
193 
194  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Construct sagitta from "
195  <<"\n --- Inner: "<<print(*pI) <<"\n --- Middle: "<<print(*pM)
196  <<"\n --- Outer: "<<print(*pO));
197  if (std::abs(planeNorm.dot(leverL)) > Acts::s_onSurfaceTolerance ||
198  std::abs(planeNorm.dot( (*pM) - (*pI))) > Acts::s_onSurfaceTolerance) {
199  THROW_EXCEPTION("The lever arm is in the bending plane: "<<Amg::toString(planeNorm)
200  <<", "<<Amg::toString(leverL.unit())<<", "<<Amg::toString( ((*pM) - (*pI)).unit()));
201  }
202  const Amg::Vector3D sagittaDir = leverL.cross(planeNorm).unit();
203  std::optional<double> sagitta = Amg::intersect<3>(*pI, leverL.unit(), *pM, sagittaDir);
204  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Estimated sagitta: "<<(sagitta ?
205  std::to_string(sagitta.value_or(0.)) : "---")<<", lever arm: "
206  <<(leverL.mag() / Gaudi::Units::m)<<" [m]" );
207  if (!sagitta) {
208  return std::nullopt;
209  }
218  return leverL.dot(leverL) / (8. * (*sagitta));
219  }

◆ constructTree()

SearchTree_t MuonR4::MsTrackSeeder::constructTree ( const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegmentContainer segments 
) const

Construct a complete search tree from a MuonSegment container.

Parameters
gctxGeometry context to fetch the transforms of the associated sector envelope
segmentsReference to the segment container to construct.

Definition at line 386 of file MsTrackSeeder.cxx.

387  {
388  TreeRawVec_t rawData{};
389  rawData.reserve(3*segments.size());
390  for (const xAOD::MuonSegment* segment : segments){
391  appendSegment(gctx, segment, Location::Barrel, rawData);
392  appendSegment(gctx, segment, Location::Endcap, rawData);
393  }
394  ATH_MSG_VERBOSE("Create a new tree with "<<rawData.size()<<" entries. ");
395  return SearchTree_t{std::move(rawData)};
396  }

◆ envelope()

const MuonGMR4::SpectrometerSector * MuonR4::MsTrackSeeder::envelope ( const xAOD::MuonSegment segment) const

Returns the spectrometer envelope associated to the segment (Coord system where the parameter are expressed)

Parameters
segmentReference to the segment of interest

Definition at line 98 of file MsTrackSeeder.cxx.

98  {
99  return m_cfg.detMgr->getSectorEnvelope(segment.chamberIndex(),
100  segment.sector(),
101  segment.etaIndex());
102  }

◆ estimateQtimesP()

double MuonR4::MsTrackSeeder::estimateQtimesP ( const ActsTrk::GeometryContext gctx,
const AtlasFieldCacheCondObj magField,
const MsTrackSeed seed 
) const

Estimate the q /p of the seed candidate from the contained segments.

A circle from the inner, middle & outer segment points is constructed. To avoid side effects from (non)-present phi measurements, the segments are expressed on the sector planes

Parameters
gctxGeometry context to fetch the transforms of the associated sector envelope
magFielReference to the magnetic field holder
seedReference to the seed of interest.

Calculate the averaged phi from the segments

Calculate the sagitta points

Sample the magnetic field

Calculate the radius from the barrel segments

Calculate the radius from the endcap segments

If no radius could be calculated return the straight line estimator

Definition at line 220 of file MsTrackSeeder.cxx.

222  {
223 
224  MagField::AtlasFieldCache fieldCache{};
225  magField.getInitializedCache(fieldCache);
226 
228  double circPhi{0.};
229  unsigned nSegsWithPhi{0};
230  for (const xAOD::MuonSegment* segment : seed.segments()) {
231  if (segment->nPhiLayers() > 0) {
232  circPhi += std::atan2(segment->y(), segment->x());
233  ++nSegsWithPhi;
234  }
235  }
236  if (!nSegsWithPhi){
237  circPhi = projectedPhi(seed.segments()[0]->sector(),
238  projectorFromSeed(*seed.segments()[0], seed));
239  } else {
240  circPhi /=nSegsWithPhi;
241  }
242  auto layerPos{Acts::filledArray<VecOpt_t, 6>(std::nullopt)};
243  double avgBField{0.}, avgTheta{0.};
244  const xAOD::TruthParticle* truthMuon{nullptr};
245  const Amg::Vector3D planeNorm = Acts::makeDirectionFromPhiTheta(circPhi+ 90._degree, 90._degree);
246 
247  {
248  Amg::Vector3D projPos = projectOntoPhiPlane(gctx, *seed.segments()[0], circPhi);
249  Amg::Vector3D projDir = dirForBField(*seed.segments()[0], circPhi);
251  unsigned nBFieldPoints{0};
252  const unsigned nSeedSeg = seed.segments().size();
253  using namespace Muon::MuonStationIndex;
254  for (unsigned int s = 0; s < nSeedSeg; ++s) {
255  avgTheta += projDir.theta();
257  const xAOD::MuonSegment& segment{*seed.segments()[s]};
258  if (!truthMuon) {
260  }
261  switch (toStationIndex(segment.chamberIndex())) {
262  using enum StIndex;
263  case BI:
264  case BE:{
265  average(projPos, layerPos[0]);
266  break;
267  } case BM: {
268  average(projPos, layerPos[1]);
269  break;
270  } case BO: {
271  average(projPos, layerPos[2]);
272  break;
273  } case EI:
274  case EE: {
275  average(projPos, layerPos[3]);
276  break;
277  } case EM : {
278  average(projPos, layerPos[4]);
279  break;
280  } case EO : {
281  average(projPos, layerPos[5]);
282  break;
283  } default: {
284  break;
285  }
286  }
287  if (s + 1 == nSeedSeg) {
288  break;
289  }
291  Amg::Vector3D nextDir = dirForBField(*seed.segments()[s+1], circPhi);
292  Amg::Vector3D nextPos = projectOntoPhiPlane(gctx, *seed.segments()[s+1], circPhi);
293 
294  for (double fieldStep : m_cfg.fieldExtpSteps) {
295  /* The */
296  if (fieldStep == 0. && s > 0) {
297  continue;
298  }
299  const Amg::Vector3D extPos = (1. -fieldStep) * projPos + fieldStep * nextPos;
300  const Amg::Vector3D extDir = ((1. -fieldStep) * projDir + fieldStep * nextDir).unit();
301  // const Amg::Vector3D loc
302  fieldCache.getField(extPos.data(), locField.data());
303  const double localB = extDir.cross(locField).mag();
304 
305  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Segment "<<s<<", step: "<<fieldStep
306  <<", position: "<<Amg::toString(extPos)<<", dir: "<<Amg::toString(extDir)
307  <<" --> localB: "<<(localB * 1000.)<<" T."
308  <<", B: "<<Amg::toString(locField* 1000.)
309  <<", PxB:"<<Amg::toString(extDir.cross(locField).unit())
310  <<", planeNorm: "<<Amg::toString(planeNorm));
311  avgBField += localB;
312  ++nBFieldPoints;
313  }
314  projPos = std::move(nextPos);
315  projDir = std::move(nextDir);
316  }
317  avgBField /= std::max(nBFieldPoints, 1u);
318  ATH_MSG_DEBUG(__func__<<"() "<<__LINE__<<" - averaged field: "<<(avgBField * 1000.)
319  <<" T, number of points: "<<nBFieldPoints<<".");
320  }
321  avgTheta /= seed.segments().size();
323  std::optional<double> barrelR = calculateRadius(std::move(layerPos[0]),
324  std::move(layerPos[1]),
325  std::move(layerPos[2]), planeNorm);
327  std::optional<double> endcapR = calculateRadius(std::move(layerPos[3]),
328  std::move(layerPos[4]),
329  std::move(layerPos[5]), planeNorm);
331  if (!barrelR && !endcapR) {
332  return 5.*Gaudi::Units::TeV;
333  }
334  const double r = 0.5* ((barrelR ? *barrelR : *endcapR) +
335  (endcapR ? *endcapR : *barrelR));
337  const double P = 0.3* Gaudi::Units::GeV* avgBField * r / std::abs(std::sin(avgTheta));
338 
339  ATH_MSG_DEBUG(__func__<<"() "<<__LINE__<<" - Estimated radius "<<r / Gaudi::Units::m<<" [m] --> P: "<<
340  (P / Gaudi::Units::GeV)<<" [GeV]");
341 
342  if (truthMuon && sign(P) != truthMuon->charge() && truthMuon->abseta() < 2.5 &&
343  (truthMuon->abseta() < 1.3 || truthMuon->abseta() > 1.4) ) {
344  ATH_MSG_WARNING("Invalid charge, pT: "<<(truthMuon->pt() / Gaudi::Units::GeV)<<" [GeV], eta: "
345  <<truthMuon->eta()<<", phi: "<<(truthMuon->phi() / 1._degree)<<", q: "<<truthMuon->charge());
346  }
347  return P;
348  }

◆ expressOnCylinder()

Amg::Vector2D MuonR4::MsTrackSeeder::expressOnCylinder ( const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegment segment,
const Location  loc,
const SectorProjector  proj 
) const

Expresses the segment on the cylinder surface.

Parameters
gctxGeometry context to fetch the transforms of the associated sector envelope
segmentReference to the segment of consideration
locSurface location: [barrel/endcap]

extrapolated position

Definition at line 151 of file MsTrackSeeder.cxx.

154  {
156  const Amg::Vector3D pos{projectOntoSector(gctx, segment, proj)};
157  const Amg::Vector3D dir{segment.direction()};
158 
159  const Amg::Vector2D projPos{pos.perp(), pos.z()};
160  const Amg::Vector2D projDir{dir.perp(), dir.z()};
161 
162  double lambda{0.};
163  if (Location::Barrel == loc) {
164  lambda = Amg::intersect<2>(projPos, projDir, Amg::Vector2D::UnitX(),
165  m_cfg.barrelRadius).value_or(10. * Gaudi::Units::km);
166  } else {
167  lambda = Amg::intersect<2>(projPos, projDir, Amg::Vector2D::UnitY(),
168  sign(projPos[1])* m_cfg.endcapDiscZ).value_or(10. * Gaudi::Units::km);
169  }
170  return projPos + lambda * projDir;
171  }

◆ findTrackSeeds()

std::unique_ptr< MsTrackSeedContainer > MuonR4::MsTrackSeeder::findTrackSeeds ( const EventContext &  ctx,
const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegmentContainer segments 
) const

Constructs the MS track seeds from the segment container.

Parameters
ctxEventContext to access conditions / event data
segmentsRefrence to the overall event's segment container

Bad segment not suitable for track seeding or the segment coordinates are just mirrored at the overlap between sector 1 -> 16

Define the search range.

Ensure that only endcap / barrel seeds are considered. The values are integers -> add tiny margin

Move 25 cm along the projected plane

Include the neighbouring sectors

Using the cube above, let the tree search for all compatible segments

Ensure that the sector overlap and momentum vectors are compatible with a MS trajectory

No segments were combined

Calculate the seed's position

Definition at line 397 of file MsTrackSeeder.cxx.

399  {
400  SearchTree_t orderedSegs{constructTree(gctx, segments)};
401  MsTrackSeedContainer trackSeeds{};
402  using enum SeedCoords;
403  for (const auto& [coords, seedCandidate] : orderedSegs) {
406  const Segment* recoSeedCandidate = detailedSegment(*seedCandidate);
407  if (!m_cfg.selector->passSeedingQuality(ctx, *recoSeedCandidate)){
408  continue;
409  }
411  SearchTree_t::range_t selectRange{};
414  selectRange[Acts::toUnderlying(eDetSection)].shrink(coords[Acts::toUnderlying(eDetSection)] - 0.1,
415  coords[Acts::toUnderlying(eDetSection)] + 0.1);
417  selectRange[Acts::toUnderlying(ePosOnCylinder)].shrink(coords[Acts::toUnderlying(ePosOnCylinder)] - m_cfg.seedHalfLength,
418  coords[Acts::toUnderlying(ePosOnCylinder)] + m_cfg.seedHalfLength);
420  selectRange[Acts::toUnderlying(eSector)].shrink(coords[Acts::toUnderlying(eSector)] -0.25,
421  coords[Acts::toUnderlying(eSector)] +0.25);
422 
423  MsTrackSeed newSeed{static_cast<Location>(std::abs(coords[Acts::toUnderlying(eDetSection)])),
424  static_cast<int>(coords[Acts::toUnderlying(eSector)])};
426  ATH_MSG_VERBOSE("Search for compatible segments to "<<print(*seedCandidate)<<".");
427  orderedSegs.rangeSearchMapDiscard(selectRange, [&](
428  const SearchTree_t::coordinate_t& /*coords*/,
429  const xAOD::MuonSegment* extendWithMe) {
431  const Segment* extendCandidate = detailedSegment(*extendWithMe);
432  if (!m_cfg.selector->compatibleForTrack(ctx, *recoSeedCandidate, *extendCandidate)) {
433  ATH_MSG_VERBOSE("Segment "<<print(*extendWithMe)<<" is not compatible.");
434  return;
435  }
436  auto itr = std::ranges::find_if(newSeed.segments(), [extendWithMe](const xAOD::MuonSegment* onSeed){
437  return extendWithMe->chamberIndex() == onSeed->chamberIndex();
438  });
439  if (itr == newSeed.segments().end()){
440  ATH_MSG_VERBOSE("Add segment "<<print(*extendWithMe)<<" to seed.");
441  newSeed.addSegment(extendWithMe);
442  } else if (reducedChi2(**itr) > reducedChi2(*extendWithMe) &&
443  (*itr)->nPhiLayers() <= extendWithMe->nPhiLayers()) {
444  newSeed.replaceSegment(*itr, extendWithMe);
445  }
446  });
448  if (newSeed.segments().empty()) {
449  continue;
450  }
451  newSeed.addSegment(seedCandidate);
453  const double r = newSeed.location() == Location::Barrel ? m_cfg.barrelRadius
454  : coords[Acts::toUnderlying(ePosOnCylinder)];
455  const double z = newSeed.location() == Location::Barrel ? coords[Acts::toUnderlying(ePosOnCylinder)]
456  : coords[Acts::toUnderlying(eDetSection)]* m_cfg.endcapDiscZ;
457  const int secCoord = coords[Acts::toUnderlying(eSector)];
458 
459  const double phi = sectorMap.sectorOverlapPhi( (secCoord - secCoord % 2) / 2, (secCoord + secCoord % 2) / 2 );
460  Amg::Vector3D pos = r * Acts::makeDirectionFromPhiTheta(phi, 90._degree)
461  + z * Amg::Vector3D::UnitZ();
462 
463  newSeed.setPosition(std::move(pos));
464  ATH_MSG_VERBOSE("Add new seed "<<newSeed);
465  trackSeeds.emplace_back(std::move(newSeed));
466  }
467  ATH_MSG_VERBOSE("Found in total "<<trackSeeds.size()<<" before overlap removal");
468  return resolveOverlaps(std::move(trackSeeds));
469  }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 42 of file AthMessaging.cxx.

43 {
45  m_lvl = m_imsg ?
46  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
47  MSG::INFO;
48 }

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level  lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152 {
153  if (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ projectedPhi()

double MuonR4::MsTrackSeeder::projectedPhi ( const int  sector,
const SectorProjector  proj 
)
static

Returns the projected phi for a given sector and projector.

Parameters
sectorSector of interest [1-16]
projEnum indicating whether the angle at the left/right overlap or sector center shall be returned

Definition at line 93 of file MsTrackSeeder.cxx.

94  {
95  return sectorMap.sectorOverlapPhi(sector, ringSector(sector + Acts::toUnderlying(proj)));
96  }

◆ projectOntoPhiPlane()

Amg::Vector3D MuonR4::MsTrackSeeder::projectOntoPhiPlane ( const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegment segment,
const double  projectPhi 
) const

Recall that the sector coordinate system is defined such that the x-axis is aligned with the nominal wire direction

Calculate the proper intersection point

Definition at line 130 of file MsTrackSeeder.cxx.

132  {
133  using enum SectorProjector;
134  const Amg::Vector3D segPos3D{segment.position()};
137  const Amg::Vector3D dirAlongTube{envelope(segment)->localToGlobalTrans(gctx).linear().col(0)};
138  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Project onto phi: "<<inDeg(projectPhi));
139  const Amg::Vector3D radialDir = Amg::getRotateZ3D(projectPhi) * Amg::Vector3D::UnitX();
140  using namespace Acts::detail::LineHelper;
142  const auto isect = lineIntersect<3>(segPos3D.z()*Amg::Vector3D::UnitZ(), radialDir,
143  segPos3D, dirAlongTube);
144  using namespace Muon::MuonStationIndex;
145  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Projected "<<printID(segment)
146  <<" segment in @"<<Amg::toString(segPos3D)<<" + "
147  <<Amg::toString(segment.direction())<<", chi2: "<<(segment.chiSquared() / std::max(1.f, segment.numberDoF()))
148  <<", nDoF: "<<segment.numberDoF()<<" --> "<<Amg::toString(isect.position()));
149  return isect.position();
150  }

◆ projectOntoSector() [1/2]

Amg::Vector3D MuonR4::MsTrackSeeder::projectOntoSector ( const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegment segment,
const MsTrackSeed seed 
) const

Projects the segment's position onto the sector centre or onto the overlap point with one of the neighbouring sector.

Parameters
gctxGeometry context to fetch the transforms of the associated sector envelope
segmentReference to the segment to project
seedReference to the seed w.r.t. which the segment shall be projected

Definition at line 116 of file MsTrackSeeder.cxx.

118  {
119  return projectOntoSector(gctx, segment, projectorFromSeed(segment, seed));
120  }

◆ projectOntoSector() [2/2]

Amg::Vector3D MuonR4::MsTrackSeeder::projectOntoSector ( const ActsTrk::GeometryContext gctx,
const xAOD::MuonSegment segment,
const SectorProjector  proj 
) const

Projects the segment's position onto the sector centre or onto the overlap point with one of the neighbouring sector.

Parameters
gctxGeometry context to fetch the transforms of the associated sector envelope
segmentReference to the segment to project
projProjector indicating onto which fix point of the sector the projection happens

Fetch the phi onto which we want to project the segment without leaving the wire.

Definition at line 121 of file MsTrackSeeder.cxx.

123  {
125  const double sectorPhi{projectedPhi(segment.sector(), proj)};
126  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Project onto "<<to_string(proj)<<" in "
127  <<envelope(segment)->identString());
128  return projectOntoPhiPlane(gctx, segment, sectorPhi);
129  }

◆ projectorFromSeed()

MsTrackSeeder::SectorProjector MuonR4::MsTrackSeeder::projectorFromSeed ( const xAOD::MuonSegment seg,
const MsTrackSeed refSeed 
)
static

Returns the Sector projector within the context of a MsTrackSeed.

Parameters
segReference to the segment for which the Sector projector shall be returned
refSeedSeed context in which the segment is embedded

Definition at line 104 of file MsTrackSeeder.cxx.

105  {
106 
107  int doubSector = 2 * seg.sector();
108  constexpr int nSectors = 2*Muon::MuonStationIndex::numberOfSectors();
109  if (refSeed.sector() == nSectors && doubSector ==2) {
111  } else if (refSeed.sector() == 1 && doubSector == nSectors) {
113  }
114  return static_cast<SectorProjector>(refSeed.sector() - doubSector );
115  }

◆ resolveOverlaps()

std::unique_ptr< MsTrackSeedContainer > MuonR4::MsTrackSeeder::resolveOverlaps ( MsTrackSeedContainer &&  unresolved) const
private

Removes exact duplciates or partial subsets of the MsTrackSeeds.

Parameters
unresolvedInput MsTrackSeedContainer with duplicates

Resort the seeds starting from the ones with the most segments to the lowest

There is no segment which shares at least one segment with this candidate

Take the longer seed

Definition at line 471 of file MsTrackSeeder.cxx.

471  {
472 
474  std::ranges::sort(unresolved, [](const MsTrackSeed& a, const MsTrackSeed&b) {
475  return a.segments().size() > b.segments().size();
476  });
477  auto outputSeeds = std::make_unique<MsTrackSeedContainer>();
478  outputSeeds->reserve(unresolved.size());
479  std::ranges::copy_if(std::move(unresolved), std::back_inserter(*outputSeeds),
480  [this, &outputSeeds](const MsTrackSeed& testMe) {
482  std::ranges::find_if(*outputSeeds, [&testMe](const MsTrackSeed& good) {
483  if (ringOverlap(good.sector() - testMe.sector()) > 1) {
484  return false;
485  }
486  return std::ranges::find_if(testMe.segments(),
487  [&good](const xAOD::MuonSegment* segInTest) {
488  return std::ranges::find(good.segments(), segInTest) != good.segments().end();
489  }) != testMe.segments().end();
490  });
492  if (test_itr == outputSeeds->end()) {
493  ATH_MSG_VERBOSE("Add new seed "<<testMe);
494  return true;
495  }
497  if ( (*test_itr).segments().size() < testMe.segments().size()){
498  (*test_itr) = testMe;
499  }
500  return false;
501  });
502  return outputSeeds;
503  }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level  lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29 {
30  // Ensure initMessaging was called to avoid that the user
31  // defined message level is being overwritten (ATEAM-1117).
32  if (!m_initialized.test_and_set()) initMessaging();
33  m_lvl = lvl;
34 }

◆ withinBounds()

bool MuonR4::MsTrackSeeder::withinBounds ( const Amg::Vector2D projPos,
const Location  loc 
) const

Returns whether the expression on the cylinder is within the surface bounds.

Parameters
projPosProjected position on the cylinder
locSurface location: [barrel/endcap]

Definition at line 172 of file MsTrackSeeder.cxx.

173  {
174  using enum Location;
175  if (loc == Barrel && std::abs(projPos[1]) > std::min(m_cfg.endcapDiscZ, m_cfg.barrelLength)) {
176  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Position "<<Amg::toString(projPos)<<
177  " exceeds cylinder boundaries ("<<m_cfg.barrelRadius<<", "
179  return false;
180  } else if (loc == Endcap && (0 > projPos[0] || projPos[0] > m_cfg.endcapDiscRadius)) {
181  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Position "<<Amg::toString(projPos)<<
182  " exceeds endcap boundaries ("<<m_cfg.endcapDiscRadius<<", "<<(sign(projPos[1])*m_cfg.endcapDiscZ)<<")");
183  return false;
184  }
185  return true;
186  }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_cfg

Config MuonR4::MsTrackSeeder::m_cfg {}
private

Definition at line 176 of file MsTrackSeeder.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.


The documentation for this class was generated from the following files:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MuonR4::MsTrackSeed::Location::Barrel
@ Barrel
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
MuonR4::printID
std::string printID(const xAOD::MuonSegment &seg)
Print the chamber ID of a segment, e.g.
Definition: TrackingHelpers.cxx:17
xAOD::MuonSegment_v1::numberDoF
float numberDoF() const
Returns the numberDoF.
beamspotman.r
def r
Definition: beamspotman.py:672
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:17
MuonR4::ISegmentSelectionTool::passSeedingQuality
virtual bool passSeedingQuality(const EventContext &ctx, const Segment &segment) const =0
Returns whether a segment provides enough mdt & phi measurements to use it for track finding seeding.
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
xAOD::MuonSegment_v1::direction
Amg::Vector3D direction() const
Returns the direction as Amg::Vector.
Definition: MuonSegment_v1.cxx:18
drawFromPickle.average
def average(lst)
Definition: drawFromPickle.py:38
MuonR4::getTruthMatchedParticle
const xAOD::TruthParticle * getTruthMatchedParticle(const xAOD::MuonSegment &segment)
Returns the particle truth-matched to the segment.
Definition: MuonSimHitHelpers.cxx:107
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:553
Trk::TrackState::Segment
@ Segment
Definition: TrackStateDefs.h:37
MuonR4::MsTrackSeeder::Config::barrelRadius
double barrelRadius
The radius of the barrel cylinder to seed.
Definition: MsTrackSeeder.h:34
MuonR4::MsTrackSeeder::withinBounds
bool withinBounds(const Amg::Vector2D &projPos, const Location loc) const
Returns whether the expression on the cylinder is within the surface bounds.
Definition: MsTrackSeeder.cxx:172
Muon::MuonStationIndex
Definition: MuonStationIndex.h:13
xAOD::MuonSegment_v1::chiSquared
float chiSquared() const
MuonR4::MsTrackSeeder::Config::barrelLength
double barrelLength
The maximum length of the barrel cylinder, if not capped by the placement of the endcap discs.
Definition: MsTrackSeeder.h:37
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
TRT_PAI_gasdata::EO
const float EO[NO]
Energy levels for Oxygen.
Definition: TRT_PAI_gasdata.h:301
MuonGMR4::SpectrometerSector::localToGlobalTrans
const Amg::Transform3D & localToGlobalTrans(const ActsTrk::GeometryContext &gctx) const
Returns the local -> global tarnsformation from the sector.
Definition: SpectrometerSector.cxx:75
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
DMTest::P
P_v1 P
Definition: P.h:23
MuonR4::MsTrackSeeder::projectorFromSeed
static SectorProjector projectorFromSeed(const xAOD::MuonSegment &seg, const MsTrackSeed &refSeed)
Returns the Sector projector within the context of a MsTrackSeed.
Definition: MsTrackSeeder.cxx:104
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
MuonR4::ISegmentSelectionTool::compatibleForTrack
virtual bool compatibleForTrack(const EventContext &ctx, const Segment &segA, const Segment &segB) const =0
Returns whether a segment passes the base selection quality in order to be picked up onto a track.
MuonR4::MsTrackSeeder::SearchTree_t
Acts::KDTree< 3, const xAOD::MuonSegment *, double, std::array, 6 > SearchTree_t
Definition of the search tree class.
Definition: MsTrackSeeder.h:54
xAOD::MuonSegment_v1
Class describing a MuonSegment.
Definition: MuonSegment_v1.h:33
ReadBchFromCrest.good
good
Definition: ReadBchFromCrest.py:372
MuonR4::MsTrackSeed::Location::Endcap
@ Endcap
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MuonR4::to_string
std::string to_string(const SectorProjector proj)
Definition: MsTrackSeeder.cxx:66
MuonR4::MsTrackSeeder::Config::endcapDiscZ
double endcapDiscZ
Position of the endcap discs.
Definition: MsTrackSeeder.h:39
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
x
#define x
python.SystemOfUnits.TeV
float TeV
Definition: SystemOfUnits.py:176
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
MuonR4::MsTrackSeeder::calculateRadius
std::optional< double > calculateRadius(VecOpt_t &&pI, VecOpt_t &&pM, VecOpt_t &&pO, const Amg::Vector3D &planeNorm) const
Calculates the radius of the bending circle from three points using the sagitta.
Definition: MsTrackSeeder.cxx:187
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
Muon::MuonStationIndex::numberOfSectors
constexpr unsigned numberOfSectors()
return total number of sectors
Definition: MuonStationIndex.h:118
MuonR4::detailedSegment
const Segment * detailedSegment(const xAOD::MuonSegment &seg)
Helper function to navigate from the xAOD::MuonSegment to the MuonR4::Segment.
Definition: TrackingHelpers.cxx:24
Amg::getRotateZ3D
Amg::Transform3D getRotateZ3D(double angle)
get a rotation transformation around Z-axis
Definition: GeoPrimitivesHelpers.h:270
MuonR4::MsTrackSeeder::SeedCoords
SeedCoords
Abrivation of the seed coordinates.
Definition: MsTrackSeeder.h:66
MuonR4::MsTrackSeeder::m_cfg
Config m_cfg
Definition: MsTrackSeeder.h:176
Muon::MuonStationIndex::toStationIndex
StIndex toStationIndex(ChIndex index)
convert ChIndex into StIndex
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AtlasFieldCacheCondObj::getInitializedCache
void getInitializedCache(MagField::AtlasFieldCache &cache) const
get B field cache for evaluation as a function of 2-d or 3-d position.
Definition: AtlasFieldCacheCondObj.h:32
MuonR4::MsTrackSeeder::expressOnCylinder
Amg::Vector2D expressOnCylinder(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const Location loc, const SectorProjector proj) const
Expresses the segment on the cylinder surface.
Definition: MsTrackSeeder.cxx:151
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
Generate_dsid_ranseed.seed
seed
Definition: Generate_dsid_ranseed.py:10
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
Ringer::EM
@ EM
Definition: CaloRingsDefs.h:19
MuonR4::MsTrackSeeder::projectedPhi
static double projectedPhi(const int sector, const SectorProjector proj)
Returns the projected phi for a given sector and projector.
Definition: MsTrackSeeder.cxx:93
MuonR4::MsTrackSeeder::appendSegment
void appendSegment(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment *segment, const Location loc, TreeRawVec_t &outContainer) const
Append the to the raw data container.
Definition: MsTrackSeeder.cxx:349
z
#define z
MuonR4::MsTrackSeeder::envelope
const MuonGMR4::SpectrometerSector * envelope(const xAOD::MuonSegment &segment) const
Returns the spectrometer envelope associated to the segment (Coord system where the parameter are exp...
Definition: MsTrackSeeder.cxx:98
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:37
MuonR4::MsTrackSeeder::TreeRawVec_t
SearchTree_t::vector_t TreeRawVec_t
Abbrivation of the KDTree raw data vector.
Definition: MsTrackSeeder.h:160
AnalysisUtils::copy_if
Out copy_if(In first, const In &last, Out res, const Pred &p)
Definition: IFilterUtils.h:30
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
MuonR4::MsTrackSeeder::Location
MsTrackSeed::Location Location
Enum toggling whether the segment is in the endcap or barrel.
Definition: MsTrackSeeder.h:56
MuonR4::MsTrackSeeder::SectorProjector::center
@ center
Project the segment onto the overlap with the previous sector.
Muon::MuonStationIndex::StIndex::EE
@ EE
python.SystemOfUnits.km
float km
Definition: SystemOfUnits.py:110
xAOD::MuonSegment_v1::nPhiLayers
int nPhiLayers() const
Returns the number of phi layers.
make_coralServer_rep.proj
proj
Definition: make_coralServer_rep.py:48
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
MuonR4::MsTrackSeeder::Config::fieldExtpSteps
std::set< double > fieldExtpSteps
Steps between two segments to integrate the magnetic field.
Definition: MsTrackSeeder.h:51
beamspotman.dir
string dir
Definition: beamspotman.py:619
Muon::MuonStationIndex::StIndex::BO
@ BO
Muon::MuonStationIndex::StIndex
StIndex
enum to classify the different station layers in the muon spectrometer
Definition: MuonStationIndex.h:23
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:26
xAOD::MuonSegment_v1::position
Amg::Vector3D position() const
Returns the position as Amg::Vector.
Definition: MuonSegment_v1.cxx:15
MuonR4::MsTrackSeeder::Config::detMgr
const MuonGMR4::MuonDetectorManager * detMgr
Detector manager to fetch the sector enevelope transforms.
Definition: MsTrackSeeder.h:46
MuonR4::MsTrackSeeder::projectOntoSector
Amg::Vector3D projectOntoSector(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const SectorProjector proj) const
Projects the segment's position onto the sector centre or onto the overlap point with one of the neig...
Definition: MsTrackSeeder.cxx:121
MuonR4::sign
constexpr double sign(const double x)
Returns the sign of a number.
Definition: MatrixUtils.h:11
Muon::MuonStationIndex::StIndex::BE
@ BE
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:76
MuonR4::MsTrackSeeder::Config::endcapDiscRadius
double endcapDiscRadius
Radius of the endcap discs.
Definition: MsTrackSeeder.h:41
MuonR4::MsTrackSeeder::Config::seedHalfLength
double seedHalfLength
Maximum separation of point on the cylinder to be picked up onto a seed.
Definition: MsTrackSeeder.h:44
WriteCaloSwCorrections.cfg
cfg
Definition: WriteCaloSwCorrections.py:23
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
python.TruthMuonD3PDObject.truthMuon
truthMuon
Definition: TruthMuonD3PDObject.py:51
MuonR4::MsTrackSeeder::Config::selector
const ISegmentSelectionTool * selector
Pointer to the segement selection tool which compares two segments for their compatibilitiy.
Definition: MsTrackSeeder.h:49
python.PyAthena.v
v
Definition: PyAthena.py:154
MuonR4::MsTrackSeeder::SectorProjector::rightOverlap
@ rightOverlap
Project the segment onto the sector centre.
a
TList * a
Definition: liststreamerinfos.cxx:10
xAOD::MuonSegment_v1::sector
int sector() const
xAOD::MuonSegment_v1::etaIndex
int etaIndex() const
Returns the eta index, which corresponds to stationEta in the offline identifiers (and the ).
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
MuonR4::MsTrackSeedContainer
std::vector< MsTrackSeed > MsTrackSeedContainer
Definition: MsTrackSeed.h:63
MagField::AtlasFieldCache
Local cache for magnetic field (based on MagFieldServices/AtlasFieldSvcTLS.h)
Definition: AtlasFieldCache.h:43
MuonR4::MsTrackSeeder::SectorProjector
SectorProjector
Enumeration to select the sector projection.
Definition: MsTrackSeeder.h:60
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
MuonR4::MsTrackSeeder::resolveOverlaps
std::unique_ptr< MsTrackSeedContainer > resolveOverlaps(MsTrackSeedContainer &&unresolved) const
Removes exact duplciates or partial subsets of the MsTrackSeeds.
Definition: MsTrackSeeder.cxx:471
MuonR4::MsTrackSeeder::constructTree
SearchTree_t constructTree(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegmentContainer &segments) const
Construct a complete search tree from a MuonSegment container.
Definition: MsTrackSeeder.cxx:386
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:42
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Muon::MuonStationIndex::StIndex::BI
@ BI
Muon::MuonStationIndex::StIndex::BM
@ BM
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
MuonR4::MsTrackSeeder::SectorProjector::leftOverlap
@ leftOverlap
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
xAOD::MuonSegment_v1::chamberIndex
::Muon::MuonStationIndex::ChIndex chamberIndex() const
Returns the chamber index.
Muon::MuonStationIndex::StIndex::EI
@ EI
MuonGMR4::MuonDetectorManager::getSectorEnvelope
const SpectrometerSector * getSectorEnvelope(const Identifier &channelId) const
Retrieves the spectrometer envelope enclosing the channel's readout element.
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/src/MuonDetectorManager.cxx:198
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
python.SystemOfUnits.ms
float ms
Definition: SystemOfUnits.py:148
MuonR4::MsTrackSeeder::projectOntoPhiPlane
Amg::Vector3D projectOntoPhiPlane(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const double projectPhi) const
Definition: MsTrackSeeder.cxx:130