CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
PFPhotonTranslator Class Reference

#include <PFPhotonTranslator.h>

Inheritance diagram for PFPhotonTranslator:
edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

Public Types

typedef std::vector
< edm::Handle< edm::ValueMap
< double > > > 
IsolationValueMaps
 
- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
typedef WorkerT< EDProducerWorkerType
 
- Public Types inherited from edm::ProducerBase
typedef
ProductRegistryHelper::TypeLabelList 
TypeLabelList
 

Public Member Functions

virtual void beginRun (edm::Run &run, const edm::EventSetup &c)
 
 PFPhotonTranslator (const edm::ParameterSet &)
 
virtual void produce (edm::Event &, const edm::EventSetup &)
 
 ~PFPhotonTranslator ()
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
virtual ~EDProducer ()
 
- Public Member Functions inherited from edm::ProducerBase
 ProducerBase ()
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
boost::function< void(const
BranchDescription &)> 
registrationCallback () const
 used by the fwk to register list of products More...
 
virtual ~ProducerBase ()
 

Private Member Functions

const reco::PFCandidatecorrespondingDaughterCandidate (const reco::PFCandidate &cand, const reco::PFBlockElement &pfbe) const
 
void createBasicCluster (const reco::PFBlockElement &, reco::BasicClusterCollection &basicClusters, std::vector< const reco::PFCluster * > &, const reco::PFCandidate &coCandidate) const
 
void createBasicClusterPtrs (const edm::OrphanHandle< reco::BasicClusterCollection > &basicClustersHandle)
 
void createPhotonCores (const edm::OrphanHandle< reco::SuperClusterCollection > &superClustersHandle, reco::PhotonCoreCollection &photonCores)
 
void createPhotons (reco::VertexCollection &vertexCollection, const edm::OrphanHandle< reco::PhotonCoreCollection > &superClustersHandle, const CaloTopology *topology, const EcalRecHitCollection *barrelRecHits, const EcalRecHitCollection *endcapRecHits, const edm::Handle< CaloTowerCollection > &hcalTowersHandle, const IsolationValueMaps &isolationValues, reco::PhotonCollection &photons)
 
void createPreshowerCluster (const reco::PFBlockElement &PFBE, reco::PreshowerClusterCollection &preshowerClusters, unsigned plane) const
 
void createPreshowerClusterPtrs (const edm::OrphanHandle< reco::PreshowerClusterCollection > &preshowerClustersHandle)
 
void createSuperClusters (const reco::PFCandidateCollection &, reco::SuperClusterCollection &superClusters) const
 
bool fetchCandidateCollection (edm::Handle< reco::PFCandidateCollection > &c, const edm::InputTag &tag, const edm::Event &iEvent) const
 

Private Attributes

edm::InputTag barrelEcalHits_
 
std::vector
< reco::CaloClusterPtrVector
basicClusterPtr_
 
std::vector
< reco::BasicClusterCollection
basicClusters_
 
std::vector< reco::CandidatePtrCandidatePtr_
 
std::vector
< reco::SuperClusterRef
egSCRef_
 
bool emptyIsOk_
 
edm::InputTag endcapEcalHits_
 
edm::InputTag hcalTowers_
 
double hOverEConeSize_
 
std::vector< edm::InputTaginputTagIsoVals_
 
edm::InputTag inputTagPFCandidates_
 
std::string PFBasicClusterCollection_
 
std::vector< std::vector
< const reco::PFCluster * > > 
pfClusters_
 
std::string PFPhotonCollection_
 
std::string PFPhotonCoreCollection_
 
std::string PFPreshowerClusterCollection_
 
std::string PFSuperClusterCollection_
 
std::vector< int > photPFCandidateIndex_
 
std::vector
< reco::CaloClusterPtrVector
preshowerClusterPtr_
 
std::vector
< reco::PreshowerClusterCollection
preshowerClusters_
 
std::vector
< reco::SuperClusterCollection
superClusters_
 
edm::ESHandle< CaloGeometrytheCaloGeom_
 
edm::ESHandle< CaloTopologytheCaloTopo_
 
std::string vertexProducer_
 

Additional Inherited Members

- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDProducer
CurrentProcessingContext const * currentContext () const
 
- Protected Member Functions inherited from edm::ProducerBase
template<class TProducer , class TMethod >
void callWhenNewProductsRegistered (TProducer *iProd, TMethod iMethod)
 

Detailed Description

Definition at line 62 of file PFPhotonTranslator.h.

Member Typedef Documentation

Definition at line 72 of file PFPhotonTranslator.h.

Constructor & Destructor Documentation

PFPhotonTranslator::PFPhotonTranslator ( const edm::ParameterSet iConfig)
explicit

Definition at line 62 of file PFPhotonTranslator.cc.

References edm::ParameterSet::exists(), and edm::ParameterSet::getParameter().

62  {
63 
64  //std::cout << "PFPhotonTranslator" << std::endl;
65 
67  = iConfig.getParameter<edm::InputTag>("PFCandidate");
68 
69 
70  edm::ParameterSet isoVals = iConfig.getParameter<edm::ParameterSet> ("isolationValues");
71  inputTagIsoVals_.push_back(isoVals.getParameter<edm::InputTag>("pfChargedHadrons"));
72  inputTagIsoVals_.push_back(isoVals.getParameter<edm::InputTag>("pfPhotons"));
73  inputTagIsoVals_.push_back(isoVals.getParameter<edm::InputTag>("pfNeutralHadrons"));
74 
75 
76  PFBasicClusterCollection_ = iConfig.getParameter<std::string>("PFBasicClusters");
77  PFPreshowerClusterCollection_ = iConfig.getParameter<std::string>("PFPreshowerClusters");
78  PFSuperClusterCollection_ = iConfig.getParameter<std::string>("PFSuperClusters");
79 
80  PFPhotonCoreCollection_ = iConfig.getParameter<std::string>("PFPhotonCores");
81  PFPhotonCollection_ = iConfig.getParameter<std::string>("PFPhotons");
82 
83  vertexProducer_ = iConfig.getParameter<std::string>("primaryVertexProducer");
84 
85  barrelEcalHits_ = iConfig.getParameter<edm::InputTag>("barrelEcalHits");
86  endcapEcalHits_ = iConfig.getParameter<edm::InputTag>("endcapEcalHits");
87 
88  hcalTowers_ = iConfig.getParameter<edm::InputTag>("hcalTowers");
89  hOverEConeSize_ = iConfig.getParameter<double>("hOverEConeSize");
90 
91  if (iConfig.exists("emptyIsOk")) emptyIsOk_ = iConfig.getParameter<bool>("emptyIsOk");
92  else emptyIsOk_=false;
93 
94  produces<reco::BasicClusterCollection>(PFBasicClusterCollection_);
95  produces<reco::PreshowerClusterCollection>(PFPreshowerClusterCollection_);
96  produces<reco::SuperClusterCollection>(PFSuperClusterCollection_);
97  produces<reco::PhotonCoreCollection>(PFPhotonCoreCollection_);
98  produces<reco::PhotonCollection>(PFPhotonCollection_);
99 
100 }
T getParameter(std::string const &) const
std::string PFPhotonCoreCollection_
edm::InputTag hcalTowers_
edm::InputTag endcapEcalHits_
bool exists(std::string const &parameterName) const
checks if a parameter exists
std::string PFPhotonCollection_
std::vector< edm::InputTag > inputTagIsoVals_
std::string PFBasicClusterCollection_
std::string PFSuperClusterCollection_
edm::InputTag barrelEcalHits_
std::string PFPreshowerClusterCollection_
edm::InputTag inputTagPFCandidates_
PFPhotonTranslator::~PFPhotonTranslator ( )

