From 950a07a0dd6355c84a234270857356e264f067db Mon Sep 17 00:00:00 2001
From: gubaidulinvadim <gubaidulinvadim@gmail.com>
Date: Sun, 28 Jul 2024 14:49:21 +0200
Subject: [PATCH] Slight improvements for SynchrotronRadiation performance -
 np.random.normal -> np.random.standard_normal, 10% faster - N = len(bunch) to
 compute the number of particles only once

---
 mbtrack2/tracking/element.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/mbtrack2/tracking/element.py b/mbtrack2/tracking/element.py
index 752c044..a46c6b8 100644
--- a/mbtrack2/tracking/element.py
+++ b/mbtrack2/tracking/element.py
@@ -166,20 +166,21 @@ class SynchrotronRadiation(Element):
         ----------
         bunch : Bunch or Beam object
         """
+        N = len(bunch)
         if self.switch[0] == True:
-            rand = np.random.normal(size=len(bunch))
+            rand = np.random.standard_normal(size=N)
             bunch["delta"] = (1 - 2 * self.ring.T0 / self.ring.tau[2]) * bunch[
                 "delta"] + 2 * self.ring.sigma_delta * (
                     self.ring.T0 / self.ring.tau[2])**0.5 * rand
 
         if self.switch[1] == True:
-            rand = np.random.normal(size=len(bunch))
+            rand = np.random.standard_normal(size=N)
             bunch["xp"] = (1 - 2 * self.ring.T0 / self.ring.tau[0]
                            ) * bunch["xp"] + 2 * self.ring.sigma()[1] * (
                                self.ring.T0 / self.ring.tau[0])**0.5 * rand
 
         if self.switch[2] == True:
-            rand = np.random.normal(size=len(bunch))
+            rand = np.random.standard_normal(size=N)
             bunch["yp"] = (1 - 2 * self.ring.T0 / self.ring.tau[1]
                            ) * bunch["yp"] + 2 * self.ring.sigma()[3] * (
                                self.ring.T0 / self.ring.tau[1])**0.5 * rand
-- 
GitLab