Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

Cluster.h

Go to the documentation of this file.
00001 // ================================================
00002 // Cluster class description
00003 // ================================================
00004 //
00005 // THIS TEXT TO BE REPLACED BY ATLAS STANDARD FORMAT
00006 //
00007 // Namespace Atlfast::
00008 //
00009 // class: Cluster
00010 //
00011 // Authors: P.Clarke, H.Phillips, E.Richter-Was, P.Sherwood, R.Steward
00012 //
00013 // Description: 
00014 //
00015 //   Class to represent Clusters constructed from calorimeter Cells
00016 //
00017 //   It implements an "IKinematic" interface which is
00018 //   designed to standardise kinematic attribute query method names.
00019 //
00020 //   Ongoing points during development:
00021 //
00022 //   1 It was developed during the first phase of ATLFAST++ re-engineering
00023 //     and inclusion in the ATLAS (Gaudi/Athena) analysis framework. 
00024 //     It is therefore one of the first implementations of such analysis classes,
00025 //     and as such should be seen as a prototype which may be superceeded
00026 //     in concept.
00027 // 
00028 //   3 At the present time we have not solved the association/relationship
00029 //     to other entities. This is a deep problem which is wider than
00030 //     Atlfast which is under study.
00031 //  
00032 //
00033 //..................................................
00034 
00035 
00036 #ifndef ATLFAST_CLUSTER_H
00037 #define ATLFAST_CLUSTER_H
00038 
00039 // Kinematic classes.
00040 #include "CLHEP/Vector/LorentzVector.h"
00041 #include "AtlfastEvent/IKinematic.h"
00042 
00043 // Management of Associations
00044 #include "AtlfastEvent/AssociationManager.h"
00045 
00046 // Gaudi includes
00047 #include "GaudiKernel/ContainedObject.h"
00048 //#include "GaudiKernel/ObjectVector.h"
00049 
00050 
00051 //Class ID for Cluster class
00052 static const CLID CLID_ATLFAST_CLUSTER=2302 ;
00053 
00054 
00055 //******************************************
00056 //              Cluster class
00057 //
00058 // See description at head of this file 
00059 //******************************************
00060 
00061 
00062 namespace Atlfast {
00063   using ::HepLorentzVector;
00071   class Cluster : 
00072     public IKinematic, 
00073     public ContainedObject, 
00074     public AssociationManager{
00075       
00076     private:
00077     
00078     // Kinematic information assocated with this cluster  
00079     HepLorentzVector m_momentum ;
00080     
00081     public:
00082       //.............
00083       // Constructors
00084       
00090       template <class CellIterator>
00091         Cluster( const HepLorentzVector& vec, 
00092                  CellIterator first, 
00093                  CellIterator last  ) : 
00094         IKinematic(),
00095         ContainedObject(),
00096         AssociationManager(), 
00097         m_momentum(vec)
00098         {
00099           // Add associations to Cells from which the cluster was made
00100           // Only needs to be one direction Clusters->Cells
00101           for ( CellIterator i=first; i != last; ++i ) 
00102             {
00103               this->associate(*i);
00104             }
00105         }
00106       
00108       Cluster( const Cluster& src ) : 
00109         IKinematic(),
00110         ContainedObject(), 
00111         AssociationManager( src ),
00112         m_momentum(src.m_momentum)
00113         {}
00114       
00115       
00117       Cluster() : 
00118         IKinematic(),
00119         ContainedObject(), 
00120         AssociationManager(),
00121         m_momentum(HepLorentzVector(0.0,0.0,0.0,0.0))
00122         {}
00123       
00124       virtual ~Cluster() {}
00125       
00126       
00127       //..............................................
00128       // Methods required by IKinematic interface to kinematic quantitites
00129       // See interface documentation for description.
00131       virtual HepLorentzVector momentum() const {return m_momentum; } 
00133       virtual double  eta() const { return m_momentum.pseudoRapidity() ;}
00135       virtual double  phi() const { return m_momentum.phi() ;  } 
00137       virtual double  pT()  const { return m_momentum.perp() ;}
00138       //  FIXME: not sure if this is correct
00140       virtual double  eT()  const { 
00141         return  m_momentum.e()*m_momentum.perp()/m_momentum.rho() ;}  
00143       virtual double  mT()  const { return m_momentum.mt(); }   
00144       
00145       
00146       //......................
00147       // Athena mandatory methods
00148       static  const CLID& classID()       { return CLID_ATLFAST_CLUSTER; }
00149       virtual const CLID& clID()  const   {  return CLID_ATLFAST_CLUSTER; }
00150       
00151   };
00152   
00153   
00154 } // end of namespace 
00155 #endif
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164 
00165 
00166 
00167 

Generated on Wed May 1 14:35:46 2002 for AtlfastEvent by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001