00001 #ifndef __PFBlockElementGsfTrack__ 00002 #define __PFBlockElementGsfTrack__ 00003 00004 #include <iostream> 00005 #include "DataFormats/Math/interface/Point3D.h" 00006 #include "DataFormats/ParticleFlowReco/interface/PFBlockElement.h" 00007 #include "DataFormats/ParticleFlowReco/interface/PFRecTrackFwd.h" 00008 #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrackFwd.h" 00009 #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrack.h" 00010 #include "DataFormats/Math/interface/LorentzVector.h" 00011 #include "DataFormats/TrackReco/interface/TrackFwd.h" 00012 00013 namespace reco { 00014 00018 class PFBlockElementGsfTrack : public PFBlockElement { 00019 public: 00020 00021 PFBlockElementGsfTrack() {} 00022 00023 PFBlockElementGsfTrack(const GsfPFRecTrackRef& gsfref, 00024 const math::XYZTLorentzVector& Pin, 00025 const math::XYZTLorentzVector& Pout); 00026 00027 PFBlockElement* clone() const { return new PFBlockElementGsfTrack(*this); } 00028 00029 void Dump(std::ostream& out = std::cout, 00030 const char* tab = " " ) const; 00031 00033 virtual bool trackType(TrackType trType) const { 00034 return (trackType_>>trType) & 1; 00035 } 00036 00038 virtual void setTrackType(TrackType trType, bool value) { 00039 if(value) trackType_ = trackType_ | (1<<trType); 00040 else trackType_ = trackType_ ^ (1<<trType); 00041 } 00042 00043 bool isSecondary() const { 00044 return trackType(T_FROM_GAMMACONV); 00045 } 00046 00048 GsfPFRecTrackRef GsftrackRefPF() const { 00049 return GsftrackRefPF_; 00050 } 00051 00053 reco::GsfTrackRef GsftrackRef() const { 00054 return GsftrackRef_; 00055 } 00056 00057 00058 00059 00061 const math::XYZPointF& positionAtECALEntrance() const { 00062 return positionAtECALEntrance_; 00063 } 00064 00065 00066 00067 const GsfPFRecTrack & GsftrackPF() const { return *GsftrackRefPF_;} 00068 00069 const math::XYZTLorentzVector& Pin() const { return Pin_; } 00070 const math::XYZTLorentzVector& Pout() const { return Pout_; } 00071 private: 00072 00073 00074 00076 GsfPFRecTrackRef GsftrackRefPF_; 00077 00079 reco::GsfTrackRef GsftrackRef_; 00080 00081 00083 math::XYZTLorentzVector Pin_; 00084 math::XYZTLorentzVector Pout_; 00085 unsigned int trackType_; 00086 00087 00089 math::XYZPointF positionAtECALEntrance_; 00090 00091 00092 00093 }; 00094 } 00095 00096 #endif 00097