13 #include <Math/VectorUtil.h>
39 using namespace egammaisolation;
40 using namespace reco::isodeposit;
43 etMin_(par.getParameter<double>(
"etMin")),
44 energyMin_(par.getParameter<double>(
"energyMin")),
45 extRadius_(par.getParameter<double>(
"extRadius")),
46 intRadius_(par.getParameter<double>(
"intRadius")),
47 intStrip_(par.getParameter<double>(
"intStrip")),
48 barrelEcalHitsTag_(par.getParameter<edm::InputTag>(
"barrelEcalHits")),
49 endcapEcalHitsTag_(par.getParameter<edm::InputTag>(
"endcapEcalHits")),
50 fakeNegativeDeposit_(par.getParameter<bool>(
"subtractSuperClusterEnergy")),
51 tryBoth_(par.getParameter<bool>(
"tryBoth")),
52 vetoClustered_(par.getParameter<bool>(
"vetoClustered")),
60 const std::vector<std::string> flagnamesEB =
61 par.
getParameter<std::vector<std::string> >(
"RecHitFlagToBeExcludedEB");
63 const std::vector<std::string> flagnamesEE =
64 par.
getParameter<std::vector<std::string> >(
"RecHitFlagToBeExcludedEE");
67 StringToEnumValue<EcalRecHit::Flags>(flagnamesEB);
70 StringToEnumValue<EcalRecHit::Flags>(flagnamesEE);
72 const std::vector<std::string> severitynamesEB =
73 par.
getParameter<std::vector<std::string> >(
"RecHitSeverityToBeExcludedEB");
76 StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEB);
78 const std::vector<std::string> severitynamesEE =
79 par.
getParameter<std::vector<std::string> >(
"RecHitSeverityToBeExcludedEE");
82 StringToEnumValue<EcalSeverityLevel::SeverityLevel>(severitynamesEE);
85 throw cms::Exception(
"Configuration Error") <<
"EgammaRecHitExtractor: " <<
86 "If you use 'subtractSuperClusterEnergy', you *must* set 'intRadius' to ZERO; it does not make sense, otherwise.";
89 if (isoVariable ==
"et") {
91 }
else if (isoVariable ==
"energy") {
94 throw cms::Exception(
"Configuration Error") <<
"EgammaRecHitExtractor: isolationVariable '" << isoVariable <<
"' not known. "
95 <<
" Supported values are 'et', 'energy'. ";
100 edm::LogWarning(
"EgammaRecHitExtractor") <<
"If you have configured 'barrelRecHits' == 'endcapRecHits', so I'm switching 'tryBoth' to FALSE.";
128 std::auto_ptr<const CaloRecHitMetaCollectionV> barrelRecHits(0), endcapRecHits(0);
142 Direction candDir(caloPosition.eta(), caloPosition.phi());
145 double sinTheta =
sin(2*atan(
exp(-sc->eta())));
146 deposit.addCandEnergy(sc->energy() * (
useEt_ ? sinTheta : 1.0)) ;
149 double fakeEnergy = -sc->rawEnergy();
151 deposit.addDeposit(candDir, fakeEnergy * (
useEt_ ? sinTheta : 1.0));
155 bool inBarrel =
sameTag_ || (
abs(sc->eta()) < 1.479 );
157 collect(deposit, sc, barrelgeom, caloGeom, *barrelEcalRecHitsH, sevLevel,
true);
161 collect(deposit, sc, endcapgeom, caloGeom, *endcapEcalRecHitsH, sevLevel,
false);
175 GlobalPoint caloPosition(sc->position().x(), sc->position().y() , sc->position().z());
178 double caloeta=caloPosition.eta();
179 double calophi=caloPosition.phi();
182 std::vector< std::pair<DetId, float> >::const_iterator rhIt;
185 for (CaloSubdetectorGeometry::DetIdSet::const_iterator
i = chosen.begin(),
end = chosen.end() ;
i !=
end; ++
i) {
187 if (j != hits.
end()) {
189 double eta = position.
eta();
190 double phi = position.
phi();
191 double energy = j->energy();
192 double et = energy*position.
perp()/position.
mag();
199 bool isClustered =
false;
201 for(rhIt = (*bcIt)->hitsAndFractions().begin();rhIt != (*bcIt)->hitsAndFractions().end(); ++rhIt) {
202 if( rhIt->first == *
i ) isClustered =
true;
203 if( isClustered )
break;
205 if( isClustered )
break;
208 if(isClustered)
continue;
211 std::vector<int>::const_iterator sit;
212 int severityFlag = sevLevel->
severityLevel(j->detid(), hits);
223 std::vector<int>::const_iterator vit;
249 && (eta-caloeta)*(eta-caloeta) + phiDiff*phiDiff >
r2 ) {
T getParameter(std::string const &) const
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
std::set< DetId > DetIdSet
const std::string metname
Sin< T >::type sin(const T &t)
Geom::Phi< T > phi() const
std::vector< EcalRecHit >::const_iterator const_iterator
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
static int position[TOTALCHAMBERS][3]
void addDeposit(double dr, double deposit)
Add deposit (ie. transverse energy or pT)
virtual DetIdSet getCells(const GlobalPoint &r, double dR) const
Get a list of all cells within a dR of the given cell.
const GlobalPoint & getPosition(const DetId &id) const
Get the position of a given detector id.
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
const_iterator end() const
double deltaPhi(double phi1, double phi2)
XYZPointD XYZPoint
point in space with cartesian internal representation
T const * product() const
iterator find(key_type k)
T get() const
get a component
EcalSeverityLevel::SeverityLevel severityLevel(const DetId &id, const EcalRecHitCollection &rhs) const
Evaluate status from id.