Beispiel #1
0
full_tracker = FullRingAndRF(longitudinal_tracker)

# DEFINE SLICES----------------------------------------------------------------

number_slices = 500
slice_beam = Slices(RF_sct_par[0],
                    beam,
                    number_slices,
                    cut_left=0.,
                    cut_right=bucket_length)

# BEAM GENERATION--------------------------------------------------------------

matched_from_distribution_function(beam,
                                   full_tracker,
                                   emittance=emittance,
                                   distribution_type=distribution_type,
                                   distribution_variable=distribution_variable)

slice_beam.track()

# Synchrotron radiation objects without quantum excitation
rho = 11e3
SR = []
for i in range(n_sections):
    SR.append(
        SynchrotronRadiation(general_params,
                             RF_sct_par[i],
                             beam,
                             rho,
                             quantum_excitation=False))
# DEFINE TRACKER---------------------------------------------------------------
longitudinal_tracker = RingAndRFSection(RF_sct_par,beam)
full_tracker = FullRingAndRF([longitudinal_tracker])


# DEFINE SLICES----------------------------------------------------------------

number_slices = 500
slice_beam = Slices(RF_sct_par, beam, number_slices, cut_left=0., 
                    cut_right=bucket_length)


# Single RF -------------------------------------------------------------------
matched_from_distribution_function(beam, full_tracker, emittance=emittance, 
                                   distribution_type=distribution_type,
                                   distribution_variable=distribution_variable,
                                   main_harmonic_option='lowest_freq')

slice_beam.track()

[sync_freq_distribution_left, sync_freq_distribution_right], \
    [emittance_array_left, emittance_array_right], \
    [delta_time_left, delta_time_right], \
    particleDistributionFreq, synchronous_time = \
                         synchrotron_frequency_distribution(beam, full_tracker)

# Plot of the synchrotron frequency distribution
plt.figure('fs_distribution')
plt.plot(delta_time_left, sync_freq_distribution_left, lw=2, label='Left')
plt.plot(delta_time_right, sync_freq_distribution_right, 'r--', lw=2,
         label='Right')
Beispiel #3
0
ind_volt_freq = InducedVoltageFreq(beam,
                                   slice_beam,
                                   imp_list,
                                   frequency_resolution=5e5)

#ind_volt_freq = InducedVoltageTime(beam, slice_beam, imp_list)

total_ind_volt = TotalInducedVoltage(beam, slice_beam, [ind_volt_freq])

# BEAM GENERATION -------------------------------------------------------------

matched_from_distribution_function(beam,
                                   full_tracker,
                                   distribution_type=distribution_type,
                                   distribution_exponent=distribution_exponent,
                                   bunch_length=bunch_length,
                                   bunch_length_fit=bunch_length_fit,
                                   distribution_variable='Action')

plt.figure()
slice_beam.track()
plt.plot(slice_beam.bin_centers,
         slice_beam.n_macroparticles,
         lw=2,
         label='from distribution function')

matched_from_line_density(beam,
                          full_tracker,
                          bunch_length=bunch_length,
                          line_density_type=distribution_type,
plt.plot([f_rf*1e-6]*2, plt.ylim(), 'k', lw=2)
plt.plot([f_rf*1e-6 + fs*1e-6]*2, plt.ylim(), 'k--', lw=2)
plt.plot([f_rf*1e-6 - fs*1e-6]*2, plt.ylim(), 'k--', lw=2)
plt.xlim(1.74,1.76)
plt.legend(('Impedance','RF frequency','Synchrotron sidebands'), loc=0, 
           fontsize='medium')
plt.xlabel('Frequency [MHz]')
plt.ylabel(r'Impedance [$\Omega$]')
plt.savefig('../output_files/TC18_fig/impedance.png')
plt.close()


# BEAM GENERATION -------------------------------------------------------------

matched_from_distribution_function(beam, full_tracker,
                                  distribution_type=distribution_type,
                                  bunch_length=bunch_length, n_iterations=20,
                                  TotalInducedVoltage=total_ind_volt)

# ACCELERATION MAP ------------------------------------------------------------

map_ = [slice_beam] + [total_ind_volt] + [ring_RF_section]

import time
t0 = time.time()

bunch_center = np.zeros(n_turns)
bunch_std = np.zeros(n_turns)


# TRACKING --------------------------------------------------------------------
for i in range(n_turns):