00001 // $Id: MdcSuperLayer.h,v 1.1.1.1 2005/07/18 05:51:56 codeman Exp $ // -*-c++-*- 00002 // header file for a class called "MdcSuperLayer" 00003 #ifndef __MDCSUPERLAYER_H__ 00004 #define __MDCSUPERLAYER_H__ 00005 00006 #include <iostream> 00007 #include "MdcGeom/MdcLayer.h" 00008 00009 class MdcSuperLayer { 00010 00011 public: 00012 // Constructor. 00013 MdcSuperLayer( int number); 00014 00015 // Destructor 00016 ~MdcSuperLayer(); 00017 00018 public: // Extractors 00019 00020 int index(void) const {return _slayer; } 00021 int whichView(void) const {return _view;} 00022 bool exist(void) const {return _exist;} 00023 double rEnd(void) const {return _radius;} 00024 double rad0(void) const { return 0.5 * (firstLayer()->rMid() + 00025 lastLayer()->rMid()); } 00026 double zEnd(void) const { return 0.5 * (firstLayer()->zEnd() + 00027 lastLayer()->zEnd()); } 00028 double stDip(void) const { return 0.5 * (firstLayer()->stDip() + 00029 lastLayer()->stDip()); } 00030 double delPhi(void) const {return _delphi;} 00031 double delPhiinv(void) const {return _delphiinv;} 00032 //---------------------------------------------------------- 00033 // here |index| is the index of array of pointers to layers 00034 // belonging to the superlayer, so this ramges from 0 to 3 00035 //---------------------------------------------------------- 00036 00037 const MdcLayer* firstLayer(void) const { return layers[0];} 00038 const MdcLayer* lastLayer(void) const { return layers[_nLayers - 1];} 00039 const MdcSuperLayer* next(void) const { return _next;} 00040 const MdcSuperLayer* prev(void) const { return _prev;} 00041 const MdcSuperLayer* nextInView(void) const { return _nextInView;} 00042 const MdcSuperLayer* prevInView(void) const { return _prevInView;} 00043 int slayNum(void) const { return _slayer;} 00044 int nLayers(void) const { return _nLayers;} 00045 const MdcLayer* layer(int i) const { /*yzhang SKIP assert ( i>=0 && i < nLayer() ) ;*/ 00046 // const MdcLayer* layer(int i) const { assert ( i>=0 && i < _nLayers ) ; 00047 return layers[i]; } 00048 void setNextInView(MdcSuperLayer* sl) {_nextInView = sl;} 00049 void setPrevInView(MdcSuperLayer* sl) {_prevInView = sl;} 00050 // One line printout 00051 void print(std::ostream& o=std::cout) const ; 00052 00053 00054 private: 00055 friend class MdcDetector; 00056 void addLayer(int index, const MdcLayer * lay); 00057 void updateInfo(const MdcSuperLayer* prev, const MdcSuperLayer* next); 00058 00059 // Data members 00060 bool _exist; 00061 double _radius; // mean rad. 00062 double _delphi; // diff in phi between z=0 and zend (=0 for axial 00063 double _delphiinv; 00064 int _view; // +1, 0, -1 = U, axial, V 00065 int _slayer; // superlayer number 00066 00067 const MdcLayer* layers[4]; 00068 const MdcSuperLayer* _next; 00069 const MdcSuperLayer* _prev; 00070 const MdcSuperLayer* _nextInView; 00071 const MdcSuperLayer* _prevInView; 00072 int _nLayers; // number of layers 00073 00074 }; 00075 00076 #endif /* MdcSuperLayer_CLASS */ 00077