CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
FWHistSliceSelector.cc
Go to the documentation of this file.
2 
5 
6 #include "TEveCaloData.h"
7 #include "TH2F.h"
8 #include "Rtypes.h"
9 
11 
13 
14 bool FWHistSliceSelector::matchCell(const TEveCaloData::CellId_t& iCell, int itemIdx) const {
15  float eta, phi;
16  getItemEntryEtaPhi(itemIdx, eta, phi);
17 
18  int idx = m_hist->FindBin(eta, phi);
19  int nBinsX = m_hist->GetXaxis()->GetNbins() + 2;
20 
21  int etaBin, phiBin, w, newPhiBin;
22  m_hist->GetBinXYZ(idx, etaBin, phiBin, w);
23 
24  if (aggregatePhiCells()) {
25  bool match = false;
26  if (TMath::Abs(eta) > 4.716) {
27  newPhiBin = ((phiBin + 1) / 4) * 4 - 1;
28  if (newPhiBin <= 0)
29  newPhiBin = 71;
30 
31  idx = etaBin + newPhiBin * nBinsX;
32  match |= (idx == iCell.fTower);
33 
34  idx += nBinsX;
35  match |= (idx == iCell.fTower);
36 
37  idx += nBinsX;
38  if (newPhiBin == 71)
39  idx = etaBin + 1 * nBinsX;
40  match |= (idx == iCell.fTower);
41 
42  idx += nBinsX;
43  match |= (idx == iCell.fTower);
44  } else if (TMath::Abs(eta) > 1.873) {
45  newPhiBin = ((phiBin + 1) / 2) * 2 - 1;
46  idx = etaBin + newPhiBin * nBinsX;
47  match = (idx == iCell.fTower || idx + nBinsX == iCell.fTower);
48  } else {
49  match = (idx == iCell.fTower);
50  }
51 
52  return match;
53  } else {
54  return idx == iCell.fTower;
55  }
56 }
57 
58 void FWHistSliceSelector::doSelect(const TEveCaloData::CellId_t& iCell) {
59  if (!m_item)
60  return;
61 
62  FWChangeSentry sentry(*(m_item->changeManager()));
63  size_t size = m_item->size();
64  for (size_t index = 0; index < size; ++index) {
66  if (matchCell(iCell, index)) {
68  break;
69  }
70  }
71  }
72 }
73 
74 void FWHistSliceSelector::doUnselect(const TEveCaloData::CellId_t& iCell) {
75  if (!m_item)
76  return;
77 
78  // std::cout <<" doUnselect "<<std::endl;
79 
80  FWChangeSentry sentry(*(m_item->changeManager()));
81 
82  size_t size = m_item->size();
83  for (size_t index = 0; index < size; ++index) {
85  if (matchCell(iCell, index)) {
86  // std::cout <<" doUnselect "<<index<<std::endl;
88  break;
89  }
90  }
91  }
92 }
bool matchCell(const TEveCaloData::CellId_t &iCell, int idx) const
FWModelChangeManager * changeManager() const
Definition: FWEventItem.h:123
bool isSelected() const
Definition: FWEventItem.h:65
void unselect(int iIndex) const
Definition: FWEventItem.cc:215
const FWEventItem * m_item
void doUnselect(const TEveCaloData::CellId_t &) override
virtual void getItemEntryEtaPhi(int itemIdx, float &eta, float &phi) const =0
FWDisplayProperties m_displayProperties
Definition: FWEventItem.h:59
size_t size() const
Definition: FWEventItem.cc:457
FWHistSliceSelector(TH2F *h, const FWEventItem *item)
void doSelect(const TEveCaloData::CellId_t &) override
virtual bool aggregatePhiCells() const
void select(int iIndex) const
Definition: FWEventItem.cc:224
std::pair< typename Association::data_type::first_type, double > match(Reference key, Association association, bool bestMatchByMaxValue)
Generic matching function.
Definition: Utils.h:10
T w() const
ModelInfo modelInfo(int iIndex) const
Definition: FWEventItem.cc:446
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
int etaBin(const l1t::HGCalMulticluster *cl)
tuple size
Write out results.