00001
00002 #include "DataFormats/EgammaCandidates/interface/Photon.h"
00003 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00004
00005 using namespace reco;
00006
00007 Photon::Photon( const LorentzVector & p4,
00008 Point caloPos,
00009 const SuperClusterRef scl,
00010 float HoE,
00011 bool hasPixelSeed,
00012 const Point & vtx) :
00013 RecoCandidate( 0, p4, vtx, 22 ), caloPosition_( caloPos ),
00014 superCluster_(scl),
00015 hadOverEm_(HoE),
00016 pixelSeed_( hasPixelSeed ) {}
00017
00018 Photon::~Photon() { }
00019
00020 Photon * Photon::clone() const {
00021 return new Photon( * this );
00022 }
00023
00024 reco::SuperClusterRef Photon::superCluster() const {
00025 return superCluster_;
00026 }
00027
00028
00029
00030 std::vector<reco::ConversionRef> Photon::conversions() const {
00031 return conversions_;
00032 }
00033
00034 bool Photon::isConverted() const {
00035
00036 if ( this->conversions().size() > 0)
00037 return true;
00038 else
00039 return false;
00040 }
00041
00042
00043
00044
00045 bool Photon::overlap( const Candidate & c ) const {
00046 const RecoCandidate * o = dynamic_cast<const RecoCandidate *>( & c );
00047 return ( o != 0 &&
00048 ( checkOverlap( superCluster(), o->superCluster() ) )
00049 );
00050 return false;
00051 }
00052
00053 void Photon::setVertex(const Point & vertex) {
00054 math::XYZVector direction = caloPosition() - vertex;
00055 double energy = this->energy();
00056 math::XYZVector momentum = direction.unit() * energy;
00057 math::XYZTLorentzVector lv(momentum.x(), momentum.y(), momentum.z(), energy );
00058 setP4(lv);
00059 vertex_ = vertex;
00060 }
00061
00062