00001
00002
00003 #ifndef STJETATODETECTORETA_H
00004 #define STJETATODETECTORETA_H
00005
00006 #include <cmath>
00007
00008 class StjEtaToDetectorEta {
00009
00010 public:
00011 StjEtaToDetectorEta(double BEMCy = 222.625, double EEMCz = 270.0)
00012 : _BEMCy(BEMCy), _EEMCz(EEMCz) { }
00013 virtual ~StjEtaToDetectorEta() { }
00014
00015 double operator()(double eta, double z)
00016 {
00017 double thetaD;
00018 if(fabs(eta) < 1e-5) {
00019 if(fabs(z) < 1e-5) return 0.0;
00020 thetaD = atan2(_BEMCy, z);
00021 } else {
00022 double tanTh =tan(2*atan(exp(-eta)));
00023 if(tanTh > 0 && tanTh*(_EEMCz - z) < _BEMCy) {
00024 thetaD = atan2(tanTh*(_EEMCz - z), _EEMCz);
00025 } else {
00026 thetaD = atan2(_BEMCy, (z + _BEMCy/tanTh));
00027 }
00028 }
00029 double deta = -log(fabs(tan(thetaD/2)));
00030 return (thetaD > 0) ? deta : -deta;
00031 }
00032
00033 private:
00034
00035 double _BEMCy;
00036 double _EEMCz;
00037
00038 };
00039
00040 #endif // STJETATODETECTORETA_H
00041