Example #1
0
    def test_orbit_bump(self):
        v0 = ap.getOrbit()
        bpm = ap.getElements("BPM")
        hcor = ap.getElements("HCOR")
        hcor1 = ap.getElements("cx*")
        vcor = ap.getElements("VCOR")
        vcor1 = ap.getElements("cy*")
        # for e in hcor:
        #    print e.name, e.pv(field='x')

        self.assertGreater(len(v0), 0)
        self.assertGreaterEqual(len(bpm), 180)
        self.assertEqual(len(hcor1), 180)
        self.assertGreaterEqual(len(hcor), 180)
        self.assertEqual(len(vcor1), 180)
        self.assertGreaterEqual(len(vcor), 180)

        # maximum deviation
        mx, my = max(abs(v0[:, 0])), max(abs(v0[:, 1]))
        ih = np.random.randint(0, len(hcor), 3)
        iv = np.random.randint(0, len(vcor), 4)

        for i in ih:
            hcor[i].x = hcor[i].x + np.random.rand() * 1e-6
        for i in iv:
            vcor[i].y = vcor[i].y + np.random.rand() * 1e-6

        ap.hlalib.waitStableOrbit(v0, minwait=5)

        v1 = ap.getOrbit()
        self.assertNotEqual(np.std(v1[:, 0]), np.std(v0[:, 0]))
        self.logger.info("resetting trims")
        ap.hlalib._reset_trims()
        time.sleep(10)
Example #2
0
    def test_orbit_bump(self):
        v0 = ap.getOrbit()
        bpm = ap.getElements('BPM')
        hcor = ap.getElements('HCOR')
        hcor1 = ap.getElements('cx*')
        vcor = ap.getElements('VCOR')
        vcor1 = ap.getElements('cy*')
        #for e in hcor:
        #    print e.name, e.pv(field='x')

        self.assertGreater(len(v0), 0)
        self.assertGreaterEqual(len(bpm), 180)
        self.assertEqual(len(hcor1), 180)
        self.assertGreaterEqual(len(hcor), 180)
        self.assertEqual(len(vcor1), 180)
        self.assertGreaterEqual(len(vcor), 180)

        # maximum deviation
        mx, my = max(abs(v0[:,0])), max(abs(v0[:,1]))
        ih = np.random.randint(0, len(hcor), 3)
        iv = np.random.randint(0, len(vcor), 4)

        for i in ih: hcor[i].x = hcor[i].x+np.random.rand()*1e-6
        for i in iv: vcor[i].y = vcor[i].y+np.random.rand()*1e-6

        ap.hlalib.waitStableOrbit(v0, minwait=5)

        v1 = ap.getOrbit()
        self.assertNotEqual(np.std(v1[:,0]), np.std(v0[:,0]))
        self.logger.info("resetting trims")
        ap.hlalib._reset_trims()
        time.sleep(10)
Example #3
0
    def test_linearity_l2(self):
        bpms = self.ormdata.getBpmNames()
        trims = self.ormdata.getTrimNames()
        corrname = trims[4]
        corr = ap.getExactElement(corrname)
        x0 = corr.x
        obt0 = ap.getOrbit(spos=True)
        dxlst = np.linspace(-1e-4, 1e-4, 5) + x0
        obt = []
        for i,dx in enumerate(dxlst):
            corr.x = dx
            time.sleep(3)
            obt.append(ap.getOrbit(spos=True))

        jbpm = 36
        bpm = ap.getExactElement(bpms[jbpm])
        mij = self.ormdata.get(bpm.name, 'x', corr.name, 'x')
        dxobt = [obt[i][jbpm,0] for i in range(len(dxlst))]
        plt.clf()
        plt.plot(dxlst, dxobt, 'r--o')
        plt.plot(dxlst, mij*dxlst + obt0[jbpm,0])
        plt.savefig(figname("test_ormdata_linearity.png"))
        corr.x = x0
        
        #print orm
        #for i,b in enumerate(orm.bpm):
        #    print i, b[0], b[2]
        #orm.checkLinearity(plot=True)
        pass