Definition at line 102 of file PFPhotonTranslator.cc.

102 {}

Member Function Documentation

void PFPhotonTranslator::beginRun ( edm::Run run,
const edm::EventSetup c 
)
virtual

Reimplemented from edm::EDProducer.

Definition at line 104 of file PFPhotonTranslator.cc.

104  {
105 
106 }
const reco::PFCandidate & PFPhotonTranslator::correspondingDaughterCandidate ( const reco::PFCandidate cand,
const reco::PFBlockElement pfbe 
) const
private

Definition at line 649 of file PFPhotonTranslator.cc.

References reco::CompositeCandidate::begin(), reco::PFCandidate::elementsInBlocks(), reco::CompositeCandidate::end(), and reco::PFBlockElement::index().

650 {
651  unsigned refindex=pfbe.index();
652  // std::cout << " N daughters " << cand.numberOfDaughters() << std::endl;
653  reco::PFCandidate::const_iterator myDaughterCandidate=cand.begin();
655 
656  for(;myDaughterCandidate!=itend;++myDaughterCandidate)
657  {
658  const reco::PFCandidate * myPFCandidate = (const reco::PFCandidate*)&*myDaughterCandidate;
659  if(myPFCandidate->elementsInBlocks().size()!=1)
660  {
661  // std::cout << " Daughter with " << myPFCandidate.elementsInBlocks().size()<< " element in block " << std::endl;
662  return cand;
663  }
664  if(myPFCandidate->elementsInBlocks()[0].second==refindex)
665  {
666  // std::cout << " Found it " << cand << std::endl;
667  return *myPFCandidate;
668  }
669  }
670  return cand;
671 }
virtual const_iterator end() const
last daughter const_iterator
const ElementsInBlocks & elementsInBlocks() const
Definition: PFCandidate.h:332
unsigned index() const
virtual const_iterator begin() const
first daughter const_iterator
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:33
void PFPhotonTranslator::createBasicCluster ( const reco::PFBlockElement PFBE,
reco::BasicClusterCollection basicClusters,
std::vector< const reco::PFCluster * > &  pfClusters,
const reco::PFCandidate coCandidate 
) const
private

Definition at line 361 of file PFPhotonTranslator.cc.

References reco::CaloCluster::algo(), reco::CaloCluster::caloID(), reco::PFBlockElement::clusterRef(), reco::CaloCluster::hitsAndFractions(), edm::Ref< C, T, F >::isNull(), reco::CaloCluster::position(), reco::PFCandidate::rawEcalEnergy(), and reco::CaloCluster::seed().

365 {
366  reco::PFClusterRef myPFClusterRef = PFBE.clusterRef();
367  if(myPFClusterRef.isNull()) return;
368 
369  const reco::PFCluster & myPFCluster (*myPFClusterRef);
370  pfClusters.push_back(&myPFCluster);
371  //std::cout << " Creating BC " << myPFCluster.energy() << " " << coCandidate.ecalEnergy() <<" "<< coCandidate.rawEcalEnergy() <<std::endl;
372  //std::cout << " # hits " << myPFCluster.hitsAndFractions().size() << std::endl;
373 
374 // basicClusters.push_back(reco::CaloCluster(myPFCluster.energy(),
375  basicClusters.push_back(reco::CaloCluster(coCandidate.rawEcalEnergy(),
376  myPFCluster.position(),
377  myPFCluster.caloID(),
378  myPFCluster.hitsAndFractions(),
379  myPFCluster.algo(),
380  myPFCluster.seed()));
381 }
double rawEcalEnergy() const
return corrected Ecal energy
Definition: PFCandidate.h:192
Particle flow cluster, see clustering algorithm in PFClusterAlgo.
Definition: PFCluster.h:42
bool isNull() const
Checks for null.
Definition: Ref.h:246
virtual PFClusterRef clusterRef() const
void PFPhotonTranslator::createBasicClusterPtrs ( const edm::OrphanHandle< reco::BasicClusterCollection > &  basicClustersHandle)
private

Definition at line 390 of file PFPhotonTranslator.cc.

References findQualityFiles::size.

391 {
392  unsigned size=photPFCandidateIndex_.size();
393  unsigned basicClusterCounter=0;
394  basicClusterPtr_.resize(size);
395 
396  for(unsigned iphot=0;iphot<size;++iphot) // loop on tracks
397  {
398  unsigned nbc=basicClusters_[iphot].size();
399  for(unsigned ibc=0;ibc<nbc;++ibc) // loop on basic clusters
400  {
401  // std::cout << "Track "<< iGSF << " ref " << basicClusterCounter << std::endl;
402  reco::CaloClusterPtr bcPtr(basicClustersHandle,basicClusterCounter);
403  basicClusterPtr_[iphot].push_back(bcPtr);
404  ++basicClusterCounter;
405  }
406  }
407 }
std::vector< int > photPFCandidateIndex_
std::vector< reco::BasicClusterCollection > basicClusters_
std::vector< reco::CaloClusterPtrVector > basicClusterPtr_
tuple size
Write out results.
void PFPhotonTranslator::createPhotonCores ( const edm::OrphanHandle< reco::SuperClusterCollection > &  superClustersHandle,
reco::PhotonCoreCollection photonCores 
)
private

