9 #include <pxd/reconstruction/PXDClusterShape.h>
11 #include <pxd/geometry/SensorInfo.h>
12 #include <pxd/reconstruction/ClusterProjection.h>
14 #include <vxd/geometry/GeoCache.h>
27 {pxdClusterShapeType::no_shape_set,
"pxd cluster shape: no shape setting"},
29 {pxdClusterShapeType::shape_1,
"pxd cluster shape: cluster 1x1 (single) pixel"},
30 {pxdClusterShapeType::shape_2_u,
"pxd cluster shape: cluster 2x1 (u,v) pixels"},
31 {pxdClusterShapeType::shape_2_v,
"pxd cluster shape: cluster 1x2 (u,v) pixels"},
32 {pxdClusterShapeType::shape_2_uv_diag,
"pxd cluster shape: cluster 2x2 diagonal (u,v) pixels"},
33 {pxdClusterShapeType::shape_2_uv_antidiag,
"pxd cluster shape: cluster 2x2 anti-diagonal (u,v) pixels"},
34 {pxdClusterShapeType::shape_N1,
"pxd cluster shape: cluster Nx1 (u,v) pixels, N > 2"},
35 {pxdClusterShapeType::shape_1M,
"pxd cluster shape: cluster 1xM (u,v) pixels, M > 2"},
36 {pxdClusterShapeType::shape_N2,
"pxd cluster shape: cluster Nx2 (u,v) pixels, N > 2"},
37 {pxdClusterShapeType::shape_2M,
"pxd cluster shape: cluster 2xM (u,v) pixels, M > 2"},
38 {pxdClusterShapeType::shape_4,
"pxd cluster shape: cluster 2x2 (u,v) four pixels"},
39 {pxdClusterShapeType::shape_3_L,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (L)"},
40 {pxdClusterShapeType::shape_3_L_mirr_u,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (mirror_u_L)"},
41 {pxdClusterShapeType::shape_3_L_mirr_v,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (mirror_v_L)"},
42 {pxdClusterShapeType::shape_3_L_mirr_uv,
"pxd cluster shape: cluster 2x2 (u,v) three pixels: (mirror_u+v_L)"},
43 {pxdClusterShapeType::shape_large,
"pxd cluster shape: larger cluster over 2 pixels in u and v"}
47 PXDClusterShape::~PXDClusterShape() {}
56 clsShape = pxdClusterShapeType::no_shape_set;
73 projU.
add(px.getU(), info.getUCellPosition(px.getU()), px.getCharge());
74 projV.
add(px.getV(), info.getVCellPosition(px.getV()), px.getCharge());
82 clsShape = pxdClusterShapeType::shape_1;
83 }
else if (CSFull == 2) {
85 clsShape = pxdClusterShapeType::shape_2_u;
87 clsShape = pxdClusterShapeType::shape_2_v;
88 }
else if ((fDiagU < (fCategU / 2.0)) && (fDiagV < (fCategV / 2.0))) {
89 clsShape = pxdClusterShapeType::shape_2_uv_diag;
91 clsShape = pxdClusterShapeType::shape_2_uv_antidiag;
93 }
else if (CSFull == 3) {
99 if ((fCategU - (
int)fCategU) < 0.5) {
102 if ((fCategV - (
int)fCategV) < 0.5) {
105 if ((MisU == 1) && (MisV == 1)) {
106 clsShape = pxdClusterShapeType::shape_3_L;
108 }
else if ((MisU == 0) && (MisV == 1)) {
109 clsShape = pxdClusterShapeType::shape_3_L_mirr_u;
111 }
else if ((MisU == 1) && (MisV == 0)) {
112 clsShape = pxdClusterShapeType::shape_3_L_mirr_v;
114 }
else if ((MisU == 0) && (MisV == 0)) {
115 clsShape = pxdClusterShapeType::shape_3_L_mirr_uv;
118 }
else if (projV.
getSize() == 1) {
119 clsShape = pxdClusterShapeType::shape_N1;
120 }
else if (projU.
getSize() == 1) {
121 clsShape = pxdClusterShapeType::shape_1M;
122 }
else if (projV.
getSize() == 2) {
123 clsShape = pxdClusterShapeType::shape_N2;
124 }
else if (projU.
getSize() == 2) {
125 clsShape = pxdClusterShapeType::shape_2M;
127 clsShape = pxdClusterShapeType::shape_large;
129 }
else if (CSFull == 4) {
131 clsShape = pxdClusterShapeType::shape_4;
132 }
else if (projV.
getSize() == 1) {
133 clsShape = pxdClusterShapeType::shape_N1;
134 }
else if (projU.
getSize() == 1) {
135 clsShape = pxdClusterShapeType::shape_1M;
136 }
else if (projV.
getSize() == 2) {
137 clsShape = pxdClusterShapeType::shape_N2;
138 }
else if (projU.
getSize() == 2) {
139 clsShape = pxdClusterShapeType::shape_2M;
141 clsShape = pxdClusterShapeType::shape_large;
143 }
else if (CSFull >= 5) {
145 clsShape = pxdClusterShapeType::shape_N1;
146 }
else if (projU.
getSize() == 1) {
147 clsShape = pxdClusterShapeType::shape_1M;
148 }
else if (projV.
getSize() == 2) {
149 clsShape = pxdClusterShapeType::shape_N2;
150 }
else if (projU.
getSize() == 2) {
151 clsShape = pxdClusterShapeType::shape_2M;
153 clsShape = pxdClusterShapeType::shape_large;
Class representing a possible cluster during clustering of the PXD It supports merging of different c...
const std::vector< Pixel > & pixels() const
get a reference to all pixels in the cluster
Helper struct to collect information about the 1D projection of a Pixel cluster.
void add(unsigned int cell, float position, float charge)
Add Pixel information to the projection.
void finalize()
Finish calculation of center of gravity and set correct cluster size.
unsigned int getSize() const
Return the projected size of the cluster.
Class to represent one pixel, used in clustering for fast access.
Specific implementation of SensorInfo for PXD Sensors which provides additional pixel specific inform...
Class to uniquely identify a any structure of the PXD and SVD.
std::map< pxdClusterShapeType, std::string > pxdClusterShapeDescr
Type specifies cluster shape type description.
pxdClusterShapeType
Type specifies cluster shape type.
Abstract base class for different kinds of events.