Example #4
0
    def test_measure_orm_sub1_l2(self):
        #trimlst = ['ch1g6c15b', 'cl2g6c14b', 'cm1g4c26a']
        trimlst = ['cl2g6c14b']
        #trimx = ['CXH1G6C15B']
        bpmlst = [e.name for e in ap.getElements('BPM')]
        trims = ap.getElements(trimlst)
        for t in trims: 
            t.x = 0
            t.y = 0

        fname = time.strftime("orm_sub1_%Y%m%d_%H%M.hdf5")
        orm1 = ap.measOrbitRm(bpmlst, trimlst, fname, verbose=2)

        ormdat = ap.apdata.OrmData(fname)
        
        corr = trims[0] 
        x0 = corr.x
        obt0 = ap.getOrbit(spos=True)
        dxlst = np.linspace(-1e-4, 1e-4, 5) + x0
        obt = []
        for i,dx in enumerate(dxlst):
            corr.x = dx
            time.sleep(3)
            obt.append(ap.getOrbit(spos=True))

        jbpm = 36
        bpm = ap.getExactElement(bpmlst[jbpm])
        mij = ormdat.get(bpm.name, 'x', corr.name, 'x')
        dxobt = [obt[i][jbpm,0] for i in range(len(dxlst))]
        plt.clf()
        plt.plot(dxlst, dxobt, 'r--o')
        plt.plot(dxlst, mij*dxlst + obt0[jbpm,0])
        plt.savefig(figname("test_measure_orm_sub1_linearity.png"))
        corr.x = x0
Example #5
0
    def test_orbit_read_l0(self):
        self.logger.info("reading orbit")    
        self.assertGreater(len(ap.getElements('BPM')), 0)
        bpm = ap.getElements('BPM')
        for i,e in enumerate(bpm):
            self.assertGreaterEqual(abs(e.x), 0)
            self.assertGreaterEqual(abs(e.y), 0)

        v = ap.getOrbit()
        self.assertGreater(len(v), 0)
        v = ap.getOrbit('*')
        self.assertGreater(len(v), 0)
        v = ap.getOrbit('p[lhm]*')
        self.assertGreater(len(v), 0)
Example #6
0
    def test_orbit_read(self):
        self.logger.info("reading orbit")
        self.assertGreater(len(ap.getElements("BPM")), 0)
        bpm = ap.getElements("BPM")
        for i, e in enumerate(bpm):
            self.assertGreaterEqual(abs(e.x), 0)
            self.assertGreaterEqual(abs(e.y), 0)

        v = ap.getOrbit()
        self.assertGreater(len(v), 0)
        v = ap.getOrbit("*")
        self.assertGreater(len(v), 0)
        v = ap.getOrbit("p[lhm]*")
        self.assertGreater(len(v), 0)
Example #7
0
    def test_golden(self):
        f = open("golden.txt", "w")
        cors = ap.getElements('COR')
        for c in cors:
            c.x = 0.0
            c.y = 0.0
        time.sleep(2)
        obt0a = ap.getOrbit(spos=True)
        for scale in [1.0, 0.9, 0.8, 0.7, 0.6]:
            ap.correctOrbit(scale=scale, wait=3)
        time.sleep(6)
        obt0 = ap.getOrbit(spos=True)
        d0 = np.zeros((len(cors), 2), 'd')
        for i,c in enumerate(cors):
            d0[i,0] = c.x
            d0[i,1] = c.y
            c.setGolden('x', d0[i,0], unitsys=None)
            c.setGolden('y', d0[i,1], unitsys=None)
            f.write("{0} x {1}\n".format(c.name, d0[i,0]))
            f.write("{0} y {1}\n".format(c.name, d0[i,1]))
        f.close()
        # now reset the orbit
        time.sleep(5)
        for c in cors:
            c.x = 0.0
            c.y = 0.0
        for i,c in enumerate(cors):
            c.reset('x', data='golden')
            c.reset('y', data='golden')
        time.sleep(6)
        d1 = np.zeros((len(cors), 2), 'd')
        for i,c in enumerate(cors):
            d1[i,0] = c.x
            d1[i,1] = c.y
        obt1 = ap.getOrbit(spos=True)

        plt.subplot(311)
        plt.plot(obt0a[:,-1], obt0a[:,0], 'g-')
        plt.plot(obt0[:,-1], obt0[:,0], 'r-')
        plt.plot(obt1[:,-1], obt1[:,0], 'b--')
        plt.subplot(312)
        plt.plot(d1[:,0] - d0[:,0], 'r-')
        plt.plot(d1[:,1] - d0[:,1], 'b--')
        plt.subplot(313)
        plt.plot(obt0[:,-1], obt1[:,0] - obt0[:,0], 'r-x')
        plt.plot(obt1[:,-1], obt1[:,1] - obt0[:,1], 'b-o')
        plt.savefig(figname("test_golden.png"))
Example #8
0
 def _random_kick(self, n, vx = 1e-4, vy = 1e-4):
     v0 = ap.getOrbit()
     hcors = self.lat.getElementList('COR')
     for i in range(n):
         k = np.random.randint(len(hcors))
         v0x, v0y = hcors[k].x, hcors[k].y
         self.kickers.append([hcors[k], v0x, v0y])
         hcors[k].x = vx
         hcors[k].y = vy
     ap.hlalib.waitStableOrbit(v0, minwait=3)
Example #9
0
    def test_corr_orbit_l2(self):
        self._random_kick(3)
        obt = ap.getOrbit()
        bpm = ap.getElements('BPM')[60:101]
        trim = ap.getGroupMembers(['*', '[HV]COR'], op='intersection')
        v0 = ap.getOrbit('p*', spos=True)
        ap.correctOrbit(bpm, trim, repeat=5, scale=0.9)
        time.sleep(4)
        v1 = ap.getOrbit('p*', spos=True)

        import matplotlib.pylab as plt
        plt.clf()
        ax = plt.subplot(211) 
        fig = plt.plot(v0[:,-1], v0[:,0], 'r-x', label='X(before)') 
        fig = plt.plot(v1[:,-1], v1[:,0], 'g-o', label='X(after)')
        plt.legend()
        ax = plt.subplot(212)
        fig = plt.plot(v0[:,-1], v0[:,1], 'r-x', label='Y(before)')
        fig = plt.plot(v1[:,-1], v1[:,1], 'g-o', label='Y(after)')
        plt.legend()
        plt.savefig(figname("test_nsls2_orbit_correct.png"))
Example #10
0
def measBackground(ID, output, iiter):
    """measure the background and return saved group name"""
    if not nsls2id.putBackground(ID):
        print "Failed at setting {0} to background mode".format(ID)
        return None
    # create background subgroup with index
    fid = h5py.File(output)
    prefix = "iter_"
    iterindex = max([int(g[len(prefix):]) for g in fid[ID.name].keys()
                     if g.startswith(prefix)] + [-1]) + 1
    bkgGroup = "iter_{0:04d}".format(iterindex)
    grp = fid[ID.name].create_group(bkgGroup)
    orb0 = ap.getOrbit(spos=True)
    grp["orbit"] = orb0
    tau, I = ap.getLifetimeCurrent()
    grp["lifetime"] = tau
    grp["current"] = I
    grp.attrs["iter"] = iiter
    fid.close()
    return bkgGroup
Example #11
0
    def test_local_bump(self):
        hcor = ap.getElements('HCOR')
        hcor_v0 = [e.x for e in hcor]
        vcor = ap.getElements('VCOR')
        vcor_v0 = [e.y for e in vcor]

        bpm = ap.getElements('BPM')
        bpm_v0 = [[e.x, e.y] for e in bpm]

        bpm_v1 = [[e.x, e.y] for e in bpm]

        for i in range(0, len(bpm)):
            bpm_v1[i] = [0, 0]
        x1, x2 = 1e-4, 2e-4
        bpm_v1[20][0] = x1
        bpm_v1[21][0] = x1
        bpm_v1[22][0] = x1
        bpm_v1[23][0] = x2
        bpm_v1[24][0] = x2
        bpm_v1[25][0] = x1
        bpm_v1[26][0] = x1

        bpm_v1[100][1] = x2
        bpm_v1[101][1] = x2
        bpm_v1[102][1] = x1
        bpm_v1[103][1] = x1
        bpm_v1[104][1] = x2
        bpm_v1[105][1] = x2

        ap.setLocalBump(bpm, hcor+vcor, bpm_v1, repeat=10, verbose=3)

        import matplotlib.pylab as plt
        plt.clf()
        v = ap.getOrbit(spos=True)
        plt.plot(v[:,-1], v[:,0], '-.')
        plt.plot(v[:,-1], v[:,1], '--')
        plt.savefig(figname("test_localbump.png"))
Example #12
0
hclist = ['cyh1g2c10a',
'cyh2g2c10a',
#'cxm1g4c10a',
#'cxm1g4c10b',
'cyl1g6c10b',
'cyl2g6c10b']

hcor = ap.getElements(hclist)
for h in hcor: print h
beta = ap.getBeta(hclist)
phi  = ap.getPhase(hclist)

for h in hcor: h.y = 0
time.sleep(6)
x0 = ap.getOrbit(spos=True)

#print type(beta), type(phi), type(x)
#dphi = (phi - phi[0,:])*(2*np.pi)

# the plane, x or y
ic = 1
theta = [5e-6, -5e-6, 0, 0]
b0, b1, b2, b3 = np.sqrt(beta[:,ic])
sp30 = np.sin((phi[3,ic] - phi[0,ic])*2*np.pi)
sp31 = np.sin((phi[3,ic] - phi[1,ic])*2*np.pi)
sp20 = np.sin((phi[2,ic] - phi[0,ic])*2*np.pi)
sp21 = np.sin((phi[2,ic] - phi[1,ic])*2*np.pi)
sp32 = np.sin((phi[3,ic] - phi[2,ic])*2*np.pi)

theta[2] = -(b0*theta[0]*sp30 + b1*theta[1]*sp31)/sp32/b2
Example #13
0
import aphla as ap
import numpy as np
import matplotlib.pylab as plt
import time

print ap.__path__
ap.initNSLS2V1()
bpms = ap.getElements('BPM')
#trims = ap.getGroupMembers(['*', '[HV]COR'], op='intersection')
trims = ap.getElements('HCOR') + ap.getElements('VCOR')
print "Bpms x Trims: (%d, %d)" % (len(bpms), len(trims))

v0 = ap.getOrbit(spos=True)

n1, n2 = 130, 150
ap.setLocalBump([e.name for e in bpms[n1:n2]], [e.name for e in trims],
                np.ones((n2 - n1, 2), 'd') * 1e-5,
                scale=0.7,
                repeat=6)
#Euclidian norm: ...
time.sleep(4)
v1 = ap.getOrbit(spos=True)
time.sleep(4)
v2 = ap.getOrbit(spos=True)

# plotting
plt.clf()
ax = plt.subplot(211)
ax.annotate("H orbit before/after correction", (0.03, 0.9),
            xycoords='axes fraction')
