1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
#include "FastSimulation/CaloGeometryTools/interface/CaloDirectionOperations.h"
CaloDirection CaloDirectionOperations::add2d(const CaloDirection& dir1, const CaloDirection& dir2) {
// unsigned d1=Side(dir1);
// unsigned d2=Side(dir2);
constexpr CaloDirection tab[4][4] = {{NORTH, NORTHEAST, NONE, NORTHWEST},
{NORTHEAST, EAST, SOUTHEAST, NONE},
{NONE, SOUTHEAST, SOUTH, SOUTHWEST},
{NORTHWEST, NONE, SOUTHWEST, WEST}};
return tab[Side(dir1)][Side(dir2)];
}
CaloDirection CaloDirectionOperations::Side(unsigned i) {
constexpr CaloDirection sides[6] = {NORTH, EAST, SOUTH, WEST, UP, DOWN};
// if(i<0||i>5) return DOWN;
return sides[i];
}
unsigned CaloDirectionOperations::neighbourDirection(const CaloDirection& side) {
unsigned result;
switch (side) {
case NORTH:
result = 0;
break;
case EAST:
result = 1;
break;
case SOUTH:
result = 2;
break;
case WEST:
result = 3;
break;
case NORTHEAST:
result = 4;
break;
case SOUTHEAST:
result = 5;
break;
case SOUTHWEST:
result = 6;
break;
case NORTHWEST:
result = 7;
break;
default:
result = 999;
}
return result;
}
// It should be merged with the previous one. But I am afraid to break something
CaloDirection CaloDirectionOperations::neighbourDirection(unsigned i) {
constexpr CaloDirection sides[8] = {NORTH, EAST, SOUTH, WEST, NORTHEAST, SOUTHEAST, SOUTHWEST, NORTHWEST};
// if(i<0||i>7) return SOUTH;
return sides[i];
}
unsigned CaloDirectionOperations::Side(const CaloDirection& side) {
unsigned result;
switch (side) {
case NORTH:
result = 0;
break;
case EAST:
result = 1;
break;
case SOUTH:
result = 2;
break;
case WEST:
result = 3;
break;
case UP:
result = 4;
break;
case DOWN:
result = 5;
break;
default:
result = 999;
}
return result;
}
CaloDirection CaloDirectionOperations::oppositeSide(const CaloDirection& side) {
CaloDirection result;
switch (side) {
case UP:
result = DOWN;
break;
case DOWN:
result = UP;
break;
case EAST:
result = WEST;
break;
case WEST:
result = EAST;
break;
case NORTH:
result = SOUTH;
break;
case SOUTH:
result = NORTH;
break;
case NORTHEAST:
result = SOUTHWEST;
break;
case NORTHWEST:
result = SOUTHEAST;
break;
case SOUTHEAST:
result = NORTHWEST;
break;
case SOUTHWEST:
result = NORTHEAST;
break;
default:
result = NONE;
}
return result;
}
unsigned CaloDirectionOperations::oppositeDirection(unsigned iside) {
constexpr unsigned od[8] = {2, 3, 0, 1, 6, 7, 4, 5};
return od[iside];
// if(iside>=0&&iside<8) return od[iside];
// return 999;
}
|