FastJet 3.0beta1
HepEntityIpre96.h
00001 #ifndef  D0RunIconeJets_HepEntityPre96_class
00002 #define  D0RunIconeJets_HepEntityPre96_class
00003 
00004 #include "inline_maths.h"
00005 #include "HepEntityI.h"
00006 
00007 namespace d0runi{
00008 
00009 //Author: Lars Sonnenschein 25/Feb/2010
00010 //This is an example class fulfilling the minimal requirements needed by the
00011 //D0 RunI cone jet algorithm implementation prior to 1996, which is an inlined template class
00012 //See FERMILAB-Pub-97-242-E for details
00013 class HepEntityIpre96 : public HepEntityI {
00014 
00015  public:
00016 
00017   HepEntityIpre96() {
00018     Et=0.;
00019     eta=0.;
00020     phi=0.;
00021     Ex=0.;
00022     Ey=0.;
00023     Ez=0.;
00024     index = -1;
00025     phi_pre96=0.;
00026     eta_pre96=0.;
00027 
00028     return;
00029   }
00030 
00031 
00032  HepEntityIpre96(double E, double px, double py, double pz,
00033                  int index_in = -1) : index(index_in) {
00034    //Snowmass Et scheme    
00035     double pt = sqrt(px*px+py*py);
00036     double p = sqrt(pt*pt+pz*pz);
00037     phi = inline_maths::phi(px,py);
00038     double theta = asin(pt/p);
00039     eta = inline_maths::eta(theta);
00040 
00041     Et = E*sin(theta);
00042 
00043     phi_pre96 = phi;
00044     eta_pre96 = eta;
00045 
00046     Ex = Et*cos(phi_pre96);
00047     Ey = Et*sin(phi_pre96);
00048     Ez = Et*sinh(eta_pre96);
00049   
00050     return;
00051   }
00052 
00053 
00054   inline double px() const {
00055     return Et*cos(phi_pre96);
00056   }
00057 
00058   inline double py() const {
00059     return Et*sin(phi_pre96);
00060   }
00061 
00062   inline double pz() const {
00063     return Et*sinh(eta_pre96);
00064   }
00065   
00066   inline double E() const {
00067     return Et*cosh(eta_pre96);
00068   }
00069   
00070  
00071   inline void Add(const HepEntityIpre96 el) {
00072     //assumes Et, eta and phi stored accurately
00073     double w2 = el.Et;
00074     Et += el.Et;
00075     w2 /= Et;
00076     
00077     eta += w2*(el.eta - eta);
00078     phi += w2*inline_maths::delta_phi(el.phi, phi); 
00079 
00080 
00081     Ex += el.Ex;
00082     Ey += el.Ey;
00083     Ez += el.Ez;
00084     phi_pre96 = atan2(Ey, Ex);
00085     double theta_pre96 = atan2(sqrt(Ex*Ex+Ey*Ey),Ez);
00086     eta_pre96 = -log(tan(theta_pre96/2.));
00087 
00088     return; 
00089   }
00090 
00091 
00092   inline void Fill(double E, double px, double py, double pz, int index_in) {
00093     double pt = sqrt(px*px+py*py);
00094     double p = sqrt(pt*pt+pz*pz);
00095     phi = inline_maths::phi(px,py);
00096     double theta = asin(pt/p);
00097     eta = inline_maths::eta(theta);
00098 
00099     Et = E*sin(theta);
00100 
00101     
00102     phi_pre96 = phi;
00103     eta_pre96 = eta;
00104 
00105     Ex = Et*cos(phi_pre96);
00106     Ey = Et*sin(phi_pre96);
00107     Ez = Et*sinh(eta_pre96);
00108 
00109     index = index_in;
00110 
00111     return;
00112   }
00113 
00114 
00115   double Ex;
00116   double Ey;
00117   double Ez;
00118   int index;
00119   double phi_pre96;
00120   double eta_pre96;
00121 
00122  private:
00123 
00124 
00125 
00126 };
00127 //end of class HepEntityIpre96;
00128 
00129 } // end of namespace d0runi
00130 
00131 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends