CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronCoreEcalDrivenProducer.cc

Go to the documentation of this file.
00001 
00002 #include "GsfElectronCoreEcalDrivenProducer.h"
00003 
00004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00005 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
00006 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
00007 
00008 #include "DataFormats/EgammaCandidates/interface/GsfElectronCore.h"
00009 #include "DataFormats/ParticleFlowReco/interface/GsfPFRecTrack.h"
00010 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
00011 #include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
00012 #include "DataFormats/EgammaReco/interface/ElectronSeedFwd.h"
00013 #include "DataFormats/EgammaReco/interface/ElectronSeed.h"
00014 #include "DataFormats/Common/interface/ValueMap.h"
00015 
00016 #include <map>
00017 
00018 using namespace reco ;
00019 
00020 // void GsfElectronCoreEcalDrivenProducer::fillDescriptions( edm::ConfigurationDescriptions & descriptions )
00021 //  {
00022 //   edm::ParameterSetDescription desc ;
00023 //   GsfElectronCoreBaseProducer::fillDescriptions(desc) ;
00024 //   descriptions.add("produceEcalDrivenGsfElectronCores",desc) ;
00025 //  }
00026 
00027 GsfElectronCoreEcalDrivenProducer::GsfElectronCoreEcalDrivenProducer( const edm::ParameterSet & config )
00028  : GsfElectronCoreBaseProducer(config)
00029  {}
00030 
00031 void GsfElectronCoreEcalDrivenProducer::produce( edm::Event & event, const edm::EventSetup & setup )
00032  {
00033   // base input
00034   GsfElectronCoreBaseProducer::initEvent(event,setup) ;
00035 
00036   // output
00037   std::auto_ptr<GsfElectronCoreCollection> electrons(new GsfElectronCoreCollection) ;
00038 
00039   // loop on ecal driven tracks
00040   if (useGsfPfRecTracks_)
00041    {
00042     const GsfPFRecTrackCollection * gsfPfRecTrackCollection = gsfPfRecTracksH_.product() ;
00043     GsfPFRecTrackCollection::const_iterator gsfPfRecTrack ;
00044     for ( gsfPfRecTrack=gsfPfRecTrackCollection->begin() ;
00045           gsfPfRecTrack!=gsfPfRecTrackCollection->end() ;
00046           ++gsfPfRecTrack )
00047      {
00048       const GsfTrackRef gsfTrackRef = gsfPfRecTrack->gsfTrackRef() ;
00049       produceEcalDrivenCore(gsfTrackRef,electrons.get()) ;
00050      }
00051    }
00052   else
00053    {
00054     const GsfTrackCollection * gsfTrackCollection = gsfTracksH_.product() ;
00055     for ( unsigned int i=0 ; i<gsfTrackCollection->size() ; ++i )
00056      {
00057       const GsfTrackRef gsfTrackRef = edm::Ref<GsfTrackCollection>(gsfTracksH_,i) ;
00058       produceEcalDrivenCore(gsfTrackRef,electrons.get()) ;
00059      }
00060    }
00061 
00062   event.put(electrons) ;
00063  }
00064 
00065 void GsfElectronCoreEcalDrivenProducer::produceEcalDrivenCore( const GsfTrackRef & gsfTrackRef, GsfElectronCoreCollection * electrons )
00066  {
00067   GsfElectronCore * eleCore = new GsfElectronCore(gsfTrackRef) ;
00068 
00069   if (!eleCore->ecalDrivenSeed())
00070    { delete eleCore ; return ; }
00071 
00072   GsfElectronCoreBaseProducer::fillElectronCore(eleCore) ;
00073 
00074   edm::RefToBase<TrajectorySeed> seed = gsfTrackRef->extra()->seedRef() ;
00075   ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>() ;
00076   edm::RefToBase<CaloCluster> caloCluster = elseed->caloCluster() ;
00077   SuperClusterRef scRef = caloCluster.castTo<SuperClusterRef>() ;
00078   if (!scRef.isNull())
00079    {
00080     eleCore->setSuperCluster(scRef) ;
00081     electrons->push_back(*eleCore) ;
00082    }
00083   else
00084    { edm::LogWarning("GsfElectronCoreEcalDrivenProducer")<<"Seed CaloCluster is not a SuperCluster, unexpected..." ; }
00085 
00086   delete eleCore ;
00087  }
00088 
00089 GsfElectronCoreEcalDrivenProducer::~GsfElectronCoreEcalDrivenProducer()
00090  {}
00091