CMS 3D CMS Logo

FWHGTowerSliceSelector.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Calo
4 // Class : FWHGTowerSliceSelector
5 //
6 // Implementation:
7 // [Notes on implementation]
8 //
9 // Original Author: Alja Mrak-Tadel
10 // Created: Wed Jun 2 17:39:44 CEST 2010
11 //
12 
13 // system include files
14 
15 // user include files
16 #include "TEveVector.h"
17 #include "TEveCaloData.h"
18 #include "TH2F.h"
19 
27 
28 //
29 // member functions
30 //
31 
32 void FWHGTowerSliceSelector::doSelect(const TEveCaloData::CellId_t& iCell) {
33  if (!m_item)
34  return;
35 
36  const HGCRecHitCollection* hits = nullptr;
37  m_item->get(hits);
38  assert(nullptr != hits);
39 
40  int index = 0;
41  FWChangeSentry sentry(*(m_item->changeManager()));
42  for (HGCRecHitCollection::const_iterator it = hits->begin(); it != hits->end(); ++it, ++index) {
43  DetId id((*it).detid());
44  if (findBinFromId(id, iCell.fTower) && m_item->modelInfo(index).m_displayProperties.isVisible() &&
45  !m_item->modelInfo(index).isSelected()) {
46  // std::cout <<" doSelect "<<index<<std::endl;
47  m_item->select(index);
48  }
49  }
50 }
51 
52 void FWHGTowerSliceSelector::doUnselect(const TEveCaloData::CellId_t& iCell) {
53  if (!m_item)
54  return;
55 
56  const HGCRecHitCollection* hits = nullptr;
57  m_item->get(hits);
58  assert(nullptr != hits);
59 
60  int index = 0;
61  FWChangeSentry sentry(*(m_item->changeManager()));
62  for (HGCRecHitCollection::const_iterator it = hits->begin(); it != hits->end(); ++it, ++index) {
63  DetId id((*it).detid());
64  if (findBinFromId(id, iCell.fTower) && m_item->modelInfo(index).m_displayProperties.isVisible() &&
65  m_item->modelInfo(index).isSelected()) {
66  // std::cout <<" doUnselect "<<index<<std::endl;
67  m_item->unselect(index);
68  }
69  }
70 }
71 
73  TEveCaloData::vCellId_t cellIds;
74  const float* corners = m_item->getGeom()->getCorners(detId);
75  if (corners == nullptr) {
76  fwLog(fwlog::kInfo) << "FWHGTowerSliceSelector cannot get geometry for DetId: " << detId.rawId() << ". Ignored.\n";
77  return false;
78  }
79  std::vector<TEveVector> front(4);
80  float eta = 0, phi = 0;
81  int j = 0;
82  for (int i = 0; i < 4; ++i) {
83  front[i] = TEveVector(corners[j], corners[j + 1], corners[j + 2]);
84  j += 3;
85 
86  eta += front[i].Eta();
87  phi += front[i].Phi();
88  }
89  eta /= 4;
90  phi /= 4;
91 
92  const TEveCaloData::CellGeom_t& cg = m_vecData->GetCellGeom()[tower];
93  if ((eta >= cg.fEtaMin && eta <= cg.fEtaMax) && (phi >= cg.fPhiMin && phi <= cg.fPhiMax)) {
94  return true;
95  }
96 
97  return false;
98 }
void doSelect(const TEveCaloData::CellId_t &) override
FWModelChangeManager * changeManager() const
Definition: FWEventItem.h:123
bool isSelected() const
Definition: FWEventItem.h:65
void get(const T *&oData) const
Definition: FWEventItem.h:78
void doUnselect(const TEveCaloData::CellId_t &) override
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::vector< T >::const_iterator const_iterator
void unselect(int iIndex) const
Definition: FWEventItem.cc:215
const FWEventItem * m_item
bool findBinFromId(DetId &id, int tower) const
FWDisplayProperties m_displayProperties
Definition: FWEventItem.h:59
const_iterator end() const
Definition: DetId.h:17
const float * getCorners(unsigned int id) const
Definition: FWGeometry.cc:405
#define fwLog(_level_)
Definition: fwLog.h:45
void select(int iIndex) const
Definition: FWEventItem.cc:224
ModelInfo modelInfo(int iIndex) const
Definition: FWEventItem.cc:446
const FWGeometry * getGeom() const
Definition: FWEventItem.cc:548
const_iterator begin() const