All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
SiStripGeom.cc
Go to the documentation of this file.
1 #include "SiStripGeom.h"
2 
3 // Include standard header files
4 #include "Colours.h"
5 #include "PhysicalConstants.h"
6 
7 #include <cstdlib>
8 #include <iomanip>
9 #include <algorithm>
10 
11 // Include CLHEP header files
12 #include <CLHEP/Vector/EulerAngles.h>
13 #include <CLHEP/Vector/Rotation.h>
14 
15 // Include Gear header files
16 //#include <gear/BField.h>
17 //#include <gear/VXDParameters.h>
18 //#include <gear/VXDLayerLayout.h>
19 #include <gearimpl/Vector3D.h>
20 
21 // Include Marlin
22 #include <marlin/Global.h>
23 #include <streamlog/streamlog.h>
24 
25 // Namespaces
26 //using namespace CLHEP;
27 //using namespace marlin;
28 
29 namespace sistrip
30 {
31  SiStripGeom::SiStripGeom(const std::string & subdetector)
32  :_gearType(subdetector)
33  {
34 
35  }
36 
38  {
39  // std::cout << "Deleting SiStripGeom" << std::endl;
40  }
41 
42 // GEOMETRY PROPERTIES
43 
44 //
45 // Encode cell ID
46 //
47 /*int SiStripGeom::encodeCellID(short int layerID, short int ladderID, short int sensorID) const
48 {
49  return layerID*LAYERCOD + ladderID*LADDERCOD + sensorID*SENSORCOD;
50 }*/
51 
52 //
53 // Decode cell ID
54 //
55 /*void SiStripGeom::decodeCellID(short int & layerID, short int & ladderID, short int & sensorID, int cellID) const
56 {
57  layerID = cellID / LAYERCOD;
58  ladderID = (cellID - layerID*LAYERCOD) / LADDERCOD;
59  sensorID = (cellID - layerID*LAYERCOD - ladderID*LADDERCOD) / SENSORCOD;
60 }*/
61 
62 //
63 // Encode strip ID
64 //
65 int SiStripGeom::encodeStripID(StripType type, int stripID) const
66 {
67  // TODO: Posible mejora del algoritmo
68  int encodedStripID = 0;
69 
70  // Strip in R-Phi
71  if (type == RPhi)
72  {
73  encodedStripID = (stripID + STRIPOFF)*STRIPCODRPHI;
74  }
75 
76  // Strip in Z
77  if (type == Z)
78  {
79  encodedStripID = (stripID + STRIPOFF)*STRIPCODZ;
80  }
81 
82  return encodedStripID;
83 }
84 
85 //
86 // Decode strip ID: FIXME TO BE FIXED---> Now the codification is done with the cellDec
87 //
88 /*std::pair<StripType,int> SiStripGeom::decodeStripID(const int & encodedStripID) const
89 {
90  StripType stype;
91  int stripID;
92 
93  // Strip in RPhi
94  if(encodedStripID/STRIPCODRPHI > 0.)
95  {
96  stripID = encodedStripID/STRIPCODRPHI - STRIPOFF;
97  stype = RPhi;
98 
99  }
100  // Strip in Z
101  else if(encodedStripID/STRIPCODZ > 0.)
102  {
103  stripID = encodedStripID/STRIPCODZ - STRIPOFF;
104  stype = Z;
105 
106  }
107  else
108  {
109  // Error
110  streamlog_out(ERROR) << "SiStripGeom::decodeStripID: "
111  << encodedStripID
112  << " - problem to identify if strips in Z or R-Phi!!!"
113  << std::endl;
114  exit(0);
115  }
116 
117  return std::pair<StripType,int>(stype,stripID);
118 }*/
119 
120 //
121 // Get layer real ID
122 //
123 int SiStripGeom::getLayerRealID(short int layerID) const
124 {
125  //TODO: Posible mejora del algoritmo: try-catch
126  // capturando un range exception --> mensaje error
127  if(_layerRealID.size()>(unsigned short int)layerID)
128  {
129  return _layerRealID[layerID];
130  }
131  else
132  {
133  streamlog_out(ERROR) << "SiStripGeom::getLayerRealID - layerID: " << layerID << " out of range!!!"
134  << std::endl;
135  exit(-1);
136  }
137 }
138 
139 //
140 // Transform real layer ID to C-type numbering 0 - n ...
141 //
142 short int SiStripGeom::getLayerIDCTypeNo(int realLayerID) const
143 {
144  for (unsigned int i=0; i<_layerRealID.size(); i++)
145  {
146  if(realLayerID == _layerRealID[i])
147  {
148  return i;
149  }
150  }
151  streamlog_out(ERROR) << "SiStripGeom::getLayerIDCTypeNo - layer: " <<
152  realLayerID << " not found in layer list!!!" << std::endl;
153  exit(-1);
154 }
155 
156 //
157 // Get layer type
158 //
159 short int SiStripGeom::getLayerType(short int layerID) const
160 {
161  //TODO: Posible mejora del algoritmo: try-catch
162  // capturando un range exception --> mensaje error
163  if (_layerType.size()>(unsigned short int)layerID)
164  {
165  return _layerType[layerID];
166  }
167  else
168  {
169  //FIXME---> _layerType is empty!!! FIXME
170  std::cout << " size " << _layerType.size() << std::endl;
171  streamlog_out(ERROR) << "SiStripGeom::getLayerType - layerID: "
172  << layerID << " out of range!!!" << std::endl;
173  exit(0);
174  }
175 }
176 
177 //
178 // Get layer radius
179 //
180 double SiStripGeom::getLayerRadius(short int layerID) const
181 {
182  //TODO: Posible mejora del algoritmo: try-catch
183  // capturando un range exception --> mensaje error
184  if (_layerRadius.size()>(unsigned short int)layerID)
185  {
186  return _layerRadius[layerID];
187  }
188  else
189  {
190  streamlog_out(ERROR) << "SiStripGeom::getLayerRadius - layerID: " << layerID << " out of range!!!"
191  << std::endl;
192  exit(-1);
193  }
194 }
195 
196 //
197 // Get semiangle layer (petals)
198 //
199 double SiStripGeom::getLayerHalfPhi(const int & layerID) const
200 {
201  //TODO: Posible mejora del algoritmo: try-catch
202  // capturando un range exception --> mensaje error
203  if (_layerHalfPhi.size()>(unsigned short int)layerID)
204  {
205  return _layerHalfPhi[layerID];
206  }
207  else
208  {
209  streamlog_out(ERROR) << "SiStripGeom::getLayerHalfPhi - layerID: " << layerID << " out of range!!!"
210  << std::endl;
211  exit(0);
212  }
213 }
214 
215 //
216 // Get layer phi zero angle
217 //
218 double SiStripGeom::getLayerPhi0(short int layerID) const
219 {
220  //TODO: Posible mejora del algoritmo: try-catch
221  // capturando un range exception --> mensaje error
222  if (_layerPhi0.size()>(unsigned short int)layerID)
223  {
224  return _layerPhi0[layerID];
225  }
226  else
227  {
228  streamlog_out(ERROR) << "SiStripGeom::getLayerPhi0 - layerID: " << layerID << " out of range!!!"
229  << std::endl;
230  exit(0);
231  }
232 }
233 
234 //
235 // Get number of ladders
236 //
237 short int SiStripGeom::getNLadders(short int layerID) const
238 {
239  //TODO: Posible mejora del algoritmo: try-catch
240  // capturando un range exception --> mensaje error
241  if (_numberOfLadders.size()>(unsigned short int)layerID)
242  {
243  return _numberOfLadders[layerID];
244  }
245  else
246  {
247  streamlog_out(ERROR) << "SiStripGeom::getNLadders - layerID: " << layerID << " out of range!!!"
248  << std::endl;
249  exit(0);
250  }
251 }
252 
253 //
254 // Get ladder thickness
255 //
256 double SiStripGeom::getLadderThick(short int layerID) const
257 {
258  //TODO: Posible mejora del algoritmo: try-catch
259  // capturando un range exception --> mensaje error
260  if (_ladderThick.size()>(unsigned short int)layerID)
261  {
262  return _ladderThick[layerID];
263  }
264  else
265  {
266  streamlog_out(ERROR) << "SiStripGeom::getLadderThick - layerID: " << layerID << " out of range!!!"
267  << std::endl;
268  exit(-1);
269  }
270 }
271 
272 // FIXME::TODO: queda pendiente desde aqui hacia abajo
273 
274 //
275 // Get ladder width
276 //
277 double SiStripGeom::getLadderWidth(short int layerID) const
278 {
279  if (_ladderWidth.size()>(unsigned short int)layerID) return _ladderWidth[layerID];
280  else {
281 
282  streamlog_out(ERROR) << "SiStripGeom::getLadderWidth - layerID: " << layerID << " out of range!!!"
283  << std::endl;
284  exit(0);
285  }
286 }
287 
288 //
289 // Get ladder length
290 //
291 double SiStripGeom::getLadderLength(short int layerID) const
292 {
293  if (_ladderLength.size()>(unsigned short int)layerID) return _ladderLength[layerID];
294  else {
295 
296  streamlog_out(ERROR) << "SiStripGeom::getLadderLength - layerID: " << layerID << " out of range!!!"
297  << std::endl;
298  exit(0);
299  }
300 }
301 
302 //
303 // Get ladder offset in Y
304 //
305 double SiStripGeom::getLadderOffsetY(short int layerID) const
306 {
307  if (_ladderOffsetY.size()>(unsigned short int)layerID) return _ladderOffsetY[layerID];
308  else {
309 
310  streamlog_out(ERROR) << "SiStripGeom::getLadderOffsetY - layerID: " << layerID << " out of range!!!"
311  << std::endl;
312  exit(0);
313  }
314 }
315 
316 //
317 // Get ladder offset in Z
318 //
319 double SiStripGeom::getLadderOffsetZ(short int layerID) const
320 {
321  if (_ladderOffsetZ.size()>(unsigned short int)layerID) return _ladderOffsetZ[layerID];
322  else {
323 
324  streamlog_out(ERROR) << "SiStripGeom::getLadderOffsetZ - layerID: " << layerID << " out of range!!!"
325  << std::endl;
326  exit(0);
327  }
328 }
329 
330 //
331 // Get ladder rotation - phi angle (in system of units defined in PhysicalConstants.h)
332 //
333 double SiStripGeom::getLadderPhi(short int layerID, short int ladderID) const
334 {
335  if (ladderID<getNLadders(layerID)) return (getLayerPhi0(layerID) + 2*pi/getNLadders(layerID)*ladderID);
336  else {
337 
338  streamlog_out(ERROR) << "SiStripGeom::getLadderPhi - ladderID: " << ladderID << " out of range!!!"
339  << std::endl;
340  exit(0);
341  }
342 }
343 
344 //
345 // Get ladder rotation - theta angle
346 //
347 /*double SiStripGeom::getLadderTheta(short int layerID) const
348 {
349  if (_layerTheta.size()>(unsigned short int)layerID) return _layerTheta[layerID];
350  else {
351 
352  streamlog_out(ERROR) << "SiStripGeom::getLadderTheta - layerID: " << layerID << " out of range!!!"
353  << std::endl;
354  exit(0);
355  }
356 }*/
357 
358 //
359 // Get number of sensors for given ladder
360 //
361 short int SiStripGeom::getNSensors(short int layerID) const
362 {
363  if (_numberOfSensors.size()>(unsigned short int)layerID) return _numberOfSensors[layerID];
364  else {
365 
366  streamlog_out(ERROR) << "SiStripGeom::getNSensors - layerID: " << layerID << " out of range!!!"
367  << std::endl;
368  exit(0);
369  }
370 }
371 
372 //
373 // Get number of strips (in each sensor)
374 //
375 /*int SiStripGeom::getSensorNStrips(const int & layerID, const int & sensorID) const
376 {
377  if(_sensorNStrips.size()>(unsigned short int)layerID)
378  {
379  return _sensorNStrips[layerID];
380  }
381  else
382  {
383  return 0;
384  }
385 }
386 
387 //
388 // Get number of RPhi strips (in each sensor)
389 //
390 int SiStripGeom::getSensorNStripsInRPhi(short int layerID) const
391 {
392  if(_sensorNStripsInRPhi.size()>(unsigned short int)layerID)
393  {
394  return _sensorNStripsInRPhi[layerID];
395  }
396  else
397  {
398  return 0;
399  }
400 }*/
401 
402 //
403 // Get sensor pitch in Z axis for barrel-type and forward-type sensors
404 //
405 /*double SiStripGeom::getSensorPitchInZ(short int layerID) const
406 {
407  if(_sensorPitchInZ.size()>(unsigned short int)layerID)
408  {
409  return _sensorPitchInZ[layerID];
410  }
411  else
412  {
413  return 0.;
414  }
415 }*/
416 
417 
418 //
419 // Get sensor thickness
420 //
421 double SiStripGeom::getSensorThick(short int layerID) const
422 {
423  if (_sensorThick.size()>(unsigned short int)layerID) return _sensorThick[layerID];
424  else {
425 
426  streamlog_out(ERROR) << "SiStripGeom::getSensorThick - layerID: " << layerID << " out of range!!!"
427  << std::endl;
428  exit(0);
429  }
430 }
431 
432 //
433 // Get sensor width
434 //
435 double SiStripGeom::getSensorWidthMax(short int layerID) const
436 {
437  if(_sensorWidth.size()>(unsigned short int)layerID)
438  {
439  return _sensorWidth[layerID];
440  }
441  else
442  {
443  streamlog_out(ERROR) << "SiStripGeom::getSensorWidth - layerID: "
444  << layerID << " out of range!!!" << std::endl;
445  exit(0);
446  }
447 }
448 
449 //
450 // Get sensor width2
451 //
452 double SiStripGeom::getSensorWidthMin(short int layerID) const
453 {
454  if(_sensorWidth2.size()>(unsigned short int)layerID)
455  {
456  return _sensorWidth2[layerID];
457  }
458  else
459  {
460  return getSensorWidthMax(layerID);
461  }
462 }
463 
464 //
465 // Get sensor length
466 //
467 double SiStripGeom::getSensorLength(short int layerID) const
468 {
469  if (_sensorLength.size()>(unsigned short int)layerID) return _sensorLength[layerID];
470  else {
471 
472  streamlog_out(ERROR) << "SiStripGeom::getSensorLength - layerID: " << layerID << " out of range!!!"
473  << std::endl;
474  exit(0);
475  }
476 }
477 
478 //
479 // Get gap size inbetween sensors
480 //
481 double SiStripGeom::getSensorGapInBetween(short int layerID) const
482 {
483  if (_sensorGapInBtw.size()>(unsigned short int)layerID) return _sensorGapInBtw[layerID];
484  else {
485 
486  streamlog_out(ERROR) << "SiStripGeom::getSensorGapInBetween - layerID: " << layerID << " out of range!!!"
487  << std::endl;
488  exit(0);
489  }
490 }
491 
492 //
493 // Get width of sensor rim in Z (passive part of silicon)
494 //
495 double SiStripGeom::getSensorRimWidthInZ(short int layerID) const
496 {
497  if (_sensorRimWidthInZ.size()>(unsigned short int)layerID) return _sensorRimWidthInZ[layerID];
498  else {
499 
500  streamlog_out(ERROR) << "SiStripGeom::getSensorRimWidthInZ - layerID: " << layerID << " out of range!!!"
501  << std::endl;
502  exit(0);
503  }
504 }
505 
506 //
507 // Get width of sensor rim in R-Phi (passive part of silicon)
508 //
509 double SiStripGeom::getSensorRimWidthInRPhi(short int layerID) const
510 {
511  if (_sensorRimWidthInRPhi.size()>(unsigned short int)layerID) return _sensorRimWidthInRPhi[layerID];
512  else {
513 
514  streamlog_out(ERROR) << "SiStripGeom::getSensorRimWidthInRPhi - layerID: " << layerID << " out of range!!!"
515  << std::endl;
516  exit(0);
517  }
518 }
519 
520 
521 // TRANSFORMATION METHODS - GLOBAL REF. SYSTEM
522 
523 //
524 // Get Z-position of given strip in local ref system (in system of units defined in PhysicalConstants.h);
525 // strips are considered to be perpendicular to beam axis for both barrel-type and forward-type sensors.
526 //SUBDETECTOR DEPENDENT
527 /*double SiStripGeom::getStripPosInZ(short int layerID, int stripID) const
528 {
529  // Get pitch
530  double sensPitch = getSensorPitchInZ(layerID);
531 
532  // Calculate position
533  double posZ = sensPitch*(stripID + 0.5);
534  // Error
535  if( (posZ<0.) || (posZ>getSensorLength(layerID)) )
536  {
537  streamlog_out(ERROR)
538  << "SiStripGeom::getStripPosInZ - position out of sensor!!!"
539  << std::endl;
540  exit(-1);
541  }
542 
543  // Return Z position of given strip in local ref. system
544  return posZ;
545 }
546 
547 //
548 // Get R-Phi position of given strip in local ref system (in system of units defined in PhysicalConstants.h);
549 // strips are considered to be parallel to beam axis for barrel-type sensors and at angle alpha for forward-type
550 // sensors (see getSensorPitchInRPhi method).
551 //
552 double SiStripGeom::getStripPosInRPhi(short int layerID, int stripID, double posZ) const
553 {
554  // Get pitch
555  double sensPitch = getSensorPitchInRPhi(layerID, posZ);
556 
557  // Calculate position
558  double posRPhi = sensPitch*(stripID + 0.5);
559 
560  // Error
561  if ( (posRPhi<0.) || (posRPhi>getSensorWidth(layerID)) )
562  {
563  streamlog_out(ERROR)
564  << "SiStripGeom::getStripPosInRPhi - position out of sensor!!!"
565  << std::endl;
566  exit(-1);
567  }
568 
569  // Return R-Phi position of given strip in local ref. system
570  return posRPhi;
571 }
572 
573 //
574 // Get strip ID (in Z-direction, i.e. measures the Rphi direction),
575 // point is given in local ref. system
576 //
577 //
578 int SiStripGeom::getStripIDInZ(short int layerID, double posZ ) const
579 {
580  // Get pitch
581  double sensPitch = getSensorPitchInZ(layerID);
582 
583  if (sensPitch == 0)
584  {
585  streamlog_out(ERROR) << "SiStripGeom::getStripIDInZ "
586  << "- division by zero (sensPitch is zero)!!!"
587  << std::endl;
588  exit(-1);
589  }
590 
591  // Get number of strips
592  int sensNStrips = getSensorNStripsInZ(layerID);
593 
594  int stripID;
595  // Calculate stripID
596  if (posZ <= 0.)
597  {
598  stripID = 0;
599  }
600  else
601  {
602  stripID = floor(posZ/sensPitch);
603  if (stripID >= sensNStrips)
604  {
605  stripID = sensNStrips - 1;
606  }
607  }
608 
609  // Error
610  if (stripID >= sensNStrips)
611  {
612  streamlog_out(ERROR) << "SiStripGeom::getStripIDInZ "
613  << "- stripID in Z greater than number of strips!!!"
614  << std::endl;
615  exit(-1);
616  }
617  // Return stripID
618  return stripID;
619 }
620 */
621 //
622 // Get strip ID (in R-Phi), point is given in local ref. system; strips are
623 // considered to be parallel to beam axis for barrel-type sensors and at angle
624 // alpha for forward-type sensors (see getSensorPitchInRPhi method).
625 //
626 // IMPLEMENTATION DEPENDENT OF THE SUBDETECTOR
627 
628 /*int SiStripGeom::getStripIDInRPhi(short int layerID, double posRPhi, double posZ ) const
629 {
630  // Get pitch
631  double sensPitch = getSensorPitchInRPhi(layerID, posZ);
632  if (sensPitch == 0)
633  {
634  streamlog_out(ERROR) << "SiStripGeom::getStripIDInRPhi - division by zero (sensPitch is zero)!!!"
635  << std::endl;
636  exit(-1);
637  }
638  // Get number of strips
639  int sensNStrips = getSensorNStripsInRPhi(layerID);
640 
641  int stripID;
642  // Calculate stripID
643  if (posRPhi <= 0.)
644  {
645  stripID = 0;
646  }
647  else
648  {
649  stripID = floor(posRPhi/sensPitch);
650  if (stripID >= sensNStrips)
651  {
652  stripID = sensNStrips - 1;
653  }
654  }
655  // Error
656  if (stripID >= sensNStrips)
657  {
658  streamlog_out(ERROR) << "SiStripGeom::getStripIDInRPhi - stripID in RPhi greater than number of strips!!!"
659  << std::endl;
660  exit(-1);
661  }
662  // Return stripID
663  return stripID;
664 }*/
665 
666 
667 // PRINT METHODS
668 
669 //
670 // Method printing general Gear parameters
671 //
672 /*
673 void SiStripGeom::printGearParams() const
674 {
675  streamlog_out(MESSAGE3) << std::endl
676  << " "
677  << DUNDERL
678  << DBLUE
679  << "Gear parameters:"
680  << ENDCOLOR
681  << " "
682  << std::endl << std::endl;
683 
684  // Gear type: BField
685  streamlog_out(MESSAGE3) << " B field [T]: "
686  << _magField/T
687  << std::endl << std::endl;
688 
689  // Gear type: VXD
690  if (_gearType == "VXD") {
691 
692  // Print general info
693  for (int i=0; i<_numberOfLayers; ++i){
694 
695  streamlog_out(MESSAGE2) << std::endl;
696  streamlog_out(MESSAGE2) << " Layer: " << _layerRealID[i] << std::endl;
697  if (_layerType[i]==pixel) {
698  streamlog_out(MESSAGE2) << " LayerType: " << "pixel" << std::endl;
699  }
700  else {
701  streamlog_out(MESSAGE2) << " LayerType: " << "strip" << std::endl;
702  }
703  streamlog_out(MESSAGE2) << " NumberOfLadders: " << _numberOfLadders[i] << std::endl;
704  streamlog_out(MESSAGE2) << " Radius[mm]: " << _layerRadius[i]/mm << std::endl;
705  streamlog_out(MESSAGE2) << " Width[mm]: " << _ladderWidth[i]/mm << std::endl;
706  streamlog_out(MESSAGE2) << " Length[mm]: " << _ladderLength[i]/mm << std::endl;
707  streamlog_out(MESSAGE2) << " Phi0: " << _layerPhi0[i] << std::endl;
708  streamlog_out(MESSAGE2) << " Theta: " << _layerTheta[i] << std::endl;
709  streamlog_out(MESSAGE2) << " OffsetY[mm]: " << _ladderOffsetY[i]/mm << std::endl;
710  // streamlog_out(MESSAGE2) << " OffsetZ[mm]: " << _ladderOffsetZ[i]/mm << std::endl; OUT//
711  }
712 
713  }
714  // Gear type: unknown - error
715  else {
716  streamlog_out(ERROR) << "Unknown gear type!"
717  << std::endl;
718 
719  exit(0);
720  }
721 }
722 */
723 //
724 // Method printing sensor Gear parameters (parameters: sensorID)
725 //
726 /*void SiStripGeom::printSensorParams(short int layerID) const
727 {
728 
729  // Gear type: VXD
730  if (_gearType == "VXD") {
731 
732  // Print sensor parameters
733  streamlog_out(MESSAGE2) << " Parameters: " << _sensorThick[layerID]/um << "um thick, "
734  << "with " << _sensorPitchInZ[layerID]/um << "um pitch "
735  << "and " << _sensorNStripsInZ[layerID] << " strips in Z"
736  << ", resp. " << _sensorPitchInRPhi[layerID]/um << "um pitch "
737  << "and " << _sensorNStripsInRPhi[layerID] << " strips in R-Phi."
738  << std::endl;
739  }
740  // Gear type: unknown - error
741  else {
742  streamlog_out(ERROR) << "Unknown gear type!"
743  << std::endl;
744 
745  exit(0);
746  }
747 }
748 */
749 } // Namespace;
750 
virtual double getSensorRimWidthInZ(short int layerID) const
Get width of sensor rim in Z (passive part of silicon)
Definition: SiStripGeom.cc:495
std::vector< double > _sensorWidth
Definition: SiStripGeom.h:309
virtual double getSensorThick(short int layerID) const
Get sensor thickness.
Definition: SiStripGeom.cc:421
virtual double getLadderPhi(short int layerID, short int ladderID) const
Get ladder rotation - phi angle.
Definition: SiStripGeom.cc:333
std::vector< double > _ladderOffsetZ
Definition: SiStripGeom.h:300
std::vector< double > _ladderThick
Definition: SiStripGeom.h:296
std::vector< int > _numberOfLadders
Definition: SiStripGeom.h:288
virtual short int getLayerType(short int layerID) const
Get layer type.
Definition: SiStripGeom.cc:159
virtual double getSensorLength(short int layerID) const
Get sensor length.
Definition: SiStripGeom.cc:467
std::vector< double > _layerHalfPhi
Definition: SiStripGeom.h:275
std::vector< int > _layerRealID
Definition: SiStripGeom.h:281
#define STRIPCODZ
Definition: SiStripGeom.h:34
virtual short int getNLadders(short int layerID) const
Get number of ladders.
Definition: SiStripGeom.cc:237
virtual short int getLayerIDCTypeNo(int realLayerID) const
Transform real layer ID to C-type numbering 0 - n ...
Definition: SiStripGeom.cc:142
std::vector< double > _ladderOffsetY
Definition: SiStripGeom.h:299
virtual double getLadderOffsetZ(short int layerID) const
Get ladder offset in Z.
Definition: SiStripGeom.cc:319
virtual double getSensorWidthMin(short int layerID) const
Get sensor width 2 (the narrower one for forward-type sensors)
Definition: SiStripGeom.cc:452
#define STRIPOFF
Definition: SiStripGeom.h:32
virtual double getLadderLength(short int layerID) const
Get ladder length.
Definition: SiStripGeom.cc:291
virtual double getLayerRadius(short int layerID) const
Get layer radius.
Definition: SiStripGeom.cc:180
std::vector< int > _layerType
Definition: SiStripGeom.h:282
std::vector< double > _sensorThick
Definition: SiStripGeom.h:308
#define STRIPCODRPHI
Definition: SiStripGeom.h:33
std::vector< double > _sensorRimWidthInZ
Definition: SiStripGeom.h:313
virtual ~SiStripGeom()
Destructor.
Definition: SiStripGeom.cc:37
std::vector< double > _ladderLength
Definition: SiStripGeom.h:298
virtual double getLadderThick(short int layerID) const
Get ladder thickness.
Definition: SiStripGeom.cc:256
virtual short int getNSensors(short int layerID) const
Get number of sensors for given ladder.
Definition: SiStripGeom.cc:361
std::vector< double > _sensorGapInBtw
Definition: SiStripGeom.h:312
virtual double getSensorRimWidthInRPhi(short int layerID) const
Get width of sensor rim in R-Phi (passive part of silicon)
Definition: SiStripGeom.cc:509
std::vector< int > _numberOfSensors
Definition: SiStripGeom.h:303
std::vector< double > _sensorWidth2
Definition: SiStripGeom.h:310
std::vector< double > _ladderWidth
Definition: SiStripGeom.h:297
virtual double getLadderOffsetY(short int layerID) const
Get ladder offset in Y.
Definition: SiStripGeom.cc:305
std::vector< double > _layerRadius
Definition: SiStripGeom.h:278
virtual double getLayerHalfPhi(const int &layerID) const
Get layer semiangle.
Definition: SiStripGeom.cc:199
virtual double getLayerPhi0(short int layerID) const
Get layer phi zero angle.
Definition: SiStripGeom.cc:218
std::vector< double > _sensorLength
Definition: SiStripGeom.h:311
std::vector< double > _sensorRimWidthInRPhi
Definition: SiStripGeom.h:314
virtual int encodeStripID(StripType type, int stripID) const
Encode stripID.
Definition: SiStripGeom.cc:65
virtual int getLayerRealID(short int layerID) const
Get layer real ID.
Definition: SiStripGeom.cc:123
virtual double getSensorGapInBetween(short int layerID) const
Get gap size inbetween sensors.
Definition: SiStripGeom.cc:481
SiStripGeom(const std::string &detector)
Constructor.
Definition: SiStripGeom.cc:31
static const double pi
virtual double getSensorWidthMax(short int layerID) const
Get sensor width (the wider one for forward-type sensors)
Definition: SiStripGeom.cc:435
std::vector< double > _layerPhi0
Definition: SiStripGeom.h:284
virtual double getLadderWidth(short int layerID) const
Get ladder width (the wider one for forward sensors)
Definition: SiStripGeom.cc:277