• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/Users/jmonk/Physics/ForIA/src/Cluster.cxx

Go to the documentation of this file.
00001 #include "ForIA/Cluster.hh"
00002 #include <gsl/gsl_cdf.h>
00003 #include <cmath>
00004 
00005 namespace ForIA{
00006 
00007   Cluster::Cluster(): IFourMomentum(), 
00008   m_clusIsMC(false), m_useEMScale(true), 
00009   m_gotpx(false), m_gotpy(false), m_gotpz(false),
00010   m_hasClusterMoments(false){
00011     
00012   }
00014   double Cluster::E(Energy e) const{
00015     double defaultE = m_E_em + m_E_had;
00016     if(!m_useEMScale) defaultE = m_E_calib;
00017     switch(e){
00018     case CALIB:
00019       return m_E_calib;
00020       break;
00021     case EMSCALE:
00022       return m_E_em + m_E_had;
00023       break;
00024     case EM:
00025       return m_E_em;
00026       break;
00027     case HAD:
00028       return m_E_had;
00029       break;
00030     default: 
00031       return defaultE;
00032     }
00033     return defaultE;
00034     
00035   }
00037   bool Cluster::hasCaloLayerEnergies() const{
00038     return m_hasCaloLayerEnergies;
00039   }
00041   double Cluster::E(CaloLayer layer) const{
00042     switch(layer){
00043 
00044     case EMB1:
00045       return m_E_EMB1;
00046       break;
00047     case EMB2:
00048       return m_E_EMB2;
00049       break;
00050     case EMB3:
00051       return m_E_EMB3;
00052       break;
00053     case EME1:
00054       return m_E_EME1;
00055       break;
00056     case EME2: 
00057       return m_E_EME2;
00058       break;
00059     case EME3:
00060       return m_E_EME3;
00061       break;
00062     case HEC0:
00063       return m_E_HEC0;
00064       break;
00065     case HEC1:
00066       return m_E_HEC1;
00067       break;
00068     case HEC2:
00069       return m_E_HEC2;
00070       break;
00071     case HEC3:
00072       return m_E_HEC3;
00073       break;
00074     case FCAL0:
00075       return m_E_FCAL0;
00076       break;
00077     case FCAL1:
00078       return m_E_FCAL1;
00079       break;
00080     case FCAL2:
00081       return m_E_FCAL2;
00082       break;
00083     case PreSamplerB:
00084       return m_E_PreSamplerB;
00085       break;
00086     case PreSamplerE:
00087       return m_E_PreSamplerE;
00088       break;
00089     case TileBar0:
00090       return m_E_TileBar0;
00091       break;
00092     case TileBar1:
00093       return m_E_TileBar1;
00094       break;
00095     case TileBar2:
00096       return m_E_TileBar2;
00097       break;
00098     case TileExt0:
00099       return m_E_TileExt0;
00100       break;
00101     case TileExt1:
00102       return m_E_TileExt1;
00103       break;
00104     case TileExt2:
00105       return m_E_TileExt2;
00106       break;
00107     case TileGap1:
00108       return m_E_TileGap1;
00109       break;
00110     case TileGap2:
00111       return m_E_TileGap2;
00112       break;
00113     case TileGap3:
00114       return m_E_TileGap3;
00115       break;
00116 
00117     default: 
00118       return m_E_em + m_E_had;
00119     }
00120     
00121     return m_E_em + m_E_had;
00122   }
00124   double Cluster::E() const{
00125     if (m_useEMScale) return m_E_em + m_E_had;
00126     return m_E_calib;
00128     //    return (m_E_em + m_E_had);
00129   }
00131   double Cluster::ET() const{
00132     if (m_useEMScale) return  ( m_E_em + m_E_had )*sin( 2.*atan(exp(-1.*m_eta)) );
00133     return m_ET;
00134   }
00136   double Cluster::PT() const{
00137     if (m_useEMScale) return  ( m_E_em + m_E_had )*sin( 2.*atan(exp(-1.*m_eta)) );
00138     return m_ET;
00139 
00140   }
00142   double Cluster::theta() const{
00143     double theta = 2*atan(exp(-1.0*m_eta));
00144     return theta;
00145   }
00147   double Cluster::phi() const{
00148     return m_phi;
00149   }
00151   double Cluster::px()const{
00152     if(m_gotpx) return m_px;
00153     m_px = PT() * sin(phi());
00154     m_gotpx = true;
00155     return m_px;
00156   }
00157   
00159   double Cluster::py()const{
00160     if(m_gotpy) return m_py;
00161     m_py = PT() * cos(phi());
00162     m_gotpy = true;
00163     return m_py;
00164   }
00165   
00167   double Cluster::pz()const{
00168     if(m_gotpz) return m_pz;
00169     double tanp = tan(theta());
00170     if(fabs(tanp) < 1.e-12){
00171       m_pz = sqrt(E()*E() - M()*M());
00172     }else{
00173       m_pz = PT() / tanp;
00174     }
00175 
00176     m_gotpz = true;
00177     return m_pz;
00178   }
00179   
00181   double Cluster::phi(CaloLayer layer) const{
00182     switch(layer){
00183     case EMB1:
00184       return m_phi_EMB1;
00185       break;
00186     case EMB2:
00187       return m_phi_EMB2;
00188       break;
00189     case EMB3:
00190       return m_phi_EMB3;
00191       break;
00192     case EME1:
00193       return m_phi_EME1;
00194       break;
00195     case EME2:
00196       return m_phi_EME2;
00197       break;
00198     case EME3:
00199       return m_phi_EME3;
00200       break;
00201     case HEC0:
00202       return m_phi_HEC0;
00203       break;
00204     case HEC1:
00205       return m_phi_HEC1;
00206       break;
00207     case HEC2:
00208       return m_phi_HEC2;
00209       break;
00210     case HEC3:
00211       return m_phi_HEC3;
00212       break;
00213     case FCAL0:
00214       return m_phi_FCAL0;
00215       break;
00216     case FCAL1:
00217       return m_phi_FCAL1;
00218       break;
00219     case FCAL2:
00220       return m_phi_FCAL2;
00221       break;
00222     case PreSamplerB:
00223       return m_phi_PreSamplerB;
00224       break;
00225     case PreSamplerE:
00226       return m_phi_PreSamplerE;
00227       break;
00228     case TileBar0:
00229       return m_phi_TileBar0;
00230       break;
00231     case TileBar1:
00232       return m_phi_TileBar1;
00233       break;
00234     case TileBar2:
00235       return m_phi_TileBar2;
00236       break;
00237     case TileExt0:
00238       return m_phi_TileExt0;
00239       break;
00240     case TileExt1:
00241       return m_phi_TileExt1;
00242       break;
00243     case TileExt2:
00244       return m_phi_TileExt2;
00245       break;
00246     case TileGap1:
00247       return m_phi_TileGap1;
00248       break;
00249     case TileGap2:
00250       return m_phi_TileGap2;
00251       break;
00252     case TileGap3:
00253       return m_phi_TileGap3;
00254       break;
00255     default: 
00256         return m_phi;
00257     }
00258     return m_phi;
00259   }
00261   double Cluster::eta() const{
00262     return m_eta;
00263   }
00265   double Cluster::eta(CaloLayer layer) const{
00266     switch(layer){
00267     case EMB1:
00268       return m_eta_EMB1;
00269       break;
00270     case EMB2:
00271       return m_eta_EMB2;
00272       break;
00273     case EMB3:
00274       return m_eta_EMB3;
00275       break;
00276     case EME1:
00277       return m_eta_EME1;
00278       break;
00279     case EME2:
00280       return m_eta_EME2;
00281       break;
00282     case EME3:
00283       return m_eta_EME3;
00284       break;
00285     case HEC0:
00286       return m_eta_HEC0;
00287       break;
00288     case HEC1:
00289       return m_eta_HEC1;
00290       break;
00291     case HEC2:
00292       return m_eta_HEC2;
00293     case HEC3:
00294       return m_eta_HEC3;
00295       break;
00296     case FCAL0:
00297       return m_eta_FCAL0;
00298       break;
00299     case FCAL1:
00300       return m_eta_FCAL1;
00301       break;
00302     case FCAL2:
00303       return m_eta_FCAL2;
00304       break;
00305     case PreSamplerB:
00306       return m_eta_PreSamplerB;
00307       break;
00308     case PreSamplerE:
00309       return m_eta_PreSamplerE;
00310       break;
00311     case TileBar0:
00312       return m_eta_TileBar0;
00313       break;
00314     case TileBar1:
00315       return m_eta_TileBar1;
00316       break;
00317     case TileBar2:
00318       return m_eta_TileBar2;
00319       break;
00320     case TileExt0:
00321       return m_eta_TileExt0;
00322       break;
00323     case TileExt1:
00324       return m_eta_TileExt1;
00325       break;
00326     case TileExt2:
00327       return m_eta_TileExt2;
00328       break;
00329     case TileGap1:
00330       return m_eta_TileGap1;
00331       break;
00332     case TileGap2:
00333       return m_eta_TileGap2;
00334       break;
00335     case TileGap3:
00336       return m_eta_TileGap3;
00337       break;
00338     default: 
00339         return m_eta;
00340     }
00341     return m_eta;
00342   }
00344   double Cluster::M() const{
00345     std::cout<<"Warning: Using massless clusters!"<<std::endl;
00346     return 0.0;
00347     //    return m_M;
00348   }
00350   bool Cluster::hasClusterMoments() const{
00351     return m_hasClusterMoments;
00352   }
00354   double Cluster::cellMaxFrac() const{
00355     return m_cellmaxfrac;
00356   }
00358   double Cluster::centerLambda() const{
00359     return m_centerlambda;
00360   }
00362   double Cluster::firstEdens() const{
00363     return m_firstEdens;
00364   }
00366   double Cluster::lateral() const{
00367     return m_lateral;
00368   }
00370   double Cluster::longitudinal() const{
00371     return m_longitudinal;
00372   }
00374   double Cluster::secondR() const{
00375     return m_secondR;
00376   }
00378   double Cluster::secondLambda() const{
00379     return m_secondlambda;
00380   }
00382   double Cluster::time() const{
00383     return m_time;
00384   }
00386   double Cluster::deltaPhi() const{
00387     return m_deltaPhi;
00388   }
00390   double Cluster::deltaTheta() const{
00391     return m_deltaTheta;
00392   }
00393 
00394   void Cluster::scaleEnergy(double scaleFactor) const {
00395     m_E_calib *= scaleFactor;
00396     m_E_em    *= scaleFactor;
00397     m_E_had   *= scaleFactor;
00398     m_ET      *= scaleFactor;
00399     m_PT      *= scaleFactor;
00400     m_M      *= scaleFactor;
00401     
00402     m_gotpx = false;
00403     m_gotpy = false;
00404     m_gotpz = false;
00405     return;
00406   }
00407 
00408 
00409   void Cluster::setUseEMScale(bool useEmScale) const {
00410     m_useEMScale = useEmScale;
00411     return;
00412   }
00413 
00415   std::ostream &operator << (std::ostream &out, const Cluster &clus){
00416     out<<"Cluster: { E_calib: "<<clus.m_E_calib;
00417     out<<" , E_EM: "<<clus.m_E_em;
00418     out<<" , E_HAD: "<<clus.m_E_had;
00419     out<<" , ET: "<<clus.m_ET;
00420     out<<" , eta: "<<clus.m_eta;
00421     out<<" , phi: "<<clus.m_phi;
00422     out<<" , M: "<<clus.m_M;
00423     out<<"}";
00424     return out;
00425   }
00426 
00427 
00428 }

Generated on Mon Jul 30 2012 16:56:35 for ForIA by  doxygen 1.7.2