Example #1
0
def _one_turn_map(p, particle_on_madx_co, tracker):
    xl_part = particle_on_madx_co.copy()
    xl_part.x = p[0]
    xl_part.px = p[1]
    xl_part.y = p[2]
    xl_part.py = p[3]
    xl_part.zeta = p[4]
    xl_part.delta = p[5]

    part = xt.Particles(**xl_part.to_dict())
    tracker.track(part)
    p_res = np.array([
        part.x[0], part.px[0], part.y[0], part.py[0], part.zeta[0],
        part.delta[0]
    ])
    return p_res
Example #2
0
def track_particle_xtrack(
                            line, partCO, Dx_wrt_CO_m, Dpx_wrt_CO_rad,
                            Dy_wrt_CO_m, Dpy_wrt_CO_rad,
                            Dsigma_wrt_CO_m, Ddelta_wrt_CO, n_turns,
                            _context=None):


    Dx_wrt_CO_m, Dpx_wrt_CO_rad,\
        Dy_wrt_CO_m, Dpy_wrt_CO_rad,\
        Dsigma_wrt_CO_m, Ddelta_wrt_CO = vectorize_all_coords(
                             Dx_wrt_CO_m, Dpx_wrt_CO_rad,
                             Dy_wrt_CO_m, Dpy_wrt_CO_rad,
                             Dsigma_wrt_CO_m, Ddelta_wrt_CO)

    import xtrack as xt
    tracker = xt.Tracker(_context=_context, sequence=line)
    particles = xt.Particles(_context=_context,
            p0c = partCO.p0c,
            x = partCO.x + Dx_wrt_CO_m,
            px = partCO.px + Dpx_wrt_CO_rad,
            y = partCO.y + Dy_wrt_CO_m,
            py = partCO.py + Dpy_wrt_CO_rad,
            zeta = partCO.zeta + Dsigma_wrt_CO_m,
            delta = partCO.delta + Ddelta_wrt_CO)

    print('Start track')
    tracker.track(particles, num_turns=n_turns, turn_by_turn_monitor=True)
    print('Done track')

    #print(res.particles[0])
    x_tbt = tracker.record_last_track.x.copy().T
    px_tbt = tracker.record_last_track.px.copy().T
    y_tbt = tracker.record_last_track.y.copy().T
    py_tbt = tracker.record_last_track.py.copy().T
    sigma_tbt = tracker.record_last_track.zeta.copy().T
    delta_tbt = tracker.record_last_track.delta.copy().T

    print('Done loading!')

    extra = {'particles': particles, 'tracker': tracker}

    return x_tbt, px_tbt, y_tbt, py_tbt, sigma_tbt, delta_tbt, extra
Example #3
0
sigma_y = 2e-3
sigma_z = 30e-2
p0c = 25.92e9
mass = Particles.pmass
theta_probes = 30 * np.pi / 180
r_max_probes = 2e-2
z_probes = 1.2 * sigma_z
n_probes = 1000

from xfields.test_support.temp_makepart import generate_particles_object
(particles_pyst, r_probes, x_probes, y_probes,
 z_probes) = generate_particles_object(n_macroparticles, bunch_intensity,
                                       sigma_x, sigma_y, sigma_z, p0c, mass,
                                       n_probes, r_max_probes, z_probes,
                                       theta_probes)
particles = xt.Particles(_context=context, **particles_pyst.to_dict())

######################
# Space charge (PIC) #
######################

x_lim = 5. * sigma_x
y_lim = 5. * sigma_y
z_lim = 5. * sigma_z

from xfields import SpaceCharge3D

spcharge_parent = SpaceCharge3D(_context=context,
                                length=1,
                                update_on_track=True,
                                apply_z_kick=False,
Example #4
0
                                     Dx_wrt_CO_m=np.array(displace_x),
                                     Dpx_wrt_CO_rad=0,
                                     Dy_wrt_CO_m=np.array(displace_y),
                                     Dpy_wrt_CO_rad=0.,
                                     Dsigma_wrt_CO_m=0.,
                                     Ddelta_wrt_CO=0.,
                                     n_turns=num_turns,
                                     input_folder='../')

tracker = xt.Tracker(sequence=line)

part_track = partCO.copy()
part_track.x += np.array(displace_x)
part_track.y += np.array(displace_y)

particles = xt.Particles(**part_track.to_dict())
particles.particle_id = np.arange(particles.num_particles)

tracker.track(particles, turn_by_turn_monitor=True, num_turns=num_turns)

