Esempio n. 1
0
    def test_trim_bpm(self):
        trims = [e.name for e in ap.getElements('COR')]
        for trim in trims:
            self.assertTrue(self.ormdata.hasTrim(trim))

        bpmx = ap.getGroupMembers(['BPM', 'C0[2-4]'], op='intersection')
        self.assertEqual(len(bpmx), 18)
        for bpm in bpmx:
            self.assertTrue(self.ormdata.hasBpm(bpm.name))
Esempio n. 2
0
    def test_trim_bpm(self):
        self.assertTrue(ap.conf.has(self.h5filename))
        ormdata = ap.OrmData(ap.conf.filename(self.h5filename))

        trimx = ["fxl2g1c07a", "cxh1g6c15b"]
        for trim in trimx:
            self.assertTrue(ormdata.hasTrim(trim))

        bpmx = ap.getGroupMembers(["BPM", "C0[2-4]"], op="intersection")
        self.assertEqual(len(bpmx), 18)
        for bpm in bpmx:
            self.assertTrue(ormdata.hasBpm(bpm.name))
Esempio n. 3
0
    def test_trim_bpm(self):
        self.assertTrue(ap.conf.has(self.h5filename))
        ormdata = ap.OrmData(ap.conf.filename(self.h5filename))

        trimx = ['fxl2g1c07a', 'cxh1g6c15b']
        for trim in trimx:
            self.assertTrue(ormdata.hasTrim(trim))

        bpmx = ap.getGroupMembers(['BPM', 'C0[2-4]'], op='intersection')
        self.assertEqual(len(bpmx), 18)
        for bpm in bpmx:
            self.assertTrue(ormdata.hasBpm(bpm.name))
Esempio n. 4
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"))
Esempio n. 5
0
def switchFeedback(fftable = "off"):
    """
    switchFeedback("on") or "off"
    """
    if fftable not in ["on", "off"]:
        raise RuntimeError("invalid feed forward table state: ('on'|'off')")

    for dw in ap.getGroupMembers(["DW",], op="union"):
        if "gap" not in dw.fields():
            print "WARNING: no 'gap' field in {0}".format(dw.name)
            continue
        pv = dw.pv(field="gap", handle="setpoint")[0]
        m = re.match(r"([^\{\}]+)\{(.+)\}", pv)
        if not m:
            print "WARNING: inconsistent naming '{0}'".format(pv)
        pvffwd = "{0}{{{1}}}MPS:Lookup_.INPA".format(m.group(1), m.group(2))
        pvffwd_pref = "{0}{{{1}-Mtr:Gap}}.RBV ".format(m.group(1), m.group(2))

        pvffwd_val = {"on": pvffwd_pref + "CP NM",
                      "off": pvffwd_pref + "NPP N"}
        print "set {0}='{1}'".format(pvffwd, pvffwd_val[fftable])
        ap.caput(pvffwd, pvffwd_val[fftable])
Esempio n. 6
0
    def test_meas_beta_l2(self):
        qs = ap.getGroupMembers(['C30', 'QUAD'])
        beta, k1, nu = ap.measBeta(qs, full=True)
        self.assertEqual(np.shape(beta), (len(qs), 3))
        #self.assertEqual(np.shape(k1)[1], 3)
        self.assertEqual(np.shape(k1)[0], len(qs))
        self.assertEqual(np.shape(nu)[0], len(qs))
        self.assertEqual(np.shape(k1)[1], np.shape(nu)[1])
        #self.assertEqual(np.shape(k1)[0], len(qs))

        if PLOTTING:
            for i,q in enumerate(qs):
                plt.clf()
                plt.subplot(211)
                plt.plot(k1[i,:], nu[i,:,0], 'r-v')
                plt.subplot(212)
                plt.plot(k1[i,:], nu[i,:,1], 'r-v')
                plt.savefig(figname("meas_beta_nu_%s.png" % q.name))

            plt.clf()
            plt.plot(beta[:,-1], beta[:,0], 'r-v')
            plt.plot(beta[:,-1], beta[:,1], 'b-o')
            plt.savefig(figname("meas_beta_beta.png"))
