CMS 3D CMS Logo

CaloDualConeSelector.h
Go to the documentation of this file.
1 #ifndef RECOCALOTOOLS_SELECTORS_CALODUALCONESELECTOR_H
2 #define RECOCALOTOOLS_SELECTORS_CALODUALCONESELECTOR_H 1
3 
7 #include <memory>
8 
13 template <class T>
15 public:
16  CaloDualConeSelector(double dRmin, double dRmax, const CaloGeometry* geom) :
17  geom_(geom),deltaRmin_(dRmin),deltaRmax_(dRmax),detector_(DetId::Detector(0)),subdet_(0) {}
18 
19  CaloDualConeSelector(double dRmin, double dRmax, const CaloGeometry* geom, DetId::Detector detector, int subdet=0) :
20  geom_(geom),deltaRmin_(dRmin),deltaRmax_(dRmax),detector_(detector),subdet_(subdet) {}
21 
22  void inline selectCallback(double eta, double phi, const edm::SortedCollection<T>& inputCollection, std::function<void(const T&)> callback) {
23  GlobalPoint p(GlobalPoint::Cylindrical(1,phi,tanh(eta)));
24  return selectCallback(p, inputCollection, callback);
25  }
26 
27  void inline selectCallback(const GlobalPoint& p, const edm::SortedCollection<T>& inputCollection, std::function<void(const T&)> callback) {
28  // TODO: handle default setting of detector_ (loops over subdet)
29  // TODO: heuristics of when it is better to loop over inputCollection instead (small # hits)
30  for (int subdet=subdet_; subdet<=7 && (subdet_==0 || subdet_==subdet); subdet++) {
32  if (sdg!=nullptr) {
33  // get the list of detids within range (from geometry)
36  // use set operations to determine detids in annulus
38  std::set_difference(dis_all.begin(),dis_all.end(),
39  dis_excl.begin(),dis_excl.end(),
40  std::inserter(dis,dis.begin()));
41 
42  // loop over detids...
43  typename edm::SortedCollection<T>::const_iterator j, je = inputCollection.end();
44 
45  for (CaloSubdetectorGeometry::DetIdSet::iterator i=dis.begin(); i!=dis.end(); i++) {
46  if (i->subdetId()!=subdet) continue; // possible for HCAL where the same geometry object handles all the detectors
47  j=inputCollection.find(*i);
48  if (j!=je) callback(*j);
49  }
50  }
51  }
52  }
53 
54 private:
58  int subdet_;
59 };
60 
61 #endif
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:44
std::vector< T >::const_iterator const_iterator
CaloDualConeSelector(double dRmin, double dRmax, const CaloGeometry *geom)
virtual DetIdSet getCells(const GlobalPoint &r, double dR) const
Get a list of all cells within a dR of the given cell.
const CaloGeometry * geom_
CaloDualConeSelector(double dRmin, double dRmax, const CaloGeometry *geom, DetId::Detector detector, int subdet=0)
const_iterator end() const
Definition: DetId.h:18
Detector
Definition: DetId.h:24
void selectCallback(const GlobalPoint &p, const edm::SortedCollection< T > &inputCollection, std::function< void(const T &)> callback)
void selectCallback(double eta, double phi, const edm::SortedCollection< T > &inputCollection, std::function< void(const T &)> callback)
iterator find(key_type k)
long double T