StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
StjEtaToDetectorEta.h
1 // -*- mode: c++;-*-
2 // $Id: StjEtaToDetectorEta.h,v 1.2 2008/08/03 00:28:58 tai Exp $
3 #ifndef STJETATODETECTORETA_H
4 #define STJETATODETECTORETA_H
5 
6 #include <cmath>
7 
9 
10 public:
11  StjEtaToDetectorEta(double BEMCy = 222.625, double EEMCz = 270.0)
12  : _BEMCy(BEMCy), _EEMCz(EEMCz) { }
13  virtual ~StjEtaToDetectorEta() { }
14 
15  double operator()(double eta, double z)
16  {
17  double thetaD;
18  if(fabs(eta) < 1e-5) {
19  if(fabs(z) < 1e-5) return 0.0;
20  thetaD = atan2(_BEMCy, z);
21  } else {
22  double tanTh =tan(2*atan(exp(-eta)));
23  if(tanTh > 0 && tanTh*(_EEMCz - z) < _BEMCy) { // ENDCAP
24  thetaD = atan2(tanTh*(_EEMCz - z), _EEMCz);
25  } else { // BARREL
26  thetaD = atan2(_BEMCy, (z + _BEMCy/tanTh));
27  }
28  }
29  double deta = -log(fabs(tan(thetaD/2)));
30  return (thetaD > 0) ? deta : -deta;
31  }
32 
33 private:
34 
35  double _BEMCy;
36  double _EEMCz;
37 
38 };
39 
40 #endif // STJETATODETECTORETA_H
41