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')}