CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
RPCGeomServ.cc
Go to the documentation of this file.
3 #include <sstream>
4 #include <iomanip>
5 
6 RPCGeomServ::RPCGeomServ::RPCGeomServ(const RPCDetId& id) :
7  _id(&id), _n(""), _sn(""), _t(-99), _z(true), _a(true)
8 {}
9 
10 
12 {}
13 
14 std::string
16 {
17  if (_n.size()<1){
18  std::string buf;
19 
20  if (_id->region()==0){
21  buf="W";
22  {
23  std::stringstream os;
24  os << std::setw(2)<<std::setfill('+')<<_id->ring()
25  <<std::setfill(' ')<<"_";
26  buf += os.str();
27  }
28 
29  {
30  std::stringstream os;
31  os <<"RB"<<_id->station();
32  if (_id->station()<=2) {
33  if (_id->layer()==1)
34  os<<"in";
35  else
36  os<<"out";
37  }
38  //os<<"_";
39  buf += os.str();
40  }
41 
42 
43  {
44  std::stringstream os;
45  // os <<"S"<<std::setw(2)<<std::setfill('0')
46  // <<_id->sector()<<std::setfill(' ');
47  if (_id->station()>2){
48  if (_id->sector()== 4 && _id->station()==4){
49  if ( _id->subsector()==1){
50  os<<"--";
51  }
52  else if ( _id->subsector()==2){
53  os <<"-";
54  }
55  else if ( _id->subsector()==3){
56  os <<"+";
57  }
58  else if ( _id->subsector()==4){
59  os <<"++";
60  }
61  }
62 
63  if(_id->station()==3){
64  if (_id->subsector()==1)
65  os <<"-";
66  else
67  os <<"+";
68  }else if(_id->station()==4 && _id->sector()!=9 && _id->sector()!=11 && _id->sector()!=4){
69  if (_id->subsector()==1)
70  os <<"-";
71  else
72  os <<"+";
73  }
74  }
75 
76  os<<"_";
77  os <<"S"<<std::setw(2)<<std::setfill('0')
78  <<_id->sector()<<std::setfill(' ');
79  os<<"_";
80  buf += os.str();
81  }
82  {
83  std::stringstream os;
84  if (_id->roll()==1)
85  os<<"Backward";
86  else if (_id->roll() == 3)
87  os<<"Forward";
88  else if (_id->roll() == 2)
89  os <<"Middle";
90  buf += os.str();
91  }
92  }
93  else {
94  buf="RE";
95 
96  {
97  std::stringstream os;
98  os << std::setw(2)<<std::setfill('+')<<_id->station()*_id->region()
99  <<std::setfill(' ')<<"_";
100  buf += os.str();
101  }
102 
103  {
104  std::stringstream os;
105  os <<"R"<<_id->ring();
106  os <<"_CH"<<std::setw(2)<<std::setfill('0')<<this->segment();
107  buf += os.str();
108  }
109 
110  {
111  buf += "_";
112  std::stringstream os;
113  if (_id->roll()==1)
114  os<<"A";
115  else if (_id->roll() == 2)
116  os<<"B";
117  else if (_id->roll() == 3)
118  os <<"C";
119  else if (_id->roll() == 4)
120  os <<"D";
121  buf += os.str();
122  }
123  }
124  _n=buf;
125  }
126  return _n;
127 }
128 
129 std::string
131 {
132  if (_sn.size()<1)
133  {
134  std::string buf;
135 
136  if (_id->region()==0){
137  std::stringstream os;
138  os <<"RB"<<_id->station();
139  if (_id->station()<=2){
140  if (_id->layer()==1){
141  os<<"in";
142  }else{
143  os<<"out";
144  }
145  }else{
146  if (_id->sector()== 4 && _id->station()==4){
147  if ( _id->subsector()==1){
148  os<<"--";
149  }
150  else if ( _id->subsector()==2){
151  os <<",-";
152  }
153  else if ( _id->subsector()==3){
154  os <<"+";
155  }
156  else if ( _id->subsector()==4){
157  os <<"++";
158  }
159  }else{
160  if (_id->subsector()==1)
161  os <<",-";
162  else
163  os <<"+";
164  }
165  }
166  if (_id->roll()==1)
167  os<<" B";
168  else if (_id->roll() == 3)
169  os<<" F";
170  else if (_id->roll() == 2)
171  os<<" M";
172  buf += os.str();
173  }
174  else {
175  std::stringstream os;
176  os <<"Ri"<<_id->ring()<<" Su"<<_id->subsector();
177  buf += os.str();
178  }
179  _sn=buf;
180  }
181  return _sn;
182 }
183 
184 //returns a vector with number of channels for each chip in each FEB
185 std::vector<int> RPCGeomServ::channelInChip(){
186 
187  std::vector<int> chipCh(4,8);//Endcap
188 
189  if(_id->region()==0){//Barrel
190  chipCh.clear();
191 
192  if (_id->station()<3 && _id->layer()==1){ // i.e. RB1in ||RB2in
193  chipCh.push_back(7);
194  chipCh.push_back(8);
195  }else if (_id->station() == 1 || _id->station() == 3){//i.e. RB1out || RB3
196  chipCh.push_back(7);
197  chipCh.push_back(7);
198  }else if (_id->station() == 2){// i.e. RB2out
199  chipCh.push_back(6);
200  chipCh.push_back(8);
201  }else if (_id->sector() == 4 || _id->sector()==10 ||(_id->sector() == 8 && _id->subsector()!=1) || (_id->sector() == 12 && _id->subsector()==1)){
202  chipCh.push_back(6);//i.e. Sector 4 & 10 RB4 and Sector 8 &12 RB4+
203  chipCh.push_back(6);
204  }else {
205  chipCh.push_back(8);
206  chipCh.push_back(8);
207  }
208  }
209 
210  return chipCh;
211 }
212 
213 
214 int
216 {
217  if (_t<-90){
218  if (_id->region() == 0 ){
219  if (this->inverted()) {
220  _t = 3*(_id->ring())+ (3-_id->roll())-1;
221  }else{
222  _t = 3*(_id->ring())+ _id->roll()-2;
223  }
224  }else{
225  _t = _id->region() * (3*(3-_id->ring()) + _id->roll() + 7);
226  }
227  }
228  return _t;
229 }
230 
231 int
233 {
234 
235  // Station1
236  if( _id->station() ==1) {
237 
238  // in
239  if(_id->layer() ==1) {
240 
241  if(_id->roll()==1)
242  _cnr = 1;
243  else
244  _cnr = 2;
245  }
246  //out
247  else
248  {
249  if(_id->roll()==1)
250  _cnr = 3;
251  else
252  _cnr = 4;
253 
254  }
255  }
256 
257 
258  //Station 2
259  if (_id->station()==2) {
260 
261  //in
262  if(_id->layer()==1) {
263 
264  if(_id->roll()==1)//backward
265  _cnr = 5;
266  if(_id->roll()==3)//forward
267  _cnr=6;
268  if(_id->roll()==2)//middle
269  _cnr=7;
270  }
271  //out
272  else {
273 
274  if(_id->roll()==2)
275 
276  _cnr=7;
277 
278  if(_id->roll()==1)
279  _cnr=8;
280  if(_id->roll()==3)
281  _cnr=9;
282 
283  }
284  }
285 
286  //RB3- RB3+
287  if(_id->station()==3)
288  {
289  if(_id->subsector()==1) {
290 
291  if(_id->roll()==1)
292  _cnr=10;
293  else
294  _cnr=11;
295  }
296  else {
297 
298  if(_id->roll()==1)
299  _cnr=12;
300  else
301  _cnr=13;
302  }
303 
304  }
305 
306  //RB4
307  if(_id->station()==4) {
308 
309  if (_id->sector()== 4) {
310 
311  if ( _id->subsector()==2){//RB4-
312 
313  if(_id->roll()==1)
314  _cnr=14;
315  else
316  _cnr=15;
317 
318  }
319 
320  if ( _id->subsector()==3){//RB4+
321 
322  if(_id->roll()==1)
323  _cnr=16;
324  else
325  _cnr=17;
326 
327  }
328 
329  if ( _id->subsector()==1) {//RB4--
330 
331  if(_id->roll()==1)
332  _cnr=18;
333  else
334  _cnr=19;
335  }
336 
337  if ( _id->subsector()==4){//RB4++
338 
339  if(_id->roll()==1)
340  _cnr=20;
341  else
342  _cnr=21;
343 
344  }
345 
346  }
347 
348  else
349 
350  {
351  if(_id->subsector()==1) {
352 
353  if(_id->roll()==1)
354  _cnr=14;
355  else
356  _cnr=15;
357  }
358  else {
359 
360  if(_id->roll()==1)
361  _cnr=16;
362  else
363  _cnr=17;
364  }
365  }
366  }
367 
368 
369  // _cnr=10;
370  return _cnr;
371 
372 }
373 
374 int
376  int seg=0;
377  int nsec=36;
378  int nsub=6;
379  if ( _id->ring()==1 && _id->station() > 1) {
380  nsub=3;
381  nsec=18;
382  }
383  seg =_id->subsector()+nsub*(_id->sector()-1);//+1;
384  // if(seg==nsec+1)seg=1;
385  return seg;
386 }
387 
388 bool
390 {
391  // return !(this->zpositive() && this->aclockwise());
392  return !(this->zpositive());
393 }
394 
395 
396 bool
398 {
399  if (_id->region()==0 && _t<-90 ){
400  if (_id->ring()<0){
401  _z=false;
402  }
403  if (_id->ring()==0){
404  if (_id->sector() == 1 || _id->sector() == 4 ||
405  _id->sector() == 5 || _id->sector() == 8 ||
406  _id->sector() == 9 || _id->sector() == 12){
407  _z=false;
408  }
409  }
410  }
411 
412  return _z;
413 }
414 
415 bool
417 {
418  if (_id->region()==0 && _t<-90 ){
419  if (_id->ring() > 0){
420  if (_id->layer()==2){
421  _a=false;
422  }
423  }else if(_id->ring() <0){
424  if (_id->layer()==1){
425  _a=false;
426  }
427  }else if(_id->ring() ==0) {
428  if ((_id->sector() == 1 || _id->sector() == 4 ||
429  _id->sector() == 5 || _id->sector() == 8 ||
430  _id->sector() == 9 || _id->sector() == 12) && _id->layer()==1)
431  _a=false;
432  else if ((_id->sector() == 2 || _id->sector() == 3 ||
433  _id->sector() == 6 || _id->sector() == 7 ||
434  _id->sector() == 10|| _id->sector() == 11) && _id->layer()==2)
435  _a=false;
436  }
437  }
438  return _a;
439 }
440 
441 
442 
443 
444 
445 RPCGeomServ::RPCGeomServ() : _id(0), _n(""), _sn(""), _t (-99), _z(false), _a(false)
446 {}
447 
448 
virtual int chambernr()
Definition: RPCGeomServ.cc:232
std::string _sn
Definition: RPCGeomServ.h:28
virtual int eta_partition()
Definition: RPCGeomServ.cc:215
std::vector< int > channelInChip()
Definition: RPCGeomServ.cc:185
std::string _n
Definition: RPCGeomServ.h:27
virtual std::string name()
Definition: RPCGeomServ.cc:15
int roll() const
Definition: RPCDetId.h:122
int ring() const
Definition: RPCDetId.h:74
virtual bool aclockwise()
Definition: RPCGeomServ.cc:416
virtual ~RPCGeomServ()
Definition: RPCGeomServ.cc:11
virtual std::string shortname()
Definition: RPCGeomServ.cc:130
int layer() const
Definition: RPCDetId.h:110
virtual int segment()
Definition: RPCGeomServ.cc:375
virtual bool zpositive()
Definition: RPCGeomServ.cc:397
int sector() const
Sector id: the group of chambers at same phi (and increasing r)
Definition: RPCDetId.h:104
int subsector() const
SubSector id : some sectors are divided along the phi direction in subsectors (from 1 to 4 in Barrel...
Definition: RPCDetId.h:116
virtual bool inverted()
Definition: RPCGeomServ.cc:389
const RPCDetId * _id
Definition: RPCGeomServ.h:26
int region() const
Region id: 0 for Barrel, +/-1 For +/- Endcap.
Definition: RPCDetId.h:65
int station() const
Definition: RPCDetId.h:98