CMS 3D CMS Logo

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