CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
PhysicsTowerOrganizer Class Reference

#include <HBHEIsolatedNoiseAlgos.h>

Classes

struct  towercmp
 

Public Member Functions

void findNeighbors (const CaloTowerDetId &id, std::set< const PhysicsTower * > &neighbors) const
 
void findNeighbors (const PhysicsTower *twr, std::set< const PhysicsTower * > &neighbors) const
 
void findNeighbors (int ieta, int iphi, std::set< const PhysicsTower * > &neighbors) const
 
const PhysicsTowerfindTower (const CaloTowerDetId &id) const
 
const PhysicsTowerfindTower (int ieta, int iphi) const
 
 PhysicsTowerOrganizer (const edm::Event &iEvent, const edm::EventSetup &evSetup, const edm::Handle< HBHERecHitCollection > &hbhehitcoll_h, const edm::Handle< EcalRecHitCollection > &ebhitcoll_h, const edm::Handle< EcalRecHitCollection > &eehitcoll_h, const edm::Handle< std::vector< reco::TrackExtrapolation > > &trackextrapcoll_h, const ObjectValidatorAbs &objectvalidator, const CaloTowerConstituentsMap &ctcm)
 
virtual ~PhysicsTowerOrganizer ()
 

Private Member Functions

PhysicsTowerfindTower (const CaloTowerDetId &id)
 
PhysicsTowerfindTower (int ieta, int iphi)
 
void insert_ (CaloTowerDetId &id, const HBHERecHit *hit)
 
void insert_ (CaloTowerDetId &id, const EcalRecHit *hit)
 
void insert_ (CaloTowerDetId &id, const reco::Track *hit)
 

Private Attributes

std::set< PhysicsTower, towercmptowers_
 

Detailed Description

Definition at line 165 of file HBHEIsolatedNoiseAlgos.h.

Constructor & Destructor Documentation

PhysicsTowerOrganizer::PhysicsTowerOrganizer ( const edm::Event iEvent,
const edm::EventSetup evSetup,
const edm::Handle< HBHERecHitCollection > &  hbhehitcoll_h,
const edm::Handle< EcalRecHitCollection > &  ebhitcoll_h,
const edm::Handle< EcalRecHitCollection > &  eehitcoll_h,
const edm::Handle< std::vector< reco::TrackExtrapolation > > &  trackextrapcoll_h,
const ObjectValidatorAbs objectvalidator,
const CaloTowerConstituentsMap ctcm 
)

Definition at line 130 of file HBHEIsolatedNoiseAlgos.cc.

References DetId::Ecal, EcalBarrel, EcalEndcap, edm::EventSetup::get(), CaloSubdetectorGeometry::getClosestCell(), CaloGeometry::getSubdetectorGeometry(), HBHERecHit::id(), EcalRecHit::id(), insert_(), reco::TrackExtrapolation::isValid(), point, reco::TrackExtrapolation::positions(), edm::ESHandle< class >::product(), CaloTowerConstituentsMap::towerOf(), reco::TrackExtrapolation::track(), ExpressReco_HICollisions_FallBack::track, ObjectValidatorAbs::validHit(), and ObjectValidatorAbs::validTrack().

