17 const std::string&
name,
20 declareInterface<ISpacepointFeatureTool>(
this);
30 return StatusCode::SUCCESS;
37 std::map<std::string, float> features;
41 features[
"r"] = sp->
r();
42 features[
"phi"] = sp->
phi();
43 features[
"eta"] = sp->
eta();
52 features[
"cluster_eta_1"] = -1 *
std::log(
std::tan(0.5 * std::atan2(features[
"cluster_r_1"], features[
"cluster_z_1"])));
55 bool isStrip = (cluster_2 !=
nullptr);
58 float charge_count_1 = 0;
59 int pixel_count_1 = 0;
60 float loc_eta_1 = 0, loc_phi_1 = 0;
61 float glob_eta_1 = 0, glob_phi_1 = 0;
62 float localDir0_1 = 0, localDir1_1 = 0, localDir2_1 = 0;
63 float lengthDir0_1 = 0, lengthDir1_1 = 0, lengthDir2_1 = 0;
64 float eta_angle_1 = 0, phi_angle_1 = 0;
78 switch (barrel_endcap) {
99 for (
unsigned int rdo = 0; rdo < cluster->
rdoList().
size(); rdo++) {
100 charge_count_1 += cluster->
totList().at(rdo);
103 const auto &rdoID = cluster->
rdoList().at(rdo);
130 Amg::Vector3D localDirection = localEndPosition - localStartPosition;
133 localDir0_1 = localDirection[0];
134 localDir1_1 = localDirection[1];
135 localDir2_1 = localDirection[2];
140 Amg::Vector3D direction = globalEndPosition - globalStartPosition;
147 float trkphicomp = direction.dot(my_phiax);
148 float trketacomp = direction.dot(my_etaax);
149 float trknormcomp = direction.dot(my_normal);
150 eta_angle_1 = atan2(trknormcomp, trketacomp);
151 phi_angle_1 = atan2(trknormcomp, trkphicomp);
155 glob_eta_1, glob_phi_1,
156 localDir0_1, localDir1_1, localDir2_1,
157 lengthDir0_1, lengthDir1_1, lengthDir2_1,
158 eta_angle_1, phi_angle_1
161 ATH_MSG_ERROR(
"Failed at " << __LINE__ <<
" of getting SCT cluster shape info.");
165 switch (barrel_endcap) {
180 features[
"charge_count_1"] = charge_count_1;
181 features[
"count_1"] = pixel_count_1;
182 features[
"loc_eta_1"] = loc_eta_1;
183 features[
"loc_phi_1"] = loc_phi_1;
184 features[
"glob_eta_1"] = glob_eta_1;
185 features[
"glob_phi_1"] = glob_phi_1;
186 features[
"localDir0_1"] = localDir0_1;
187 features[
"localDir1_1"] = localDir1_1;
188 features[
"localDir2_1"] = localDir2_1;
189 features[
"lengthDir0_1"] = lengthDir0_1;
190 features[
"lengthDir1_1"] = lengthDir1_1;
191 features[
"lengthDir2_1"] = lengthDir2_1;
192 features[
"eta_angle_1"] = eta_angle_1;
193 features[
"phi_angle_1"] = phi_angle_1;
194 features[
"region"] = region;
202 features[
"cluster_eta_2"] = -1 *
std::log(
std::tan(0.5 * std::atan2(features[
"cluster_r_2"], features[
"cluster_z_2"])));
204 float charge_count_2 = 0;
205 int pixel_count_2 = 0;
206 float loc_eta_2 = 0, loc_phi_2 = 0;
207 float glob_eta_2 = 0, glob_phi_2 = 0;
208 float localDir0_2 = 0, localDir1_2 = 0, localDir2_2 = 0;
209 float lengthDir0_2 = 0, lengthDir1_2 = 0, lengthDir2_2 = 0;
210 float eta_angle_2 = 0, phi_angle_2 = 0;
212 glob_eta_2, glob_phi_2,
213 localDir0_2, localDir1_2, localDir2_2,
214 lengthDir0_2, lengthDir1_2, lengthDir2_2,
215 eta_angle_2, phi_angle_2
218 ATH_MSG_ERROR(
"Failed at " << __LINE__ <<
" of getting SCT cluster shape info.");
221 features[
"charge_count_2"] = charge_count_2;
222 features[
"count_2"] = pixel_count_2;
223 features[
"loc_eta_2"] = loc_eta_2;
224 features[
"loc_phi_2"] = loc_phi_2;
225 features[
"glob_eta_2"] = glob_eta_2;
226 features[
"glob_phi_2"] = glob_phi_2;
227 features[
"localDir0_2"] = localDir0_2;
228 features[
"localDir1_2"] = localDir1_2;
229 features[
"localDir2_2"] = localDir2_2;
230 features[
"lengthDir0_2"] = lengthDir0_2;
231 features[
"lengthDir1_2"] = lengthDir1_2;
232 features[
"lengthDir2_2"] = lengthDir2_2;
233 features[
"eta_angle_2"] = eta_angle_2;
234 features[
"phi_angle_2"] = phi_angle_2;
237 features[
"cluster_x_2"] = features[
"cluster_x_1"];
238 features[
"cluster_y_2"] = features[
"cluster_y_1"];
239 features[
"cluster_z_2"] = features[
"cluster_z_1"];
240 features[
"cluster_r_2"] = features[
"cluster_r_1"];
241 features[
"cluster_phi_2"] = features[
"cluster_phi_1"];
242 features[
"cluster_eta_2"] = features[
"cluster_eta_1"];
243 features[
"charge_count_2"] = features[
"charge_count_1"];
244 features[
"count_2"] = features[
"count_1"];
245 features[
"loc_eta_2"] = features[
"loc_eta_1"];
246 features[
"loc_phi_2"] = features[
"loc_phi_1"];
247 features[
"glob_eta_2"] = features[
"glob_eta_1"];
248 features[
"glob_phi_2"] = features[
"glob_phi_1"];
249 features[
"localDir0_2"] = features[
"localDir0_1"];
250 features[
"localDir1_2"] = features[
"localDir1_1"];
251 features[
"localDir2_2"] = features[
"localDir2_1"];
252 features[
"lengthDir0_2"] = features[
"lengthDir0_1"];
253 features[
"lengthDir1_2"] = features[
"lengthDir1_1"];
254 features[
"lengthDir2_2"] = features[
"lengthDir2_1"];
255 features[
"eta_angle_2"] = features[
"eta_angle_1"];
256 features[
"phi_angle_2"] = features[
"phi_angle_1"];
265 r3 += xyzVec[
idx] * xyzVec[
idx];
268 phi_ = std::atan2(xyzVec[1], xyzVec[0]);
269 float theta_ = std::acos(xyzVec[2] / r3);
274 float &charge_count,
int &pixel_count,
float &loc_eta,
float &loc_phi,
275 float &glob_eta,
float &glob_phi,
276 float &localDir0,
float &localDir1,
float &localDir2,
277 float &lengthDir0,
float &lengthDir1,
float &lengthDir2,
278 float &eta_angle,
float &phi_angle
284 std::pair<Amg::Vector3D, Amg::Vector3D> ends(
287 lengthDir0 = JanDirection[0];
288 lengthDir1 = JanDirection[1];
289 lengthDir2 = JanDirection[2];
296 ATH_MSG_ERROR(
"Failed at " << __LINE__ <<
" of accessing SCT ModuleSide Design");
297 return StatusCode::FAILURE;
301 int max_strip = -999;
306 for (
unsigned int rdo = 0; rdo < cluster->
rdoList().
size(); rdo++) {
307 const auto &rdoID = cluster->
rdoList().at(rdo);
311 if (min_strip > strip) min_strip = strip;
312 if (max_strip < strip) max_strip = strip;
326 Amg::Vector3D localDirection = localEndPosition - localStartPosition;
328 localDir0 = localDirection[0];
329 localDir1 = localDirection[1];
330 localDir2 = localDirection[2];
335 Amg::Vector3D direction = globalEndPosition - globalStartPosition;
342 float trkphicomp = direction.dot(my_phiax);
343 float trketacomp = direction.dot(my_etaax);
344 float trknormcomp = direction.dot(my_normal);
345 phi_angle = atan2(trknormcomp, trkphicomp);
346 eta_angle = atan2(trknormcomp, trketacomp);
348 return StatusCode::SUCCESS;