CMS 3D CMS Logo

FWHGCalTriggerCellProxyBuilder.cc
Go to the documentation of this file.
2 
6 
11 // #include "L1Trigger/L1THGCal/plugins/geometries/HGCalTriggerGeometryV9Imp2.cc"
12 
13 #include "TEveBoxSet.h"
14 
15 class FWHGCalTriggerCellProxyBuilder : public FWL1THGCalProxyTemplate<l1t::HGCalTriggerCell> {
16 public:
19 
21 
22 private:
23  FWHGCalTriggerCellProxyBuilder(const FWHGCalTriggerCellProxyBuilder &) = delete; // stop default
24  const FWHGCalTriggerCellProxyBuilder &operator=(const FWHGCalTriggerCellProxyBuilder &) = delete; // stop default
25 
26  void build(const l1t::HGCalTriggerCell &iData,
27  unsigned int iIndex,
28  TEveElement &oItemHolder,
29  const FWViewContext *) override;
30 };
31 
33  unsigned int iIndex,
34  TEveElement &oItemHolder,
35  const FWViewContext *) {
36  const long layer = item()->getConfig()->value<long>("Layer");
37  const double saturation_energy = item()->getConfig()->value<double>("EnergyCutOff");
38  const bool heatmap = item()->getConfig()->value<bool>("Heatmap");
39 
40  const bool z_plus = item()->getConfig()->value<bool>("Z+");
41  const bool z_minus = item()->getConfig()->value<bool>("Z-");
42 
43  bool h_hex(false);
44  TEveBoxSet *hex_boxset = new TEveBoxSet();
45  if (!heatmap)
46  hex_boxset->UseSingleColor();
47  hex_boxset->SetPickable(true);
48  hex_boxset->Reset(TEveBoxSet::kBT_Hex, true, 64);
49  hex_boxset->SetAntiFlick(true);
50 
51  bool h_box(false);
52  TEveBoxSet *boxset = new TEveBoxSet();
53  if (!heatmap)
54  boxset->UseSingleColor();
55  boxset->SetPickable(true);
56  boxset->Reset(TEveBoxSet::kBT_FreeBox, true, 64);
57  boxset->SetAntiFlick(true);
58 
59  const float energy = fmin(10 * iData.energy() / saturation_energy, 1.0);
60 
61  std::unordered_set<unsigned> cells = getCellsFromTriggerCell(iData.detId());
62 
63  for (std::unordered_set<unsigned>::const_iterator it = cells.begin(), itEnd = cells.end(); it != itEnd; ++it) {
64  const bool z = (*it >> 25) & 0x1;
65 
66  // discard everything thats not at the side that we are intersted in
67  if (((z_plus & z_minus) != 1) && (((z_plus | z_minus) == 0) || !(z == z_minus || z == !z_plus)))
68  continue;
69 
70  const float *corners = item()->getGeom()->getCorners(*it);
71  const float *parameters = item()->getGeom()->getParameters(*it);
72  const float *shapes = item()->getGeom()->getShapePars(*it);
73 
74  if (corners == nullptr || parameters == nullptr || shapes == nullptr) {
75  continue;
76  }
77 
78  const int total_points = parameters[0];
79  const bool isScintillator = (total_points == 4);
80  const uint8_t type = ((*it >> 28) & 0xF);
81 
82  uint8_t ll = layer;
83  if (layer > 0) {
84  if (layer > 28) {
85  if (type == 8) {
86  continue;
87  }
88  ll -= 28;
89  } else {
90  if (type != 8) {
91  continue;
92  }
93  }
94 
95  if (ll != ((*it >> (isScintillator ? 17 : 20)) & 0x1F))
96  continue;
97  }
98 
99  // Scintillator
100  if (isScintillator) {
101  const int total_vertices = 3 * total_points;
102 
103  std::vector<float> pnts(24);
104  for (int i = 0; i < total_points; ++i) {
105  pnts[i * 3 + 0] = corners[i * 3];
106  pnts[i * 3 + 1] = corners[i * 3 + 1];
107  pnts[i * 3 + 2] = corners[i * 3 + 2];
108 
109  pnts[(i * 3 + 0) + total_vertices] = corners[i * 3];
110  pnts[(i * 3 + 1) + total_vertices] = corners[i * 3 + 1];
111  pnts[(i * 3 + 2) + total_vertices] = corners[i * 3 + 2] + shapes[3];
112  }
113  boxset->AddBox(&pnts[0]);
114  boxset->DigitColor(energy * 255, 0, 255 - energy * 255);
115 
116  h_box = true;
117  }
118  // Silicon
119  else {
120  const int offset = 9;
121 
122  float centerX = (corners[6] + corners[6 + offset]) / 2;
123  float centerY = (corners[7] + corners[7 + offset]) / 2;
124  float radius = fabs(corners[6] - corners[6 + offset]) / 2;
125  hex_boxset->AddHex(TEveVector(centerX, centerY, corners[2]), radius, 90.0, shapes[3]);
126  hex_boxset->DigitColor(energy * 255, 0, 255 - energy * 255);
127 
128  h_hex = true;
129  }
130  }
131 
132  if (h_hex) {
133  hex_boxset->RefitPlex();
134 
135  hex_boxset->CSCTakeAnyParentAsMaster();
136  if (!heatmap) {
137  hex_boxset->CSCApplyMainColorToMatchingChildren();
138  hex_boxset->CSCApplyMainTransparencyToMatchingChildren();
139  hex_boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
140  hex_boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
141  }
142  oItemHolder.AddElement(hex_boxset);
143  }
144 
145  if (h_box) {
146  boxset->RefitPlex();
147 
148  boxset->CSCTakeAnyParentAsMaster();
149  if (!heatmap) {
150  boxset->CSCApplyMainColorToMatchingChildren();
151  boxset->CSCApplyMainTransparencyToMatchingChildren();
152  boxset->SetMainColor(item()->modelInfo(iIndex).displayProperties().color());
153  boxset->SetMainTransparency(item()->defaultDisplayProperties().transparency());
154  }
155  oItemHolder.AddElement(boxset);
156  }
157 }
158 
161  "HGCal Trigger Cell",
mps_fire.i
i
Definition: mps_fire.py:355
FWL1THGCalProxyTemplate
Definition: FWL1THGCalProxyTemplate.cc:12
FWGeometry::getCorners
const float * getCorners(unsigned int id) const
Definition: FWGeometry.cc:464
HGCScintillatorDetId.h
FWEventItem::getConfig
FWProxyBuilderConfiguration * getConfig() const
Definition: FWEventItem.h:150
FWL1THGCalProxyTemplate.cc
REGISTER_FWPROXYBUILDER
#define REGISTER_FWPROXYBUILDER(_name_, _type_, _purpose_, _view_)
Definition: FWProxyBuilderFactory.h:33
FWHGCalTriggerCellProxyBuilder::FWHGCalTriggerCellProxyBuilder
FWHGCalTriggerCellProxyBuilder(void)
Definition: FWHGCalTriggerCellProxyBuilder.cc:17
REGISTER_PROXYBUILDER_METHODS
#define REGISTER_PROXYBUILDER_METHODS()
Definition: register_dataproxybuilder_macro.h:28
FWL1THGCalProxyTemplate< l1t::HGCalTriggerCell >::getCellsFromTriggerCell
std::unordered_set< unsigned > getCellsFromTriggerCell(const unsigned trigger_cell_id) const
Definition: FWL1THGCalProxyTemplate.cc:26
FWGeometry::getShapePars
const float * getShapePars(unsigned int id) const
Definition: FWGeometry.cc:486
FWHGCalTriggerCellProxyBuilder::~FWHGCalTriggerCellProxyBuilder
~FWHGCalTriggerCellProxyBuilder(void) override
Definition: FWHGCalTriggerCellProxyBuilder.cc:18
BuilderUtils.h
parameters
parameters
Definition: BeamSpot_PayloadInspector.cc:14
FWViewType::kAll3DBits
static const int kAll3DBits
Definition: FWViewType.h:68
FWGeometry::getParameters
const float * getParameters(unsigned int id) const
Definition: FWGeometry.cc:475
FWProxyBuilderBase::layer
int layer() const
Definition: FWProxyBuilderBase.cc:414
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
FWHGCalTriggerCellProxyBuilder
Definition: FWHGCalTriggerCellProxyBuilder.cc:15
DDAxes::z
l1t::HGCalTriggerCell
Definition: HGCalTriggerCell.h:14
HCALHighEnergyHPDFilter_cfi.energy
energy
Definition: HCALHighEnergyHPDFilter_cfi.py:5
FWGeometry.h
l1t::HGCalTriggerCell::detId
uint32_t detId() const
Definition: HGCalTriggerCell.h:25
HcalDetId.h
FWProxyBuilderBase::build
void build()
Definition: FWProxyBuilderBase.cc:110
FWEventItem.h
FWViewContext
Definition: FWViewContext.h:32
FWEventItem::getGeom
const FWGeometry * getGeom() const
Definition: FWEventItem.cc:548
FWProxyBuilderBase::item
const FWEventItem * item() const
Definition: FWProxyBuilderBase.h:64
FWHGCalTriggerCellProxyBuilder::operator=
const FWHGCalTriggerCellProxyBuilder & operator=(const FWHGCalTriggerCellProxyBuilder &)=delete
type
type
Definition: HCALResponse.h:21
FWProxyBuilderConfiguration::value
T value(const std::string &name)
Definition: FWProxyBuilderConfiguration.cc:123
postprocess-scan-build.cells
cells
Definition: postprocess-scan-build.py:13
CosmicsPD_Skims.radius
radius
Definition: CosmicsPD_Skims.py:135
reco::LeafCandidate::energy
double energy() const final
energy
Definition: LeafCandidate.h:125
HGCalTriggerCell.h
hltrates_dqm_sourceclient-live_cfg.offset
offset
Definition: hltrates_dqm_sourceclient-live_cfg.py:78
HGCalTriggerDetId.h