00001 // ================================================ 00002 // This file contains: 00003 // 00004 // ReconstructedParticle class 00005 // 00006 // ReconstructedParticleCollection 00007 // ================================================ 00008 // 00009 // THIS TEXT TO BE REPLACED BY ATLAS STANDARD FORMAT 00010 // 00011 // 00012 // Namespace: ATLFast:: 00013 // 00014 // class: ReconstructedParticle 00015 // 00016 // Description: 00017 // 00018 // ReconstructedParticle is used to represent most simple particles such as 00019 // Electron, Muon, Photon, etc. The motivation being that all particles are 00020 // the same type from the point of view of kinematic state variables, 00021 // and are only differentiated by having a different "label". 00022 // 00023 // It implements an "IKinematic" interface which is 00024 // designed to standardise kimematic attribute query method names. 00025 // 00026 // Ongoing points during development: 00027 // 00028 // 1 This is of course not a proven concept at this stage. 00029 // However we follow the principle of "try the simplest thing first" 00030 // Thus we propose this as the highest level analysis entity class 00031 // in order to see if it works. 00032 // 00033 // 2 This is all without prejudice to how we chose to 00034 // represent jets, tracks, clusters... 00035 // 00036 // 3 It was developed during the first phase of ATLFAST++ re-engineering 00037 // and inclusion in the ATLAS (Gaudi/Athena) analysis framework. 00038 // It is therefore one of the first implementations of such analysis classes, 00039 // and as such should be seen as a prototype which may be superceeded 00040 // in concept. 00041 // 00042 // 4 At the present time we have not solved the association/relationship 00043 // to other entities. This is a deep problem which is wider than 00044 // Atlfast. 00045 // 00046 // 00047 // Authors: 00048 // P.Clarke, H.Phillips, E.Richter-Was, P.Sherwood, R.Steward 00049 // 00050 // Written: 00051 // 7-June-2000 00052 // Revised: 00053 // 00054 // 00055 // ................................................................ 00056 // 00057 #ifndef ATLFAST_RECONSTRUCTEDPARTICLE_H 00058 #define ATLFAST_RECONSTRUCTEDPARTICLE_H 00059 00060 00061 // Other 00062 #include "CLHEP/Vector/LorentzVector.h" 00063 #include "HepMC/GenParticle.h" 00064 00065 // Atlfast 00066 //#ifndef ATLFAST_IKINEMATIC_H 00067 //#include "AtlfastEvent/IKinematic.h" 00068 //#endif 00069 00070 #ifndef ATLFAST_IAODNAVIGATION_H 00071 #include "AtlfastEvent/IAODNavigation.h" 00072 #endif 00073 00074 //#ifndef ATLFAST_IKINEMATICBASE_H 00075 //#include "AtlfastEvent/IKinematicBase.h" 00076 //#endif 00077 00078 #ifndef ATLFAST_AODNAVIGATIONIMP_H 00079 #include "AtlfastEvent/AODNavigationImp.h" 00080 #endif 00081 00082 //****************************************** 00083 // ReconstructedParticle class 00084 // 00085 // See description at head of this file 00086 //****************************************** 00087 00088 00089 namespace Atlfast { 00101 class IAOOvisitor; 00102 00103 class ReconstructedParticle: 00104 virtual public IAODNavigation, 00105 private AODNavigationImp { 00106 00107 public: 00108 00109 //............. 00111 00112 ReconstructedParticle(); 00113 ReconstructedParticle(const int pdg_id, const HepLorentzVector& vec, 00114 const HepMC::GenParticle* progenitor ); 00115 ReconstructedParticle( const ReconstructedParticle& src ); 00116 ReconstructedParticle( const ReconstructedParticle* src ); 00117 ReconstructedParticle& operator=( const ReconstructedParticle& src ); 00118 virtual ~ReconstructedParticle() {} 00119 00120 00124 00125 virtual HepLorentzVector momentum() const; 00126 virtual double eta() const; 00127 virtual double phi() const; 00128 virtual double pT() const; 00129 virtual double eT() const; 00130 virtual double mT() const; 00131 virtual double pt() const; 00132 virtual IKinematic* clone() const; 00133 00135 virtual void accept(IAOOvisitor* iaPtr) const; 00136 00137 00138 int pdg_id() const; 00139 const HepMC::GenParticle* truth() const; 00140 00141 double halo() const {return m_halo;} 00142 void set_halo(double halo) {m_halo = halo;} 00143 HepLorentzVector halovector() const {return m_halovector;} 00144 void set_halovector(HepLorentzVector halovector) {m_halovector = halovector;} 00145 00147 virtual void print(const std::string& coor, std::string t="" ) const; 00148 00149 private: 00150 00151 int m_pdg_id ; 00152 HepLorentzVector m_momentum ; 00153 00157 const HepMC::GenParticle* m_truth ; 00158 00159 double m_halo ; 00160 HepLorentzVector m_halovector; 00161 00162 }; 00164 // inline methods // 00166 } // end of namespace bracket 00167 #endif 00168 00169 00170 00171 00172 00173 00174 00175 00176 00177 00178