In [1]:
%matplotlib inline
execfile('../../shim_preamble.py')
Welcome to ROOTaaS 6.06/02
In [2]:
cd ~/Workspace/gm2/studies/field-shimming/field-modeling
/Users/matthias/Workspace/gm2/studies/field-shimming/field-modeling

Optimizing the Field with Shim Adjustments v0.6

This is an improvement to the last iteration.

Changes from v0.5

  • lets edge shims change assymetrically
  • ability to load/upload shim adjustments to google spreadsheet
  • print/store plans in mils for top hats and turns for wedges
  • refactored 'tophat' in favor of 'top_hat' everywhere
  • redundant implementation code is now loaded from a single file for all notebooks

Shim Models

In [3]:
# Shim models for The optimization routine.
def current_model(x, pos, mp_id):
    """Current model creates a constant offset for the average field."""
    if mp_id == 0:
        amp = 1.0
    else:
        amp = 0.0
    
    return amp * pos * np.ones(x.shape)

    
def top_hat_model(x, pos, yoke_id, top_hat_id, mp_id):
    """Define model for top hat shims."""
    phi_0 = yoke_id * 30.0 - 7.5  + 15.0 * top_hat_id
    phi = (x - phi_0 + 180.0) % 360 - 180.0

    if mp_id == 0:
        amp = -372.0 # -186.0 for only uppers

    else:
        amp = 0.0

    return amp * pos * np.exp(-(phi / 20.74)**2.0)


def wedge_model(x, pos, pole_id, wedge_id, mp_id):
    """Define model for wedge shims."""
    phi_0 = 10.0 * pole_id - 5.0 + 10.0 / 12.0 * (wedge_id + 0.5)
    phi = (x - phi_0 + 180.0) % 360 - 180.0
    
    if mp_id == 0:
        amp = 4.0

    elif mp_id == 1:
        amp = -0.11

    elif mp_id == 2:
        amp = 0.0 # -0.28 only if not symmetric

    else:
        amp = 0.0

    return amp * pos * np.exp(-(phi / 5.139)**2.0)


def inner_upper_edge_model(x, pos, pole_id, edge_id, mp_id):
    """Define model for inner upper edge shims."""
    phi_0 = 10.0 * pole_id

    y = np.zeros(x.shape)

    for x0 in np.linspace(phi_0 - 5.0, phi_0 + 5.0, 20):
        phi = (x - x0 + 180.0) % 360 - 180.0
        y += np.exp(-(phi / 0.5)**2.0)

    y /= y.max()
    
    if mp_id == 1:
        amp = -38.0

    elif mp_id == 2:
        amp = -216.0
    
    elif mp_id == 3:
        amp = -31.2
    
    elif mp_id == 4:
        amp = -81.2

    elif mp_id == 5:
        amp = -16.0

    elif mp_id == 6:
        amp = -19.6
        
    else:
        amp = 0.0
        
    return amp * pos * y

def inner_lower_edge_model(x, pos, pole_id, edge_id, mp_id):
    """Define model for inner lower edge shims."""
    phi_0 = 10.0 * pole_id

    y = np.zeros(x.shape)

    for x0 in np.linspace(phi_0 - 5.0, phi_0 + 5.0, 20):
        phi = (x - x0 + 180.0) % 360 - 180.0
        y += np.exp(-(phi / 0.5)**2.0)

    y /= y.max()
    
    if mp_id == 1:
        amp = -38.0

    elif mp_id == 2:
        amp = +216.0
    
    elif mp_id == 3:
        amp = -31.2
    
    elif mp_id == 4:
        amp = +81.2

    elif mp_id == 5:
        amp = -16.0

    elif mp_id == 6:
        amp = +19.6
        
    else:
        amp = 0.0
        
    return amp * pos * y


def outer_edge_model(x, pos, pole_id, edge_id, mp_id):
    """Define model for outer edge shims."""
    phi_0 = 10.0 * pole_id
    
    y = np.zeros(x.shape)

    for x0 in np.linspace(phi_0 - 5.0, phi_0 + 5.0, 20):
        phi = (x - x0 + 180.0) % 360 - 180.0
        y += np.exp(-(phi / 0.5)**2.0)

    y /= y.max()
    
    if mp_id == 1:
        amp = 33.2

    elif mp_id == 2:
        amp = -195.2
    
    elif mp_id == 3:
        amp = -26.4 * 2
    
    elif mp_id == 4:
        amp = 74.0 * 0

    elif mp_id == 5:
        amp = -13.2 * 2

    elif mp_id == 6:
        amp = -17.2 * 0
        
    else:
        amp = 0.0
        
    return amp * pos * y

