Changeset 5341


Ignore:
Timestamp:
Oct 1, 2022 7:23:35 PM (12 months ago)
Author:
toby
Message:

Pawley work: force dmin & max to be in range of data (now shown); show negative intensities in red; Add option to do 'estimate' after 'Pawley Create'

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIctrlGUI.py

    r5340 r5341  
    3232                                   or list value. Optionally calls function when a
    3333                                   choice is selected
     34:func:`G2CheckBoxFrontLbl`         A version of :class:`G2CheckBox` that places the label
     35                                   for the check box in front. Otherwise works the same.
    3436:class:`G2SliderWidget`            A customized combination of a wx.Slider and a validated
    3537                                   wx.TextCtrl (see :class:`ValidatedTxtCtrl`).
     
    13931395        log.LogVarChange(self.loc,self.key)
    13941396        if self.OnChange: self.OnChange(event)
    1395                    
     1397
     1398def G2CheckBoxFrontLbl(parent,label,loc,key,OnChange=None):
     1399    '''A customized version of a CheckBox that automatically initializes
     1400    the control to a supplied list or dict entry and updates that
     1401    entry as the widget is used. Same as :class:`G2CheckBox` except the
     1402    label is placed before the CheckBox and returns a sizer rather than the
     1403    G2CheckBox.
     1404
     1405    If the CheckBox is needed, use Sizer.myCheckBox.
     1406    '''
     1407    Sizer = wx.BoxSizer(wx.HORIZONTAL)
     1408    Sizer.Add(wx.StaticText(parent,label=label),0,WACV)
     1409    checkBox = G2CheckBox(parent,'',loc,key,OnChange)
     1410    Sizer.Add(checkBox,0,WACV)
     1411    Sizer.myCheckBox = checkBox
     1412    return Sizer
     1413   
    13961414#### Commonly used dialogs ################################################################################
    13971415def CallScrolledMultiEditor(parent,dictlst,elemlst,prelbl=[],postlbl=[],
  • trunk/GSASIIphsGUI.py

    r5328 r5341  
    11851185#     atomInfo[cs] = list(generalData['Color'][atNum])
    11861186#     return atomInfo
    1187    
     1187
     1188def getPawleydRange(G2frame,data):
     1189    'find d-space range in used histograms'
     1190    fmtd = lambda d: '?' if d is None else '{:.5f}'.format(d)
     1191    dmaxAll = dminAll = None
     1192    Histograms,Phases = G2frame.GetUsedHistogramsAndPhasesfromTree()
     1193    nhist = 0
     1194    for item in data['Histograms']:
     1195        if 'PWDR' not in item: continue
     1196        if not data['Histograms'][item]['Use']: continue
     1197        nhist += 1
     1198        Inst = Histograms[item]['Instrument Parameters'][0]
     1199        dmax,dmin = [G2lat.Pos2dsp(Inst,t) for t in Histograms[item]['Limits'][1]]
     1200        if dmaxAll is None:
     1201            dmaxAll = dmax
     1202        else:
     1203            dmaxAll = max(dmaxAll,dmax)
     1204        if dminAll is None:
     1205            dminAll = dmin
     1206        else:
     1207            dminAll = min(dminAll,dmin)
     1208    # format data range
     1209    lbl ="   d-space range {} to {} {}-1 ({} histograms)".format(
     1210        fmtd(dminAll),fmtd(dmaxAll),Angstr,nhist)
     1211    if dmaxAll is None: dmaxAll = 100.
     1212    if dminAll is None: dminAll = 0.25
     1213    return dminAll,dmaxAll,nhist,lbl
     1214       
    11881215def getAtomSelections(AtmTbl,cn=0,action='action',includeView=False,ask=True):
    11891216    '''get selected atoms from table or ask user if none are selected
     
    23282355                       
    23292356        def PawleySizer():
    2330            
    2331             def OnPawleyRef(event):
    2332                 generalData['doPawley'] = pawlRef.GetValue()
     2357            # find d-space range in used histograms
     2358            dmin,dmax,nhist,lbl = getPawleydRange(G2frame,data)
    23332359           
    23342360            pawleySizer = wx.BoxSizer(wx.HORIZONTAL)
    23352361            pawleySizer.Add(wx.StaticText(General,label=' Pawley controls: '),0,WACV)
    2336             pawlRef = wx.CheckBox(General,-1,label=' Do Pawley refinement?')
    2337             pawlRef.SetValue(generalData['doPawley'])
    2338             pawlRef.Bind(wx.EVT_CHECKBOX,OnPawleyRef)
     2362            if nhist == 0:  # no data, no Pawley
     2363                pawleySizer.Add(wx.StaticText(General,label='   no data'),0,WACV)
     2364                generalData['doPawley'] = False
     2365                return pawleySizer
     2366            # force limits on dmin & dmax
     2367            generalData['Pawley dmax'] = min(generalData['Pawley dmax'],dmax)
     2368            generalData['Pawley dmin'] = max(generalData['Pawley dmin'],dmin)
     2369
     2370            pawlRef = G2G.G2CheckBoxFrontLbl(General,' Do Pawley refinement?',
     2371                                         generalData,'doPawley')
    23392372            pawleySizer.Add(pawlRef,0,WACV)
    2340             pawleySizer.Add(wx.StaticText(General,label=' Pawley dmin: '),0,WACV)
    2341             pawlMin = G2G.ValidatedTxtCtrl(General,generalData,'Pawley dmin',size=(65,25),
    2342                 xmin=0.25,xmax=20.,nDig=(10,5))
     2373            pawleySizer.Add(wx.StaticText(General,label=' dmin: '),0,WACV)
     2374            pawlMin = G2G.ValidatedTxtCtrl(General,generalData,'Pawley dmin',size=(75,-1),
     2375                xmin=dmin,xmax=20.,nDig=(10,5))
    23432376            pawleySizer.Add(pawlMin,0,WACV)
    2344             pawleySizer.Add(wx.StaticText(General,label=' Pawley dmax: '),0,WACV)
    2345             pawlMax = G2G.ValidatedTxtCtrl(General,generalData,'Pawley dmax',size=(65,25),
    2346                 xmin=2.0,xmax=100.,nDig=(10,5))
     2377            pawleySizer.Add(wx.StaticText(General,label=' dmax: '),0,WACV)
     2378            pawlMax = G2G.ValidatedTxtCtrl(General,generalData,'Pawley dmax',size=(75,-1),
     2379                xmin=2.0,xmax=dmax,nDig=(10,5))
    23472380            pawleySizer.Add(pawlMax,0,WACV)
    23482381            pawleySizer.Add(wx.StaticText(General,label=' Pawley neg. wt.: '),0,WACV)
    2349             pawlNegWt = G2G.ValidatedTxtCtrl(General,generalData,'Pawley neg wt',size=(65,25),
     2382            pawlNegWt = G2G.ValidatedTxtCtrl(General,generalData,'Pawley neg wt',size=(65,-1),
    23502383                xmin=0.,xmax=1.,nDig=(10,3,'g'))
    23512384            pawleySizer.Add(pawlNegWt,0,WACV)
    2352             return pawleySizer
     2385            pawleyOuter = wx.BoxSizer(wx.VERTICAL)
     2386            pawleyOuter.Add(pawleySizer)
     2387            pawleyOuter.Add(wx.StaticText(General,label=lbl),0,wx.LEFT,120)
     2388            return pawleyOuter
    23532389           
    23542390        def MapSizer():
     
    1015910195            slideSizer.Add(cameraPos,1,wx.EXPAND|wx.RIGHT)
    1016010196           
    10161             ZclipTxt = wx.StaticText(drawOptions,-1,' Z clipping, '+Angstr+': ')
     10197            ZclipTxt = wx.StaticText(drawOptions,wx.ID_ANY,' Z clipping, '+Angstr+': ')
    1016210198            slideSizer.Add(ZclipTxt,0,WACV)
    1016310199            Zval = G2G.ValidatedTxtCtrl(drawOptions,ZclipVal,0,nDig=(10,2),xmin=.01*drawingData['Zclip']*drawingData['cameraPos']/100.,
     
    1017010206            slideSizer.Add(Zclip,1,wx.EXPAND|wx.RIGHT)
    1017110207           
    10172             slideSizer.Add(wx.StaticText(drawOptions,-1,' Z step, '+Angstr+': '),0,WACV)
     10208            slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' Z step, '+Angstr+': '),0,WACV)
    1017310209            Zstep = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'Zstep',nDig=(10,2),xmin=0.01,xmax=4.0,size=valSize)
    1017410210            slideSizer.Add(Zstep,0,WACV)
    1017510211            MoveSizer = wx.BoxSizer(wx.HORIZONTAL)
    10176             MoveSizer.Add(wx.StaticText(drawOptions,-1,'   Press to step:'),0,WACV)
     10212            MoveSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,'   Press to step:'),0,WACV)
    1017710213            MoveZ = wx.SpinButton(drawOptions,style=wx.SP_HORIZONTAL,size=valSize)
    1017810214            MoveZ.SetValue(0)
     
    1018210218            slideSizer.Add(MoveSizer,1,wx.EXPAND|wx.RIGHT)
    1018310219           
    10184             slideSizer.Add(wx.StaticText(drawOptions,-1,' van der Waals scale: '),0,WACV)
     10220            slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' van der Waals scale: '),0,WACV)
    1018510221            vdwScaleTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'Zstep',nDig=(10,2),xmin=0.01,xmax=1.0,size=valSize,OnLeave=OnVdWScaleTxt)
    1018610222            slideSizer.Add(vdwScaleTxt,0,WACV)
     
    1018910225            slideSizer.Add(vdwScale,1,wx.EXPAND|wx.RIGHT)
    1019010226   
    10191             slideSizer.Add(wx.StaticText(drawOptions,-1,' Ellipsoid probability, %: '),0,WACV)
     10227            slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' Ellipsoid probability, %: '),0,WACV)
    1019210228            ellipseProbTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'ellipseProb',nDig=(10,2),xmin=1,xmax=99,size=valSize,OnLeave=OnEllipseProbTxt)
    1019310229            slideSizer.Add(ellipseProbTxt,0,WACV)
     
    1019710233            slideSizer.Add(ellipseProb,1,wx.EXPAND|wx.RIGHT)
    1019810234   
    10199             slideSizer.Add(wx.StaticText(drawOptions,-1,' Ball scale: '),0,WACV)
     10235            slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' Ball scale: '),0,WACV)
    1020010236            ballScaleTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'ballScale',nDig=(10,2),xmin=0.01,xmax=0.99,size=valSize,OnLeave=OnBallScaleTxt)
    1020110237            slideSizer.Add(ballScaleTxt,0,WACV)
     
    1020410240            slideSizer.Add(ballScale,1,wx.EXPAND|wx.RIGHT)
    1020510241           
    10206             slideSizer.Add(wx.StaticText(drawOptions,-1,' Bond radius, A: '),0,WACV)
     10242            slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' Bond radius, '+Angstr+': '),0,WACV)
    1020710243            bondRadiusTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'bondRadius',nDig=(10,2),xmin=0.01,xmax=0.99,size=valSize,OnLeave=OnBondRadiusTxt)
    1020810244            slideSizer.Add(bondRadiusTxt,0,WACV)
     
    1021210248           
    1021310249            if generalData['Type'] == 'magnetic':
    10214                 slideSizer.Add(wx.StaticText(drawOptions,-1,' Mag. mom. mult.: '),0,WACV)
     10250                slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' Mag. mom. mult.: '),0,WACV)
    1021510251                magMultTxt = G2G.ValidatedTxtCtrl(drawOptions,drawingData,'magMult',nDig=(10,2),xmin=0.1,xmax=5.,size=valSize,OnLeave=OnMagMultTxt)
    1021610252                slideSizer.Add(magMultTxt,0,WACV)
     
    1021910255                slideSizer.Add(magMult,1,wx.EXPAND|wx.RIGHT)
    1022010256                       
    10221             slideSizer.Add(wx.StaticText(drawOptions,-1,' Bond search factor: '),0,WACV)
     10257            slideSizer.Add(wx.StaticText(drawOptions,wx.ID_ANY,' Bond search factor: '),0,WACV)
    1022210258            slideSizer.Add(G2G.ValidatedTxtCtrl(drawOptions,drawingData,'radiusFactor',
    1022310259                nDig=(10,2),xmin=0.1,xmax=1.2,size=valSize,OnLeave=OnRadFactor),0,WACV)
     
    1355513591            G2frame.PawleyRefl.AutoSizeColumns(False)
    1355613592            mainSizer.Add(G2frame.PawleyRefl)
     13593            for r in range(G2frame.PawleyRefl.GetNumberRows()):
     13594                try:
     13595                    if float(G2frame.PawleyRefl.GetCellValue(r,6)) < 0:
     13596                        G2frame.PawleyRefl.SetCellBackgroundColour(r,6,wx.RED)
     13597                except:
     13598                    pass
    1355713599        else:
    1355813600            msg = ('\tPawley refinement has not yet been set up. Use the Operations->"Pawley setup"'+
     
    1356513607        '''Set Pawley parameters and optionally recompute
    1356613608        '''
    13567        
    1356813609        def DisablePawleyOpts(*args):
    13569             pawlVal.Enable(generalData['doPawley'])
    13570             pawlNegWt.Enable(generalData['doPawley'])
     13610            for c in controlsList:
     13611                c.Enable(generalData['doPawley'])
     13612
     13613        controlsList = []
     13614        dmin,dmax,nhist,lbl = getPawleydRange(G2frame,data)
    1357113615        generalData = data['General']
    1357213616        prevPawleySetting = generalData['doPawley']
    13573         generalData['doPawley'] = True  # make Pawley extraction the default if we get here
     13617        generalData['doPawley'] = True  # make Pawley extraction the default if window is opened
     13618        if nhist == 0:  # no data, no Pawley (probably can't happen here)
     13619            generalData['doPawley'] = False
     13620        else:
     13621            # force limits on dmin & dmax
     13622            generalData['Pawley dmax'] = min(generalData['Pawley dmax'],dmax)
     13623            generalData['Pawley dmin'] = max(generalData['Pawley dmin'],dmin)   
    1357413624        startDmin = generalData['Pawley dmin']
    1357513625        genDlg = wx.Dialog(G2frame,title='Set Pawley Parameters',
     
    1357913629            'Set Pawley Extraction Parameters for phase '+generalData.get('Name','?')))
    1358013630        mainSizer.Add([5,10])
     13631        pawlRef = G2G.G2CheckBoxFrontLbl(genDlg,' Do Pawley refinement?: ',generalData,'doPawley',DisablePawleyOpts)
     13632        mainSizer.Add(pawlRef)
     13633        mainSizer.Add(wx.StaticText(genDlg,label=lbl),0,wx.BOTTOM,10)
    1358113634        pawleySizer = wx.BoxSizer(wx.HORIZONTAL)
    13582         pawleySizer.Add(wx.StaticText(genDlg,label=' Do Pawley refinement?: '),0,WACV)
    13583         pawlRef = G2G.G2CheckBox(genDlg,'',generalData,'doPawley',DisablePawleyOpts)
    13584         pawleySizer.Add(pawlRef,0,WACV)
     13635        pawleySizer.Add(wx.StaticText(genDlg,label='   Pawley dmin: '),0,WACV)
     13636        #def d2Q(*a,**kw):
     13637        #    temp['Qmax'] = 2 * math.pi / generalData['Pawley dmin']
     13638        #    pawlQVal.SetValue(temp['Qmax'])
     13639        pawlVal = G2G.ValidatedTxtCtrl(genDlg,generalData,'Pawley dmin',
     13640            xmin=dmin,xmax=20.,nDig=(10,5),typeHint=float)
     13641#            xmin=dmin,xmax=20.,nDig=(10,5),typeHint=float,OnLeave=d2Q)
     13642        controlsList.append(pawlVal)
     13643        pawleySizer.Add(pawlVal,0,WACV)
     13644        #pawleySizer.Add(wx.StaticText(genDlg,label='   Qmax: '),0,WACV)
     13645        #temp = {'Qmax':2 * math.pi / generalData['Pawley dmin']}
     13646        #def Q2D(*args,**kw):
     13647        #    generalData['Pawley dmin'] = 2 * math.pi / temp['Qmax']
     13648        #    pawlVal.SetValue(generalData['Pawley dmin'])       
     13649        #pawlQVal = G2G.ValidatedTxtCtrl(genDlg,temp,'Qmax',
     13650        #    xmin=0.314,xmax=25.,nDig=(10,5),typeHint=float,OnLeave=Q2D)
     13651        #controlsList.append(pawlQVal)
     13652        #pawleySizer.Add(pawlQVal,0,WACV)
    1358513653        mainSizer.Add(pawleySizer)
     13654
    1358613655        pawleySizer = wx.BoxSizer(wx.HORIZONTAL)
    13587         pawleySizer.Add(wx.StaticText(genDlg,label=' Pawley dmin: '),0,WACV)
    13588         def d2Q(*a,**kw):
    13589             temp['Qmax'] = 2 * math.pi / generalData['Pawley dmin']
    13590             pawlQVal.SetValue(temp['Qmax'])
    13591         pawlVal = G2G.ValidatedTxtCtrl(genDlg,generalData,'Pawley dmin',
    13592             xmin=0.25,xmax=20.,nDig=(10,5),typeHint=float,OnLeave=d2Q)
     13656        pawleySizer.Add(wx.StaticText(genDlg,label='   Pawley dmax: '),0,WACV)
     13657        pawlVal = G2G.ValidatedTxtCtrl(genDlg,generalData,'Pawley dmax',
     13658            xmin=2.,xmax=dmax,nDig=(10,5),typeHint=float)
     13659        controlsList.append(pawlVal)
    1359313660        pawleySizer.Add(pawlVal,0,WACV)
    13594         pawleySizer.Add(wx.StaticText(genDlg,label='   Qmax: '),0,WACV)
    13595         temp = {'Qmax':2 * math.pi / generalData['Pawley dmin']}
    13596         def Q2D(*args,**kw):
    13597             generalData['Pawley dmin'] = 2 * math.pi / temp['Qmax']
    13598             pawlVal.SetValue(generalData['Pawley dmin'])       
    13599         pawlQVal = G2G.ValidatedTxtCtrl(genDlg,temp,'Qmax',
    13600             xmin=0.314,xmax=25.,nDig=(10,5),typeHint=float,OnLeave=Q2D)
    13601         pawleySizer.Add(pawlQVal,0,WACV)
    1360213661        mainSizer.Add(pawleySizer)
     13662       
    1360313663        pawleySizer = wx.BoxSizer(wx.HORIZONTAL)
    1360413664        pawleySizer.Add(wx.StaticText(genDlg,label=' Pawley neg. wt.: '),0,WACV)
     
    1360613666            xmin=0.,xmax=1.,nDig=(10,4),typeHint=float)
    1360713667        pawleySizer.Add(pawlNegWt,0,WACV)
     13668        controlsList.append(pawlNegWt)
    1360813669        mainSizer.Add(pawleySizer)
    1360913670
     
    1364013701            finally:
    1364113702                dlg.Destroy()
    13642             OnPawleyLoad(event)
     13703            wx.CallAfter(OnPawleyLoad,event)
    1364313704        else:
    1364413705            wx.CallAfter(FillPawleyReflectionsGrid)
     
    1369513756                wx.EndBusyCursor()
    1369613757        data['Pawley ref'] = PawleyPeaks
    13697         FillPawleyReflectionsGrid()
     13758
     13759        dlg = wx.MessageDialog(G2frame,'Do you want to initialize Pawley reflection intensities? ("Pawley estimate" command)','Initialize Pawley?',
     13760                wx.YES_NO | wx.ICON_QUESTION)
     13761        try:
     13762            result = dlg.ShowModal()
     13763            if result == wx.ID_NO:
     13764                wx.CallAfter(FillPawleyReflectionsGrid)
     13765                return
     13766        finally:
     13767                dlg.Destroy()
     13768        wx.CallAfter(OnPawleyEstimate,event)       
    1369813769       
    1369913770    def OnPawleyEstimate(event):
Note: See TracChangeset for help on using the changeset viewer.