00001
00002
00003 #ifndef MDCLAYER_H
00004 #define MDCLAYER_H
00005
00006 #include <CLHEP/Geometry/Point3D.h>
00007 #include <iostream>
00008 #include <vector>
00009 #include "MdcGeom/MdcSWire.h"
00010 #include "MdcGeom/Constants.h"
00011
00012 class MdcDetector;
00013 class Trajectory;
00014
00015 class MdcLayer {
00016
00017 public:
00018
00019 MdcLayer(int lay, int nwir, MdcSWire** wires, const MdcDetector &theDet);
00020
00021
00022 ~MdcLayer(){};
00023
00024 void print( std::ostream& o ) const;
00025
00026 public:
00027 bool exist(void) const { return _exist; }
00028 int view(void) const { return _view; }
00029 int layNum(void) const { return _layer; }
00030 int nWires(void) const { return _nwires; }
00031 int superLayer(void) const { return 1+((layNum()-1)/4);}
00032 int subLayer(void) const { return layNum()-4*(superLayer()-1);}
00033 double cellHeight(void) const { return _cellHeight; }
00034 double stDip(void) const { return _stdip; }
00035 double zEnd(void) const { return _zend; }
00036 double rMid(void) const { return _rmid; }
00037 double rEnd(void) const { return _rend; }
00038 double rIn(void) const { return rMid() - 0.5 * cellHeight(); }
00039 double rOut(void) const { return rMid() + 0.5 * cellHeight(); }
00040
00041
00042 double stereo(void) const { return _stereo; }
00043 double dPhiz(void) const { return _delphi; }
00044 double zLength(void) const { return getWire(0)->zLength(); }
00045 double sag(void) const { return getWire(0)->getSag(); }
00046
00047 double phiOffset(void) const { return phiWire(0); }
00048
00049 double phiEPOffset(void) const { return _phiOffset; }
00050 double dPhizDC(double z) const { return phiWireDC(0, z); }
00051 double radiusDC(double z) const { return getWire(0)->radiusDC(z); }
00052 MdcSWire *getWire(int wire) const { return _wires[wire]; }
00053
00054
00055
00056
00057 double phiWireDC(int cell, double z) const;
00058 double phiWire(int cell) const;
00059 double xWire(int cell) const;
00060 double yWire(int cell) const;
00061 double dPhi(void) const { return Constants::twoPi/nWires(); }
00062
00063
00064 double cellWidth(void) const { return dPhi()*rMid()*cos(stereo()); }
00065
00066 double cellWidth(double z) const { return dPhi()*radiusDC(z)*cos(stereo()); }
00067
00068
00069
00070
00071
00072 const Trajectory* makeHitTrajInGlobalCoords(int wire, double z=0) const;
00073
00074 public:
00075
00076 void View(int v ) { _view = v; }
00077 void setCellHeight(double height) { _cellHeight = height; }
00078
00079 private:
00080
00081 const MdcDetector& _mdcDet;
00082
00083 bool _exist;
00084 int _layer;
00085 int _nwires;
00086 MdcSWire **_wires;
00087
00088
00089 double _stdip;
00090
00091 double _rend;
00092 double _rmid;
00093 double _zend;
00094 double _stereo;
00095 double _delphi;
00096 double _phiOffset;
00097 double _cellHeight;
00098 int _view;
00099
00100
00101
00102
00103
00104 };
00105
00106 #endif
00107