56 return StatusCode::FAILURE;
90 SmartIF<ITHistSvc> tHistSvc {
94 ATH_MSG_ERROR(
"initialize() Could not find Hist Service -> Switching ValidationMode Off !");
102 ATH_MSG_ERROR(
"initialize() Could not register the validation Trees -> Switching ValidationMode Off !");
110 ATH_MSG_INFO(
"initialize() RandomService = " << randSvc()->name());
111 m_gaussDist =
new Rndm::Numbers(randSvc(), Rndm::Gauss(0., 1.));
112 m_flatDist =
new Rndm::Numbers(randSvc(), Rndm::Flat(0., 1.));
116 0.5, 34.5, 250, 550, 1120, 4250, 13000, 0, 0, 0
119 100, 10e6, 680, 2820, 3120, 6500, 22000, 0, 0, 0
123 ATH_MSG_INFO(
"initialize() cylinder dimensions vector from jobOptions :");
124 for (
size_t lay = 0; lay <
m_cylinders + 1; ++lay) {
126 "initialize() m_cylinderVR[" << lay <<
"] = " <<
m_cylinderVR[lay] <<
"\t ... m_cylinderVZ[" << lay <<
"] = " <<
130 ATH_MSG_INFO(
"initialize() cylinder dimensions array for algorithm and ROOT tree :");
131 for (
size_t lay = 0; lay <
m_cylinders + 1; ++lay) {
137 "initialize() layer " << lay <<
"dimensions are smaller than those of layer " << lay - 1 <<
" - constraining m_cylinders to " << lay -
141 "initialize() m_cylinderR[" << lay <<
"] = " <<
m_cylinderR[lay] <<
"\t ... m_cylinderZ[" << lay <<
"] = " <<
147 "initialize() m_cylinderR[" << lay <<
"] = " <<
m_cylinderR[lay] <<
"\t ... m_cylinderZ[" << lay <<
"] = " <<
155 for (
size_t lay = 0; lay <
m_cylinders + 1; ++lay) {
172 return StatusCode::SUCCESS;
215 ATH_MSG_WARNING(
"execute() No highest TrackingVolume / no VolumeBounds ... pretty useless!");
216 return StatusCode::SUCCESS;
268 "execute() Start Parameters : [phi,eta] = [ " << startParameters.
momentum().phi() <<
", " << startParameters.
eta() <<
274 std::unique_ptr<Trk::TrackParameters> lastParameters {};
275 std::unique_ptr<Trk::TrackParameters> newParameters {};
287 const std::vector<const Trk::TrackStateOnSurface*>* collectedMaterial =
297 if (collectedMaterial && !collectedMaterial->empty()) {
303 for (
const auto* tsos : *collectedMaterial) {
304 newX0 += tsos->materialEffectsOnTrack() ? tsos->materialEffectsOnTrack()->thicknessInX0() : 0;
312 for (
size_t lay = 1; lay <
m_cylinders + 1; ++lay) {
317 if (!lastParameters) {
318 ATH_MSG_WARNING(
"execute() Layer " << lay <<
": start parameters for cylinder NOT found - skip event !");
321 ATH_MSG_VERBOSE(
"execute() Layer " << lay <<
": start parameters for cylinder found: " << *lastParameters);
325 newParameters.reset();
329 m_onion ? *lastParameters : startParameters,
336 const std::vector<const Trk::TrackStateOnSurface*>* collectedMaterial =
338 m_onion ? *lastParameters : startParameters,
345 if (collectedMaterial && !collectedMaterial->empty()) {
352 for (
const auto* tsos : *collectedMaterial) {
353 newX0 += tsos->materialEffectsOnTrack() ? tsos->materialEffectsOnTrack()->thicknessInX0() : 0;
361 if (!newParameters) {
365 m_onion ? *lastParameters : startParameters,
373 const std::vector<const Trk::TrackStateOnSurface*>* collectedMaterial =
375 m_onion ? *lastParameters : startParameters,
382 if (collectedMaterial && !collectedMaterial->empty()) {
390 for (
const auto* tsos : *collectedMaterial) {
391 newX0 += tsos->materialEffectsOnTrack() ? tsos->materialEffectsOnTrack()->thicknessInX0() : 0;
400 if (!newParameters) {
401 ATH_MSG_WARNING(
"execute() Layer " << lay <<
" intersection did not work !");
403 ATH_MSG_WARNING(
"execute() Layer " << lay <<
" intersection is outside the known world !");
406 const Amg::Vector3D& newPosition = newParameters->position();
407 ATH_MSG_VERBOSE(
"execute() Track Parameters at layer " << lay <<
": " << *newParameters);
409 "execute() Track Parameters at layer " << lay <<
": [r,z] = [ " << newPosition.perp() <<
", " <<
435 lastParameters = std::move(newParameters);
449 ATH_MSG_DEBUG(
"execute() deleting DataVector parameters ... ");
451 return StatusCode::SUCCESS;
456 double x,
double y,
double z,
double phi,
double theta,
double alphaZ) {
467 Amg::Vector3D surfaceYdirection(zAxis.cross(surfaceZdirection));
469 Amg::Vector3D surfaceXdirection(surfaceYdirection.cross(surfaceZdirection));
472 surfaceRotation.col(0) = surfaceXdirection;
473 surfaceRotation.col(1) = surfaceYdirection;
474 surfaceRotation.col(2) = surfaceZdirection;
477 return std::make_unique<Amg::Transform3D>(surfaceRotation, surfacePosition);
480 return std::make_unique<Amg::Transform3D>(nominalTransform *
Amg::AngleAxis3D(alphaZ, zAxis));
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses