CMS 3D CMS Logo

Public Member Functions

GsfElectronCoreEcalDrivenProducer Class Reference

#include <GsfElectronCoreEcalDrivenProducer.h>

Inheritance diagram for GsfElectronCoreEcalDrivenProducer:
GsfElectronCoreBaseProducer edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 GsfElectronCoreEcalDrivenProducer (const edm::ParameterSet &conf)
virtual void produce (edm::Event &, const edm::EventSetup &)
virtual ~GsfElectronCoreEcalDrivenProducer ()

Detailed Description

Definition at line 6 of file GsfElectronCoreEcalDrivenProducer.h.


Constructor & Destructor Documentation

GsfElectronCoreEcalDrivenProducer::GsfElectronCoreEcalDrivenProducer ( const edm::ParameterSet conf) [explicit]
GsfElectronCoreEcalDrivenProducer::~GsfElectronCoreEcalDrivenProducer ( ) [virtual]

Definition at line 68 of file GsfElectronCoreEcalDrivenProducer.cc.

 {}

Member Function Documentation

void GsfElectronCoreEcalDrivenProducer::produce ( edm::Event event,
const edm::EventSetup setup 
) [virtual]

Implements edm::EDProducer.

Definition at line 31 of file GsfElectronCoreEcalDrivenProducer.cc.

References edm::RefToBase< T >::castTo(), GsfElectronCoreBaseProducer::fillElectronCore(), GsfElectronCoreBaseProducer::gsfTracksH_, i, GsfElectronCoreBaseProducer::initEvent(), edm::Ref< C, T, F >::isNull(), and edm::Handle< T >::product().

 {
  // base input
  GsfElectronCoreBaseProducer::initEvent(event,setup) ;

  // output
  std::auto_ptr<GsfElectronCoreCollection> electrons(new GsfElectronCoreCollection) ;

  // loop on ecal driven tracks
  const GsfTrackCollection * gsfTrackCollection = gsfTracksH_.product() ;
  for ( unsigned int i=0 ; i<gsfTrackCollection->size() ; ++i )
   {
    const GsfTrackRef gsfTrackRef = edm::Ref<GsfTrackCollection>(gsfTracksH_,i) ;
    GsfElectronCore * ele = new GsfElectronCore(gsfTrackRef) ;

    if (!ele->ecalDrivenSeed())
     { delete ele ; continue ; }

    GsfElectronCoreBaseProducer::fillElectronCore(ele) ;

    edm::RefToBase<TrajectorySeed> seed = gsfTrackRef->extra()->seedRef() ;
    ElectronSeedRef elseed = seed.castTo<ElectronSeedRef>() ;
    edm::RefToBase<CaloCluster> caloCluster = elseed->caloCluster() ;
    SuperClusterRef scRef = caloCluster.castTo<SuperClusterRef>() ;
    if (!scRef.isNull())
     {
      ele->setSuperCluster(scRef) ;
      electrons->push_back(*ele) ;
     }
    else
     { edm::LogWarning("GsfElectronCoreEcalDrivenProducer")<<"Seed CaloCluster is not a SuperCluster, unexpected..." ; }

    delete ele ;
   }
  event.put(electrons) ;
 }