00001
00002 #ifndef TRACKEXTRAPOLATORS_TRACKEXTRAPOLATOR_H
00003 #define TRACKEXTRAPOLATORS_TRACKEXTRAPOLATOR_H 1
00004
00005
00006
00007
00008 #include "GaudiAlg/GaudiTool.h"
00009
00010
00011 #include "TrackInterfaces/ITrackExtrapolator.h"
00012
00013
00014 #include "Event/Track.h"
00015
00024 class TrackExtrapolator : public GaudiTool,
00025 virtual public ITrackExtrapolator {
00026 public:
00028 virtual StatusCode propagate( const Track& track,
00029 double z,
00030 State& state,
00031 ParticleID pid = ParticleID(211) );
00032
00034 virtual StatusCode propagate( const Track& track,
00035 const HepPlane3D& plane,
00036 State& state,
00037 ParticleID pid = ParticleID(211) );
00038
00040 virtual StatusCode propagate( State& state,
00041 double z,
00042 ParticleID pid = ParticleID(211) )
00043 {
00044 warning() << " can not propagate " << pid.pid()
00045 << " state " << state.position() << " at " << z << endreq;
00046 return StatusCode::FAILURE;
00047 }
00048
00050 virtual StatusCode propagate( State& state,
00051 const HepPlane3D& plane,
00052 ParticleID pid = ParticleID(211) )
00053 {
00054 warning() << " can not propagate " << pid.pid()
00055 << "state " << state.position() << " at " << plane.normal()
00056 << endreq;
00057 return StatusCode::FAILURE;
00058 }
00059
00060
00070 virtual StatusCode positionAndMomentum( const Track& track,
00071 double z,
00072 HepPoint3D& pos,
00073 HepVector3D& mom,
00074 HepSymMatrix& cov6D,
00075 ParticleID pid = ParticleID(211) );
00076
00079 virtual StatusCode positionAndMomentum( const Track& track,
00080 const HepPlane3D& plane,
00081 HepPoint3D& pos,
00082 HepVector3D& mom,
00083 HepSymMatrix& cov6D,
00084 ParticleID pid = ParticleID(211) );
00085
00087 virtual StatusCode positionAndMomentum( const Track& track,
00088 double z,
00089 HepPoint3D& pos,
00090 HepVector3D& mom,
00091 ParticleID pid = ParticleID(211) );
00092
00094 virtual StatusCode positionAndMomentum( const Track& track,
00095 const HepPlane3D& plane,
00096 HepPoint3D& pos,
00097 HepVector3D& mom,
00098 ParticleID pid = ParticleID(211) );
00099
00101 virtual StatusCode position( const Track& track,
00102 double z,
00103 HepPoint3D& pos,
00104 HepSymMatrix& errPos,
00105 ParticleID pid = ParticleID(211) );
00106
00108 virtual StatusCode position( const Track& track,
00109 const HepPlane3D& plane,
00110 HepPoint3D& pos,
00111 HepSymMatrix& errPos,
00112 ParticleID pid = ParticleID(211) );
00113
00115 virtual StatusCode position( const Track& track,
00116 double z,
00117 HepPoint3D& pos,
00118 ParticleID pid = ParticleID(211) );
00119
00121 virtual StatusCode position( const Track& track,
00122 const HepPlane3D& plane,
00123 HepPoint3D& pos,
00124 ParticleID pid = ParticleID(211) );
00125
00127 virtual StatusCode slopes( const Track& track,
00128 double z,
00129 HepVector3D& slopes,
00130 HepSymMatrix& errSlopes,
00131 ParticleID pid = ParticleID(211) );
00132
00134 virtual StatusCode slopes( const Track& track,
00135 const HepPlane3D& plane,
00136 HepVector3D& slopes,
00137 HepSymMatrix& errSlopes,
00138 ParticleID pid = ParticleID(211) );
00139
00141 virtual StatusCode slopes( const Track& track,
00142 double z,
00143 HepVector3D& slopes,
00144 ParticleID pid = ParticleID(211) );
00145
00147 virtual StatusCode slopes( const Track& track,
00148 const HepPlane3D& plane,
00149 HepVector3D& slopes,
00150 ParticleID pid = ParticleID(211) );
00151
00153 virtual StatusCode p( const Track& track,
00154 double z,
00155 double& p,
00156 ParticleID pid = ParticleID(211) );
00157
00159 virtual StatusCode p( const Track& track,
00160 const HepPlane3D& plane,
00161 double& p,
00162 ParticleID pid = ParticleID(211) );
00163
00165 virtual StatusCode pt( const Track& track,
00166 double z,
00167 double& pt,
00168 ParticleID pid = ParticleID(211) );
00169
00171 virtual StatusCode pt( const Track& track,
00172 const HepPlane3D& plane,
00173 double& pt,
00174 ParticleID pid = ParticleID(211) );
00175
00177 virtual StatusCode momentum( const Track& track,
00178 double z,
00179 HepVector3D& mom,
00180 HepSymMatrix& errMom,
00181 ParticleID pid = ParticleID(211) );
00182
00184 virtual StatusCode momentum( const Track& track,
00185 const HepPlane3D& plane,
00186 HepVector3D& mom,
00187 HepSymMatrix& errMom,
00188 ParticleID pid = ParticleID(211) );
00189
00191 virtual StatusCode momentum( const Track& track,
00192 double z,
00193 HepVector3D& mom,
00194 ParticleID pid = ParticleID(211) );
00195
00197 virtual StatusCode momentum( const Track& track,
00198 const HepPlane3D& plane,
00199 HepVector3D& mom,
00200 ParticleID pid = ParticleID(211) );
00201
00203 virtual const HepMatrix& transportMatrix() const;
00204
00206 TrackExtrapolator( const std::string& type,
00207 const std::string& name,
00208 const IInterface* parent );
00209
00211 virtual ~TrackExtrapolator( );
00212
00213 protected:
00215 HepMatrix m_F;
00216
00218 virtual void updateState( State& state, double z ) const;
00219
00220 private:
00221
00222 };
00223 #endif // TRACKEXTRAPOLATORS_TRACKEXTRAPOLATOR_H