def correct_orbit(f): orm = hla.orm.Orm([], []) if not os.path.exists(f): return True orm.load(f) hla.reset_trims() time.sleep(5) npoint, nbpm, ntrim = np.shape(orm._rawmatrix) bpm = [] for c in range(10): cc = "C%02d" % c b = hla.getGroupMembers(['*', 'BPMX', cc], op='intersection') print cc, b bpm.extend(b) print len(bpm), bpm ntrim_used = ntrim m = np.zeros((len(bpm), ntrim_used), 'd') sel = [0] * nbpm bpmpv = [] bpmfullpv = [b[2] for i, b in enumerate(orm.bpm)] for i, b in enumerate(orm.bpm): if not b[0] in bpm: continue sel[i] = 1 bpmpv.append(b[2]) v0 = np.array(hla.caget(bpmfullpv)) v = np.array(hla.caget(bpmpv)) plt.clf() plt.plot(v0, 'r-') plt.plot(v, 'ro') plt.savefig("orbit-00.png") m = np.compress(sel, orm.m[:, :ntrim_used], axis=0) print np.shape(m) #u,s,vh = np.linalg.svd(m) #print u, s, vh dk, resids, rank, s = np.linalg.lstsq(m, -1.0 * v) print dk trimpv = [t[3] for i, t in enumerate(orm.trim)] print[t[0] for i, t in enumerate(orm.trim)] hla.caput(trimpv[:ntrim_used], dk) for i in range(1, 10): time.sleep(2) plt.clf() v1 = np.array(hla.caget(bpmfullpv)) plt.plot(v1, '-o') plt.savefig("orbit-%02d.png" % i)
def correct_orbit(f): orm = hla.orm.Orm([], []) if not os.path.exists(f): return True orm.load(f) hla.reset_trims() time.sleep(5) npoint, nbpm, ntrim = np.shape(orm._rawmatrix) bpm = [] for c in range(10): cc = "C%02d" % c b = hla.getGroupMembers(['*', 'BPMX', cc], op='intersection') print cc,b bpm.extend(b) print len(bpm), bpm ntrim_used = ntrim m = np.zeros((len(bpm), ntrim_used), 'd') sel = [0] * nbpm bpmpv = [] bpmfullpv = [b[2] for i,b in enumerate(orm.bpm)] for i,b in enumerate(orm.bpm): if not b[0] in bpm: continue sel[i] = 1 bpmpv.append(b[2]) v0 = np.array(hla.caget(bpmfullpv)) v = np.array(hla.caget(bpmpv)) plt.clf() plt.plot(v0, 'r-') plt.plot(v, 'ro') plt.savefig("orbit-00.png") m = np.compress(sel, orm.m[:,:ntrim_used], axis=0) print np.shape(m) #u,s,vh = np.linalg.svd(m) #print u, s, vh dk, resids, rank, s = np.linalg.lstsq(m, -1.0*v) print dk trimpv = [t[3] for i,t in enumerate(orm.trim)] print [t[0] for i,t in enumerate(orm.trim)]
hla.catools.caput(trim1+trim2, [0.0]*(len(trim1) + len(trim2))) time.sleep(4) v0 = hla.getOrbit('P*', spos=True) ## part #bpm = hla.getElements('P*C1[12]*') #trimx = hla.getGroupMembers(['C1[0-9]', 'HCOR'], op='intersection') #trimy = hla.getGroupMembers(['C1[0-9]', 'VCOR'], op='intersection') #hla.correctOrbit([e.name for e in bpm], [e.name for e in trimx], plane='H') #time.sleep(4) #hla.correctOrbit([e.name for e in bpm], [e.name for e in trimy], plane='V') #time.sleep(4) bpm = hla.getElements('P*') trim = hla.getGroupMembers(['*', '[HV]COR'], op='intersection') print "BPM=", len(bpm), " Trim=", len(trim) hla.correctOrbit([e.name for e in bpm], [e.name for e in trim]) time.sleep(4) v1 = hla.getOrbit('P*', spos=True) plt.clf() ax = plt.subplot(211) fig = plt.plot(v0[:,-1], v0[:,0], 'r-x', label='X') fig = plt.plot(v0[:,-1], v0[:,1], 'g-x', label='Y') ax = plt.subplot(212) fig = plt.plot(v1[:,-1], v1[:,0], 'r-x', label='X') fig = plt.plot(v1[:,-1], v1[:,1], 'g-x', label='Y') plt.savefig("hla_tut_orbit_correct.png")