Esempio n. 7
0
    def measBeta(self):
        p = ApMdiSubPlot(live=False)
        p.setAttribute(Qt.WA_DeleteOnClose)
        curves = [p.aplot.curve1, p.aplot.addCurve(),  # x and xref
                  p.aplot.addCurve(), p.aplot.addCurve() # y and yref
                  ]
        for curv in curves: curv.setStyle(Qwt.QwtPlotCurve.Lines)
        curves[0].setPen(QPen(Qt.red, 1.3, Qt.DashLine))
        curves[0].setZ(curves[1].z() + 2)
        curves[1].setPen(QPen(Qt.red, 1.5))
        curves[2].setPen(QPen(Qt.blue, 1.3, Qt.DashLine))
        curves[2].setZ(curves[3].z() + 2)
        curves[2].setSymbol(Qwt.QwtSymbol(Qwt.QwtSymbol.Triangle,
                                          QBrush(Qt.blue),
                                          QPen(Qt.black, 1),
                                          QSize(8, 8)))
        curves[3].setPen(QPen(Qt.blue, 1.5))
        
        #p.aplot.curve1.setStyle(Qwt.QwtPlotCurve.)

        #p.setWindowTitle("[%s.%s] %s %s" % (mach, lat, title, fld))
        self.mdiarea.addSubWindow(p)
        #print "Show"
        p.show()
        #plots.append(p)

        qs = ap.getGroupMembers(['C20', 'QUAD']) + \
            ap.getGroupMembers(['C21', 'QUAD'])
        xl = min([q.sb for q in qs])
        xr = max([q.se for q in qs])
        s, btx, bty = [], [], []
        try:
            betaref = ap.getBeta([q.name for q in qs], spos=True)
            curves[1].setData(betaref[:,-1], betaref[:,0], None)
            curves[3].setData(betaref[:,-1], betaref[:,1], None)

            fullmagprof = ap.machines.getLattice().getBeamlineProfile()
            magprof = [v for v in fullmagprof if max(v[0]) > xl \
                           and min(v[0]) < xr]
            p.aplot.setMagnetProfile(magprof)
            p.wid.autoScaleXY()
            p.aplot.replot()

            for q in qs[:3]:
                tbeta, tk1, tnu = ap.measBeta(q, full=True)
                #print tk1, tnu, tbeta
                QApplication.processEvents()
                s.append(tbeta[0,-1])
                btx.append(tbeta[0,0])
                bty.append(tbeta[0,1])
                curves[0].setData(s, btx, None)
                curves[2].setData(s, bty, None)
                p.wid.autoScaleXY()
                p.aplot.replot()
                _logger.info("beta measured for {0} " \
                             "(s={1}, btx={2}, bty={3})".format(
                        q.name, s[-1], btx[-1], bty[-1]))
        except:
            _logger.error("error at measBeta")
            raise

        _logger.info("finished beta measurement.")
Esempio n. 8
0
    def _updatelocalbump(self):
        # print "start local bump computing for %s" % self.selecteddevice
        if self.selecteddevice == "NULL":
            self._cleanlocalbump()
            self.bpms = None
            self.cors = None
            self.idobj = None
            try:
                ca.caput([self.pvmapping.__srcposition__, self.pvmapping.__srcposition__ + ".DRVH"],
                         [0.0, 0.0])
            except ca.ca_nothing:
                print traceback.print_exc()
            try:
                ca.caput(self.pvmapping.__status__, "No device selected",
                         datatype=DBR_CHAR_STR)
            except ca.ca_nothing:
                print "Could not set status pv."
                return
        else:
            try:
                self.idobj = ap.getElements(self.selecteddevice.lower())[0]
                allbpms = ap.getGroupMembers(["BPM", "UBPM"], op="union")
                leftbpms = [b for b in allbpms if b.se < self.idobj.sb]
                rightbpms = [b for b in allbpms if b.sb > self.idobj.se]
                bpms = leftbpms[-self.bpmcounts / 2:] + rightbpms[:self.bpmcounts / 2]
                #bpms = ap.getNeighbors(self.selecteddevice.lower(), "BPM", self.bpmcounts / 2)
                cors = ap.getNeighbors(self.selecteddevice.lower(), "COR", self.corscount / 2)

                try:
                    #assert len(bpms) == self.bpmcounts + 1
                    assert len(bpms) == self.bpmcounts
                    assert len(cors) == self.corscount + 1
                except AssertionError:
                    print "wrong devices"
                    return

                orbx = []
                orby = []
                bpm_s = []
                # delete the element in the middle, which is the insertion device itself
                #bpms.pop(self.bpmcounts / 2)
                self.bpms = bpms[:]

                for bpm in self.bpms:
                    bpm_s.append(bpm.se)
                    orbx.append(bpm.x)
                    orby.append(bpm.y)

                hcor = []
                vcor = []
                cor_s = []
                # delete the element in the middle, which is the insertion device itself
                cors.pop(self.corscount / 2)
                self.cors = cors[:]
                for cor in self.cors:
                    hcor.append(cor.get("x", unitsys=None, handle="setpoint"))
                    vcor.append(cor.get("y", unitsys=None, handle="setpoint"))
                    cor_s.append(cor.se)

                ca.caput([self.pvmapping.__srcposition__, self.pvmapping.__srcposition__+".DRVH",
                          self.pvmapping.__idposinfo__, self.pvmapping.__bpmposition__,
                          self.pvmapping.__bpmorbitx__, self.pvmapping.__bpmorbity__,
                          self.pvmapping.__correctorposition__,
                          self.pvmapping.__hcorrectorcurrent__, self.pvmapping.__vcorrectorcurrent__],
                         [(self.idobj.se - self.idobj.sb)/2.0, (self.idobj.se - self.idobj.sb),
                          [self.idobj.sb, (self.idobj.sb+self.idobj.se)/2.0, self.idobj.se],
                          bpm_s, orbx, orby, cor_s, hcor, vcor])

                # Stop previous existing thread.
                if self.continuelocalbumporbitthread:
                    self.continuelocalbumporbitthread = False
                    if self.localbumporbitthread is not None:
                        self.localbumporbitthread.Wait()

                self.continuelocalbumporbitthread = True
                self.localbumporbitthread = cothread.Spawn(self._monitororbit)
            except AttributeError:
                print traceback.format_exc()
                print "AttributeError"
                return
            except TypeError:
                print traceback.format_exc()
                print "Get a type error in monitor device selection"
