Skip to content

campa-consortium/recycler_ring_opt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

recycler_ring_opt

Run the evaluate() function for a given parameter set, get the vectors of tune-vs-freq we want to match the data

After setting PYTHONPATH so the Synergia modules are available:

[recycler_ring_opt]$ python
Python 3.9.16 (main, May 29 2023, 00:00:00) 
[GCC 11.3.1 20221121 (Red Hat 11.3.1-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> kxl_values = {
...         'K1L_EVEN': 0.01,
...         'K1L_ODD': -0.005,
...         'K2L_EVEN': -0.005,
...         'K2L_ODD': -0.00033,
...         'K3L_EVEN': 0.0000129,
...         'K3L_ODD': -0.0000333
...         }
>>> xtunes, ytunes = evaluate.evaluate(kxl_values)
generate_lattice, initial xtune:  0.44220778603001837 , ytune:  0.39154486215708884
Adjusting tunes to:
xtune:  0.4126
ytune:  0.356
delta_xtune:  -0.029607786030018346
delta_ytune:  -0.03554486215708885
Number of macroparticles: 41
Number of frequencies to run:  41
    offsets from  -0.004344974504652674 to 0.004344974504652674
Propagator: starting turn 1, final turn 1024

Propagator: turn    1/1024, time = 0.113s, macroparticles = (41) / ()
Propagator: turn    2/1024, time = 0.114s, macroparticles = (41) / ()
Propagator: turn    3/1024, time = 0.113s, macroparticles = (41) / ()

... skipping a bunch ...

Propagator: turn 1022/1024, time = 0.114s, macroparticles = (41) / ()
Propagator: turn 1023/1024, time = 0.113s, macroparticles = (41) / ()
Propagator: turn 1024/1024, time = 0.113s, macroparticles = (41) / ()
Propagator: total time = 125.475s
>>> xtunes
array([0.43633326, 0.43523356, 0.43411613, 0.43298387, 0.43183512,
       0.43067082, 0.4294961 , 0.42831135, 0.42711749, 0.42591224,
       0.42469878, 0.42348164, 0.42226021, 0.42103296, 0.41980236,
       0.41857286, 0.41734424, 0.41611508, 0.41488769, 0.41365023,
       0.41245057, 0.41124038, 0.41003644, 0.40884542, 0.4076643 ,
       0.40649495, 0.40533634, 0.404193  , 0.40306638, 0.40194496,
       0.40086651, 0.39979607, 0.39874633, 0.39771853, 0.39671478,
       0.39573646, 0.39478457, 0.3938603 , 0.39296507, 0.39210035,
       0.39126802])
>>> ytunes
array([0.39027933, 0.38848626, 0.38670575, 0.38493946, 0.38318761,
       0.38148277, 0.37971588, 0.37799436, 0.37628517, 0.37458575,
       0.37289381, 0.37120706, 0.36953048, 0.36785806, 0.36619437,
       0.36453058, 0.36287578, 0.36122213, 0.3595694 , 0.35791947,
       0.35626871, 0.35462432, 0.35297322, 0.35132475, 0.34967192,
       0.34801847, 0.34632388, 0.34469832, 0.34302883, 0.34135635,
       0.33967694, 0.33799013, 0.33629606, 0.33459307, 0.33287895,
       0.33115622, 0.3294218 , 0.32767607, 0.3259154 , 0.32414392,
       0.32235717])
>>> 

To produce a template from a working lattice file:

By default, assumes the user wants to tweak K0L, K1L, K2L, and K3L for all physical MPS*U elements, separately for even and odd ones, and creates a set of eight MAD parameters accordingly. A list of nonphysical elements is hard-coded to be copied untouched into the template file as skipthese. A set of initial values for these eight new MAD paramaeters is also hard-coded.

$ python3.9 templatize_latticefile.py --help                  
Usage: templatize_latticefile.py [-h] [-v] [--outfilename OUTFILENAME] [--element-regex ELEMENT_REGEX] [--split-by-parity SPLIT_BY_PARITY] LatticeFileIn

Create a template lattice file with placeholders.

positional arguments:
  LatticeFileIn         Required input file path

optional arguments:
  -h, --help            show this help message and exit
  -v, --debug           Verbose debugging output. (default:False)
  --outfilename OUTFILENAME
                        Output file name. (default= RR2020V0922_TEMPLATE_fixed)
  --element-regex ELEMENT_REGEX
                        String pattern to match. (default: "MPS*U")
  --split-by-parity SPLIT_BY_PARITY
                        Split elements even/odd. (default: True)

Generate a lattice file with a given set of parameters, from a template lattice file

$ python3.9 GenerateLatticeFile.py --help                                                                                 
usage: GenerateLatticeFile.py [-h] [-v] [--params PARAMS] [--outfilename OUTFILENAME] TemplateFileIn

Create a lattice file from a template.

positional arguments:
  TemplateFileIn        Required input file path.

optional arguments:
  -h, --help            show this help message and exit
  -v, --debug           Verbose debugging output. (default:False)
  --params PARAMS       comma-separated TOKEN:values pairs, e.g. REPLACEME_K1LEVEN:0.01,REPLACEME_K1ODDD:-0.23
  --outfilename OUTFILENAME
                        Output file name. (default= Built from input param choices,)


rr_tune_survey.py runs the Recycler ring simulation.

A single bunch of 41 particles is launched at dp/p offsets corresponding to a frequency shift of arange(-2000, 2050, 100) Hz.

The turn-by-turn coordinates of each particle is saved in the HDF5 file tracks.h5 in dataset named track_coords. This is an array of shape (nturns, nparticles, 7). The run is currently set for 2000 turns so nturns = 2001 (initial + 2000). nparticles is 41 for a particle at each of the different momenta, and the third dimension are the phase space coordinates of the particle: (x, x', y, y', cdt, dp/p, label).

This output can be easily read with the h5py python module.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •