CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/RecoMET/METProducers/src/EcalHaloDataProducer.cc

Go to the documentation of this file.
00001 #include "RecoMET/METProducers/interface/EcalHaloDataProducer.h"
00002 
00003 /*
00004   [class]:  EcalHaloDataProducer
00005   [authors]: R. Remington, The University of Florida
00006   [description]: See EcalHaloDataProducer.h
00007   [date]: October 15, 2009
00008 */
00009 
00010 using namespace edm;
00011 using namespace std;
00012 using namespace reco;
00013 
00014 EcalHaloDataProducer::EcalHaloDataProducer(const edm::ParameterSet& iConfig)
00015 {
00016   //RecHit Level
00017   IT_EBRecHit    = iConfig.getParameter<edm::InputTag>("EBRecHitLabel");
00018   IT_EERecHit    = iConfig.getParameter<edm::InputTag>("EERecHitLabel");
00019   IT_ESRecHit    = iConfig.getParameter<edm::InputTag>("ESRecHitLabel");
00020 
00021   //Higher Level Reco 
00022   IT_SuperCluster = iConfig.getParameter<edm::InputTag>("SuperClusterLabel");
00023   IT_Photon = iConfig.getParameter<edm::InputTag>("PhotonLabel") ;
00024 
00025   // Shower Shape cuts for EcalAlgo
00026 
00027   RoundnessCut = iConfig.getParameter<double>("RoundnessCutParam");
00028   AngleCut = iConfig.getParameter<double>("AngleCutParam");
00029 
00030   EBRecHitEnergyThreshold = (float) iConfig.getParameter<double> ("EBRecHitEnergyThresholdParam");
00031   EERecHitEnergyThreshold = (float) iConfig.getParameter<double> ("EERecHitEnergyThresholdParam");
00032   ESRecHitEnergyThreshold = (float) iConfig.getParameter<double> ("ESRecHitEnergyThresholdParam");
00033   SumEcalEnergyThreshold = (float)iConfig.getParameter<double> ("SumEcalEnergyThresholdParam");
00034   NHitsEcalThreshold = iConfig.getParameter<int> ("NHitsEcalThresholdParam");
00035   
00036   RoundnessCut = iConfig.getParameter<double>("RoundnessCutParam");
00037   AngleCut = iConfig.getParameter<double>("AngleCutParam");
00038 
00039   produces<EcalHaloData>();
00040 }
00041 
00042 void EcalHaloDataProducer::produce(Event& iEvent, const EventSetup& iSetup)
00043 {
00044   //Get CaloGeometry
00045   edm::ESHandle<CaloGeometry> TheCaloGeometry;
00046   iSetup.get<CaloGeometryRecord>().get(TheCaloGeometry);
00047 
00048   //Get  EB RecHits
00049   edm::Handle<EBRecHitCollection> TheEBRecHits;
00050   iEvent.getByLabel(IT_EBRecHit, TheEBRecHits);
00051 
00052   //Get EE RecHits
00053   edm::Handle<EERecHitCollection> TheEERecHits;
00054   iEvent.getByLabel(IT_EERecHit, TheEERecHits);
00055 
00056   //Get ES RecHits
00057   edm::Handle<ESRecHitCollection> TheESRecHits;
00058   iEvent.getByLabel(IT_ESRecHit, TheESRecHits);
00059 
00060   //Get ECAL Barrel SuperClusters                  
00061   edm::Handle<reco::SuperClusterCollection> TheSuperClusters;
00062   iEvent.getByLabel(IT_SuperCluster, TheSuperClusters);
00063 
00064   //Get Photons
00065   edm::Handle<reco::PhotonCollection> ThePhotons;
00066   iEvent.getByLabel(IT_Photon, ThePhotons);
00067 
00068   //Run the EcalHaloAlgo to reconstruct the EcalHaloData object 
00069   EcalHaloAlgo EcalAlgo;
00070   EcalAlgo.SetRoundnessCut(RoundnessCut);
00071   EcalAlgo.SetAngleCut(AngleCut);
00072   EcalAlgo.SetRecHitEnergyThresholds(EBRecHitEnergyThreshold, EERecHitEnergyThreshold, ESRecHitEnergyThreshold);
00073   EcalAlgo.SetPhiWedgeThresholds(SumEcalEnergyThreshold, NHitsEcalThreshold);
00074   
00075   if( TheCaloGeometry.isValid() && ThePhotons.isValid() && TheSuperClusters.isValid()  &&  TheEBRecHits.isValid() && TheEERecHits.isValid() && TheESRecHits.isValid() )
00076     {
00077       std::auto_ptr<EcalHaloData> EcalData( new EcalHaloData( EcalAlgo.Calculate(*TheCaloGeometry, ThePhotons, TheSuperClusters, TheEBRecHits, TheEERecHits, TheESRecHits)));
00078       iEvent.put( EcalData ) ; 
00079     }
00080   else 
00081     {
00082       std::auto_ptr<EcalHaloData> EcalData( new EcalHaloData() ) ;
00083       iEvent.put(EcalData); 
00084     }
00085   return;
00086 }
00087 
00088 EcalHaloDataProducer::~EcalHaloDataProducer(){}