Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev irnl correction #10

Open
wants to merge 30 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
84ba0e7
Merge pull request #1 from xsuite/main
JoschD Jun 6, 2023
c493a66
Merge pull request #2 from xsuite/main
JoschD Jun 6, 2023
3cf67b2
running and tests
JoschD Jun 9, 2023
695923c
Merge branch 'xsuite:main' into main
JoschD Jul 11, 2023
14c3641
irnl_example
JoschD Jul 11, 2023
48de149
Merge branch 'main' into dev_irnl_correction
JoschD Jul 11, 2023
c4d6fa5
yaml and assertions
JoschD Jul 12, 2023
a471ffc
fine tune coupling
JoschD Jul 19, 2023
df69e3c
error_corrections script added
JoschD Jul 20, 2023
a8acefa
Merge branch 'xsuite:main' into main
JoschD Oct 2, 2023
84586df
Merge branch 'main' into dev_irnl_correction
JoschD Oct 2, 2023
ace3936
run for gianni
JoschD Oct 2, 2023
53b368c
cleanup tuning
JoschD Oct 11, 2023
415adcf
correct the right beams
JoschD Oct 12, 2023
4f202d7
running version
JoschD Oct 18, 2023
bd6483f
cleaned up irnl tests
JoschD Oct 19, 2023
2fac11b
with pretuning but deactivated
JoschD Oct 24, 2023
7a9fc3a
revert changes in old mask
JoschD Oct 24, 2023
bdb395b
added coupling knob calculations
JoschD Oct 25, 2023
75639a1
Merge branch 'main' into dev_irnl_correction
JoschD Oct 25, 2023
f4fa155
clarification
JoschD Oct 25, 2023
606b8a1
fixing sector numbering
JoschD Oct 25, 2023
998d80e
some better naming and explanation
JoschD Oct 25, 2023
03f2144
brings coupling knob creation to xmask
JoschD Oct 30, 2023
8077fea
added comment
JoschD Oct 30, 2023
0000190
knob synthesis in xmask, starting with tests
JoschD Oct 31, 2023
32f00d4
added testfile
JoschD Oct 31, 2023
07132ca
coupling knob tests
JoschD Nov 1, 2023
ef78d36
added test for installation in xmask
JoschD Nov 1, 2023
7bb4897
added forgotten conftest
JoschD Nov 1, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/hllhc14_collision/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ config_mad:
beam_energy_tot: 7000 # [GeV]

# Enable machine imperfections
enable_imperfections: false
enable_imperfections: true

# Enable knob synthesis (for coupling correction, if no imperfections)
enable_knob_synthesis: false
Expand Down Expand Up @@ -197,4 +197,4 @@ config_lumi_leveling:
- corr_co_acbcvs5.l8b2
- corr_co_acbchs5.l8b2
- corr_co_acbyvs5.r8b1
- corr_co_acbyhs5.r8b1
- corr_co_acbyhs5.r8b1
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from cpymad.madx import Madx
import xtrack as xt

import xmask as xm
import xmask.lhc as xmlhc

# Import user-defined optics-specific tools
import optics_specific_tools_hlhc14 as ost

# Read config file
with open('config.yaml','r') as fid:
config = xm.yaml.load(fid)
config_mad_model = config['config_mad']

# Make mad environment
xm.make_mad_environment(links=config_mad_model['links'])

# Start mad
mad_b1b2 = Madx(command_log="mad_collider.log")
mad_b4 = Madx(command_log="mad_b4.log")

# Build sequences
ost.build_sequence(mad_b1b2, mylhcbeam=1)
ost.build_sequence(mad_b4, mylhcbeam=4)

# Apply optics (only for b1b2, b4 will be generated from b1b2)
ost.apply_optics(mad_b1b2, optics_file=config_mad_model['optics_file'])