Load In

We want to load the field data to be optimized, and set up the shim models with initial conditions.

In [4]:
datafile = 'data/extracted/full_scan_034.root'

if datafile == 'data/extracted/full_scan_028.root':
    phi_nmr_offset = 0.0

elif datafile == 'data/extracted/full_scan_032.root':
    phi_nmr_offset = 0.1
    
elif datafile == 'data/extracted/full_scan_033.root':
    phi_nmr_offset = 0.36

elif datafile == 'data/extracted/full_scan_034.root':
    phi_nmr_offset = 0.36

else:
    phi_nmr_offset = 1.42

npoints = 2000
max_iter = 1000
wedge_turns_per_mm = 1.6

upload_shim_adjustments = False

enable_shim = {}
enable_shim['current'] = True
enable_shim['top_hat'] = True
enable_shim['wedge'] = True
enable_shim['edge'] = False

# Define the current top_hat positions
# top_hat_pos = [0.0, 0.0, # A1/A2
#               0.0, 0.0, # B1/B2
#               1.0, 1.0, # C1/C2
#               0.0, 0.5, # D1/D2
#               0.0, 0.0, # E1/E2
#               1.0, 1.0, # F1/F2
#               0.0, 0.0, # G1/G2
#               0.0, 1.5, # H1/H2
#               1.0, 1.0, # I1/I2
#               1.0, 0.5, # J1/J2
#               0.0, 0.0, # K1/K2
#               0.0, 1.0] # L1/L2

top_hat_pos = get_current_top_hat_settings()
wedge_pos = get_current_wedge_settings()

current_lb = 49
current_ub = 50

top_hat_lb = 0.0
top_hat_ub = 2.0

wedge_lb = -10.0
wedge_ub = 10.0

edge_lb = 0.0
edge_ub = 0.2

# Constants
num_yokes = 12
num_poles = 72
num_top_hats = 24
num_edges = num_poles * 2
num_wedges = 864 / 2 # Move top/bottom symmetrically

# Set the relative weights for removing multipole
multipole_wt = np.array([1.0, 2.5, 2.5, 10.0, 10.0, 10.0, 10.0])
num_mp = len(multipole_wt)

mp_name = {}
mp_name[0] = 'Dipole'
mp_name[1] = 'Normal Quadrupole'
mp_name[2] = 'Skew Quadrupole'
mp_name[3] = 'Normal Sextupole'
mp_name[4] = 'Skew Sextupole'
mp_name[5] = 'Normal Octupole'
mp_name[6] = 'Skew Octupole'
In [5]:
# Load the data.
f = rt.TFile(datafile)
t = f.Get('t')

fs_phi = np.empty(t.GetEntries())
fs_bfield = np.empty([num_mp, t.GetEntries()])

for i in xrange(t.GetEntries()):
    t.GetEntry(i)

    fs_phi[i] = (t.phi_2 - phi_nmr_offset) % 360.0

    for j in xrange(num_mp):
        fs_bfield[j, i] = t.multipole[j]
    
phi = np.linspace(0.0, 360.0, npoints)
bfield = np.empty([num_mp, npoints])
      
for i in xrange(num_mp):
    bfield[i] = griddata(np.hstack((fs_phi[-100:] - 360.0, fs_phi, fs_phi[:100] + 360.0)), 
                         np.hstack((fs_bfield[i, -100:], fs_bfield[i], fs_bfield[i, :100])), phi)

# Allocated the the shim matrix.
num_knobs = 1 + num_top_hats + num_wedges + 2 * num_edges
A = np.empty([num_knobs, num_mp, npoints])
lb = np.empty(A.shape[0])
ub = np.empty(A.shape[0])

# Build the shim matrix, constant term first (magnet current)
if enable_shim['current']:
    for i in xrange(num_mp):
        A[0, i] = current_model(phi, 1.0, i)

    lb[0] = current_lb
    ub[0] = current_ub

else:
    print "Loading zeros for current."
    for i in xrange(num_mp):
        A[0, i] = np.zeros(A[0, i].shape)

    lb[0] = -0.00001
    ub[0] = +0.00001
    
idx = 0

