172{
174 size_t mints = mTrack.second.materialInteractions.size();
175
176
195
204 }
205
208 }
209
228
237 }
240 }
241
242
243 m_tX0 = mTrack.second.materialInX0;
244 m_tL0 = mTrack.second.materialInL0;
245
246
247 m_v_x = mTrack.first.first.x();
248 m_v_y = mTrack.first.first.y();
249 m_v_z = mTrack.first.first.z();
250 m_v_px = mTrack.first.second.x();
251 m_v_py = mTrack.first.second.y();
252 m_v_pz = mTrack.first.second.z();
255
256
257 for (auto& mint : mTrack.second.materialInteractions) {
258
259 m_step_x.push_back(mint.position.x());
260 m_step_y.push_back(mint.position.y());
261 m_step_z.push_back(mint.position.z());
265
266 Acts::Vector3 prePos
267 = mint.position - 0.5 * mint.pathCorrection * mint.direction;
268 Acts::Vector3 posPos
269 = mint.position + 0.5 * mint.pathCorrection * mint.direction;
276
278 const Acts::Surface* surface = mint.surface;
279 Acts::GeometryIdentifier layerID;
280 if (surface) {
282 auto sfIntersection = surface
283 ->intersect(gctx.
context(), mint.position,
284 mint.direction, Acts::BoundaryTolerance::None())
285 .closest();
286 layerID = surface->geometryId();
287 m_sur_id.push_back(layerID.value());
289 m_sur_x.push_back(sfIntersection.position().x());
290 m_sur_y.push_back(sfIntersection.position().y());
291 m_sur_z.push_back(sfIntersection.position().z());
292
293 const Acts::SurfaceBounds& surfaceBounds = surface->bounds();
294 const Acts::RadialBounds* radialBounds =
295 dynamic_cast<const Acts::RadialBounds*>(&surfaceBounds);
296 const Acts::CylinderBounds* cylinderBounds =
297 dynamic_cast<const Acts::CylinderBounds*>(&surfaceBounds);
298
299 if (radialBounds) {
302 } else if (cylinderBounds) {
304 -cylinderBounds->get(Acts::CylinderBounds::eHalfLengthZ));
306 cylinderBounds->get(Acts::CylinderBounds::eHalfLengthZ));
307 } else {
310 }
311 } else {
312 m_sur_id.push_back(layerID.withVolume(0)
313 .withBoundary(0)
314 .withLayer(0)
315 .withApproach(0)
316 .withSensitive(0)
317 .value());
319
325 }
326 }
327
329 const Acts::InteractionVolume& volume = mint.volume;
330 Acts::GeometryIdentifier vlayerID;
331 if (!volume.empty()) {
332 vlayerID = volume.geometryId();
333 m_vol_id.push_back(vlayerID.value());
334 } else {
335 m_vol_id.push_back(vlayerID.withVolume(0)
336 .withBoundary(0)
337 .withLayer(0)
338 .withApproach(0)
339 .withSensitive(0)
340 .value());
341 }
342 }
343
344 const auto& mprops = mint.materialSlab;
346 m_step_X0.push_back(mprops.material().X0());
347 m_step_L0.push_back(mprops.material().L0());
348 m_step_A.push_back(mprops.material().Ar());
349 m_step_Z.push_back(mprops.material().Z());
350 m_step_rho.push_back(mprops.material().massDensity());
351
352 }
355}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_MSG_VERBOSE(x)
std::vector< float > m_step_length
step length
std::vector< float > m_step_X0
step material x0
float m_tL0
thickness in X0/L0
std::vector< float > m_sur_y
y position of the center of the suface associated with the step
std::vector< float > m_step_sz
step z (start) position (optional)
std::vector< float > m_step_sy
step y (start) position (optional)
float m_v_phi
start phi direction
std::vector< float > m_step_A
step material A
float m_v_z
start global z
std::vector< float > m_step_ey
step y (end) position (optional)
std::vector< std::uint64_t > m_vol_id
ID of the volume associated with the step.
std::vector< float > m_step_L0
step material l0
float m_tX0
thickness in X0/L0
std::vector< float > m_sur_z
z position of the center of the suface associated with the step
std::vector< float > m_step_dx
step x direction
std::vector< float > m_step_dz
step z direction
std::vector< float > m_step_ex
step x (end) position (optional)
float m_v_px
start global momentum x
std::vector< float > m_step_y
step y position
std::vector< float > m_step_Z
step material Z
std::vector< float > m_step_rho
step material rho
float m_v_py
start global momentum y
float m_v_pz
start global momentum z
std::vector< float > m_step_z
step z position
std::vector< float > m_sur_x
x position of the center of the suface associated with the step
std::vector< float > m_step_ez
step z (end) position (optional)
Gaudi::Property< bool > m_storeVolume
std::vector< float > m_step_x
step x position
float m_v_eta
start eta direction
std::vector< float > m_sur_range_max
Max range of the suface associated with the step.
float m_v_y
start global y
std::vector< int32_t > m_sur_type
Type of the suface associated with the step.
std::vector< float > m_step_dy
step y direction
float m_v_x
start global x
std::vector< std::uint64_t > m_sur_id
ID of the suface associated with the step.
std::vector< float > m_step_sx
step x (start) position (optional)
Gaudi::Property< bool > m_storeSurface
std::vector< float > m_sur_range_min
Min range of the suface associated with the step.
Acts::GeometryContext context() const