CMS 3D CMS Logo

UCTGeometryExtended.cc
Go to the documentation of this file.
1 #include <cstdint>
2 #include <cstdlib>
3 #include <iostream>
4 
5 #include "UCTGeometryExtended.hh"
6 using namespace l1tcalo;
7 
8 UCTRegionIndex UCTGeometryExtended::getUCTRegionNorth(UCTRegionIndex center) {
9  int eta = center.first;
10  uint32_t phi = center.second;
11  phi += 1;
12  if (phi == MaxUCTRegionsPhi)
13  phi = 0;
14  else if (phi > MaxUCTRegionsPhi)
15  phi = 0xDEADBEEF;
16  return UCTRegionIndex(eta, phi);
17 }
18 
19 UCTRegionIndex UCTGeometryExtended::getUCTRegionSouth(UCTRegionIndex center) {
20  int eta = center.first;
21  uint32_t phi = center.second;
22  if (phi == 0)
23  phi = MaxUCTRegionsPhi - 1;
24  else if (phi < MaxUCTRegionsPhi)
25  phi -= 1;
26  else
27  phi = 0xDEADBEEF;
28  return UCTRegionIndex(eta, phi);
29 }
30 
31 UCTRegionIndex UCTGeometryExtended::getUCTRegionEast(UCTRegionIndex center) {
32  int eta = center.first;
33  uint32_t phi = center.second;
34  eta += 1;
35  if (eta == 0)
36  eta = 1; // eta = 0 is illegal, go one above
37  int etaMax = MaxUCTRegionsEta;
38  if (eta > etaMax)
39  eta = 0; // beyond high Eta edge - should not be used
40  return UCTRegionIndex(eta, phi);
41 }
42 
43 UCTRegionIndex UCTGeometryExtended::getUCTRegionWest(UCTRegionIndex center) {
44  int eta = center.first;
45  uint32_t phi = center.second;
46  eta -= 1;
47  if (eta == 0)
48  eta = -1; // eta = 0 is illegal, go one below
49  int etaMin = -MaxUCTRegionsEta;
50  if (eta < etaMin)
51  eta = 0; // beyond high Eta edge - should not be used
52  return UCTRegionIndex(eta, phi);
53 }
54 
55 UCTRegionIndex UCTGeometryExtended::getUCTRegionNE(UCTRegionIndex center) {
56  int eta = center.first;
57  uint32_t phi = center.second;
58  phi += 1;
59  if (phi == MaxUCTRegionsPhi)
60  phi = 0;
61  else if (phi > MaxUCTRegionsPhi)
62  phi = 0xDEADBEEF;
63  eta += 1;
64  if (eta == 0)
65  eta = 1; // eta = 0 is illegal, go one above
66  int etaMax = MaxUCTRegionsEta;
67  if (eta > etaMax)
68  eta = 0; // beyond high Eta edge - should not be used
69  return UCTRegionIndex(eta, phi);
70 }
71 
72 UCTRegionIndex UCTGeometryExtended::getUCTRegionNW(UCTRegionIndex center) {
73  int eta = center.first;
74  uint32_t phi = center.second;
75  phi += 1;
76  if (phi == MaxUCTRegionsPhi)
77  phi = 0;
78  else if (phi > MaxUCTRegionsPhi)
79  phi = 0xDEADBEEF;
80  eta -= 1;
81  if (eta == 0)
82  eta = -1; // eta = 0 is illegal, go one below
83  int etaMin = -MaxUCTRegionsEta;
84  if (eta < etaMin)
85  eta = 0; // beyond high Eta edge - should not be used
86  return UCTRegionIndex(eta, phi);
87 }
88 
89 UCTRegionIndex UCTGeometryExtended::getUCTRegionSE(UCTRegionIndex center) {
90  int eta = center.first;
91  uint32_t phi = center.second;
92  if (phi == 0)
93  phi = MaxUCTRegionsPhi - 1;
94  else if (phi < MaxUCTRegionsPhi)
95  phi -= 1;
96  else
97  phi = 0xDEADBEEF;
98  eta += 1;
99  if (eta == 0)
100  eta = 1; // eta = 0 is illegal, go one above
101  int etaMax = MaxUCTRegionsEta;
102  if (eta > etaMax)
103  eta = 0; // beyond high Eta edge - should not be used
104  return UCTRegionIndex(eta, phi);
105 }
106 
107 UCTRegionIndex UCTGeometryExtended::getUCTRegionSW(UCTRegionIndex center) {
108  int eta = center.first;
109  uint32_t phi = center.second;
110  if (phi == 0)
111  phi = MaxUCTRegionsPhi - 1;
112  else if (phi < MaxUCTRegionsPhi)
113  phi -= 1;
114  else
115  phi = 0xDEADBEEF;
116  eta -= 1;
117  if (eta == 0)
118  eta = -1; // eta = 0 is illegal, go one below
119  int etaMin = -MaxUCTRegionsEta;
120  if (eta < etaMin)
121  eta = 0; // beyond high Eta edge - should not be used
122  return UCTRegionIndex(eta, phi);
123 }
124 
125 bool UCTGeometryExtended::areNeighbors(UCTTowerIndex a, UCTTowerIndex b) {
126  int diffEta = std::abs(a.first - b.first); // Note eta values run -28 to +28, 0 excluded
127  int diffPhi = std::abs(((int)a.second - (int)b.second)); // Note phi values run 1-72, with 72 & 1 as neighbors
128  if ((diffEta <= 1 || (a.first == -1 && b.first == 1) || (a.first == 1 && b.first == -1)) &&
129  (diffPhi <= 1 || diffPhi == 71))
130  return true;
131  return false;
132 }
133 
134 bool UCTGeometryExtended::isEdgeTower(UCTTowerIndex a) {
135  int eta = a.first;
136  int etaMin = -MaxUCTRegionsEta;
137  int etaMax = MaxUCTRegionsEta;
138  if (eta == etaMin || eta == etaMax)
139  return true;
140  return false;
141 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121