00001 #ifndef CLEODCHAIN_CDCANDIDATE_H 00002 #define CLEODCHAIN_CDCANDIDATE_H 00003 // -*- C++ -*- 00004 // 00005 // Package: DChain 00006 // Module: CDCandidate 00007 // 00008 // Description: Basic particle candidate need to use DChain list package 00009 // 00010 // Usage: 00011 // <usage> 00012 // 00013 // Author: Simon Patton 00014 // Created: Wed Sep 18 14:47:30 EDT 1996 00015 // $Id: CDCandidate.h,v 1.5 2011/10/27 06:15:12 zoujh Exp $ 00016 // 00017 // Revision history 00018 // 00019 // $Log: CDCandidate.h,v $ 00020 // Revision 1.5 2011/10/27 06:15:12 zoujh 00021 // add user tag to particle data 00022 // 00023 // Revision 1.4 2010/03/29 04:35:45 zoujh 00024 // See ChangeLog 00025 // 00026 // Revision 1.3 2009/09/22 08:24:41 hujf 00027 // see ChangeLog 00028 // 00029 // Revision 1.2 2009/06/22 14:55:48 zoujh 00030 // See ChangeLog 00031 // 00032 // Revision 1.1.1.1 2009/03/03 06:05:56 maqm 00033 // first import of BesDChain 00034 // 00035 // Revision 1.6 2006/01/11 20:37:27 cdj 00036 // work with renaming done in DChain package 00037 // 00038 // Revision 1.5 2004/03/05 22:01:49 chengp 00039 // implemented Monte Carlo matching 00040 // 00041 // Revision 1.4 2003/05/15 19:58:15 cdj 00042 // revamped memory handling so always use a ReferenceHolder to deal with the reference counting 00043 // 00044 // Revision 1.3 2001/09/12 19:10:36 ajm36 00045 // add lambda functions to CDCandidate 00046 // 00047 // Revision 1.2 2001/04/20 14:03:38 ajm36 00048 // add finalChildren function to return tracks and showers 00049 // 00050 // Revision 1.1 2001/04/11 13:19:10 urner 00051 // transition to files with CD prefix. Addition of new files 00052 // 00053 // Revision 1.3 2001/03/23 23:05:34 urner 00054 // added pi0 eta and CDKs decay lists 00055 // 00056 // Revision 1.2 2000/12/19 15:09:34 cdj 00057 // removed forward decleration of DBCDPhotonFit 00058 // 00059 // Revision 1.1.1.1 2000/12/18 22:17:25 cdj 00060 // imported CleoDChain 00061 // 00062 // Revision 1.23 1998/05/04 19:10:43 sjp 00063 // Fixed access confusion for kinematicData 00064 // 00065 // Revision 1.22 1998/04/17 18:48:56 sjp 00066 // Modifed to use latest CLEO types 00067 // 00068 // Revision 1.21 1997/09/03 14:58:39 sjp 00069 // Use new report.h and KTKinematicData 00070 // 00071 // Revision 1.20 1997/08/29 17:01:16 sjp 00072 // Modified to handle new Cairn Templated classes 00073 // 00074 // Revision 1.19 1997/08/22 16:18:49 sjp 00075 // New name for access functions 00076 // 00077 // Revision 1.18 1997/08/19 23:01:37 sjp 00078 // Restructured package to be independent of CleoDChain 00079 // 00080 // Revision 1.17 1997/08/19 20:41:29 sjp 00081 // Updated to use <package>/<file>.h include structure. 00082 // (Note: This version of the code has not been compiled) 00083 // 00084 // Revision 1.16 1997/07/03 17:47:59 sjp 00085 // Cleaned up include files 00086 // 00087 // Revision 1.15 1997/01/21 20:30:21 sjp 00088 // Changed CPP flags and include because of library reorganization 00089 // 00090 // Revision 1.14 1996/12/20 20:58:34 sjp 00091 // New pathname for FoorPrint 00092 // 00093 // Revision 1.13 1996/11/04 17:00:49 sjp 00094 // Separated of CDDecay part of CDCandidate into new class 00095 // 00096 00097 // system include files 00098 #include <vector> 00099 00100 #include "CLHEP/Vector/LorentzVector.h" 00101 00102 // user include files 00103 #include "DecayChain/Element/ReferenceCount.h" // superclass 00104 #include "BesDChain/DBCandidate.h" 00105 #include "BesDChain/CDFootPrint.h" // CDFootPrint 00106 00107 using CLHEP::HepLorentzVector; 00108 using CLHEP::Hep3Vector; 00109 00110 // forward declarations 00111 class CDDecay ; 00112 class EvtRecTrack; 00113 class EvtRecPi0; 00114 class EvtRecEtaToGG; 00115 class EvtRecVeeVertex; 00116 00117 namespace DecayChain { 00118 class KinematicData; 00119 } 00120 00121 using std::vector; 00122 00123 class CDCandidate : public dchain::ReferenceCount 00124 { 00125 // friend classses and functions 00126 00127 public: 00128 // constants, enums and typedefs 00129 typedef CDDecay DecayEvidence ; 00130 typedef std::pair< vector<const EvtRecTrack*>, vector<const EvtRecTrack*> > 00131 TracksAndShowers; 00132 00133 // Constructors and destructor 00134 virtual ~CDCandidate() ; 00135 00136 // assignment operator(s) 00137 const CDCandidate& operator=( const CDCandidate& aOtherCDCandidate ) ; 00138 00139 // member functions 00140 void setUserTag(int tag); 00141 CDCandidate& setP4( const HepLorentzVector& aMomentum ) ; 00142 00143 // const member functions 00144 int userTag() const; 00145 double mass() const ; 00146 int charge() const ; 00147 double energy() const ; 00148 const Hep3Vector& momentum() const; 00149 const HepLorentzVector& p4() const; 00150 const DecayChain::KinematicData* kinematicData() const; 00151 #ifdef EXTEND 00152 //for recover 4p after kinematic fit 00153 void recover() const ; 00154 #endif 00155 00156 TracksAndShowers finalChildren() const; 00157 00158 inline virtual DBCandidate::Hypo hypo() const; 00159 00160 virtual bool builtFromTrack() const ; 00161 virtual const EvtRecTrack* track() const ; 00162 virtual bool builtFromCDPhoton() const ; 00163 virtual const EvtRecTrack* photon() const ; 00164 virtual bool builtFromCDPi0() const ; 00165 virtual const EvtRecPi0* navPi0() const ; 00166 virtual bool builtFromCDEta() const ; 00167 virtual const EvtRecEtaToGG* navEta() const ; 00168 virtual bool builtFromCDKs() const ; 00169 virtual const EvtRecVeeVertex* navKshort() const ; 00170 virtual bool builtFromCDLambda() const ; 00171 virtual const EvtRecVeeVertex* navLambda() const ; 00172 virtual bool builtFromCDDecay() const ; 00173 virtual const DecayEvidence& decay() const ; 00174 00175 // 00176 bool overlap( const CDCandidate& aOtherCDCandidate ) const ; 00177 const CDFootPrint& footPrint() const ; 00178 00179 // static member functions 00180 00181 protected: 00182 // Constructors and destructor 00183 CDCandidate( const CDCandidate& aOtherCDCandidate ) ; 00184 CDCandidate( const CDFootPrint& aCDFootPrint ) ; 00185 00186 // protected member functions 00187 void setKinematicData( const DecayChain::KinematicData& aKinematicData ) ; 00188 void setCDFootPrint( const CDFootPrint& aCDFootPrint ) ; 00189 00190 virtual DecayChain::KinematicData* defaultKinematicData() const = 0 ; 00191 00192 void recurseNode(TracksAndShowers& final, const CDCandidate& cand) const; 00193 00194 // protected data members 00195 00196 private: 00197 // Constructors and destructor 00198 CDCandidate() ; // stop default 00199 // private member functions 00200 DecayChain::KinematicData* modifiableKinematicData() ; 00201 00202 // data members 00203 DecayChain::KinematicData* m_kinematicDataPtr; 00204 00205 CDFootPrint m_footPrint ; 00206 00207 } ; 00208 00209 typedef const CDCandidate& FixedCDCandidate ; 00210 00211 // inline function definitions 00212 inline DBCandidate::Hypo CDCandidate::hypo() const 00213 { 00214 return DBCandidate::kMaxHypo; 00215 } 00216 00217 #endif /* CLEODCHAIN_CDCANDIDATE_H */