Solenoid - 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)
In [3]:
Copied!
!cat $bmad_files/solenoid.bmad
!cat $bmad_files/solenoid.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. solenoid1: solenoid, l = 2.6, ks = 1, num_steps = 10 ! , x_offset = 0.05, y_pitch = 0.001, tilt = 0.1 lat: line = (solenoid1) use, lat
Tao¶
In [4]:
Copied!
tao = Tao(lattice_file=bmad_files / "solenoid.bmad", plot="mpl")
tao.plot("beta", include_layout=False)
tao = Tao(lattice_file=bmad_files / "solenoid.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.input
I = IZ.ImpactZ.from_tao(tao, initial_particles=P0)
I.input
Out[6]:
ImpactZInput(
    initial_particles=<ParticleGroup with 1 particles at 0x7fde567aa900>,
    seed=-1,
    n_particle=1,
    nx=64,
    ny=64,
    nz=64,
    distribution=IZ.DistributionType.read,
    particle_list=[1],
    charge_over_mass_list=[-1.956951180916719e-06],
    twiss_beta_x=10.0,
    twiss_beta_y=10.0,
    average_current=0.0,
    reference_kinetic_energy=9489001.04931,
    reference_particle_mass=510998.95069,
    reference_particle_charge=-1.0,
    reference_frequency=1300000000.0,
    lattice=[
        ToggleSpaceCharge(),
        WriteFull(name='initial_particles', file_id=100),
        Solenoid(
            name='SOLENOID1',
            metadata={'bmad_csr': False, 'bmad_sc': False, 'bmad_id': 1},
            length=2.6,
            steps=10,
            map_steps=10,
            Bz0=-0.0333128309369339,
            file_id=-1.0,
            radius=0.03
        ),
        WriteFull(name='WRITE_END', metadata={'bmad_id': 2}, file_id=200),
        WriteFull(name='final_particles', file_id=101)
    ]
)
Including defaults
ImpactZInput(
    initial_particles=<ParticleGroup with 1 particles at 0x7fde567aa900>,
    ncpu_y=1,
    ncpu_z=1,
    gpu=IZ.GPUFlag.disabled,
    seed=-1,
    n_particle=1,
    integrator_type=IZ.IntegratorType.linear_map,
    err=1,
    diagnostic_type=IZ.DiagnosticType.extended,
    nx=64,
    ny=64,
    nz=64,
    boundary_type=IZ.BoundaryType.trans_open_longi_open,
    radius_x=0.0,
    radius_y=0.0,
    z_period_size=0.0,
    distribution=IZ.DistributionType.read,
    restart=0,
    subcycle=0,
    nbunch=1,
    particle_list=[1],
    current_list=[0.0],
    charge_over_mass_list=[-1.956951180916719e-06],
    twiss_alpha_x=0.0,
    twiss_beta_x=10.0,
    twiss_norm_emit_x=1e-06,
    twiss_mismatch_x=1.0,
    twiss_mismatch_px=1.0,
    twiss_offset_x=0.0,
    twiss_offset_px=0.0,
    twiss_alpha_y=0.0,
    twiss_beta_y=10.0,
    twiss_norm_emit_y=1e-06,
    twiss_mismatch_y=1.0,
    twiss_mismatch_py=1.0,
    twiss_offset_y=0.0,
    twiss_offset_py=0.0,
    twiss_alpha_z=1e-09,
    twiss_beta_z=1.0,
    twiss_norm_emit_z=1e-06,
    twiss_mismatch_z=1.0,
    twiss_mismatch_e_z=1.0,
    twiss_offset_phase_z=0.0,
    twiss_offset_energy_z=0.0,
    average_current=0.0,
    reference_kinetic_energy=9489001.04931,
    reference_particle_mass=510998.95069,
    reference_particle_charge=-1.0,
    reference_frequency=1300000000.0,
    initial_phase_ref=0.0,
    lattice=[
        ToggleSpaceCharge(
            name='',
            metadata={},
            length=0.0,
            steps=0,
            map_steps=0,
            type_id=-14,
            unused=0.0,
            enable=False
        ),
        WriteFull(
            name='initial_particles',
            metadata={},
            length=0.0,
            steps=0,
            file_id=100,
            type_id=-2,
            unused_2=0.0,
            sample_frequency=0
        ),
        Solenoid(
            name='SOLENOID1',
            metadata={'bmad_csr': False, 'bmad_sc': False, 'bmad_id': 1},
            length=2.6,
            steps=10,
            map_steps=10,
            type_id=3,
            Bz0=-0.0333128309369339,
            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
        ),
        WriteFull(
            name='WRITE_END',
            metadata={'bmad_id': 2},
            length=0.0,
            steps=0,
            file_id=200,
            type_id=-2,
            unused_2=0.0,
            sample_frequency=0
        ),
        WriteFull(
            name='final_particles',
            metadata={},
            length=0.0,
            steps=0,
            file_id=101,
            type_id=-2,
            unused_2=0.0,
            sample_frequency=0
        )
    ],
    filename=None,
    verbose=False
)
In [7]:
Copied!
output = I.run();
output = I.run();
In [8]:
Copied!
P = I.output.particles["final_particles"]
P = I.output.particles["final_particles"]
Compare¶
In [9]:
Copied!
P.data
P.data
Out[9]:
{'x': array([7.15556233e-05]),
 'px': array([-1287.06973371]),
 'y': array([-0.00025775]),
 'py': array([4636.15703849]),
 'z': array([0.]),
 'pz': array([9986934.31048253]),
 't': array([8.68401173e-09]),
 'status': array([1.]),
 'weight': array([1.e-20]),
 'id': array([1]),
 'species': np.str_('electron')}
In [10]:
Copied!
Ptao.data
Ptao.data
Out[10]:
{'x': array([7.15555395e-05]),
 'px': array([-1287.06903839]),
 'y': array([-0.00025775]),
 'py': array([4636.15745679]),
 'z': array([0]),
 'pz': array([9986934.31048243]),
 't': array([8.68401281e-09]),
 'status': array([1], dtype=int32),
 'weight': array([1.]),
 'species': np.str_('electron')}
In [11]:
Copied!
plot_impactz_and_tao_stats(I, tao)
plot_impactz_and_tao_stats(I, tao)