ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
graphics
VP1
VP1Systems
VP1RawDataSystems
src
VP1RawDataHandle_RPC_Digit.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
VP1RawDataSystems/VP1RawDataHandle_RPC_Digit.h
"
6
#include "
VP1RawDataSystems/VP1RawDataCommonData.h
"
7
#include "
VP1Utils/VP1DetInfo.h
"
8
#include "
VP1Utils/VP1LinAlgUtils.h
"
9
#include "
VP1Utils/HitsSoNodeManager.h
"
10
#include "
MuonDigitContainer/RpcDigit.h
"
11
#include "
MuonReadoutGeometry/MuonDetectorManager.h
"
12
#include "
MuonReadoutGeometry/RpcReadoutElement.h
"
13
#include "GaudiKernel/SystemOfUnits.h"
14
#include <Inventor/nodes/SoTransform.h>
15
16
VP1RawDataHandle_RPC_Digit::VP1RawDataHandle_RPC_Digit
(
17
VP1RawDataCollBase
* collection,
const
RpcDigit
* data)
18
:
VP1RawDataHandleBase
(collection),
m_data
(data)
19
{}
20
21
const
MuonGM::RpcReadoutElement
*
VP1RawDataHandle_RPC_Digit::element
()
const
22
{
23
const
auto
* helper =
VP1DetInfo::rpcIDHelper
();
24
const
auto
* manager =
VP1DetInfo::muonDetMgr
();
25
return
manager && helper && helper->valid(
m_data
->identify())
26
? manager->getRpcReadoutElement(
m_data
->identify()) :
nullptr
;
27
}
28
29
QStringList
VP1RawDataHandle_RPC_Digit::clicked
(
bool
verbose
)
const
30
{
31
const
Identifier
id
=
m_data
->identify();
32
const
auto
* helper =
VP1DetInfo::rpcIDHelper
();
33
const
bool
valid = helper && helper->valid(
id
);
34
QStringList lines;
35
lines <<
" ===> RPC Digit data"
;
36
lines <<
" Identifier: "
+ QString::fromStdString(
id
.getString());
37
lines <<
" Strip view: "
+ (valid ? QString(helper->measuresPhi(
id
) ?
"Phi"
:
"Eta"
)
38
: QString(
"unavailable"
));
39
lines <<
" Time [ns]: "
+ QString::number(
m_data
->time() / Gaudi::Units::ns);
40
lines <<
" Time over threshold [ns]: "
+ QString::number(
m_data
->ToT() / Gaudi::Units::ns)
41
+ (
m_data
->ToT() < 0 ?
" (not available)"
:
""
);
42
lines <<
" stripSide: "
+ QString(
m_data
->stripSide() ?
"true"
:
"false"
);
43
if
(
verbose
) {
44
if
(valid) {
45
lines <<
" Station name: "
+ QString::fromStdString(helper->stationNameString(
id
));
46
lines <<
" Station eta index: "
+ QString::number(helper->stationEta(
id
));
47
lines <<
" Station phi index: "
+ QString::number(helper->stationPhi(
id
));
48
lines <<
" Doublet R: "
+ QString::number(helper->doubletR(
id
));
49
lines <<
" Doublet Z: "
+ QString::number(helper->doubletZ(
id
));
50
lines <<
" Doublet phi: "
+ QString::number(helper->doubletPhi(
id
));
51
lines <<
" Gas gap: "
+ QString::number(helper->gasGap(
id
));
52
lines <<
" Strip: "
+ QString::number(helper->strip(
id
));
53
}
else
{
54
lines <<
" Decoded identifier unavailable"
;
55
}
56
const
auto
* elem =
element
();
57
if
(elem) {
58
const
Amg::Vector3D
position = elem->stripPos(
id
);
59
lines << QString(
" Global position [mm] (x, y, z): (%1, %2, %3)"
)
60
.arg(position.x() / Gaudi::Units::mm, 0,
'g'
, 10)
61
.arg(position.y() / Gaudi::Units::mm, 0,
'g'
, 10)
62
.arg(position.z() / Gaudi::Units::mm, 0,
'g'
, 10);
63
const
bool
phi
= helper->measuresPhi(
id
);
64
lines <<
" Strip length [mm]: "
+ QString::number(elem->StripLength(
phi
) / Gaudi::Units::mm);
65
lines <<
" Strip width [mm]: "
+ QString::number(elem->StripWidth(
phi
) / Gaudi::Units::mm);
66
}
else
{
67
lines <<
" Global position unavailable"
;
68
}
69
}
70
return
lines;
71
}
72
73
SoNode*
VP1RawDataHandle_RPC_Digit::buildShape
()
74
{
75
const
auto
* elem =
element
();
76
if
(!elem)
77
return
common
()->
nodeManager
()->
getShapeNode_Point
();
78
const
bool
phi
=
VP1DetInfo::rpcIDHelper
()->
measuresPhi
(
m_data
->identify());
79
// Strip footprint from geometry; depth is a display thickness in mm.
80
return
common
()->
nodeManager
()->
getShapeNode_Strip
(
81
elem->StripLength(
phi
), elem->StripWidth(
phi
), 0.1 * Gaudi::Units::mm);
82
}
83
84
SoTransform*
VP1RawDataHandle_RPC_Digit::buildTransform
()
85
{
86
const
auto
* elem =
element
();
87
if
(!elem)
88
return
new
SoTransform;
89
const
Identifier
id
=
m_data
->identify();
90
// The tracking frame has X across the strip and Y along it, matching VP1.
91
// Do not use localToGlobalTransf(), which follows AMDB conventions instead.
92
Amg::Transform3D
transform = elem->transform(
id
);
93
transform.translation() = elem->stripPos(
id
);
94
return
VP1LinAlgUtils::toSoTransform
(transform);
95
}
96
97
bool
VP1RawDataHandle_RPC_Digit::measuresPhi
()
const
98
{
99
const
auto
* helper =
VP1DetInfo::rpcIDHelper
();
100
return
helper && helper->valid(
m_data
->identify()) && helper->measuresPhi(
m_data
->identify());
101
}
102
103
bool
VP1RawDataHandle_RPC_Digit::oppositeSide
()
const
{
return
m_data
->stripSide(); }
104
double
VP1RawDataHandle_RPC_Digit::time
()
const
{
return
m_data
->time() / Gaudi::Units::ns; }
105
double
VP1RawDataHandle_RPC_Digit::timeOverThreshold
()
const
{
return
m_data
->ToT() / Gaudi::Units::ns; }
phi
Scalar phi() const
phi method
Definition
AmgMatrixBasePlugin.h:67
HitsSoNodeManager.h
MuonDetectorManager.h
RpcReadoutElement.h
RpcDigit.h
VP1DetInfo.h
VP1LinAlgUtils.h
VP1RawDataCommonData.h
VP1RawDataHandle_RPC_Digit.h
HitsSoNodeManager::getShapeNode_Point
SoNode * getShapeNode_Point()
Definition
HitsSoNodeManager.cxx:412
HitsSoNodeManager::getShapeNode_Strip
SoNode * getShapeNode_Strip(double length, double width=0, double depth=0)
Definition
HitsSoNodeManager.cxx:269
MuonGM::RpcReadoutElement
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
Definition
MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/RpcReadoutElement.h:55
RpcDigit
Definition
RpcDigit.h:16
RpcIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition
RpcIdHelper.cxx:1065
VP1DetInfo::rpcIDHelper
static const RpcIdHelper * rpcIDHelper()
Definition
VP1DetInfo.cxx:159
VP1DetInfo::muonDetMgr
static const MuonGM::MuonDetectorManager * muonDetMgr()
Definition
VP1DetInfo.cxx:148
VP1LinAlgUtils::toSoTransform
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
Definition
VP1LinAlgUtils.cxx:40
VP1RawDataCollBase
Definition
VP1RawDataCollBase.h:29
VP1RawDataCommonData::nodeManager
HitsSoNodeManager * nodeManager() const
Definition
VP1RawDataCommonData.h:42
VP1RawDataHandleBase::common
VP1RawDataCommonData * common() const
Definition
VP1RawDataHandleBase.h:41
VP1RawDataHandleBase::VP1RawDataHandleBase
VP1RawDataHandleBase(VP1RawDataCollBase *)
Definition
VP1RawDataHandleBase.cxx:50
VP1RawDataHandle_RPC_Digit::VP1RawDataHandle_RPC_Digit
VP1RawDataHandle_RPC_Digit(VP1RawDataCollBase *, const RpcDigit *)
Definition
VP1RawDataHandle_RPC_Digit.cxx:16
VP1RawDataHandle_RPC_Digit::clicked
QStringList clicked(bool verbose) const override
Definition
VP1RawDataHandle_RPC_Digit.cxx:29
VP1RawDataHandle_RPC_Digit::m_data
const RpcDigit * m_data
Definition
VP1RawDataHandle_RPC_Digit.h:25
VP1RawDataHandle_RPC_Digit::buildTransform
SoTransform * buildTransform() override
Definition
VP1RawDataHandle_RPC_Digit.cxx:84
VP1RawDataHandle_RPC_Digit::buildShape
SoNode * buildShape() override
Definition
VP1RawDataHandle_RPC_Digit.cxx:73
VP1RawDataHandle_RPC_Digit::measuresPhi
bool measuresPhi() const
Definition
VP1RawDataHandle_RPC_Digit.cxx:97
VP1RawDataHandle_RPC_Digit::oppositeSide
bool oppositeSide() const
Definition
VP1RawDataHandle_RPC_Digit.cxx:103
VP1RawDataHandle_RPC_Digit::time
double time() const
Definition
VP1RawDataHandle_RPC_Digit.cxx:104
VP1RawDataHandle_RPC_Digit::timeOverThreshold
double timeOverThreshold() const
Definition
VP1RawDataHandle_RPC_Digit.cxx:105
VP1RawDataHandle_RPC_Digit::element
const MuonGM::RpcReadoutElement * element() const
Definition
VP1RawDataHandle_RPC_Digit.cxx:21
verbose
bool verbose
Definition
hcg.cxx:75
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition
GeoPrimitives.h:46
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition
GeoPrimitives.h:48
Identifier
Definition
IdentifierFieldParser.cxx:14
Generated on
for ATLAS Offline Software by
1.17.0