11 #include <pxd/reconstruction/PXDClusterShape.h>
13 #include <pxd/geometry/SensorInfo.h>
14 #include <pxd/reconstruction/ClusterProjection.h>
16 #include <vxd/geometry/GeoCache.h>
29 {pxdClusterShapeType::no_shape_set,
"pxd cluster shape: no shape setting"},
31 {pxdClusterShapeType::shape_1,
"pxd cluster shape: cluster 1x1 (single) pixel"},
32 {pxdClusterShapeType::shape_2_u,
"pxd cluster shape: cluster 2x1 (u,v) pixels"},
33 {pxdClusterShapeType::shape_2_v,
"pxd cluster shape: cluster 1x2 (u,v) pixels"},
34 {pxdClusterShapeType::shape_2_uv_diag,
"pxd cluster shape: cluster 2x2 diagonal (u,v) pixels"},
35 {pxdClusterShapeType::shape_2_uv_antidiag,
"pxd cluster shape: cluster 2x2 anti-diagonal (u,v) pixels"},
36 {pxdClusterShapeType::shape_N1,
"pxd cluster shape: cluster Nx1 (u,v) pixels, N > 2"},
37 {pxdClusterShapeType::shape_1M,
"pxd cluster shape: cluster 1xM (u,v) pixels, M > 2"},
38 {pxdClusterShapeType::shape_N2,
"pxd cluster shape: cluster Nx2 (u,v) pixels, N > 2"},
39 {pxdClusterShapeType::shape_2M,
"pxd cluster shape: cluster 2xM (u,v) pixels, M > 2"},
40 {pxdClusterShapeType::shape_4,
"pxd cluster shape: cluster 2x2 (u,v) four pixels"},
41 {pxdClusterShapeType::shape_3_L,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (L)"},
42 {pxdClusterShapeType::shape_3_L_mirr_u,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (mirror_u_L)"},
43 {pxdClusterShapeType::shape_3_L_mirr_v,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (mirror_v_L)"},
44 {pxdClusterShapeType::shape_3_L_mirr_uv,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (mirror_u+v_L)"},
45 {pxdClusterShapeType::shape_large,
"pxd cluster shape: larger cluster over 2 pixels in u and v"}
49 PXDClusterShape::~PXDClusterShape() {}
58 clsShape = pxdClusterShapeType::no_shape_set;
75 projU.
add(px.getU(), info.getUCellPosition(px.getU()), px.getCharge());
76 projV.
add(px.getV(), info.getVCellPosition(px.getV()), px.getCharge());
84 clsShape = pxdClusterShapeType::shape_1;
85 }
else if (CSFull == 2) {
87 clsShape = pxdClusterShapeType::shape_2_u;
89 clsShape = pxdClusterShapeType::shape_2_v;
90 }
else if ((fDiagU < (fCategU / 2.0)) && (fDiagV < (fCategV / 2.0))) {
91 clsShape = pxdClusterShapeType::shape_2_uv_diag;
93 clsShape = pxdClusterShapeType::shape_2_uv_antidiag;
95 }
else if (CSFull == 3) {
105 MissingU = (int)fCategU;
106 if ((fCategU - (
int)fCategU) < 0.5) {
110 MissingV = (int)fCategV;
111 if ((fCategV - (
int)fCategV) < 0.5) {
115 if ((MisU == 1) && (MisV == 1)) {
116 clsShape = pxdClusterShapeType::shape_3_L;
118 }
else if ((MisU == 0) && (MisV == 1)) {
119 clsShape = pxdClusterShapeType::shape_3_L_mirr_u;
121 }
else if ((MisU == 1) && (MisV == 0)) {
122 clsShape = pxdClusterShapeType::shape_3_L_mirr_v;
124 }
else if ((MisU == 0) && (MisV == 0)) {
125 clsShape = pxdClusterShapeType::shape_3_L_mirr_uv;
128 }
else if (projV.
getSize() == 1) {
129 clsShape = pxdClusterShapeType::shape_N1;
130 }
else if (projU.
getSize() == 1) {
131 clsShape = pxdClusterShapeType::shape_1M;
132 }
else if (projV.
getSize() == 2) {
133 clsShape = pxdClusterShapeType::shape_N2;
134 }
else if (projU.
getSize() == 2) {
135 clsShape = pxdClusterShapeType::shape_2M;
137 clsShape = pxdClusterShapeType::shape_large;
139 }
else if (CSFull == 4) {
141 clsShape = pxdClusterShapeType::shape_4;
142 }
else if (projV.
getSize() == 1) {
143 clsShape = pxdClusterShapeType::shape_N1;
144 }
else if (projU.
getSize() == 1) {
145 clsShape = pxdClusterShapeType::shape_1M;
146 }
else if (projV.
getSize() == 2) {
147 clsShape = pxdClusterShapeType::shape_N2;
148 }
else if (projU.
getSize() == 2) {
149 clsShape = pxdClusterShapeType::shape_2M;
151 clsShape = pxdClusterShapeType::shape_large;
153 }
else if (CSFull >= 5) {
155 clsShape = pxdClusterShapeType::shape_N1;
156 }
else if (projU.
getSize() == 1) {
157 clsShape = pxdClusterShapeType::shape_1M;
158 }
else if (projV.
getSize() == 2) {
159 clsShape = pxdClusterShapeType::shape_N2;
160 }
else if (projU.
getSize() == 2) {
161 clsShape = pxdClusterShapeType::shape_2M;
163 clsShape = pxdClusterShapeType::shape_large;