Drift¶
In [1]:
Copied!
# Useful for debugging
%load_ext autoreload
%autoreload 2
# Useful for debugging
%load_ext autoreload
%autoreload 2
In [2]:
Copied!
from astra import Astra
from distgen import Generator
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['figure.figsize'] = (13,8)
%config InlineBackend.figure_format = 'retina'
import os
from astra import Astra
from distgen import Generator
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['figure.figsize'] = (13,8)
%config InlineBackend.figure_format = 'retina'
import os
In [3]:
Copied!
# Input template file 
ASTRA_IN = '../templates/drift/astra.in'
DISTGEN_IN = '../templates/drift/distgen.yaml'
# Input template file 
ASTRA_IN = '../templates/drift/astra.in'
DISTGEN_IN = '../templates/drift/distgen.yaml'
In [4]:
Copied!
G = Generator(DISTGEN_IN)
G["n_particle"] = 10_000
G.run()
P0 = G.particles
P0
G = Generator(DISTGEN_IN)
G["n_particle"] = 10_000
G.run()
P0 = G.particles
P0
Out[4]:
<ParticleGroup with 10000 particles at 0x10418ddc0>
In [5]:
Copied!
# Make an Astra object
A = Astra(input_file=ASTRA_IN, initial_particles=P0, verbose=True)
# Make an Astra object
A = Astra(input_file=ASTRA_IN, initial_particles=P0, verbose=True)
Configured to run in: /var/folders/2f/l5_mybzs30j4qqvyj98w1_nw0000gn/T/tmp4tffa6s5
In [6]:
Copied!
# Run
A.run()
# Run
A.run()
Initial particles written to /var/folders/2f/l5_mybzs30j4qqvyj98w1_nw0000gn/T/tmp4tffa6s5/astra.particles
 --------------------------------------------------------------------------
                Astra- A space charge tracking algorithm 
               Version 4.0 - macOS 64bit - Apple Silicon   
                        DESY,  Hamburg 2022          
                        Wed Aug  2 08:50:14 
     Parameter file is:  astra.in                                          
     Drift example                                                                   
 Initialize element settings:
 --------------------------------------------------------------------------
   10001 particles from file astra.particles                                   
     Particles taken into account      N =      10001
     total charge                      Q =     -1.000     nC
     horizontal beam position          x =     9.1954E-16 mm
     vertical beam position            y =    -6.4483E-16 mm
     longitudinal beam position        z =     1.3014E-19 m
     horizontal beam size          sig x =      1.000     mm
     vertical beam size            sig y =      1.000     mm
     longitudinal beam size        sig z =     0.1000     mm
     average kinetic energy            E =      9.502     MeV
     energy spread                    dE =     1.7224E-09 keV
     average momentum                  P =      10.00     MeV/c
     transverse beam emittance     eps x =      0.000     pi mrad mm
     correlated divergence         cor x =      0.000     mrad 
     transverse beam emittance     eps y =      0.000     pi mrad mm
     correlated divergence         cor y =      0.000     mrad
     longitudinal beam emittance   eps z =     1.7247E-10 pi keV mm
     correlated energy spread      cor z =     3.9171E-26 keV
     emittance ratio eps y/eps x         =      0.000    
 --------------------------------------------------------------------------
     Start auto phasing: 
 --------------------------------------------------------------------------
     Start phase scan: 
     Cavity phasing completed:
     Cavity number   Energy gain [MeV]  at  Phase [deg]
 --------------------------------------------------------------------------
 on axis tracking of the reference particle:
     initial position                  z =   1.8735E-21 m
                                       x =    0.000     mm
                                       y =    0.000     mm
     initial momentum                  p =    10.00     MeV/c
     global phase shift              phi =    0.000     deg
     time step for integration        dt =    7.500     ps
 --------------------------------------------------------------------------
 Online element settings:
 --------------------------------------------------------------------------
     particle reaches position         z =    1.000     m
     time of flight is                 t =    3.340     ns
     final momentum                    p =    10.00     MeV/c
     final phase (cavity 1)      phi_end =    0.000     deg
 --------------------------------------------------------------------------
 off axis tracking of the reference particle: 
     initial position                  z =   1.8735E-21 m
                                       x =    1.000     mm
                                       y =    1.000     mm
     final position                    x =    1.000     mm
                                       y =    1.000     mm
     divergence                    px/pz =    0.000     mrad
                                   py/pz =    0.000     mrad
 --------------------------------------------------------------------------
 tracking of    10001 particles:
     tracking will stop at             z =    1.000     m
     space charge forces are INCLUDED
     3D FFT algorithm
     final checkpoint at               z =    1.000     m
     total number of iteration steps:           544
     **********************************************************************
     Particles taken into account      N =      10001
     total charge                      Q =     -1.000     nC
     horizontal beam position          x =    -1.4417E-04 mm
     vertical beam position            y =     7.4455E-05 mm
     longitudinal beam position        z =      1.000     m
     horizontal beam size          sig x =      2.076     mm
     vertical beam size            sig y =      2.075     mm
     longitudinal beam size        sig z =     0.1466     mm
     average kinetic energy            E =      9.515     MeV
     energy spread                    dE =      311.4     keV
     average momentum                  P =      10.01     MeV/c
     transverse beam emittance     eps x =      12.38     pi mrad mm
     correlated divergence         cor x =      1.797     mrad 
     transverse beam emittance     eps y =      12.43     pi mrad mm
     correlated divergence         cor y =      1.797     mrad
     longitudinal beam emittance   eps z =      10.93     pi keV mm
     correlated energy spread      cor z =      302.3     keV
     emittance ratio eps y/eps x         =     0.9957    
     Particle Statistics: 
     Total number of particles on stack     =      10001
     Electrons (total)                      =      10001
     particles at the cathode               =          0
     active particles                       =      10001
     passive particles (lost out of bunch)  =          0
     probe particles                        =          0
     backward traveling particles           =          0
     particles lost with z<Zmin             =          0
     particles lost due to cathode field    =          0
     particles lost on aperture             =          0
     **********************************************************************
     Emittance information saved to file    : astra.Xemit.001               
     Emittance information saved to file    : astra.Yemit.001               
     Emittance information saved to file    : astra.Zemit.001               
     Lost & found saved to file             : astra.LandF.001               
     Ref. part. information saved to file   : astra.ref.001                 
     Phase-space distributions logged in    : astra.Log.001                 
     Phase scan saved to file               : astra.PScan.001               
     Core emittance data saved to file      : astra.Cemit.001               
     **********************************************************************
     finished simulation  Wed Aug  2 08:50:19 2023
     elapsed time   :                 5.6 seconds 
     execution time :                 5.5 seconds 
     system time    :                 0.0 seconds
     Goodbye.
 --------------------------------------------------------------------------
loading 1 particle files
[100.0]
{'start_time': 1690991414.116042, 'run_script': '/Users/chrisonian/Code/Astra/bin/Astra astra.in', 'run_time': 5.663373231887817}
Note: The following floating-point exceptions are signalling: IEEE_DIVIDE_BY_ZERO
In [7]:
Copied!
P = A.particles[-1]
P.plot('x', 'px')
P.plot('z', 'pz')
P = A.particles[-1]
P.plot('x', 'px')
P.plot('z', 'pz')
3D¶
In [8]:
Copied!
A2 = A.copy()
A2.input['charge']['lspch'] = True
A2.input['charge']['lspch3d'] = True
A2.input['charge']['l2d_3d'] = False
A2.input['charge']['nxf'] = 32
A2.input['charge']['nyf'] = 32
A2.input['charge']['nzf'] = 32
A2.input['charge']['nx0'] = 4
A2.input['charge']['ny0'] = 4
A2.input['charge']['nz0'] = 4
A2.configure()
A2.run()
A2 = A.copy()
A2.input['charge']['lspch'] = True
A2.input['charge']['lspch3d'] = True
A2.input['charge']['l2d_3d'] = False
A2.input['charge']['nxf'] = 32
A2.input['charge']['nyf'] = 32
A2.input['charge']['nzf'] = 32
A2.input['charge']['nx0'] = 4
A2.input['charge']['ny0'] = 4
A2.input['charge']['nz0'] = 4
A2.configure()
A2.run()
Configured to run in: /var/folders/2f/l5_mybzs30j4qqvyj98w1_nw0000gn/T/tmp65kgsf88
Initial particles written to /var/folders/2f/l5_mybzs30j4qqvyj98w1_nw0000gn/T/tmp65kgsf88/astra.particles
 --------------------------------------------------------------------------
                Astra- A space charge tracking algorithm 
               Version 4.0 - macOS 64bit - Apple Silicon   
                        DESY,  Hamburg 2022          
                        Wed Aug  2 08:50:20 
     Parameter file is:  astra.in                                          
     Drift example                                                                   
 Initialize element settings:
 --------------------------------------------------------------------------
   10001 particles from file astra.particles                                   
     Particles taken into account      N =      10001
     total charge                      Q =     -1.000     nC
     horizontal beam position          x =     9.1954E-16 mm
     vertical beam position            y =    -6.4483E-16 mm
     longitudinal beam position        z =     1.3014E-19 m
     horizontal beam size          sig x =      1.000     mm
     vertical beam size            sig y =      1.000     mm
     longitudinal beam size        sig z =     0.1000     mm
     average kinetic energy            E =      9.502     MeV
     energy spread                    dE =     1.7224E-09 keV
     average momentum                  P =      10.00     MeV/c
     transverse beam emittance     eps x =      0.000     pi mrad mm
     correlated divergence         cor x =      0.000     mrad 
     transverse beam emittance     eps y =      0.000     pi mrad mm
     correlated divergence         cor y =      0.000     mrad
     longitudinal beam emittance   eps z =     1.7247E-10 pi keV mm
     correlated energy spread      cor z =     3.9171E-26 keV
     emittance ratio eps y/eps x         =      0.000    
 --------------------------------------------------------------------------
     Start auto phasing: 
 --------------------------------------------------------------------------
     Start phase scan: 
     Cavity phasing completed:
     Cavity number   Energy gain [MeV]  at  Phase [deg]
 --------------------------------------------------------------------------
 on axis tracking of the reference particle:
     initial position                  z =   1.8735E-21 m
                                       x =    0.000     mm
                                       y =    0.000     mm
     initial momentum                  p =    10.00     MeV/c
     global phase shift              phi =    0.000     deg
     time step for integration        dt =    7.500     ps
 --------------------------------------------------------------------------
 Online element settings:
 --------------------------------------------------------------------------
     particle reaches position         z =    1.000     m
     time of flight is                 t =    3.340     ns
     final momentum                    p =    10.00     MeV/c
     final phase (cavity 1)      phi_end =    0.000     deg
 --------------------------------------------------------------------------
 off axis tracking of the reference particle: 
     initial position                  z =   1.8735E-21 m
                                       x =    1.000     mm
                                       y =    1.000     mm
     final position                    x =    1.000     mm
                                       y =    1.000     mm
     divergence                    px/pz =    0.000     mrad
                                   py/pz =    0.000     mrad
 --------------------------------------------------------------------------
 tracking of    10001 particles:
     tracking will stop at             z =    1.000     m
     space charge forces are INCLUDED
     3D FFT algorithm
     final checkpoint at               z =    1.000     m
     total number of iteration steps:           549
     **********************************************************************
     Particles taken into account      N =      10001
     total charge                      Q =     -1.000     nC
     horizontal beam position          x =     6.0368E-05 mm
     vertical beam position            y =     7.4282E-05 mm
     longitudinal beam position        z =      1.000     m
     horizontal beam size          sig x =      2.068     mm
     vertical beam size            sig y =      2.067     mm
     longitudinal beam size        sig z =     0.1463     mm
     average kinetic energy            E =      9.515     MeV
     energy spread                    dE =      309.8     keV
     average momentum                  P =      10.01     MeV/c
     transverse beam emittance     eps x =      12.36     pi mrad mm
     correlated divergence         cor x =      1.788     mrad 
     transverse beam emittance     eps y =      12.41     pi mrad mm
     correlated divergence         cor y =      1.787     mrad
     longitudinal beam emittance   eps z =      10.90     pi keV mm
     correlated energy spread      cor z =      300.7     keV
     emittance ratio eps y/eps x         =     0.9959    
     Particle Statistics: 
     Total number of particles on stack     =      10001
     Electrons (total)                      =      10001
     particles at the cathode               =          0
     active particles                       =      10001
     passive particles (lost out of bunch)  =          0
     probe particles                        =          0
     backward traveling particles           =          0
     particles lost with z<Zmin             =          0
     particles lost due to cathode field    =          0
     particles lost on aperture             =          0
     **********************************************************************
     Emittance information saved to file    : astra.Xemit.001               
     Emittance information saved to file    : astra.Yemit.001               
     Emittance information saved to file    : astra.Zemit.001               
     Lost & found saved to file             : astra.LandF.001               
     Ref. part. information saved to file   : astra.ref.001                 
     Phase-space distributions logged in    : astra.Log.001                 
     Phase scan saved to file               : astra.PScan.001               
     Core emittance data saved to file      : astra.Cemit.001               
     **********************************************************************
     finished simulation  Wed Aug  2 08:50:26 2023
     elapsed time   :                 5.5 seconds 
     execution time :                 5.5 seconds 
     system time    :                 0.0 seconds
     Goodbye.
 --------------------------------------------------------------------------