ax.plot(v0[:, -1], v0[:, 0], 'r-')
Example #14
0
def saveState(idobj, output, iiter, parnames=None, background=None, extdata={}):
    """
    parnames - list of extra fields of idobj to be saved.
    background - the group name for its last background.
    extdata - extra data dictionary.

    returns data group name
    """
    t1 = datetime.now()
    prefix = "background" if background is None else "iter"

    # create background subgroup with index
    fid = h5py.File(output)
    iterindex = max([int(g[len(prefix) + 1 :]) for g in fid[idobj.name].keys() if g.startswith(prefix)] + [-1]) + 1
    groupName = "{0}_{1:04d}".format(prefix, iterindex)
    grp = fid[idobj.name].create_group(groupName)
    orb0 = ap.getOrbit(spos=True)
    grp["orbit"] = orb0
    tau, I = ap.getLifetimeCurrent()
    grp["lifetime"] = tau
    grp["current"] = I
    if parnames is None:
        parnames = ["gap", "phase", "mode"]
    else:
        parnames = ["gap", "phase", "mode"] + list(parnames)
    parnames = np.unique(parnames).tolist()
    fields = idobj.fields()
    for par in parnames:
        if par in fields:
            grp[par] = idobj.get(par, unitsys=None)
            grp[par].attrs["unitsymb"] = idobj.getUnit(par, unitsys=None)
    for k, v in extdata.items():
        grp[k] = v
    grp.attrs["iter"] = iiter
    if background:
        grp.attrs["background"] = background
    else:
        # Save current ID trim setpoints
        elemflds = createCorrectorField(idobj)
        _, flds = zip(*elemflds)
        trim_sps = [idobj.get(ch, unitsys=None, handle="setpoint") for ch in flds]
        grp["trim_sp"] = trim_sps
        grp["trim_sp"].attrs["fields"] = flds

        # Save current BPM offsets
        try:
            bpm_offset_pvs = saveState.bpm_offset_pvs
            bpm_offset_pv_suffixes = saveState.bpm_offset_pv_suffixes
            bpm_offset_fields = saveState.bpm_offset_fields
            bpm_names = saveState.bpm_names
        except AttributeError:
            bpms = ap.getElements("p[uhlm]*")
            bpm_names = [b.name for b in bpms]
            bpm_pv_prefixes = [b.pv(field="xbba")[0].replace("BbaXOff-SP", "") for b in bpms]
            bpm_offset_fields = ["xbba", "ybba", "xref1", "yref1", "xref2", "yref2"]
            bpm_offset_pv_suffixes = [bpms[0].pv(field=f)[0].replace(bpm_pv_prefixes[0], "") for f in bpm_offset_fields]
            bpm_offset_pvs = []
            for suf in bpm_offset_pv_suffixes:
                bpm_offset_pvs += [prefix + suf for prefix in bpm_pv_prefixes]
            saveState.bpm_offset_pvs = bpm_offset_pvs
            saveState.bpm_offset_pv_suffixes = bpm_offset_pv_suffixes
            saveState.bpm_offset_fields = bpm_offset_fields
            saveState.bpm_names = bpm_names
        bpm_offsets = (
            np.array([d.real if d.ok else np.nan for d in ap.caget(bpm_offset_pvs, throw=False)])
            .reshape((len(bpm_offset_pv_suffixes), -1))
            .T
        )
        grp.create_dataset("bpm_offsets", data=bpm_offsets, compression="gzip")
        grp["bpm_offsets"].attrs["fields"] = bpm_offset_fields
        grp["bpm_offsets"].attrs["pv_suffixes"] = bpm_offset_pv_suffixes
        grp["bpm_offsets"].attrs["bpm_names"] = bpm_names

    grp.attrs["state_saved"] = t1.strftime("%Y-%m-%d %H:%M:%S.%f")
    fid.close()
    return groupName
Example #15
0
import aphla as ap
import numpy as np
import matplotlib.pylab as plt
import time

print ap.__path__ 
ap.initNSLS2V1()
bpms = ap.getElements('BPM')
#trims = ap.getGroupMembers(['*', '[HV]COR'], op='intersection')
trims = ap.getElements('HCOR') + ap.getElements('VCOR')
print "Bpms x Trims: (%d, %d)" % (len(bpms), len(trims) )

v0 = ap.getOrbit(spos=True)

n1, n2 = 130, 150
ap.setLocalBump([e.name for e in bpms[n1:n2]], [e.name for e in trims],
                np.ones((n2-n1, 2), 'd')*1e-5, scale=0.7, repeat=6) 
#Euclidian norm: ...
time.sleep(4)
v1 = ap.getOrbit(spos=True)
time.sleep(4)
v2 = ap.getOrbit(spos=True)

# plotting
plt.clf()
ax = plt.subplot(211)
ax.annotate("H orbit before/after correction", (0.03, 0.9),
            xycoords='axes fraction')