# Build xsuite collider
collider = xmlhc.build_xsuite_collider(
sequence_b1=mad_b1b2.sequence.lhcb1,
sequence_b2=mad_b1b2.sequence.lhcb2,
sequence_b4=mad_b4.sequence.lhcb2,
beam_config=config_mad_model['beam_config'],
enable_imperfections=config_mad_model['enable_imperfections'],
enable_legacy_mb_corrections=config_mad_model['enable_legacy_mb_corrections'],
enable_legacy_nl_corrections=config_mad_model['enable_legacy_nl_corrections'],
enable_knob_synthesis=config_mad_model['enable_knob_synthesis'],
rename_coupling_knobs=config_mad_model['rename_coupling_knobs'],
pars_for_imperfections=config_mad_model['pars_for_imperfections'],
ver_lhc_run=config_mad_model['ver_lhc_run'],
ver_hllhc_optics=config_mad_model['ver_hllhc_optics'])

# Save to file
collider.to_json('collider_00_from_mad.json')




28 changes: 28 additions & 0 deletions examples/hllhc14_collision_python_irnl/001_install_beambeam.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import numpy as np

import xtrack as xt
import xmask as xm

# Load collider
collider = xt.Multiline.from_json('collider_00_from_mad.json')

# Read beam-beam config from config file
with open('config.yaml','r') as fid:
config = xm.yaml.load(fid)
config_bb = config['config_beambeam']

# Install beam-beam lenses (inactive and not configured)
collider.install_beambeam_interactions(
clockwise_line='lhcb1',
anticlockwise_line='lhcb2',
ip_names=['ip1', 'ip2', 'ip5', 'ip8'],
delay_at_ips_slots=[0, 891, 0, 2670],
num_long_range_encounters_per_side=
config_bb['num_long_range_encounters_per_side'],
num_slices_head_on=config_bb['num_slices_head_on'],
harmonic_number=35640,
bunch_spacing_buckets=config_bb['bunch_spacing_buckets'],
sigmaz=config_bb['sigma_z'])

# Save to file
collider.to_json('collider_01_bb_off.json')
67 changes: 67 additions & 0 deletions examples/hllhc14_collision_python_irnl/002_knobs_and_tuning.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import xtrack as xt
import xmask as xm

# Load collider anf build trackers
collider = xt.Multiline.from_json('collider_01_bb_off.json')
collider.build_trackers()

# Read knobs and tuning settings from config file
with open('config.yaml','r') as fid:
config = xm.yaml.load(fid)
conf_knobs_and_tuning = config['config_knobs_and_tuning']
verbose = config.get('verbose', False)

# Set all knobs (crossing angles, dispersion correction, rf, crab cavities,
# experimental magnets, etc.)
for kk, vv in conf_knobs_and_tuning['knob_settings'].items():
collider.vars[kk] = vv

# Correct Magnetic Errors ---
conf_correct_magnetic_errors = conf_knobs_and_tuning["correct_magnetic_errors"]
if conf_correct_magnetic_errors["enable"]:
if conf_correct_magnetic_errors["pretuning"]:
# Initial orbit and tune/chroma correction,
# so that feed-down and betas are approximately correct
# Hint: with all errors in the machine lhcb2 tune/chroma will not converge within tolerance.
for line_name in ['lhcb1', 'lhcb2']:
print(f"Pre-tuning {line_name} ----\n")
xm.tuning.closed_orbit_correction(collider[line_name],
line_co_ref=collider[f'{line_name}_co_ref'],
co_corr_config=conf_knobs_and_tuning['closed_orbit_correction'][line_name],
verbose=verbose,
)

xm.tuning.tune_and_chromaticity_correction(collider[line_name],
enable_tune_correction=True,
enable_chromaticity_correction=True,
knob_names=conf_knobs_and_tuning['knob_names'][line_name],
targets=conf_knobs_and_tuning["targets"][line_name],
dual_pass_tune_and_chroma=True,
n_steps_max=5, # will converge before or never
assert_within_tol=False, # doesn't need to be perfect
verbose=verbose,
)

