Changeset 3561


Ignore:
Timestamp:
Aug 15, 2018 10:38:53 AM (3 years ago)
Author:
vondreele
Message:

add Print operators option to SGMessageBox for showing operators on console
fix weighted diff plot for when background file is used for SASD & REFL data
Add obs-back & calc-back options to RFD plotting (Background)
fix bug in Sample parms when a substance was deleted (SASD)
fix bugs in LoadUntCells? & ImportUnitCells? - bad defaults
new routines in G2spc: TextOs? - makes formatted list of all symmetry operators & Text2MT: convert sym. op text to matrix form; works for either order ('x+1/2' or '1/2+x' styles)

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIctrlGUI.py

    r3553 r3561  
    31283128                tableSizer.Add((20,0))
    31293129            j += 1
     3130           
     3131        def OnPrintOps(event):
     3132            print(' Symmetry operations for %s:'%self.text[0].split(':')[1])
     3133            for opText in G2spc.TextOps(self.text,self.table,reverse=True):
     3134                print(opText.replace(' ',''))
     3135           
    31303136        mainSizer.Add(tableSizer,0,wx.ALIGN_LEFT)
    3131         btnsizer = wx.StdDialogButtonSizer()
     3137        btnsizer = wx.BoxSizer(wx.HORIZONTAL)
    31323138        OKbtn = wx.Button(self.panel, wx.ID_OK)
    31333139        OKbtn.Bind(wx.EVT_BUTTON, self.OnOk)
    3134         OKbtn.SetDefault()
    3135         btnsizer.AddButton(OKbtn)
    3136         btnsizer.Realize()
     3140        btnsizer.Add(OKbtn)
     3141        printBtn = wx.Button(self.panel,label='Print Ops')
     3142        printBtn.Bind(wx.EVT_BUTTON, OnPrintOps)
     3143        btnsizer.Add(printBtn)
    31373144        mainSizer.Add((0,10))
    31383145        mainSizer.Add(btnsizer,0,wx.ALIGN_CENTER)
     
    32363243                print(item)
    32373244           
    3238         btnsizer = wx.StdDialogButtonSizer()
     3245        btnsizer = wx.BoxSizer(wx.HORIZONTAL)
     3246        OKbtn = wx.Button(self.panel, wx.ID_OK)
     3247        btnsizer.Add(OKbtn)
    32393248        printBtn = wx.Button(self.panel,label='Print Ops')
    32403249        printBtn.Bind(wx.EVT_BUTTON, OnPrintOps)
    32413250        btnsizer.Add(printBtn)
    3242         OKbtn = wx.Button(self.panel, wx.ID_OK)
    3243         OKbtn.SetDefault()
    3244         btnsizer.AddButton(OKbtn)
    3245         btnsizer.Realize()
    32463251        OKbtn.SetFocus()
    32473252        mainSizer.Add((0,10))
    3248         mainSizer.Add(btnsizer,0)
     3253        mainSizer.Add(btnsizer,0,wx.ALIGN_CENTER)
    32493254       
    32503255        self.panel.SetSizer(mainSizer)
  • trunk/GSASIIplot.py

    r3543 r3561  
    27322732                    Plot1.set_yscale("linear")                                                 
    27332733                    wtFactor = Pattern[0]['wtFactor']
    2734                     DZ = (xye[1]-xye[3])*np.sqrt(wtFactor*xye[2])
     2734                    if plottype in ['SASD','REFD']:
     2735                        DZ = (Y-B-Z)*np.sqrt(wtFactor*xye[2])
     2736                    else:
     2737                        DZ = (xye[1]-xye[3])*np.sqrt(wtFactor*xye[2])
    27352738                    DifLine = Plot1.plot(X[Ibeg:Ifin],DZ[Ibeg:Ifin],colors[3],picker=1.,label='_diff')                    #(Io-Ic)/sig(Io)
    27362739                    Plot1.axhline(0.,color='k')
  • trunk/GSASIIpwd.py

    r3500 r3561  
    472472    piDQ = np.pi/(maxQ-minQ)
    473473    Qpoints = np.linspace(minQ,maxQ,len(pwddata[0]),endpoint=True)
    474     if RDFcontrols['UseObsCalc']:
     474    if RDFcontrols['UseObsCalc'] == 'obs-calc':
    475475        Qdata = si.griddata(powQ,pwddata[1]-pwddata[3],Qpoints,method=RDFcontrols['Smooth'],fill_value=0.)
    476     else:
     476    elif RDFcontrols['UseObsCalc'] == 'obs-back':
    477477        Qdata = si.griddata(powQ,pwddata[1]-pwddata[4],Qpoints,method=RDFcontrols['Smooth'],fill_value=pwddata[1][0])
     478    elif RDFcontrols['UseObsCalc'] == 'calc-back':
     479        Qdata = si.griddata(powQ,pwddata[3]-pwddata[4],Qpoints,method=RDFcontrols['Smooth'],fill_value=pwddata[1][0])
    478480    Qdata *= np.sin((Qpoints-minQ)*piDQ)/piDQ
    479481    Qdata *= 0.5*np.sqrt(Qpoints)       #Qbin normalization
     
    489491    DofR = dq*np.imag(fft.fft(Qsmooth,16*nR)[:nR])
    490492#    DofR = dq*np.imag(ft.fft(Qsmooth,16*nR)[:nR])
    491     auxPlot.append([R[:iFin],DofR[:iFin],'D(R)'])   
     493    auxPlot.append([R[:iFin],DofR[:iFin],'D(R) for '+RDFcontrols['UseObsCalc']])   
    492494    return auxPlot
    493495
  • trunk/GSASIIpwdGUI.py

    r3560 r3561  
    8787            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
    8888        self.panel = None
    89         self.result = {'UseObsCalc':True,'maxR':20.0,'Smooth':'linear'}
     89        self.result = {'UseObsCalc':'obs-calc','maxR':20.0,'Smooth':'linear'}
    9090       
    9191        self.Draw()
     
    9494       
    9595        def OnUseOC(event):
    96             self.result['UseObsCalc'] = not self.result['UseObsCalc']
     96            self.result['UseObsCalc'] = useOC.GetValue()
    9797           
    9898        def OnSmCombo(event):
     
    103103        mainSizer = wx.BoxSizer(wx.VERTICAL)
    104104        mainSizer.Add(wx.StaticText(self.panel,label='Background RDF controls:'),0,WACV)
    105         useOC = wx.CheckBox(self.panel,label=' Use obs - calc intensities?')
     105        plotType = wx.BoxSizer(wx.HORIZONTAL)
     106        plotType.Add(wx.StaticText(self.panel,label=' Select plot type:'),0,WACV)
     107        Choices = ['obs-back','calc-back','obs-calc']
     108        useOC = wx.ComboBox(self.panel,value=Choices[2],choices=Choices,
     109                style=wx.CB_READONLY|wx.CB_DROPDOWN)
    106110        useOC.SetValue(self.result['UseObsCalc'])
    107         useOC.Bind(wx.EVT_CHECKBOX,OnUseOC)
    108         mainSizer.Add(useOC,0,WACV)
     111        useOC.Bind(wx.EVT_COMBOBOX,OnUseOC)
     112        plotType.Add(useOC,0,WACV)
     113        mainSizer.Add(plotType,0,WACV)
    109114        dataSizer = wx.BoxSizer(wx.HORIZONTAL)
    110115        dataSizer.Add(wx.StaticText(self.panel,label=' Smoothing type: '),0,WACV)
     
    11211126            if dlg.ShowModal() == wx.ID_OK:
    11221127                RDFcontrols = dlg.GetSelection()
     1128                print(RDFcontrols)
    11231129            else:
    11241130                return
     
    11301136        pwddata = G2frame.GPXtree.GetItemPyData(PatternId)[1]
    11311137        auxPlot = G2pwd.MakeRDF(RDFcontrols,background,inst,pwddata)
    1132         superMinusOne = unichr(0xaf)+unichr(0xb9)
     1138        if '2' in platform.python_version_tuple()[0]:
     1139            superMinusOne = unichr(0xaf)+unichr(0xb9)
     1140        else:
     1141            superMinusOne = chr(0xaf)+chr(0xb9)
    11331142        for plot in auxPlot:
    11341143            XY = np.array(plot[:2])
     
    25722581                min=0.,max=1.,nDig=(10,3),typeHint=float,OnLeave=OnVolFrac)
    25732582            subSizer.Add(volfrac,0,WACV)
    2574             material = Substances['Substances'][item['Name']]
     2583            try:
     2584                material = Substances['Substances'][item['Name']]
     2585            except KeyError:
     2586                print('ERROR - missing substance: '+item['Name'])
     2587                material = Substances['Substances']['vacuum']
    25752588            mu += item['VolFrac']*material.get('XAbsorption',0.)
    25762589            rho[id] = material['Scatt density']
     
    30303043    def LoadUnitCell(event):
    30313044        controls,bravais,cells,dminx,ssopt = G2frame.GPXtree.GetItemPyData(UnitCellsId)
    3032         controls = controls[:5]+10*[0.,]
    30333045        pId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root, 'Phases')
    30343046        if not pId: return
     
    30543066    def ImportUnitCell(event):
    30553067        controls,bravais,cells,dminx,ssopt = G2frame.GPXtree.GetItemPyData(UnitCellsId)
    3056         controls = controls[:5]+10*[0.,]
    30573068        reqrdr = G2frame.dataWindow.ReImportMenuId.get(event.GetId())
    30583069        rdlist = G2frame.OnImportGeneric(reqrdr,
  • trunk/GSASIIspc.py

    r3558 r3561  
    501501                G2opcodes.append(mult*(100*icen+j+1))
    502502    return SGTextList,offsetList,symOpList,G2oprList,G2opcodes
     503
     504def TextOps(text,table,reverse=False):
     505    ''' Makes formatted operator list
     506        :param text,table: arrays of text made by SGPrint
     507        :param reverse: True for x+1/2 form; False for 1/2+x form
     508        :returns: OpText: full list of symmetry operators; one operation per line
     509        generally printed to console for use via cut/paste in other programs, but
     510        could be used for direct input
     511    '''
     512    OpText = []
     513    Inv = True
     514    if 'noncentro' in text[1]:
     515        Inv = False
     516    Cent = [[0,0,0],]
     517    if '0,0,0' in text[-1]:
     518        Cent = np.array(eval(text[-1].split('+')[0].replace(';','),(')))
     519    OpsM = []
     520    OpsT = []
     521    for item in table:
     522        M,T = Text2MT(item.split(')')[1].replace(' ',''),CIF=True)
     523        OpsM.append(M)
     524        OpsT.append(T)
     525    OpsM = np.array(OpsM)
     526    OpsT = np.array(OpsT)
     527    if Inv:
     528        OpsM = np.concatenate((OpsM,-OpsM))
     529        OpsT = np.concatenate((OpsT,-OpsT%1.))
     530    for cent in Cent:
     531        for iop,opM in enumerate(list(OpsM)):
     532            txt = MT2text([opM,(OpsT[iop]+cent)%1.],reverse)
     533            OpText.append(txt.replace(' ','').lower())
     534    return OpText
    503535   
    504536def MT2text(Opr,reverse=False):
     
    10311063    return ' '.join(magSym)
    10321064
     1065def Text2MT(mcifOpr,CIF=True):
     1066    "From space group cif text returns matrix/translation"
     1067    XYZ = {'x':[1,0,0],'+x':[1,0,0],'-x':[-1,0,0],'y':[0,1,0],'+y':[0,1,0],'-y':[0,-1,0],
     1068           'z':[0,0,1],'+z':[0,0,1],'-z':[0,0,-1],'x-y':[1,-1,0],'-x+y':[-1,1,0],'y-x':[-1,1,0],
     1069           '+x-y':[1,-1,0],'+y-x':[-1,1,0]}
     1070    ops = mcifOpr.split(",")
     1071    M = []
     1072    T = []
     1073    for op in ops[:3]:
     1074        ip = len(op)
     1075        if '/' in op:
     1076            try:    #mcif format
     1077                nP = op.count('+')
     1078                opMT = op.split('+')
     1079                T.append(eval(opMT[nP]))
     1080                if nP == 2:
     1081                    opMT[0] = '+'.join(opMT[0:2])
     1082            except NameError:   #normal cif format
     1083                ip = op.index('/')
     1084                T.append(eval(op[:ip+2]))
     1085                opMT = [op[ip+2:],'']
     1086        else:
     1087            opMT = [op,'']
     1088            T.append(0.)
     1089        M.append(XYZ[opMT[0].lower()])
     1090    return np.array(M),np.array(T)
     1091           
    10331092def MagText2MTS(mcifOpr,CIF=True):
    10341093    "From magnetic space group cif text returns matrix/translation + spin flip"
Note: See TracChangeset for help on using the changeset viewer.