# Next input templates for the top_hat.
if enable_shim['top_hat']:

    for i in xrange(num_yokes):
    
        for j in xrange(num_top_hats / num_yokes):

            idx += 1
            lb[idx] = top_hat_lb - top_hat_pos[2 * i + j] # allows for [0mm, 2mm]
            ub[idx] = top_hat_ub - top_hat_pos[2 * i + j]

            for k in xrange(num_mp):
                A[idx, k] = multipole_wt[k] * top_hat_model(phi, 1.0, i, j, k)

else:
    print "Loading zeros for top_hat."
    for i in xrange(num_yokes):
    
        for j in xrange(num_top_hats / num_yokes):

            idx += 1
            lb[idx] = -0.00001
            ub[idx] = +0.00001

            for k in xrange(num_mp):
                A[idx, k] = np.zeros(A[idx, k].shape)

# Now add the wedge shims.
if enable_shim['wedge']:

    for i in xrange(num_poles / 2):
    
        for j in xrange(num_wedges / (num_poles / 2)):

            idx += 1
            lb[idx] = wedge_lb - wedge_pos[i * 12 + j]
            ub[idx] = wedge_ub - wedge_pos[i * 12 + j]

            for k in xrange(num_mp):
                A[idx, k] = multipole_wt[k] * wedge_model(phi, 1.0, i, j, k)

else:
    print "Loading zeros for wedges."
    for i in xrange(num_poles / 2):
    
        for j in xrange(num_wedges / (num_poles / 2)):

            idx += 1
            lb[idx] = -0.00001 
            ub[idx] = +0.00001

            for k in xrange(num_mp):
                A[idx, k] = np.zeros(A[idx, k].shape)

if enable_shim['edge']:
    for i in xrange(num_poles / 2):
        for j in xrange(num_edges / (num_poles / 2)):

            idx += 1
            lb[idx] = edge_lb
            ub[idx] = edge_ub

            for k in xrange(num_mp):
                A[idx, k] = multipole_wt[k] * inner_edge_model(phi, 1.0, i, j, k)


    for i in xrange(num_poles / 2):
        for j in xrange(num_edges / (num_poles / 2)):

            idx += 1        
            lb[idx] = edge_lb
            ub[idx] = edge_ub

            for k in xrange(num_mp):
                A[idx, k] = multipole_wt[k] * outer_edge_model(phi, 1.0, i, j, k)

else:
    print "Loading zeros for edges."
    for i in xrange(num_poles / 2):
        for j in xrange(num_edges / (num_poles / 2)):

            idx += 1
            lb[idx] = -0.00001
            ub[idx] = +0.00001

            for k in xrange(num_mp):
                A[idx, k] = np.zeros(A[idx, k].shape)


    for i in xrange(num_poles / 2):
        for j in xrange(num_edges / (num_poles / 2)):

            idx += 1
            lb[idx] = -0.00001
            ub[idx] = +0.00001

            for k in xrange(num_mp):
                A[idx, k] = np.zeros(A[idx, k].shape)

A = A.reshape([num_knobs, npoints * num_mp])

# Set up the field.
B0 = np.empty([num_mp, npoints])
field = np.empty([num_mp, npoints])

for k in xrange(num_mp):

    field[k] = multipole_wt[k] * bfield[k]

    if k == 0:
        B0[k, :] = bfield[k].mean() * np.ones(bfield[k].shape)

    else:
        B0[k, :] = np.zeros(bfield[k].shape)

B0 = B0.flatten()
field = field.flatten()
Loading zeros for edges.

Optimization

Actually perform the least square minimization.

In [6]:
res = lsq_linear(A.T, B0 - field, (lb, ub), method='trf', max_iter=max_iter, verbose=1)
x = res.x
The maximum number of iterations is exceeded.
Number of iterations: 1000, initial cost: 1.2726e+08, final cost 1.8102e+07, first-order optimality 1.34e+05.
In [7]:
# ff1 = Ridge(alpha=0.1, max_iter=5000, normalize=True)
# ff1.fit(A.T, B0 - field)

# x = ff1.coef_
In [8]:
# ff2 = Lasso(alpha=0.1, max_iter=5000)
# ff2.fit(A.T, B0 - field)

# x = ff1.coef_
In [9]:
print "dB = %.3f" % x[0]

y = np.dot(A.T, x) + field
y_bfield = y.reshape([num_mp, npoints])

