Пример #1
0
 def align(self, **kwargs):
     """align"""
     # [12:43 PM] (sandbox/venv) $ caget "SR:C30-MG:G02A{Quad:H1}Fld-SP"
     # SR:C30-MG:G02A{Quad:H1}Fld-SP  -0.633004
     # <lyyang@svd>-{/home/lyyang/devel/nsls2-hla
     # [12:45 PM] (sandbox/venv) $ caget "SR:C30-MG:G02A{HCor:H2}Fld-SP"
     # SR:C30-MG:G02A{HCor:H2}Fld-SP  0
     from cothread.catools import caget, caput
     #print __file__, "BBA align", caget('V:2-SR:C30-BI:G2{PH1:11}SA:X')
     self._measure(**kwargs)
     self._analyze()
     if not self.cor_fitted:
         _logger.warn("no cor fitted. abort.")
         return
     # 
     # change cor
     if kwargs.get("noset", False):
         self._c.put(self._cf, self.cor_fitted, unitsys=None)
         waitRamping(self._c, wait = self.wait)
         self.bpm_fitted = self._b.get(self._bf, unitsys = None)
         # use new values ? or the original one
         self._c.put(self._cf, self._vc0, unitsys=None)
         waitRamping(self._c, wait = self.wait)
Пример #2
0
    def _measure(self, **kwargs):
        """
        - if dkick is set, kick will be renewed.
        - if dqk1 is set, qk1 will be renewed.
        - Ieps, compare readback and setpoint
        """
        #print __file__, "measuring bba"
        verbose = kwargs.get('verbose', 0)
        sample = kwargs.get('sample', 1)

        # record the initial values
        self._vb0 = self._b.get(self._bf, unitsys=None)
        self._vq0 = self._q.get(self._qf, handle="setpoint", unitsys=None)
        self._vc0 = self._c.get(self._cf, handle="setpoint", unitsys=None)
        if verbose > 0:
            print "getting q={0}  c={1}".format(self._vq0, self._vc0)

        # ignore kick list if dkick is provided.
        self.cor_kick = [self._vc0 + dk for dk in self.cor_dkicks]
        if not self.cor_kick:
            _logger.warn("no cor setpoints specified")
            return
        if verbose > 0:
            print "cor setpoints: {0}".format(self.cor_kick)
        obt00 = self._get_orbit()
        #print "obtshape:", np.shape(obt00)
        self.orbit = np.zeros((len(obt00), 1+2*len(self.cor_kick)), 'd')
        # one more for original orbit
        ##
        ## initial orbit-quad
        for i,dqk in enumerate([0.0, self.quad_dkick]):
            # change quad
            self._q.put(self._qf, self._vq0 + dqk, unitsys=None)
            time.sleep(self.wait)
            #self._q.put(self._qf, self._vq0 + dqk, unitsys=None)
            waitRamping(self._q, wait = self.wait)
            _logger.info("{0} Quad sp= {1} rb= {2}".format(i,
                    self._q.get(self._qf, handle="setpoint", unitsys=None),
                    self._q.get(self._qf, unitsys=None)))
            if verbose > 0:
                print "setting {0}.{1} to {2} (delta={3})".format(
                self._q.name, self._qf, self._vq0 + dqk, self.quad_dkick)
                
            for j,dck in enumerate(self.cor_kick):
                self._c.put(self._cf, dck, unitsys=None)
                time.sleep(self.wait)
                #self._c.put(self._cf, dck, unitsys=None)
                waitRamping(self._c, wait = self.wait)
                time.sleep(0.5)
                c1sp = self._c.get(self._cf, handle="setpoint", unitsys=None)
                c1rb = self._c.get(self._cf, unitsys=None)
                _logger.info("{0}.{1} sp= {2} rb= {3}".format(i, j, c1sp, c1rb))
                if verbose > 0:
                    print "setting {0}.{1} to {2} (rb= {3})".format(
                        self._c.name, self._cf, dck, c1rb)
                tobt = np.zeros(len(obt00), 'd')
                for jj in range(sample):
                    tobt[:] = tobt[:] + self._get_orbit()
                k = i * len(self.cor_kick) + j
                self.orbit[:,k] = tobt/sample
                #print np.min(tobt/sample), np.max(tobt/sample)
                self.bpm_cob.append(self._b.get(self._bf, unitsys=None))
        # reset qk
        if verbose > 0:
            print "reset quad and trim to %f %f" % (self._vq0, self._vc0)
        #caput(self.quad_pvsp, qk0)
        #caput(self.trim_pvsp, xp0)
        self._q.put(self._qf, self._vq0, unitsys=None)
        self._c.put(self._cf, self._vc0, unitsys=None)
        waitRamping([self._c, self._q], wait = self.wait)
        _logger.info("restoring {0} Quad sp= {1} rb= {2}".format(
                self._q.name, 
                self._q.get(self._qf, handle="setpoint", unitsys=None),
                self._q.get(self._qf, unitsys=None)))
        _logger.info("restoring {0} Cor sp= {1} rb= {2}".format(
                self._c.name, 
                self._c.get(self._cf, handle="setpoint", unitsys=None),
                self._c.get(self._cf, unitsys=None)))

        self.orbit[:,-1] = self._get_orbit()
        self.bpm_cob.append(self._b.get(self._bf, unitsys=None))
        _logger.info("measurement done: " \
                         "q={0}, dq={1}, b={2}, c={3}, dc={4}".format(
                self._q.name, self.quad_dkick,
                self._b.name, self._c.name, self.cor_dkicks))