Exemplo n.º 1
0
    def runBba(self, bpms):
        """create local bump"""
        inp = {'bpms': [], 'quads': [], 'cors': [], 'quad_dkicks': [],
               'cor_dkicks': []}
        for bpm in bpms:
            inp['bpms'].extend([(bpm, 'x'), (bpm, 'y')])
            quad = ap.getClosest(bpm, 'QUAD')
            inp['quads'].extend([(quad, 'k1'), (quad, 'k1')])
            cor = ap.getNeighbors(bpm, 'HCOR', 1)[0]
            inp['cors'].append((cor, 'x'))
            cor = ap.getNeighbors(bpm, 'VCOR', 1)[0]
            inp['cors'].append((cor, 'y'))
            inp['quad_dkicks'].extend([1e-2, 1e-2])
            inp['cor_dkicks'].extend([np.linspace(-6e-5, 6e-5, 4),
                                     np.linspace(-6e-5, 6e-5, 4)])
                                     
        if self.bbadlg is None:
            #print self.obtdata.elem_names
            # assuming BPM has both x and y, the following s are same
            self.bbadlg = ApBbaDlg()
            self.bbadlg.resize(500, 200)
            self.bbadlg.setWindowTitle("Beam based alignment")
            #self.obtxplot.plotDesiredOrbit(self.orbitx_data.golden(), 
            #                            self.orbitx_data.x)
            #self.obtyplot.plotDesiredOrbit(self.orbity_data.golden(), 
            #                            self.orbity_data.x)

        self.bbadlg.show()
        self.bbadlg.raise_()
        self.bbadlg.activateWindow()

        from cothread.catools import caget, caput
        print __file__, "BBA align", caget('V:2-SR:C30-BI:G2{PH1:11}SA:X')

        self.bbadlg.runAlignment(**inp)
Exemplo n.º 2
0
    def runBba(self, bpms):
        """create local bump"""
        inp = {
            'bpms': [],
            'quads': [],
            'cors': [],
            'quad_dkicks': [],
            'cor_dkicks': []
        }
        for bpm in bpms:
            inp['bpms'].extend([(bpm, 'x'), (bpm, 'y')])
            quad = ap.getClosest(bpm, 'QUAD')
            inp['quads'].extend([(quad, 'k1'), (quad, 'k1')])
            cor = ap.getNeighbors(bpm, 'HCOR', 1)[0]
            inp['cors'].append((cor, 'x'))
            cor = ap.getNeighbors(bpm, 'VCOR', 1)[0]
            inp['cors'].append((cor, 'y'))
            inp['quad_dkicks'].extend([1e-2, 1e-2])
            inp['cor_dkicks'].extend(
                [np.linspace(-6e-5, 6e-5, 4),
                 np.linspace(-6e-5, 6e-5, 4)])

        if self.bbadlg is None:
            #print self.obtdata.elem_names
            # assuming BPM has both x and y, the following s are same
            self.bbadlg = ApBbaDlg()
            self.bbadlg.resize(500, 200)
            self.bbadlg.setWindowTitle("Beam based alignment")
            #self.obtxplot.plotDesiredOrbit(self.orbitx_data.golden(),
            #                            self.orbitx_data.x)
            #self.obtyplot.plotDesiredOrbit(self.orbity_data.golden(),
            #                            self.orbity_data.x)

        self.bbadlg.show()
        self.bbadlg.raise_()
        self.bbadlg.activateWindow()

        from cothread.catools import caget, caput
        print __file__, "BBA align", caget('V:2-SR:C30-BI:G2{PH1:11}SA:X')

        self.bbadlg.runAlignment(**inp)
Exemplo n.º 3
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"