CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DTNumberingScheme.cc
Go to the documentation of this file.
5 #include <iostream>
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  std::cout << "theRegionLevel " << theRegionLevel <<std::endl;
28  std::cout << "theWheelLevel " << theWheelLevel <<std::endl;
29  std::cout << "theStationLevel " << theStationLevel <<std::endl;
30  std::cout << "theSuperLayerLevel " << theSuperLayerLevel <<std::endl;
31  std::cout << "theLayerLevel " << theLayerLevel <<std::endl;
32  std::cout << "theWireLevel " << theWireLevel <<std::endl;
33  #endif
34 
35 }
36 
38 
39 #ifdef LOCAL_DEBUG
40  std::cout << "DTNumbering "<<num.getLevels()<<std::endl;
41  for (int level=1;level<=num.getLevels();level++) {
42  std::cout << level << " " << num.getSuperNo(level)
43  << " " << num.getBaseNo(level) << std::endl;
44  }
45 #endif
46  if (num.getLevels()!=theWireLevel) {
47  std::cout << "DTNS::BNToUN "
48  << "BaseNumber has " << num.getLevels() << " levels,"
49  << "need "<<theWireLevel<<std::endl;
50  return 0;
51  }
52 
53 
54 // // Meaningful ranges are enforced by DTWireId, (which
55 // // however allows for 0 in wire, layer, superlayer!!!)
56 //
57 // if ((wire_id < 1) || (wire_id > 100)) {
58 // std::cout << "DTNumberingScheme: ";
59 // std::cout << "wire id out of range: ";
60 // std::cout << wire_id <<std::endl;
61 // }
62 
63 // if ((layer_id < 1) || (layer_id > 4)) {
64 // std::cout << "DTNumberingScheme: ";
65 // std::cout << "layer id out of range: ";
66 // std::cout << layer_id <<std::endl;
67 // }
68 
69 // if ((superlayer_id < 1) || (superlayer_id > 3)) {
70 // std::cout << "DTNumberingScheme: ";
71 // std::cout << "super-layer id out of range: ";
72 // std::cout << superlayer_id <<std::endl;
73 // }
74 
75 
76  return getDetId(num);
77 }
78 
80 
81  int wire_id=0;
82  int layer_id=0;
83  int superlayer_id=0;
84  int sector_id=0;
85  int station_id=0;
86  int wheel_id=0;
87 
88  //decode significant barrel levels
89  decode(num,
90  wire_id,
91  layer_id,
92  superlayer_id,
93  sector_id,
94  station_id,
95  wheel_id);
96 
97 // These ranges are enforced by DTWireId
98 // if ((sector_id < 1) || (sector_id > 14)) {
99 // std::cout << "DTNumberingScheme: ";
100 // std::cout << "sector id out of range: ";
101 // std::cout << sector_id <<std::endl;
102 // }
103 
104 // if ((station_id < 1) || (station_id > 4)) {
105 // std::cout << "DTNumberingScheme: ";
106 // std::cout << "station id out of range: ";
107 // std::cout << station_id <<std::endl;
108 // }
109 
110 // if ((wheel_id < -2) || (wheel_id > 2)) {
111 // std::cout << "DTNumberingScheme: ";
112 // std::cout << "wheel id out of range: ";
113 // std::cout << wheel_id <<std::endl;
114 // }
115 
116  DTWireId id(wheel_id,station_id,sector_id,superlayer_id,layer_id,wire_id);
117 
118 #ifdef LOCAL_DEBUG
119  std::cout << "DTNumberingScheme: " << id << std::endl;
120 #endif
121 
122  return id.rawId();
123 }
124 
126  int& wire_id,
127  int& layer_id,
128  int& superlayer_id,
129  int& sector_id,
130  int& station_id,
131  int& wheel_id) const {
132  for (int level=1;level<=num.getLevels();level++) {
133 
134  //decode
135  if (level==theWheelLevel) {
136  const int copyno=num.getBaseNo(level);
137  wheel_id=copyno-2;
138 
139  } else if (level==theStationLevel) {
140  const int station_tag = num.getSuperNo(level);
141  const int copyno = num.getBaseNo(level);
142  station_id=station_tag;
143  sector_id=copyno+1;
144 
145  } else if (level==theSuperLayerLevel) {
146  const int copyno = num.getBaseNo(level);
147  superlayer_id = copyno + 1;
148 
149  } else if (level==theLayerLevel) {
150  const int copyno = num.getBaseNo(level);
151  layer_id=copyno+1;
152 
153  } else if (level==theWireLevel) {
154  const int copyno = num.getBaseNo(level);
155  wire_id = copyno+1;
156  }
157  }
158 }
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
type of data representation of DDCompactView
Definition: DDCompactView.h:77
DTNumberingScheme(const DDCompactView &cpv)
int getValue(const std::string &name) const
int getDetId(const MuonBaseNumber num) const
virtual int baseNumberToUnitNumber(const MuonBaseNumber num)
void initMe(const MuonDDDConstants &muonConstants)
long long int num
Definition: procUtils.cc:71
int getLevels() const
int getSuperNo(int level) const
tuple cout
Definition: gather_cfg.py:121
tuple level
Definition: testEve_cfg.py:34