test
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 166 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 129 of file HBHEIsolatedNoiseAlgos.cc.

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

137 {
138  // get some geometries
140  evSetup.get<CaloGeometryRecord>().get(pG);
141  const CaloGeometry* geo = pG.product();
144 
145  // do the HCAL hits
146  for(HBHERecHitCollection::const_iterator it=hbhehitcoll_h->begin(); it!=hbhehitcoll_h->end(); ++it) {
147  const HBHERecHit* hit=&(*it);
148 
149  // check that the hit is valid
150  if(!objectvalidator.validHit(*hit)) continue;
151 
152  // add the hit to the organizer
153  CaloTowerDetId tid = ctcm.towerOf(hit->id());
154  insert_(tid, hit);
155  }
156 
157  // do the EB hits
158  for(EcalRecHitCollection::const_iterator it=ebhitcoll_h->begin(); it!=ebhitcoll_h->end(); ++it) {
159  const EcalRecHit* hit=&(*it);
160 
161  if(!objectvalidator.validHit(*hit)) continue;
162  CaloTowerDetId tid = ctcm.towerOf(hit->id());
163  insert_(tid, hit);
164  }
165 
166  // do the EE hits
167  for(EcalRecHitCollection::const_iterator it=eehitcoll_h->begin(); it!=eehitcoll_h->end(); ++it) {
168  const EcalRecHit* hit=&(*it);
169 
170  if(!objectvalidator.validHit(*hit)) continue;
171  CaloTowerDetId tid = ctcm.towerOf(hit->id());
172  insert_(tid, hit);
173  }
174 
175  // do the tracks
176  for(std::vector<reco::TrackExtrapolation>::const_iterator it=trackextrapcoll_h->begin(); it!=trackextrapcoll_h->end(); ++it) {
177  const reco::TrackExtrapolation* extrap=&(*it);
178  const reco::Track* track = &(*(extrap->track()));
179 
180  // validate track
181  if(!objectvalidator.validTrack(*track)) continue;
182 
183  // get the point
184  if ( extrap->positions().size()==0 ) continue;
185  const GlobalPoint point(extrap->positions().front().x(),
186  extrap->positions().front().y(),
187  extrap->positions().front().z());
188 
189 
190  if(std::fabs(point.eta())<1.479) {
191  EBDetId cell = gEB->getClosestCell(point);
192  CaloTowerDetId tid = ctcm.towerOf(cell);
193  insert_(tid, track);
194  } else {
195  EEDetId cell = gEE->getClosestCell(point);
196  CaloTowerDetId tid = ctcm.towerOf(cell);
197  insert_(tid, track);
198  }
199  }
200 
201  return;
202 }
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:45
HcalDetId id() const
get the id
Definition: HBHERecHit.h:23
std::vector< HBHERecHit >::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:77
virtual bool validHit(const HBHERecHit &) const =0
const T & get() const
Definition: EventSetup.h:56
T const * product() const
Definition: ESHandle.h:86
reco::TrackRef const & track() const
std::vector< 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 183 of file HBHEIsolatedNoiseAlgos.h.

183 {}

Member Function Documentation

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

Definition at line 251 of file HBHEIsolatedNoiseAlgos.cc.

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

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

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

Definition at line 349 of file HBHEIsolatedNoiseAlgos.cc.

References findNeighbors(), and PhysicsTower::id.

350 {
351  findNeighbors(twr->id, neighbors);
352  return;
353 }
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 355 of file HBHEIsolatedNoiseAlgos.cc.

References findNeighbors().

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

Definition at line 223 of file HBHEIsolatedNoiseAlgos.cc.

References PhysicsTower::id, towers_, and ecaldqm::zside().

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

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

Definition at line 239 of file HBHEIsolatedNoiseAlgos.cc.

References findTower().

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

Definition at line 204 of file HBHEIsolatedNoiseAlgos.cc.

References PhysicsTower::id, towers_, and ecaldqm::zside().

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

Definition at line 245 of file HBHEIsolatedNoiseAlgos.cc.

References findTower().

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

Definition at line 361 of file HBHEIsolatedNoiseAlgos.cc.

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

Referenced by PhysicsTowerOrganizer().

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

Definition at line 378 of file HBHEIsolatedNoiseAlgos.cc.

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

379 {
380  PhysicsTower* twr=findTower(id);
381  if(twr==0) {
382  PhysicsTower dummy;
383  if(id.ietaAbs()==29)
384  dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
385  else
386  dummy.id = id;
387  dummy.ecalhits.insert(hit);
388  towers_.insert(dummy);
389  } else {
390  twr->ecalhits.insert(hit);
391  }
392  return;
393 }
int zside(DetId const &)
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 395 of file HBHEIsolatedNoiseAlgos.cc.

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

396 {
397  PhysicsTower* twr=findTower(id);
398  if(twr==0) {
399  PhysicsTower dummy;
400  if(id.ietaAbs()==29)
401  dummy.id = CaloTowerDetId((id.ietaAbs()-1)*id.zside(), id.iphi());
402  else
403  dummy.id = id;
404  dummy.tracks.insert(track);
405  towers_.insert(dummy);
406  } else {
407  twr->tracks.insert(track);
408  }
409  return;
410 }
int zside(DetId const &)
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 204 of file HBHEIsolatedNoiseAlgos.h.

Referenced by findTower(), and insert_().