00001 #ifndef RecoEgamma_EgammaPhotonProducers_PhotonProducer_h
00002 #define RecoEgamma_EgammaPhotonProducers_PhotonProducer_h
00003
00013 #include "FWCore/Framework/interface/EDProducer.h"
00014 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00015 #include "FWCore/Framework/interface/Event.h"
00016 #include "FWCore/Framework/interface/EventSetup.h"
00017 #include "DataFormats/Common/interface/Handle.h"
00018 #include "FWCore/Framework/interface/ESHandle.h"
00019 #include "Geometry/CaloGeometry/interface/CaloGeometry.h"
00020 #include "Geometry/CaloTopology/interface/CaloTopology.h"
00021 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
00022 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00023 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00024 #include "DataFormats/EgammaCandidates/interface/Photon.h"
00025 #include "DataFormats/EgammaReco/interface/BasicClusterShapeAssociation.h"
00026 #include "RecoEcal/EgammaCoreTools/interface/PositionCalc.h"
00027 #include "DataFormats/EgammaReco/interface/ElectronPixelSeedFwd.h"
00028 #include "RecoCaloTools/MetaCollections/interface/CaloRecHitMetaCollections.h"
00029 #include "RecoEgamma/EgammaTools/interface/HoECalculator.h"
00030 #include "RecoEgamma/EgammaTools/interface/ConversionLikelihoodCalculator.h"
00031 #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h"
00032
00033
00034
00035 class PhotonProducer : public edm::EDProducer {
00036
00037 public:
00038
00039 PhotonProducer (const edm::ParameterSet& ps);
00040 ~PhotonProducer();
00041
00042 virtual void beginJob (edm::EventSetup const & es);
00043 virtual void produce(edm::Event& evt, const edm::EventSetup& es);
00044
00045 private:
00046
00047 void fillPhotonCollection(const edm::Handle<reco::SuperClusterCollection> & scHandle,
00048 const CaloSubdetectorGeometry *geometry,
00049 const CaloSubdetectorGeometry *geometryES,
00050 const CaloTopology *topology,
00051 const EcalRecHitCollection* hits,
00052 HBHERecHitMetaCollection *mhbhe,
00053 const edm::Handle<reco::ConversionCollection> & conversionHandle,
00054 const reco::ElectronPixelSeedCollection& pixelSeeds,
00055 math::XYZPoint & vtx,
00056 reco::PhotonCollection & outputCollection,
00057 int& iSC);
00058
00059 reco::ConversionRef solveAmbiguity( const edm::Handle<reco::ConversionCollection> & conversionHandle, reco::SuperClusterRef& sc);
00060
00061 double hOverE(const reco::SuperClusterRef & scRef, HBHERecHitMetaCollection *mhbhe);
00062
00063 std::string PhotonCollection_;
00064 edm::InputTag scHybridBarrelProducer_;
00065 edm::InputTag scIslandEndcapProducer_;
00066 edm::InputTag scHybridBarrelCollection_;
00067 edm::InputTag scIslandEndcapCollection_;
00068
00069 edm::InputTag barrelEcalHits_;
00070 edm::InputTag endcapEcalHits_;
00071
00072
00073 std::string conversionProducer_;
00074 std::string conversionCollection_;
00075
00076
00077 std::string hbheLabel_;
00078 std::string hbheInstanceName_;
00079 double hOverEConeSize_;
00080 double maxHOverE_;
00081 double minSCEt_;
00082 double minR9_;
00083 bool validConversions_;
00084 std::string pixelSeedProducer_;
00085 std::string vertexProducer_;
00086 bool usePrimaryVertex_;
00087 bool risolveAmbiguity_;
00088 edm::ParameterSet conf_;
00089
00090 PositionCalc posCalculator_;
00091 std::string likelihoodWeights_;
00092
00093 edm::ESHandle<CaloGeometry> theCaloGeom_;
00094 edm::ESHandle<CaloTopology> theCaloTopo_;
00095 HoECalculator theHoverEcalc_;
00096 ConversionLikelihoodCalculator* theLikelihoodCalc_;
00097
00098 bool validPixelSeeds_;
00099
00100
00101
00102 };
00103 #endif