ax.plot(v0[:,-1], v0[:,0], 'r-')
ax.plot(v1[:,-1], v1[:,0], 'g--')
ax.plot(v2[n1:n2,-1], v2[n1:n2,0], 'g-o')
Example #16
0
    gamma = 3.0e3/.511
    eta = alphac - 1/gamma/gamma
    # orbit at cell 3-6 BPMs
    bpmobj = ap.getElements('p*c0[3-6]*')
    bpmnames = [b.name for b in bpmobj]

    s1 = [b.sb for b in bpmobj]
    eta0 = ap.getDispersion(bpmnames)
    print "dispersion:", eta0

    # f in MHz
    f0 = ap.getRfFrequency()
    f = np.linspace(f0 - 1e-5, f0 + 1e-5, 5)

    # avoid a bug in virtac
    obt0 = ap.getOrbit(bpmnames)
    x0, y0 = obt0[:,0], obt0[:,1]
    time.sleep(4)

    codx = np.zeros((len(f), len(bpmobj)), 'd')
    cody = np.zeros((len(f), len(bpmobj)), 'd')
    for i,f1 in enumerate(f): 
        ap.putRfFrequency(f1)
        time.sleep(3)
        obt1 = ap.getOrbit()

        # repeat the put/get in case simulator did not response latest results
        ap.putRfFrequency(f1)
        time.sleep(6)
        obt2 = ap.getOrbit(bpmnames)
        print i, obt1[0,:2], obt2[0,:2]
Example #17
0
 def test_orbit_l0(self):
     v = ap.getOrbit()
Example #18
0
def saveState(idobj, output, iiter,
              parnames=None, background=None, extdata={}):
    """
    parnames - list of extra fields of idobj to be saved.
    background - the group name for its last background.
    extdata - extra data dictionary.

    returns data group name
    """
    t1 = datetime.now()
    prefix = "background" if background is None else "iter"

    # create background subgroup with index
    fid = h5py.File(output, 'a')
    iterindex = max([int(g[len(prefix)+1:]) for g in list(fid[idobj.name])
                     if g.startswith(prefix)] + [-1]) + 1
    groupName = "{0}_{1:04d}".format(prefix, iterindex)
    grp = fid[idobj.name].create_group(groupName)
    orb0 = ap.getOrbit(spos=True)
    grp["orbit"] = orb0
    tau, I = ap.getLifetimeCurrent()
    grp["lifetime"] = tau
    grp["current"] = I
    if parnames is None:
        parnames = ['gap', 'phase', 'mode']
    else:
        parnames = ['gap', 'phase', 'mode'] + list(parnames)
    parnames = np.unique(parnames).tolist()
    fields = idobj.fields()
    for par in parnames:
        if par in fields:
            grp[par] = idobj.get(par, unitsys=None)
            grp[par].attrs['unitsymb'] = idobj.getUnit(par, unitsys=None)
    for k,v in extdata.items():
        grp[k] = v
    grp.attrs["iter"] = iiter
    if background:
        grp.attrs["background"] = background
    else:
        # Save current ID trim setpoints
        elemflds = createCorrectorField(idobj)
        _, flds = zip(*elemflds)
        trim_sps = [idobj.get(ch, unitsys=None, handle='setpoint') for ch in flds]
        grp['trim_sp'] = trim_sps
        grp['trim_sp'].attrs['fields'] = flds

        # Save current BPM offsets
        try:
            bpm_offset_pvs         = saveState.bpm_offset_pvs
            bpm_offset_pv_suffixes = saveState.bpm_offset_pv_suffixes
            bpm_offset_fields      = saveState.bpm_offset_fields
            bpm_names              = saveState.bpm_names
        except AttributeError:
            bpms = ap.getElements('p[uhlm]*')
            bpm_names = [b.name for b in bpms]
            bpm_pv_prefixes = [b.pv(field='xbba')[0].replace('BbaXOff-SP', '')
                               for b in bpms]
            bpm_offset_fields = ['xbba', 'ybba', 'xref1', 'yref1', 'xref2', 'yref2']
            bpm_offset_pv_suffixes = [
                bpms[0].pv(field=f)[0].replace(bpm_pv_prefixes[0], '')
                for f in bpm_offset_fields]
            bpm_offset_pvs = []
            for suf in bpm_offset_pv_suffixes:
                bpm_offset_pvs += [prefix+suf for prefix in bpm_pv_prefixes]
            saveState.bpm_offset_pvs         = bpm_offset_pvs
            saveState.bpm_offset_pv_suffixes = bpm_offset_pv_suffixes
            saveState.bpm_offset_fields      = bpm_offset_fields
            saveState.bpm_names              = bpm_names
        bpm_offsets = np.array(
            [d.real if d.ok else np.nan
             for d in ap.caget(bpm_offset_pvs, throw=False)]).reshape(
                 (len(bpm_offset_pv_suffixes), -1)).T
        grp.create_dataset('bpm_offsets', data=bpm_offsets, compression='gzip')
        grp['bpm_offsets'].attrs['fields']      = bpm_offset_fields
        grp['bpm_offsets'].attrs['pv_suffixes'] = bpm_offset_pv_suffixes
        grp['bpm_offsets'].attrs['bpm_names']   = bpm_names

    grp.attrs["state_saved"] = t1.strftime("%Y-%m-%d %H:%M:%S.%f")
    fid.close()
    return groupName