Definition at line 527 of file PFPhotonTranslator.cc.

References reco::PhotonCore::setPFlowPhoton(), reco::PhotonCore::setPflowSuperCluster(), reco::PhotonCore::setStandardPhoton(), and reco::PhotonCore::setSuperCluster().

528 {
529 
530  //std::cout << "createPhotonCores" << std::endl;
531 
532  unsigned nphot=photPFCandidateIndex_.size();
533 
534  for(unsigned iphot=0;iphot<nphot;++iphot)
535  {
536  //std::cout << "iphot="<<iphot<<std::endl;
537 
538  reco::PhotonCore myPhotonCore;
539 
540  reco::SuperClusterRef SCref(reco::SuperClusterRef(superClustersHandle, iphot));
541 
542  myPhotonCore.setPFlowPhoton(true);
543  myPhotonCore.setStandardPhoton(false);
544  myPhotonCore.setPflowSuperCluster(SCref);
545  myPhotonCore.setSuperCluster(egSCRef_[iphot]);
546  photonCores.push_back(myPhotonCore);
547 
548  }
549 
550  //std::cout << "end of createPhotonCores"<<std::endl;
551 }
void setPflowSuperCluster(const reco::SuperClusterRef &r)
set reference to PFlow SuperCluster
Definition: PhotonCore.h:53
void setSuperCluster(const reco::SuperClusterRef &r)
set reference to SuperCluster
Definition: PhotonCore.h:51
std::vector< reco::SuperClusterRef > egSCRef_
void setStandardPhoton(const bool prov)
Definition: PhotonCore.h:60
void setPFlowPhoton(const bool prov)
set the provenance
Definition: PhotonCore.h:59
std::vector< int > photPFCandidateIndex_
void PFPhotonTranslator::createPhotons ( reco::VertexCollection vertexCollection,
const edm::OrphanHandle< reco::PhotonCoreCollection > &  superClustersHandle,
const CaloTopology topology,
const EcalRecHitCollection barrelRecHits,
const EcalRecHitCollection endcapRecHits,
const edm::Handle< CaloTowerCollection > &  hcalTowersHandle,
const IsolationValueMaps isolationValues,
reco::PhotonCollection photons 
)
private

Definition at line 553 of file PFPhotonTranslator.cc.

References reco::Photon::PflowIsolationVariables::chargedHadronIso, EcalClusterTools::covariances(), EcalClusterTools::e1x5(), reco::Photon::ShowerShape::e1x5, reco::Photon::ShowerShape::e2x5, EcalClusterTools::e2x5Max(), EcalClusterTools::e3x3(), reco::Photon::ShowerShape::e3x3, EcalClusterTools::e5x5(), reco::Photon::ShowerShape::e5x5, EcalBarrel, EcalEndcap, EcalClusterTools::eMax(), geometry, EgammaTowerIsolation::getTowerESum(), reco::Photon::ShowerShape::hcalDepth1OverEcal, reco::Photon::ShowerShape::hcalDepth2OverEcal, EcalClusterTools::localCovariances(), reco::Photon::ShowerShape::maxEnergyXtal, edm::Handle< T >::product(), edm::ESHandle< class >::product(), reco::Photon::ShowerShape::sigmaEtaEta, reco::Photon::ShowerShape::sigmaIetaIeta, findQualityFiles::size, and mathSSE::sqrt().