138 {
139  // get some geometries
141  evSetup.get<CaloGeometryRecord>().get(pG);
142  const CaloGeometry* geo = pG.product();
145 
146  // do the HCAL hits
147  for(HBHERecHitCollection::const_iterator it=hbhehitcoll_h->begin(); it!=hbhehitcoll_h->end(); ++it) {
148  const HBHERecHit* hit=&(*it);
149 
150  // check that the hit is valid
151  if(!objectvalidator.validHit(*hit)) continue;
152 
153  // add the hit to the organizer
154  CaloTowerDetId tid = ctcm.towerOf(hit->id());
155  insert_(tid, hit);
156  }
157 
158  // do the EB hits
159  for(EcalRecHitCollection::const_iterator it=ebhitcoll_h->begin(); it!=ebhitcoll_h->end(); ++it) {
160  const EcalRecHit* hit=&(*it);
161 
162  if(!objectvalidator.validHit(*hit)) continue;
163  CaloTowerDetId tid = ctcm.towerOf(hit->id());
164  insert_(tid, hit);
165  }
166 
167  // do the EE hits
168  for(EcalRecHitCollection::const_iterator it=eehitcoll_h->begin(); it!=eehitcoll_h->end(); ++it) {
169  const EcalRecHit* hit=&(*it);
170 
171  if(!objectvalidator.validHit(*hit)) continue;
172  CaloTowerDetId tid = ctcm.towerOf(hit->id());
173  insert_(tid, hit);
174  }
175 
176  // do the tracks
177  for(std::vector<reco::TrackExtrapolation>::const_iterator it=trackextrapcoll_h->begin(); it!=trackextrapcoll_h->end(); ++it) {
178  const reco::TrackExtrapolation* extrap=&(*it);
179  const reco::Track* track = &(*(extrap->track()));
180 
181  // validate track
182  if(!objectvalidator.validTrack(*track)) continue;
183 
184  // need a valid extrapolation point
185  if(extrap->positions().size()<=0 || !(extrap->isValid().front())) continue;
186 
187  // get the point
188  const GlobalPoint point(extrap->positions().front().x(),
189  extrap->positions().front().y(),
190  extrap->positions().front().z());
191 
192  if(std::fabs(point.eta())<1.479) {
193  EBDetId cell = gEB->getClosestCell(point);
194  CaloTowerDetId tid = ctcm.towerOf(cell);
195  insert_(tid, track);
196  } else {
197  EEDetId cell = gEE->getClosestCell(point);
198  CaloTowerDetId tid = ctcm.towerOf(cell);
199  insert_(tid, track);
200  }
201  }
202 
203  return;
204 }
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:43
HcalDetId id() const
get the id
Definition: HBHERecHit.h:21
std::vector< T >::const_iterator const_iterator
virtual bool validTrack(const reco::Track &) const =0
CaloTowerDetId towerOf(const DetId &id) const
Get the tower id for this det id (or null if not known)
void insert_(CaloTowerDetId &id, const HBHERecHit *hit)
virtual DetId getClosestCell(const GlobalPoint &r) const
DetId id() const
get the id
Definition: EcalRecHit.h:74
virtual bool validHit(const HBHERecHit &) const =0
std::vector< bool > const & isValid() const
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
reco::TrackRef const & track() const
std::vector< TrackBase::Point > const & positions() const
*vegas h *****************************************************used in the default bin number in original ***version of VEGAS is ***a higher bin number might help to derive a more precise ***grade subtle point
Definition: invegas.h:5
virtual PhysicsTowerOrganizer::~PhysicsTowerOrganizer ( )
inlinevirtual

Definition at line 182 of file HBHEIsolatedNoiseAlgos.h.

182 {}

Member Function Documentation

void PhysicsTowerOrganizer::findNeighbors ( const CaloTowerDetId id,
std::set< const PhysicsTower * > &  neighbors 
) const

Definition at line 253 of file HBHEIsolatedNoiseAlgos.cc.

References findTower(), ExpressReco_HICollisions_FallBack::id, CaloTowerDetId::ietaAbs(), CaloTowerDetId::iphi(), and CaloTowerDetId::zside().

Referenced by findNeighbors(), HBHEHitMapOrganizer::getHPDNeighbors(), and HBHEHitMapOrganizer::HBHEHitMapOrganizer().

