![]() |
![]() |
#include <RecoEgamma/EgammaIsolationAlgos/plugins/EgammaRecHitExtractor.h>
Public Member Functions | |
virtual reco::IsoDeposit | deposit (const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Candidate &c) const |
make single IsoDeposit based on a candidate as input purely virtual: have to implement in concrete implementations | |
virtual reco::IsoDeposit | deposit (const edm::Event &ev, const edm::EventSetup &evSetup, const reco::Track &track) const |
make single IsoDeposit based on track as input purely virtual: have to implement in concrete implementations | |
EgammaRecHitExtractor (const edm::ParameterSet &par) | |
virtual void | fillVetos (const edm::Event &ev, const edm::EventSetup &evSetup, const reco::TrackCollection &tracks) |
fill vetoes: to exclude deposits at IsoDeposit creation stage check concrete extractors if it's no-op ! | |
virtual | ~EgammaRecHitExtractor () |
Private Member Functions | |
void | collect (reco::IsoDeposit &deposit, const GlobalPoint &caloPosition, CaloDualConeSelector &cone, const CaloGeometry *caloGeom, const CaloRecHitMetaCollectionV &hits) const |
Private Attributes | |
edm::InputTag | barrelEcalHitsTag_ |
edm::InputTag | barrelRecHitsTag_ |
DetId::Detector | detector_ |
edm::InputTag | endcapEcalHitsTag_ |
edm::InputTag | endcapRecHitsTag_ |
double | energyMin_ |
double | etMin_ |
double | extRadius_ |
bool | fakeNegativeDeposit_ |
double | intRadius_ |
double | intStrip_ |
double | minCandEt_ |
std::vector< double > | paramForIsolBarrel_ |
std::vector< double > | paramForIsolEndcap_ |
bool | sameTag_ |
bool | tryBoth_ |
bool | useEt_ |
Definition at line 34 of file EgammaRecHitExtractor.h.
EgammaRecHitExtractor::EgammaRecHitExtractor | ( | const edm::ParameterSet & | par | ) |
Definition at line 37 of file EgammaRecHitExtractor.cc.
References barrelRecHitsTag_, detector_, DetId::Ecal, edm::InputTag::encode(), endcapRecHitsTag_, Exception, fakeNegativeDeposit_, edm::ParameterSet::getParameter(), DetId::Hcal, intRadius_, paramForIsolBarrel_, paramForIsolEndcap_, sameTag_, tryBoth_, and useEt_.
00037 : 00038 etMin_(par.getParameter<double>("etMin")), 00039 energyMin_(par.getParameter<double>("energyMin")), 00040 minCandEt_(par.getParameter<double>("minCandEt")), 00041 extRadius_(par.getParameter<double>("extRadius")), 00042 intRadius_(par.getParameter<double>("intRadius")), 00043 intStrip_(par.getParameter<double>("intStrip")), 00044 barrelRecHitsTag_(par.getParameter<edm::InputTag>("barrelRecHits")), 00045 endcapRecHitsTag_(par.getParameter<edm::InputTag>("endcapRecHits")), 00046 barrelEcalHitsTag_(par.getParameter<edm::InputTag>("barrelEcalHits")), 00047 endcapEcalHitsTag_(par.getParameter<edm::InputTag>("endcapEcalHits")), 00048 fakeNegativeDeposit_(par.getParameter<bool>("subtractSuperClusterEnergy")), 00049 tryBoth_(par.getParameter<bool>("tryBoth")), 00050 sameTag_(false) 00051 { 00052 if ((intRadius_ != 0.0) && (fakeNegativeDeposit_)) { 00053 throw cms::Exception("Configuration Error") << "EgammaRecHitExtractor: " << 00054 "If you use 'subtractSuperClusterEnergy', you *must* set 'intRadius' to ZERO; it does not make sense, otherwise."; 00055 } 00056 std::string isoVariable = par.getParameter<std::string>("isolationVariable"); 00057 if (isoVariable == "et") { 00058 useEt_ = true; 00059 } else if (isoVariable == "energy") { 00060 useEt_ = false; 00061 } else { 00062 throw cms::Exception("Configuration Error") << "EgammaRecHitExtractor: isolationVariable '" << isoVariable << "' not known. " 00063 << " Supported values are 'et', 'energy'. "; 00064 } 00065 std::string detector = par.getParameter<std::string>("detector"); 00066 if (detector == "Ecal") { 00067 detector_ = DetId::Ecal; 00068 } else if (detector == "Hcal") { 00069 detector_ = DetId::Hcal; 00070 } else { 00071 throw cms::Exception("Configuration Error") << "EgammaRecHitExtractor: detector '" << detector << "' not known. " 00072 << " Supported values are 'Ecal', 'Hcal'. "; 00073 } 00074 00075 if (endcapRecHitsTag_.encode() == barrelRecHitsTag_.encode()) { 00076 sameTag_ = true; 00077 if (tryBoth_) { 00078 edm::LogWarning("EgammaRecHitExtractor") << "If you have configured 'barrelRecHits' == 'endcapRecHits', so I'm switching 'tryBoth' to FALSE."; 00079 tryBoth_ = false; 00080 } 00081 } 00082 00083 paramForIsolBarrel_.push_back(par.getParameter<double>("checkIsoExtRBarrel")); 00084 paramForIsolBarrel_.push_back(par.getParameter<double>("checkIsoInnRBarrel")); 00085 paramForIsolBarrel_.push_back(par.getParameter<double>("checkIsoEtaStripBarrel")); 00086 paramForIsolBarrel_.push_back(par.getParameter<double>("checkIsoEtRecHitBarrel")); 00087 paramForIsolBarrel_.push_back(par.getParameter<double>("checkIsoEtCutBarrel")); 00088 00089 paramForIsolEndcap_.push_back(par.getParameter<double>("checkIsoExtREndcap")); 00090 paramForIsolEndcap_.push_back(par.getParameter<double>("checkIsoInnREndcap")); 00091 paramForIsolEndcap_.push_back(par.getParameter<double>("checkIsoEtaStripEndcap")); 00092 paramForIsolEndcap_.push_back(par.getParameter<double>("checkIsoEtRecHitEndcap")); 00093 paramForIsolEndcap_.push_back(par.getParameter<double>("checkIsoEtCutEndcap")); 00094 00095 }
EgammaRecHitExtractor::~EgammaRecHitExtractor | ( | ) | [virtual] |
void EgammaRecHitExtractor::collect | ( | reco::IsoDeposit & | deposit, | |
const GlobalPoint & | caloPosition, | |||
CaloDualConeSelector & | cone, | |||
const CaloGeometry * | caloGeom, | |||
const CaloRecHitMetaCollectionV & | hits | |||
) | const [private] |
Definition at line 194 of file EgammaRecHitExtractor.cc.
References reco::IsoDeposit::addDeposit(), end, relval_parameters_module::energy, energyMin_, eta, PV3DBase< T, PVType, FrameType >::eta(), etMin_, funct::exp(), CaloGeometry::getPosition(), i, intStrip_, PV3DBase< T, PVType, FrameType >::phi(), CaloDualConeSelector::select(), funct::sin(), and useEt_.
Referenced by deposit().
00198 { 00199 std::auto_ptr<CaloRecHitMetaCollectionV> chosen = cone.select(caloPosition, hits); 00200 for (CaloRecHitMetaCollectionV::const_iterator i = chosen->begin(), end = chosen->end() ; i != end; ++i) { 00201 const GlobalPoint & position = caloGeom->getPosition(i->detid()); 00202 double eta = position.eta(); 00203 double energy = i->energy(); 00204 double et = energy*sin(2*atan(exp(-eta))); 00205 if ( et > etMin_ && energy > energyMin_ && fabs(eta-caloPosition.eta()) > intStrip_ ){ 00206 deposit.addDeposit( Direction(eta, position.phi()), (useEt_ ? et : energy) ); 00207 } 00208 } 00209 }
reco::IsoDeposit EgammaRecHitExtractor::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 99 of file EgammaRecHitExtractor.cc.
References funct::abs(), barrelEcalHitsTag_, barrelRecHitsTag_, collect(), deposit(), detector_, DetId::Ecal, EcalBarrel, EcalEndcap, endcapEcalHitsTag_, endcapRecHitsTag_, funct::exp(), extRadius_, fakeNegativeDeposit_, edm::EventSetup::get(), reco::Candidate::get(), edm::Event::getByLabel(), EgammaRecHitIsolation::getEtSum(), DetId::Hcal, intRadius_, minCandEt_, paramForIsolBarrel_, paramForIsolEndcap_, edm::ESHandle< T >::product(), sameTag_, funct::sin(), tryBoth_, and useEt_.
00100 { 00101 edm::ESHandle<CaloGeometry> pG; 00102 iSetup.get<CaloGeometryRecord>().get(pG); 00103 const CaloGeometry* caloGeom = pG.product(); 00104 00105 static std::string metname = "EgammaIsolationAlgos|EgammaRecHitExtractor"; 00106 00107 std::auto_ptr<const CaloRecHitMetaCollectionV> barrelRecHits(0), endcapRecHits(0); 00108 00109 //Get barrel ECAL RecHits for Iso checking 00110 edm::Handle<EcalRecHitCollection> barrelEcalRecHitsH; 00111 iEvent.getByLabel(barrelEcalHitsTag_, barrelEcalRecHitsH); 00112 00113 //Get endcap ECAL RecHits for Iso checking 00114 edm::Handle<EcalRecHitCollection> endcapEcalRecHitsH; 00115 iEvent.getByLabel(endcapEcalHitsTag_, endcapEcalRecHitsH); 00116 00117 if (detector_ == DetId::Ecal) { 00118 barrelRecHits = std::auto_ptr<const CaloRecHitMetaCollectionV>(new EcalRecHitMetaCollection(*barrelEcalRecHitsH)); 00119 if (!sameTag_) { 00120 endcapRecHits = std::auto_ptr<const CaloRecHitMetaCollectionV>(new EcalRecHitMetaCollection(*endcapEcalRecHitsH)); 00121 } 00122 } else if (detector_ == DetId::Hcal) { 00123 edm::Handle<HBHERecHitCollection> barrelHcalRecHitsH, endcapHcalRecHitsH; 00124 iEvent.getByLabel(barrelRecHitsTag_, barrelHcalRecHitsH); 00125 barrelRecHits = std::auto_ptr<const CaloRecHitMetaCollectionV>(new HBHERecHitMetaCollection(*barrelHcalRecHitsH)); 00126 if (!sameTag_) { 00127 iEvent.getByLabel(endcapRecHitsTag_, endcapHcalRecHitsH); 00128 endcapRecHits = std::auto_ptr<const CaloRecHitMetaCollectionV>(new HBHERecHitMetaCollection(*endcapHcalRecHitsH)); 00129 } 00130 } 00131 00132 reco::SuperClusterRef sc = emObject.get<reco::SuperClusterRef>(); 00133 math::XYZPoint caloPosition = sc->position(); 00134 GlobalPoint point(caloPosition.x(), caloPosition.y() , caloPosition.z()); 00135 00136 Direction candDir(caloPosition.eta(), caloPosition.phi()); 00137 reco::IsoDeposit deposit( candDir ); 00138 deposit.setVeto( reco::IsoDeposit::Veto(candDir, intRadius_) ); 00139 double sinTheta = sin(2*atan(exp(-sc->eta()))); 00140 deposit.addCandEnergy(sc->energy() * (useEt_ ? sinTheta : 1.0)) ; 00141 00142 //avoid slow preshower 00143 int bid,eid; 00144 if(detector_==DetId::Ecal){ 00145 bid=EcalBarrel; 00146 eid=EcalEndcap; 00147 }else{ 00148 bid=0;eid=0; 00149 } 00150 00151 double fakeEnergy = -sc->rawEnergy(); 00152 if (fakeNegativeDeposit_) { 00153 deposit.addDeposit(candDir, fakeEnergy * (useEt_ ? sinTheta : 1.0)); // not exactly clean... 00154 } 00155 00156 std::auto_ptr<CaloRecHitMetaCollectionV> ecalRecHits(0); 00157 double extRadius, innRadius, etaStrip, minEtRecHit, isolEtCut; 00158 if( abs(sc->eta()) < 1.5 ) { 00159 extRadius = paramForIsolBarrel_[0]; 00160 innRadius = paramForIsolBarrel_[1]; 00161 etaStrip = paramForIsolBarrel_[2]; 00162 minEtRecHit = paramForIsolBarrel_[3]; 00163 isolEtCut = paramForIsolBarrel_[4]; 00164 ecalRecHits = std::auto_ptr<CaloRecHitMetaCollectionV>(new EcalRecHitMetaCollection(*barrelEcalRecHitsH)); 00165 } else { 00166 extRadius = paramForIsolEndcap_[0]; 00167 innRadius = paramForIsolEndcap_[1]; 00168 etaStrip = paramForIsolEndcap_[2]; 00169 minEtRecHit = paramForIsolEndcap_[3]; 00170 isolEtCut = paramForIsolEndcap_[4]; 00171 ecalRecHits = std::auto_ptr<CaloRecHitMetaCollectionV>(new EcalRecHitMetaCollection(*endcapEcalRecHitsH)); 00172 } 00173 00174 EgammaRecHitIsolation candIso(extRadius,innRadius,etaStrip,minEtRecHit,pG,&(*ecalRecHits),DetId::Ecal); 00175 if ( sc->energy()*sinTheta < minCandEt_ || candIso.getEtSum(&emObject) > isolEtCut ) { 00176 deposit.addDeposit( Direction(caloPosition.eta(), caloPosition.phi()+0.15), 10000 ); 00177 deposit.addDeposit( Direction(caloPosition.eta(), caloPosition.phi()+0.25), 100000 ); 00178 } else { 00179 CaloDualConeSelector doubleConeSelBarrel(intRadius_ ,extRadius_, caloGeom, detector_,bid); 00180 CaloDualConeSelector doubleConeSelEndcap(intRadius_ ,extRadius_, caloGeom, detector_,eid); 00181 00182 // 3 possible options 00183 bool inBarrel = sameTag_ || ( abs(sc->eta()) < 1.5 ); 00184 if (inBarrel || tryBoth_) { 00185 collect(deposit, point, doubleConeSelBarrel, caloGeom, *barrelRecHits); 00186 } 00187 if ((!inBarrel) || tryBoth_) { 00188 collect(deposit, point, doubleConeSelEndcap, caloGeom, *endcapRecHits); 00189 } 00190 } 00191 return deposit; 00192 }
virtual reco::IsoDeposit egammaisolation::EgammaRecHitExtractor::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 39 of file EgammaRecHitExtractor.h.
References Exception, and name.
Referenced by deposit().
00039 { 00040 throw cms::Exception("Configuration Error") << "This extractor " << (typeid(this).name()) << " is not made for tracks"; 00041 }
virtual void egammaisolation::EgammaRecHitExtractor::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 38 of file EgammaRecHitExtractor.h.
Definition at line 58 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
Definition at line 66 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
Definition at line 59 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
double egammaisolation::EgammaRecHitExtractor::energyMin_ [private] |
double egammaisolation::EgammaRecHitExtractor::etMin_ [private] |
double egammaisolation::EgammaRecHitExtractor::extRadius_ [private] |
Definition at line 62 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
double egammaisolation::EgammaRecHitExtractor::intRadius_ [private] |
Definition at line 54 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
double egammaisolation::EgammaRecHitExtractor::intStrip_ [private] |
double egammaisolation::EgammaRecHitExtractor::minCandEt_ [private] |
std::vector<double> egammaisolation::EgammaRecHitExtractor::paramForIsolBarrel_ [private] |
Definition at line 56 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
std::vector<double> egammaisolation::EgammaRecHitExtractor::paramForIsolEndcap_ [private] |
Definition at line 57 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
Definition at line 64 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
Definition at line 63 of file EgammaRecHitExtractor.h.
Referenced by deposit(), and EgammaRecHitExtractor().
Definition at line 65 of file EgammaRecHitExtractor.h.
Referenced by collect(), deposit(), and EgammaRecHitExtractor().