Changeset 1593


Ignore:
Timestamp:
Dec 3, 2014 12:31:01 PM (7 years ago)
Author:
vondreele
Message:

make ifX20 a G2frame variable
add Progress bar to findMV
force modulation values to 0-1 range
fix various bugs in super lattice stuff

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r1591 r1593  
    20842084        self.PeakTable = []
    20852085        self.LimitsTable = []
     2086        self.ifX20 = True   #use M20 /= (1+X20)
    20862087        self.HKL = []
    20872088        self.Lines = []
  • trunk/GSASIIindex.py

    r1592 r1593  
    260260    return X
    261261   
    262 def findMV(peaks,controls,ssopt,Inst):
     262def findMV(peaks,controls,ssopt,Inst,dlg):
    263263       
    264264    def Val2Vec(vec,Vref,values):
     
    268268            if r:
    269269                if values.size > 1:
    270                     Vec.append(values[i])
     270                    Vec.append(max(0.0,min(1.0,values[i])))
    271271                else:
    272                     Vec.append(values)                   
     272                    Vec.append(max(0.0,min(1.0,values)))                   
    273273                i += 1
    274274            else:
     
    276276        return np.array(Vec) 
    277277     
    278     def ZSSfunc(values,peaks,dmin,Inst,SGData,SSGData,vec,Vref,maxH,A,wave,Z):
     278    def ZSSfunc(values,peaks,dmin,Inst,SGData,SSGData,vec,Vref,maxH,A,wave,Z,dlg=None):
    279279        Vec = Val2Vec(vec,Vref,values)
    280280        HKL =  G2pwd.getHKLMpeak(dmin,Inst,SGData,SSGData,Vec,maxH,A)
     
    282282        Qo = 1./Peaks[-2]**2
    283283        Qc = G2lat.calc_rDsqZSS(Peaks[4:8],A,Vec,Z,Peaks[0],wave)
    284         return np.sum((Qo-Qc)**2)
     284        chi = np.sum((Qo-Qc)**2)
     285        if dlg:
     286            dlg.Pulse()   
     287        return chi
    285288
    286289    if 'C' in Inst['Type'][0]:
     
    302305    Peaks = np.copy(np.array(peaks).T)   
    303306    result = so.brute(ZSSfunc,ranges,finish=so.fmin_cg,
    304         args=(peaks,dmin,Inst,SGData,SSGData,ssopt['ModVec'],Vref,ssopt['maxH'],A,wave,Z))
     307        args=(peaks,dmin,Inst,SGData,SSGData,ssopt['ModVec'],Vref,ssopt['maxH'],A,wave,Z,dlg))
    305308    return Val2Vec(ssopt['ModVec'],Vref,result)
    306309               
     
    357360    if N == 0: return False,Peaks
    358361    if len(peaks[0]) == 9:      #add m column if missing
    359         for peak in Peaks:
    360             peak.insert(7,0)
     362        Peaks = np.insert(Peaks,7,np.zeros_like(Peaks.T[0]),axis=1)
     363#        for peak in Peaks:
     364#            peak.insert(7,0)
    361365    hklds = list(np.array(HKL).T[4])+[1000.0,0.0,]
    362366    hklds.sort()                                        # ascending sort - upper bound at end
  • trunk/GSASIIpwdGUI.py

    r1592 r1593  
    21752175    UnitCellsId = G2gd.GetPatternTreeItemId(G2frame,G2frame.PatternId, 'Unit Cells List')
    21762176    SPGlist = G2spc.spglist
    2177     ifX20 = True
    21782177    bravaisSymb = ['Fm3m','Im3m','Pm3m','R3-H','P6/mmm','I4/mmm',
    21792178        'P4/mmm','Fmmm','Immm','Cmmm','Pmmm','C2/m','P2/m','P1']
     
    22082207       
    22092208    def OnIfX20(event):
    2210         ifX20 = x20.GetValue()
     2209        G2frame.ifX20 = x20.GetValue()
    22112210       
    22122211    def OnStartVol(event):
     
    22412240            return
    22422241        ssopt['Use'] = SSopt.GetValue()
     2242        if 'ssSymb' not in ssopt:
     2243            ssopt.update({'ssSymb':'(abg)','ModVec':[0.1,0.1,0.1],'maxH':1})
    22432244        wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
    22442245       
     
    22482249        modS = G2spc.splitSSsym(ssopt['ssSymb'])[0]
    22492250        ssopt['ModVec'] = G2spc.SSGModCheck(Vec,modS)[0]
     2251        print ' Selecting: ',controls[13],ssopt['ssSymb'], 'maxH:',ssopt['maxH']
    22502252        OnHklShow(event)
    22512253        wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
     
    22762278    def OnMaxMH(event):
    22772279        ssopt['maxH'] = int(maxMH.GetValue())
     2280        print ' Selecting: ',controls[13],ssopt['ssSymb'], 'maxH:',ssopt['maxH']
    22782281        OnHklShow(event)
    22792282       
    22802283    def OnFindMV(event):
    22812284        Peaks = np.copy(peaks[0])
    2282         ssopt['ModVec'] = G2indx.findMV(Peaks,controls,ssopt,Inst)
     2285        print ' Trying: ',controls[13],ssopt['ssSymb'], 'maxH:',ssopt['maxH']
     2286        dlg = wx.ProgressDialog('Elapsed time','Modulation vector search',
     2287            style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE)
     2288        try:
     2289            ssopt['ModVec'] = G2indx.findMV(Peaks,controls,ssopt,Inst,dlg)
     2290        finally:
     2291            dlg.Destroy()
    22832292        OnHklShow(event)
    22842293        wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
     
    25172526            G2frame.ErrorDialog('Error','No Bravais lattices selected')
    25182527            return
    2519         if not peaks[0]:
     2528        if not len(peaks[0]):
    25202529            G2frame.ErrorDialog('Error','Index Peak List is empty')
    25212530            return
     
    25252534        G2frame.dataFrame.CopyCell.Enable(False)
    25262535        G2frame.dataFrame.RefineCell.Enable(False)
    2527         OK,dmin,newcells = G2indx.DoIndexPeaks(peaks[0],controls,bravais,ifX20)
     2536        OK,dmin,newcells = G2indx.DoIndexPeaks(peaks[0],controls,bravais,G2frame.ifX20)
    25282537        cells = keepcells+newcells
    25292538        cells = G2indx.sortM20(cells)
    2530         cells[0][10] = True         #select best M20
    25312539        if OK:
     2540            cells[0][10] = True         #select best M20
    25322541            data = [controls,bravais,cells,dmin,ssopt]
    25332542            G2frame.PatternTree.SetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId, 'Unit Cells List'),data)
     
    25442553            G2frame.dataFrame.IndexPeaks.Enable(True)
    25452554            G2frame.dataFrame.MakeNewPhase.Enable(True)
    2546         wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
     2555            G2frame.ifX20 = True
     2556            wx.CallAfter(UpdateUnitCellsGrid,G2frame,data)
    25472557               
    25482558    def RefreshUnitCellsGrid(event):
     
    26012611            dlg.Destroy()
    26022612    if G2frame.dataDisplay:
    2603         print G2frame.dataDisplay.GetScrollPos(wx.VERTICAL)
    26042613        G2frame.dataFrame.DestroyChildren()
    26052614    G2frame.dataDisplay = wxscroll.ScrolledPanel(G2frame.dataFrame)
     
    26602669    littleSizer.Add(startVol,0,WACV)
    26612670    x20 = wx.CheckBox(G2frame.dataDisplay,label='Use M20/(X20+1)?')
    2662     x20.SetValue(ifX20)
     2671    x20.SetValue(G2frame.ifX20)
    26632672    x20.Bind(wx.EVT_CHECKBOX,OnIfX20)
    26642673    littleSizer.Add(x20,0,WACV)
     
    27582767        ssSizer.Add(wx.StaticText(G2frame.dataDisplay,label=' Mod. vector: '),0,WACV)
    27592768        modS = G2spc.splitSSsym(ssopt['ssSymb'])[0]
    2760         Vec = ssopt['ModVec']
    2761         Vec,ifShow = G2spc.SSGModCheck(Vec,modS)
     2769        ssopt['ModVec'],ifShow = G2spc.SSGModCheck(ssopt['ModVec'],modS)
    27622770        Indx = {}
    2763         for i,[val,show] in enumerate(zip(Vec,ifShow)):
     2771        for i,[val,show] in enumerate(zip(ssopt['ModVec'],ifShow)):
    27642772            if show:
    27652773                valSizer = wx.BoxSizer(wx.HORIZONTAL)
Note: See TracChangeset for help on using the changeset viewer.