254 {
255  // correct for the merging of the |ieta|=28-29 towers
256  CaloTowerDetId id(tempid);
257  if(tempid.ietaAbs()==29) id = CaloTowerDetId((tempid.ietaAbs()-1)*tempid.zside(), tempid.iphi());
258 
259  std::vector<CaloTowerDetId> ids;
260  // get the neighbor with higher iphi
261  if(id.ietaAbs()<=20) {
262  if(id.iphi()==72) ids.push_back(CaloTowerDetId(id.ieta(), 1));
263  else ids.push_back(CaloTowerDetId(id.ieta(), id.iphi()+1));
264  } else {
265  if(id.iphi()==71) ids.push_back(CaloTowerDetId(id.ieta(), 1));
266  else ids.push_back(CaloTowerDetId(id.ieta(), id.iphi()+2));
267  }
268 
269  // get the neighbor with the lower iphi
270  if(id.ietaAbs()<=20) {
271  if(id.iphi()==1) ids.push_back(CaloTowerDetId(id.ieta(), 72));
272  else ids.push_back(CaloTowerDetId(id.ieta(), id.iphi()-1));
273  } else {
274  if(id.iphi()==1) ids.push_back(CaloTowerDetId(id.ieta(), 71));
275  else ids.push_back(CaloTowerDetId(id.ieta(), id.iphi()-2));
276  }
277 
278  // get the neighbor with the higher ietaAbs
279  if(id.ietaAbs()==20 && (id.iphi()%2)==0)
280  ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), id.iphi()-1));
281  else
282  ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), id.iphi()));
283 
284  // get the neighbor(s) with the lower ietaAbs
285  if(id.ietaAbs()==21) {
286  ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()));
287  ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()+1));
288  } else if(id.ietaAbs()==1) {
289  ids.push_back(CaloTowerDetId(-id.ieta(), id.iphi()));
290  } else {
291  ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()));
292  }
293 
294  // get the neighbor with higher ieta and higher iphi
295  if(id.ietaAbs()<=19 || (id.ietaAbs()==20 && (id.iphi()%2)==0)) {
296  if(id.iphi()==72) ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), 1));
297  else ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), id.iphi()+1));
298  } else if(id.ietaAbs()>=21) {
299  if(id.iphi()==71) ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), 1));
300  else ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), id.iphi()+2));
301  }
302 
303  // get the neighbor with higher ieta and lower iphi
304  if(id.ietaAbs()<=19) {
305  if(id.iphi()==1) ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), 72));
306  else ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), id.iphi()-1));
307  } else if(id.ietaAbs()>=21 || (id.ietaAbs()==20 && (id.iphi()%2)==1)) {
308  if(id.iphi()==1) ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), 71));
309  else ids.push_back(CaloTowerDetId((id.ietaAbs()+1)*id.zside(), id.iphi()-2));
310  }
311 
312  // get the neighbor with lower ieta and higher iphi
313  if(id.ietaAbs()==1) {
314  if(id.iphi()==72) ids.push_back(CaloTowerDetId(-id.ieta(), 1));
315  else ids.push_back(CaloTowerDetId(-id.ieta(), id.iphi()+1));
316  } else if(id.ietaAbs()<=20) {
317  if(id.iphi()==72) ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), 1));
318  else ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()+1));
319  } else if(id.ietaAbs()>=21) {
320  if(id.iphi()==71) ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), 1));
321  else ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()+2));
322  }
323 
324  // get the neighbor with lower ieta and lower iphi
325  if(id.ietaAbs()==1) {
326  if(id.iphi()==1) ids.push_back(CaloTowerDetId(-id.ieta(), 72));
327  else ids.push_back(CaloTowerDetId(-id.ieta(), id.iphi()-1));
328  } else if(id.ietaAbs()<=20) {
329  if(id.iphi()==1) ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), 72));
330  else ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()-1));
331  } else if(id.ietaAbs()>=22) {
332  if(id.iphi()==1) ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), 71));
333  else ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()-2));
334  } else if(id.ietaAbs()==21) {
335  if(id.iphi()==1) ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), 72));
336  else ids.push_back(CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi()-1));
337  }
338 
339  // clear neighbors
340  neighbors.clear();
341 
342  // find the neighbors and add them to the eponymous set
343  for(std::vector<CaloTowerDetId>::const_iterator it=ids.begin(); it!=ids.end(); ++it) {
344  const PhysicsTower* twr=findTower(*it);
345  if(twr) neighbors.insert(twr);
346  }
347 
348  return;
349 }
const PhysicsTower * findTower(const CaloTowerDetId &id) const
void PhysicsTowerOrganizer::findNeighbors ( const PhysicsTower twr,
std::set< const PhysicsTower * > &  neighbors 
) const

Definition at line 351 of file HBHEIsolatedNoiseAlgos.cc.

References findNeighbors(), and PhysicsTower::id.

352 {
353  findNeighbors(twr->id, neighbors);
354  return;
355 }
void findNeighbors(const CaloTowerDetId &id, std::set< const PhysicsTower * > &neighbors) const
void PhysicsTowerOrganizer::findNeighbors ( int  ieta,
int  iphi,
std::set< const PhysicsTower * > &  neighbors 
) const

Definition at line 357 of file HBHEIsolatedNoiseAlgos.cc.

References findNeighbors().

358 {
359  findNeighbors(CaloTowerDetId(ieta, iphi), neighbors);
360  return;
361 }
void findNeighbors(const CaloTowerDetId &id, std::set< const PhysicsTower * > &neighbors) const
const PhysicsTower * PhysicsTowerOrganizer::findTower ( const CaloTowerDetId id) const
inline

Definition at line 225 of file HBHEIsolatedNoiseAlgos.cc.

References PhysicsTower::id, ExpressReco_HICollisions_FallBack::id, and towers_.

Referenced by findNeighbors(), findTower(), HBHEHitMapOrganizer::getHPDNeighbors(), HBHEHitMapOrganizer::HBHEHitMapOrganizer(), and insert_().

226 {
227  // create dummy PhysicsTower
228  PhysicsTower dummy;
229 
230  // correct for the merging of the |ieta|=28-29 towers
231  if(id.ietaAbs()==29) dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
232  else dummy.id=id;
233 
234  // search on the dummy
235  std::set<PhysicsTower, towercmp>::iterator it=towers_.find(dummy);
236 
237  if(it==towers_.end()) return 0;
238  return &(*it);
239 }
std::set< PhysicsTower, towercmp > towers_
const PhysicsTower * PhysicsTowerOrganizer::findTower ( int  ieta,
int  iphi 
) const
inline

