This commit is contained in:
2022-11-10 09:55:30 +01:00
parent 3a6c9098fd
commit d751889284

View File

@@ -142,7 +142,28 @@ class RIXSgrating(QWidget):
'cc':58, #detector angle
'szG':(200,5), #size VLS grating
'szD':(150,5), #size detector
'difrBeamPaint':4, # mode to plot the difracted beam
}
self._lutDifrBeamPaint=(# (number of difr beam,draw mode,alpha,width)
( 4, 2, 190, 0),
( 4, 1, 200, 0),
(32, 1, 120, 0),
( 8, 1, 196, 0),
(32, 0, 120, 3),
(32, 2, 255, 0),
)
# n=4;mode=2;alpha=190
# n=4;mode=1;alpha=200
# n=32;mode=1;alpha=120
# n=8;mode=1;alpha=196
n=32;
mode=0;
alpha=120;
width=3
# n=32;mode=2;alpha=255
self.initUI()
def initUI(self):
@@ -232,7 +253,8 @@ class RIXSgrating(QWidget):
l=QtGui.QVBoxLayout(w)
sld={}
for key,rng,tk,pos in (('r1',(50,800),50,60),('r2',(50,800),50,80),('aa',(0,90),5,20),('bb',(0,90),5,20),('cc',(0,180),5,40),):
for key,rng,tk in (('r1',(50,800),50),('r2',(50,800),50),('aa',(0,90),5),('bb',(0,90),5),('cc',(0,180),5),
('difrBeamPaint',(0,len(self._lutDifrBeamPaint)-1),1),):
sl=QtGui.QSlider(QtCore.Qt.Horizontal,objectName=key)
sl.setFixedWidth(200);sl.setMinimum(rng[0]);sl.setMaximum(rng[1])
sl.setValue(self._param[key])
@@ -388,19 +410,18 @@ class RIXSgrating(QWidget):
qp.translate(ctr[0],ctr[1])
qp.setCompositionMode(QtGui.QPainter.CompositionMode_Lighten)
tf0=qp.transform()
qp.setPen(QtGui.QPen(QtCore.Qt.white, 1, QtCore.Qt.SolidLine))
qp.setBrush(QColor(255, 80, 0, 128))
qp.drawEllipse(-r1-20, -10, 20, 20) # target
qp.drawLine(-r1,0,0,0) #beam
qp.drawLine(-r1,0,0,0) #central beam1
qp.rotate(-aa)
tf1=qp.transform()
qp.drawRect(int(-szG[0]/2), 0, szG[0], szG[1]) # grating
qp.rotate(-bb)
tf2=qp.transform()
qp.drawLine(0,0,int(r2+szD[0]/2),0) #beam
qp.drawLine(0,0,int(r2+szD[0]/2),0) #central beam2
qp.translate(r2,0)
qp.rotate(-cc)
tf3=qp.transform()
@@ -416,12 +437,8 @@ class RIXSgrating(QWidget):
qp.drawLine(p0,p1)
# beam vlsg to detector
#n=4;mode=2;alpha=190
#n=4;mode=1;alpha=200
#n=32;mode=1;alpha=120
#n=8;mode=1;alpha=196
n=32;mode=0;alpha=120;width=3
#n=32;mode=2;alpha=255
#n=32;mode=0;alpha=120;width=3
n,mode,alpha,width=self._lutDifrBeamPaint[p['difrBeamPaint']]
scl=256/n
p0=QtCore.QPointF(*tf1.map(-szG[0]/2, 0))
p1=QtCore.QPointF(*tf1.map(szG[0]/2, 0))
@@ -441,7 +458,7 @@ class RIXSgrating(QWidget):
qp.setPen(QtGui.QPen(QtCore.Qt.black, 0, QtCore.Qt.SolidLine))
for i in range(n):
p2=QtCore.QPointF(*tf3.map(szD[0]/2-szD[0]*i/(n-1), 0))
col.setHsv(i*scl, 255, 255, alpha)
col.setHsv(int(i*scl), 255, 255, alpha)
qp.setBrush(col)
qp.drawPolygon(p0, p1, p2)
if mode==2:
@@ -450,10 +467,20 @@ class RIXSgrating(QWidget):
for i in range(n):
p2=QtCore.QPointF(*tf3.map(szD[0]/2-szD[0]*(i+1)/n, 0))
p3=QtCore.QPointF(*tf3.map(szD[0]/2-szD[0]*i/n, 0))
col.setHsv(i*scl, 255, 255, alpha)
col.setHsv(int(i*scl), 255, 255, alpha)
qp.setBrush(col)
qp.drawPolygon(p0, p1, p2, p3)
qp.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver)
#draw central beam (if needed)
if mode!=0:
qp.setTransform(tf0)
qp.setPen(QtGui.QPen(QtGui.QColor(0x757780), 2, QtCore.Qt.SolidLine))
qp.drawLine(-r1,0,0,0) #central beam1
qp.setTransform(tf2)
qp.drawLine(0,0,int(r2+szD[0]/2),0) #central beam2
#draw dimensions
try:
d=self._vlsg_geo
@@ -466,7 +493,7 @@ class RIXSgrating(QWidget):
vbb=90-d['bb']
vcc=90-d['cc']
qp.setCompositionMode(QtGui.QPainter.CompositionMode_SourceOver)
qp.setTransform(QtGui.QTransform())
pen=QtGui.QPen(QtCore.Qt.red, 1, QtCore.Qt.SolidLine)
penTxt=QtGui.QPen(QtCore.Qt.yellow, 1, QtCore.Qt.SolidLine)
qp.setPen(pen)