In [1]:
import numpy as np
import matplotlib
matplotlib.use('Qt5Agg')
%matplotlib notebook
import matplotlib.pyplot as plt
from lnls.rotcoil import *
In [3]:
# Define serial numbers, one for each magnet
serials = [
'001', '002',
# '003', # does not have measurements for ~32A!
'004', '005',
'006',
'007', '008', '009', '010',
'011', '012', '013', '014', '015', '016', '017', '018', '019',
'020',
'021', '022', '023', '024', '025', '026', '027',
]
# Load all data
data = MagnetsAnalysis(RotCoilMeas_BOQuadQD, serials)
data.init()
# Print info
data.print_info()
In [4]:
# gets integrated strength at maximum current for all magnets
data.main_intmpole_at_max_current('M1')
In [4]:
# plot data comparison with spec
data.main_intmpole_at_max_current_plot(plt)
plt.show()
In [5]:
# Horizontal center for all magnets x currents
plt.figure()
data.magnetic_center_direction_plot('M1', 'X', plt)
plt.show()
# each magnet is represented by two curves: one rampup and one rampdown
In [6]:
# Vertical center for all magnets y currents
plt.figure()
data.magnetic_center_direction_plot('M1', 'Y', plt)
plt.show()
# each magnet is represented by two curves: one rampup and one rampdown
In [7]:
# Horizontal and vertical positions of all magnets
plt.figure()
data.magnetic_center_plot('M1', plt)
# data.magnetic_center_plot('M3', plt)
plt.show()
In [8]:
# Transverse plane positions
plt.figure()
data.magnetic_center_transverse_plot('M1', plt)
plt.show()
In [9]:
# Plot rampup integrated strength of main multipole and compare it to nominal values and maximum spec
plt.figure()
data.rampup_excitation_curve_plot('M1', plt)
plt.show()
In [10]:
# Plot rampup dispersion amongst magnets
plt.figure()
data.rampup_excitation_curve_dispersion_plot('M1', plt)
plt.show()
In [5]:
# Print random integrated main strength for various currents
data.rampup_excitation_curve_rms_error_print('M1')
In [6]:
# Plot Integrated Quadrupole Error for maximum current
plt.figure()
data.rampup_excitation_curve_rms_error_plot(plt)
plt.show()
In [13]:
# Absolute
plt.figure()
data.hysteresis_absolute_plot('M1', plt)
plt.show()
In [14]:
# Relative
plt.figure()
data.hysteresis_relative_plot('M1', plt)
plt.show()
In [17]:
# save average excitation data to file
data.save_excdata_average('M1')
In [4]:
# save excitation data of all magnets to separate files
data.save_excdata_individuals('M1')
In [7]:
# Horizontal kick
plt.figure()
data.multipole_errors_kickx_plot('M1', plt)
plt.show()
In [8]:
# Vertical kick
# BD-021: big skew error!
plt.figure()
data.multipole_errors_kicky_plot('M2', plt)
plt.show()
In [5]:
med = 'M1'
print('Rampup')
c, gl = data.tmpl.get_rampup(med)
for i in range(len(c)):
print('{:02d}: I = {:8.4f} A => GL = {:+.4f} T'.format(i, c[i], gl[i]))
In [7]:
cidx = 1
print('Booster QD Quadrupoles Magnetic Center and Integrated Quadrupole')
print(80*'='+'\n')
print('As measured with rotcoil for I = {0:3.0f}A (nominal GL @ 3 GeV is ~2A)\n'.format(c[cidx]))
print('{0:7s} |{1:^29s} |{2:^29s} |{3:^29s} |'.format('Magnet', 'M1', 'M2', 'M3'))
print('{0:7s} |'.format(''), end='')
st = '{:>8s} {:>8s} {:>10s} |'.format('x0 [mm]', 'y0 [mm]', 'GL/I [T/mA]')
print(3*st)
for s in data:
print('BQD-{} |'.format(s), end='')
for med in ['M1', 'M2', 'M3']:
x = data[s].get_magnetic_center_x(med)[cidx]
y = data[s].get_magnetic_center_y(med)[cidx]
c, gl = data[s].get_rampup(med)
print('{:+8.1f} {:+8.1f} {:+10.4f} |'.format(x, y, 1000*gl[cidx]/c[cidx]), end='')
print()
In [8]:
cidx = 2
print('Booster QD Quadrupoles Magnetic Center and Integrated Quadrupole')
print(80*'='+'\n')
print('As measured with rotcoil for I = {0:3.0f}A (nominal GL @ 3 GeV is ~2A)\n'.format(c[cidx]))
print('{0:7s} |{1:^29s} |{2:^29s} |{3:^29s} |'.format('Magnet', 'M1', 'M2', 'M3'))
print('{0:7s} |'.format(''), end='')
st = '{:>8s} {:>8s} {:>10s} |'.format('x0 [mm]', 'y0 [mm]', 'GL/I [T/mA]')
print(3*st)
for s in data:
print('BQD-{} |'.format(s), end='')
for med in ['M1', 'M2', 'M3']:
x = data[s].get_magnetic_center_x(med)[cidx]
y = data[s].get_magnetic_center_y(med)[cidx]
c, gl = data[s].get_rampup(med)
print('{:+8.1f} {:+8.1f} {:+10.4f} |'.format(x, y, 1000*gl[cidx]/c[cidx]), end='')
print()
In [24]:
cidx = 2
med = 'M2'
current_avg = np.zeros(len(data))
current_std = np.zeros(len(data))
gl = np.zeros(len(data))
for i, s in enumerate(data):
current_avg[i] = data[s].get_currents_avg(med)[cidx]
current_std[i] = data[s].get_currents_std(med)[cidx]
gl[i] = data[s].get_intmpole_normal_avg(med, data[s].main_harmonic)[cidx]
plt.figure()
plt.plot(current_avg/current_avg.mean()-1, label='I_avg')
plt.plot(gl/gl.mean()-1, label='GL_avg')
plt.plot(current_std, label='I_std')
plt.legend(loc='best')
plt.grid(True)
plt.show()
In [25]:
cidx = 2
med = 'M3'
current_avg = np.zeros(len(data))
current_std = np.zeros(len(data))
gl = np.zeros(len(data))
for i, s in enumerate(data):
current_avg[i] = data[s].get_currents_avg(med)[cidx]
current_std[i] = data[s].get_currents_std(med)[cidx]
gl[i] = data[s].get_intmpole_normal_avg(med, data[s].main_harmonic)[cidx]
plt.figure()
plt.plot(current_avg/current_avg.mean()-1, label='I_avg')
plt.plot(gl/gl.mean()-1, label='GL_avg')
plt.plot(current_std, label='I_std')
plt.legend(loc='best')
plt.grid(True)
plt.show()
In [26]:
cidx = 2
med = 'M1'
current_avg = np.zeros(len(data))
current_std = np.zeros(len(data))
gl = np.zeros(len(data))
for i, s in enumerate(data):
current_avg[i] = data[s].get_currents_avg(med)[cidx]
current_std[i] = data[s].get_currents_std(med)[cidx]
gl[i] = data[s].get_intmpole_normal_avg(med, data[s].main_harmonic)[cidx]
plt.figure()
plt.plot(current_avg/current_avg.mean()-1, label='I_avg')
plt.plot(gl/gl.mean()-1, label='GL_avg')
plt.plot(current_std, label='I_std')
plt.legend(loc='best')
plt.grid(True)
plt.show()