CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes
EgammaHLTElectronDetaDphiProducer Class Reference

#include <RecoEgamma/EgammaHLTProducers/interface/EgammaHLTElectronDetaDphiProducer.h>

Inheritance diagram for EgammaHLTElectronDetaDphiProducer:
edm::stream::EDProducer<>

Public Member Functions

void beginRun (edm::Run const &, edm::EventSetup const &) override
 
 EgammaHLTElectronDetaDphiProducer (const edm::ParameterSet &)
 
void produce (edm::Event &, const edm::EventSetup &) override
 
 ~EgammaHLTElectronDetaDphiProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

std::pair< float, float > calDEtaDPhiSCTrk (reco::ElectronRef &eleref, const reco::BeamSpot::Point &BSPosition, const MagneticField *magField)
 

Static Private Member Functions

static reco::ElectronRef getEleRef (const reco::RecoEcalCandidateRef &recoEcalCandRef, const edm::Handle< reco::ElectronCollection > &electronHandle)
 

Private Attributes

const edm::EDGetTokenT< reco::BeamSpotbsProducer_
 
const edm::EDGetTokenT< reco::ElectronCollectionelectronProducer_
 
const MagneticFieldmagField_
 
const edm::EDGetTokenT< reco::RecoEcalCandidateCollectionrecoEcalCandidateProducer_
 
const bool useSCRefs_
 
const bool useTrackProjectionToEcal_
 
const bool variablesAtVtx_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Detailed Description

Author
Roberto Covarelli (CERN)
Id
EgammaHLTElectronDetaDphiProducer.cc,v 1.8 2012/03/29 14:15:04 sani Exp

Definition at line 37 of file EgammaHLTElectronDetaDphiProducer.h.

Constructor & Destructor Documentation

EgammaHLTElectronDetaDphiProducer::EgammaHLTElectronDetaDphiProducer ( const edm::ParameterSet config)
explicit

Definition at line 31 of file EgammaHLTElectronDetaDphiProducer.cc.

References useSCRefs_.

31  :
32  electronProducer_ (consumes<reco::ElectronCollection>(config.getParameter<edm::InputTag>("electronProducer"))),
33  bsProducer_ (consumes<reco::BeamSpot>(config.getParameter<edm::InputTag>("BSProducer"))),
34  recoEcalCandidateProducer_ (consumes<reco::RecoEcalCandidateCollection>(config.getParameter<edm::InputTag>("recoEcalCandidateProducer"))),
35  useSCRefs_ (config.getParameter<bool>("useSCRefs")),
36  useTrackProjectionToEcal_ (config.getParameter<bool>("useTrackProjectionToEcal")),
37  variablesAtVtx_ (config.getParameter<bool>("variablesAtVtx")) {
38 
39  //register your products
40  if(!useSCRefs_){
41  produces < reco::ElectronIsolationMap >( "Deta" ).setBranchAlias( "deta" );
42  produces < reco::ElectronIsolationMap >( "Dphi" ).setBranchAlias( "dphi" );
43  }else{
44  produces < reco::RecoEcalCandidateIsolationMap >( "Deta" ).setBranchAlias( "deta" );
45  produces < reco::RecoEcalCandidateIsolationMap >( "Dphi" ).setBranchAlias( "dphi" );
46  }
47 }
T getParameter(std::string const &) const
const edm::EDGetTokenT< reco::BeamSpot > bsProducer_
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateProducer_
const edm::EDGetTokenT< reco::ElectronCollection > electronProducer_
EgammaHLTElectronDetaDphiProducer::~EgammaHLTElectronDetaDphiProducer ( )
override

Definition at line 49 of file EgammaHLTElectronDetaDphiProducer.cc.

50 {}

Member Function Documentation

void EgammaHLTElectronDetaDphiProducer::beginRun ( edm::Run const &  ,
edm::EventSetup const &  iSetup 
)
override
std::pair< float, float > EgammaHLTElectronDetaDphiProducer::calDEtaDPhiSCTrk ( reco::ElectronRef eleref,
const reco::BeamSpot::Point BSPosition,
const MagneticField magField 
)
private

Definition at line 117 of file EgammaHLTElectronDetaDphiProducer.cc.

References egammaTools::ecalPhi(), TrajectoryStateOnSurface::globalPosition(), TrajectoryStateOnSurface::isValid(), magField_, reco::TransientTrack::stateOnSurface(), HiIsolationCommonParameters_cff::track, groupFilesInBlocks::tt, useTrackProjectionToEcal_, and variablesAtVtx_.

Referenced by produce().

