00001 #ifndef FSRUTILS_IFsrPhotonTool_H
00002 #define FSRUTILS_IFsrPhotonTool_H
00003
00004
00005 #include "AsgTools/IAsgTool.h"
00006
00007
00008 #include "xAODMuon/Muon.h"
00009 #include "xAODEgamma/Electron.h"
00010 #include "xAODEgamma/Photon.h"
00011 #include "xAODEgamma/ElectronContainer.h"
00012 #include "xAODEgamma/PhotonContainer.h"
00013
00014
00015 #include "PATInterfaces/CorrectionCode.h"
00016
00017 namespace FSR {
00018
00025 class FsrCandidate {
00026 public:
00027 enum FsrType { FsrNear, FsrFar, FsrUnknown };
00028
00029 FsrCandidate() : particle(0), deltaR(-1), Et(-1), f1(-1), eta(-1), phi(-1), phIso(-1),
00030 type(FsrUnknown) {}
00031 std::string container;
00032 const xAOD::IParticle* particle;
00033 double deltaR;
00034 double Et;
00035 double f1;
00036 double eta;
00037 double phi;
00038 double phIso;
00039 FsrType type;
00040 bool operator<(const FsrCandidate& c) const {
00041 return deltaR < c.deltaR;
00042 }
00043 };
00044
00045 class IFsrPhotonTool : public virtual asg::IAsgTool {
00046
00048 ASG_TOOL_INTERFACE( FSR::IFsrPhotonTool )
00049
00050 public:
00052
00053 virtual CP::CorrectionCode getFsrPhoton(const xAOD::IParticle* part, FsrCandidate& candidate,
00054 const xAOD::PhotonContainer* photons = 0,
00055 const xAOD::ElectronContainer* electrons = 0) = 0;
00056
00057 virtual std::vector<FsrCandidate>* getFsrCandidateList(const xAOD::IParticle* part,
00058 const xAOD::PhotonContainer* photons = 0,
00059 const xAOD::ElectronContainer* electrons = 0) = 0;
00060
00061 virtual std::vector<FsrCandidate>* getFarFsrCandidateList(const xAOD::IParticle* part,
00062 const xAOD::PhotonContainer* photons ) = 0;
00063
00064 virtual std::vector<FsrCandidate>* getNearFsrCandidateList(const xAOD::Muon* part,
00065 const xAOD::PhotonContainer* photons,
00066 const xAOD::ElectronContainer* electrons ) = 0;
00067
00068 };
00069
00070 }
00071
00072 #endif // FSRUTILS_IFsrPhotonTool_H