-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbeam_beam_MAD-X_2012.txt
234 lines (221 loc) · 11.5 KB
/
beam_beam_MAD-X_2012.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
# This file describes van der Meer scan in ATLAS simulated using MAD-X in
# 2012. It is intended to compare this new and the old simulations. The latter
# was used in LHC in 2012-2018 luminosity calibrations.
#----------------------------------------------------------------------
#
# Beam momentum in GeV
p = 3500.
# Charge of particles in beam1 and beam2 in units of the proton charge
Z1 = 1
Z2 = 1
# Value of the beta-function in the interaction point (beta-star), in meters
beta = 1.5
# The tune values (the number of betatron transverse oscillation periods in one
# LHC orbit), from Hostettler PhD, p.25, Table 4.1
# before_2017:
Qx = 64.31
Qy = 59.32
# Number of particles in 1st and 2nd bunch
N1 = 8.5e10
N2 = 8.5e10
# The traced points of the 1st bunch are selected in the following way. The
# first bunch Gaussian is sampled in two-dimensional X-Y grid covering
# +/-N.sigma * sig1.x times +/-N.sigma * sig1.y rectangle with
# int(sqrt(N.points)) points along each side. Then, all points with
# sqrt((X/sig1.x)^2 + (Y/sig1.y)^2) distance greater than N.sigma are
# removed. For every position of the 2nd bunch the points with the
# corresponding distance from its center, sqrt(((X-x2)/sig2.x)^2 +
# (Y-y2)/sig2.y)^2), greater than N.sigma are also removed. Positions of all
# remaining points are traced N.turns in the accelerator.
N.sigma = 5
N.points = 10000
# Beam-beam interaction is switched on not immediately but after
# N.no.beam.beam.turns in accelerator. This allows to calculate numerically
# the undisturbed overlap integral, compare it with the exact analytic formula
# and estimate the bias of the numerical integration. The final correction is
# then calculated as the ratio of the numerical integration with and without
# the beam-beam interaction. The bias is cancelled in the ratio at least
# partially and this potentially allows to improve the precision.
N.no.beam.beam.turns = 1000
# Beam-beam interaction can be switched on not abruptly but "adiabatically",
# linearly from zero to its value during N.transitional.turns
#
# N.transitional.turns can be omitted, then it is assigned to 1000 by default
N.transitional.turns = 1000
# After beam-beam is fully switched on, one should wait for the
# stabilization. Normally, it is reached after <2000 turns (less if beam-beam
# is switched on adiabatically).
#
# If N.stabilization.turns is omitted, it is set by default to 2000
N.stabilization.turns = 2000
# After N.no.beam.beam.turns + N.transitional.turns + N.stabilization.turns
# turns, the positions of the selected points (the intersections of their
# orbits with the X-Y plane at the Interaction Point) are calculated in the
# accelerator during N.turns.with.beam.beam. This is the period when the
# luminosity correction is determined.
N.turns.with.beam.beam = 5000
# 1st and 2nd bunch Gaussian sigmas in X and Y in um
sig1.x = 40.
sig1.y = 40.
sig2.x = 40.
sig2.y = 40.
# The sequence of the relative X,Y positions of the 2nd bunch center
# w.r.t. the 1st one in um as two white-space separated lists (corresponding
# to the van der Meer scan steps)
x2 = 0. 10. 20. 30. 40. 50. 60. 70. 80. 90. 100. 110. 120. 130. 140. 150. 160. 170. 180. 190. 200.
y2 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.
# What should be the output of the computation (a white-space separated list
# of keywords below, the files will be named like
# "beam_beam_output_<keyword>.txt.gz" except the shortest
# "beam_beam_output_summary.txt" which will not be gzip'ed):
#
# "summary" the main results on the overlap rho1 * rho2 integrals and the
# corresponding beam-beam correction. This file will always be
# printed, regardless of the settings.
#
# "rx.ry.weights" for every point: its maximal x and y (ie. the circle radii
# rx, ry in x,x' and y,y' phase spaces, x',y' denote the
# derivatives w.r.t. z multiplied by beta) and "weights" at
# which the point should be taken in the averages (the
# cenetral points have more weight).
# Format: step x2 y2 point rx ry weight
#
# "integrals" overlap integrals per turn (not averaged), rho1,2 bunch
# densities are either modified by the beam-beam electromagnetic
# interaction or not, depending on whether the accelerator turn
# is greater than "N.no.beam.beam.turns" or not, respectively.
# Format: step x2 y2 turn integral
#
# "centers" averaged over points x- and y-positions per turn
# Format: step x2 y2 turn average_x average_y
#
# "points" the traced points of the 1st bunch after accelerator turn "i",
# this file might be very long.
# Format: step x/y turn point coordinate derivative_w.r.t._z*(-beta)
#
output = rx.ry.weights integrals centers points
# By default all output files and also the copy of the configuration file will
# be stored in the subdirectory with the name obtained by dropping .txt from
# the end of the configuration file name, like
# beam_beam_1.txt -> beam_beam_1/. One can overwrite this rule by giving an
# explicit name (relative to the current directory or absolute) below.
# A fresh output subdirectory will be created. If it already exists, the program
# will terminate without overwriting anything.
# output.directory = beam_beam_lhcb_example
# Storage of the traced point positions after all accelerator turns might
# require too much disk space. Instead, one can "select.one.turn.out.of" N turns.
# Eg. if this parameter is 100, only the positions of the points after
# 0, 100, 200, ... turns will be stored.
select.one.turn.out.of = 1000
# Seed for the random number generator. If not given, the current time will be
# used as a seed.
# seed = 12121212121
# For the debugging purposes one can redefine the kick formula by choosing
# the "kick.model" parameter below from the list:
# precise,
# precise.minus.average,
# average,
# precise.minus.one.third.of.average,
# one.third.of.average,
# precise.minus.at.center,
# at.center,
# quadrupole,
# average.and.quadrupole
#
# By default it is set to "precise" (also when kick.model is left undefined),
# then the exact kick formula is used.
#
# "average" means constant X,Y-independent kick equal to the value averaged
# over the bunch. Ie. the value of this constant angular kick is chosen to be
# equal to the sum of the kicks of all bunch particles divided by their
# number. This constant average kick only depends on the bunch separation, but
# not on X,Y. Namely, it can be calculated as the action of the bunch with
# (Capital) sigma = sqrt(sigma1^2 + sigma2^2) on one particle placed at the
# distance equal to the separation between the bunches. Ie. bunch one should
# be substituted by one particle at its center, while sigma of bunch 2 should
# be changed to this Capital sigma. Such constant kick only shifts the first
# bunch center, but do not modify its shape, so the resulting luminosity
# change can be computed using analytic formula.
#
# Between 2012 and 2018 the beam-beam correction in vdM scans was approximated
# by modifying the Gaussian bunch shapes: their centers were shifted according
# to the average kick described above while their sigmas were modified
# according to MAD-X simulation ("dynamic-beta" effect). Setting kick.model to
# "average" below allows to check that the results coincide with the
# old simulation without dynamic-beta effect, ie. when only taking into
# account the shift of the bunch centers.
#
# kick.model = quadrupole models the dynamic-beta correction, ie. the
# modification of the Gaussian widths. Here, the beam-beam interaction is
# approximated by the quadrupoles placed at the center of the first bunch. The
# quadrupole fields are proportional to the x,y (w.r.t. bunch center), the
# proportionality coefficients are chosen to be equal to the x,y-derivatives
# of the precise kick again at the first bunch center. Of corse, the beam-beam
# kick is not linear, so this approximation is good only in the vicinity of
# the first bunch center, though it is applied here to the full bunch. The
# advantage of the quadrupole is that one can calculate the associated change
# of the Gaussian width analytically.
#
# It was found that MAD-X'2012 simulation of dynamic-beta effect is close to
# such idealized quadrupole model. The cross section calibration corrections
# coincide within 0.1% for the MAD-X'2012 simulated conditions (depending on
# the random seed in the new simulation I've got 0.03 and 0.06%, this is at
# the level of stat. errors). There are small visible deviations only at large
# beam separations. However, the luminosity drops there and this suppresses
# the contribution to the correction. The discrepancy at large beam
# separations might be due to the fact that MAD-X simulates also the
# non-linearities, namely, one turn transfer matrix of the accelerator might
# slightly depend on the distance from the orbit. This effect is absent in
# this simulation. As mentioned above, the effect on the luminosity is
# negligible (<0.1%) and this also estimates the importance of such
# non-linearities.
#
# kick.model = average.and.quadrupole simulates the sum of the constant
# average kick (equivalent to the bending magnet) and the quadrupole kick
# (dynamic-beta effect) and gives the results close to the overall corrections
# applied between 2012 and 2018. Note, the non-linearities were taken care of
# in MAD-X'2012 dynamic-beta effect but were also neglected in the past for
# the constant average kick.
#
# All these options have been implemented only to compare the present
# simulation with the previous results. To obtain the best precision one
# should always use
#
# kick.model = precise.
#
# In this case one does not linearize the kick force (like with
# average.and.quadrupole) but uses the exact formula. Depending on the vdM
# scan conditions this gives sizable difference with the old (linear)
# approximation used at LHC in 2012-2018. The non-linear effects mentioned
# above are neglected at the moment but they should be negligible according to
# the comparison with the old MAD-X simulation described above.
#
# To debug separately the influence of the dipole orbit shift, there are 3
# more options:
# kick.model = precise.minus.average
# kick.model = precise.minus.one.third.of.average
# kick.model = precise.minus.at.center
#
# For the first, "precise.minus.average", the kick is equal to
# precise kick - average kick. Here, "average.kick" is the same as with
# kick.model = average. This "precise.minus.average" model is implemented to
# demonstrate that the "precise" results coincide with the combined correction
# from kick.model = precise.minus.average and kick.model = average. Ie. the
# "precise" correction can be decoupled into two: from the orbit change and
# from the relative change of the bunch shape but with the fixed orbit
# (ie. using the kick = precise - average).
#
# The kick in the model "precise.minus.one.third.of.average" is equal to
# precise kick - average kick / 3. The factor 3 here is chosen arbitrarily to
# demonstrate that even for an arbitrary dipole magnitude the "precise"
# correction still decouples into the corresponding dipole orbit change and
# the correction due to the remaining precise kick - dipole kick. In this case
# "precise" = "precise.minus.one.third.of.average" + "one.third.of.average".
# The kick in the model "one.third.of.average" is constant and equal to
# average kick / 3.
#
# Similarly,
# "precise" = "precise.minus.at.center" + "at.center", where
# "at.center" means the kick exerted by bunch 2 in the center of bunch 1.
#
kick.model = precise