# Error Correction
conf_ir_rdt_correction = conf_correct_magnetic_errors.get('ir_rdt_correction', {'enable': False})
xm.correct_errors(collider,
enable_ir_rdt_correction=conf_ir_rdt_correction['enable'],
ir_rdt_corr_config=conf_ir_rdt_correction,
)

# Full tuning for both lines ---
for line_name in ['lhcb1', 'lhcb2']:
print(f"Machine tuning {line_name} ----\n")
xm.machine_tuning(line=collider[line_name],
enable_closed_orbit_correction=True,
enable_linear_coupling_correction=True,
enable_tune_correction=True,
enable_chromaticity_correction=True,
knob_names=conf_knobs_and_tuning['knob_names'][line_name],
targets=conf_knobs_and_tuning["targets"][line_name],
line_co_ref=collider[f'{line_name}_co_ref'],
co_corr_config=conf_knobs_and_tuning['closed_orbit_correction'][line_name],
verbose=verbose,
)

collider.to_json('collider_02_tuned_bb_off.json')
37 changes: 37 additions & 0 deletions examples/hllhc14_collision_python_irnl/003_lumi_level.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from scipy.constants import c as clight

import xtrack as xt
import xmask as xm
import xmask.lhc as xlhc

# Load collider anf build trackers
collider = xt.Multiline.from_json('collider_02_tuned_bb_off.json')
collider.build_trackers()

# Read knobs and tuning settings from config file
with open('config.yaml','r') as fid:
config = xm.yaml.load(fid)

config_lumi_leveling = config['config_lumi_leveling']
config_beambeam = config['config_beambeam']

xlhc.luminosity_leveling(
collider, config_lumi_leveling=config_lumi_leveling,
config_beambeam=config_beambeam)

# Re-match tunes, and chromaticities
conf_knobs_and_tuning = config['config_knobs_and_tuning']

for line_name in ['lhcb1', 'lhcb2']:
knob_names = conf_knobs_and_tuning['knob_names'][line_name]
targets = {
'qx': conf_knobs_and_tuning['qx'][line_name],
'qy': conf_knobs_and_tuning['qy'][line_name],
'dqx': conf_knobs_and_tuning['dqx'][line_name],
'dqy': conf_knobs_and_tuning['dqy'][line_name],
}
xm.machine_tuning(line=collider[line_name],
enable_tune_correction=True, enable_chromaticity_correction=True,
knob_names=knob_names, targets=targets)

collider.to_json('collider_03_tuned_and_leveled_bb_off.json')
34 changes: 34 additions & 0 deletions examples/hllhc14_collision_python_irnl/004_configure_beambeam.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import json

import xmask as xm
import xtrack as xt

# Read beam-beam config from config file
with open('config.yaml','r') as fid:
config = xm.yaml.load(fid)
config_bb = config['config_beambeam']

# Load collider and build trackers
collider = xt.Multiline.from_json('collider_03_tuned_and_leveled_bb_off.json')
collider.build_trackers()

# Configure beam-beam lenses
print('Configuring beam-beam lenses...')
collider.configure_beambeam_interactions(
num_particles=config_bb['num_particles_per_bunch'],
nemitt_x=config_bb['nemitt_x'],
nemitt_y=config_bb['nemitt_y'])

if 'mask_with_filling_pattern' in config_bb:
fname = config_bb['mask_with_filling_pattern']['pattern_fname']
i_bunch_cw = config_bb['mask_with_filling_pattern']['i_bunch_b1']
i_bunch_acw = config_bb['mask_with_filling_pattern']['i_bunch_b2']
with open(fname, 'r') as fid:
filling = json.load(fid)

collider.apply_filling_pattern(
filling_pattern_cw=filling['beam1'],
filling_pattern_acw=filling['beam2'],
i_bunch_cw=i_bunch_cw, i_bunch_acw=i_bunch_acw)

collider.to_json('collider_04_tuned_and_leveled_bb_on.json')
Loading