|
ATLAS Offline Software
|
#include <PatternVisualizationTool.h>
|
| PatternVisualizationTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual StatusCode | initialize () override final |
|
virtual StatusCode | finalize () 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 TruthSegmentSet | fetchTruthSegs (const std::vector< const MuonR4::SpacePoint * > &hits) const override final |
| Fetches all truth segments where at least one measurement in the list was used to build them. More...
|
|
virtual TruthSegmentSet | fetchTruthSegs (const std::vector< const xAOD::UncalibratedMeasurement * > &hits) const override final |
|
virtual bool | isTruthMatched (const MuonR4::SpacePoint &hit) const override final |
| Returns whether the hit has been used in the truth-segment building. More...
|
|
virtual bool | isTruthMatched (const xAOD::UncalibratedMeasurement &hit) const override final |
|
template<class SpacePointType > |
const SpacePoint * | drawHit (const SpacePointType &hit, PrimitiveVec &primitives, std::array< double, 4 > &canvasDim, const unsigned int view, unsigned int fillStyle) const |
|
|
void | closeSummaryCanvas () const |
| Closes the summary canvas & closes the associated ROOT file. More...
|
|
std::unique_ptr< TCanvas > | makeCanvas (const EventContext &ctx, const std::array< double, 4 > &canvasDim, const int view) const |
| Create a new Canvas & draw the underlying frame. More...
|
|
void | saveCanvas (const EventContext &ctx, const Identifier &chambId, TCanvas &canvas, const std::string &extraLabel) const |
| Saves the Canvas as pdf & also into the ROOT file. More...
|
|
template<class SpacePointType > |
bool | drawHits (const MuonR4::SpacePointBucket &bucket, const std::vector< SpacePointType > &hitsToDraw, PrimitiveVec &primitivesToPush, std::array< double, 4 > &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. More...
|
|
template<class SpacePointType > |
const MuonR4::SpacePoint * | drawHit (const SpacePointType &hit, PrimitiveVec &primitives, std::array< double, 4 > &canvasDim, const unsigned int view, unsigned int fillStyle) const |
| Converts a Hit into a particular TBox/ TEllipse for drawing. More...
|
|
template<class SpacePointType > |
void | writeChi2 (const MuonR4::SegmentFit::Parameters &pars, const std::vector< SpacePointType > &hits, PrimitiveVec &primitivesToPush, const double legX=0.15, double startLegY=0.8, const double endLegY=0.3) const |
| Writes the chi2 of the hits onto the Canvas. More...
|
|
|
Gaudi::Property< unsigned int > | m_canvasLimit {this, "CanvasLimits", 5000} |
| Maximum canvases to draw. More...
|
|
Gaudi::Property< bool > | m_saveSinglePDFs {this, "saveSinglePDFs", false} |
| If set to true each canvas is saved into a dedicated pdf file. More...
|
|
Gaudi::Property< bool > | m_saveSummaryPDF {this, "saveSummaryPDF", false} |
| If set to true a summary Canvas is created. More...
|
|
Gaudi::Property< std::string > | m_allCanName {this, "AllCanvasName", "AllPatternPlots"} |
| Name of the summary canvas & the ROOT file to save the monitoring plots. More...
|
|
Gaudi::Property< std::string > | m_canvasPrefix {this, "CanvasPreFix", ""} |
| Prefix of the individual canvas file names <MANDATORY>
More...
|
|
Gaudi::Property< bool > | m_displayBucket {this, "displayBucket", true} |
| Display the surrounding hits from the bucket not part of the seed. More...
|
|
Gaudi::Property< double > | m_canvasExtraScale {this, "CanvasExtraScale" , 1.3} |
| Extra safety margin to zoom out from the Canvas. More...
|
|
Gaudi::Property< bool > | m_accumlIsEta {this, "AccumulatorsInEtaPlane", true} |
| Swtich toggling whether the accumulator view are in the eta or phi plane. More...
|
|
Gaudi::Property< bool > | m_doEtaBucketViews {this,"doEtaBucketViews", true} |
| Switch to visualize the eta view of the bucket event. More...
|
|
Gaudi::Property< bool > | m_doPhiBucketViews {this,"doPhiBucketViews", true} |
| Switch to visualize the phi view of the bucket event. More...
|
|
SG::ReadHandleKeyArray< xAOD::UncalibratedMeasurementContainer > | m_prepContainerKeys {this, "PrdContainer", {}} |
| Declare dependency on the prep data containers. More...
|
|
Gaudi::Property< std::set< std::string > > | m_truthSegLinks {this, "TruthSegDecors", {}} |
| List of truth segment links to fetch. More...
|
|
SG::ReadDecorHandleKeyArray< xAOD::UncalibratedMeasurementContainer > | m_truthLinkDecorKeys {this, "LinkDecorKeys", {}} |
| Declaration of the dependency on the decorations. More...
|
|
std::vector< SegLinkDecor_t > | m_truthLinkDecors {} |
|
Gaudi::Property< unsigned > | m_canvasWidth {this, "CanvasWidth", 800} |
|
Gaudi::Property< unsigned > | m_canvasHeight {this, "CanvasHeight", 600} |
|
Gaudi::Property< bool > | m_displayOnlyTruth {this, "displayTruthOnly", false} |
|
const MuonGMR4::MuonDetectorManager * | m_detMgr {nullptr} |
| pointer to the Detector manager More...
|
|
SG::ReadHandleKey< ActsGeometryContext > | m_geoCtxKey {this, "AlignmentKey", "ActsAlignment", "cond handle key"} |
| Geometry context key to retrieve the alignment. More...
|
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
| Service Handle to the IMuonIdHelperSvc. More...
|
|
std::unique_ptr< TCanvas > m_allCan | ATLAS_THREAD_SAFE {} |
|
std::unique_ptr< TFile > m_outFile | ATLAS_THREAD_SAFE {} |
|
std::atomic< unsigned int > m_canvCounter | ATLAS_THREAD_SAFE {0} |
| how many canvases have been visualized More...
|
|
Definition at line 29 of file PatternVisualizationTool.h.
◆ SegLink_t
◆ SegLinkDecor_t
◆ SegLinkVec_t
◆ TruthSegmentSet
◆ PatternVisualizationTool()
MuonValR4::PatternVisualizationTool::PatternVisualizationTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ closeSummaryCanvas()
void MuonValR4::PatternVisualizationTool::closeSummaryCanvas |
( |
| ) |
const |
|
private |
◆ drawHit() [1/2]
template<class SpacePointType >
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
-
hit | Reference to the hit to draw |
primitives | Vector into which the generated object is pushed |
canvasDim | Array encoding the canvas dimensions [0] -> low x; [1] -> high x, [2] -> low y, [3] -> high y |
view | Draw the hit either in the eta or phi view, |
fillStyle | Standard fill style for the box e.g. full. |
◆ drawHit() [2/2]
template<class SpacePointType >
const SpacePoint* MuonValR4::PatternVisualizationTool::drawHit |
( |
const SpacePointType & |
hit, |
|
|
PrimitiveVec & |
primitives, |
|
|
std::array< double, 4 > & |
canvasDim, |
|
|
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 450 of file PatternVisualizationTool.cxx.
454 static_assert(std::is_same_v<SpacePointType, SpacePoint> ||
455 std::is_same_v<SpacePointType, CalibratedSpacePoint>,
"Only usual & calibrated space points are supported");
462 canvasDim[Edges::yLow] =
std::min(canvasDim[Edges::yLow], hit.positionInChamber()[
view] - hit.driftRadius());
463 canvasDim[Edges::yHigh] =
std::max(canvasDim[Edges::yHigh], hit.positionInChamber()[
view] + hit.driftRadius());
464 canvasDim[Edges::zLow] =
std::min(canvasDim[Edges::zLow], hit.positionInChamber().z() - hit.driftRadius());
465 canvasDim[Edges::zHigh] =
std::max(canvasDim[Edges::zHigh], hit.positionInChamber().z() + hit.driftRadius());
470 constexpr
int invalidCalibFill = 3305;
471 if constexpr (std::is_same_v<SpacePointType, SpacePoint>) {
476 fillStyle = invalidCalibFill;
479 }
else if constexpr(std::is_same_v<SpacePointType, CalibratedSpacePoint>) {
480 underlyingSp = hit.spacePoint();
481 if (hit.fitState() == CalibratedSpacePoint::State::Valid) {
483 }
else if (hit.fitState() == CalibratedSpacePoint::State::FailedCalib) {
484 fillStyle = invalidCalibFill;
492 primitives.push_back(
drawDriftCircle(hit.positionInChamber(), dc->readoutElement()->innerTubeRadius(),
496 primitives.push_back(
drawDriftCircle(hit.positionInChamber(), hit.driftRadius(), circColor, fillStyle));
500 const int boxColor =
isTruthMatched(*meas) ? truthColor : kGreen +2;
501 const double boxWidth = 0.5*std::sqrt(12)*underlyingSp->uncertainty()[
view];
502 primitives.push_back(
drawBox(hit.positionInChamber(), boxWidth, 0.5*meas->readoutElement()->gasGapPitch(),
503 boxColor, fillStyle));
506 const auto* meas{
static_cast<const xAOD::TgcStrip*
>(underlyingSp->primaryMeasurement())};
507 const int boxColor =
isTruthMatched(*meas) ? truthColor : kCyan + 2;
508 const double boxWidth = 0.5*std::sqrt(12)*underlyingSp->uncertainty()[
view];
509 primitives.push_back(
drawBox(hit.positionInChamber(), boxWidth, 0.5*meas->readoutElement()->gasGapPitch(),
510 boxColor, fillStyle));
515 ATH_MSG_WARNING(
"Please implement proper drawings of the new small wheel.. "<<__FILE__<<
":"<<__LINE__);
◆ drawHits()
template<class SpacePointType >
bool MuonValR4::PatternVisualizationTool::drawHits |
( |
const MuonR4::SpacePointBucket & |
bucket, |
|
|
const std::vector< SpacePointType > & |
hitsToDraw, |
|
|
PrimitiveVec & |
primitivesToPush, |
|
|
std::array< double, 4 > & |
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
-
bucket | SpacePoint 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 |
hitsToDraw | Primary hit collection to draw which are drawn with fullFillStyle |
primitivesToPush | Output vector into which the painting objects are pushed_back |
canvasDim | Array encoding the canvas dimensions [0] -> low x; [1] -> high x, [2] -> low y, [3] -> high y |
view | Either the eta or the phi view? |
Definition at line 522 of file PatternVisualizationTool.cxx.
528 canvasDim[Edges::yLow] = canvasDim[Edges::zLow] = 100. *
Gaudi::Units::m;
529 canvasDim[Edges::yHigh] = canvasDim[Edges::zHigh] = -100. *
Gaudi::Units::m;
532 for (
const SpacePointType& hit : hitsToDraw) {
536 for (
const SpacePointBucket::value_type& hit : bucket) {
538 if (drawnPoints.count(hit.get())) {
545 double height = (canvasDim[Edges::zHigh] - canvasDim[Edges::zLow])*
m_canvasExtraScale;
549 const double midPointX = 0.5 * (canvasDim[Edges::yHigh] + canvasDim[Edges::yLow]);
550 const double midPointY = 0.5 * (canvasDim[Edges::zHigh] + canvasDim[Edges::zLow]);
551 canvasDim[Edges::yLow] = midPointX - 0.5 *
width;
552 canvasDim[Edges::zLow] = midPointY - 0.5 * height;
553 canvasDim[Edges::yHigh] = midPointX + 0.5 *
width;
554 canvasDim[Edges::zHigh] = midPointY + 0.5 * height;
555 return drawnPoints.size() - drawnPoints.count(
nullptr) > 1;
◆ fetchTruthSegs() [1/2]
Fetches all truth segments where at least one measurement in the list was used to build them.
- Parameters
-
hits | Vector of hits to search |
Definition at line 113 of file PatternVisualizationTool.cxx.
114 std::vector<const xAOD::UncalibratedMeasurement*> measurements{};
115 measurements.reserve(2*
hits.size());
117 measurements.push_back(hit->primaryMeasurement());
118 if(hit->secondaryMeasurement()) {
119 measurements.push_back(hit->secondaryMeasurement());
◆ fetchTruthSegs() [2/2]
◆ finalize()
StatusCode MuonValR4::PatternVisualizationTool::finalize |
( |
| ) |
|
|
finaloverridevirtual |
◆ initialize()
StatusCode MuonValR4::PatternVisualizationTool::initialize |
( |
| ) |
|
|
finaloverridevirtual |
Definition at line 61 of file PatternVisualizationTool.cxx.
65 return StatusCode::FAILURE;
71 m_outFile = std::make_unique<TFile>( (
m_allCanName +
".root").c_str(),
"RECREATE");
78 ATH_MSG_INFO(
"Hits linked to the following segment decorations are considered as truth");
81 if (decorName.empty()) {
83 return StatusCode::FAILURE;
96 return StatusCode::SUCCESS;
◆ isTruthMatched() [1/2]
Returns whether the hit has been used in the truth-segment building.
- Parameters
-
hit | Reference to the hit to check |
Definition at line 102 of file PatternVisualizationTool.cxx.
◆ isTruthMatched() [2/2]
◆ makeCanvas()
std::unique_ptr< TCanvas > MuonValR4::PatternVisualizationTool::makeCanvas |
( |
const EventContext & |
ctx, |
|
|
const std::array< double, 4 > & |
canvasDim, |
|
|
const int |
view |
|
) |
| const |
|
private |
Create a new Canvas & draw the underlying frame.
- Parameters
-
ctx | EventContext to generate a unique canvas name |
canvasDim | Array encoding the canvas dimensions [0] -> low x; [1] -> high x, [2] -> low y, [3] -> high y |
view | Is the canvas created in the context of an eta or phi visualization view The x-axis of the frame is adapted accordingly |
Definition at line 649 of file PatternVisualizationTool.cxx.
652 std::stringstream canvasName{};
653 canvasName<<
name()<<
"_"<<ctx.eventID().event_number()<<
"_"<<m_canvCounter;
654 ATH_MSG_VERBOSE(
"Create new canvas "<<canvasName.str()<<
" "<<canvasDim);
657 TH1F* frame =
canvas->DrawFrame(canvasDim[Edges::yLow],canvasDim[Edges::zLow], canvasDim[Edges::yHigh], canvasDim[Edges::zHigh]);
659 frame->GetYaxis()->SetTitle(
"z [mm]");
◆ saveCanvas()
void MuonValR4::PatternVisualizationTool::saveCanvas |
( |
const EventContext & |
ctx, |
|
|
const Identifier & |
chambId, |
|
|
TCanvas & |
canvas, |
|
|
const std::string & |
extraLabel |
|
) |
| const |
|
private |
Saves the Canvas as pdf & also into the ROOT file.
If the canvase limit is reached, then the summary files are closed as well.
- Parameters
-
ctx | EventContext to fetch the event number |
chambId | Identifier of the chamber from which the hits are stemming from |
primtives | List of objects to draw onto the canvas |
extraLabel | Externally passed extra label |
Definition at line 662 of file PatternVisualizationTool.cxx.
667 std::stringstream canvasName{};
668 canvasName<<
m_canvasPrefix.value()<<
"_"<<ctx.eventID().event_number()<<
"_"<<(m_canvCounter++)<<
"_"
673 if (!extraLabel.empty()) canvasName<<
"_"<<removeNonAlphaNum(extraLabel);
681 m_outFile->WriteObject(&
canvas, canvasName.str().c_str());
◆ 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 |
◆ 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
Enter the lock phase
Check again in case multiple threads are simultaneously in the lock phase
Definition at line 143 of file PatternVisualizationTool.cxx.
155 std::lock_guard guard{
s_mutex};
160 if (accumulator.getNonEmptyBins().empty()) {
165 auto accHisto = std::make_unique<TH2F>(
"AccumulatorHisto",
"histo",
166 accumulator.nBinsX(), axisRanges.xMin, axisRanges.xMax,
167 accumulator.nBinsY(), axisRanges.yMin, axisRanges.yMax);
169 accHisto->SetDirectory(
nullptr);
171 accHisto->GetYaxis()->SetTitle( std::string{
m_accumlIsEta ?
"y_{0}" :
"x_{0}"}.c_str());
173 std::vector<const SpacePoint*> spacePointsInAcc{};
174 for (
const std::size_t
bin : accumulator.getNonEmptyBins()) {
175 const auto [xBin, yBin] = accumulator.axisBins(
bin);
176 const SpacePointSet& hitsInBin{accumulator.hitIds(xBin, yBin)};
177 spacePointsInAcc.insert(spacePointsInAcc.end(),hitsInBin.begin(), hitsInBin.end());
178 accHisto->SetBinContent(xBin+1, yBin+1, accumulator.nHits(
bin));
189 auto truthMarker = std::make_unique<TMarker>(
tan, icept, kFullCrossX);
190 truthMarker->SetMarkerColor(truthColor);
191 truthMarker->SetMarkerSize(8);
192 primitives.push_back(std::move(truthMarker));
194 for (
const auto& maximum : maxima) {
195 auto maxMarker = std::make_unique<TMarker>(maximum.x, maximum.y, kFullTriangleUp);
196 maxMarker->SetMarkerColor(parLineColor);
197 maxMarker->SetMarkerSize(8);
198 primitives.push_back(std::move(maxMarker));
201 std::stringstream canvasName{};
202 canvasName<<
name()<<
"_"<<ctx.eventID().event_number()<<
"_"<<m_canvCounter;
203 auto canvas = std::make_unique<TCanvas>(canvasName.str().c_str(),
206 accHisto->Draw(
"COLZ");
207 for (
auto& prim : primitives) {
210 primitives.push_back(std::move(accHisto));
212 primitives.push_back(std::move(
canvas));
◆ visualizeBucket() [1/2]
◆ visualizeBucket() [2/2]
Check whether the canvas limit has been reached
Enter the lock phase
Check again in case multiple threads are simultaneously in the lock phase
reset the primitives
Definition at line 301 of file PatternVisualizationTool.cxx.
310 std::lock_guard guard{
s_mutex};
315 std::array<double, 4> canvasDim{};
320 const std::size_t parsedPrimSize{primitives.size()};
327 primitives.resize(parsedPrimSize);
328 if (!
drawHits(bucket, bucket, primitives, canvasDim,
view)) {
331 bool drawnTrueLabel{
false};
334 truthColor, kDotted,
view));
335 if (!drawnTrueLabel) {
337 drawnTrueLabel =
true;
341 std::stringstream legendLabel{};
342 legendLabel<<
"Event: "<<ctx.eventID().event_number()
343 <<
", chamber : "<<
m_idHelperSvc->toStringChamber(bucket.front()->identify())
345 if (!extraLabel.empty()) {
346 legendLabel<<
" ("<<extraLabel<<
")";
348 primitives.push_back(
drawLabel(legendLabel.str(), 0.2, 0.96));
350 for (PrimitivePtr& prim : primitives) {
353 saveCanvas(ctx, bucket.front()->identify(), *
can, extraLabel);
◆ visualizeSeed() [1/2]
◆ visualizeSeed() [2/2]
Check whether the canvas limit has been reached
Enter the lock phase
Check again in case multiple threads are simultaneously in the lock phase
reset the primitives
Definition at line 226 of file PatternVisualizationTool.cxx.
236 std::lock_guard guard{
s_mutex};
247 std::array<double, 4> canvasDim{};
248 const std::size_t parsedPrimSize{primitives.size()};
255 primitives.resize(parsedPrimSize);
263 truthColor, kDotted,
view));
265 primitives.push_back(
drawLine(
seed.parameters(), canvasDim[Edges::zLow], canvasDim[Edges::zHigh],
266 parLineColor, kDashed,
view));
270 std::stringstream legendLabel{};
273 legendLabel<<
"Event: "<<ctx.eventID().event_number()<<
", chamber : "<<
m_idHelperSvc->toStringChamber(
seed.getHitsInMax().front()->identify())
275 <<
", nDoF: "<<nDoF<<
", #"<<(
view ==
objViewEta ?
"eta" :
"phi")<<
"-view";;
277 if (!extraLabel.empty()) {
278 legendLabel<<
" ("<<extraLabel<<
")";
280 primitives.push_back(
drawLabel(legendLabel.str(), 0.1, 0.96));
284 for (PrimitivePtr& prim : primitives) {
◆ visualizeSegment() [1/2]
void MuonValR4::PatternVisualizationTool::visualizeSegment |
( |
const EventContext & |
ctx, |
|
|
const MuonR4::Segment & |
segment, |
|
|
const std::string & |
extraLabel |
|
) |
| const |
|
finaloverridevirtual |
◆ visualizeSegment() [2/2]
Check whether the canvas limit has been reached
Enter the lock phase
Check again in case multiple threads are simultaneously in the lock phase
reset the primitives
Definition at line 369 of file PatternVisualizationTool.cxx.
378 std::lock_guard guard{
s_mutex};
400 std::array<double, 4> canvasDim{};
401 const std::size_t parsedPrimSize{primitives.size()};
408 primitives.resize(parsedPrimSize);
411 primitives, canvasDim,
view)) {
416 truthColor, kDotted,
view));
420 primitives.push_back(
drawLine(segPars, canvasDim[Edges::zLow], canvasDim[Edges::zHigh],
421 parLineColor, kDashed,
view));
424 std::stringstream legendLabel{};
426 legendLabel<<
"Event: "<<ctx.eventID().event_number() <<
", chamber : "<<
m_idHelperSvc->toStringChamber(canvasId)
430 if (!extraLabel.empty()) {
431 legendLabel<<
" ("<<extraLabel<<
")";
433 primitives.push_back(
drawLabel(legendLabel.str(), 0.1, 0.96));
437 for (PrimitivePtr& prim : primitives) {
◆ writeChi2()
template<class SpacePointType >
Writes the chi2 of the hits onto the Canvas.
- Parameters
-
pars | Parameter for which the chi2 is evaluated, |
hits | Vector of hits to consider |
primitivesToPush | Output vector into which the TLabels are pushed for later drawing |
legX | x-position of the list |
statLegY | y-position of the first entry. The next one is 0.05 apart |
endLeg | y-position of the last shown entry. The routine aborts if there're more hits in the event. |
Definition at line 558 of file PatternVisualizationTool.cxx.
565 for (
const SpacePointType& hit :
hits) {
568 if constexpr( std::is_same_v<SpacePointType, Segment::MeasType>) {
569 underlyingSp = hit->spacePoint();
571 std::nullopt, *hit, msgStream());
578 std::stringstream legendstream{};
579 switch(hit->type()) {
583 legendstream<<
"ML: "<<idHelper.multilayer(hitId);
584 legendstream<<
", TL: "<<idHelper.tubeLayer(hitId);
585 legendstream<<
", T: "<<idHelper.tube(hitId);
586 legendstream<<
", "<<(
driftSign == -1 ?
"L" :
"R");
590 legendstream<<
"DR: "<<idHelper.doubletR(hitId);
591 legendstream<<
" DZ: "<<idHelper.doubletZ(hitId);
592 legendstream<<
", GAP: "<<idHelper.gasGap(hitId);
593 legendstream<<
", #eta/#phi: "<<(hit->measuresEta() ?
"si" :
"nay")
594 <<
"/"<<(hit->measuresPhi() ?
"si" :
"nay");
598 legendstream<<
"ST: "<<
m_idHelperSvc->stationNameString(hitId);
599 legendstream<<
", GAP: "<<idHelper.gasGap(hitId);
600 legendstream<<
", #eta/#phi: "<<(hit->measuresEta() ?
"si" :
"nay")
601 <<
"/"<<(hit->measuresPhi() ?
"si" :
"nay");
605 legendstream<<
"ML: "<<idHelper.multilayer(hitId);
606 legendstream<<
", GAP: "<<idHelper.gasGap(hitId);
607 legendstream<<
", stereo: "<<(idHelper.isStereo(hitId)?
"si" :
"nay");
611 legendstream<<
"ML: "<<idHelper.multilayer(hitId);
612 legendstream<<
", GAP: "<<idHelper.gasGap(hitId);
613 switch (idHelper.channelType(hitId)) {
614 case sTgcIdHelper::sTgcChannelTypes::Strip:
615 legendstream<<
", strip";
617 case sTgcIdHelper::sTgcChannelTypes::Wire:
618 legendstream<<
", wire";
620 case sTgcIdHelper::sTgcChannelTypes::Pad:
621 legendstream<<
", pad";
632 primitives.push_back(
drawLabel(legendstream.str(), legX, startLegY, 14));
634 if (startLegY<= endLegY) {
◆ ATLAS_THREAD_SAFE [1/3]
std::unique_ptr<TCanvas> m_allCan MuonValR4::PatternVisualizationTool::ATLAS_THREAD_SAFE {} |
|
mutableprivate |
◆ ATLAS_THREAD_SAFE [2/3]
std::unique_ptr<TFile> m_outFile MuonValR4::PatternVisualizationTool::ATLAS_THREAD_SAFE {} |
|
mutableprivate |
◆ ATLAS_THREAD_SAFE [3/3]
std::atomic<unsigned int> m_canvCounter MuonValR4::PatternVisualizationTool::ATLAS_THREAD_SAFE {0} |
|
mutableprivate |
◆ 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 178 of file PatternVisualizationTool.h.
◆ m_allCanName
Gaudi::Property<std::string> MuonValR4::PatternVisualizationTool::m_allCanName {this, "AllCanvasName", "AllPatternPlots"} |
|
private |
◆ m_canvasExtraScale
Gaudi::Property<double> MuonValR4::PatternVisualizationTool::m_canvasExtraScale {this, "CanvasExtraScale" , 1.3} |
|
private |
◆ m_canvasHeight
Gaudi::Property<unsigned> MuonValR4::PatternVisualizationTool::m_canvasHeight {this, "CanvasHeight", 600} |
|
private |
◆ m_canvasLimit
Gaudi::Property<unsigned int> MuonValR4::PatternVisualizationTool::m_canvasLimit {this, "CanvasLimits", 5000} |
|
private |
◆ m_canvasPrefix
Gaudi::Property<std::string> MuonValR4::PatternVisualizationTool::m_canvasPrefix {this, "CanvasPreFix", ""} |
|
private |
◆ m_canvasWidth
Gaudi::Property<unsigned> MuonValR4::PatternVisualizationTool::m_canvasWidth {this, "CanvasWidth", 800} |
|
private |
◆ m_detMgr
◆ m_displayBucket
Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_displayBucket {this, "displayBucket", true} |
|
private |
◆ m_displayOnlyTruth
Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_displayOnlyTruth {this, "displayTruthOnly", false} |
|
private |
◆ m_doEtaBucketViews
Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_doEtaBucketViews {this,"doEtaBucketViews", true} |
|
private |
◆ m_doPhiBucketViews
Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_doPhiBucketViews {this,"doPhiBucketViews", true} |
|
private |
◆ m_geoCtxKey
◆ m_idHelperSvc
◆ m_prepContainerKeys
◆ m_saveSinglePDFs
Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_saveSinglePDFs {this, "saveSinglePDFs", false} |
|
private |
◆ m_saveSummaryPDF
Gaudi::Property<bool> MuonValR4::PatternVisualizationTool::m_saveSummaryPDF {this, "saveSummaryPDF", false} |
|
private |
If set to true a summary Canvas is created.
ATTENTION: There can be only one summary PDF in an athena job
Definition at line 167 of file PatternVisualizationTool.h.
◆ m_truthLinkDecorKeys
◆ m_truthLinkDecors
std::vector<SegLinkDecor_t> MuonValR4::PatternVisualizationTool::m_truthLinkDecors {} |
|
private |
◆ m_truthSegLinks
Gaudi::Property<std::set<std::string> > MuonValR4::PatternVisualizationTool::m_truthSegLinks {this, "TruthSegDecors", {}} |
|
private |
◆ s_mutex
std::mutex MuonValR4::PatternVisualizationTool::s_mutex {} |
|
staticprivate |
The documentation for this class was generated from the following files:
def retrieve(aClass, aKey=None)
constexpr int fullFilling
MuonValR4::IPatternVisualizationTool::PrimitiveVec PrimitiveVec
RpcMeasurement_v1: Class storing the geneic.
AmgVector(toInt(ParamDefs::nPars)) Parameters
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.
Class describing a MuonSegment.
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)
const xAOD::UncalibratedMeasurement * secondaryMeasurement() const
HitVec stripSmartPtr(const SpacePointBucket &bucket)
#define ATH_MSG_VERBOSE(x)
double chiSqTerm(const Amg::Vector3D &posInChamber, const Amg::Vector3D &dirInChamber, const SpacePoint &measurement, MsgStream &msg)
Calculates the chi2 contribuation to a linear segment line from an uncalibrated measurement.
std::pair< Amg::Vector3D, Amg::Vector3D > makeLine(const Parameters &pars)
Returns the parsed parameters into an Eigen line parametrization.
std::unique_ptr< TLatex > drawLabel(const std::string &text, const double xPos, const double yPos, const unsigned int fontSize=18)
Create a TLatex label,.
@ u
Enums for curvilinear frames.
@ MdtStatusDriftTime
The tube produced a vaild measurement.
const xAOD::UncalibratedMeasurement * primaryMeasurement() const
double houghTanPhi(const Amg::Vector3D &v)
: Returns the hough tanPhi [x] / [z]
int driftSign(const Amg::Vector3D &posInChamber, const Amg::Vector3D &dirInChamber, const SpacePoint &uncalibHit, MsgStream &msg)
Calculates whether a segement line travereses the tube measurement on the left (-1) or right (1) side...
Eigen::Affine3d Transform3D
double chi2(TH1 *h0, TH1 *h1)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
The muon space point is the combination of two uncalibrated measurements one of them measures the eta...
ElementLink implementation for ROOT usage.
constexpr int objViewEta
ObjectView.
constexpr int toInt(const ParamDefs p)
Eigen::Matrix< double, 3, 1 > Vector3D
#define ATH_MSG_WARNING(x)
std::vector< const SpacePoint * > SpacePointSet
vector of space points
constexpr int hollowFilling
Filling codes for hollow / fullFilling / hatched filling.
std::string makeLabel(const Parameters &pars)
Parameters localSegmentPars(const xAOD::MuonSegment &seg)
Returns the localSegPars decoration from a xAODMuon::Segment.
std::unique_ptr< TEllipse > drawDriftCircle(const Amg::Vector3D ¢er, const double radius, const int color=kViolet, const int fillStyle=hollowFilling)
Create a TEllipse for drawing a drift circle.
def TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)
https://gitlab.cern.ch/atlas/athena/-/blob/master/MuonSpectrometer/MuonReconstruction/MuonRecEvent/Mu...
double houghTanTheta(const Amg::Vector3D &v)
Returns the hough tanTheta [y] / [z].
constexpr int hatchedFilling
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)