Octupole - Comparing to Bmad¶
In [1]:
Copied!
import numpy as np
from pmd_beamphysics import single_particle
from pmd_beamphysics.units import mec2
from pytao import Tao
import impact.z as IZ
from impact.tests.z.conftest import bmad_files
from impact.z.interfaces.bmad import plot_impactz_and_tao_stats, track_tao
import numpy as np
from pmd_beamphysics import single_particle
from pmd_beamphysics.units import mec2
from pytao import Tao
import impact.z as IZ
from impact.tests.z.conftest import bmad_files
from impact.z.interfaces.bmad import plot_impactz_and_tao_stats, track_tao
Initial Particles¶
In [2]:
Copied!
energy = 10e6
pz = np.sqrt(energy**2 - mec2**2)
P0 = single_particle(x=1e-3, pz=pz)
energy = 10e6
pz = np.sqrt(energy**2 - mec2**2)
P0 = single_particle(x=1e-3, pz=pz)
Tao¶
In [3]:
Copied!
!cat $bmad_files/octupole.bmad
!cat $bmad_files/octupole.bmad
! Lattice file adapted from simple.bmad no_digested beginning[beta_a] = 10. ! m a-mode beta function beginning[beta_b] = 10. ! m b-mode beta function beginning[e_tot] = 10e6 ! eV Or can set beginning[p0c] parameter[geometry] = open ! Or closed parameter[particle] = electron ! Reference particle. octupole1: octupole, l = 4.5, k3 = 1e3, num_steps = 10 ! tilt, x_offset = 0.01, y_pitch = 0.001 lat: line = (octupole1) use, lat
In [4]:
Copied!
tao = Tao(lattice_file=bmad_files / "octupole.bmad", plot="mpl")
tao.plot("beta", include_layout=False)
tao = Tao(lattice_file=bmad_files / "octupole.bmad", plot="mpl")
tao.plot("beta", include_layout=False)
In [5]:
Copied!
Ptao = track_tao(tao, P0)
Ptao = track_tao(tao, P0)
Impact-Z¶
In [6]:
Copied!
I = IZ.ImpactZ.from_tao(tao, initial_particles=P0)
I = IZ.ImpactZ.from_tao(tao, initial_particles=P0)
In [7]:
Copied!
I.input.multipoles
I.input.multipoles
Out[7]:
[Multipole(
name='OCTUPOLE1',
metadata={'bmad_csr': False, 'bmad_sc': False, 'bmad_id': 1},
length=4.5,
steps=10,
map_steps=10,
type_id=5,
multipole_type=IZ.MultipoleType.octupole,
field_strength=-33.3128309369339,
file_id=-1.0,
radius=0.03,
misalignment_error_x=0.0,
misalignment_error_y=0.0,
rotation_error_x=0.0,
rotation_error_y=0.0,
rotation_error_z=-0.0
)]
In [8]:
Copied!
output = I.run()
output = I.run()
In [9]:
Copied!
P = I.output.particles["final_particles"]
P = I.output.particles["final_particles"]
Compare¶
In [10]:
Copied!
plot_impactz_and_tao_stats(I, tao)
plot_impactz_and_tao_stats(I, tao)
In [11]:
Copied!
Ptao.data
Ptao.data
Out[11]:
{'x': array([0.00099831]),
'px': array([-7.47758106]),
'y': array([0.]),
'py': array([0.]),
'z': array([0]),
'pz': array([9986935.46951906]),
't': array([1.50300203e-08]),
'status': array([1], dtype=int32),
'weight': array([1.]),
'species': np.str_('electron')}
In [12]:
Copied!
P.data
P.data
Out[12]:
{'x': array([0.00099831]),
'px': array([-7.47770693]),
'y': array([0.]),
'py': array([0.]),
'z': array([0.]),
'pz': array([9986935.46951905]),
't': array([1.50300203e-08]),
'status': array([1.]),
'weight': array([1.e-20]),
'id': array([1]),
'species': np.str_('electron')}