ATLAS Offline Software
MuonSpectrometer
MuonCnv
MuonNSWCommonDecode
MuonNSWCommonDecode
VMMChannel.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3
*/
4
#ifndef _MUON_VMM_CHANNEL_H_
5
#define _MUON_VMM_CHANNEL_H_
6
7
#include "
MuonNSWCommonDecode/NSWResourceId.h
"
8
#include "
MuonNSWCommonDecode/NSWElink.h
"
9
#include "
MuonNSWCommonDecode/NSWOfflineHelper.h
"
10
11
namespace
Muon
12
{
13
namespace
nsw
14
{
15
class
VMMChannel
16
{
17
private
:
18
uint32_t
m_vmm_word
;
19
20
uint16_t
m_roc_vmm
;
// vmm capture on the ROC
21
uint16_t
m_chan
;
// vmm channel
22
uint16_t
m_pdo
;
// adc amplitude
23
uint16_t
m_tdo
;
// peaking time
24
uint16_t
m_rel
;
// relative BCID
25
bool
m_neighbor
;
// flag
26
bool
m_parity
;
// parity
27
28
Muon::nsw::NSWElink
*
m_elink
;
29
30
// Offline helper converts online parameters into channel type and channel number
31
32
std::unique_ptr <Muon::nsw::helper::NSWOfflineHelper>
m_offlineHelper
;
33
34
private
:
35
uint8_t
calculate_word_parity
(
uint32_t
w
,
uint8_t
p
= 0);
36
37
public
:
38
VMMChannel
(
uint32_t
vmm_word
,
Muon::nsw::NSWElink
*
elink
);
39
virtual
~VMMChannel
() {};
40
41
bool
calculate_parity
();
42
43
// Hit word
44
45
uint32_t
vmm_word
() {
return
m_vmm_word
;};
46
47
// Decoded components of hit wors
48
49
bool
neighbor
() {
return
m_neighbor
;};
50
bool
parity
() {
return
m_parity
;};
51
uint16_t
pdo
() {
return
m_pdo
;};
52
uint16_t
tdo
() {
return
m_tdo
;};
53
uint16_t
rel_bcid
() {
return
m_rel
;};
54
uint16_t
vmm_channel
() {
return
m_chan
;};
55
uint16_t
roc_vmm
() {
return
m_roc_vmm
;};
56
uint16_t
vmm
() {
return
m_offlineHelper
->vmm();};
57
58
// Access to Detector logical ID
59
60
const
Muon::nsw::NSWElink
*
elink
()
const
{
return
m_elink
;};
61
62
// Direct access to offline parameters from elinkId
63
64
bool
is_large_station
() {
return
m_elink
->
elinkId
()->
is_large_station
();};
65
66
int8_t
station_eta
() {
return
m_elink
->
elinkId
()->
station_eta
();};
67
uint8_t
station_phi
() {
return
m_elink
->
elinkId
()->
station_phi
();};
68
uint8_t
multi_layer
() {
return
m_elink
->
elinkId
()->
multi_layer
();};
69
uint8_t
gas_gap
() {
return
m_elink
->
elinkId
()->
gas_gap
();};
70
71
// Offline parameters
72
73
uint8_t
channel_type
() {
return
m_offlineHelper
->channel_type ();};
74
uint16_t
channel_number
() {
return
m_offlineHelper
->channel_number ();};
75
};
76
}
77
}
78
79
inline
uint8_t
Muon::nsw::VMMChannel::calculate_word_parity
(
uint32_t
w
,
uint8_t
p
)
80
{
81
while
(
w
> 0)
82
{
83
p
^=
w
& 0x1;
84
w
=
w
>> 1;
85
}
86
87
return
p
;
88
}
89
90
inline
bool
Muon::nsw::VMMChannel::calculate_parity
()
91
{
92
uint8_t
p
= 0 ^ (m_neighbor ? 1 : 0);
93
uint16_t
bcid
= m_elink->bcId () + m_rel;
94
95
p
= this->calculate_word_parity (
bcid
,
p
);
96
p
= this->calculate_word_parity (m_pdo,
p
);
97
p
= this->calculate_word_parity (m_tdo,
p
);
98
99
return
(
p
> 0);
100
}
101
102
inline
Muon::nsw::VMMChannel::VMMChannel
(
uint32_t
vmm_word,
Muon::nsw::NSWElink
*elink)
103
: m_vmm_word (vmm_word), m_elink (elink)
104
{
105
m_tdo
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitTDC
,
Muon::nsw::bitPosVmmHitTDC
);
// should be 0 if noTDC is true
106
m_pdo
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitADC
,
Muon::nsw::bitPosVmmHitADC
);
107
m_chan
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitCHANNEL
,
Muon::nsw::bitPosVmmHitCHANNEL
);
108
m_roc_vmm
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitVMMID
,
Muon::nsw::bitPosVmmHitVMMID
);
109
m_rel
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitRELBCID
,
Muon::nsw::bitPosVmmHitRELBCID
);
110
m_neighbor
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitN
,
Muon::nsw::bitPosVmmHitN
);
111
m_parity
=
Muon::nsw::helper::get_bits
(
vmm_word
,
Muon::nsw::bitMaskVmmHitP
,
Muon::nsw::bitPosVmmHitP
);
112
113
// For sTGCs: convert the vmm capture on the ROC (vmm in the fragment) to the nominal vmm number on the FEB
114
uint16_t
vmm
{
m_roc_vmm
};
115
constexpr
uint16_t
vmmRemap[8] = { 2, 3, 0, 1, 5, 4, 6, 7 };
116
if
(
elink
->
elinkId
()->
detId
() == eformat::MUON_STGC_ENDCAP_A_SIDE ||
elink
->
elinkId
()->
detId
() == eformat::MUON_STGC_ENDCAP_C_SIDE)
117
vmm
= vmmRemap [
m_roc_vmm
];
118
119
m_offlineHelper
= std::make_unique <Muon::nsw::helper::NSWOfflineHelper> (
elink
->
elinkId
(),
vmm
,
m_chan
);
120
}
121
122
#endif // _MUON_VMM_CHANNEL_H_
123
Muon::nsw::bitPosVmmHitCHANNEL
@ bitPosVmmHitCHANNEL
Definition:
NSWDecodeBitmaps.h:98
Muon::nsw::NSWResourceId::multi_layer
uint8_t multi_layer() const
Definition:
NSWResourceId.h:120
Muon::nsw::VMMChannel::m_roc_vmm
uint16_t m_roc_vmm
Definition:
VMMChannel.h:20
xAOD::uint8_t
uint8_t
Definition:
Muon_v1.cxx:557
Muon::nsw::VMMChannel::rel_bcid
uint16_t rel_bcid()
Definition:
VMMChannel.h:53
Muon::nsw::VMMChannel::m_neighbor
bool m_neighbor
Definition:
VMMChannel.h:25
Muon::nsw::bitPosVmmHitTDC
@ bitPosVmmHitTDC
Definition:
NSWDecodeBitmaps.h:96
xAOD::uint32_t
setEventNumber uint32_t
Definition:
EventInfo_v1.cxx:127
Muon::nsw::VMMChannel::m_offlineHelper
std::unique_ptr< Muon::nsw::helper::NSWOfflineHelper > m_offlineHelper
Definition:
VMMChannel.h:32
Muon::nsw::VMMChannel::m_rel
uint16_t m_rel
Definition:
VMMChannel.h:24
NSWElink.h
Muon::nsw::VMMChannel::VMMChannel
VMMChannel(uint32_t vmm_word, Muon::nsw::NSWElink *elink)
Definition:
VMMChannel.h:102
Muon::nsw::NSWResourceId::detId
uint8_t detId() const
Definition:
NSWResourceId.h:71
Muon::nsw::VMMChannel::calculate_parity
bool calculate_parity()
Definition:
VMMChannel.h:90
Muon::nsw::VMMChannel::parity
bool parity()
Definition:
VMMChannel.h:50
Muon::nsw::NSWElink::elinkId
const Muon::nsw::NSWResourceId * elinkId() const
Definition:
NSWElink.h:38
Muon::nsw::VMMChannel::multi_layer
uint8_t multi_layer()
Definition:
VMMChannel.h:68
Muon::nsw::VMMChannel::station_phi
uint8_t station_phi()
Definition:
VMMChannel.h:67
Muon::nsw::NSWResourceId::station_eta
int8_t station_eta() const
Definition:
NSWResourceId.h:99
Muon::nsw::bitPosVmmHitP
@ bitPosVmmHitP
Definition:
NSWDecodeBitmaps.h:102
Muon
This class provides conversion from CSC RDO data to CSC Digits.
Definition:
TrackSystemController.h:45
Muon::nsw::VMMChannel::channel_type
uint8_t channel_type()
Definition:
VMMChannel.h:73
Muon::nsw::VMMChannel::m_tdo
uint16_t m_tdo
Definition:
VMMChannel.h:23
Muon::nsw::VMMChannel::vmm_word
uint32_t vmm_word()
Definition:
VMMChannel.h:45
Muon::nsw::VMMChannel::gas_gap
uint8_t gas_gap()
Definition:
VMMChannel.h:69
Muon::nsw::helper::get_bits
uint32_t get_bits(uint32_t word, uint32_t mask, uint8_t position)
Definition:
NSWDecodeHelper.h:168
Muon::nsw::VMMChannel::is_large_station
bool is_large_station()
Definition:
VMMChannel.h:64
Muon::nsw::bitPosVmmHitRELBCID
@ bitPosVmmHitRELBCID
Definition:
NSWDecodeBitmaps.h:100
Muon::nsw::VMMChannel::calculate_word_parity
uint8_t calculate_word_parity(uint32_t w, uint8_t p=0)
Definition:
VMMChannel.h:79
Muon::nsw::bitPosVmmHitVMMID
@ bitPosVmmHitVMMID
Definition:
NSWDecodeBitmaps.h:99
python.utils.AtlRunQueryDQUtils.p
p
Definition:
AtlRunQueryDQUtils.py:210
xAOD::uint16_t
setWord1 uint16_t
Definition:
eFexEMRoI_v1.cxx:88
Muon::nsw::VMMChannel::m_vmm_word
uint32_t m_vmm_word
Definition:
VMMChannel.h:18
Muon::nsw::VMMChannel::neighbor
bool neighbor()
Definition:
VMMChannel.h:49
Muon::nsw::VMMChannel::vmm
uint16_t vmm()
Definition:
VMMChannel.h:56
Muon::nsw::NSWResourceId::is_large_station
bool is_large_station() const
Definition:
NSWResourceId.h:93
Muon::nsw::NSWResourceId::station_phi
uint8_t station_phi() const
Definition:
NSWResourceId.h:114
Muon::nsw::VMMChannel::pdo
uint16_t pdo()
Definition:
VMMChannel.h:51
Muon::nsw::VMMChannel
Definition:
VMMChannel.h:16
Muon::nsw::bitMaskVmmHitVMMID
@ bitMaskVmmHitVMMID
Definition:
NSWDecodeBitmaps.h:65
Muon::nsw::VMMChannel::channel_number
uint16_t channel_number()
Definition:
VMMChannel.h:74
Muon::nsw::bitPosVmmHitADC
@ bitPosVmmHitADC
Definition:
NSWDecodeBitmaps.h:97
Muon::nsw::bitMaskVmmHitP
@ bitMaskVmmHitP
Definition:
NSWDecodeBitmaps.h:68
Muon::nsw::bitMaskVmmHitCHANNEL
@ bitMaskVmmHitCHANNEL
Definition:
NSWDecodeBitmaps.h:64
Muon::nsw::VMMChannel::m_chan
uint16_t m_chan
Definition:
VMMChannel.h:21
Muon::nsw::VMMChannel::elink
const Muon::nsw::NSWElink * elink() const
Definition:
VMMChannel.h:60
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition:
EventInfo_v1.cxx:133
Muon::nsw::VMMChannel::vmm_channel
uint16_t vmm_channel()
Definition:
VMMChannel.h:54
Muon::nsw::VMMChannel::m_parity
bool m_parity
Definition:
VMMChannel.h:26
NSWOfflineHelper.h
NSWResourceId.h
Muon::nsw::VMMChannel::~VMMChannel
virtual ~VMMChannel()
Definition:
VMMChannel.h:39
Muon::nsw::VMMChannel::roc_vmm
uint16_t roc_vmm()
Definition:
VMMChannel.h:55
Muon::nsw::NSWElink
Definition:
NSWElink.h:21
Muon::nsw::bitMaskVmmHitRELBCID
@ bitMaskVmmHitRELBCID
Definition:
NSWDecodeBitmaps.h:66
Muon::nsw::bitMaskVmmHitN
@ bitMaskVmmHitN
Definition:
NSWDecodeBitmaps.h:67
Muon::nsw::VMMChannel::m_elink
Muon::nsw::NSWElink * m_elink
Definition:
VMMChannel.h:28
python.IoTestsLib.w
def w
Definition:
IoTestsLib.py:200
Muon::nsw::VMMChannel::tdo
uint16_t tdo()
Definition:
VMMChannel.h:52
Muon::nsw::bitPosVmmHitN
@ bitPosVmmHitN
Definition:
NSWDecodeBitmaps.h:101
Muon::nsw::bitMaskVmmHitTDC
@ bitMaskVmmHitTDC
Definition:
NSWDecodeBitmaps.h:62
Muon::nsw::bitMaskVmmHitADC
@ bitMaskVmmHitADC
Definition:
NSWDecodeBitmaps.h:63
Muon::nsw::VMMChannel::station_eta
int8_t station_eta()
Definition:
VMMChannel.h:66
Muon::nsw::NSWResourceId::gas_gap
uint8_t gas_gap() const
Definition:
NSWResourceId.h:126
Muon::nsw::VMMChannel::m_pdo
uint16_t m_pdo
Definition:
VMMChannel.h:22
Generated on Thu Nov 7 2024 21:31:31 for ATLAS Offline Software by
1.8.18