print('Xtrack')
print(tracker.record_last_track.x)
print('Sixtrack')
print(x_tbt_sixtrack.T)

assert np.allclose(tracker.record_last_track.x[0, :],
                   x_tbt_sixtrack[:, 0],
                   rtol=1e-15,
                   atol=9e-11)
assert np.allclose(tracker.record_last_track.y[0, :],
                   y_tbt_sixtrack[:, 0],
Example #5
0
def _set_orbit_dependent_parameters_for_bb(line, tracker, particle_on_co):

    temp_particles = xt.Particles(**particle_on_co.to_dict())
    for ii, ee in enumerate(tracker.line.elements):
        if ee.__class__.__name__ == 'BeamBeamBiGaussian2D':
            px_0 = temp_particles.px[0]
            py_0 = temp_particles.py[0]
            ee.q0 = ee._temp_q0

            # Separation of 4D is so far set w.r.t. the closes orbit
            # (to be able to compare against sixtrack)
            # Here we set the righe quantities (coordinates of the strong beam)
            ee.mean_x += temp_particles.x[0]
            ee.mean_y += temp_particles.y[0]
            line.elements[ii].x_bb = ee.mean_x
            line.elements[ii].y_bb = ee.mean_y

            ee.track(temp_particles)

            ee.d_px = temp_particles.px - px_0
            ee.d_py = temp_particles.py - py_0
            line.elements[ii].d_px = ee.d_px
            line.elements[ii].d_py = ee.d_py

            temp_particles.px -= ee.d_px
            temp_particles.py -= ee.d_py

        elif ee.__class__.__name__ == 'BeamBeamBiGaussian3D':
            ee.q0 = ee._temp_q0
            ee.x_CO = temp_particles.x[0]
            ee.px_CO = temp_particles.px[0]
            ee.y_CO = temp_particles.y[0]
            ee.py_CO = temp_particles.py[0]
            ee.sigma_CO = temp_particles.zeta[0]
            ee.delta_CO = temp_particles.delta[0]

            ee.track(temp_particles)

            ee.Dx_sub = temp_particles.x[0] - ee.x_CO
            ee.Dpx_sub = temp_particles.px[0] - ee.px_CO
            ee.Dy_sub = temp_particles.y[0] - ee.y_CO
            ee.Dpy_sub = temp_particles.py[0] - ee.py_CO
            ee.Dsigma_sub = temp_particles.zeta[0] - ee.sigma_CO
            ee.Ddelta_sub = temp_particles.delta[0] - ee.delta_CO

            temp_particles.x[0] = ee.x_CO
            temp_particles.px[0] = ee.px_CO
            temp_particles.y[0] = ee.y_CO
            temp_particles.py[0] = ee.py_CO
            temp_particles.zeta[0] = ee.sigma_CO
            temp_particles.delta[0] = ee.delta_CO

            line.elements[ii].x_co = ee.x_CO
            line.elements[ii].px_co = ee.px_CO
            line.elements[ii].y_co = ee.y_CO
            line.elements[ii].py_co = ee.py_CO
            line.elements[ii].zeta_co = ee.sigma_CO
            line.elements[ii].delta_co = ee.delta_CO

            line.elements[ii].d_x = ee.Dx_sub
            line.elements[ii].d_px = ee.Dpx_sub
            line.elements[ii].d_y = ee.Dy_sub
            line.elements[ii].d_py = ee.Dpy_sub
            line.elements[ii].d_zeta = ee.Dsigma_sub
            line.elements[ii].d_delta = ee.Ddelta_sub
        else:
            ee.track(temp_particles)
import json

import numpy as np

import xline as xl
import xtrack as xt

with open('../xlines/line_bb_for_tracking.json', 'r') as fid:
    line_dict = json.load(fid)

line = xl.Line.from_dict(line_dict)

partCO = xl.Particles.from_dict(line_dict['particle_on_tracker_co'])

tracker = xt.Tracker(sequence=line)
particles = xt.Particles(**partCO.to_dict())

for _ in range(10):
    print(particles.at_turn[0], particles.x[0], particles.y[0],
          particles.zeta[0])
    tracker.track(particles)

WW = np.array(line_dict['WW_finite_diffs'])
WWinv = np.array(line_dict['WWInv_finite_diffs'])

assert np.max(np.abs(np.dot(WW, WWinv) - np.eye(6))) < 1e-10

ampl_sigmas = 1.
norm_emit_x = 2.5e-6
geom_emit_x = norm_emit_x / particles.beta0 / particles.gamma0