Geometry
MuonNumbering
src
DTNumberingScheme.cc
Go to the documentation of this file.
1
11
#include "
Geometry/MuonNumbering/interface/DTNumberingScheme.h
"
12
#include "
DataFormats/MuonDetId/interface/DTWireId.h
"
13
#include "
Geometry/MuonNumbering/interface/MuonBaseNumber.h
"
14
#include "
Geometry/MuonNumbering/interface/MuonGeometryConstants.h
"
15
#include "
FWCore/MessageLogger/interface/MessageLogger.h
"
16
17
//#define EDM_ML_DEBUG
18
19
DTNumberingScheme::DTNumberingScheme
(
const
MuonGeometryConstants
& muonConstants) {
initMe
(muonConstants); }
20
21
void
DTNumberingScheme::initMe
(
const
MuonGeometryConstants
& muonConstants) {
22
int
theLevelPart = muonConstants.
getValue
(
"level"
);
23
theRegionLevel
= muonConstants.
getValue
(
"mb_region"
) / theLevelPart;
24
theWheelLevel
= muonConstants.
getValue
(
"mb_wheel"
) / theLevelPart;
25
theStationLevel
= muonConstants.
getValue
(
"mb_station"
) / theLevelPart;
26
theSuperLayerLevel
= muonConstants.
getValue
(
"mb_superlayer"
) / theLevelPart;
27
theLayerLevel
= muonConstants.
getValue
(
"mb_layer"
) / theLevelPart;
28
theWireLevel
= muonConstants.
getValue
(
"mb_wire"
) / theLevelPart;
29
#ifdef EDM_ML_DEBUG
30
edm::LogVerbatim
(
"MuonGeom"
) <<
"Initialize DTNumberingScheme\ntheRegionLevel "
<<
theRegionLevel
31
<<
"\ntheWheelLevel "
<<
theWheelLevel
<<
"\ntheStationLevel "
<<
theStationLevel
32
<<
"\ntheSuperLayerLevel "
<<
theSuperLayerLevel
<<
"\ntheLayerLevel "
<<
theLayerLevel
33
<<
"\ntheWireLevel "
<<
theWireLevel
;
34
#endif
35
}
36
37
int
DTNumberingScheme::baseNumberToUnitNumber
(
const
MuonBaseNumber
&
num
)
const
{
38
#ifdef EDM_ML_DEBUG
39
edm::LogVerbatim
(
"MuonGeom"
) <<
"DTNumbering "
<<
num
.getLevels();
40
for
(
int
level
= 1;
level
<=
num
.getLevels();
level
++) {
41
edm::LogVerbatim
(
"MuonGeom"
) <<
level
<<
" "
<<
num
.getSuperNo(
level
) <<
" "
<<
num
.getBaseNo(
level
);
42
}
43
#endif
44
if
(
num
.getLevels() <
theStationLevel
) {
// it was if (num.getLevels() != theWireLevel) {
45
edm::LogWarning
(
"MuonGeom"
) <<
"DTNumberingScheme::BNToUN: BaseNumber has "
<<
num
.getLevels() <<
" levels, need "
46
<<
theStationLevel
;
//it was theWireLevel;
47
return
0;
48
}
49
50
// // Meaningful ranges are enforced by DTWireId, (which
51
// // however allows for 0 in wire, layer, superlayer!!!)
52
//
53
// if ((wire_id < 1) || (wire_id > 100)) {
54
// std::cout << "DTNumberingScheme: ";
55
// std::cout << "wire id out of range: ";
56
// std::cout << wire_id <<std::endl;
57
// }
58
59
// if ((layer_id < 1) || (layer_id > 4)) {
60
// std::cout << "DTNumberingScheme: ";
61
// std::cout << "layer id out of range: ";
62
// std::cout << layer_id <<std::endl;
63
// }
64
65
// if ((superlayer_id < 1) || (superlayer_id > 3)) {
66
// std::cout << "DTNumberingScheme: ";
67
// std::cout << "super-layer id out of range: ";
68
// std::cout << superlayer_id <<std::endl;
69
// }
70
71
return
getDetId
(
num
);
72
}
73
74
int
DTNumberingScheme::getDetId
(
const
MuonBaseNumber
&
num
)
const
{
75
int
wire_id = 0;
76
int
layer_id = 0;
77
int
superlayer_id = 0;
78
int
sector_id = 0;
79
int
station_id = 0;
80
int
wheel_id = 0;
81
82
//decode significant barrel levels
83
decode
(
num
, wire_id, layer_id, superlayer_id, sector_id, station_id, wheel_id);
84
85
// These ranges are enforced by DTWireId
86
// if ((sector_id < 1) || (sector_id > 14)) {
87
// std::cout << "DTNumberingScheme: ";
88
// std::cout << "sector id out of range: ";
89
// std::cout << sector_id <<std::endl;
90
// }
91
92
// if ((station_id < 1) || (station_id > 4)) {
93
// std::cout << "DTNumberingScheme: ";
94
// std::cout << "station id out of range: ";
95
// std::cout << station_id <<std::endl;
96
// }
97
98
// if ((wheel_id < -2) || (wheel_id > 2)) {
99
// std::cout << "DTNumberingScheme: ";
100
// std::cout << "wheel id out of range: ";
101
// std::cout << wheel_id <<std::endl;
102
// }
103
104
DTWireId
id
(wheel_id, station_id, sector_id, superlayer_id, layer_id, wire_id);
105
106
#ifdef EDM_ML_DEBUG
107
edm::LogVerbatim
(
"MuonGeom"
) <<
"DTNumberingScheme: "
<<
id
;
108
#endif
109
110
return
id
.rawId();
111
}
112
113
void
DTNumberingScheme::decode
(
const
MuonBaseNumber
&
num
,
114
int
& wire_id,
115
int
& layer_id,
116
int
& superlayer_id,
117
int
& sector_id,
118
int
& station_id,
119
int
& wheel_id)
const
{
120
for
(
int
level
= 1;
level
<=
num
.getLevels();
level
++) {
121
//decode
122
if
(
level
==
theWheelLevel
) {
123
const
int
copyno =
num
.getBaseNo(
level
);
124
wheel_id = copyno - 2;
125
126
}
else
if
(
level
==
theStationLevel
) {
127
const
int
station_tag =
num
.getSuperNo(
level
);
128
const
int
copyno =
num
.getBaseNo(
level
);
129
station_id = station_tag;
130
sector_id = copyno + 1;
131
132
}
else
if
(
level
==
theSuperLayerLevel
) {
133
const
int
copyno =
num
.getBaseNo(
level
);
134
superlayer_id = copyno + 1;
135
136
}
else
if
(
level
==
theLayerLevel
) {
137
const
int
copyno =
num
.getBaseNo(
level
);
138
layer_id = copyno + 1;
139
140
}
else
if
(
level
==
theWireLevel
) {
141
const
int
copyno =
num
.getBaseNo(
level
);
142
wire_id = copyno + 1;
143
}
144
}
145
}
personalPlayback.level
level
Definition:
personalPlayback.py:22
MuonGeometryConstants
Definition:
MuonGeometryConstants.h:20
DTNumberingScheme::theLayerLevel
int theLayerLevel
Definition:
DTNumberingScheme.h:44
MessageLogger.h
DTNumberingScheme::initMe
void initMe(const MuonGeometryConstants &muonConstants)
Definition:
DTNumberingScheme.cc:21
MuonGeometryConstants.h
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition:
MessageLogger.h:122
DTNumberingScheme::theWireLevel
int theWireLevel
Definition:
DTNumberingScheme.h:45
DTNumberingScheme::theStationLevel
int theStationLevel
Definition:
DTNumberingScheme.h:42
DTNumberingScheme::getDetId
int getDetId(const MuonBaseNumber &num) const
Definition:
DTNumberingScheme.cc:74
DTWireId
Definition:
DTWireId.h:12
DTNumberingScheme::theRegionLevel
int theRegionLevel
Definition:
DTNumberingScheme.h:40
DTNumberingScheme::baseNumberToUnitNumber
int baseNumberToUnitNumber(const MuonBaseNumber &num) const override
Definition:
DTNumberingScheme.cc:37
MuonBaseNumber.h
MuonGeometryConstants::getValue
int getValue(const std::string &name) const
Definition:
MuonGeometryConstants.cc:8
DTNumberingScheme.h
EgammaValidation_cff.num
num
Definition:
EgammaValidation_cff.py:33
MuonBaseNumber
Definition:
MuonBaseNumber.h:21
DTWireId.h
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition:
MessageLogger.h:128
triggerObjects_cff.id
id
Definition:
triggerObjects_cff.py:29
DTNumberingScheme::theSuperLayerLevel
int theSuperLayerLevel
Definition:
DTNumberingScheme.h:43
DTNumberingScheme::decode
void decode(const MuonBaseNumber &num, int &wire_id, int &layer_id, int &superlayer_id, int §or_id, int &station_id, int &wheel_id) const
Definition:
DTNumberingScheme.cc:113
DTNumberingScheme::DTNumberingScheme
DTNumberingScheme(const MuonGeometryConstants &muonConstants)
Definition:
DTNumberingScheme.cc:19
DTNumberingScheme::theWheelLevel
int theWheelLevel
Definition:
DTNumberingScheme.h:41
Generated for CMSSW Reference Manual by
1.8.16