554 {
555 
556  //cout << "createPhotons" << endl;
557 
558  unsigned nphot=photPFCandidateIndex_.size();
559 
560  for(unsigned iphot=0;iphot<nphot;++iphot)
561  {
562  //std::cout << "iphot="<<iphot<<std::endl;
563 
564  reco::PhotonCoreRef PCref(reco::PhotonCoreRef(photonCoresHandle, iphot));
565 
566  math::XYZPoint vtx(0.,0.,0.);
567  if (vertexCollection.size()>0) vtx = vertexCollection.begin()->position();
568  //std::cout << "vtx made" << std::endl;
569 
570  math::XYZVector direction = PCref->pfSuperCluster()->position() - vtx;
571 
572  //It could be that pfSC energy gives not the best resolution : use smaller agregates for some cases ?
573  math::XYZVector P3 = direction.unit() * PCref->pfSuperCluster()->energy();
574  LorentzVector P4(P3.x(), P3.y(), P3.z(), PCref->pfSuperCluster()->energy());
575 
576  reco::Photon myPhoton(P4, PCref->pfSuperCluster()->position(), PCref, vtx);
577  //cout << "photon created"<<endl;
578 
579 
581  myPFIso.chargedHadronIso=(*isolationValues[0])[CandidatePtr_[iphot]];
582  myPFIso.photonIso=(*isolationValues[1])[CandidatePtr_[iphot]];
583  myPFIso.neutralHadronIso=(*isolationValues[2])[CandidatePtr_[iphot]];
584  myPhoton.setPflowIsolationVariables(myPFIso);
585 
586  //cout << "chargedHadronIso="<<myPhoton.chargedHadronIso()<<" photonIso="<<myPhoton.photonIso()<<" neutralHadronIso="<<myPhoton.neutralHadronIso()<<endl;
587 
588 
589  if (basicClusters_[iphot].size()>0){
590  // Cluster shape variables
591  //Algorithms from EcalClusterTools could be adapted to PF photons ? (not based on 5x5 BC)
592  //It happens that energy computed in eg e5x5 is greater than pfSC energy (EcalClusterTools gathering energies from adjacent crystals even if not belonging to the SC)
593  const EcalRecHitCollection* hits = 0 ;
594  int subdet = PCref->pfSuperCluster()->seed()->hitsAndFractions()[0].first.subdetId();
595  if (subdet==EcalBarrel) hits = barrelRecHits;
596  else if (subdet==EcalEndcap) hits = endcapRecHits;
598 
599  float maxXtal = EcalClusterTools::eMax( *(PCref->pfSuperCluster()->seed()), &(*hits) );
600  //cout << "maxXtal="<<maxXtal<<endl;
601  float e1x5 = EcalClusterTools::e1x5( *(PCref->pfSuperCluster()->seed()), &(*hits), &(*topology));
602  //cout << "e1x5="<<e1x5<<endl;
603  float e2x5 = EcalClusterTools::e2x5Max( *(PCref->pfSuperCluster()->seed()), &(*hits), &(*topology));
604  //cout << "e2x5="<<e2x5<<endl;
605  float e3x3 = EcalClusterTools::e3x3( *(PCref->pfSuperCluster()->seed()), &(*hits), &(*topology));
606  //cout << "e3x3="<<e3x3<<endl;
607  float e5x5 = EcalClusterTools::e5x5( *(PCref->pfSuperCluster()->seed()), &(*hits), &(*topology));
608  //cout << "e5x5="<<e5x5<<endl;
609  std::vector<float> cov = EcalClusterTools::covariances( *(PCref->pfSuperCluster()->seed()), &(*hits), &(*topology), geometry);
610  float sigmaEtaEta = sqrt(cov[0]);
611  //cout << "sigmaEtaEta="<<sigmaEtaEta<<endl;
612  std::vector<float> locCov = EcalClusterTools::localCovariances( *(PCref->pfSuperCluster()->seed()), &(*hits), &(*topology));
613  float sigmaIetaIeta = sqrt(locCov[0]);
614  //cout << "sigmaIetaIeta="<<sigmaIetaIeta<<endl;
615  //float r9 =e3x3/(PCref->pfSuperCluster()->rawEnergy());
616 
617 
618  // calculate HoE
619  const CaloTowerCollection* hcalTowersColl = hcalTowersHandle.product();
620  EgammaTowerIsolation towerIso1(hOverEConeSize_,0.,0.,1,hcalTowersColl) ;
621  EgammaTowerIsolation towerIso2(hOverEConeSize_,0.,0.,2,hcalTowersColl) ;
622  double HoE1=towerIso1.getTowerESum(&(*PCref->pfSuperCluster()))/PCref->pfSuperCluster()->energy();
623  double HoE2=towerIso2.getTowerESum(&(*PCref->pfSuperCluster()))/PCref->pfSuperCluster()->energy();
624  //cout << "HoE1="<<HoE1<<endl;
625  //cout << "HoE2="<<HoE2<<endl;
626 
627  reco::Photon::ShowerShape showerShape;
628  showerShape.e1x5= e1x5;
629  showerShape.e2x5= e2x5;
630  showerShape.e3x3= e3x3;
631  showerShape.e5x5= e5x5;
632  showerShape.maxEnergyXtal = maxXtal;
633  showerShape.sigmaEtaEta = sigmaEtaEta;
634  showerShape.sigmaIetaIeta = sigmaIetaIeta;
635  showerShape.hcalDepth1OverEcal = HoE1;
636  showerShape.hcalDepth2OverEcal = HoE2;
637  myPhoton.setShowerShapeVariables ( showerShape );
638  //cout << "shower shape variables filled"<<endl;
639  }
640 
641  photons.push_back(myPhoton);
642 
643  }
644 
645  //std::cout << "end of createPhotons"<<std::endl;
646 }
math::XYZTLorentzVector LorentzVector
tuple vertexCollection
static std::vector< float > covariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, const CaloGeometry *geometry, float w0=4.7)
static std::vector< float > localCovariances(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology, float w0=4.7)
T sqrt(T t)
Definition: SSEVec.h:28
static float e3x3(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
edm::ESHandle< CaloGeometry > theCaloGeom_
std::vector< int > photPFCandidateIndex_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
std::vector< reco::BasicClusterCollection > basicClusters_
static float eMax(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits)
T const * product() const
Definition: ESHandle.h:62
T const * product() const
Definition: Handle.h:74
ESHandle< TrackerGeometry > geometry
static float e2x5Max(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e5x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
static float e1x5(const reco::BasicCluster &cluster, const EcalRecHitCollection *recHits, const CaloTopology *topology)
std::vector< reco::CandidatePtr > CandidatePtr_
tuple size
Write out results.
void PFPhotonTranslator::createPreshowerCluster ( const reco::PFBlockElement PFBE,
reco::PreshowerClusterCollection preshowerClusters,
unsigned  plane 
) const
private

Definition at line 383 of file PFPhotonTranslator.cc.

References reco::PFBlockElement::clusterRef().

384 {
385  reco::PFClusterRef myPFClusterRef= PFBE.clusterRef();
386  preshowerClusters.push_back(reco::PreshowerCluster(myPFClusterRef->energy(),myPFClusterRef->position(),
387  myPFClusterRef->hitsAndFractions(),plane));
388 }
virtual PFClusterRef clusterRef() const
void PFPhotonTranslator::createPreshowerClusterPtrs ( const edm::OrphanHandle< reco::PreshowerClusterCollection > &  preshowerClustersHandle)
private

Definition at line 409 of file PFPhotonTranslator.cc.

References findQualityFiles::size.

410 {
411  unsigned size=photPFCandidateIndex_.size();
412  unsigned psClusterCounter=0;
413  preshowerClusterPtr_.resize(size);
414 
415  for(unsigned iphot=0;iphot<size;++iphot) // loop on tracks
416  {
417  unsigned nbc=preshowerClusters_[iphot].size();
418  for(unsigned ibc=0;ibc<nbc;++ibc) // loop on basic clusters
419  {
420  // std::cout << "Track "<< iGSF << " ref " << basicClusterCounter << std::endl;
421  reco::CaloClusterPtr psPtr(preshowerClustersHandle,psClusterCounter);
422  preshowerClusterPtr_[iphot].push_back(psPtr);
423  ++psClusterCounter;
424  }
425  }
426 }
std::vector< reco::PreshowerClusterCollection > preshowerClusters_
std::vector< int > photPFCandidateIndex_
std::vector< reco::CaloClusterPtrVector > preshowerClusterPtr_
tuple size
Write out results.
void PFPhotonTranslator::createSuperClusters ( const reco::PFCandidateCollection pfCand,
reco::SuperClusterCollection superClusters 
) const
private

Definition at line 428 of file PFPhotonTranslator.cc.

References reco::SuperCluster::addCluster(), reco::CaloCluster::addHitAndFraction(), reco::SuperCluster::addPreshowerCluster(), PFClusterWidthAlgo::pflowEtaWidth(), PFClusterWidthAlgo::pflowPhiWidth(), reco::SuperCluster::rawEnergy(), reco::SuperCluster::setEtaWidth(), reco::SuperCluster::setPhiWidth(), reco::SuperCluster::setPreshowerEnergy(), and reco::SuperCluster::setSeed().

430 {
431  unsigned nphot=photPFCandidateIndex_.size();
432  for(unsigned iphot=0;iphot<nphot;++iphot)
433  {
434 
435  //cout << "SC iphot=" << iphot << endl;
436 
437  // Computes energy position a la e/gamma
438  double sclusterE=0;
439  double posX=0.;
440  double posY=0.;
441  double posZ=0.;
442 
443  unsigned nbasics=basicClusters_[iphot].size();
444  for(unsigned ibc=0;ibc<nbasics;++ibc)
445  {
446  //cout << "BC in SC : iphot="<<iphot<<endl;
447 
448  double e = basicClusters_[iphot][ibc].energy();
449  sclusterE += e;
450  posX += e * basicClusters_[iphot][ibc].position().X();
451  posY += e * basicClusters_[iphot][ibc].position().Y();
452  posZ += e * basicClusters_[iphot][ibc].position().Z();
453  }
454  posX /=sclusterE;
455  posY /=sclusterE;
456  posZ /=sclusterE;
457 
458  /*
459  if(pfCand[gsfPFCandidateIndex_[iphot]].gsfTrackRef()!=GsfTrackRef_[iphot])
460  {
461  edm::LogError("PFElectronTranslator") << " Major problem in PFElectron Translator" << std::endl;
462  }
463  */
464 
465  // compute the width
466  PFClusterWidthAlgo pfwidth(pfClusters_[iphot]);
467 
468  double correctedEnergy=pfCand[photPFCandidateIndex_[iphot]].ecalEnergy();
469  reco::SuperCluster mySuperCluster(correctedEnergy,math::XYZPoint(posX,posY,posZ));
470  // protection against empty basic cluster collection ; the value is -2 in this case
471  if(nbasics)
472  {
473 // std::cout << "SuperCluster creation; energy " << pfCand[gsfPFCandidateIndex_[iphot]].ecalEnergy();
474 // std::cout << " " << pfCand[gsfPFCandidateIndex_[iphot]].rawEcalEnergy() << std::endl;
475 // std::cout << "Seed energy from basic " << basicClusters_[iphot][0].energy() << std::endl;
476  mySuperCluster.setSeed(basicClusterPtr_[iphot][0]);
477  }
478  else
479  {
480  // std::cout << "SuperCluster creation ; seed energy " << 0 << std::endl;
481  //std::cout << "SuperCluster creation ; energy " << pfCand[photPFCandidateIndex_[iphot]].ecalEnergy();
482  //std::cout << " " << pfCand[photPFCandidateIndex_[iphot]].rawEcalEnergy() << std::endl;
483 // std::cout << " No seed found " << 0 << std::endl;
484 // std::cout << " MVA " << pfCand[gsfPFCandidateIndex_[iphot]].mva_e_pi() << std::endl;
485  mySuperCluster.setSeed(reco::CaloClusterPtr());
486  }
487  // the seed should be the first basic cluster
488 
489  for(unsigned ibc=0;ibc<nbasics;++ibc)
490  {
491  mySuperCluster.addCluster(basicClusterPtr_[iphot][ibc]);
492  // std::cout <<"Adding Ref to SC " << basicClusterPtr_[iphot][ibc].index() << std::endl;
493  const std::vector< std::pair<DetId, float> > & v1 = basicClusters_[iphot][ibc].hitsAndFractions();
494  // std::cout << " Number of cells " << v1.size() << std::endl;
495  for( std::vector< std::pair<DetId, float> >::const_iterator diIt = v1.begin();
496  diIt != v1.end();
497  ++diIt ) {
498  // std::cout << " Adding DetId " << (diIt->first).rawId() << " " << diIt->second << std::endl;
499  mySuperCluster.addHitAndFraction(diIt->first,diIt->second);
500  } // loop over rechits
501  }
502 
503  unsigned nps=preshowerClusterPtr_[iphot].size();
504  for(unsigned ips=0;ips<nps;++ips)
505  {
506  mySuperCluster.addPreshowerCluster(preshowerClusterPtr_[iphot][ips]);
507  }
508 
509 
510  // Set the preshower energy
511  mySuperCluster.setPreshowerEnergy(pfCand[photPFCandidateIndex_[iphot]].pS1Energy()+
512  pfCand[photPFCandidateIndex_[iphot]].pS2Energy());
513 
514  // Set the cluster width
515  mySuperCluster.setEtaWidth(pfwidth.pflowEtaWidth());
516  mySuperCluster.setPhiWidth(pfwidth.pflowPhiWidth());
517  // Force the computation of rawEnergy_ of the reco::SuperCluster
518  mySuperCluster.rawEnergy();
519 
520  //cout << "SC energy="<< mySuperCluster.energy()<<endl;
521 
522  superClusters.push_back(mySuperCluster);
523  //std::cout << "nb super clusters in collection : "<<superClusters.size()<<std::endl;
524  }
525 }
std::vector< int > photPFCandidateIndex_
std::vector< std::vector< const reco::PFCluster * > > pfClusters_
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:13
std::vector< reco::BasicClusterCollection > basicClusters_
std::vector< reco::CaloClusterPtrVector > preshowerClusterPtr_
std::vector< reco::CaloClusterPtrVector > basicClusterPtr_
bool PFPhotonTranslator::fetchCandidateCollection ( edm::Handle< reco::PFCandidateCollection > &  c,
const edm::InputTag tag,
const edm::Event iEvent 
) const
private

Definition at line 342 of file PFPhotonTranslator.cc.

References newFWLiteAna::found, and edm::Event::getByLabel().

344  {
345  bool found = iEvent.getByLabel(tag, c);
346 
347  if(!found && !emptyIsOk_)
348  {
349  std::ostringstream err;
350  err<<" cannot get PFCandidates: "
351  <<tag<<std::endl;
352  edm::LogError("PFPhotonTranslator")<<err.str();
353  }
354  return found;
355 
356 }
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
void PFPhotonTranslator::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
virtual

Implements edm::EDProducer.

Definition at line 108 of file PFPhotonTranslator.cc.

References reco::PFBlockElement::ECAL, asciidump::elements, reco::PFCandidate::elementsInBlocks(), reco::PFCandidate::gamma, edm::EventSetup::get(), edm::Event::getByLabel(), i, edm::Ref< C, T, F >::isNull(), edm::HandleBase::isValid(), j, reco::PFCandidate::particleId(), reco::tau::pfCandidates(), edm::Handle< T >::product(), reco::PFBlockElement::PS1, reco::PFBlockElement::PS2, edm::Event::put(), ntuplemaker::status, reco::PFCandidate::superClusterRef(), reco::PFBlockElement::type(), and GoodVertex_cfg::vertexCollection.

109  {
110 
111  std::auto_ptr<reco::BasicClusterCollection>
112  basicClusters_p(new reco::BasicClusterCollection);
113 
114  std::auto_ptr<reco::PreshowerClusterCollection>
115  psClusters_p(new reco::PreshowerClusterCollection);
116 
117 
118  reco::SuperClusterCollection outputSuperClusterCollection;
119  reco::PhotonCoreCollection outputPhotonCoreCollection;
120  reco::PhotonCollection outputPhotonCollection;
121 
122  outputSuperClusterCollection.clear();
123  outputPhotonCoreCollection.clear();
124  outputPhotonCollection.clear();
125 
126 
128  bool status=fetchCandidateCollection(pfCandidates,
130  iEvent );
131 
132  Handle<reco::VertexCollection> vertexHandle;
133 
134 
135  IsolationValueMaps isolationValues(inputTagIsoVals_.size());
136  for (size_t j = 0; j<inputTagIsoVals_.size(); ++j) {
137  iEvent.getByLabel(inputTagIsoVals_[j], isolationValues[j]);
138  }
139 
140 
141  // clear the vectors
142  photPFCandidateIndex_.clear();
143  basicClusters_.clear();
144  pfClusters_.clear();
145  preshowerClusters_.clear();
146  superClusters_.clear();
147  basicClusterPtr_.clear();
148  preshowerClusterPtr_.clear();
149  CandidatePtr_.clear();
150  egSCRef_.clear();
151 
152 
153 
154  // loop on the candidates
155  //CC@@
156  // we need first to create AND put the SuperCluster,
157  // basic clusters and presh clusters collection
158  // in order to get a working Handle
159  unsigned ncand=(status)?pfCandidates->size():0;
160 
161  unsigned iphot=0;
162  for( unsigned i=0; i<ncand; ++i ) {
163 
164  const reco::PFCandidate& cand = (*pfCandidates)[i];
165  if(cand.particleId()!=reco::PFCandidate::gamma) continue;
166 
167  photPFCandidateIndex_.push_back(i);
168 
170  pfClusters_.push_back(std::vector<const reco::PFCluster *>());
173 
174  reco::PFCandidatePtr ptrToPFPhoton(pfCandidates,i);
175  CandidatePtr_.push_back(ptrToPFPhoton);
176  egSCRef_.push_back(cand.superClusterRef());
177  //std::cout << "PFPhoton cand " << iphot << std::endl;
178 
179  //std::cout << "Cand elements in blocks : " << cand.elementsInBlocks().size() << std::endl;
180 
181  for(unsigned iele=0; iele<cand.elementsInBlocks().size(); ++iele) {
182  // first get the block
183  reco::PFBlockRef blockRef = cand.elementsInBlocks()[iele].first;
184  //
185  unsigned elementIndex = cand.elementsInBlocks()[iele].second;
186  // check it actually exists
187  if(blockRef.isNull()) continue;
188 
189  // then get the elements of the block
190  const edm::OwnVector< reco::PFBlockElement >& elements = (*blockRef).elements();
191 
192  const reco::PFBlockElement & pfbe (elements[elementIndex]);
193  // The first ECAL element should be the cluster associated to the GSF; defined as the seed
194  if(pfbe.type()==reco::PFBlockElement::ECAL)
195  {
196 
197  //std::cout << "BlockElement ECAL" << std::endl;
198  // the Brem photons are saved as daughter PFCandidate; this
199  // is convenient to access the corrected energy
200  // std::cout << " Found candidate " << correspondingDaughterCandidate(coCandidate,pfbe) << " " << coCandidate << std::endl;
202  }
203  if(pfbe.type()==reco::PFBlockElement::PS1)
204  {
205  //std::cout << "BlockElement PS1" << std::endl;
207  }
208  if(pfbe.type()==reco::PFBlockElement::PS2)
209  {
210  //std::cout << "BlockElement PS2" << std::endl;
212  }
213 
214  } // loop on the elements
215 
216  // save the basic clusters
217  basicClusters_p->insert(basicClusters_p->end(),basicClusters_[iphot].begin(), basicClusters_[iphot].end());
218  // save the preshower clusters
219  psClusters_p->insert(psClusters_p->end(),preshowerClusters_[iphot].begin(),preshowerClusters_[iphot].end());
220 
221  ++iphot;
222 
223  } // loop on PFCandidates
224 
225 
226  //Save the basic clusters and get an handle as to be able to create valid Refs (thanks to Claude)
227  // std::cout << " Number of basic clusters " << basicClusters_p->size() << std::endl;
229  iEvent.put(basicClusters_p,PFBasicClusterCollection_);
230 
231  //preshower clusters
233  iEvent.put(psClusters_p,PFPreshowerClusterCollection_);
234 
235  // now that the Basic clusters are in the event, the Ref can be created
236  createBasicClusterPtrs(bcRefProd);
237  // now that the preshower clusters are in the event, the Ref can be created
238  createPreshowerClusterPtrs(psRefProd);
239 
240  // and now the Super cluster can be created with valid references
241  //if(status) createSuperClusters(*pfCandidates,*superClusters_p);
242  if(status) createSuperClusters(*pfCandidates,outputSuperClusterCollection);
243 
244  //std::cout << "nb superclusters in collection : "<<outputSuperClusterCollection.size()<<std::endl;
245 
246  // Let's put the super clusters in the event
247  std::auto_ptr<reco::SuperClusterCollection> superClusters_p(new reco::SuperClusterCollection(outputSuperClusterCollection));
248  const edm::OrphanHandle<reco::SuperClusterCollection> scRefProd = iEvent.put(superClusters_p,PFSuperClusterCollection_);
249 
250  /*
251  int ipho=0;
252  for (reco::SuperClusterCollection::const_iterator gamIter = scRefProd->begin(); gamIter != scRefProd->end(); ++gamIter){
253  std::cout << "SC i="<<ipho<<" energy="<<gamIter->energy()<<std::endl;
254  ipho++;
255  }
256  */
257 
258 
259  //create photon cores
260  //if(status) createPhotonCores(pfCandidates, scRefProd, *photonCores_p);
261  if(status) createPhotonCores(scRefProd, outputPhotonCoreCollection);
262 
263  //std::cout << "nb photoncores in collection : "<<outputPhotonCoreCollection.size()<<std::endl;
264 
265  // Put the photon cores in the event
266  std::auto_ptr<reco::PhotonCoreCollection> photonCores_p(new reco::PhotonCoreCollection(outputPhotonCoreCollection));
267  //std::cout << "photon core collection put in auto_ptr"<<std::endl;
268  const edm::OrphanHandle<reco::PhotonCoreCollection> pcRefProd = iEvent.put(photonCores_p,PFPhotonCoreCollection_);
269 
270  //std::cout << "photon core have been put in the event"<<std::endl;
271  /*
272  ipho=0;
273  for (reco::PhotonCoreCollection::const_iterator gamIter = pcRefProd->begin(); gamIter != pcRefProd->end(); ++gamIter){
274  std::cout << "PhotonCore i="<<ipho<<" energy="<<gamIter->pfSuperCluster()->energy()<<std::endl;
275  ipho++;
276  }
277  */
278 
279  //load vertices
281  bool validVertex=true;
282  iEvent.getByLabel(vertexProducer_, vertexHandle);
283  if (!vertexHandle.isValid()) {
284  edm::LogWarning("PhotonProducer") << "Error! Can't get the product primary Vertex Collection "<< "\n";
285  validVertex=false;
286  }
287  if (validVertex) vertexCollection = *(vertexHandle.product());
288 
289  //load Ecal rechits
290  bool validEcalRecHits=true;
291  Handle<EcalRecHitCollection> barrelHitHandle;
292  EcalRecHitCollection barrelRecHits;
293  iEvent.getByLabel(barrelEcalHits_, barrelHitHandle);
294  if (!barrelHitHandle.isValid()) {
295  edm::LogError("PhotonProducer") << "Error! Can't get the product "<<barrelEcalHits_.label();
296  validEcalRecHits=false;
297  }
298  if ( validEcalRecHits) barrelRecHits = *(barrelHitHandle.product());
299 
300  Handle<EcalRecHitCollection> endcapHitHandle;
301  iEvent.getByLabel(endcapEcalHits_, endcapHitHandle);
302  EcalRecHitCollection endcapRecHits;
303  if (!endcapHitHandle.isValid()) {
304  edm::LogError("PhotonProducer") << "Error! Can't get the product "<<endcapEcalHits_.label();
305  validEcalRecHits=false;
306  }
307  if( validEcalRecHits) endcapRecHits = *(endcapHitHandle.product());
308 
309  //load detector topology & geometry
310  iSetup.get<CaloGeometryRecord>().get(theCaloGeom_);
311 
312  edm::ESHandle<CaloTopology> pTopology;
313  iSetup.get<CaloTopologyRecord>().get(theCaloTopo_);
314  const CaloTopology *topology = theCaloTopo_.product();
315 
316  // get Hcal towers collection
317  Handle<CaloTowerCollection> hcalTowersHandle;
318  iEvent.getByLabel(hcalTowers_, hcalTowersHandle);
319 
320  //create photon collection
321  if(status) createPhotons(vertexCollection, pcRefProd, topology, &barrelRecHits, &endcapRecHits, hcalTowersHandle, isolationValues, outputPhotonCollection);
322 
323  // Put the photons in the event
324  std::auto_ptr<reco::PhotonCollection> photons_p(new reco::PhotonCollection(outputPhotonCollection));
325  //std::cout << "photon collection put in auto_ptr"<<std::endl;
326  const edm::OrphanHandle<reco::PhotonCollection> photonRefProd = iEvent.put(photons_p,PFPhotonCollection_);
327 
328  //std::cout << "photons have been put in the event"<<std::endl;
329 
330  /*
331  ipho=0;
332  for (reco::PhotonCollection::const_iterator gamIter = photonRefProd->begin(); gamIter != photonRefProd->end(); ++gamIter){
333  std::cout << "Photon i="<<ipho<<" energy="<<gamIter->pfSuperCluster()->energy()<<std::endl;
334  ipho++;
335  }
336  */
337 
338 
339 
340 }
Abstract base class for a PFBlock element (track, cluster...)
std::vector< reco::PreshowerClusterCollection > preshowerClusters_
int i
Definition: DBlmapReader.cc:9
void createBasicClusterPtrs(const edm::OrphanHandle< reco::BasicClusterCollection > &basicClustersHandle)
std::string PFPhotonCoreCollection_
edm::ESHandle< CaloTopology > theCaloTopo_
void createPhotons(reco::VertexCollection &vertexCollection, const edm::OrphanHandle< reco::PhotonCoreCollection > &superClustersHandle, const CaloTopology *topology, const EcalRecHitCollection *barrelRecHits, const EcalRecHitCollection *endcapRecHits, const edm::Handle< CaloTowerCollection > &hcalTowersHandle, const IsolationValueMaps &isolationValues, reco::PhotonCollection &photons)
edm::InputTag hcalTowers_
edm::InputTag endcapEcalHits_
list elements
Definition: asciidump.py:414
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
std::string PFPhotonCollection_
void createSuperClusters(const reco::PFCandidateCollection &, reco::SuperClusterCollection &superClusters) const
tuple vertexCollection
void createBasicCluster(const reco::PFBlockElement &, reco::BasicClusterCollection &basicClusters, std::vector< const reco::PFCluster * > &, const reco::PFCandidate &coCandidate) const
std::vector< edm::InputTag > inputTagIsoVals_
const ElementsInBlocks & elementsInBlocks() const
Definition: PFCandidate.h:332
std::vector< PFCandidatePtr > pfCandidates(const PFJet &jet, int particleId, bool sort=true)
std::vector< reco::SuperClusterRef > egSCRef_
std::vector< reco::SuperClusterCollection > superClusters_
bool isNull() const
Checks for null.
Definition: Ref.h:246
std::string PFBasicClusterCollection_
std::vector< SuperCluster > SuperClusterCollection
collection of SuperCluser objectr
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:84
std::string PFSuperClusterCollection_
int j
Definition: DBlmapReader.cc:9
std::vector< PreshowerCluster > PreshowerClusterCollection
collection of PreshowerCluster objects
edm::ESHandle< CaloGeometry > theCaloGeom_
void createPreshowerCluster(const reco::PFBlockElement &PFBE, reco::PreshowerClusterCollection &preshowerClusters, unsigned plane) const
bool isValid() const
Definition: HandleBase.h:76
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:355
void createPreshowerClusterPtrs(const edm::OrphanHandle< reco::PreshowerClusterCollection > &preshowerClustersHandle)
bool fetchCandidateCollection(edm::Handle< reco::PFCandidateCollection > &c, const edm::InputTag &tag, const edm::Event &iEvent) const
edm::InputTag barrelEcalHits_
std::string PFPreshowerClusterCollection_
std::vector< int > photPFCandidateIndex_
const reco::PFCandidate & correspondingDaughterCandidate(const reco::PFCandidate &cand, const reco::PFBlockElement &pfbe) const
edm::InputTag inputTagPFCandidates_
std::vector< std::vector< const reco::PFCluster * > > pfClusters_
std::vector< reco::BasicClusterCollection > basicClusters_
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
std::vector< edm::Handle< edm::ValueMap< double > > > IsolationValueMaps
std::vector< BasicCluster > BasicClusterCollection
collection of BasicCluster objects
std::vector< Photon > PhotonCollection
collectin of Photon objects
Definition: PhotonFwd.h:9
T const * product() const
Definition: Handle.h:74
std::string const & label() const
Definition: InputTag.h:25
std::vector< PhotonCore > PhotonCoreCollection
collectin of PhotonCore objects
Definition: PhotonCoreFwd.h:9
std::vector< reco::CaloClusterPtrVector > preshowerClusterPtr_
Particle reconstructed by the particle flow algorithm.
Definition: PFCandidate.h:33
void createPhotonCores(const edm::OrphanHandle< reco::SuperClusterCollection > &superClustersHandle, reco::PhotonCoreCollection &photonCores)
std::vector< reco::CaloClusterPtrVector > basicClusterPtr_
std::vector< reco::CandidatePtr > CandidatePtr_
tuple status
Definition: ntuplemaker.py:245
virtual ParticleType particleId() const
Definition: PFCandidate.h:314
reco::SuperClusterRef superClusterRef() const
return a reference to the corresponding SuperCluster if any
Definition: PFCandidate.cc:494

Member Data Documentation

edm::InputTag PFPhotonTranslator::barrelEcalHits_
private

Definition at line 119 of file PFPhotonTranslator.h.

std::vector<reco::CaloClusterPtrVector> PFPhotonTranslator::basicClusterPtr_
private

Definition at line 133 of file PFPhotonTranslator.h.

std::vector<reco::BasicClusterCollection> PFPhotonTranslator::basicClusters_
private

Definition at line 125 of file PFPhotonTranslator.h.

std::vector<reco::CandidatePtr> PFPhotonTranslator::CandidatePtr_
private

Definition at line 139 of file PFPhotonTranslator.h.

std::vector<reco::SuperClusterRef> PFPhotonTranslator::egSCRef_
private

Definition at line 141 of file PFPhotonTranslator.h.

bool PFPhotonTranslator::emptyIsOk_
private

Definition at line 146 of file PFPhotonTranslator.h.

edm::InputTag PFPhotonTranslator::endcapEcalHits_
private

Definition at line 120 of file PFPhotonTranslator.h.

edm::InputTag PFPhotonTranslator::hcalTowers_
private

Definition at line 121 of file PFPhotonTranslator.h.

double PFPhotonTranslator::hOverEConeSize_
private

Definition at line 122 of file PFPhotonTranslator.h.

std::vector<edm::InputTag> PFPhotonTranslator::inputTagIsoVals_
private

Definition at line 112 of file PFPhotonTranslator.h.

edm::InputTag PFPhotonTranslator::inputTagPFCandidates_
private

Definition at line 111 of file PFPhotonTranslator.h.

std::string PFPhotonTranslator::PFBasicClusterCollection_
private

Definition at line 113 of file PFPhotonTranslator.h.

std::vector<std::vector<const reco::PFCluster *> > PFPhotonTranslator::pfClusters_
private

Definition at line 127 of file PFPhotonTranslator.h.

std::string PFPhotonTranslator::PFPhotonCollection_
private

Definition at line 117 of file PFPhotonTranslator.h.

std::string PFPhotonTranslator::PFPhotonCoreCollection_
private

Definition at line 116 of file PFPhotonTranslator.h.

std::string PFPhotonTranslator::PFPreshowerClusterCollection_
private

Definition at line 114 of file PFPhotonTranslator.h.

std::string PFPhotonTranslator::PFSuperClusterCollection_
private

Definition at line 115 of file PFPhotonTranslator.h.

std::vector<int> PFPhotonTranslator::photPFCandidateIndex_
private

Definition at line 137 of file PFPhotonTranslator.h.

std::vector<reco::CaloClusterPtrVector> PFPhotonTranslator::preshowerClusterPtr_
private

Definition at line 135 of file PFPhotonTranslator.h.

std::vector<reco::PreshowerClusterCollection> PFPhotonTranslator::preshowerClusters_
private

Definition at line 129 of file PFPhotonTranslator.h.

std::vector<reco::SuperClusterCollection> PFPhotonTranslator::superClusters_
private

Definition at line 131 of file PFPhotonTranslator.h.

edm::ESHandle<CaloGeometry> PFPhotonTranslator::theCaloGeom_
private

Definition at line 144 of file PFPhotonTranslator.h.

edm::ESHandle<CaloTopology> PFPhotonTranslator::theCaloTopo_
private

Definition at line 143 of file PFPhotonTranslator.h.

std::string PFPhotonTranslator::vertexProducer_
private

Definition at line 118 of file PFPhotonTranslator.h.