Example #19
0
 def test_orbit(self):
     v = ap.getOrbit()
Example #20
0
    gamma = 3.0e3 / .511
    eta = alphac - 1 / gamma / gamma
    # orbit at cell 3-6 BPMs
    bpmobj = ap.getElements('p*c0[3-6]*')
    bpmnames = [b.name for b in bpmobj]

    s1 = [b.sb for b in bpmobj]
    eta0 = ap.getDispersion(bpmnames)
    print "dispersion:", eta0

    # f in MHz
    f0 = ap.getRfFrequency()
    f = np.linspace(f0 - 1e-5, f0 + 1e-5, 5)

    # avoid a bug in virtac
    obt0 = ap.getOrbit(bpmnames)
    x0, y0 = obt0[:, 0], obt0[:, 1]
    time.sleep(4)

    codx = np.zeros((len(f), len(bpmobj)), 'd')
    cody = np.zeros((len(f), len(bpmobj)), 'd')
    for i, f1 in enumerate(f):
        ap.putRfFrequency(f1)
        time.sleep(3)
        obt1 = ap.getOrbit()

        # repeat the put/get in case simulator did not response latest results
        ap.putRfFrequency(f1)
        time.sleep(6)
        obt2 = ap.getOrbit(bpmnames)
        print i, obt1[0, :2], obt2[0, :2]
Example #21
0
    #'cxm1g4c10a',
    #'cxm1g4c10b',
    'cyl1g6c10b',
    'cyl2g6c10b'
]

hcor = ap.getElements(hclist)
for h in hcor:
    print h
beta = ap.getBeta(hclist)
phi = ap.getPhase(hclist)

for h in hcor:
    h.y = 0
time.sleep(6)
x0 = ap.getOrbit(spos=True)

#print type(beta), type(phi), type(x)
#dphi = (phi - phi[0,:])*(2*np.pi)

# the plane, x or y
ic = 1
theta = [5e-6, -5e-6, 0, 0]
b0, b1, b2, b3 = np.sqrt(beta[:, ic])
sp30 = np.sin((phi[3, ic] - phi[0, ic]) * 2 * np.pi)
sp31 = np.sin((phi[3, ic] - phi[1, ic]) * 2 * np.pi)
sp20 = np.sin((phi[2, ic] - phi[0, ic]) * 2 * np.pi)
sp21 = np.sin((phi[2, ic] - phi[1, ic]) * 2 * np.pi)
sp32 = np.sin((phi[3, ic] - phi[2, ic]) * 2 * np.pi)

theta[2] = -(b0 * theta[0] * sp30 + b1 * theta[1] * sp31) / sp32 / b2