y_shims = np.empty([3, num_mp, npoints])
indices = np.array(range(1, 1 + num_top_hats))
y_top_hats = np.dot(A[indices, :].T, x[indices])
y_top_hats = y_top_hats.reshape([num_mp, npoints])

indices = np.array(range(1 + num_top_hats, 1 + num_top_hats + num_wedges))
y_wedges = np.dot(A[indices, :].T, x[indices])
y_wedges = y_wedges.reshape([num_mp, npoints])

indices = np.array(range(1 + num_top_hats + num_wedges, 1 + num_top_hats + num_wedges + num_edges * 2))
y_edges = np.dot(A[indices, :].T, x[indices])
y_edges = y_edges.reshape([num_mp, npoints])

for i in xrange(num_mp):
    if i == 0:
        y_bfield[i] -= x[0]
        
    y_bfield[i] /= multipole_wt[i]
    y_top_hats[i] /= multipole_wt[i]
    y_wedges[i] /= multipole_wt[i]
    y_edges[i] /= multipole_wt[i]
dB = 49.491

Resulting Field

In [10]:
for i in xrange(num_mp):
    print "Current %s avg: %.3f, std: %.3f" % (mp_name[i], bfield[i].mean(), bfield[i].std())
    print "Optimal %s avg: %.3f, std: %.3f" % (mp_name[i], y_bfield[i].mean(), y_bfield[i].std())

    # Draw the multipole with target lines and original data.
    plt.scatter(phi, bfield[i], color=colors[0])
    plt.scatter(phi, y_bfield[i], color=colors[2])
    
    if i == 0:
        draw_targets(y_bfield[i].mean(), 25.0)

    else:
        draw_targets(0.0, 10.0)     
        plt.ylim([-2 * y_bfield[i].std(), 2 * y_bfield[i].std()])

    finish_plot(ylabel='%s [ppm]' % mp_name[i])
    
    # Draw the multipole with target lines alone.
    plt.scatter(phi, y_bfield[i], color=colors[2])
    
    if i == 0:
        draw_targets(y_bfield[i].mean(), 25.0)

    else:
        draw_targets(0.0, 10.0)     
        plt.ylim([-40, 40])

    finish_plot(ylabel='%s [ppm]' % mp_name[i])
Current Dipole avg: 806.420, std: 91.810
Optimal Dipole avg: 756.874, std: 23.986
Current Normal Quadrupole avg: 2.147, std: 10.947
Optimal Normal Quadrupole avg: 1.302, std: 9.850
Current Skew Quadrupole avg: 0.464, std: 14.579
Optimal Skew Quadrupole avg: 0.464, std: 14.579
Current Normal Sextupole avg: -4.753, std: 5.034
Optimal Normal Sextupole avg: -4.753, std: 5.034
Current Skew Sextupole avg: -5.964, std: 7.505
Optimal Skew Sextupole avg: -5.964, std: 7.505
Current Normal Octupole avg: 0.619, std: 3.391
Optimal Normal Octupole avg: 0.619, std: 3.391
Current Skew Octupole avg: -0.182, std: 2.014
Optimal Skew Octupole avg: -0.182, std: 2.014

Field From Shims

I'm plotting the field change affected by the optimization model. The top hats are in red, the wedges are in green and the eges are in blue.

In [11]:
for i in xrange(num_mp):
    plt.scatter(phi, y_top_hats[i], color=colors[0])
    plt.scatter(phi, y_wedges[i], color=colors[2])
    plt.scatter(phi, y_edges[i], color=colors[6])
    finish_plot(ylabel='%s [ppm]' % mp_name[i])

Shim Positions

In [12]:
xtemp = x[1:num_top_hats + 1]
y1 = np.empty(xtemp.shape[0] * 100)
for i in xrange(y1.shape[0]):
    y1[i] = xtemp[i / 100] + top_hat_pos[i / 100]

x1 = np.linspace(-15.0, 345.0, num_top_hats * 100) % 360.0
indices = x1.argsort()

plt.fill_between(x1[indices], y1[indices], color=colors[0])
finish_plot('top_hat shim position [mm]')

xtemp = x[1 + num_top_hats:1 + num_top_hats + num_wedges]
y2 = np.empty(xtemp.shape[0] * 100)
for i in xrange(y2.shape[0]):
    y2[i] = xtemp[i / 100] + wedge_pos[i / 100]

x2 = np.linspace(-5, 355, num_wedges * 100) % 360.0
indices = x2.argsort()
    
plt.fill_between(x2[indices], y2[indices], color=colors[2])
finish_plot('wedge shim position [mm]')

plt.hist(x[1:num_top_hats + 1] + np.array(top_hat_pos), bins=40)
plt.xlabel('top_hat shim position [mm]')
plt.show()

plt.hist(x[1 + num_top_hats:1 + num_top_hats + num_wedges] + np.array(wedge_pos[:432]), bins=80)
plt.xlabel('wedge shim position [mm]')
plt.show()

mpl.rcParams['figure.figsize'] = (18, 3)
xtemp = x[1:num_top_hats + 1]
y1 = np.empty(xtemp.shape[0] * 100)
for i in xrange(y1.shape[0]):
    y1[i] = xtemp[i / 100] + top_hat_pos[i / 100]

x1 = np.linspace(-15.0, 345.0, num_top_hats * 100) % 360.0
indices = x1.argsort()

plt.fill_between(x1[indices], y1[indices], color=colors[0])
finish_plot('top_hat shim position [mm]')

xtemp = x[1 + num_top_hats:1 + num_top_hats + num_wedges]
y2 = np.empty(xtemp.shape[0] * 100)
for i in xrange(y2.shape[0]):
    y2[i] = xtemp[i / 100] + wedge_pos[i / 100]

x2 = np.linspace(-5.0, 355.0, num_wedges * 100) % 360.0
indices = x2.argsort()
    
plt.fill_between(x2[indices], y2[indices], color=colors[2])
finish_plot('wedge shim position [mm]')

mpl.rcParams['figure.figsize'] = (18, 6)

Shim Adjustment Plan

Based on the field optimization calculation the following changes to the shim positions are recommended.

In [13]:
display(Markdown('### Top Hat Changes'))

output = ['| Yoke %c | Top Hat 1 | Top Hat 2 |']
output.append('|-------------|------|------|')
output.append('| Change [mil] | %.2f | %.2f |')

top_hat_delta = (x[1:1 + num_top_hats]).reshape([num_top_hats / 2, 2])
if upload_shim_adjustments:
    update_top_hat_settings(top_hat_delta)

for i, d in enumerate(top_hat_delta / 0.0254):
    display(Markdown('\n'.join(output) % tuple([ord('A') + i, d[0], d[1]])))

display(Markdown('### Top Hat Position'))
output = ['| Yoke %c | Top Hat 1 | Top Hat 2 |']
output.append('|-------------|------|------|')
output.append('| Height [mil] | %.2f | %.2f |')

top_hat_abs = (x[1:1 + num_top_hats] + np.array(top_hat_pos)).reshape([num_top_hats / 2, 2])

for i, d in enumerate(top_hat_abs / 0.0254):
    display(Markdown('\n'.join(output) % tuple([ord('A') + i, d[0], d[1]])))

    
display(Markdown('### Wedge Shim Adjustments'))

output = ['| Pole %i | W-01 | W-02 | W-03 | W-04 | W-05 | W-06 | W-07 | W-08 | W-09 | W-10 | W-11 | W-12 |']
output.append('|----------|------|------|------|------|------|------|------|------|------|------|------|------|')
output.append('| Pos [turns] | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f |')

wedge_delta = (x[1 + num_top_hats:1 + num_wedges + num_top_hats]).reshape([num_wedges / 12, 12])
if upload_shim_adjustments:
    update_wedge_settings(np.hstack((wedge_delta, wedge_delta)))

for i, d in enumerate(wedge_delta / wedge_turns_per_mm):
    display(Markdown('\n'.join(output) % tuple([i + 1, d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11]])))
    

display(Markdown('### Wedge Shim Positions'))

output = ['| Pole %i | W-01 | W-02 | W-03 | W-04 | W-05 | W-06 | W-07 | W-08 | W-09 | W-10 | W-11 | W-12 |']
output.append('|----------|------|------|------|------|------|------|------|------|------|------|------|------|')
output.append('| Pos [turns] | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f |')

wedge_abs = (x[1 + num_top_hats:1 + num_wedges + num_top_hats] + np.array(wedge_pos[:432])).reshape([num_wedges / 12, 12])

for i, d in enumerate(wedge_abs / wedge_turns_per_mm):
    display(Markdown('\n'.join(output) % tuple([i + 1, d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11]])))

Top Hat Changes

Yoke A Top Hat 1 Top Hat 2
Change [mil] 0.99 20.99
Yoke B Top Hat 1 Top Hat 2
Change [mil] 7.58 -28.60
Yoke C Top Hat 1 Top Hat 2
Change [mil] 9.64 -17.40
Yoke D Top Hat 1 Top Hat 2
Change [mil] 9.30 4.09
Yoke E Top Hat 1 Top Hat 2
Change [mil] 7.88 12.76
Yoke F Top Hat 1 Top Hat 2
Change [mil] 18.59 15.85
Yoke G Top Hat 1 Top Hat 2
Change [mil] 1.09 0.37
Yoke H Top Hat 1 Top Hat 2
Change [mil] -0.26 6.74
Yoke I Top Hat 1 Top Hat 2
Change [mil] 13.18 -1.09
Yoke J Top Hat 1 Top Hat 2
Change [mil] -2.87 -18.77
Yoke K Top Hat 1 Top Hat 2
Change [mil] 0.37 10.65
Yoke L Top Hat 1 Top Hat 2
Change [mil] 9.12 2.88

Top Hat Position

Yoke A Top Hat 1 Top Hat 2
Height [mil] 20.49 40.99
Yoke B Top Hat 1 Top Hat 2
Height [mil] 76.18 3.10
Yoke C Top Hat 1 Top Hat 2
Height [mil] 72.33 61.34
Yoke D Top Hat 1 Top Hat 2
Height [mil] 16.39 78.60
Yoke E Top Hat 1 Top Hat 2
Height [mil] 24.12 35.33
Yoke F Top Hat 1 Top Hat 2
Height [mil] 78.59 75.85
Yoke G Top Hat 1 Top Hat 2
Height [mil] 1.09 0.37
Yoke H Top Hat 1 Top Hat 2
Height [mil] 63.74 78.74
Yoke I Top Hat 1 Top Hat 2
Height [mil] 43.18 69.91
Yoke J Top Hat 1 Top Hat 2
Height [mil] 47.63 5.73
Yoke K Top Hat 1 Top Hat 2
Height [mil] 52.38 34.12
Yoke L Top Hat 1 Top Hat 2
Height [mil] 40.43 75.75

Wedge Shim Adjustments

Pole 1 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 1.56 2.47 0.87 4.92 -0.00 0.75 -4.81 -1.92 2.19 2.58 3.52 3.96
Pole 2 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.07 2.78 1.98 2.53 0.72 -3.57 -4.64 -4.32 -1.74 2.68 -0.24 -0.87
Pole 3 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.02 6.42 -2.23 -0.60 2.82 -0.57 -3.26 -0.14 3.17 0.48 -0.87 -3.57
Pole 4 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -1.57 -3.79 -6.08 -4.97 -2.72 -3.35 -0.03 -3.99 0.13 4.17 -0.85 1.40
Pole 5 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.61 -0.76 -0.20 -3.62 -1.63 -2.24 -3.54 0.68 -4.61 -2.78 0.26 -0.40
Pole 6 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -8.12 -4.48 -3.03 -3.69 -3.14 -3.26 -3.13 -4.09 -7.53 3.21 2.54 0.24
Pole 7 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -0.70 -3.62 -3.64 -2.09 -2.77 -2.82 -6.19 -7.54 -6.98 -6.74 -7.79 2.62
Pole 8 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -1.17 -3.05 -2.68 -1.44 8.49 2.81 2.07 2.76 3.16 0.27 -4.93 -8.11
Pole 9 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -5.22 -3.42 -1.40 -0.36 -0.16 -0.40 2.89 1.15 3.48 2.54 -3.40 -1.04
Pole 10 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 2.34 -2.16 -0.30 0.53 -1.55 -2.27 -0.48 2.92 -0.05 0.40 3.80 2.46
Pole 11 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 1.88 3.24 4.84 -2.43 -2.54 -3.40 0.76 3.60 0.60 -0.93 -5.15 3.89
Pole 12 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 2.14 0.42 0.02 -1.91 0.23 -2.33 1.29 4.37 4.48 3.08 3.45 3.59
Pole 13 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.72 1.21 5.03 -1.31 -2.06 0.25 3.25 7.49 1.86 -0.19 3.80 2.17
Pole 14 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.18 1.89 -0.15 1.28 4.01 5.13 5.22 3.35 3.12 -5.13 -2.44 0.74
Pole 15 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -2.53 4.59 1.23 4.33 4.76 2.48 2.73 3.20 -4.90 4.58 4.46 1.52
Pole 16 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 7.40 2.21 -0.52 -1.80 -3.82 -5.33 -2.62 -0.21 -1.74 5.04 2.57 2.30
Pole 17 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 1.38 0.81 3.11 4.11 2.38 5.19 7.44 -0.05 1.09 -4.63 -6.57 -6.00
Pole 18 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -1.22 5.68 4.26 7.22 5.32 1.54 6.78 1.48 1.97 3.65 2.75 3.32
Pole 19 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.31 5.65 4.27 3.19 0.73 1.22 -5.78 -5.05 -3.62 5.62 5.54 5.46
Pole 20 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.57 -0.84 2.54 -0.44 -8.24 -6.99 -6.28 0.42 3.39 8.01 6.04 3.99
Pole 21 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 2.02 -5.12 -7.75 -3.31 -1.99 -1.96 -1.67 -2.83 4.43 3.25 3.03 3.14
Pole 22 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.14 1.56 4.08 4.85 -0.43 -1.71 -4.10 5.55 1.74 1.16 4.59 4.28
Pole 23 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.93 6.97 7.75 4.87 -3.75 -3.71 -6.40 -1.40 2.59 1.67 8.43 4.83
Pole 24 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.85 -2.75 -6.09 -8.04 1.69 8.58 7.36 8.23 7.42 3.87 2.61 3.03
Pole 25 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.54 3.40 3.20 2.84 0.02 -2.78 -3.98 -3.11 -3.10 -1.49 2.07 2.98
Pole 26 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.61 3.28 3.28 3.55 0.32 -3.14 -2.16 2.20 3.24 -1.50 0.43 -3.82
Pole 27 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -5.99 -2.56 -1.35 -2.43 -2.09 -3.77 -7.03 -2.34 2.76 4.22 2.45 6.39
Pole 28 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -2.91 -5.65 -8.29 -1.71 -3.60 -3.86 0.30 -2.77 1.44 -6.57 -7.44 -4.22
Pole 29 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 0.68 -3.37 -2.16 1.79 4.39 3.29 -3.94 -6.28 -9.26 -7.75 -3.05 -2.43
Pole 30 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -0.99 -2.98 0.18 -0.63 5.23 -2.64 -0.68 -2.57 -9.12 -2.72 3.11 8.84
Pole 31 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 8.95 1.80 -1.68 -1.70 -6.86 -6.59 -3.13 -2.85 8.44 8.31 8.45 2.90
Pole 32 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 2.62 1.88 2.16 1.53 3.04 6.50 6.78 2.65 4.10 0.78 0.92 3.50
Pole 33 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -0.41 -2.28 -2.31 1.33 0.89 4.41 3.25 7.17 5.52 2.38 3.91 2.90
Pole 34 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.60 4.72 3.25 4.15 -2.25 -4.38 -2.94 -3.49 4.47 2.67 3.92 2.01
Pole 35 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.68 -1.09 0.52 -3.64 -2.50 5.86 -1.07 5.95 0.47 4.76 -1.20 0.23
Pole 36 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -2.95 -1.77 -3.12 -2.50 -1.00 0.78 1.44 3.47 4.20 2.50 6.36 3.53

Wedge Shim Positions

