wip
This commit is contained in:
41
Readme.md
41
Readme.md
@@ -76,6 +76,47 @@ pyqtgraph.examples.run()
|
||||
```
|
||||
|
||||
|
||||
Deploy stuff (22.8.22) quick and dirty
|
||||
----------------------
|
||||
```
|
||||
DST=/sf/cristallina/applications/mx/zamofing_t/
|
||||
# /sf/cristallina/applications/mx
|
||||
|
||||
ssh saresc-cons-02 mkdir /tmp/zamofing_t/
|
||||
rsync -vai ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX saresc-cons-03:$DST
|
||||
rsync -vai ~/Documents/prj/SwissFEL/PBTools saresc-cons-03:$DST
|
||||
|
||||
cd /tmp/zamofing_t/ESB_MX/python/SwissMX/
|
||||
/opt/gfa/python-3.7/latest/bin/python swissmx.py
|
||||
|
||||
/opt/gfa/python-3.8/latest/bin/pip install qtawesome --user
|
||||
/opt/gfa/python-3.8/latest/bin/python swissmx.py
|
||||
|
||||
cd $DST
|
||||
/opt/gfa/python-3.8/latest/bin/python -m pdb swissmx.py
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
cd /tmp/; git clone https://github.com/malcolmreynolds/transformations.git
|
||||
cd /tmp/transformations.git
|
||||
-> modify __init__.py -> .transformation (add dot)
|
||||
setup.py install --user
|
||||
|
||||
|
||||
cd /tmp/; git clone https://github.com/spyder-ide/qtawesome.git
|
||||
cd /tmp/qtawesome
|
||||
|
||||
#To have epics channels we must be connected to the ESC network
|
||||
EPICS_CA_ADDR_LIST='129.129.244.255 sf-saresc-cagw.psi.ch:5062 sf-saresc-cagw.psi.ch:5066'
|
||||
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/oldRepos/app/src
|
||||
python swissmx.py
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -249,7 +249,8 @@ class epics_cam(object):
|
||||
imgSeq[:,0:hr,0:wr]+=np.random.randint(0,100,(t,hr,wr),dtype=np.uint16)
|
||||
elif mode==1:
|
||||
import glob,PIL.Image
|
||||
path='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/simCamImg/*.png'
|
||||
#path='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/SwissMX/simCamImg/*.png'
|
||||
path='simCamImg/*.png'
|
||||
_log.info('generate simulation images:{}...'.format(path))
|
||||
glb=glob.glob(path)
|
||||
img = PIL.Image.open(glb[0])
|
||||
@@ -382,6 +383,7 @@ if __name__ == "__main__":
|
||||
(0,1,0,0,0),
|
||||
(0,0,0,0,0),),pic.dtype)
|
||||
pic[0:6,0:5]=f*pic.max()
|
||||
_log.debug('avg {}'.format(pic.sum()))
|
||||
if args.ui==1:
|
||||
img.setImage(pic)
|
||||
else:
|
||||
|
||||
10
deltatau.py
10
deltatau.py
@@ -1,6 +1,12 @@
|
||||
import sys,os
|
||||
sys.path.insert(0, os.path.expanduser('~/Documents/prj/SwissFEL/PBTools/'))
|
||||
import sys,os,socket
|
||||
sys.path.insert(0, os.path.expanduser('..'))
|
||||
hostname=socket.gethostname()
|
||||
if hostname=='ganymede':
|
||||
sys.path.insert(0, os.path.expanduser('~/Documents/prj/SwissFEL/PBTools/'))
|
||||
else:
|
||||
#sys.path.insert(0, os.path.expanduser('/tmp/zamofing_t/PBTools/'))
|
||||
sys.path.insert(0, os.path.expanduser('/sf/cristallina/applications/mx/zamofing_t/PBTools/'))
|
||||
|
||||
|
||||
import logging
|
||||
_log=logging.getLogger(__name__)
|
||||
|
||||
@@ -149,8 +149,25 @@ class Grid(pg.ROI):
|
||||
self.addScaleHandle([0, 0], [1, 1])
|
||||
self.addScaleRotateHandle([1, 0], [0, 0])
|
||||
|
||||
def get_points(self):
|
||||
return np.array(((1,2),(3,4),(5,6)),dtype=np.float)
|
||||
def get_points(self,mode=0x2):
|
||||
'generates points of the roi for scanning with deltatau'
|
||||
#pos=np.array(self.pos())
|
||||
cnt=np.array(self._cnt,np.int32)
|
||||
sz=np.array(self.size())
|
||||
pitch=sz/cnt
|
||||
xx, yy=np.meshgrid(range(cnt[0]), range(cnt[1]))
|
||||
if mode&0x01: #modify x scaning forward backward each line
|
||||
for i in range(1,cnt[1],2):
|
||||
xx[i]=xx[i][::-1]
|
||||
if mode&0x02: # modify y scaning forward backward each line
|
||||
xx=xx.T
|
||||
yy=yy.T
|
||||
for i in range(1, cnt[0], 2):
|
||||
yy[i]=yy[i][::-1]
|
||||
|
||||
pts=np.array([xx.reshape(-1), yy.reshape(-1)], dtype=np.float).transpose()*pitch
|
||||
#pts+=pos
|
||||
return pts
|
||||
|
||||
def paint(self, p, *args):
|
||||
#pg.ROI.paint(self, p, *args)
|
||||
@@ -210,6 +227,7 @@ class Path(pg.ROI):
|
||||
for pt in path:
|
||||
qPth.append(QPointF(*pt))
|
||||
|
||||
self.addFreeHandle([.1, .1])
|
||||
self.addScaleHandle([1, 1], [0, 0])
|
||||
self.addScaleHandle([0, 0], [1, 1])
|
||||
self.addScaleRotateHandle([1, 0], [0, 0])
|
||||
@@ -259,16 +277,30 @@ class FixTargetFrame(pg.ROI):
|
||||
'count':(8, 6)
|
||||
}
|
||||
},
|
||||
'125x125':{
|
||||
'12.5x12.5':{
|
||||
'size':(12500+120*4, 12500+120*4),
|
||||
'fiducial':{
|
||||
'type':0,
|
||||
'pos':((240, 240), (240+12500, 240), (240, 240+12500), (240+12500, 240+12500))
|
||||
},
|
||||
'grid':{
|
||||
'pos':(1050, 1050),
|
||||
# 240+(12500-78*120)/2=1810
|
||||
'pos':(1810, 1810),
|
||||
'pitch':(120, 120),
|
||||
'count':(90, 90)
|
||||
'count':(78, 78) #(84,84)... but sone covered
|
||||
}
|
||||
},
|
||||
'23.0x23.0':{
|
||||
'size':(23000+120*4, 23000+120*4),
|
||||
'fiducial':{
|
||||
'type':0,
|
||||
'pos':((240, 240), (240+23000, 240), (240, 240+23000), (240+23000, 240+23000))
|
||||
},
|
||||
'grid':{
|
||||
# 240+(23000-162*120)/2+60?=2020+60?
|
||||
'pos':(2080, 2080),
|
||||
'pitch':(120, 120),
|
||||
'count':(162, 162) #(172,172)... but sone covered
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -489,7 +521,7 @@ if __name__=='__main__':
|
||||
|
||||
vi=FixTargetFrame((100,300),(100,100),tpl='test')
|
||||
vb.addItem(vi)
|
||||
vi=FixTargetFrame((400,-200),(400,400),tpl='125x125')
|
||||
vi=FixTargetFrame((400,-200),(400,400),tpl='12.5x12.5')
|
||||
vb.addItem(vi)
|
||||
|
||||
childTree(vb)
|
||||
|
||||
77
swissmx.py
77
swissmx.py
@@ -342,8 +342,12 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
#--- grid ---
|
||||
try:
|
||||
self._goGrid=grid=pg.GridItem(pen=(0,255,0),textPen=(0,255,0)) #green grid and labels
|
||||
except:
|
||||
self._goGrid=grid=pg.GridItem()
|
||||
except NameError:
|
||||
_log.debug('workaround for typo in pyqtgraph:0.11.0')
|
||||
from PyQt5.QtGui import QPen,QColor
|
||||
self._goGrid=grid=pg.GridItem() # green grid and labels
|
||||
grid.opts['pen']=QPen(QColor(0, 255, 0))
|
||||
grid.opts['textPen']=QPen(QColor(0, 255, 0))
|
||||
tr.reset()
|
||||
grid.setTransform(tr) # assign transform
|
||||
vb.addItem(grid)
|
||||
@@ -361,7 +365,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
|
||||
#--- testing scan grid ---
|
||||
self.track_objects() # first call is needed to initialize the structure self._goTracked
|
||||
go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
||||
#go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
||||
go=UsrGO.Grid((120, -100), (1000, 500), (10, 5), 2)
|
||||
go.setTransform(tr) # assign transform
|
||||
vb.addItem(go)
|
||||
self._goTracked['objLst'].append(go)
|
||||
@@ -2124,16 +2129,37 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
ystep = self._sb_grid_y_step.value()
|
||||
xoffset = self._sb_grid_x_offset.value()
|
||||
yoffset = self._sb_grid_y_offset.value()
|
||||
grid = CstROI.Grid( x_step=xstep, y_step=ystep, x_offset=xoffset, y_offset=yoffset, gonio_xy=(gx, gy), grid_index=grid_index, parent=self,)
|
||||
self._grids.append(grid)
|
||||
grid.calculate_gonio_xy()
|
||||
grid.sigRemoveRequested.connect(lambda g=grid: self.remove_grid(g))
|
||||
self.vb.addItem(grid)
|
||||
|
||||
app=QApplication.instance()
|
||||
geo=app._geometry
|
||||
oc=geo._opt_ctr
|
||||
if xstep==0:
|
||||
go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
||||
elif xstep==1:
|
||||
go=UsrGO.FixTargetFrame((120, -100), (200, 150), tpl='test')
|
||||
elif xstep==2:
|
||||
v=geo.pos2pix((12.5, 0))
|
||||
l=np.linalg.norm(v)
|
||||
go=UsrGO.FixTargetFrame(-oc, (l,l), tpl='12.5x12.5')
|
||||
elif xstep==3:
|
||||
v=geo.pos2pix((23, 0))
|
||||
l=np.linalg.norm(v)
|
||||
go=UsrGO.FixTargetFrame(-oc, (l,l), tpl='23.0x23.0')
|
||||
else:
|
||||
_log.error('set xstep 0..2 for tests')
|
||||
self.vb.addItem(go)
|
||||
self._goTracked['objLst'].append(go)
|
||||
|
||||
#grid = CstROI.Grid( x_step=xstep, y_step=ystep, x_offset=xoffset, y_offset=yoffset, gonio_xy=(gx, gy), grid_index=grid_index, parent=self,)
|
||||
#self.vb.addItem(grid)
|
||||
#grid.calculate_gonio_xy()
|
||||
#grid.sigRemoveRequested.connect(lambda g=grid: self.remove_grid(g))
|
||||
|
||||
def daq_grid_remove_all(self):
|
||||
for grid in self._grids:
|
||||
grid.sigRemoveRequested.emit(grid) # ugly hack
|
||||
self._grids = []
|
||||
vb=self.vb
|
||||
for go in self._goTracked['objLst']:
|
||||
vb.removeItem(go)
|
||||
self._goTracked['objLst']=[]
|
||||
|
||||
def grids_pause_stage_tracking(self):
|
||||
for grid in self._grids:
|
||||
@@ -2231,7 +2257,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
app._jungfrau=jf=detector.Jungfrau()
|
||||
|
||||
sp=dt._shapepath
|
||||
sp.gen_grid_points(w=15, h=15, pitch=3, rnd=0, ofs=(0, +2000));
|
||||
sp.gen_grid_points(w=15, h=15, pitch=3, rnd=0, ofs=(0, +2000))
|
||||
#sp.gen_grid_points(w=5, h=10, pitch=1, rnd=0, ofs=(0, 0));sp.sort_points(False, 10);sp.points
|
||||
sp.sort_points(False, 15);
|
||||
sp.meta['pt2pt_time']=10
|
||||
sp.setup_gather()
|
||||
@@ -2754,6 +2781,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
self.re_connect_collect_button()
|
||||
|
||||
def execute_collection(self):
|
||||
app=QApplication.instance()
|
||||
geo=app._geometry
|
||||
task = self.active_task()
|
||||
self._is_aborted = False
|
||||
method = self._tabs_daq_methods.currentWidget().accessibleName()
|
||||
@@ -2766,8 +2795,28 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
)
|
||||
self._inspect = self._grid_inspect_area
|
||||
self._inspect.setPlainText("")
|
||||
for fixTrg in self._goTracked['objLst']:
|
||||
points=fixTrg.get_points()
|
||||
|
||||
geo=app._geometry
|
||||
zoom=app._zoom.get_val()
|
||||
fast_x=self.tweakers["fast_x"];
|
||||
fast_y=self.tweakers["fast_y"]
|
||||
fx=fast_x.get_val()
|
||||
fy=fast_y.get_val()
|
||||
opt_ctr=geo._opt_ctr
|
||||
for go in self._goTracked['objLst']:
|
||||
points=go.get_points() #points in coordinate system of ROI
|
||||
# names consists of abrevations
|
||||
# part 0: po=position sz=size dt=delta
|
||||
# part 1: px=pixel eu=engineering units (e.g. mm)
|
||||
po_px=go.pos()
|
||||
sz_px=go.size()
|
||||
tr=go.transform() # TODO: this is not yet used
|
||||
UsrGO.obj_info(tr)
|
||||
dt_px=-opt_ctr-po_px
|
||||
dt_eu=geo.pix2pos(dt_px)+(fx,fy)
|
||||
for i in range(points.shape[0]):
|
||||
points[i,:]=dt_eu+geo.pix2pos(points[i,:])#*tr
|
||||
|
||||
method="grid"
|
||||
params=None #grid._grid_dimensions
|
||||
# params = ([grid._grid_dimensions[0]], [grid._grid_dimensions[1]]) # FIXME something wrong here<
|
||||
|
||||
Reference in New Issue
Block a user