1 #ifndef RecoCandidate_IsoDeposit_H 2 #define RecoCandidate_IsoDeposit_H 31 namespace isodeposit {
35 virtual bool veto(
double eta,
double phi,
float value)
const = 0;
38 virtual void centerOn(
double eta,
double phi) {
39 throw cms::Exception(
"Not Implemented") <<
"This AbsVeto implementation (" <<
typeid(
this).
name()
40 <<
") does not support the centerOn(eta,phi) method";
63 Veto(Direction
dir,
double d) : vetoDir(dir), dR(d) {}
65 typedef std::vector<Veto>
Vetos;
75 const Direction&
direction()
const {
return theDirection; }
76 double eta()
const {
return theDirection.eta(); }
77 double phi()
const {
return theDirection.phi(); }
85 void addDeposit(
double dr,
double deposit);
86 void addDeposit(
const Direction& depDir,
double deposit);
89 double depositWithin(
double coneSize,
90 const Vetos&
vetos = Vetos(),
91 bool skipDepositVeto =
false 95 double depositWithin(Direction
dir,
97 const Vetos&
vetos = Vetos(),
98 bool skipDepositVeto =
false 102 std::pair<double, int> depositAndCountWithin(
double coneSize,
103 const Vetos&
vetos = Vetos(),
105 bool skipDepositVeto =
false 109 std::pair<double, int> depositAndCountWithin(Direction dir,
111 const Vetos&
vetos = Vetos(),
113 bool skipDepositVeto =
false 117 double depositWithin(
double coneSize,
118 const AbsVetos&
vetos,
119 bool skipDepositVeto =
false 123 std::pair<double, int> depositAndCountWithin(
double coneSize,
124 const AbsVetos& vetos,
125 bool skipDepositVeto =
false 144 float dR()
const {
return it_->first.deltaR; }
155 float value()
const {
return it_->second; }
163 cache_ = parent_->direction() + it_->first;
167 : parent_(parent), it_(it), cache_(), cacheReady_(
false) {}
169 std::multimap<Distance, float>::const_iterator
it_;
179 void operator+=(DepIterator deposit) { sum_ += deposit->second; }
199 void operator+=(DepIterator deposit) { sum2_ += deposit->second * deposit->second; }
200 void operator+=(
double deposit) { sum2_ += deposit * deposit; }
210 if (deposit->second > max_)
211 max_ = deposit->second;
227 sum_ += deposit->first.deltaR;
240 void operator+=(DepIterator deposit) { sum_ += deposit->first.deltaR; }
248 template <
typename Algo>
249 double algoWithin(
double coneSize,
251 bool skipDepositVeto =
false 254 template <
typename Algo>
255 double algoWithin(
const Direction&,
258 bool skipDepositVeto =
false 261 double countWithin(
double coneSize,
263 bool skipDepositVeto =
false 266 double sumWithin(
double coneSize,
268 bool skipDepositVeto =
false 271 double sumWithin(
const Direction& dir,
274 bool skipDepositVeto =
false 276 double sum2Within(
double coneSize,
278 bool skipDepositVeto =
false 281 double maxWithin(
double coneSize,
283 bool skipDepositVeto =
false 286 double nearestDR(
double coneSize,
288 bool skipDepositVeto =
false 308 template <
typename Algo>
312 typedef AbsVetos::const_iterator IV;
313 IV ivEnd = vetos.end();
316 typedef DepositsMultimap::const_iterator IM;
317 IM imLoc = theDeposits.upper_bound(maxDistance);
318 for (IM im = theDeposits.begin(); im != imLoc; ++im) {
320 Direction dirDep = theDirection + im->first;
321 for (IV iv = vetos.begin(); iv < ivEnd; ++iv) {
322 if ((*iv)->veto(dirDep.
eta(), dirDep.
phi(), im->second)) {
328 if (skipDepositVeto || (dirDep.
deltaR(theVeto.vetoDir) > theVeto.dR)) {
333 return algo.result();
336 template <
typename Algo>
339 const AbsVetos& vetos,
340 bool skipDepositVeto)
const {
343 typedef AbsVetos::const_iterator IV;
344 IV ivEnd = vetos.end();
345 typedef DepositsMultimap::const_iterator IM;
346 IM imLoc = theDeposits.end();
347 for (IM im = theDeposits.begin(); im != imLoc; ++im) {
349 Direction dirDep = theDirection + im->first;
350 Distance newDist = dirDep -
dir;
351 if (newDist.
deltaR > coneSize)
353 for (IV iv = vetos.begin(); iv < ivEnd; ++iv) {
354 if ((*iv)->veto(dirDep.
eta(), dirDep.
phi(), im->second)) {
360 if (skipDepositVeto || (dirDep.
deltaR(theVeto.vetoDir) > theVeto.dR)) {
365 return algo.result();
double candEnergy() const
Get energy or pT attached to cand trajectory.
const Direction & direction() const
Get direction of isolation cone.
virtual void centerOn(double eta, double phi)
const Veto & veto() const
Get veto area.
void operator+=(double deposit)
void operator+=(DepIterator deposit)
DepositsMultimap::const_iterator DepIterator
void setVeto(const Veto &aVeto)
Set veto.
double algoWithin(double coneSize, const AbsVetos &vetos=AbsVetos(), bool skipDepositVeto=false) const
Get some info about the deposit (e.g. sum, max, sum2, count)
const reco::IsoDeposit * parent_
Direction::Distance Distance
void operator+=(DepIterator deposit)
virtual ~IsoDeposit()
Destructor.
S & print(S &os, JobReport::InputFile const &f)
Veto(Direction dir, double d)
void operator+=(double deposit)
void operator+=(DepIterator deposit)
std::atomic< bool > cacheReady_
void operator+=(DepIterator deposit)
const const_iterator * operator->() const
Veto theVeto
area to be excluded in computaion of depositWithin
void operator+=(DepIterator deposit)
DepositsMultimap theDeposits
the deposits identifed by relative position to center of cone and deposit value
const const_iterator & operator++()
void addCandEnergy(double et)
Set energy or pT attached to cand trajectory.
std::multimap< Distance, float > DepositsMultimap
const_iterator begin() const
std::multimap< Distance, float >::const_iterator it_
const_iterator(const IsoDeposit *parent, std::multimap< Distance, float >::const_iterator it)
reco::IsoDeposit IsoDeposit
void operator+=(double deposit)
isodeposit::AbsVeto AbsVeto
std::vector< Veto > Vetos
std::vector< AbsVeto * > AbsVetos
void operator+=(DepIterator deposit)
isodeposit::Direction Direction
float theCandTag
float tagging cand, ment to be transverse energy or pT attached to cand,
Direction theDirection
direcion of deposit (center of isolation cone)
isodeposit::AbsVetos AbsVetos
const_iterator end() const
virtual bool veto(double eta, double phi, float value) const =0
Return "true" if a deposit at specific (eta,phi) with that value must be vetoed in the sum...
bool operator!=(const const_iterator &it2)
void operator+=(double deposit)
Direction::Distance Distance
double deltaR(const Direction &dir2) const