117  {
118 
119  const reco::SuperClusterRef theClus = eleref->superCluster();
120  const math::XYZVector trackMom = eleref->track()->momentum();
121 
122  math::XYZPoint SCcorrPosition(theClus->x()-bsPosition.x(), theClus->y()-bsPosition.y() , theClus->z()-eleref->track()->vz() );
123  float deltaeta = fabs(SCcorrPosition.eta()-eleref->track()->eta());
124  float deltaphi = 999.;
125 
126  if (variablesAtVtx_) {
127  reco::TrackRef track = eleref->track();
129  TrajectoryStateOnSurface sclTSOS = tt.stateOnSurface(GlobalPoint(theClus->x(),theClus->y(),theClus->z()));
130 
131  if (sclTSOS.isValid()) {
132  EleRelPointPair scAtVtx(theClus->position(), sclTSOS.globalPosition(), bsPosition);
133  deltaeta = fabs(scAtVtx.dEta());
134  deltaphi = fabs(scAtVtx.dPhi());
135  }
136  } else if (useTrackProjectionToEcal_) {
137  const math::XYZPoint vertex(bsPosition.x(),bsPosition.y(),eleref->track()->vz());
138 
139  float phi1 = egammaTools::ecalPhi(*magField,trackMom,vertex,1);
140  float phi2 = egammaTools::ecalPhi(*magField,trackMom,vertex,-1);
141 
142  float deltaphi1=fabs( phi1 - theClus->position().phi() );
143  if(deltaphi1>6.283185308) deltaphi1 -= 6.283185308;
144  if(deltaphi1>3.141592654) deltaphi1 = 6.283185308-deltaphi1;
145 
146  float deltaphi2=fabs( phi2 - theClus->position().phi() );
147  if(deltaphi2>6.283185308) deltaphi2 -= 6.283185308;
148  if(deltaphi2>3.141592654) deltaphi2 = 6.283185308-deltaphi2;
149 
150  deltaphi = deltaphi1;
151  if(deltaphi2<deltaphi1){ deltaphi = deltaphi2;}
152  } else {
153  deltaphi=fabs(eleref->track()->outerPosition().phi()-theClus->phi());
154  if(deltaphi>6.283185308) deltaphi -= 6.283185308;
155  if(deltaphi>3.141592654) deltaphi = 6.283185308-deltaphi;
156  }
157 
158  return std::make_pair(deltaeta,deltaphi);
159 }
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
GlobalPoint globalPosition() const
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:30
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
double ecalPhi(const MagneticField &magField, const math::XYZVector &momentum, const math::XYZPoint &vertex, const int charge)
void EgammaHLTElectronDetaDphiProducer::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 52 of file EgammaHLTElectronDetaDphiProducer.cc.

References edm::ConfigurationDescriptions::add(), and edm::ParameterSetDescription::add().

