function [ Kern ] = kern_undulator( definition theory examples xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K pages 1 .. 2 pages 3 .. 5 pages 6 ... ) definition function [ Kern ] = kern_undulator( xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K ) calculates kernel function for undulator trajectory for finite and infinite undulator, local or periode-averaged (only for infinite undulator), 1d beam or cross-section averaged function [ Kern ] = kern_undulator( xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K ) mesh and usage: du = mesh step = [nu1,nu2] = mesh range ~ E s so vt s v K s , v dv 4 o u 0 s bs / E K4,d K 4,d b v / K s , v dv 4 u 0 Kern = K 4,d nu1: nu2 with bx max 1 x ,0 o definition function [ Kern ] = kern_undulator( xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K ) undulator: gamma = relativistic factor for resonance energy lambda_u = length of undulator period K = planar undulator parameter u K 2 photon wavelength ph 2 1 2 2 transverse parameters: function [ Kern ] = kern_undulator( xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K ) “1” for 1D-beam, “2” for transverse averaging xy_param.type = 1 / 2 “1” for 1D-beam, “2” for transverse averaging only for 1D-beam: offset with respect to trajectory xy_param.off = [xoff,yoff] xy_param.cor = [cxx,cxy,cyy(,Nsigma,Nstep)] only for transverse averaging: cxx, cxy, cyy = transverse correlation, f.i. cxx=emittance*beta_x optional: Nsigma [3] = size of integration range (per direction) Nstep [13] = number of steps (per direction) of tr. integration longitudinal parameters: function [ Kern ] = kern_undulator( xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K ) finite or infinite undulator z_param.finite = true / false true: calculate local wake z_param.local = true / false false: calculate period averaged wake (only for infinite u.) z_param.Nav z_param.Z0_obs z_param.N_per number of points for period averaging longitudinal observer position relative to beginning of finite undulator or to point with maximal horizontal offset in infinite undulator number periods of finite undulator theory geometry trajectory rtr S u tr S d rtr S ds observer ro ro rtr S1 w1 rtr So w with u o u tr So uo w 0 relative to observer Rs ro rtr So s Rs Rs ns Rs Rs u s s u tr So s tangential trajectory (depends on observer) rtang S rtr S o u o S S o R tang s w u o s Rtang s w2 s 2 n tang s R tang s Rtang s theory kernels kernel 1 ~ 4E s R so vt K tr,1 so , s ds ~ s Rtang so vt K tang,1so , ~ s d~ s 0 0 with K tr,1 so , s n u s u o 2 1 u s u o 2 R K tang, 2 so , ~ s Rtang 2 kernel 2 Rtang Rtang ~ s w2 ~ s2 integral 1, substitution us s Rs u ~ s ~ s Rtang ~ s integral 2 ~ 4E u 0 u s o vt K 2 so , u du n u s u o 2 1 u s u o 2 2 K 2 so , u R1 u s n Rtang 1 u 0 n tang kernel 3 substitution su with u su Rsu 0 ~ 4E s R so vt K 3 so , s ds K 3 so , s n u s u o 2 1 u s u o 2 R 2 1 u s n Rtang 1 u o n l theory kernels kernel 2, technical aspect n u s u o 2 1 u s u o 2 2 K 2 so , u s R1 u s n Rtang ~ s s u u with ~ K 2 so , u n u s u o 2 1 u s u o u 2 w2 d 2 Rtang ~s Rtang ~ s d s with d R u s R Rtang ~ ~ s s 2 s u s R kernel 4 ~ E s so vt s v K s , v dv 4 u 0 K 4 s o , v K 2 so ,v 4 v 1 o examples example 1 x_off=0.0001; y_off=0.00001; sig=10.0E-6; q=0.01E-9; % UNDULATOR gamma=100; lambda_u=0.03; K=2.0; lambda_ph=lambda_u/(2*gamma^2)*(1+K^2/2); % MESH u_min=-sqrt(x_off^2+y_off^2); u_max=max(lambda_ph*30,8*sig); du=min(lambda_ph/10,sig/5); nu1=floor(u_min/du); nu2=ceil( u_max/du); % BUNCH n1=-round(4*sig/du); n2=round(4*sig/du); lam=q/sqrt(2*pi)/sig*exp(-0.5*((n1:n2)*du/sig).^2); % transverse parameters xy_param.type=1; xy_param.off=[x_off,y_off]; % longitudinal parameters Nav=250; z_param.finite=false; z_param.local=false; z_param.Nav=Nav; % KERNEL kern=kern_undulator(xy_param,z_param,du,nu1,nu2,gamma,lambda_u,K); % CONVOLUTION wake=conv_fft(lam,kern,n1,nu1,n1,n2)*du; figure(1); plot((n1:n2)*du,wake); % FFT CONVOLUTION function [ c,nc1,nc2 ] = conv_fft( a,b,na1,nb1,nc1in,nc2in ) P = numel(a); Q = numel(b); L = P + Q - 1; K = 2^nextpow2(L); c = ifft(fft(a, K) .* fft(b, K)); c = c(1:L); if nargin>2 nc1=na1+nb1; nc2=nc1+L-1; end if nargin>4 L_zeile=size(c,1)==1; if nargin==5, nc2in=nc2; end if L_zeile cc=zeros(1,nc2in-nc1in+1); else cc=zeros(nc2in-nc1in+1,1); end nc1h=max(nc1,nc1in); nc2h=min(nc2,nc2in); cc(1-nc1in+(nc1h:nc2h))=c(1-nc1+(nc1h:nc2h)); c=cc; nc1=nc1in; nc2=nc2in; end end figure 1 examples for examples 2, 3 and 4: 500MeV / mo c 2 x y 1 μm x y 10 m c xx c yy x x c xy 0 bunch 1: 1 s 2 q s exp 2 s 2 s q 0.5 nC cq 2 kA 2 s bunch 2: 1 s 2 q s exp 1 m cosks 2 s 2 s q 0.1 nC cq 2 kA 2 s m 0.02 k 2/ 800 nm examples example 2: FLASH, ORS undulator infinite undulator periodic wake Nav= 250 bunch 1 (0.5 nC), coarse du = 1 µm, fine du = 0.25 µm bunch 2 (0.1 nC, modulated), du = 0.080 µm, Nsigma = 4, Nstep = 25 500MeV / mo c 2 u 20.7 cm K 7.7 bunch 2 (0.1 nC, modulated), du = 0.040 µm bunch 2 (0.1 nC, modulated), du = 0.080 µm, (Nsigma = 3, Nstep = 13) examples example 3: FLASH, SEEDING undulator infinite undulator periodic wake Nav= 250 bunch 1 (0.5 nC), coarse du = 1 µm, fine du = 0.25 µm bunch 2 (0.1 nC, modulated), du = 0.080 µm, Nsigma = 4, Nstep = 25 500MeV / mo c 2 u 3.15 cm K 2.83 bunch 2 (0.1 nC, modulated), du = 0.040 µm bunch 2 (0.1 nC, modulated), du = 0.080 µm, (Nsigma = 3, Nstep = 13) examples example 4: FLASH, SASE undulator infinite undulator periodic wake Nav= 250 bunch 1 (0.5 nC), coarse du = 1 µm, fine du = 0.25 µm 500MeV / mo c 2 u 2.73 cm K 1.24
© Copyright 2026 Paperzz