Skip to content
Snippets Groups Projects
Commit 950a07a0 authored by Vadim Gubaidulin's avatar Vadim Gubaidulin
Browse files

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
parent 7d3c911e
Branches
Tags
2 merge requests!280.8.0,!16Nonlinear chromaticity
...@@ -166,20 +166,21 @@ class SynchrotronRadiation(Element): ...@@ -166,20 +166,21 @@ class SynchrotronRadiation(Element):
---------- ----------
bunch : Bunch or Beam object bunch : Bunch or Beam object
""" """
N = len(bunch)
if self.switch[0] == True: 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[ bunch["delta"] = (1 - 2 * self.ring.T0 / self.ring.tau[2]) * bunch[
"delta"] + 2 * self.ring.sigma_delta * ( "delta"] + 2 * self.ring.sigma_delta * (
self.ring.T0 / self.ring.tau[2])**0.5 * rand self.ring.T0 / self.ring.tau[2])**0.5 * rand
if self.switch[1] == True: 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"] = (1 - 2 * self.ring.T0 / self.ring.tau[0]
) * bunch["xp"] + 2 * self.ring.sigma()[1] * ( ) * bunch["xp"] + 2 * self.ring.sigma()[1] * (
self.ring.T0 / self.ring.tau[0])**0.5 * rand self.ring.T0 / self.ring.tau[0])**0.5 * rand
if self.switch[2] == True: 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"] = (1 - 2 * self.ring.T0 / self.ring.tau[1]
) * bunch["yp"] + 2 * self.ring.sigma()[3] * ( ) * bunch["yp"] + 2 * self.ring.sigma()[3] * (
self.ring.T0 / self.ring.tau[1])**0.5 * rand self.ring.T0 / self.ring.tau[1])**0.5 * rand
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment