Пример #1
0
#AXIS = 'x'
AXIS = 'y'

# Hardcoded constants
tuneX = 17.8509864542659
tuneY = 6.74232980750181
ref_freq = 10#9.979248046875
fs = 150 #Hz

if __name__ == '__main__':
    if len(sys.argv) > 1:
        ref_freq = float(sys.argv[1])

    plt.close('all')
    pml = PyML.PyML()
    pml.setao(pml.loadFromExtern('../external/bessyIIinit.py', 'ao'))
#    pml.loadBPMOffsets('/opt/OPI/MapperApplications/conf/Orbit/SR/RefOrbit.Dat')

    active_bpmsx = pml.getActiveIdx('BPMx')
    active_bpmsy = pml.getActiveIdx('BPMy')
    active_cmsx = pml.getActiveIdx('HCM')
    active_cmsy = pml.getActiveIdx('VCM')
    sx = pml.getfamilydata('BPMx', 'Pos')
    sy = pml.getfamilydata('BPMy', 'Pos')
    cx = pml.getfamilydata('HCM', 'Pos')
    cy = pml.getfamilydata('VCM', 'Pos')

    namesX = pml.getfamilydata('BPMx', 'CommonNames')
    namesY = pml.getfamilydata('BPMy', 'CommonNames')
Пример #2
0
def art_main(cidx, ref_freq, plotopt=True):
    print('I set cidx to {}'.format(cidx))
    plt.close('all')
    pml = PyML.PyML()
    pml.setao(pml.loadFromExtern('../../PyML/config/bessyIIinit.py', 'ao'))

    active_bpmsx = pml.getActiveIdx('BPMx')
    active_bpmsy = pml.getActiveIdx('BPMy')

    sx = pml.getfamilydata('BPMx', 'Pos')
    sy = pml.getfamilydata('BPMy', 'Pos')

    cx = pml.getfamilydata('HCM', 'Pos')[pml.getActiveIdx('HCM')]
    cy = pml.getfamilydata('VCM', 'Pos')[pml.getActiveIdx('VCM')]

    namesX = pml.getfamilydata('BPMx', 'CommonNames')
    namesY = pml.getfamilydata('BPMx', 'CommonNames')

    Smat_xx, Smat_yy = sktools.io.load_Smat(SMAT_FILE)
    Smat_xx = Smat_xx[active_bpmsx, :]
    Smat_yy = Smat_yy[active_bpmsy, :]

    phases_mat = scipy.io.loadmat(PHASE_FILE)
    phaseX = phases_mat['PhaseX'][:, 0]
    phaseY = phases_mat['PhaseZ'][:, 0]

    if AXIS == 'y':
        pos_cor = cy
        pos = sy[active_bpmsy]
        Smat = Smat_yy
        phase = phaseY
        tune = tuneY
        names = namesY[active_bpmsy]
    elif AXIS == 'x':
        pos_cor = cx
        pos = sx[active_bpmsx]
        Smat = Smat_xx
        phase = phaseX
        tune = tuneX
        names = namesX[active_bpmsx]

    S_inv = sktools.maths.inverse_with_svd(Smat, 32)

    t = np.arange(Fs * tmax) / Fs
    corr = np.zeros((Smat.shape[1], t.size))
    corr[cidx, :] = np.sin(2 * np.pi * ref_freq * t +
                           np.random.random() * 2 * np.pi)
    values = Smat.dot(corr)

    acos, asin = sktools.maths.extract_sin_cos(values, Fs, ref_freq)

    step_size = 0.1
    acos_opt, asin_opt, _ = sktools.maths.optimize_rotation(
        acos, asin, step_size)
    phase_kick, coeff = skcore.get_kick(np.array(acos_opt), phase, tune,
                                        plotopt, plotopt)
    kick_idx = np.argmin(abs(phase - phase_kick))
    r1 = S_inv.dot(acos_opt)

    if plotopt:
        plt.figure('CMs')
        plt.plot(pos_cor, r1)
        plt.ylabel('Amplitude of correction')
        plt.xlabel('Position [in m]')
        plt.title('Correctors')
        plt.grid('on')
        if seaborn:
            sns.despine()

        plt.figure('Orbits + kick')
        plt.plot(pos, acos_opt, '-g')
        plt.axvline(pos[kick_idx], -2, 2)
        plt.ylabel('Distance to ref. orbit [in m]')
        plt.xlabel('Position [in m]')
        plt.grid('on')
        if seaborn:
            sns.despine()

    if pos[kick_idx] == pos_cor[cidx]:
        text = names[kick_idx] + ' Good job!'
    else:
        val = abs(pos_cor[cidx] - pos[kick_idx])
        if val > 240 / 2:
            val = 240 - val
        text = 'idx {} = {} found, d={}'.format(kick_idx, names[kick_idx], val)
    print(text)
    shouldidx = np.argmin(abs(pos - pos_cor[cidx]))
    print('It should have been idx {} = {}'.format(shouldidx,
                                                   names[shouldidx]))
    if plotopt:
        for i in plt.get_fignums():
            plt.figure(num=i)
            if seaborn:
                sns.despine()
            plt.grid('on')


#            plt.savefig(str(i)+'.pdf')
        plt.show()
    return val