From 38a63ec3ea6f757536ce30fd442a967f3ef90537 Mon Sep 17 00:00:00 2001 From: Stewart Martin-Haugh <stewart.martin-haugh@cern.ch> Date: Fri, 29 Sep 2023 18:08:23 +0200 Subject: [PATCH] Use identity to reduce number of calls to log functions in tracking calculations Use identity to reduce number of calls to log functions in tracking calculations --- Tools/PROCTools/data/q449_AOD_digest.ref | 2 +- Tools/WorkflowTestRunner/python/References.py | 8 ++--- .../TrkExUtils/src/MaterialInteraction.cxx | 30 +++++++++++-------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Tools/PROCTools/data/q449_AOD_digest.ref b/Tools/PROCTools/data/q449_AOD_digest.ref index 9d48865b79f..a4cf64b380a 100644 --- a/Tools/PROCTools/data/q449_AOD_digest.ref +++ b/Tools/PROCTools/data/q449_AOD_digest.ref @@ -19,7 +19,7 @@ 431493 1096123504 258 340 52 5 0 8 0 8 11 0 11 431493 1096125003 349 449 84 7 0 10 0 10 17 0 17 431493 1096125237 355 495 76 6 1 8 0 8 15 0 15 - 431493 1096125348 295 346 63 6 2 8 0 8 8 0 8 + 431493 1096125348 295 346 63 6 1 8 0 8 8 0 8 431493 1096125522 251 303 64 9 1 7 0 7 16 0 16 431493 1096127413 396 579 105 7 1 11 0 11 22 0 22 431493 1096127722 221 418 74 9 1 7 0 7 7 0 7 diff --git a/Tools/WorkflowTestRunner/python/References.py b/Tools/WorkflowTestRunner/python/References.py index ad7c13f9f3c..d6a9ab82d8a 100644 --- a/Tools/WorkflowTestRunner/python/References.py +++ b/Tools/WorkflowTestRunner/python/References.py @@ -22,10 +22,10 @@ references_map = { "d1726": "v1", "d1759": "v3", # Reco - "q442": "v22", - "q443": "v18", - "q445": "v26", - "q449": "v30", + "q442": "v23", + "q443": "v19", + "q445": "v27", + "q449": "v31", # Derivations "data_PHYS_Run2": "v11", "data_PHYS_Run3": "v10", diff --git a/Tracking/TrkExtrapolation/TrkExUtils/src/MaterialInteraction.cxx b/Tracking/TrkExtrapolation/TrkExUtils/src/MaterialInteraction.cxx index fc6323a73d8..59123ab10c8 100644 --- a/Tracking/TrkExtrapolation/TrkExUtils/src/MaterialInteraction.cxx +++ b/Tracking/TrkExtrapolation/TrkExUtils/src/MaterialInteraction.cxx @@ -68,7 +68,7 @@ MeanExcitationEnergy(const Trk::Material& mat) { [[gnu::always_inline]] #endif inline double -DensityEffect(const double zOverAtimesRho, const double eta2, +DensityEffect(const double zOverAtimesRho, const double eta, const double gamma, const double I) { // density effect. Done for gamma > 10 ( p > 1GeV for muons) @@ -78,7 +78,10 @@ DensityEffect(const double zOverAtimesRho, const double eta2, // PDG 2022 Table 34.1 double eplasma = 28.816e-6 * std::sqrt(1000. * zOverAtimesRho); // PDG 2022 Eq. 34.6 - return 2. * std::log(eplasma / I) + std::log(eta2) - 1.; + //2. * std::log(eplasma / I) + std::log(eta2) - 1. + //applying logarithmic identities becomes + // 2*(log(eplasma/I) + log(eta)) = 2*log(eplasma*eta/I) + return 2. * std::log(eplasma*eta / I) - 1.; } return 0; } @@ -99,7 +102,9 @@ inline double LandauMPV(const double kazL, const double eta2, const double I, const double beta, const double delta) { // PDG 2022 Eq 34.12 - return -kazL * (std::log(2. * s_me * eta2 / I) + std::log(kazL / I) + 0.2 - + // then apply logarithmic identity + // log(2. * s_me * eta2 / I) + log(kazL / I) = log(2. * s_me* eta2 * kazL/(I*I)) + return -kazL * (std::log(2. * s_me * eta2*kazL/(I*I)) + 0.2 - (beta * beta) - delta); } @@ -138,9 +143,9 @@ double Trk::MaterialInteraction::dEdl_ionization( // sigmaL --> FWHM of Landau sigma = 4 * kaz; } else { - double eta2 = beta * gamma; - eta2 *= eta2; - const double delta = DensityEffect(zOverAtimesRho, eta2, gamma, I); + const double eta = beta * gamma; + const double eta2 = eta*eta; + const double delta = DensityEffect(zOverAtimesRho, eta, gamma, I); // tmax - cut off energy const double tMax = 2. * eta2 * s_me / (1. + 2. * gamma * mfrac + mfrac * mfrac); @@ -175,9 +180,9 @@ double Trk::MaterialInteraction::dEdXBetheBloch( double kaz = KAZ(mat.zOverAtimesRho()); if (particle != Trk::electron) { - double eta2 = beta * gamma; - eta2 *= eta2; - double delta = DensityEffect(zOverAtimesRho, eta2, gamma, iPot); + const double eta = beta * gamma; + const double eta2 = eta*eta; + double delta = DensityEffect(zOverAtimesRho, eta, gamma, iPot); // mass fraction double mfrac = s_me / m; // tmax - cut off energy @@ -210,10 +215,9 @@ double Trk::MaterialInteraction::dE_MPV_ionization( const double I = MeanExcitationEnergy(mat); const double zOverAtimesRho = mat.zOverAtimesRho(); double kaz = KAZ(zOverAtimesRho); - double eta2 = beta * gamma; - - eta2 *= eta2; - const double delta = DensityEffect(zOverAtimesRho, eta2, gamma, I); + const double eta = beta * gamma; + const double eta2 = eta*eta; + const double delta = DensityEffect(zOverAtimesRho, eta, gamma, I); // divide by beta^2 for non-electrons kaz /= beta * beta; kazL = kaz * path; -- GitLab