52  {
54  desc.add<edm::InputTag>(("electronProducer"), edm::InputTag("hltEleAnyWP80PixelMatchElectronsL1Seeded"));
55  desc.add<edm::InputTag>(("BSProducer"), edm::InputTag("hltOnlineBeamSpot"));
56  desc.add<edm::InputTag>(("recoEcalCandidateProducer"), edm::InputTag());
57  desc.add<bool>(("useSCRefs"), false);
58  desc.add<bool>(("useTrackProjectionToEcal"), false);
59  desc.add<bool>(("variablesAtVtx"), true);
60  descriptions.add(("hltEgammaHLTElectronDetaDphiProducer"), desc);
61 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
reco::ElectronRef EgammaHLTElectronDetaDphiProducer::getEleRef ( const reco::RecoEcalCandidateRef recoEcalCandRef,
const edm::Handle< reco::ElectronCollection > &  electronHandle 
)
staticprivate

Definition at line 161 of file EgammaHLTElectronDetaDphiProducer.cc.

Referenced by produce().

162 {
163  reco::ElectronRef eleRef;
164  for(reco::ElectronCollection::const_iterator eleIt = electronHandle->begin(); eleIt != electronHandle->end(); eleIt++){
165  if(eleIt->superCluster()==recoEcalCandRef->superCluster()){
166  eleRef = reco::ElectronRef(electronHandle,eleIt - electronHandle->begin());
167  break;
168  }
169  }
170  return eleRef;
171 }
edm::Ref< ElectronCollection > ElectronRef
reference to an object in a collection of Electron objects
Definition: ElectronFwd.h:15
void EgammaHLTElectronDetaDphiProducer::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
override

Definition at line 63 of file EgammaHLTElectronDetaDphiProducer.cc.

References bsProducer_, calDEtaDPhiSCTrk(), electronProducer_, edm::EventSetup::get(), edm::Event::getByToken(), getEleRef(), edm::AssociationMap< Tag >::insert(), reco::BeamSpot::position(), edm::ESHandle< T >::product(), edm::Event::put(), recoEcalCandidateProducer_, and useSCRefs_.

63  {
64  // Get the HLT filtered objects
66  iEvent.getByToken(electronProducer_,electronHandle);
67 
68  edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
69  iEvent.getByToken(bsProducer_,recoBeamSpotHandle);
70  // gets its position
71  const reco::BeamSpot::Point& bsPosition = recoBeamSpotHandle->position();
72 
73  edm::ESHandle<MagneticField> theMagField;
74  iSetup.get<IdealMagneticFieldRecord>().get(theMagField);
75 
76  reco::ElectronIsolationMap detaMap(electronHandle);
77  reco::ElectronIsolationMap dphiMap(electronHandle);
78 
79  if(!useSCRefs_){
80 
81  for(reco::ElectronCollection::const_iterator iElectron = electronHandle->begin(); iElectron != electronHandle->end(); iElectron++){
82 
83  reco::ElectronRef eleref(reco::ElectronRef(electronHandle,iElectron - electronHandle->begin()));
84  std::pair<float,float> dEtaDPhi = calDEtaDPhiSCTrk(eleref,bsPosition,theMagField.product());
85 
86  detaMap.insert(eleref, dEtaDPhi.first);
87  dphiMap.insert(eleref, dEtaDPhi.second);
88  }
89  }else { //we loop over reco ecal candidates
91  iEvent.getByToken(recoEcalCandidateProducer_,recoEcalCandHandle);
92  reco::RecoEcalCandidateIsolationMap detaCandMap(recoEcalCandHandle);
93  reco::RecoEcalCandidateIsolationMap dphiCandMap(recoEcalCandHandle);
94 
95  for(reco::RecoEcalCandidateCollection::const_iterator iRecoEcalCand = recoEcalCandHandle->begin(); iRecoEcalCand != recoEcalCandHandle->end(); iRecoEcalCand++){
96 
97  reco::RecoEcalCandidateRef recoEcalCandRef(recoEcalCandHandle,iRecoEcalCand-recoEcalCandHandle->begin());
98 
99  reco::ElectronRef eleRef = getEleRef(recoEcalCandRef,electronHandle);
100  std::pair<float,float> dEtaDPhi(999999,999999);
101  if(eleRef.isNonnull()) dEtaDPhi = calDEtaDPhiSCTrk(eleRef,bsPosition,theMagField.product());
102  detaCandMap.insert(recoEcalCandRef, dEtaDPhi.first);
103  dphiCandMap.insert(recoEcalCandRef, dEtaDPhi.second);
104  }//end loop over reco ecal candidates
105 
106  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(detaCandMap), "Deta" );
107  iEvent.put(std::make_unique<reco::RecoEcalCandidateIsolationMap>(dphiCandMap), "Dphi" );
108 
109  }//end if between electrons or reco ecal candidates
110 
111  if(!useSCRefs_){
112  iEvent.put(std::make_unique<reco::ElectronIsolationMap>(detaMap), "Deta" );
113  iEvent.put(std::make_unique<reco::ElectronIsolationMap>(dphiMap), "Dphi" );
114  }
115 }
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:125
std::pair< float, float > calDEtaDPhiSCTrk(reco::ElectronRef &eleref, const reco::BeamSpot::Point &BSPosition, const MagneticField *magField)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
math::XYZPoint Point
point in the space
Definition: BeamSpot.h:29
const edm::EDGetTokenT< reco::BeamSpot > bsProducer_
const edm::EDGetTokenT< reco::RecoEcalCandidateCollection > recoEcalCandidateProducer_
T get() const
Definition: EventSetup.h:71
static reco::ElectronRef getEleRef(const reco::RecoEcalCandidateRef &recoEcalCandRef, const edm::Handle< reco::ElectronCollection > &electronHandle)
const Point & position() const
position
Definition: BeamSpot.h:62
const edm::EDGetTokenT< reco::ElectronCollection > electronProducer_
T const * product() const
Definition: ESHandle.h:86

Member Data Documentation

const edm::EDGetTokenT<reco::BeamSpot> EgammaHLTElectronDetaDphiProducer::bsProducer_
private

Definition at line 50 of file EgammaHLTElectronDetaDphiProducer.h.

Referenced by produce().

const edm::EDGetTokenT<reco::ElectronCollection> EgammaHLTElectronDetaDphiProducer::electronProducer_
private

Definition at line 49 of file EgammaHLTElectronDetaDphiProducer.h.

Referenced by produce().

const MagneticField* EgammaHLTElectronDetaDphiProducer::magField_
private

Definition at line 57 of file EgammaHLTElectronDetaDphiProducer.h.

Referenced by beginRun(), and calDEtaDPhiSCTrk().

const edm::EDGetTokenT<reco::RecoEcalCandidateCollection> EgammaHLTElectronDetaDphiProducer::recoEcalCandidateProducer_
private

Definition at line 51 of file EgammaHLTElectronDetaDphiProducer.h.

Referenced by produce().

const bool EgammaHLTElectronDetaDphiProducer::useSCRefs_
private
const bool EgammaHLTElectronDetaDphiProducer::useTrackProjectionToEcal_
private

Definition at line 54 of file EgammaHLTElectronDetaDphiProducer.h.

Referenced by calDEtaDPhiSCTrk().

const bool EgammaHLTElectronDetaDphiProducer::variablesAtVtx_
private

Definition at line 55 of file EgammaHLTElectronDetaDphiProducer.h.

Referenced by calDEtaDPhiSCTrk().