Definition at line 241 of file HBHEIsolatedNoiseAlgos.cc.

References findTower().

242 {
243  CaloTowerDetId tid(ieta, iphi);
244  return findTower(tid);
245 }
const PhysicsTower * findTower(const CaloTowerDetId &id) const
PhysicsTower * PhysicsTowerOrganizer::findTower ( const CaloTowerDetId id)
private

Definition at line 206 of file HBHEIsolatedNoiseAlgos.cc.

References PhysicsTower::id, ExpressReco_HICollisions_FallBack::id, and towers_.

207 {
208  // create dummy PhysicsTower
209  PhysicsTower dummy;
210 
211  // correct for the merging of the |ieta|=28-29 towers
212  if(id.ietaAbs()==29) dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
213  else dummy.id=id;
214 
215  // search on the dummy
216  std::set<PhysicsTower, towercmp>::iterator it=towers_.find(dummy);
217 
218  if(it==towers_.end()) return 0;
219 
220  // for whatever reason, I can't get a non-const out of the find method
221  PhysicsTower &twr = const_cast<PhysicsTower&>(*it);
222  return &twr;
223 }
std::set< PhysicsTower, towercmp > towers_
PhysicsTower * PhysicsTowerOrganizer::findTower ( int  ieta,
int  iphi 
)
private

Definition at line 247 of file HBHEIsolatedNoiseAlgos.cc.

References findTower().

248 {
249  CaloTowerDetId tid(ieta, iphi);
250  return findTower(tid);
251 }
const PhysicsTower * findTower(const CaloTowerDetId &id) const
void PhysicsTowerOrganizer::insert_ ( CaloTowerDetId id,
const HBHERecHit hit 
)
private

Definition at line 363 of file HBHEIsolatedNoiseAlgos.cc.

References findTower(), PhysicsTower::hcalhits, PhysicsTower::id, ExpressReco_HICollisions_FallBack::id, and towers_.

Referenced by PhysicsTowerOrganizer().

364 {
365  PhysicsTower* twr=findTower(id);
366  if(twr==0) {
367  PhysicsTower dummy;
368  if(id.ietaAbs()==29)
369  dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
370  else
371  dummy.id = id;
372  dummy.hcalhits.insert(hit);
373  towers_.insert(dummy);
374  } else {
375  twr->hcalhits.insert(hit);
376  }
377  return;
378 }
std::set< const HBHERecHit * > hcalhits
const PhysicsTower * findTower(const CaloTowerDetId &id) const
std::set< PhysicsTower, towercmp > towers_
void PhysicsTowerOrganizer::insert_ ( CaloTowerDetId id,
const EcalRecHit hit 
)
private

Definition at line 380 of file HBHEIsolatedNoiseAlgos.cc.

References PhysicsTower::ecalhits, findTower(), PhysicsTower::id, ExpressReco_HICollisions_FallBack::id, and towers_.

381 {
382  PhysicsTower* twr=findTower(id);
383  if(twr==0) {
384  PhysicsTower dummy;
385  if(id.ietaAbs()==29)
386  dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
387  else
388  dummy.id = id;
389  dummy.ecalhits.insert(hit);
390  towers_.insert(dummy);
391  } else {
392  twr->ecalhits.insert(hit);
393  }
394  return;
395 }
const PhysicsTower * findTower(const CaloTowerDetId &id) const
std::set< PhysicsTower, towercmp > towers_
std::set< const EcalRecHit * > ecalhits
void PhysicsTowerOrganizer::insert_ ( CaloTowerDetId id,
const reco::Track hit 
)
private

Definition at line 397 of file HBHEIsolatedNoiseAlgos.cc.

References findTower(), PhysicsTower::id, ExpressReco_HICollisions_FallBack::id, towers_, and PhysicsTower::tracks.

398 {
399  PhysicsTower* twr=findTower(id);
400  if(twr==0) {
401  PhysicsTower dummy;
402  if(id.ietaAbs()==29)
403  dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
404  else
405  dummy.id = id;
406  dummy.tracks.insert(track);
407  towers_.insert(dummy);
408  } else {
409  twr->tracks.insert(track);
410  }
411  return;
412 }
const PhysicsTower * findTower(const CaloTowerDetId &id) const
std::set< PhysicsTower, towercmp > towers_
std::set< const reco::Track * > tracks

Member Data Documentation

std::set<PhysicsTower, towercmp> PhysicsTowerOrganizer::towers_
private

Definition at line 203 of file HBHEIsolatedNoiseAlgos.h.

Referenced by findTower(), and insert_().