CMS 3D CMS Logo

EG9X105XObjectUpdateModifier.cc
Go to the documentation of this file.
15 
16 
17 #include <vdt/vdtMath.h>
18 
19 //this modifier fills variables where not present in CMSSW_92X to CMSSW_105X
20 //use case is when reading older new samples in newer releases, aka legacy
21 //note we suffer from the problem of needing to use the electrons/photons the valuemaps
22 //are keyed to (something that is thankfully going away in 11X!) so we have to take
23 //those collections in and figure out which ele/pho matches to them
25 public:
26  template<typename T>
28  public:
30  token_(cc.consumes<T>(conf.getParameter<edm::InputTag>(name))){}
31  void setHandle(const edm::Event& iEvent){
32  iEvent.getByToken(token_,handle_);
33  }
34  const edm::Handle<T>& handle()const{return handle_;}
35  private:
38  };
39 
42 
43  void setEvent(const edm::Event&) final;
44  void setEventContent(const edm::EventSetup&) final;
45 
46  void modifyObject(reco::GsfElectron& ele) const final;
47  void modifyObject(reco::Photon& pho) const final;
48 
49  void modifyObject(pat::Electron& ele) const final{return modifyObject(static_cast<reco::GsfElectron&>(ele));}
50  void modifyObject(pat::Photon& pho) const final{return modifyObject(static_cast<reco::Photon&>(pho));}
51 
52 private:
53  template<typename ObjType>
54  static edm::Ptr<ObjType> getPtrForValueMap(const ObjType& obj,
55  const edm::Handle<edm::View<ObjType> >& objsVMIsKeyedTo);
56 
59 
64 
72 
73 
74 };
75 
78  eleCollVMsAreKeyedTo_(conf,"eleCollVMsAreKeyedTo",cc),
79  phoCollVMsAreKeyedTo_(conf,"phoCollVMsAreKeyedTo",cc),
80  conversions_(conf,"conversions",cc),
81  beamspot_(conf,"beamspot",cc),
82  ecalRecHitsEB_(conf,"ecalRecHitsEB",cc),
83  ecalRecHitsEE_(conf,"ecalRecHitsEE",cc),
84  eleTrkIso_(conf,"eleTrkIso",cc),
85  eleTrkIso04_(conf,"eleTrkIso04",cc),
86  phoPhotonIso_(conf,"phoPhotonIso",cc),
87  phoNeutralHadIso_(conf,"phoNeutralHadIso",cc),
88  phoChargedHadIso_(conf,"phoChargedHadIso",cc),
89  phoChargedHadWorstVtxIso_(conf,"phoChargedHadWorstVtxIso",cc),
90  phoChargedHadWorstVtxConeVetoIso_(conf,"phoChargedHadWorstVtxConeVetoIso",cc)
91 {
92 
93 
94 }
95 
97 {
100  conversions_.setHandle(iEvent);
101  beamspot_.setHandle(iEvent);
102  ecalRecHitsEB_.setHandle(iEvent);
103  ecalRecHitsEE_.setHandle(iEvent);
104  eleTrkIso_.setHandle(iEvent);
105  eleTrkIso04_.setHandle(iEvent);
106  phoPhotonIso_.setHandle(iEvent);
111 }
112 
114 {
115 
116 }
117 
119 {
121  if(ptrForVM.isNull()){
122  throw cms::Exception("LogicError") <<" in EG9X105ObjectUpdateModifier, line "<<__LINE__<<" electron "<<ele.et()<<" "<<ele.eta()<<" "<<ele.superCluster()->seed()->seed().rawId()<<" failed to match to the electrons the key map was keyed to, check the map collection is correct";
123  }
125  //its rather important to use the core function here to get the org trk ref
127  ele.setConversionRejectionVariables(convRejVars);
128 
130  isolVars03.tkSumPtHEEP = (*eleTrkIso_.handle())[ptrForVM];
131  ele.setDr03Isolation(isolVars03);
133  isolVars04.tkSumPtHEEP = (*eleTrkIso04_.handle())[ptrForVM];
134  ele.setDr04Isolation(isolVars04);
135 }
136 
138 {
140  if(ptrForVM.isNull()){
141  throw cms::Exception("LogicError") <<" in EG9X105ObjectUpdateModifier, line "<<__LINE__<<" photon "<<pho.et()<<" "<<pho.eta()<<" "<<pho.superCluster()->seed()->seed().rawId()<<" failed to match to the photons the key map was keyed to, check the map collection is correct";
142  }
143 
145  pfIso.photonIso = (*phoPhotonIso_.handle())[ptrForVM];
146  pfIso.neutralHadronIso = (*phoNeutralHadIso_.handle())[ptrForVM];
147  pfIso.chargedHadronIso = (*phoChargedHadIso_.handle())[ptrForVM];
150  pho.setPflowIsolationVariables(pfIso);
151 
154 
155  const reco::CaloClusterPtr seedClus = pho.superCluster()->seed();
156  const bool isEB = seedClus->seed().subdetId()==EcalBarrel;
157  const auto& recHits = isEB ? *ecalRecHitsEB_.handle() : *ecalRecHitsEE_.handle();
158  Cluster2ndMoments clus2ndMomFrac = EcalClusterTools::cluster2ndMoments(*seedClus,recHits);
159  Cluster2ndMoments clus2ndMomFull = noZS::EcalClusterTools::cluster2ndMoments(*seedClus,recHits);
160  fracSS.smMajor = clus2ndMomFrac.sMaj;
161  fracSS.smMinor = clus2ndMomFrac.sMin;
162  fracSS.smAlpha = clus2ndMomFrac.alpha;
163  fullSS.smMajor = clus2ndMomFull.sMaj;
164  fullSS.smMinor = clus2ndMomFull.sMin;
165  fullSS.smAlpha = clus2ndMomFull.alpha;
166  pho.setShowerShapeVariables(fracSS);
168 
169 }
170 
171 template<typename ObjType> edm::Ptr<ObjType> EG9X105XObjectUpdateModifier::
172 getPtrForValueMap(const ObjType& obj,
173  const edm::Handle<edm::View<ObjType> >& objsVMIsKeyedTo)
174 {
175  for(auto& objVMPtr : objsVMIsKeyedTo->ptrs()){
176  if(obj.superCluster()->seed()->seed()==objVMPtr->superCluster()->seed()->seed()) return objVMPtr;
177  }
178  return edm::Ptr<ObjType>(objsVMIsKeyedTo.id()); //return null ptr if not found
179 }
180 
181 
184  "EG9X105XObjectUpdateModifier");
void setDr04Isolation(const IsolationVariables &dr04)
Definition: GsfElectron.h:577
void setPflowIsolationVariables(const PflowIsolationVariables &pfisol)
Set Particle Flow Isolation variables.
Definition: Photon.h:509
Analysis-level Photon class.
Definition: Photon.h:47
void modifyObject(pat::Photon &pho) const final
static reco::Conversion const * matchedConversion(const reco::GsfElectron &ele, const reco::ConversionCollection &convCol, const math::XYZPoint &beamspot, bool allowCkfMatch=true, float lxyMin=2.0, float probMin=1e-6, unsigned int nHitsBeforeVtxMax=0)
TokenHandlePair< edm::ValueMap< float > > eleTrkIso04_
TokenHandlePair< edm::ValueMap< float > > phoPhotonIso_
double eta() const final
momentum pseudorapidity
TokenHandlePair< edm::ValueMap< float > > phoChargedHadWorstVtxIso_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
TokenHandlePair< edm::View< reco::Photon > > phoCollVMsAreKeyedTo_
void setEvent(const edm::Event &) final
TokenHandlePair< reco::BeamSpot > beamspot_
TokenHandlePair< EcalRecHitCollection > ecalRecHitsEE_
void setConversionRejectionVariables(const ConversionRejection &convRej)
Definition: GsfElectron.h:623
TokenHandlePair< EcalRecHitCollection > ecalRecHitsEB_
reco::SuperClusterRef superCluster() const override
Ref to SuperCluster.
void setDr03Isolation(const IsolationVariables &dr03)
Definition: GsfElectron.h:576
const IsolationVariables & dr04IsolationVariables() const
Definition: GsfElectron.h:573
TokenHandlePair< edm::ValueMap< float > > phoChargedHadWorstVtxConeVetoIso_
void setEventContent(const edm::EventSetup &) final
static edm::Ptr< ObjType > getPtrForValueMap(const ObjType &obj, const edm::Handle< edm::View< ObjType > > &objsVMIsKeyedTo)
TokenHandlePair< edm::ValueMap< float > > eleTrkIso_
int iEvent
Definition: GenABIO.cc:224
static float getVtxFitProb(const reco::Conversion *conv)
const std::string & name() const
double et() const final
transverse energy
bool isNull() const
Checks for null.
Definition: Ptr.h:164
void setShowerShapeVariables(const ShowerShape &a)
Definition: Photon.h:208
static Cluster2ndMoments cluster2ndMoments(const reco::BasicCluster &basicCluster, const EcalRecHitCollection &recHits, double phiCorrectionFactor=0.8, double w0=4.7, bool useLogWeights=true)
void modifyObject(reco::GsfElectron &ele) const final
TokenHandlePair< reco::ConversionCollection > conversions_
Analysis-level electron class.
Definition: Electron.h:52
virtual GsfElectronCoreRef core() const
Definition: GsfElectron.cc:8
void full5x5_setShowerShapeVariables(const ShowerShape &a)
Definition: Photon.h:209
HLT enums.
const ShowerShape & full5x5_showerShapeVariables() const
Definition: Photon.h:206
const IsolationVariables & dr03IsolationVariables() const
Definition: GsfElectron.h:561
SuperClusterRef superCluster() const override
reference to a SuperCluster
Definition: GsfElectron.h:185
TokenHandlePair(const edm::ParameterSet &conf, const std::string &name, edm::ConsumesCollector &cc)
#define DEFINE_EDM_PLUGIN(factory, type, name)
const Point & position() const
position
Definition: BeamSpot.h:62
const ConversionRejection & conversionRejectionVariables() const
Definition: GsfElectron.h:622
const PflowIsolationVariables & getPflowIsolationVariables() const
Get Particle Flow Isolation variables block.
Definition: Photon.h:506
TokenHandlePair< edm::View< reco::GsfElectron > > eleCollVMsAreKeyedTo_
long double T
const ShowerShape & showerShapeVariables() const
Definition: Photon.h:205
EG9X105XObjectUpdateModifier(const edm::ParameterSet &conf, edm::ConsumesCollector &cc)
TokenHandlePair< edm::ValueMap< float > > phoNeutralHadIso_
TokenHandlePair< edm::ValueMap< float > > phoChargedHadIso_
void modifyObject(pat::Electron &ele) const final