From 2bbd0e998a1c2665a9cb2982dc66ff4ef702397f Mon Sep 17 00:00:00 2001
From: Matthias Frey <matthias.frey@psi.ch>
Date: Wed, 8 Jul 2020 13:48:45 +0200
Subject: [PATCH] mm --> m

---
 src/Distribution/SigmaGenerator.cpp | 89 ++++++++++++-----------------
 src/Distribution/SigmaGenerator.h   |  8 +--
 2 files changed, 40 insertions(+), 57 deletions(-)

diff --git a/src/Distribution/SigmaGenerator.cpp b/src/Distribution/SigmaGenerator.cpp
index 077e490e3..34e5583f5 100644
--- a/src/Distribution/SigmaGenerator.cpp
+++ b/src/Distribution/SigmaGenerator.cpp
@@ -97,21 +97,16 @@ SigmaGenerator::SigmaGenerator(double I,
     , rinit_m(0.0)
     , prinit_m(0.0)
 {
-    // set emittances (initialization like that due to old compiler version)
-    // [ex] = [ey] = [ez] = pi*mm*mrad --> [emittance] = mm mrad
-    emittance_m[0] = ex * Physics::pi;
-    emittance_m[1] = ey * Physics::pi;
-    emittance_m[2] = ez * Physics::pi;
-
     // minimum beta*gamma
     double minGamma = Emin_m / m_m + 1.0;
     double bgam = std::sqrt(minGamma * minGamma - 1.0);
 
+    // set emittances (initialization like that due to old compiler version)
+    // [ex] = [ey] = [ez] = pi*mm*mrad --> [emittance] = m rad
     // normalized emittance (--> multiply with beta*gamma)
-    // [emittance] = mm mrad
-    emittance_m[0] *= bgam;
-    emittance_m[1] *= bgam;
-    emittance_m[2] *= bgam;
+    emittance_m[0] = ex * Physics::pi * 1.0e-6 * bgam;
+    emittance_m[1] = ey * Physics::pi * 1.0e-6 * bgam;
+    emittance_m[2] = ez * Physics::pi * 1.0e-6 * bgam;
 
     // Define the Hamiltonian
     Series::setGlobalTruncOrder(truncOrder_m);
@@ -139,14 +134,12 @@ SigmaGenerator::SigmaGenerator(double I,
         double K3 = 3.0 * /* physics::q0 */ 1.0 * I_m * lam / (20.0 * std::sqrt(5.0) * Physics::pi * Physics::epsilon_0 * m *
                         Physics::c * Physics::c * Physics::c * beta_m * beta_m * gamma_m * gamma2_m);            // [K3] = m
 
-        double milli = 1.0e-3;
-
         // formula (30), (31)
-        // [sigma(0,0)] = mm^{2} --> [sx] = [sy] = [sz] = mm
+        // [sigma(0,0)] = m^{2} --> [sx] = [sy] = [sz] = m
         // multiply with 0.001 to get meter --> [sx] = [sy] = [sz] = m
-        double sx = std::sqrt(std::abs(sigx)) * milli;
-        double sy = std::sqrt(std::abs(sigy)) * milli;
-        double sz = std::sqrt(std::abs(sigz)) * milli;
+        double sx = std::sqrt(std::abs(sigx));
+        double sy = std::sqrt(std::abs(sigy));
+        double sz = std::sqrt(std::abs(sigz));
 
         double tmp = sx * sy;                                           // [tmp] = m^{2}
 
@@ -619,24 +612,15 @@ void SigmaGenerator::initialize(double nuz, double ravg)
 
     // helper constants
     double invbg = 1.0 / (beta_m * gamma_m);
-    double micro = 1.0e-6;
-    double mega = 1.0e6;
-    //double kilo = 1.0e3;
+    double c2 = Physics::c * Physics::c;
 
     // convert mass m_m from MeV/c^2 to eV*s^{2}/m^{2}
-    double m = m_m * mega/(Physics::c * Physics::c);        // [m] = eV*s^{2}/m^{2}, [m_m] = MeV/c^2
-
-    /* Emittance [ex] = [ey] = [ez] = mm mrad (emittance_m are normalized emittances
-     * (i.e. emittance multiplied with beta*gamma)
-     */
-    double ex = emittance_m[0] * invbg;                        // [ex] = mm mrad
-    double ey = emittance_m[1] * invbg;                        // [ey] = mm mrad
-    double ez = emittance_m[2] * invbg;                        // [ez] = mm mrad
+    double m = m_m * 1.0e6 / c2;        // [m] = eV*s^{2}/m^{2}, [m_m] = MeV/c^2
 
-    // convert normalized emittances: mm mrad --> m rad (mm mrad: millimeter milliradian)
-    ex *= micro;
-    ey *= micro;
-    ez *= micro;
+    // emittance [ex] = [ey] = [ez] = m rad
+    double ex = emittance_m[0] * invbg;                        // [ex] = m rad
+    double ey = emittance_m[1] * invbg;                        // [ey] = m rad
+    double ez = emittance_m[2] * invbg;                        // [ez] = m rad
 
     // initial guess of emittance, [e] = m rad
     double e = std::cbrt(ex * ey * ez);             // cbrt computes cubic root (C++11) <cmath>
@@ -649,13 +633,14 @@ void SigmaGenerator::initialize(double nuz, double ravg)
 
     // formula (57)
     double lam = Physics::two_pi * Physics::c / (wo_m * nh_m); // wavelength, [lam] = m
-    double K3 = 3.0 * /* physics::q0 */ 1.0 * I_m * lam / (20.0 * std::sqrt(5.0) * Physics::pi * Physics::epsilon_0 * m *
-                    Physics::c * Physics::c * Physics::c * beta_m * beta_m * gamma2_m * gamma_m);               // [K3] = m
+    double K3 = 3.0 *  I_m * lam
+              / (20.0 * std::sqrt(5.0) * Physics::pi * Physics::epsilon_0 * m
+                      * c2 * Physics::c * beta_m * beta_m * gamma2_m * gamma_m);    // [K3] = m
 
-    double alpha = /* physics::q0 */ 1.0 * Physics::mu_0 * I_m / (5.0 * std::sqrt(10.0) * m * Physics::c *
-                       gamma_m * nh_m) * std::sqrt(rcyc * rcyc * rcyc / (e * e * e));                           // [alpha] = 1/rad --> [alpha] = 1
+    double alpha =  Physics::mu_0 * I_m / (5.0 * std::sqrt(10.0) * m * Physics::c
+                 * gamma_m * nh_m) * std::sqrt(rcyc * rcyc * rcyc / (e * e * e));   // [alpha] = 1/rad --> [alpha] = 1
 
-    double sig0 = std::sqrt(2.0 * rcyc * e) / gamma_m;                                                      // [sig0] = m*sqrt(rad) --> [sig0] = m
+    double sig0 = std::sqrt(2.0 * rcyc * e) / gamma_m;                              // [sig0] = m*sqrt(rad) --> [sig0] = m
 
     // formula (56)
     double sig;                                     // [sig] = m
@@ -704,32 +689,30 @@ void SigmaGenerator::initialize(double nuz, double ravg)
     double invAB = 1.0 / (B - A);                 // [invAB] = 1/m
 
     // construct initial sigma-matrix (formula (29, 30, 31)
-    // Remark: We multiply with 10^{6} (= mega) to convert emittances back.
-    // 1 m^{2} = 10^{6} mm^{2}
     matrix_type sigma = boost::numeric::ublas::zero_matrix<double>(6);
 
-    // formula (30), [sigma(0,0)] = m^2 rad * 10^{6} = mm^{2} rad = mm mrad
-    sigma(0,0) = invAB * (B * ex / Omega + A * ez / omega) * mega;
+    // formula (30), [sigma(0,0)] = m^2 rad
+    sigma(0,0) = invAB * (B * ex / Omega + A * ez / omega);
 
-    // [sigma(0,5)] = [sigma(5,0)] = m rad * 10^{6} = mm mrad	// 1000: m --> mm and 1000 to promille
-    sigma(0,5) = sigma(5,0) = invAB * (ex / Omega + ez / omega) * mega;
+    // [sigma(0,5)] = [sigma(5,0)] = m rad
+    sigma(0,5) = sigma(5,0) = invAB * (ex / Omega + ez / omega);
 
-    // [sigma(1,1)] = rad * 10^{6} = mrad (and promille)
-    sigma(1,1) = invAB * (B * ex * Omega + A * ez * omega) * mega;
+    // [sigma(1,1)] = rad
+    sigma(1,1) = invAB * (B * ex * Omega + A * ez * omega);
 
-    // [sigma(1,4)] = [sigma(4,1)] = m rad * 10^{6} = mm mrad
-    sigma(1,4) = sigma(4,1) = invAB * (ex * Omega+ez * omega) / (K * gamma2_m) * mega;
+    // [sigma(1,4)] = [sigma(4,1)] = m rad
+    sigma(1,4) = sigma(4,1) = invAB * (ex * Omega+ez * omega) / (K * gamma2_m);
 
-    // formula (31), [sigma(2,2)] = m rad * 10^{6} = mm mrad
-    sigma(2,2) = ey / (std::sqrt(h * h * nuz * nuz - K)) * mega;
+    // formula (31), [sigma(2,2)] = m rad
+    sigma(2,2) = ey / (std::sqrt(h * h * nuz * nuz - K));
 
-    sigma(3,3) = (ey * mega) * (ey * mega) / sigma(2,2);
+    sigma(3,3) = (ey * ey) / sigma(2,2);
 
-    // [sigma(4,4)] = m^{2} rad * 10^{6} = mm^{2} rad = mm mrad
-    sigma(4,4) = invAB * (A * ex * Omega + B * ez * omega) / (K * gamma2_m) * mega;
+    // [sigma(4,4)] = m^{2} rad
+    sigma(4,4) = invAB * (A * ex * Omega + B * ez * omega) / (K * gamma2_m);
 
-    // formula (30), [sigma(5,5)] = rad * 10^{6} = mrad (and promille)
-    sigma(5,5) = invAB * (ex / (B * Omega) + ez / (A * omega)) * mega;
+    // formula (30), [sigma(5,5)] = rad
+    sigma(5,5) = invAB * (ex / (B * Omega) + ez / (A * omega));
 
     // fill in initial guess of the sigma matrix (for each angle the same guess)
     sigmas_m.resize(nSteps_m);
diff --git a/src/Distribution/SigmaGenerator.h b/src/Distribution/SigmaGenerator.h
index f7c248a97..0296793e8 100644
--- a/src/Distribution/SigmaGenerator.h
+++ b/src/Distribution/SigmaGenerator.h
@@ -165,7 +165,7 @@ public:
 private:
     /// Stores the value of the current, \f$ \left[I\right] = A \f$
     double I_m;
-    /// Stores the desired emittances, \f$ \left[\varepsilon_{x}\right] = \left[\varepsilon_{y}\right] = \left[\varepsilon_{z}\right] = mm \ mrad \f$
+    /// Stores the desired emittances, \f$ \left[\varepsilon_{x}\right] = \left[\varepsilon_{y}\right] = \left[\varepsilon_{z}\right] = m \ rad \f$
     std::array<double,3> emittance_m;
     /// Is the orbital frequency, \f$ \left[\omega_{o}\right] = \frac{1}{s} \f$
     double wo_m;
@@ -326,9 +326,9 @@ std::array<double,3> SigmaGenerator::getEmittances() const
 {
     double bgam = gamma_m*beta_m;
     return std::array<double,3>{{
-        emittance_m[0]/Physics::pi/bgam,
-        emittance_m[1]/Physics::pi/bgam,
-        emittance_m[2]/Physics::pi/bgam
+        emittance_m[0] / Physics::pi / bgam * 1.0e6,
+        emittance_m[1] / Physics::pi / bgam * 1.0e6,
+        emittance_m[2] / Physics::pi / bgam * 1.0e6
     }};
 }
 
-- 
GitLab