loading 1 particle files
[100.0]
{'start_time': 1690991420.61433, 'run_script': '/Users/chrisonian/Code/Astra/bin/Astra astra.in', 'run_time': 5.618848085403442}
Note: The following floating-point exceptions are signalling: IEEE_DIVIDE_BY_ZERO
In [9]:
Copied!
P2 = A2.particles[-1]
P2.plot('x', 'px')
P2 = A2.particles[-1]
P2.plot('x', 'px')
In [10]:
Copied!
k1 = 'z'
k2 = 'x'
skip = 10
plt.scatter(P[k1][::skip], P[k2][::skip], label='2d', marker='x', alpha=0.5)
plt.scatter(P2[k1][::skip], P2[k2][::skip], label='3d', marker='.', alpha=0.5)
plt.legend()
k1 = 'z'
k2 = 'x'
skip = 10
plt.scatter(P[k1][::skip], P[k2][::skip], label='2d', marker='x', alpha=0.5)
plt.scatter(P2[k1][::skip], P2[k2][::skip], label='3d', marker='.', alpha=0.5)
plt.legend()
Out[10]:
<matplotlib.legend.Legend at 0x156cadb50>
In [11]:
Copied!
k1 = 'x'
k2 = 'px'
skip = 1
plt.scatter(P[k1][::skip], P[k2][::skip], label='2d', marker='x', alpha=0.5)
plt.scatter(P2[k1][::skip], P2[k2][::skip], label='3d', marker='.', alpha=0.5)
plt.legend()
k1 = 'x'
k2 = 'px'
skip = 1
plt.scatter(P[k1][::skip], P[k2][::skip], label='2d', marker='x', alpha=0.5)
plt.scatter(P2[k1][::skip], P2[k2][::skip], label='3d', marker='.', alpha=0.5)
plt.legend()
Out[11]:
<matplotlib.legend.Legend at 0x156c7dd60>