Changeset 1594


Ignore:
Timestamp:
Dec 3, 2014 4:33:28 PM (7 years ago)
Author:
vondreele
Message:

begin Pawley refinement stuff for incommensurate structures
Pawley SS reflections done
start on Refine for SS
only allow (3+1) supersymmetry - remove all (3+2) & (3+3) stuff
fix more bugs...

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1593 r1594  
    27382738                            Id = G2gd.GetPatternTreeItemId(self,item, 'Reflection Lists')
    27392739                            refList = self.PatternTree.GetItemPyData(Id)
    2740                             for i,item in DelList:
    2741                                 del(refList[item])
     2740                            if len(refList):
     2741                                for i,item in DelList:
     2742                                    del(refList[item])
    27422743                            self.PatternTree.SetItemPyData(Id,refList)
    27432744                        item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
  • trunk/GSASIIIO.py

    r1588 r1594  
    12441244        }
    12451245    if Super and Super.get('Use',False):
    1246         phaseData['General'].update({'Type':'modulated','Super':1,'SuperSg':Super['ssSymb']})
     1246        phaseData['General'].update({'Type':'modulated','Super':True,'SuperSg':Super['ssSymb']})
    12471247        phaseData['General']['SSGData'] = G2spc.SSpcGroup(SGData,Super['ssSymb'])
    1248         phaseData['General']['SuperVec'] = [[Super['ModVec'],False,Super['maxH']],
    1249             [[0,0,.1],False,4],[[0.,0.,.1],False,4]]
     1248        phaseData['General']['SuperVec'] = [Super['ModVec'],False,Super['maxH']]
    12501249
    12511250    return phaseData
  • trunk/GSASIIlattice.py

    r1587 r1594  
    3535import GSASIIpath
    3636import GSASIImath as G2mth
     37import GSASIIspc as G2spc
    3738GSASIIpath.SetVersionNumber("$Revision$")
    3839# trig functions in degrees
     
    853854                            HKL.append([h,k,l,1/math.sqrt(rdsq)])
    854855    return sortHKLd(HKL,True,True)
     856
     857def GenSSHLaue(dmin,SGData,SSGData,Vec,maxH,A):
     858    'needs a doc string'
     859    HKLs = []
     860    vec = np.array(Vec)
     861    vstar = np.sqrt(calc_rDsq(vec,A))     #find extra needed for -n SS reflections
     862    dvec = 1./(maxH*vstar+1./dmin)
     863    HKL = GenHLaue(dvec,SGData,A)       
     864    SSdH = [vec*h for h in range(-maxH,maxH+1)]
     865    SSdH = dict(zip(range(-maxH,maxH+1),SSdH))
     866    for h,k,l,d in HKL:
     867        ext = G2spc.GenHKLf([h,k,l],SGData)[0]
     868        if not ext and d >= dmin:
     869            HKLs.append([h,k,l,0,d])
     870        for dH in SSdH:
     871            if dH:
     872                DH = SSdH[dH]
     873                H = [h+DH[0],k+DH[1],l+DH[2]]
     874                d = 1/np.sqrt(calc_rDsq(H,A))
     875                if d >= dmin:
     876                    HKLM = np.array([h,k,l,dH])
     877                    if G2spc.checkSSextc(HKLM,SSGData):
     878                        HKLs.append([h,k,l,dH,d])   
     879    return sortHKLd(HKLs,True,True,True)
    855880
    856881#Spherical harmonics routines
  • trunk/GSASIIphsGUI.py

    r1590 r1594  
    245245                    generalData['Type'] = TypeTxt.GetValue()
    246246                    if generalData['Type'] in ['modulated',]:
    247                         generalData['SuperSg'] = SetDefaultSSsymbol()
    248                         generalData['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1]
     247                        if 'SuperSg' not in generalData:
     248                            generalData['SuperSg'] = SetDefaultSSsymbol()
     249                            generalData['SSGData'] = G2spc.SSpcGroup(generalData['SGData'],generalData['SuperSg'])[1]
    249250                    wx.CallAfter(UpdateGeneral)
    250251                else:
     
    552553                E,SSGData = G2spc.SSpcGroup(generalData['SGData'],SSymbol)
    553554                if SSGData:
    554                     Vec = generalData['SuperVec'][0][0]     #(3+1) only
     555                    Vec = generalData['SuperVec'][0]     #(3+1) only
    555556                    modSymb = SSGData['modSymb']
    556                     generalData['SuperVec'][0][0] = G2spc.SSGModCheck(Vec,modSymb)[0]
     557                    generalData['SuperVec'][0] = G2spc.SSGModCheck(Vec,modSymb)[0]
    557558                    text,table = G2spc.SSGPrint(generalData['SGData'],SSGData)
    558559                    generalData['SSGData'] = SSGData
     
    576577                Obj = event.GetEventObject()
    577578                ind = Indx[Obj.GetId()]
    578                 vec = Obj.GetValue().split()
     579                val = Obj.GetValue()
    579580                try:
    580                     Vec = [float(vec[i]) for i in range(3)]
    581                     Vec = G2spc.SSGModCheck(Vec,generalData['SSGData'])
    582                 except (ValueError,IndexError):
    583                     Vec = generalData['SuperVec'][ind][0]
    584                 if not np.any(np.array(Vec)):
    585                     Vec = generalData['SuperVec'][ind][0]
    586                 generalData['SuperVec'][ind][0] = Vec
    587                 h,k,l = Vec
    588                 Obj.SetValue('%.3f %.3f %.3f'%(h,k,l))
     581                    val = min(1.0,max(0.0,float(val)))
     582                except ValueError:
     583                    val = generalData['SuperVec'][0][ind]
     584                generalData['SuperVec'][0][ind] = val
     585                Obj.SetValue('%.4f'%(generalData['SuperVec'][0][ind]))
    589586               
    590587            def OnVecRef(event):
    591                 Obj = event.GetEventObject()
    592                 ind = Indx[Obj.GetId()]
    593                 generalData['SuperVec'][ind][1] = Obj.GetValue()
     588                generalData['SuperVec'][1] = Ref.GetValue()
    594589               
    595590            def OnMax(event):
    596                 Obj = event.GetEventObject()
    597                 ind = Indx[Obj.GetId()]
    598                 generalData['SuperVec'][ind][2] = int(Obj.GetValue())
     591                generalData['SuperVec'][2] = int(Max.GetValue())
    599592           
    600593            Indx = {}
    601             modSizer = wx.BoxSizer(wx.VERTICAL)
    602             dimSizer = wx.BoxSizer(wx.HORIZONTAL)
    603             dimSizer.Add(wx.StaticText(General,label=' '+name.capitalize()+' structure controls: '),0,WACV)
    604             dimSizer.Add(wx.StaticText(General,label=' Modulated structure dimension: '),0,WACV)
    605             dimChoice = ['1']       # restricted to (3+1) superlattices for now
    606             dim = wx.ComboBox(General,value=str(generalData['Super']),choices=dimChoice,
    607                 style=wx.CB_READONLY|wx.CB_DROPDOWN)
    608             dim.Bind(wx.EVT_COMBOBOX,OnDim)
    609             dimSizer.Add(dim,0,WACV)
    610             dimSizer.Add(wx.StaticText(General,label=' Superspace group: '+generalData['SGData']['SpGrp']),0,WACV)
     594            ssSizer = wx.BoxSizer(wx.VERTICAL)
     595            modSizer = wx.BoxSizer(wx.HORIZONTAL)
     596            modSizer.Add(wx.StaticText(General,label=' '+name.capitalize()+' structure controls: '),0,WACV)
     597            modSizer.Add(wx.StaticText(General,label=' Superspace group: '+generalData['SGData']['SpGrp']),0,WACV)
    611598            SSChoice = G2spc.ssdict.get(generalData['SGData']['SpGrp'],[])
    612599            if SSChoice:
     
    616603                superGp = wx.TextCtrl(General,value=generalData['SuperSg'],style=wx.TE_PROCESS_ENTER)
    617604                superGp.Bind(wx.EVT_TEXT_ENTER,OnSuperGp)                       
    618             dimSizer.Add(superGp,0,WACV)
    619             modSizer.Add(dimSizer)
     605            modSizer.Add(superGp,0,WACV)
     606            modSizer.Add(wx.StaticText(General,label=' Max index: '),0,WACV)
     607            indChoice = ['1','2','3','4','5','6','7']
     608            Max = wx.ComboBox(General,-1,value='%d'%(generalData['SuperVec'][2]),choices=indChoice,
     609                style=wx.CB_READONLY|wx.CB_DROPDOWN)
     610            Max.Bind(wx.EVT_COMBOBOX,OnMax)       
     611            modSizer.Add(Max,0,WACV)
     612            ssSizer.Add(modSizer,0,WACV)
    620613            vecSizer = wx.FlexGridSizer(1,5,5,5)
    621             indChoice = ['1','2','3','4','5','6','7']
    622             for i in range(int(generalData['Super'])):
    623                 vecSizer.Add(wx.StaticText(General,label=' Modulation vector #%d: '%(i+1)),0,WACV)
    624                 vec = generalData['SuperVec'][i][0] #these need to conform to the fixed modulations, e.g. 1/2 1/2 g
    625                 Vec = wx.TextCtrl(General,size=wx.Size(120,24),
    626                     value=' %.3f %.3f %.3f '%(vec[0],vec[1],vec[2]),
    627                     style=wx.TE_PROCESS_ENTER)
    628                 Vec.Bind(wx.EVT_TEXT_ENTER,OnVec)       
    629                 Vec.Bind(wx.EVT_KILL_FOCUS,OnVec)
    630                 vecSizer.Add(Vec,0,WACV)
    631                 Indx[Vec.GetId()] = i
    632                 Ref = wx.CheckBox(General,label='Refine?')
    633                 Ref.SetValue(generalData['SuperVec'][i][1])
    634                 Indx[Ref.GetId()] = i
    635                 Ref.Bind(wx.EVT_CHECKBOX, OnVecRef)
    636                 vecSizer.Add(Ref,0,WACV)
    637                 vecSizer.Add(wx.StaticText(General,label=' max index: '),0,WACV)
    638                 Max = wx.ComboBox(General,-1,value='%d'%(generalData['SuperVec'][i][2]),choices=indChoice,
    639                     style=wx.CB_READONLY|wx.CB_DROPDOWN)
    640                 Max.Bind(wx.EVT_COMBOBOX,OnMax)       
    641                 vecSizer.Add(Max,0,WACV)
    642                 Indx[Max.GetId()] = i
    643             modSizer.Add(vecSizer)
    644             return modSizer
     614            vecSizer.Add(wx.StaticText(General,label=' Modulation vector: '),0,WACV)
     615            modS = G2spc.splitSSsym(generalData['SuperSg'])[0]
     616            generalData['SuperVec'][0],ifShow = G2spc.SSGModCheck(generalData['SuperVec'][0],modS)
     617            vec = generalData['SuperVec'][0]
     618            for i,[val,show] in enumerate(zip(generalData['SuperVec'][0],ifShow)):
     619                if show:
     620                    modVal = wx.TextCtrl(General,value=('%.4f'%(val)),
     621                        size=wx.Size(50,20),style=wx.TE_PROCESS_ENTER)
     622                    modVal.Bind(wx.EVT_TEXT_ENTER,OnVec)       
     623                    modVal.Bind(wx.EVT_KILL_FOCUS,OnVec)
     624                    vecSizer.Add(modVal,0,WACV)
     625                    Indx[modVal.GetId()] = i
     626                else:
     627                    modVal = wx.TextCtrl(General,value=('%.3f'%(val)),
     628                        size=wx.Size(50,20),style=wx.TE_READONLY)
     629                    modVal.SetBackgroundColour(VERY_LIGHT_GREY)
     630                    vecSizer.Add(modVal,0,WACV)
     631            Ref = wx.CheckBox(General,label='Refine?')
     632            Ref.SetValue(generalData['SuperVec'][1])
     633            Ref.Bind(wx.EVT_CHECKBOX, OnVecRef)
     634            vecSizer.Add(Ref,0,WACV)
     635            ssSizer.Add(vecSizer)
     636            return ssSizer
    645637           
    646638        def MapSizer():
     
    967959       
    968960        if generalData['Type'] in ['modulated','magnetic',]:
    969             mainSizer.Add(wx.StaticText(General,label='NB: This does nothing yet'),0,WACV)
    970961            mainSizer.Add(ModulatedSizer(generalData['Type']))
    971962            G2gd.HorizontalLine(mainSizer,General)
     
    50215012        # FillPawleyReflectionsGrid executable starts here
    50225013        G2frame.dataFrame.SetStatusText('To delete a few Pawley reflections: select rows & press Delete')                       
     5014        generalData = data['General']
    50235015        if 'Pawley ref' in data:
    50245016            PawleyPeaks = data['Pawley ref']                       
    50255017            rowLabels = []
    50265018            for i in range(len(PawleyPeaks)): rowLabels.append(str(i))
    5027             colLabels = ['h','k','l','mul','d','refine','Fsq(hkl)','sig(Fsq)']
    5028             Types = 4*[wg.GRID_VALUE_LONG,]+[wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,]+ \
    5029                 2*[wg.GRID_VALUE_FLOAT+':10,2',]
     5019            if generalData['Type'] in ['modulated','magnetic',]:
     5020                colLabels = ['h','k','l','m','mul','d','refine','Fsq(hkl)','sig(Fsq)']
     5021                Types = 5*[wg.GRID_VALUE_LONG,]+[wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,]+ \
     5022                    2*[wg.GRID_VALUE_FLOAT+':10,2',]
     5023                pos = [6,7]
     5024            else:   
     5025                colLabels = ['h','k','l','mul','d','refine','Fsq(hkl)','sig(Fsq)']
     5026                Types = 4*[wg.GRID_VALUE_LONG,]+[wg.GRID_VALUE_FLOAT+':10,4',wg.GRID_VALUE_BOOL,]+ \
     5027                    2*[wg.GRID_VALUE_FLOAT+':10,2',]
     5028                pos = [5,6]
    50305029            PawleyTable = G2gd.Table(PawleyPeaks,rowLabels=rowLabels,colLabels=colLabels,types=Types)
    50315030            G2frame.PawleyRefl.SetTable(PawleyTable, True)
     
    50335032            for r in range(G2frame.PawleyRefl.GetNumberRows()):
    50345033                for c in range(G2frame.PawleyRefl.GetNumberCols()):
    5035                     if c in [5,6]:
     5034                    if c in pos:
    50365035                        G2frame.PawleyRefl.SetReadOnly(r,c,isReadOnly=False)
    50375036                    else:
     
    50435042    def OnPawleyLoad(event):
    50445043        generalData = data['General']
    5045         dmin = generalData['Pawley dmin']
    50465044        cell = generalData['Cell'][1:7]
    50475045        A = G2lat.cell2A(cell)
    50485046        SGData = generalData['SGData']
     5047        dmin = generalData['Pawley dmin']
     5048        PawleyPeaks = []
    50495049        HKLd = np.array(G2lat.GenHLaue(dmin,SGData,A))
    5050         PawleyPeaks = []
    5051         wx.BeginBusyCursor()
    5052         try:
    5053             for h,k,l,d in HKLd:
    5054                 ext,mul = G2spc.GenHKLf([h,k,l],SGData)[:2]
    5055                 if not ext:
    5056                     mul *= 2        #for powder multiplicity
    5057                     PawleyPeaks.append([h,k,l,mul,d,False,100.0,1.0])
    5058         finally:
    5059             wx.EndBusyCursor()
     5050        if generalData['Type'] in ['modulated','magnetic',]:
     5051            Vec,x,maxH = generalData['SuperVec']
     5052            SSGData = G2spc.SSpcGroup(SGData,generalData['SuperSg'])[1]
     5053            wx.BeginBusyCursor()
     5054            try:
     5055                HKLd = G2lat.GenSSHLaue(dmin,SGData,SSGData,Vec,maxH,A)
     5056                for h,k,l,m,d in HKLd:
     5057                    ext,mul = G2spc.GenHKLf([h,k,l],SGData)[:2]
     5058                    if not ext:
     5059                        mul *= 2        #for powder multiplicity
     5060                        PawleyPeaks.append([h,k,l,m,mul,d,False,100.0,1.0])
     5061            finally:
     5062                wx.EndBusyCursor()
     5063        else:
     5064            wx.BeginBusyCursor()
     5065            try:
     5066                for h,k,l,d in HKLd:
     5067                    ext,mul = G2spc.GenHKLf([h,k,l],SGData)[:2]
     5068                    if not ext:
     5069                        mul *= 2        #for powder multiplicity
     5070                        PawleyPeaks.append([h,k,l,mul,d,False,100.0,1.0])
     5071            finally:
     5072                wx.EndBusyCursor()
    50605073        data['Pawley ref'] = PawleyPeaks
    50615074        FillPawleyReflectionsGrid()
  • trunk/GSASIIpwd.py

    r1578 r1594  
    826826                if d >= dmin:
    827827                    HKLM = np.array([h,k,l,dH])
    828                     if G2spc.checkSSextc(HKLM,SSGData[1]):
     828                    if G2spc.checkSSextc(HKLM,SSGData):
    829829                        HKLs.append([h,k,l,dH,d,G2lat.Dsp2pos(Inst,d),-1])   
    830830    return G2lat.sortHKLd(HKLs,True,True,True)
  • trunk/GSASIIpwdGUI.py

    r1593 r1594  
    21122112                spc = controls[13]
    21132113                SGData = G2spc.SpcGroup(spc)[1]
    2114                 SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb'])
     2114                SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb'])[1]
    21152115                Vec = ssopt['ModVec']
    21162116                maxH = ssopt['maxH']
     
    23802380            dmin = G2lat.Pos2dsp(Inst,limits[0])
    23812381        if ssopt.get('Use',False):
    2382             SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb'])
     2382            SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb'])[1]
    23832383            Vec = ssopt['ModVec']
    23842384            maxH = ssopt['maxH']
     
    24632463            if ssopt.get('Use',False):
    24642464                vecFlags = [True if x in ssopt['ssSymb'] else False for x in ['a','b','g']]
    2465                 SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb'])
     2465                SSGData = G2spc.SSpcGroup(SGData,ssopt['ssSymb'])[1]
    24662466                G2frame.HKL = G2pwd.getHKLMpeak(dmin,Inst,SGData,SSGData,ssopt['ModVec'],ssopt['maxH'],A)
    24672467                peaks = [G2indx.IndexSSPeaks(peaks[0],G2frame.HKL)[1],peaks[1]]   #put peak fit esds back in peaks
     
    26102610        finally:
    26112611            dlg.Destroy()
     2612           
    26122613    if G2frame.dataDisplay:
    26132614        G2frame.dataFrame.DestroyChildren()
     
    26192620    G2frame.Bind(wx.EVT_MENU, CopyUnitCell, id=G2gd.wxID_COPYCELL)
    26202621    G2frame.Bind(wx.EVT_MENU, RefineCell, id=G2gd.wxID_REFINECELL)
    2621     G2frame.Bind(wx.EVT_MENU, MakeNewPhase, id=G2gd.wxID_MAKENEWPHASE)
    2622    
     2622    G2frame.Bind(wx.EVT_MENU, MakeNewPhase, id=G2gd.wxID_MAKENEWPHASE)   
    26232623    controls,bravais,cells,dmin,ssopt = data
    26242624    if len(controls) < 13:              #add cell volume if missing
  • trunk/GSASIIstrIO.py

    r1570 r1594  
    628628    elif SGData['SGLaue'] in ['m3m','m3']:
    629629        return [pfx+'A0',]
     630       
     631def modVary(pfx,SSGData):
     632    vary = []
     633    for i,item in SSGData['modSymb']:
     634        if item in ['a','b','g']:
     635            vary.append(pfx+'mV%d'%(i))
     636    return vary
    630637       
    631638################################################################################
     
    966973        if cell[0]:
    967974            phaseVary += cellVary(pfx,SGData)
     975        if General['Type'] in ['modulated','magnetic']:
     976            Vec,vRef,maxH = General['SuperVec']
     977            phaseDict.update({pfx+'mV0':Vec[0],pfx+'mV1':Vec[1],pfx+'mV2':Vec[2]})
     978            SSGData = General['SSGData']
     979            SSGtext,SSGtable = G2spc.SSGPrint(SGData,SSGData)
     980            if vRef:
     981                phaseVary += modVary(pfx,SSGData)       
    968982        resRBData = PhaseData[name]['RBModels'].get('Residue',[])
    969983        if resRBData:
Note: See TracChangeset for help on using the changeset viewer.