#include <EgammaTowerExtractor.h>
Public Types | |
enum | HcalDepth { AllDepths = -1, Undefined = 0, Depth1 = 1, Depth2 = 2 } |
Public Member Functions | |
virtual reco::IsoDeposit | deposit (const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &track) const |
virtual reco::IsoDeposit | deposit (const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Candidate &c) const |
EgammaTowerExtractor (const edm::ParameterSet &par) | |
virtual void | fillVetos (const edm::Event &ev, const edm::EventSetup &evSetup, const reco::TrackCollection &tracks) |
virtual | ~EgammaTowerExtractor () |
Private Attributes | |
edm::InputTag | caloTowerTag_ |
int | depth_ |
double | etLow_ |
double | extRadius2_ |
double | intRadius_ |
Definition at line 34 of file EgammaTowerExtractor.h.
egammaisolation::EgammaTowerExtractor::EgammaTowerExtractor | ( | const edm::ParameterSet & | par | ) | [inline] |
Definition at line 41 of file EgammaTowerExtractor.h.
References AllDepths, Depth1, Depth2, depth_, Exception, and extRadius2_.
: extRadius2_(par.getParameter<double>("extRadius")), intRadius_(par.getParameter<double>("intRadius")), etLow_(par.getParameter<double>("etMin")), caloTowerTag_(par.getParameter<edm::InputTag>("caloTowers")), depth_(par.getParameter<int>("hcalDepth")) { extRadius2_ *= extRadius2_; //lets just check we have a valid depth //should we throw an exception or just warn and then fail gracefully later? if(depth_!=AllDepths && depth_!=Depth1 && depth_!=Depth2){ throw cms::Exception("Configuration Error") << "hcalDepth passed to EgammaTowerExtractor is invalid "<<std::endl; } }
EgammaTowerExtractor::~EgammaTowerExtractor | ( | ) | [virtual] |
Definition at line 31 of file EgammaTowerExtractor.cc.
{}
virtual reco::IsoDeposit egammaisolation::EgammaTowerExtractor::deposit | ( | const edm::Event & | ev, |
const edm::EventSetup & | evSetup, | ||
const reco::Track & | track | ||
) | const [inline, virtual] |
make single IsoDeposit based on track as input purely virtual: have to implement in concrete implementations
Implements reco::isodeposit::IsoDepositExtractor.
Definition at line 60 of file EgammaTowerExtractor.h.
References Exception, and AlCaRecoCosmics_cfg::name.
{ throw cms::Exception("Configuration Error") << "This extractor " << (typeid(this).name()) << " is not made for tracks"; }
reco::IsoDeposit EgammaTowerExtractor::deposit | ( | const edm::Event & | ev, |
const edm::EventSetup & | evSetup, | ||
const reco::Candidate & | track | ||
) | const [virtual] |
make single IsoDeposit based on a candidate as input purely virtual: have to implement in concrete implementations
Reimplemented from reco::isodeposit::IsoDepositExtractor.
Definition at line 33 of file EgammaTowerExtractor.cc.
References reco::isodeposit::Direction::deltaR2(), funct::exp(), reco::Candidate::get(), edm::Event::getByLabel(), and funct::sin().
{ edm::Handle<CaloTowerCollection> towercollectionH; iEvent.getByLabel(caloTowerTag_, towercollectionH); //Take the SC position reco::SuperClusterRef sc = emObject.get<reco::SuperClusterRef>(); math::XYZPoint caloPosition = sc->position(); Direction candDir(caloPosition.eta(), caloPosition.phi()); reco::IsoDeposit deposit( candDir ); deposit.setVeto( reco::IsoDeposit::Veto(candDir, intRadius_) ); deposit.addCandEnergy(sc->energy()*sin(2*atan(exp(-sc->eta())))); //loop over tracks for(CaloTowerCollection::const_iterator trItr = towercollectionH->begin(), trEnd = towercollectionH->end(); trItr != trEnd; ++trItr){ double depEt = 0; //the hcal can be seperated into different depths //currently it is setup to check that the depth is valid in constructor //if the depth is not valid it fails gracefully //small bug fix, hadEnergyHeInnerLater returns zero for towers which are only depth 1 //but we want Depth1 isolation to include these so we have to manually check for this if(depth_==AllDepths) depEt = trItr->hadEt(); else if(depth_==Depth1) depEt = trItr->ietaAbs()<18 || trItr->ietaAbs()>29 ? trItr->hadEt() : trItr->hadEnergyHeInnerLayer()*sin(trItr->p4().theta()); else if(depth_==Depth2) depEt = trItr->hadEnergyHeOuterLayer()*sin(trItr->p4().theta()); if ( depEt < etLow_ ) continue ; Direction towerDir( trItr->eta(), trItr->phi() ); double dR2 = candDir.deltaR2(towerDir); if (dR2 < extRadius2_) { deposit.addDeposit( towerDir, depEt); } }//end loop over tracks return deposit; }
virtual void egammaisolation::EgammaTowerExtractor::fillVetos | ( | const edm::Event & | ev, |
const edm::EventSetup & | evSetup, | ||
const reco::TrackCollection & | tracks | ||
) | [inline, virtual] |
fill vetoes: to exclude deposits at IsoDeposit creation stage check concrete extractors if it's no-op !
Implements reco::isodeposit::IsoDepositExtractor.
Definition at line 58 of file EgammaTowerExtractor.h.
{ }
Definition at line 74 of file EgammaTowerExtractor.h.
int egammaisolation::EgammaTowerExtractor::depth_ [private] |
Definition at line 75 of file EgammaTowerExtractor.h.
Referenced by EgammaTowerExtractor().
double egammaisolation::EgammaTowerExtractor::etLow_ [private] |
Definition at line 71 of file EgammaTowerExtractor.h.
double egammaisolation::EgammaTowerExtractor::extRadius2_ [private] |
Definition at line 69 of file EgammaTowerExtractor.h.
Referenced by EgammaTowerExtractor().
double egammaisolation::EgammaTowerExtractor::intRadius_ [private] |
Definition at line 70 of file EgammaTowerExtractor.h.