Pole 1 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.09 5.58 3.98 5.82 0.46 -1.34 -6.25 -4.45 -0.94 1.59 6.25 6.25
Pole 2 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.75 5.61 3.89 2.09 -0.96 -5.08 -6.25 -5.56 -3.14 3.21 1.57 0.71
Pole 3 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.60 5.99 0.57 0.60 3.93 -1.56 -6.19 -3.17 0.04 -2.64 -0.08 -1.42
Pole 4 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 1.56 -0.82 -2.95 -2.56 -4.34 -6.25 -3.16 -6.25 -2.61 2.86 1.66 4.14
Pole 5 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.89 1.52 2.81 -1.01 -1.86 -5.24 -6.23 -1.18 -5.15 -0.84 3.39 2.51
Pole 6 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -6.11 -5.69 -6.06 -6.23 -6.25 -6.25 -6.25 -6.25 -5.91 6.22 5.66 3.33
Pole 7 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 0.71 -6.20 -6.09 -5.05 -5.75 -4.86 -6.16 -4.41 -3.85 -3.61 -4.85 4.15
Pole 8 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -3.91 -6.16 -5.71 -4.51 5.38 5.57 4.72 5.74 6.00 3.26 -1.96 -5.16
Pole 9 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -6.14 -5.98 -4.40 -3.24 -2.99 0.78 5.97 4.28 6.17 4.35 -2.50 -2.85
Pole 10 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -0.79 -2.60 -0.21 1.36 0.94 0.84 -2.78 -0.16 -1.61 1.59 6.11 5.35
Pole 11 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 0.72 4.87 4.47 -2.37 -3.10 -3.25 -0.93 0.54 0.05 -0.56 -2.71 3.81
Pole 12 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.37 2.34 -0.94 -5.03 -2.89 -4.77 0.28 5.57 5.80 5.89 5.06 5.28
Pole 13 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 6.13 2.79 3.34 -1.56 -2.51 -2.58 1.95 4.95 1.49 2.94 5.31 2.03
Pole 14 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.64 1.93 -2.17 -0.51 3.72 4.51 6.25 6.20 4.86 -2.40 -3.06 -1.85
Pole 15 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -5.66 1.60 3.07 5.55 6.25 4.69 5.78 5.00 -4.04 1.52 1.49 -1.59
Pole 16 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.44 4.20 0.76 0.41 -1.70 -3.60 -3.91 -3.27 -4.87 2.85 3.03 2.31
Pole 17 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.13 3.39 4.64 5.04 3.79 3.59 6.13 -0.30 -1.85 -3.78 -5.97 -6.11
Pole 18 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -0.84 6.22 5.50 5.77 4.24 3.90 6.05 4.27 4.61 5.04 4.58 5.00
Pole 19 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 3.32 4.60 3.42 0.28 0.73 -1.32 -3.05 -2.32 -1.39 6.10 6.25 5.55
Pole 20 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 0.65 -1.41 0.31 -0.47 -5.11 -6.00 -4.54 -2.59 2.79 6.25 4.40 5.82
Pole 21 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.74 -1.99 -5.67 -4.74 -4.89 -4.72 -4.58 -5.72 4.82 5.89 5.70 6.25
Pole 22 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.87 4.60 6.08 4.06 -3.50 -4.84 -6.19 3.41 3.54 4.27 5.98 6.01
Pole 23 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.35 5.22 4.62 3.56 -3.42 -3.64 -4.23 -4.42 -0.41 0.14 5.65 5.11
Pole 24 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.59 -0.47 -4.48 -5.85 0.40 5.54 6.04 5.50 5.78 5.61 5.67 5.61
Pole 25 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 6.22 5.83 5.61 5.92 -1.48 -5.29 -6.09 -6.24 -6.11 -4.24 5.03 6.11
Pole 26 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 6.24 6.25 5.26 4.54 -2.40 -6.17 -5.20 0.43 5.67 1.63 3.56 -1.69
Pole 27 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -5.84 -4.61 -4.29 -5.56 -5.22 -5.68 -6.04 0.79 5.60 5.95 3.87 5.30
Pole 28 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -1.38 -6.24 -5.61 -4.42 -6.23 -6.25 -0.03 -1.44 3.83 -3.54 -4.75 -3.79
Pole 29 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -1.64 -5.80 -4.66 -0.59 2.26 5.28 -1.45 -3.40 -6.13 -5.98 -5.98 -5.53
Pole 30 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -3.72 -5.90 -2.47 -3.21 3.50 0.48 2.43 0.56 -5.99 -1.55 2.98 5.86
Pole 31 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.96 1.76 1.45 1.43 -5.23 -6.21 -6.24 -5.98 5.31 5.18 6.12 4.58
Pole 32 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 4.59 4.96 4.68 4.66 4.17 5.49 3.65 -0.13 3.59 -1.53 3.20 5.71
Pole 33 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 0.44 0.23 -2.07 0.57 0.28 1.36 3.51 4.86 5.16 5.30 5.69 6.00
Pole 34 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 5.83 6.25 5.13 5.15 -5.20 -5.19 -4.29 -3.43 2.36 2.79 5.18 3.77
Pole 35 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] 6.25 -0.36 0.33 -5.22 -2.44 4.96 -1.47 5.26 1.40 6.25 -0.27 -0.33
Pole 36 W-01 W-02 W-03 W-04 W-05 W-06 W-07 W-08 W-09 W-10 W-11 W-12
Pos [turns] -2.04 -4.42 -6.25 -3.44 -1.85 0.75 4.55 5.15 4.79 3.04 3.26 3.61
In [ ]: