ATLAS Offline Software
TrackVisualizationTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
5 
13 
14 
15 #include <filesystem>
16 #include <format>
17 
18 #include "TMarker.h"
19 #include "TROOT.h"
20 #include "TStyle.h"
21 #include "TLegend.h"
22 #include "TH1F.h"
23 
24 namespace {
25  using namespace MuonR4;
26  using PrimitivesVec_t = MuonValR4::TrackVisualizationTool::PrimitivesVec_t;
27  constexpr int truthColor = kOrange +2;
28 
29  constexpr int ColorBarrel = kRed;
30  constexpr int ColorEndcapA = kBlue;
31  constexpr int ColorEndcapC = kGreen +2;
32  constexpr double inM = 1./ Gaudi::Units::m;
33 
34  constexpr double extraMargin = 50.*Gaudi::Units::cm * inM;
35 
36  static const Muon::MuonSectorMapping sectorMap{};
37 
38 
39  std::unique_ptr<TMarker> drawMarker(const Amg::Vector2D& pos, const int mStyle, const int mColor, const int mSize = 2) {
40  auto marker = std::make_unique<TMarker>(pos.x(), pos.y(), mStyle);
41  marker->SetMarkerColor(mColor);
42  marker->SetMarkerSize(mSize);
43  return marker;
44  }
45 
46  inline int stationMarkerSyle(const Muon::MuonStationIndex::ChIndex ch,
47  const bool openMarker, const bool onSeed) {
50  case Inner:
51  case BarrelExtended:
52  case Extended:
53  return onSeed ? (openMarker ? kOpenTriangleUp : kFullTriangleUp)
54  : (openMarker ? kOpenTriangleDown : kFullTriangleDown);
55  case Middle:
56  return onSeed ? (openMarker ? kOpenCrossX : kFullCrossX)
57  : (openMarker ? kOpenCross : kFullCross);
58  case Outer:
59  return onSeed ? (openMarker ? kOpenFourTrianglesX: kFullFourTrianglesX)
60  : (openMarker ? kOpenThreeTriangles : kFullThreeTriangles);
61  default:
62  return 0;
63  }
64  }
65 }
66 
67 namespace MuonValR4{
68 
69  void TrackVisualizationTool::PlotLegend::addColor(const int color, const std::string& label){
70  if (colors.find(color) != colors.end()) {
71  return;
72  }
73  auto box = MuonValR4::drawBox(-1.5,-1.5,-1.,-1., color, MuonValR4::fullFilling);
74  legend->AddEntry(box.get(), label.c_str(), "F");
75  colors.insert(std::make_pair(color, std::move(box)));
76  }
77  void TrackVisualizationTool::PlotLegend::addMarker(const int marker, const std::string& label){
78  if (markers.find(marker)!= markers.end()) {
79  return;
80  }
81  auto tMarker = drawMarker(Amg::Vector2D{2.*Gaudi::Units::km, 0.}, marker, kBlack);
82  legend->AddEntry(tMarker.get(), label.c_str(), "P");
83  markers.insert(std::make_pair(marker, std::move(tMarker)));
84  }
86  legend->SetBorderSize(0);
87  legend->SetNColumns(4);
88  canvas.add(std::move(legend));
89  for (auto&[i, obj] : colors){
90  canvas.add(std::move(obj));
91  }
92  for (auto&[i, obj]: markers) {
93  canvas.add(std::move(obj));
94  }
95  }
97  const Amg::Vector2D& posOnCylinder,
98  const DisplayView view) {
99  using enum DisplayView;
100  if (view == RZ) {
101  return Amg::Vector2D{ posOnCylinder[1]*inM, posOnCylinder[0]*inM};
102  }
103  const CxxUtils::sincos phi{phiV};
104  return posOnCylinder[0] * inM * Amg::Vector2D{phi.cs, phi.sn};
105  }
107  if (m_canvasLimit > 0) {
113  ATH_CHECK(m_visualSvc.retrieve());
114  ATH_CHECK(m_visualSvc->registerClient(m_clientToken));
115  } else {
116  m_plotsDone = true;
117  }
120  ATH_CHECK(m_extrapolationTool.retrieve(EnableTool{!m_extrapolationTool.empty()}));
121  return StatusCode::SUCCESS;
122  }
123  void TrackVisualizationTool::displaySeeds(const EventContext& ctx,
124  const MsTrackSeeder& seederObj,
125  const xAOD::MuonSegmentContainer& segments,
126  const MsTrackSeedContainer& seeds) const {
127  displaySeeds(ctx, seederObj, segments, seeds, PrimitivesVec_t{});
128  }
129  void TrackVisualizationTool::displaySeeds(const EventContext& ctx,
130  const MsTrackSeeder& seederObj,
131  const xAOD::MuonSegmentContainer& segments,
132  const MsTrackSeedContainer& seeds,
133  PrimitivesVec_t && extPrimitives) const {
134  if (m_plotsDone || segments.empty()) {
135  return;
136  }
137  displaySeeds(ctx, seederObj, DisplayView::RZ, segments, seeds, clone(extPrimitives));
138  displaySeeds(ctx, seederObj, DisplayView::XY, segments, seeds, std::move(extPrimitives));
139 
140  }
141  void TrackVisualizationTool::displaySeeds(const EventContext& ctx,
142  const MsTrackSeeder& seeder,
143  const DisplayView view,
144  const xAOD::MuonSegmentContainer& segments,
145  const MsTrackSeedContainer& seeds,
146  PrimitivesVec_t&& extPrimitives) const{
147 
148  auto canvas = m_visualSvc->prepareCanvas(ctx, m_clientToken, std::format("SeedDisplay{:}",
149  view == DisplayView::XY ? "XY" : "RZ" ));
150 
151  if (!canvas) {
152  m_plotsDone = true;
153  return;
154  }
155  canvas->setAxisTitles(view == DisplayView::XY ? "x [m]" : "z [m]",
156  view == DisplayView::XY ? "y [m]" : "R [m]");
157 
158  PlotLegend legend{0.005,0.005, 0.6,0.1};
160  fillTruthSeedPoints(ctx, seeder, view, legend, *canvas);
161 
162  auto onSeed = [&seeds](const xAOD::MuonSegment* segment,
163  const Location loc) {
164  return std::ranges::any_of(seeds,[segment, loc](const MsTrackSeed& seed){
165  return seed.location() == loc && std::ranges::find(seed.segments(), segment) != seed.segments().end();
166  });
167  };
168 
169  const ActsTrk::GeometryContext* gctx{nullptr};
170  if (!SG::get(gctx, m_geoCtxKey, ctx).isSuccess()) {
171  THROW_EXCEPTION("Failed to fetch the geometry context "<<m_geoCtxKey.fullKey());
172  }
173  bool drawnPoint{false};
174 
175  for (const xAOD::MuonSegment* segment: segments) {
176  using enum Location;
178  using namespace Muon;
179  const MuonGMR4::SpectrometerSector* msSector = detailedSegment(*segment)->msSector();
180  const auto chIdx = segment->chamberIndex();
181  const int mColor = msSector->barrel() ? ColorBarrel : (msSector->side() > 0 ? ColorEndcapA : ColorEndcapC);
182 
183  for (const auto secProj : {leftOverlap, center, rightOverlap}) {
184  if (!sectorMap.insideSector(segment->sector() + Acts::toUnderlying(secProj),
185  segment->position().phi())){
186  continue;
187  }
188 
189  for (const Location loc : {Barrel, Endcap}) {
190  const Amg::Vector2D projPos{seeder.expressOnCylinder(*gctx, *segment, loc, secProj)};
191  if (!seeder.withinBounds(projPos, loc)) {
192  continue;
193  }
194  drawnPoint = true;
195  const bool isGood = onSeed(segment, loc);
196  const int mStyle = stationMarkerSyle(chIdx, false, isGood);
197  const double phi = seeder.projectedPhi(segment->sector(), secProj);
198  const Amg::Vector2D markerPos{viewVector(phi, projPos, view)};
199  extPrimitives.emplace_back(drawMarker(markerPos, mStyle, mColor));
200 
201  if (view == DisplayView::XY) {
202  const double r = markerPos.mag() + extraMargin;
203  canvas->expandPad(r, r);
204  canvas->expandPad(-r, -r);
205  } else {
206  canvas->expandPad(markerPos[0] - extraMargin, markerPos[1] - extraMargin);
207  canvas->expandPad(markerPos[0] + extraMargin, markerPos[1] + extraMargin);
208  }
209  legend.addMarker(mStyle, std::format("{:}{:}", MuonStationIndex::layerName(MuonStationIndex::toLayerIndex(chIdx)),
210  isGood ? "" : " (discarded)"));
211  legend.addColor(mColor, msSector->barrel() ? "Barrel" : msSector->side() > 0 ? "Endcap A" : "Endcap C");
212  }
213  }
214  }
215  if (!drawnPoint) {
216  canvas->trash();
217  return;
218  }
219  for (const MsTrackSeed& seed : seeds) {
220  const Amg::Vector3D& pos{seed.position()};
221  canvas->add(drawMarker(viewVector(pos.phi(), Amg::Vector2D{pos.perp(), pos.z()}, view),
222  kFullDiamond, kBlack));
223  legend.addMarker(kFullDiamond, "track seed");
224  }
226  for (unsigned int s = 1; s<=16 ; ++s) {
227  if (view != DisplayView::XY) {
228  break;
229  }
230  const double phi = sectorMap.sectorPhi(s);
231  const double dPhi = sectorMap.sectorWidth(s);
232 
233  const int lStyle = s%2 ? kDashed : kDotted;
234  const double r = canvas->corner(Edges::xHigh);
235  const CxxUtils::sincos phiM{phi-dPhi}, phiP{phi+dPhi};
236  const Amg::Vector2D e1{r * phiM.cs, r * phiM.sn};
237  const Amg::Vector2D e2{r * phiP.cs, r * phiP.sn};
238 
239  auto theLine = std::make_unique<TLine>(0.,0., e1.x(), e1.y());
240  theLine->SetLineStyle(lStyle);
241  extPrimitives.insert(extPrimitives.begin(), std::move(theLine));
242  theLine = std::make_unique<TLine>(0.,0., e2.x(), e2.y());
243  theLine->SetLineStyle(lStyle);
244  extPrimitives.insert(extPrimitives.begin(), std::move(theLine));
245  theLine = std::make_unique<TLine>(e1.x(), e1.y(), e2.x(), e2.y());
246  theLine->SetLineStyle(lStyle);
247  extPrimitives.insert(extPrimitives.begin(), std::move(theLine));
248  }
249  legend.fillPrimitives(*canvas);
250  }
251  void TrackVisualizationTool::fillTruthSeedPoints(const EventContext& ctx,
252  const MsTrackSeeder& seeder,
253  const DisplayView view,
254  PlotLegend& legend,
255  Canvas_t& canvas) const {
256  const xAOD::MuonSegmentContainer* truthSegs{nullptr};
257  if (!SG::get(truthSegs,m_truthSegKey, ctx).isSuccess()) {
258  THROW_EXCEPTION("Failed to fetch the truth segment container");
259  }
260  if (!truthSegs) {
261  return;
262  }
263  const ActsTrk::GeometryContext* gctx{nullptr};
264  if (!SG::get(gctx, m_geoCtxKey, ctx).isSuccess()) {
265  THROW_EXCEPTION("Failed to fetch the geometry context "<<m_geoCtxKey.fullKey());
266  }
267 
268  bool addedEntry{false};
269  for (const xAOD::MuonSegment* segment: *truthSegs) {
270  const auto chIdx = segment->chamberIndex();
271  const int mStyle = stationMarkerSyle(chIdx, false, true);
272 
273  using enum Location;
275  for (const auto secProj : {leftOverlap, center, rightOverlap}) {
276  if (!sectorMap.insideSector(segment->sector() + Acts::toUnderlying(secProj),
277  segment->position().phi())){
278  continue;
279  }
280  for (const Location loc : {Barrel, Endcap}) {
281  const Amg::Vector2D projected{seeder.expressOnCylinder(*gctx, *segment, loc, secProj)};
282  if (!seeder.withinBounds(projected, loc)) {
283  continue;
284  }
285  const double phi = MsTrackSeeder::projectedPhi(segment->sector(), secProj);
286  canvas.add(drawMarker(viewVector(phi, projected, view), mStyle, truthColor, 3));
288  addedEntry = true;
289  }
290  }
291  }
292  if (addedEntry) {
293  legend.addColor(truthColor, "truth");
294  }
295  }
296  void TrackVisualizationTool::displayTrackSeedObj(const EventContext& ctx,
297  const MuonR4::MsTrackSeed& seed,
298  const OptBoundPars_t& parsToExt,
299  const std::string& objName) const {
300  if (m_objCounter >= m_canvasLimit) {
301  return;
302  }
303  const ActsTrk::GeometryContext* gctx{nullptr};
304  SG::get(gctx, m_geoCtxKey, ctx).ignore();
305 
306  Acts::ObjVisualization3D visualHelper{};
307  const std::string subDir = std::format("./ObjDisplays/{:}/", m_subDir.value());
308  ensureDirectory(subDir);
309  if (parsToExt.ok() && m_extrapolationTool.isEnabled()) {
310  MuonValR4::drawPropagation(m_extrapolationTool->propagationSteps(ctx, *parsToExt).first,
311  visualHelper);
312  }
313  std::string segStr{removeNonAlphaNum(objName)};
314  for (const xAOD::MuonSegment* seg : seed.segments()) {
315  MuonValR4::drawSegmentMeasurements(*gctx,* seg, visualHelper);
316  MuonValR4::drawSegmentLine(*gctx,*seg, visualHelper);
317  segStr += std::format("_{:}", MuonR4::printID(*seg));
318  }
319 
320  unsigned fileVersion{0};
321  std::string finalStr{};
322  while (finalStr.empty() || std::filesystem::exists(finalStr)) {
323  finalStr = std::format("{:}/{:}_{:}_{:}_{:}.obj", subDir,
324  m_clientToken.preFixName, ctx.eventID().event_number(), ++fileVersion, segStr);
325  }
326  visualHelper.write(finalStr);
327  ++m_objCounter;
328  }
329 }
MuonValR4::fullFilling
constexpr int fullFilling
Definition: VisualizationHelpers.h:24
MuonValR4::IRootVisualizationService::ClientToken::preFixName
std::string preFixName
Prefix name of the saved Canvas.
Definition: IRootVisualizationService.h:41
MuonR4::printID
std::string printID(const xAOD::MuonSegment &seg)
Print the chamber ID of a segment, e.g.
Definition: TrackingHelpers.cxx:15
MuonValR4::TrackVisualizationTool::PlotLegend
Helper struct to administer the markers & colors that are added to the legend.
Definition: TrackVisualizationTool.h:67
MuonValR4::IRootVisualizationService::ClientToken::subDirectory
std::string subDirectory
Subdirectory in which the plots are written.
Definition: IRootVisualizationService.h:43
Muon::MuonStationIndex::LayerIndex
LayerIndex
enum to classify the different layers in the muon spectrometer
Definition: MuonStationIndex.h:38
beamspotman.r
def r
Definition: beamspotman.py:672
Muon::MuonStationIndex::LayerIndex::Outer
@ Outer
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
color
Definition: jFexInputByteStreamTool.cxx:25
MuonGMR4::SpectrometerSector::side
int8_t side() const
Returns the side of the MS-sector 1 -> A side ; -1 -> C side.
Definition: SpectrometerSector.cxx:57
MuonGMR4::SpectrometerSector
A spectrometer sector forms the envelope of all chambers that are placed in the same MS sector & laye...
Definition: SpectrometerSector.h:40
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:67
vtune_athena.format
format
Definition: vtune_athena.py:14
MuonValR4::TrackVisualizationTool::DisplayView::XY
@ XY
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:138
MuonR4::MsTrackSeeder::withinBounds
bool withinBounds(const Amg::Vector2D &projPos, const Location loc) const
Returns whether the expression on the cylinder is within the surface bounds.
Definition: MsTrackSeeder.cxx:172
egammaEnergyPositionAllSamples::e1
double e1(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 1st sampling
MuonValR4::IRootVisualizationService::ClientToken::saveSinglePlots
bool saveSinglePlots
Save single plots.
Definition: IRootVisualizationService.h:47
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
VisualizationHelpers.h
MuonR4::MsTrackSeed
Definition: MsTrackSeed.h:18
MuonValR4::TrackVisualizationTool::m_truthSegKey
SG::ReadHandleKey< xAOD::MuonSegmentContainer > m_truthSegKey
Key to the truth segment selection to draw the segment parameters.
Definition: TrackVisualizationTool.h:136
MsTrackSeeder.h
Muon::MuonStationIndex::LayerIndex::BarrelExtended
@ BarrelExtended
EE.
MuonValR4::TrackVisualizationTool::m_clientToken
IRootVisualizationService::ClientToken m_clientToken
Token to present to the visualization service such that the display froms this tool are grouped toget...
Definition: TrackVisualizationTool.h:134
Muon::MuonStationIndex::LayerIndex::Inner
@ Inner
MuonValR4::drawBox
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.
Definition: VisualizationHelpers.cxx:49
xAOD::MuonSegment_v1
Class describing a MuonSegment.
Definition: MuonSegment_v1.h:33
MuonValR4::removeNonAlphaNum
std::string removeNonAlphaNum(std::string str)
Removes all non-alpha numerical characters from a string.
Definition: FileHelpers.cxx:10
MuonValR4::TrackVisualizationTool::m_saveSummaryPDF
Gaudi::Property< bool > m_saveSummaryPDF
If set to true a summary Canvas is created.
Definition: TrackVisualizationTool.h:144
Muon
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Definition: TrackSystemController.h:45
TauClusterVars::dPhi
bool dPhi(const xAOD::TauJet &tau, const xAOD::CaloVertexedTopoCluster &cluster, float &out)
Definition: ConstituentLoaderTauCluster.cxx:119
MatrixUtils.h
MuonValR4::TrackVisualizationTool::m_canvasPrefix
Gaudi::Property< std::string > m_canvasPrefix
Prefix of the individual canvas file names <MANDATORY>
Definition: TrackVisualizationTool.h:148
MuonValR4::TrackVisualizationTool::m_saveSinglePDFs
Gaudi::Property< bool > m_saveSinglePDFs
If set to true each canvas is saved into a dedicated pdf file.
Definition: TrackVisualizationTool.h:142
MuonValR4::clone
std::vector< std::unique_ptr< TObject > > clone(const std::vector< std::unique_ptr< TObject >> &cloneMe)
Definition: VisualizationHelpers.cxx:13
python.Include.marker
string marker
Definition: Include.py:21
MuonR4::MsTrackSeed::Location
Location
Enum defining whether the seed is made in the endcap / barrel.
Definition: MsTrackSeed.h:21
MuonValR4::IRootVisualizationService::ClientToken::canvasLimit
std::size_t canvasLimit
How many canvases are drawn at maximum in a job.
Definition: IRootVisualizationService.h:45
MuonValR4::TrackVisualizationTool::DisplayView::RZ
@ RZ
MuonValR4::drawSegmentLine
void drawSegmentLine(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewLine, const double standardLength=1.*Gaudi::Units::m)
Draw a segment line inside the obj file.
Definition: ObjVisualizationHelpers.cxx:46
MuonR4::detailedSegment
const Segment * detailedSegment(const xAOD::MuonSegment &seg)
Helper function to navigate from the xAOD::MuonSegment to the MuonR4::Segment.
Definition: TrackingHelpers.cxx:22
MuonValR4::TrackVisualizationTool::m_visualSvc
ServiceHandle< IRootVisualizationService > m_visualSvc
Service handle of the visualization service.
Definition: TrackVisualizationTool.h:131
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
MuonR4::MsTrackSeeder::expressOnCylinder
Amg::Vector2D expressOnCylinder(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, const Location loc, const SectorProjector proj) const
Expresses the segment on the cylinder surface.
Definition: MsTrackSeeder.cxx:151
MuonValR4::TrackVisualizationTool::DisplayView
DisplayView
Enumeration to toggle whether the seeds shall be painted in x-y or R-z view.
Definition: TrackVisualizationTool.h:95
perfmonmt-plotter.colors
dictionary colors
Definition: perfmonmt-plotter.py:21
MuonR4::MsTrackSeeder::projectedPhi
static double projectedPhi(const int sector, const SectorProjector proj)
Returns the projected phi for a given sector and projector.
Definition: MsTrackSeeder.cxx:93
lumiFormat.i
int i
Definition: lumiFormat.py:85
SG::get
const T * get(const ReadCondHandleKey< T > &key, const EventContext &ctx)
Convenience function to retrieve an object given a ReadCondHandleKey.
Definition: ReadCondHandle.h:283
DeMoAtlasDataLoss.canvas
dictionary canvas
Definition: DeMoAtlasDataLoss.py:187
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
MuonGMR4::SpectrometerSector::barrel
bool barrel() const
Returns whether the sector is placed in the barrel.
Definition: SpectrometerSector.cxx:65
MuonValR4::drawPropagation
void drawPropagation(const std::vector< Acts::detail::Step > &steps, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewLine)
Draws the recorded propagation steps as a polygon line.
Definition: ObjVisualizationHelpers.cxx:29
ObjVisualizationHelpers.h
MuonValR4::TrackVisualizationTool::PlotLegend::colors
LegendEntry_t colors
Definition: TrackVisualizationTool.h:89
add-xsec-uncert-quadrature-N.label
label
Definition: add-xsec-uncert-quadrature-N.py:104
MuonValR4::IRootVisualizationService::ICanvasObject
Interface to the container class to temporarily cache the ROOT objects to be drawn on a TCanvas and t...
Definition: IRootVisualizationService.h:61
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
ActsTrk::GeometryContext
Definition: GeometryContext.h:28
python.SystemOfUnits.km
float km
Definition: SystemOfUnits.py:110
MuonR4::Segment::msSector
const MuonGMR4::SpectrometerSector * msSector() const
Returns the associated MS sector.
Definition: MuonSpectrometer/MuonPhaseII/Event/MuonPatternEvent/MuonPatternEvent/Segment.h:39
MuonValR4::TrackVisualizationTool::m_objCounter
std::atomic< unsigned > m_objCounter
How many obj have been produced.
Definition: TrackVisualizationTool.h:152
DataVector
Derived DataVector<T>.
Definition: DataVector.h:795
MuonValR4::TrackVisualizationTool::viewVector
static Amg::Vector2D viewVector(const double phi, const Amg::Vector2D &posOnCylinder, const DisplayView view)
Transforms the projected vector into the actual view, if it's xy then an external phi is needed to pl...
Definition: TrackVisualizationTool.cxx:96
MuonValR4::TrackVisualizationTool::m_extrapolationTool
ToolHandle< ActsTrk::IExtrapolationTool > m_extrapolationTool
Track extrapolation tool.
Definition: TrackVisualizationTool.h:129
MuonValR4::TrackVisualizationTool::PlotLegend::legend
std::unique_ptr< TLegend > legend
Definition: TrackVisualizationTool.h:86
MuonValR4::TrackVisualizationTool::displaySeeds
virtual void displaySeeds(const EventContext &ctx, const MuonR4::MsTrackSeeder &seederObj, const xAOD::MuonSegmentContainer &segments, const MuonR4::MsTrackSeedContainer &seeds) const override final
Displays all segments on the representative cylinder in the R-Z & X-Y plane and draws the markers of ...
Definition: TrackVisualizationTool.cxx:123
MuonValR4
Lightweight algorithm to read xAOD MDT sim hits and (fast-digitised) drift circles from SG and fill a...
Definition: IPatternVisualizationTool.h:23
xAOD::MuonSegment_v1::position
Amg::Vector3D position() const
Returns the position as Amg::Vector.
Definition: MuonSegment_v1.cxx:15
TrackingHelpers.h
plotBeamSpotVxVal.legend
legend
Definition: plotBeamSpotVxVal.py:97
Muon::MuonStationIndex::LayerIndex::Extended
@ Extended
RunTileCalibRec.fileVersion
fileVersion
Definition: RunTileCalibRec.py:494
CoreClass.markers
list markers
Definition: CoreClass.py:17
Muon::MuonStationIndex::layerName
const std::string & layerName(LayerIndex index)
convert LayerIndex into a string
Definition: MuonStationIndex.cxx:153
MuonValR4::TrackVisualizationTool::m_canvasLimit
Gaudi::Property< unsigned > m_canvasLimit
Maximum canvases to draw.
Definition: TrackVisualizationTool.h:140
MuonR4::MsTrackSeeder
Helper class to group muon sgements that may belong to a muon trajectory.
Definition: MsTrackSeeder.h:29
MuonValR4::TrackVisualizationTool::m_geoCtxKey
SG::ReadHandleKey< ActsTrk::GeometryContext > m_geoCtxKey
Dependency on the geometry alignment.
Definition: TrackVisualizationTool.h:138
MuonValR4::drawSegmentMeasurements
void drawSegmentMeasurements(const ActsTrk::GeometryContext &gctx, const xAOD::MuonSegment &segment, Acts::ObjVisualization3D &visualHelper, const Acts::ViewConfig &viewConfig=Acts::s_viewSensitive)
Draw all uncalibrated measurements associated to the segment.
Definition: ObjVisualizationHelpers.cxx:81
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonValR4::IRootVisualizationService::ClientToken::saveSummaryPlot
bool saveSummaryPlot
Save a summary pdf.
Definition: IRootVisualizationService.h:49
THROW_EXCEPTION
#define THROW_EXCEPTION(MESSAGE)
Definition: throwExcept.h:10
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:16
MuonR4
This header ties the generic definitions in this package.
Definition: HoughEventData.h:16
MuonValR4::TrackVisualizationTool::PlotLegend::addColor
void addColor(const int color, const std::string &label)
Add new color legend entry.
Definition: TrackVisualizationTool.cxx:69
MuonSectorMapping.h
xAOD::MuonSegment_v1::sector
int sector() const
MuonValR4::TrackVisualizationTool::PlotLegend::addMarker
void addMarker(const int marker, const std::string &label)
Add new Marker style to the legend entry.
Definition: TrackVisualizationTool.cxx:77
Muon::MuonStationIndex::LayerIndex::Middle
@ Middle
egammaEnergyPositionAllSamples::e2
double e2(const xAOD::CaloCluster &cluster)
return the uncorrected cluster energy in 2nd sampling
MuonValR4::TrackVisualizationTool::Location
MuonR4::MsTrackSeed::Location Location
Enumeration to toggle whether the segment shall displayed on the barrel/endcap.
Definition: TrackVisualizationTool.h:93
MuonValR4::TrackVisualizationTool::displayTrackSeedObj
virtual void displayTrackSeedObj(const EventContext &ctx, const MuonR4::MsTrackSeed &seed, const OptBoundPars_t &parsToExt, const std::string &objName="") const override final
Visualizes the measurements of the segments on the track seed together with their predicted local lin...
Definition: TrackVisualizationTool.cxx:296
MuonR4::MsTrackSeedContainer
std::vector< MsTrackSeed > MsTrackSeedContainer
Definition: MsTrackSeed.h:63
MuonValR4::TrackVisualizationTool::PlotLegend::fillPrimitives
void fillPrimitives(Canvas_t &canvas)
Add the primitives of the legend to the Canvas.
Definition: TrackVisualizationTool.cxx:85
MuonValR4::TrackVisualizationTool::initialize
virtual StatusCode initialize() override final
Definition: TrackVisualizationTool.cxx:106
MuonValR4::TrackVisualizationTool::fillTruthSeedPoints
void fillTruthSeedPoints(const EventContext &ctx, const MuonR4::MsTrackSeeder &seeder, const DisplayView view, PlotLegend &legend, Canvas_t &canvas) const
Add the truth segments to the canvas.
Definition: TrackVisualizationTool.cxx:251
MuonR4::MsTrackSeeder::SectorProjector
SectorProjector
Enumeration to select the sector projection.
Definition: MsTrackSeeder.h:60
CxxUtils::sincos
Helper to simultaneously calculate sin and cos of the same angle.
Definition: sincos.h:39
MuonValR4::TrackVisualizationTool::m_subDir
Gaudi::Property< std::string > m_subDir
Define the subdirectory in which the plots shall be saved.
Definition: TrackVisualizationTool.h:146
python.SystemOfUnits.s
float s
Definition: SystemOfUnits.py:147
Muon::MuonSectorMapping
Definition: MuonSectorMapping.h:20
Muon::MuonStationIndex::toLayerIndex
LayerIndex toLayerIndex(ChIndex index)
convert ChIndex into LayerIndex
Muon::MuonStationIndex::ChIndex
ChIndex
enum to classify the different chamber layers in the muon spectrometer
Definition: MuonStationIndex.h:15
MuonValR4::IRootVisualizationService::ICanvasObject::AxisRanges::xHigh
@ xHigh
python.dummyaccess.exists
def exists(filename)
Definition: dummyaccess.py:9
python.PyAthena.obj
obj
Definition: PyAthena.py:132
FileHelpers.h
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:27
MuonValR4::TrackVisualizationTool::m_plotsDone
std::atomic< bool > m_plotsDone
Flag toggling whether all Canvases have been exhausted.
Definition: TrackVisualizationTool.h:150
TrackVisualizationTool.h
MuonValR4::ensureDirectory
void ensureDirectory(const std::string &path)
Ensures that the subdirectory in the path is created.
Definition: FileHelpers.cxx:17
xAOD::MuonSegment_v1::chamberIndex
::Muon::MuonStationIndex::ChIndex chamberIndex() const
Returns the chamber index.
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
python.SystemOfUnits.m
float m
Definition: SystemOfUnits.py:106
drawFromPickle.view
view
Definition: drawFromPickle.py:294