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...
 
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

const MuonGMR4::SpectrometerSectorenvelope (const xAOD::MuonSegment &segment) const
 Returns the spectrometer envelope associated to the segment (Coord system where the parameter are expressed) More...
 
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 88 of file MsTrackSeeder.cxx.

88  :
89  AthMessaging{msgName},
90  m_cfg{std::move(cfg)}{
91  auto& v{m_cfg.fieldExtpSteps};
92  v.insert(0.); v.insert(1.);
93  if (std::ranges::any_of(v, [](const double x){
94  return x < 0. || x > 1.;
95  })) {
96  THROW_EXCEPTION("Found invalid extrapolation steps.");
97  }
98  }

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 357 of file MsTrackSeeder.cxx.

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

◆ 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 195 of file MsTrackSeeder.cxx.

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

◆ 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 394 of file MsTrackSeeder.cxx.

395  {
396  TreeRawVec_t rawData{};
397  rawData.reserve(3*segments.size());
398  for (const xAOD::MuonSegment* segment : segments){
399  appendSegment(gctx, segment, Location::Barrel, rawData);
400  appendSegment(gctx, segment, Location::Endcap, rawData);
401  }
402  ATH_MSG_VERBOSE("Create a new tree with "<<rawData.size()<<" entries. ");
403  return SearchTree_t{std::move(rawData)};
404  }

◆ envelope()

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

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 106 of file MsTrackSeeder.cxx.

106  {
107  return m_cfg.detMgr->getSectorEnvelope(segment.chamberIndex(),
108  segment.sector(),
109  segment.etaIndex());
110  }

◆ 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 228 of file MsTrackSeeder.cxx.

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

◆ 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 159 of file MsTrackSeeder.cxx.

162  {
164  const Amg::Vector3D pos{projectOntoSector(gctx, segment, proj)};
165  const Amg::Vector3D dir{segment.direction()};
166 
167  const Amg::Vector2D projPos{pos.perp(), pos.z()};
168  const Amg::Vector2D projDir{dir.perp(), dir.z()};
169 
170  double lambda{0.};
171  if (Location::Barrel == loc) {
172  lambda = Amg::intersect<2>(projPos, projDir, Amg::Vector2D::UnitX(),
173  m_cfg.barrelRadius).value_or(10. * Gaudi::Units::km);
174  } else {
175  lambda = Amg::intersect<2>(projPos, projDir, Amg::Vector2D::UnitY(),
176  sign(projPos[1])* m_cfg.endcapDiscZ).value_or(10. * Gaudi::Units::km);
177  }
178  return projPos + lambda * projDir;
179  }

◆ 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 405 of file MsTrackSeeder.cxx.

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

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40 {
42  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ 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 101 of file MsTrackSeeder.cxx.

102  {
103  return sectorMap.sectorOverlapPhi(sector, ringSector(sector + Acts::toUnderlying(proj)));
104  }

◆ 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 138 of file MsTrackSeeder.cxx.

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

◆ 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 124 of file MsTrackSeeder.cxx.

126  {
127  return projectOntoSector(gctx, segment, projectorFromSeed(segment, seed));
128  }

◆ 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 129 of file MsTrackSeeder.cxx.

131  {
133  const double sectorPhi{projectedPhi(segment.sector(), proj)};
134  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Project onto "<<to_string(proj)<<" in "
135  <<envelope(segment)->identString());
136  return projectOntoPhiPlane(gctx, segment, sectorPhi);
137  }

◆ 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 112 of file MsTrackSeeder.cxx.

113  {
114 
115  int doubSector = 2 * seg.sector();
116  constexpr int nSectors = 2*Muon::MuonStationIndex::numberOfSectors();
117  if (refSeed.sector() == nSectors && doubSector ==2) {
119  } else if (refSeed.sector() == 1 && doubSector == nSectors) {
121  }
122  return static_cast<SectorProjector>(refSeed.sector() - doubSector );
123  }

◆ 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 479 of file MsTrackSeeder.cxx.

479  {
480 
482  std::ranges::sort(unresolved, [](const MsTrackSeed& a, const MsTrackSeed&b) {
483  return a.segments().size() > b.segments().size();
484  });
485  auto outputSeeds = std::make_unique<MsTrackSeedContainer>();
486  outputSeeds->reserve(unresolved.size());
487  std::ranges::copy_if(std::move(unresolved), std::back_inserter(*outputSeeds),
488  [this, &outputSeeds](const MsTrackSeed& testMe) {
490  std::ranges::find_if(*outputSeeds, [&testMe](const MsTrackSeed& good) {
491  if (ringOverlap(good.sector() - testMe.sector()) > 1) {
492  return false;
493  }
494  return std::ranges::find_if(testMe.segments(),
495  [&good](const xAOD::MuonSegment* segInTest) {
496  return std::ranges::find(good.segments(), segInTest) != good.segments().end();
497  }) != testMe.segments().end();
498  });
500  if (test_itr == outputSeeds->end()) {
501  ATH_MSG_ALWAYS("Add new seed "<<testMe);
502  return true;
503  }
505  if ( (*test_itr).segments().size() < testMe.segments().size()){
506  (*test_itr) = testMe;
507  }
508  return false;
509  });
510  return outputSeeds;
511  }

◆ 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  m_lvl = lvl;
31 }

◆ 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 180 of file MsTrackSeeder.cxx.

181  {
182  using enum Location;
183  if (loc == Barrel && std::abs(projPos[1]) > std::min(m_cfg.endcapDiscZ, m_cfg.barrelLength)) {
184  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Position "<<Amg::toString(projPos)<<
185  " exceeds cylinder boundaries ("<<m_cfg.barrelRadius<<", "
187  return false;
188  } else if (loc == Endcap && (0 > projPos[0] || projPos[0] > m_cfg.endcapDiscRadius)) {
189  ATH_MSG_VERBOSE(__func__<<"() "<<__LINE__<<" - Position "<<Amg::toString(projPos)<<
190  " exceeds endcap boundaries ("<<m_cfg.endcapDiscRadius<<", "<<(sign(projPos[1])*m_cfg.endcapDiscZ)<<")");
191  return false;
192  }
193  return true;
194  }

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
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:558
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:180
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:112
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
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:74
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:195
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:14
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:159
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:101
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:357
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:106
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
ATH_MSG_ALWAYS
#define ATH_MSG_ALWAYS(x)
Definition: AthMsgStreamMacros.h:35
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:129
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.
ReadBchFromCool.good
good
Definition: ReadBchFromCool.py:433
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:479
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:394
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:39
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:138