Esempio n. 9
0
    def measBeta(self):
        p = ApMdiSubPlot(live=False)
        p.setAttribute(Qt.WA_DeleteOnClose)
        curves = [
            p.aplot.curve1,
            p.aplot.addCurve(),  # x and xref
            p.aplot.addCurve(),
            p.aplot.addCurve()  # y and yref
        ]
        for curv in curves:
            curv.setStyle(Qwt.QwtPlotCurve.Lines)
        curves[0].setPen(QPen(Qt.red, 1.3, Qt.DashLine))
        curves[0].setZ(curves[1].z() + 2)
        curves[1].setPen(QPen(Qt.red, 1.5))
        curves[2].setPen(QPen(Qt.blue, 1.3, Qt.DashLine))
        curves[2].setZ(curves[3].z() + 2)
        curves[2].setSymbol(
            Qwt.QwtSymbol(Qwt.QwtSymbol.Triangle, QBrush(Qt.blue),
                          QPen(Qt.black, 1), QSize(8, 8)))
        curves[3].setPen(QPen(Qt.blue, 1.5))

        #p.aplot.curve1.setStyle(Qwt.QwtPlotCurve.)

        #p.setWindowTitle("[%s.%s] %s %s" % (mach, lat, title, fld))
        self.mdiarea.addSubWindow(p)
        #print "Show"
        p.show()
        #plots.append(p)

        qs = ap.getGroupMembers(['C20', 'QUAD']) + \
            ap.getGroupMembers(['C21', 'QUAD'])
        xl = min([q.sb for q in qs])
        xr = max([q.se for q in qs])
        s, btx, bty = [], [], []
        try:
            betaref = ap.getBeta([q.name for q in qs], spos=True)
            curves[1].setData(betaref[:, -1], betaref[:, 0], None)
            curves[3].setData(betaref[:, -1], betaref[:, 1], None)

            fullmagprof = ap.machines.getLattice().getBeamlineProfile()
            magprof = [v for v in fullmagprof if max(v[0]) > xl \
                           and min(v[0]) < xr]
            p.aplot.setMagnetProfile(magprof)
            p.wid.autoScaleXY()
            p.aplot.replot()

            for q in qs[:3]:
                tbeta, tk1, tnu = ap.measBeta(q, full=True)
                #print tk1, tnu, tbeta
                QApplication.processEvents()
                s.append(tbeta[0, -1])
                btx.append(tbeta[0, 0])
                bty.append(tbeta[0, 1])
                curves[0].setData(s, btx, None)
                curves[2].setData(s, bty, None)
                p.wid.autoScaleXY()
                p.aplot.replot()
                _logger.info("beta measured for {0} " \
                             "(s={1}, btx={2}, bty={3})".format(
                        q.name, s[-1], btx[-1], bty[-1]))
        except:
            _logger.error("error at measBeta")
            raise

        _logger.info("finished beta measurement.")