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)
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)
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"