ATLAS Offline Software
Loading...
Searching...
No Matches
MuonValR4::PatternVisualizationTool Class Reference

#include <PatternVisualizationTool.h>

Inheritance diagram for MuonValR4::PatternVisualizationTool:
Collaboration diagram for MuonValR4::PatternVisualizationTool:

Public Types

using LabeledSegmentSet = std::unordered_set<const xAOD::MuonSegment*>

Public Member Functions

virtual StatusCode initialize () override final
virtual void visualizeBucket (const EventContext &ctx, const MuonR4::SpacePointBucket &bucket, const std::string &extraLabel) const override final
virtual void visualizeBucket (const EventContext &ctx, const MuonR4::SpacePointBucket &bucket, const std::string &extraLabel, PrimitiveVec &&extraPaints) const override final
virtual void visualizeSeed (const EventContext &ctx, const MuonR4::SegmentSeed &seed, const std::string &extraLabel) const override final
virtual void visualizeSeed (const EventContext &ctx, const MuonR4::SegmentSeed &seed, const std::string &extraLabel, PrimitiveVec &&extraPaints) const override final
virtual void visualizeAccumulator (const EventContext &ctx, const MuonR4::HoughPlane &accumulator, const Acts::HoughTransformUtils::HoughAxisRanges &axisRanges, const MaximumVec &maxima, const std::string &extraLabel) const override final
virtual void visualizeAccumulator (const EventContext &ctx, const MuonR4::HoughPlane &accumulator, const Acts::HoughTransformUtils::HoughAxisRanges &axisRanges, const MaximumVec &maxima, const std::string &extraLabel, PrimitiveVec &&extraPaints) const override final
virtual void visualizeSegment (const EventContext &ctx, const MuonR4::Segment &segment, const std::string &extraLabel) const override final
virtual void visualizeSegment (const EventContext &ctx, const MuonR4::Segment &segment, const std::string &extraLabel, PrimitiveVec &&extraPaints) const override final
virtual LabeledSegmentSet getLabeledSegments (const std::vector< const MuonR4::SpacePoint * > &hits) const override final
 Returns whether the hit has been used on the labeled segments we refer to (e.g.
virtual LabeledSegmentSet getLabeledSegments (const std::vector< const xAOD::UncalibratedMeasurement * > &hits) const override final
virtual bool isLabeled (const MuonR4::SpacePoint &hit) const override final
 Fetches all labeled (e.g.
virtual bool isLabeled (const xAOD::UncalibratedMeasurement &hit) const override final
template<class SpacePointType>
const SpacePointdrawHit (const SpacePointType &hit, Canvas_t &canvas, const unsigned int view, unsigned int fillStyle) const

Private Types

using Canvas_t = IRootVisualizationService::ICanvasObject
using Edges = Canvas_t::AxisRanges
using SegLink_t = ElementLink<xAOD::MuonSegmentContainer>
using SegLinkVec_t = std::vector<SegLink_t>
using SegLinkDecor_t = SG::AuxElement::ConstAccessor<SegLinkVec_t>

Private Member Functions

template<class SpacePointType>
bool drawHits (const MuonR4::SpacePointBucket &bucket, const std::vector< SpacePointType > &hitsToDraw, Canvas_t &canvasDim, unsigned int view) const
 Translates the Spacepoint information into TObjects that are dawn on the canvas & evaluates the size of the box surrounding the event.
template<class SpacePointType>
const MuonR4::SpacePointdrawHit (const SpacePointType &hit, Canvas_t &canvas, const unsigned int view, unsigned int fillStyle) const
 Converts a Hit into a particular TBox/ TEllipse for drawing.
template<class SpacePointType>
void writeChi2 (const MuonR4::SegmentFit::Parameters &pars, const std::vector< SpacePointType > &hits, Canvas_t &canvas, const double legX=0.2, double startLegY=0.8, const double endLegY=0.3) const
 Writes the chi2 of the hits onto the Canvas.
void paintSimHits (const EventContext &ctx, const xAOD::MuonSegment &truthSeg, Canvas_t &canvas, const int view) const
 Paints the truth sim hits associated with the segment.

Private Attributes

ServiceHandle< IRootVisualizationServicem_visualSvc {this, "VisualSvc", "MuonValR4::RootVisualizationService"}
 Service handle of the visualization service.
IRootVisualizationService::ClientToken m_clientToken {}
 Token to present to the visualization service such that the display froms this tool are grouped together.
Gaudi::Property< unsigned int > m_canvasLimit {this, "CanvasLimits", 5000}
 Maximum canvases to draw.
Gaudi::Property< bool > m_saveSinglePDFs {this, "saveSinglePDFs", false}
 If set to true each canvas is saved into a dedicated pdf file.
Gaudi::Property< bool > m_saveSummaryPDF {this, "saveSummaryPDF", false}
 If set to true a summary Canvas is created.
Gaudi::Property< std::string > m_canvasPrefix {this, "CanvasPreFix", ""}
 Prefix of the individual canvas file names <MANDATORY>.
Gaudi::Property< std::string > m_subDir {this, "outSubDir", ""}
 Define the subdirectory in which the plots shall be saved.
Gaudi::Property< bool > m_displayBucket {this, "displayBucket", true}
 Display the surrounding hits from the bucket not part of the seed.
Gaudi::Property< bool > m_accumlIsEta {this, "AccumulatorsInEtaPlane", true}
 Swtich toggling whether the accumulator view are in the eta or phi plane.
Gaudi::Property< bool > m_doEtaBucketViews {this,"doEtaBucketViews", true}
 Switch to visualize the eta view of the bucket event.
Gaudi::Property< bool > m_doPhiBucketViews {this,"doPhiBucketViews", false}
 Switch to visualize the phi view of the bucket event.
Gaudi::Property< bool > m_paintTruthHits {this, "paintTruthHits", false}
 Switch to visualize the truth hits.
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainerm_prepContainerKeys {this, "PrdContainer", {}}
 Declare dependency on the prep data containers.
Gaudi::Property< std::set< std::string > > m_truthSegLinks {this, "TruthSegDecors", {}}
 List of truth segment links to fetch.
SG::ReadDecorHandleKeyArray< xAOD::UncalibratedMeasurementContainerm_truthLinkDecorKeys {this, "LinkDecorKeys", {}}
 Declaration of the dependency on the decorations.
std::vector< SegLinkDecor_tm_truthLinkDecors {}
Gaudi::Property< bool > m_displayOnlyTruth {this, "displayTruthOnly", false}
const MuonGMR4::MuonDetectorManagerm_detMgr {nullptr}
 pointer to the Detector manager
ActsTrk::GeoContextReadKey_t m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
 Geometry context key to retrieve the alignment.
ServiceHandle< Muon::IMuonIdHelperSvcm_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
 Service Handle to the IMuonIdHelperSvc.
std::atomic< bool > m_plotsDone {false}
 Flag toggling whether all Canvases have been exhausted.

Detailed Description

Definition at line 29 of file PatternVisualizationTool.h.

Member Typedef Documentation

◆ Canvas_t

◆ Edges

◆ LabeledSegmentSet

◆ SegLink_t

◆ SegLinkDecor_t

using MuonValR4::PatternVisualizationTool::SegLinkDecor_t = SG::AuxElement::ConstAccessor<SegLinkVec_t>
private

Definition at line 181 of file PatternVisualizationTool.h.

◆ SegLinkVec_t

Definition at line 180 of file PatternVisualizationTool.h.

Member Function Documentation

◆ drawHit() [1/2]

template<class SpacePointType>
const SpacePoint * MuonValR4::PatternVisualizationTool::drawHit ( const SpacePointType & hit,
Canvas_t & canvas,
const unsigned int view,
unsigned int fillStyle ) const

Don't draw any hit which is not participating in the view

Update the fill style accrodingly

Definition at line 453 of file PatternVisualizationTool.cxx.

455 {
456
458 if ((view == objViewEta && !hit.measuresEta()) || (view == objViewPhi && !hit.measuresPhi())) {
459 return nullptr;
460 }
461
462 if (hit.type() != xAOD::UncalibMeasType::Other) {
463 canvas.expandPad(hit.localPosition()[view] - hit.driftRadius(),
464 hit.localPosition().z() - hit.driftRadius());
465 canvas.expandPad(hit.localPosition()[view] + hit.driftRadius(),
466 hit.localPosition().z() + hit.driftRadius());
467 }
468
469 const SpacePoint* underlyingSp{nullptr};
471 constexpr int invalidCalibFill = 3305;
472 if constexpr (std::is_same_v<SpacePointType, SpacePoint>) {
473 underlyingSp = &hit;
475 const auto* dc = static_cast<const xAOD::MdtDriftCircle*>(hit.primaryMeasurement());
476 if (dc && dc->status() != Muon::MdtDriftCircleStatus::MdtStatusDriftTime) {
477 fillStyle = invalidCalibFill;
478 }
479 }
480 } else if constexpr(std::is_same_v<SpacePointType, CalibratedSpacePoint>) {
481 underlyingSp = hit.spacePoint();
482 if (hit.fitState() == CalibratedSpacePoint::State::Valid) {
483 fillStyle = fullFilling;
484 } else if (hit.fitState() == CalibratedSpacePoint::State::FailedCalib) {
485 fillStyle = invalidCalibFill;
486 } else {
487 fillStyle = hatchedFilling;
488 }
489 }
490
491 //TODO: investigate MuonSegmentFittingAlg.PatternVisualizationTool throws seg fault without check but the calibrated space point should have reference space point no?
492 if (!underlyingSp){
493 ATH_MSG_VERBOSE("Underlying space point not found, skipping hit");
494 return nullptr;
495 }
496
497 const auto* primaryMeas = underlyingSp->primaryMeasurement();
498 switch(hit.type()) {
500 const auto* dc = static_cast<const xAOD::MdtDriftCircle*>(primaryMeas);
501 canvas.add(drawDriftCircle(hit.localPosition(), dc->readoutElement()->innerTubeRadius(),
502 kBlack, hollowFilling));
503 auto driftCircle = drawDriftCircle(hit.localPosition(), hit.driftRadius(), kBlue, fillStyle);
504 //In case the hit is also a truth hit, change the line colour to indicate that
505 if (isLabeled(*dc)) {
506 driftCircle->SetLineColor(truthColor);
507 driftCircle->SetLineWidth(1);
508 }
509 canvas.add(std::move(driftCircle));
510 break;
512 const auto* meas{static_cast<const xAOD::RpcMeasurement*>(primaryMeas)};
513 const double boxWidth = 0.5*std::sqrt(12)*std::sqrt(underlyingSp->covariance()[view]);
514 auto rpcBox = drawBox(hit.localPosition(), boxWidth, 0.5*meas->readoutElement()->gasGapPitch(),
515 kGreen + 2, fillStyle);
516 if(isLabeled(*meas)) {
517 rpcBox->SetLineColor(truthColor);
518 rpcBox->SetLineWidth(1);
519 }
520 canvas.add(std::move(rpcBox));
521 break;
523 const auto* meas{static_cast<const xAOD::TgcStrip*>(primaryMeas)};
524 const double boxWidth = 0.5*std::sqrt(12)*std::sqrt(underlyingSp->covariance()[view]);
525 auto tgcBox = drawBox(hit.localPosition(), boxWidth, 0.5*meas->readoutElement()->gasGapPitch(),
526 kCyan + 2, fillStyle);
527 if(isLabeled(*meas)) {
528 tgcBox->SetLineColor(truthColor);
529 tgcBox->SetLineWidth(1);
530 }
531 canvas.add(std::move(tgcBox));
532 break;
534 const double boxWidth = 5*Gaudi::Units::mm;
535 auto mmBox = drawBox(hit.localPosition(), boxWidth, 10.*Gaudi::Units::mm, kAquamarine, fillStyle);
536 if(isLabeled(*primaryMeas)) {
537 mmBox->SetLineColor(truthColor);
538 mmBox->SetLineWidth(1);
539 }
540 canvas.add(std::move(mmBox));
541 break;
543 break;
545 const double boxWidth = 5*Gaudi::Units::mm;
546 auto stgcBox = drawBox(hit.localPosition(), boxWidth, 10.*Gaudi::Units::mm, kTeal, fillStyle);
547 if(isLabeled(*primaryMeas)) {
548 stgcBox->SetLineColor(truthColor);
549 stgcBox->SetLineWidth(1);
550 }
551 canvas.add(std::move(stgcBox));
552 break;
553 } default: {
554 ATH_MSG_WARNING("Please implement proper drawings of the new small wheel.. "<<__FILE__<<":"<<__LINE__);
555 break;
556 }
557 }
558 return underlyingSp;
559 }
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
virtual bool isLabeled(const MuonR4::SpacePoint &hit) const override final
Fetches all labeled (e.g.
constexpr int objViewEta
ObjectView.
constexpr int hollowFilling
Filling codes for hollow / fullFilling / hatched filling.
constexpr int hatchedFilling
std::unique_ptr< TEllipse > drawDriftCircle(const Amg::Vector3D &center, const double radius, const int color=kViolet, const int fillStyle=hollowFilling)
Create a TEllipse for drawing a drift circle.
constexpr int fullFilling
constexpr int objViewPhi
std::unique_ptr< TBox > drawBox(const Amg::Vector3D &boxCenter, const double boxWidth, const double boxHeight, const int color=kGreen+2, const int fillStyle=hollowFilling, const int view=objViewEta)
Creates a box for drawing, e.g strip measurements.
@ driftCircle
MdtDriftCircle_v1 MdtDriftCircle
TgcStrip_v1 TgcStrip
Definition TgcStripFwd.h:9
RpcMeasurement_v1 RpcMeasurement

◆ drawHit() [2/2]

template<class SpacePointType>
const MuonR4::SpacePoint * MuonValR4::PatternVisualizationTool::drawHit ( const SpacePointType & hit,
Canvas_t & canvas,
const unsigned int view,
unsigned int fillStyle ) const
private

Converts a Hit into a particular TBox/ TEllipse for drawing.

If the hit provides information that's requested for that view. The underlying space pointer is returned and the dimensions of the canvas are updated, if the drawing was succesful

Parameters
hitReference to the hit to draw
canvasReference to the Canvas object to which the drawn hits are appended. The drawn hits also expand the drawn range
viewDraw the hit either in the eta or phi view,
fillStyleStandard fill style for the box e.g. full.

◆ drawHits()

template<class SpacePointType>
bool MuonValR4::PatternVisualizationTool::drawHits ( const MuonR4::SpacePointBucket & bucket,
const std::vector< SpacePointType > & hitsToDraw,
Canvas_t & canvasDim,
unsigned int view ) const
private

Translates the Spacepoint information into TObjects that are dawn on the canvas & evaluates the size of the box surrounding the event.

Returns true if at least 2 objects were created.

Parameters
bucketSpacePoint bucket from which the hits are taken. If the <DisplayBucket> is set true, the hits that were not in the subset are also painted with hollow filling
hitsToDrawPrimary hit collection to draw which are drawn with fullFillStyle
canvasReference to the Canvas object to which the drawn hits are appended. The drawn hits also expand the drawn range
viewEither the eta or the phi view?

Definition at line 562 of file PatternVisualizationTool.cxx.

565 {
566
567 SpacePointSet drawnPoints{};
568
569 for (const SpacePointType& hit : hitsToDraw) {
570 drawnPoints.insert(drawHit(*hit, canvas, view, fullFilling));
571 }
572 if (m_displayBucket) {
573 for (const SpacePointBucket::value_type& hit : bucket) {
574 // Don't redraw the other points
575 if (drawnPoints.count(hit.get())) {
576 continue;
577 }
578
579 drawHit(*hit, canvas, view, hollowFilling);
580 }
581 }
582 return drawnPoints.size() - drawnPoints.count(nullptr) > 1;
583 }
Gaudi::Property< bool > m_displayBucket
Display the surrounding hits from the bucket not part of the seed.
const MuonR4::SpacePoint * drawHit(const SpacePointType &hit, Canvas_t &canvas, const unsigned int view, unsigned int fillStyle) const
Converts a Hit into a particular TBox/ TEllipse for drawing.
std::vector< const SpacePoint * > SpacePointSet
vector of space points
Definition FitterTypes.h:38

◆ getLabeledSegments() [1/2]

LabeledSegmentSet MuonValR4::PatternVisualizationTool::getLabeledSegments ( const std::vector< const MuonR4::SpacePoint * > & hits) const
finaloverridevirtual

Returns whether the hit has been used on the labeled segments we refer to (e.g.

truth or data Zµµ)

Parameters
hitsVector of hits to search

Definition at line 97 of file PatternVisualizationTool.cxx.

97 {
98 std::vector<const xAOD::UncalibratedMeasurement*> measurements{};
99 measurements.reserve(2* hits.size());
100 for (const SpacePoint* hit: hits) {
101 measurements.push_back(hit->primaryMeasurement());
102 if(hit->secondaryMeasurement()) {
103 measurements.push_back(hit->secondaryMeasurement());
104 }
105 }
106 return getLabeledSegments(measurements);
107 }
virtual LabeledSegmentSet getLabeledSegments(const std::vector< const MuonR4::SpacePoint * > &hits) const override final
Returns whether the hit has been used on the labeled segments we refer to (e.g.

◆ getLabeledSegments() [2/2]

LabeledSegmentSet MuonValR4::PatternVisualizationTool::getLabeledSegments ( const std::vector< const xAOD::UncalibratedMeasurement * > & hits) const
finaloverridevirtual

Definition at line 108 of file PatternVisualizationTool.cxx.

108 {
109 LabeledSegmentSet truthSegs{};
110 for (const xAOD::UncalibratedMeasurement* hit : hits) {
111 for (const SegLinkDecor_t& decor: m_truthLinkDecors) {
112 for (const SegLink_t& link : decor(*hit)) {
113 truthSegs.insert(*link);
114 }
115 }
116 }
117 return truthSegs;
118 }
std::unordered_set< const xAOD::MuonSegment * > LabeledSegmentSet
std::vector< SegLinkDecor_t > m_truthLinkDecors
ElementLink< xAOD::MuonSegmentContainer > SegLink_t
SG::AuxElement::ConstAccessor< SegLinkVec_t > SegLinkDecor_t
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.

◆ initialize()

StatusCode MuonValR4::PatternVisualizationTool::initialize ( )
finaloverridevirtual

Definition at line 52 of file PatternVisualizationTool.cxx.

52 {
53 if (m_canvasLimit > 0) {
54 m_clientToken.canvasLimit = m_canvasLimit;
55 m_clientToken.preFixName = m_canvasPrefix;
56 m_clientToken.saveSinglePlots = m_saveSinglePDFs;
57 m_clientToken.saveSummaryPlot = m_saveSummaryPDF;
58 m_clientToken.subDirectory = m_subDir;
59 ATH_CHECK(m_visualSvc.retrieve());
60 ATH_CHECK(m_visualSvc->registerClient(m_clientToken));
61 } else {
62 m_plotsDone = true;
63 }
64 ATH_CHECK(m_prepContainerKeys.initialize(!m_truthSegLinks.empty()));
66 ATH_MSG_INFO("Hits linked to the following segment decorations are considered as truth");
67 for (const std::string& decorName : m_truthSegLinks) {
68 ATH_MSG_INFO(" **** "<<decorName);
69 if (decorName.empty()) {
70 ATH_MSG_FATAL("Decoration must not be empty");
71 return StatusCode::FAILURE;
72 }
73 for (const SG::ReadHandleKey<xAOD::UncalibratedMeasurementContainer>& key : m_prepContainerKeys) {
74 m_truthLinkDecorKeys.emplace_back(key, decorName);
75 m_truthLinkDecors.push_back(SegLinkDecor_t{decorName});
76 }
77 }
78 ATH_CHECK(m_truthLinkDecorKeys.initialize());
79 m_displayOnlyTruth.value() &= !m_truthLinkDecorKeys.empty();
80
81 ATH_CHECK(m_idHelperSvc.retrieve());
82 ATH_CHECK(m_geoCtxKey.initialize());
83 ATH_CHECK(detStore()->retrieve(m_detMgr));
84 return StatusCode::SUCCESS;
85 }
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
Gaudi::Property< std::string > m_subDir
Define the subdirectory in which the plots shall be saved.
ActsTrk::GeoContextReadKey_t m_geoCtxKey
Geometry context key to retrieve the alignment.
Gaudi::Property< unsigned int > m_canvasLimit
Maximum canvases to draw.
Gaudi::Property< std::string > m_canvasPrefix
Prefix of the individual canvas file names <MANDATORY>.
Gaudi::Property< bool > m_saveSinglePDFs
If set to true each canvas is saved into a dedicated pdf file.
IRootVisualizationService::ClientToken m_clientToken
Token to present to the visualization service such that the display froms this tool are grouped toget...
SG::ReadDecorHandleKeyArray< xAOD::UncalibratedMeasurementContainer > m_truthLinkDecorKeys
Declaration of the dependency on the decorations.
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Service Handle to the IMuonIdHelperSvc.
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainer > m_prepContainerKeys
Declare dependency on the prep data containers.
Gaudi::Property< std::set< std::string > > m_truthSegLinks
List of truth segment links to fetch.
ServiceHandle< IRootVisualizationService > m_visualSvc
Service handle of the visualization service.
Gaudi::Property< bool > m_saveSummaryPDF
If set to true a summary Canvas is created.
const MuonGMR4::MuonDetectorManager * m_detMgr
pointer to the Detector manager
std::atomic< bool > m_plotsDone
Flag toggling whether all Canvases have been exhausted.

◆ isLabeled() [1/2]

bool MuonValR4::PatternVisualizationTool::isLabeled ( const MuonR4::SpacePoint & hit) const
finaloverridevirtual

Fetches all labeled (e.g.

by truth or Zµµ reco) segments containing at least one measurement in the list passed as arg

Parameters
hitReference to the hit to check

Definition at line 86 of file PatternVisualizationTool.cxx.

86 {
87 return isLabeled(*hit.primaryMeasurement()) ||
89 }

◆ isLabeled() [2/2]

bool MuonValR4::PatternVisualizationTool::isLabeled ( const xAOD::UncalibratedMeasurement & hit) const
finaloverridevirtual

Definition at line 90 of file PatternVisualizationTool.cxx.

90 {
91 return std::find_if(m_truthLinkDecors.begin(), m_truthLinkDecors.end(),
92 [&hit](const SegLinkDecor_t& decor){
93 return !decor(hit).empty();
94 }) != m_truthLinkDecors.end();
95 }

◆ paintSimHits()

void MuonValR4::PatternVisualizationTool::paintSimHits ( const EventContext & ctx,
const xAOD::MuonSegment & truthSeg,
Canvas_t & canvas,
const int view ) const
private

Paints the truth sim hits associated with the segment.

Hits are drawn as orange arrows

Parameters
ctxEventContext to fetch the alignment constants
truthSegSegment made from truth sim hits
canvasReference to the Canvas object to which the drawn hits are appended
viewDraw the hit either in the eta or phi view

Definition at line 237 of file PatternVisualizationTool.cxx.

240 {
241 if (!m_paintTruthHits) {
242 return;
243 }
244 auto truthHits = getMatchingSimHits(truthSeg);
245 const ActsTrk::GeometryContext* geoCtx{nullptr};
246 if (!SG::get(geoCtx, m_geoCtxKey, ctx).isSuccess()) {
247 return;
248 }
249 for (const xAOD::MuonSimHit* simHit : truthHits) {
250 const MuonGMR4::MuonReadoutElement* re = m_detMgr->getReadoutElement(simHit->identify());
251 const IdentifierHash hash = re->detectorType() == ActsTrk::DetectorType::Mdt ?
252 re->measurementHash(simHit->identify()) :
253 re->layerHash(simHit->identify());
254 const Amg::Transform3D trf = re->msSector()->globalToLocalTransform(*geoCtx) *
255 re->localToGlobalTransform(*geoCtx, hash);
256 const Amg::Vector3D locPos = trf * xAOD::toEigen(simHit->localPosition());
257 const Amg::Vector3D locDir = trf.linear() * xAOD::toEigen(simHit->localDirection());
258 canvas.add(drawArrow(locPos, locDir, truthColor, kDashed, view));
259 }
260 }
const std::regex re(r_e)
Gaudi::Property< bool > m_paintTruthHits
Switch to visualize the truth hits.
@ Mdt
MuonSpectrometer.
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
std::unordered_set< const xAOD::MuonSimHit * > getMatchingSimHits(const xAOD::MuonSegment &segment)
: Returns all sim hits matched to a xAOD::MuonSegment
std::unique_ptr< TArrow > drawArrow(const Amg::Vector3D &start, const Amg::Vector3D &dir, const int color=kRed+1, const int lineStyle=kDashed, const int view=objViewEta)
Draw an arror between two endpoints in the y-z or the x-z plane.
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
MuonSimHit_v1 MuonSimHit
Defined the version of the MuonSimHit.
Definition MuonSimHit.h:12

◆ visualizeAccumulator() [1/2]

void MuonValR4::PatternVisualizationTool::visualizeAccumulator ( const EventContext & ctx,
const MuonR4::HoughPlane & accumulator,
const Acts::HoughTransformUtils::HoughAxisRanges & axisRanges,
const MaximumVec & maxima,
const std::string & extraLabel ) const
finaloverridevirtual

Definition at line 119 of file PatternVisualizationTool.cxx.

123 {
124 PrimitiveVec primitives{};
125 visualizeAccumulator(ctx, accumulator, axisRanges, maxima, extraLabel, std::move(primitives));
126 }
virtual void visualizeAccumulator(const EventContext &ctx, const MuonR4::HoughPlane &accumulator, const Acts::HoughTransformUtils::HoughAxisRanges &axisRanges, const MaximumVec &maxima, const std::string &extraLabel) const override final
MuonValR4::IPatternVisualizationTool::PrimitiveVec PrimitiveVec

◆ visualizeAccumulator() [2/2]

void MuonValR4::PatternVisualizationTool::visualizeAccumulator ( const EventContext & ctx,
const MuonR4::HoughPlane & accumulator,
const Acts::HoughTransformUtils::HoughAxisRanges & axisRanges,
const MaximumVec & maxima,
const std::string & extraLabel,
PrimitiveVec && extraPaints ) const
finaloverridevirtual

Check whether the canvas limit has been reached

Definition at line 127 of file PatternVisualizationTool.cxx.

132 {
133
135 if (m_plotsDone) {
136 return;
137 }
138
139 ATH_MSG_VERBOSE("Visualize accumulator");
140
141 if (accumulator.getNonEmptyBins().empty()) {
142 ATH_MSG_WARNING("Hough accumulator is empty");
143 return;
144 }
145
146 auto accHisto = std::make_unique<TH2F>("AccumulatorHisto", "histo",
147 accumulator.nBinsX(), axisRanges.xMin, axisRanges.xMax,
148 accumulator.nBinsY(), axisRanges.yMin, axisRanges.yMax);
149 accHisto->SetDirectory(nullptr);
150
151 std::vector<const SpacePoint*> spacePointsInAcc{};
152 for (const std::size_t bin : accumulator.getNonEmptyBins()) {
153 const auto [xBin, yBin] = accumulator.axisBins(bin);
154 auto hitIds = accumulator.hitIds(xBin, yBin);
155 spacePointsInAcc.insert(spacePointsInAcc.end(),hitIds.begin(), hitIds.end());
156 accHisto->SetBinContent(xBin+1, yBin+1, accumulator.nHits(bin));
157 }
158
159 const LabeledSegmentSet truthSegs{getLabeledSegments(spacePointsInAcc)};
160 if (truthSegs.empty() && m_displayOnlyTruth) {
161 ATH_MSG_VERBOSE("visualizeAccumulator skipped: no truth segments found and displayOnlyTruth=true");
162 return;
163 }
164
165 auto canvas = m_visualSvc->prepareCanvas(ctx, m_clientToken, extraLabel);
166 if (!canvas){
167 m_plotsDone = true;
168 return;
169 }
170
171
172 const double maxBins = std::max(accumulator.nBinsX(), accumulator.nBinsY());
173 double markerTextSize = 0.035;
174 // Scale down for large accumulators
175 markerTextSize *= 25. / std::max(25., maxBins);
176 // Avoid absurdly tiny/large text
177 markerTextSize = std::clamp(markerTextSize, 0.006, 0.035);
178 accHisto->SetMarkerSize(markerTextSize);
179 accHisto->SetMarkerColor(kBlack);
180 accHisto->SetMinimum(0.);
181
182 canvas->expandPad(axisRanges.xMin, axisRanges.yMin);
183 canvas->expandPad(axisRanges.xMax, axisRanges.yMax);
184 canvas->setAxisTitles(std::format("tan#{}", m_accumlIsEta ? "beta" : "#alpha"),
185 std::format("{:}_{{0}} [mm]", m_accumlIsEta ? "y" : "x"));
186 canvas->add(std::move(accHisto), "HIST SAME");
187
188 // Draw explicit bin labels at bin centers. This is more robust than TH2 TEXT
189 // when plotting into the visualization service's prebuilt frame.
190 const double binLabelPx = std::clamp(1.2 * 500. / maxBins, 7.0, 18.0);
191 for (const std::size_t bin : accumulator.getNonEmptyBins()) {
192 const auto [xBin, yBin] = accumulator.axisBins(bin);
193 const double xCenter = axisRanges.xMin + (xBin + 0.5) * (axisRanges.xMax - axisRanges.xMin) / accumulator.nBinsX();
194 const double yCenter = axisRanges.yMin + (yBin + 0.5) * (axisRanges.yMax - axisRanges.yMin) / accumulator.nBinsY();
195
196 //Extract number of entries in the bin with no decimal precision just int
197 std::string binLabel = std::format("{:0}", int(accumulator.nHits(bin)));
198
199 auto binTxt = drawLabel(binLabel, xCenter, yCenter, binLabelPx, false, kBlack);
200 binTxt->SetTextAlign(22);
201 canvas->add(std::move(binTxt));
202 }
203
204 int iseg = 0;
205 for (const xAOD::MuonSegment* segment : truthSegs) {
206 const auto [pos, dir] = makeLine(localSegmentPars(*segment));
207 const double tan = m_accumlIsEta ? houghTanBeta(dir) : houghTanAlpha(dir);
208 const double icept = pos[m_accumlIsEta ? objViewEta : objViewPhi];
209 auto truthMarker = std::make_unique<TMarker>(tan, icept, kFullCrossX);
210 truthMarker->SetMarkerColor(truthColor);
211 truthMarker->SetMarkerSize(4);
212 canvas->add(std::move(truthMarker));
213 canvas->add(drawLabel(std::format("true parameters: {:}",
214 makeLabel(localSegmentPars(*segment))),0.2, 0.9 - 0.05*iseg));
215 iseg += 1;
216 }
217 for (const auto& maximum : maxima) {
218 auto maxMarker = std::make_unique<TMarker>(maximum.x, maximum.y, kFullTriangleUp);
219 maxMarker->SetMarkerColor(parLineColor);
220 maxMarker->SetMarkerSize(4);
221 canvas->add(std::move(maxMarker));
222
223 // Draw a bounding box around the maximum island center (x,y) and widths (wx,wy).
224 const double xMin = maximum.x - maximum.wx;
225 const double xMax = maximum.x + maximum.wx;
226 const double yMin = maximum.y - maximum.wy;
227 const double yMax = maximum.y + maximum.wy;
228
229 auto maxBox = drawBox(xMin, yMin, xMax, yMax, parLineColor, hollowFilling);
230 maxBox->SetLineStyle(kDashed);
231 maxBox->SetLineWidth(2);
232 canvas->add(std::move(maxBox));
233 }
234
235 canvas->add(std::move(primitives));
236 }
Gaudi::Property< bool > m_accumlIsEta
Swtich toggling whether the accumulator view are in the eta or phi plane.
Parameters localSegmentPars(const xAOD::MuonSegment &seg)
Returns the localSegPars decoration from a xAODMuon::Segment.
std::pair< Amg::Vector3D, Amg::Vector3D > makeLine(const Parameters &pars)
Returns the parsed parameters into an Eigen line parametrization.
std::string makeLabel(const Parameters &pars)
Dumps the parameters into a string in the form of TLatex.
double houghTanBeta(const Amg::Vector3D &v)
Returns the hough tanBeta [y] / [z].
double houghTanAlpha(const Amg::Vector3D &v)
: Returns the hough tanAlpha [x] / [z]
std::unique_ptr< TLatex > drawLabel(const std::string &text, const double xPos, const double yPos, const double textSize=18, const bool useNDC=true, const int color=kBlack)
Create a TLatex label,.
MuonSegment_v1 MuonSegment
Reference the current persistent version:

◆ visualizeBucket() [1/2]

void MuonValR4::PatternVisualizationTool::visualizeBucket ( const EventContext & ctx,
const MuonR4::SpacePointBucket & bucket,
const std::string & extraLabel ) const
finaloverridevirtual

Definition at line 324 of file PatternVisualizationTool.cxx.

326 {
327 PrimitiveVec primitives{};
328 visualizeBucket(ctx, bucket, extraLabel, std::move(primitives));
329 }
virtual void visualizeBucket(const EventContext &ctx, const MuonR4::SpacePointBucket &bucket, const std::string &extraLabel) const override final

◆ visualizeBucket() [2/2]

void MuonValR4::PatternVisualizationTool::visualizeBucket ( const EventContext & ctx,
const MuonR4::SpacePointBucket & bucket,
const std::string & extraLabel,
PrimitiveVec && extraPaints ) const
finaloverridevirtual

Check whether the canvas limit has been reached

reset the primitives

Definition at line 330 of file PatternVisualizationTool.cxx.

333 {
335 if (m_plotsDone) {
336 return;
337 }
338 ATH_MSG_VERBOSE("visualizeBucket called for " << extraLabel);
339
340 LabeledSegmentSet truthSegs{getLabeledSegments(Acts::unpackConstSmartPointers(bucket))};
341 if (truthSegs.empty() && m_displayOnlyTruth) {
342 ATH_MSG_VERBOSE("visualizeBucket skipped: no truth segments found and displayOnlyTruth=true");
343 return;
344 }
345 auto canvas = m_visualSvc->prepareCanvas(ctx, m_clientToken, extraLabel);
346 if (!canvas){
347 m_plotsDone = true;
348 return;
349 }
350
351 canvas->add(std::move(primitives));
352
353 for (const int view : {objViewEta, objViewPhi}) {
354 if ((view == objViewEta && !m_doEtaBucketViews) ||
355 (view == objViewPhi && !m_doPhiBucketViews)){
356 continue;
357 }
358 canvas->setAxisTitles(std::format("{:} [mm]", view == objViewEta ? 'y' : 'x'), "z [mm]");
360 if (!drawHits(bucket, bucket, *canvas, view)) {
361 continue;
362 }
363 bool drawnTrueLabel{false};
364 for (const xAOD::MuonSegment* segment : truthSegs) {
365 canvas->add(drawLine(localSegmentPars(*segment),
366 canvas->corner(Edges::yLow), canvas->corner(Edges::yHigh),
367 truthColor, kDotted, view));
368 if (!drawnTrueLabel) {
369 canvas->add(drawLabel(std::format("true parameters: {:}",makeLabel(localSegmentPars(*segment))),0.2, 0.89));
370 drawnTrueLabel = true;
371 }
372 paintSimHits(ctx,*segment, *canvas, view);
373 }
374
375 std::string legendLabel = std::format("Event: {:}, chamber : {:}, #{:}-view ({:})",
376 ctx.eventID().event_number(),
377 bucket.msSector()->identString(),
378 view ==objViewEta ? "eta" : "phi",
379 extraLabel);
380 canvas->add(drawLabel(legendLabel, 0.15, 0.96));
381 }
382 }
std::string identString() const
Returns a string encoding the chamber index & the sector of the MS sector.
const MuonGMR4::SpectrometerSector * msSector() const
returns th associated muonChamber
Gaudi::Property< bool > m_doEtaBucketViews
Switch to visualize the eta view of the bucket event.
Gaudi::Property< bool > m_doPhiBucketViews
Switch to visualize the phi view of the bucket event.
bool drawHits(const MuonR4::SpacePointBucket &bucket, const std::vector< SpacePointType > &hitsToDraw, Canvas_t &canvasDim, unsigned int view) const
Translates the Spacepoint information into TObjects that are dawn on the canvas & evaluates the size ...
void paintSimHits(const EventContext &ctx, const xAOD::MuonSegment &truthSeg, Canvas_t &canvas, const int view) const
Paints the truth sim hits associated with the segment.
std::unique_ptr< TLine > drawLine(const MuonR4::SegmentFit::Parameters &pars, const double lowEnd, const double highEnd, const int color=kRed+1, const int lineStyle=kDashed, const int view=objViewEta)
Draws a line from the segment fit parameters.

◆ visualizeSeed() [1/2]

void MuonValR4::PatternVisualizationTool::visualizeSeed ( const EventContext & ctx,
const MuonR4::SegmentSeed & seed,
const std::string & extraLabel ) const
finaloverridevirtual

Definition at line 261 of file PatternVisualizationTool.cxx.

263 {
264 PrimitiveVec primitives{};
265 visualizeSeed(ctx, seed, extraLabel, std::move(primitives));
266 }
virtual void visualizeSeed(const EventContext &ctx, const MuonR4::SegmentSeed &seed, const std::string &extraLabel) const override final

◆ visualizeSeed() [2/2]

void MuonValR4::PatternVisualizationTool::visualizeSeed ( const EventContext & ctx,
const MuonR4::SegmentSeed & seed,
const std::string & extraLabel,
PrimitiveVec && extraPaints ) const
finaloverridevirtual

Check whether the canvas limit has been reached

Definition at line 267 of file PatternVisualizationTool.cxx.

270 {
271
272 ATH_MSG_VERBOSE("Visualizing seed with " << seed.getHitsInMax().size() << " hits");
274 if (m_plotsDone) {
275 ATH_MSG_VERBOSE("visualizeSeed skipped: canvas quota already exhausted for " << extraLabel);
276 return;
277 }
278 const LabeledSegmentSet truthSegs{getLabeledSegments(seed.getHitsInMax())};
279 if (truthSegs.empty() && m_displayOnlyTruth) {
280 ATH_MSG_VERBOSE("visualizeSeed skipped: no truth segments found and displayOnlyTruth=true");
281 return;
282 }
283
284 auto canvas = m_visualSvc->prepareCanvas(ctx, m_clientToken, extraLabel);
285 if (!canvas) {
286 m_plotsDone = true;
287 return;
288 }
289
290 canvas->add(std::move(primitives));
291
292
293 for (const int view : {objViewEta, objViewPhi}) {
294 if ((view == objViewEta && !m_doEtaBucketViews) ||
295 (view == objViewPhi && !m_doPhiBucketViews)){
296 continue;
297 }
298 canvas->setAxisTitles(std::format("{:} [mm]", view == objViewEta ? 'y' : 'x'), "z [mm]");
299
300 if (!drawHits(*seed.parentBucket(), seed.getHitsInMax(), *canvas, view)) {
301 continue;
302 }
303 for (const xAOD::MuonSegment* segment : truthSegs) {
304 canvas->add(drawLine(localSegmentPars(*segment),
305 canvas->corner(Edges::yLow), canvas->corner(Edges::yHigh),
306 truthColor, kDotted, view));
307 paintSimHits(ctx,*segment, *canvas, view);
308 }
309 canvas->add(drawLine(seed.parameters(), canvas->corner(Edges::yLow),
310 canvas->corner(Edges::yHigh), parLineColor, kDashed, view));
311
312 writeChi2(seed.parameters(), seed.getHitsInMax(), *canvas);
313
314 std::string legendLabel = std::format("Event: {:}, chamber : {:}, #{:}-view ({:})",
315 ctx.eventID().event_number(),
316 m_idHelperSvc->toStringChamber(seed.getHitsInMax().front()->identify()),
317 view ==objViewEta ? "eta" : "phi",
318 extraLabel);
319 canvas->add(drawLabel(legendLabel, 0.1, 0.96));
320 canvas->add(drawLabel( "Seed parameters: " + makeLabel(seed.parameters()),0.25, 0.89));
321 }
322 }
void writeChi2(const MuonR4::SegmentFit::Parameters &pars, const std::vector< SpacePointType > &hits, Canvas_t &canvas, const double legX=0.2, double startLegY=0.8, const double endLegY=0.3) const
Writes the chi2 of the hits onto the Canvas.

◆ visualizeSegment() [1/2]

void MuonValR4::PatternVisualizationTool::visualizeSegment ( const EventContext & ctx,
const MuonR4::Segment & segment,
const std::string & extraLabel ) const
finaloverridevirtual

Definition at line 384 of file PatternVisualizationTool.cxx.

386 {
387 PrimitiveVec primitives{};
388 visualizeSegment(ctx, segment,extraLabel, std::move(primitives));
389 }
virtual void visualizeSegment(const EventContext &ctx, const MuonR4::Segment &segment, const std::string &extraLabel) const override final

◆ visualizeSegment() [2/2]

void MuonValR4::PatternVisualizationTool::visualizeSegment ( const EventContext & ctx,
const MuonR4::Segment & segment,
const std::string & extraLabel,
PrimitiveVec && extraPaints ) const
finaloverridevirtual

Check whether the canvas limit has been reached

Definition at line 391 of file PatternVisualizationTool.cxx.

394 {
396 if (m_plotsDone) {
397 return;
398 }
399
400 ATH_MSG_VERBOSE("Visualizing segment with " << segment.measurements().size() << " hits");
401
402 const LabeledSegmentSet truthSegs{getLabeledSegments(segment.parent()->getHitsInMax())};
403 if (truthSegs.empty() && m_displayOnlyTruth) {
404 return;
405 }
406 const ActsTrk::GeometryContext* geoCtx{nullptr};
407 if (!SG::get(geoCtx, m_geoCtxKey, ctx).isSuccess()) {
408 return;
409 }
410 auto canvas = m_visualSvc->prepareCanvas(ctx, m_clientToken, extraLabel);
411 if (!canvas) {
412 m_plotsDone = true;
413 return;
414 }
415 canvas->add(std::move(primitives));
416
417
418 const Parameters segPars = SegmentFit::localSegmentPars(*geoCtx, segment);
419
420 for (const int view : {objViewEta, objViewPhi}) {
421 if ((view == objViewEta && !m_doEtaBucketViews) ||
422 (view == objViewPhi && !m_doPhiBucketViews)){
423 continue;
424 }
425 canvas->setAxisTitles(std::format("{:} [mm]", view == objViewEta ? 'y' : 'x'), "z [mm]");
426 if (!drawHits(*segment.parent()->parentBucket(), segment.measurements(),
427 *canvas, view)) {
428 continue;
429 }
430 for (const xAOD::MuonSegment* segment : truthSegs) {
431 canvas->add(drawLine(localSegmentPars(*segment), canvas->corner(Edges::yLow), canvas->corner(Edges::yHigh),
432 truthColor, kDotted, view));
433 paintSimHits(ctx,*segment, *canvas, view);
434 }
435 writeChi2(segPars, segment.measurements(), *canvas);
436
437 canvas->add(drawLine(segPars, canvas->corner(Edges::yLow), canvas->corner(Edges::yHigh),
438 parLineColor, kDashed, view));
439
440 const Identifier canvasId{segment.parent()->getHitsInMax().front()->identify()};
441 std::string legendLabel=std::format("Event: {:}, chamber: {:}, #chi^{{2}} / nDoF: {:.2f} ({:d}), #{:}-view (:)",
442 ctx.eventID().event_number(), m_idHelperSvc->toStringChamber(canvasId),
443 segment.chi2() /std::max(1u, segment.nDoF()), segment.nDoF(),
444 view ==objViewEta ? "eta" : "phi", extraLabel);
445
446 canvas->add(drawLabel(legendLabel, 0.2, 0.96));
447 canvas->add(drawLabel(makeLabel(segPars),0.25, 0.91));
448 }
449 }
const std::vector< HitType > & getHitsInMax() const
Returns the list of assigned hits.
const SpacePointBucket * parentBucket() const
Returns the bucket out of which the seed was formed.
unsigned int nDoF() const
Returns the number of degrees of freedom.
const SegmentSeed * parent() const
Returns the seed out of which the segment was built.
const MeasVec & measurements() const
Returns the associated measurements.
Acts::Experimental::CompositeSpacePointLineFitter::ParamVec_t Parameters

◆ writeChi2()

template<class SpacePointType>
void MuonValR4::PatternVisualizationTool::writeChi2 ( const MuonR4::SegmentFit::Parameters & pars,
const std::vector< SpacePointType > & hits,
Canvas_t & canvas,
const double legX = 0.2,
double startLegY = 0.8,
const double endLegY = 0.3 ) const
private

Writes the chi2 of the hits onto the Canvas.

Parameters
parsParameter for which the chi2 is evaluated,
hitsVector of hits to consider
canvasReference to the Canvas object to which the drawn hits are appended
legXx-position of the list
statLegYy-position of the first entry. The next one is 0.05 apart
endLegy-position of the last shown entry. The routine aborts if there're more hits in the event.

Definition at line 585 of file PatternVisualizationTool.cxx.

589 {
590 const auto [pos, dir] = makeLine(pars);
591
592 for (const SpacePointType& hit : hits) {
593 const SpacePoint* underlyingSp{nullptr};
594 bool displayChi2{true};
595 if constexpr(std::is_same_v<SpacePointType, Segment::MeasType>) {
596 underlyingSp = hit->spacePoint();
597 displayChi2 = (hit->fitState() == CalibratedSpacePoint::State::Valid);
598 } else {
599 underlyingSp = hit;
600 }
601 const Identifier hitId = underlyingSp ? underlyingSp->identify(): Identifier{};
602 std::string legendstream{};
603 switch(hit->type()) {
605 const int driftSign{SeedingAux::strawSign(pos, dir, *hit)};
606 const MdtIdHelper& idHelper{m_idHelperSvc->mdtIdHelper()};
607 legendstream = std::format("ML: {:1d}, TL: {:1d}, T: {:3d}, {:}",
608 idHelper.multilayer(hitId), idHelper.tubeLayer(hitId),
609 idHelper.tube(hitId), driftSign == -1 ? "L" : "R");
610 break;
612 const RpcIdHelper& idHelper{m_idHelperSvc->rpcIdHelper()};
613 legendstream= std::format("DR: {:1d}, DZ: {:1d}, GAP: {:1d}, #eta/#phi: {:}/{:}",
614 idHelper.doubletR(hitId), idHelper.doubletZ(hitId), idHelper.gasGap(hitId),
615 hit->measuresEta() ? "si" : "nay", hit->measuresPhi() ? "si" : "nay");
616 break;
618 const TgcIdHelper& idHelper{m_idHelperSvc->tgcIdHelper()};
619 legendstream = std::format("ST: {:}, GAP: {:1d}, #eta/#phi: {:}/{:}",
620 m_idHelperSvc->stationNameString(hitId), idHelper.gasGap(hitId),
621 hit->measuresEta() ? "si" : "nay", hit->measuresPhi() ? "si" : "nay");
622 break;
624 const MmIdHelper& idHelper{m_idHelperSvc->mmIdHelper()};
625 const auto* clus = static_cast<const xAOD::MMCluster*>(underlyingSp->primaryMeasurement());
626 const MuonGMR4::StripDesign& design = clus->readoutElement()->stripLayer(clus->layerHash()).design();
627 legendstream = std::format("ML: {:1d}, GAP: {:1d}, {:}", idHelper.multilayer(hitId), idHelper.gasGap(hitId),
628 !design.hasStereoAngle() ? "X" : design.stereoAngle() > 0 ? "U" :"V");
629 break;
631 const sTgcIdHelper& idHelper{m_idHelperSvc->stgcIdHelper()};
632 legendstream = std::format("ML: {:1d}, GAP: {:1d}, #eta/#phi: {:}/{:}",
633 idHelper.multilayer(hitId), idHelper.gasGap(hitId),
634 hit->measuresEta() ? "si" : "nay", hit->measuresPhi() ? "si" : "nay");
635 break;
637 legendstream = "Ext. constaint";
638 }
639 default:
640 break;
641 }
642 if (displayChi2) {
643 const double chi2 = SeedingAux::chi2Term(pos, dir,*hit);
644 legendstream+=std::format(", #chi^{{2}}: {:.2f}", chi2);
645 } else {
646 legendstream+=", #chi^{2}: ---";
647 }
648 canvas.add(drawLabel(legendstream, legX, startLegY, 14));
649 startLegY -= 0.05;
650 if (startLegY<= endLegY) {
651 break;
652 }
653 }
654 }
int multilayer(const Identifier &id) const
Access to components of the ID.
int tube(const Identifier &id) const
int tubeLayer(const Identifier &id) const
int gasGap(const Identifier &id) const override
get the hashes
int multilayer(const Identifier &id) const
const StripLayer & stripLayer(const Identifier &measId) const
double stereoAngle() const
Returns the value of the stereo angle.
bool hasStereoAngle() const
Returns whether a stereo angle is defined.
const StripDesign & design(bool phiView=false) const
Returns the underlying strip design.
int gasGap(const Identifier &id) const override
get the hashes
int doubletR(const Identifier &id) const
int doubletZ(const Identifier &id) const
int gasGap(const Identifier &id) const override
get the hashes
int multilayer(const Identifier &id) const
int gasGap(const Identifier &id) const override
get the hashes
const MuonGMR4::MmReadoutElement * readoutElement() const override final
Retrieve the associated MmReadoutElement.
double chi2(TH1 *h0, TH1 *h1)
MMCluster_v1 MMCluster

Member Data Documentation

◆ m_accumlIsEta

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_accumlIsEta {this, "AccumulatorsInEtaPlane", true}
private

Swtich toggling whether the accumulator view are in the eta or phi plane.

Just affects the axis labels

Definition at line 166 of file PatternVisualizationTool.h.

166{this, "AccumulatorsInEtaPlane", true};

◆ m_canvasLimit

Gaudi::Property<unsigned int> MuonValR4::PatternVisualizationTool::m_canvasLimit {this, "CanvasLimits", 5000}
private

Maximum canvases to draw.

Definition at line 153 of file PatternVisualizationTool.h.

153{this, "CanvasLimits", 5000};

◆ m_canvasPrefix

Gaudi::Property<std::string> MuonValR4::PatternVisualizationTool::m_canvasPrefix {this, "CanvasPreFix", ""}
private

Prefix of the individual canvas file names <MANDATORY>.

Definition at line 159 of file PatternVisualizationTool.h.

159{this, "CanvasPreFix", ""};

◆ m_clientToken

IRootVisualizationService::ClientToken MuonValR4::PatternVisualizationTool::m_clientToken {}
private

Token to present to the visualization service such that the display froms this tool are grouped together.

Definition at line 151 of file PatternVisualizationTool.h.

151{};

◆ m_detMgr

const MuonGMR4::MuonDetectorManager* MuonValR4::PatternVisualizationTool::m_detMgr {nullptr}
private

pointer to the Detector manager

Definition at line 187 of file PatternVisualizationTool.h.

187{nullptr};

◆ m_displayBucket

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_displayBucket {this, "displayBucket", true}
private

Display the surrounding hits from the bucket not part of the seed.

Definition at line 163 of file PatternVisualizationTool.h.

163{this, "displayBucket", true};

◆ m_displayOnlyTruth

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_displayOnlyTruth {this, "displayTruthOnly", false}
private

Definition at line 184 of file PatternVisualizationTool.h.

184{this, "displayTruthOnly", false};

◆ m_doEtaBucketViews

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_doEtaBucketViews {this,"doEtaBucketViews", true}
private

Switch to visualize the eta view of the bucket event.

Definition at line 168 of file PatternVisualizationTool.h.

168{this,"doEtaBucketViews", true};

◆ m_doPhiBucketViews

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_doPhiBucketViews {this,"doPhiBucketViews", false}
private

Switch to visualize the phi view of the bucket event.

Definition at line 170 of file PatternVisualizationTool.h.

170{this,"doPhiBucketViews", false};

◆ m_geoCtxKey

ActsTrk::GeoContextReadKey_t MuonValR4::PatternVisualizationTool::m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"}
private

Geometry context key to retrieve the alignment.

Definition at line 189 of file PatternVisualizationTool.h.

189{this, "AlignmentKey", "ActsAlignment", "cond handle key"};

◆ m_idHelperSvc

ServiceHandle<Muon::IMuonIdHelperSvc> MuonValR4::PatternVisualizationTool::m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"}
private

Service Handle to the IMuonIdHelperSvc.

Definition at line 191 of file PatternVisualizationTool.h.

191{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};

◆ m_paintTruthHits

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_paintTruthHits {this, "paintTruthHits", false}
private

Switch to visualize the truth hits.

Definition at line 172 of file PatternVisualizationTool.h.

172{this, "paintTruthHits", false};

◆ m_plotsDone

std::atomic<bool> MuonValR4::PatternVisualizationTool::m_plotsDone {false}
mutableprivate

Flag toggling whether all Canvases have been exhausted.

Definition at line 193 of file PatternVisualizationTool.h.

193{false};

◆ m_prepContainerKeys

SG::ReadHandleKeyArray<xAOD::UncalibratedMeasurementContainer> MuonValR4::PatternVisualizationTool::m_prepContainerKeys {this, "PrdContainer", {}}
private

Declare dependency on the prep data containers.

Definition at line 174 of file PatternVisualizationTool.h.

174{this, "PrdContainer", {}};

◆ m_saveSinglePDFs

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_saveSinglePDFs {this, "saveSinglePDFs", false}
private

If set to true each canvas is saved into a dedicated pdf file.

Definition at line 155 of file PatternVisualizationTool.h.

155{this, "saveSinglePDFs", false};

◆ m_saveSummaryPDF

Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_saveSummaryPDF {this, "saveSummaryPDF", false}
private

If set to true a summary Canvas is created.

Definition at line 157 of file PatternVisualizationTool.h.

157{this, "saveSummaryPDF", false};

◆ m_subDir

Gaudi::Property<std::string> MuonValR4::PatternVisualizationTool::m_subDir {this, "outSubDir", ""}
private

Define the subdirectory in which the plots shall be saved.

Definition at line 161 of file PatternVisualizationTool.h.

161{this, "outSubDir", ""};

◆ m_truthLinkDecorKeys

SG::ReadDecorHandleKeyArray<xAOD::UncalibratedMeasurementContainer> MuonValR4::PatternVisualizationTool::m_truthLinkDecorKeys {this, "LinkDecorKeys", {}}
private

Declaration of the dependency on the decorations.

(Overwritten in initialize)

Definition at line 178 of file PatternVisualizationTool.h.

178{this, "LinkDecorKeys", {}};

◆ m_truthLinkDecors

std::vector<SegLinkDecor_t> MuonValR4::PatternVisualizationTool::m_truthLinkDecors {}
private

Definition at line 182 of file PatternVisualizationTool.h.

182{};

◆ m_truthSegLinks

Gaudi::Property<std::set<std::string> > MuonValR4::PatternVisualizationTool::m_truthSegLinks {this, "TruthSegDecors", {}}
private

List of truth segment links to fetch.

Definition at line 176 of file PatternVisualizationTool.h.

176{this, "TruthSegDecors", {}};

◆ m_visualSvc

ServiceHandle<IRootVisualizationService> MuonValR4::PatternVisualizationTool::m_visualSvc {this, "VisualSvc", "MuonValR4::RootVisualizationService"}
private

Service handle of the visualization service.

Definition at line 148 of file PatternVisualizationTool.h.

148{this, "VisualSvc", "MuonValR4::RootVisualizationService"};

The documentation for this class was generated from the following files: