Changeset 459


Ignore:
Timestamp:
Jan 30, 2012 12:49:40 PM (12 years ago)
Author:
vondreele
Message:

fix bug in GenAtom? - didn't eliminate special position duplicates
refactor DisAglDialog? to have a reset & save results to general
begin torsion & distance/angle calcs in drawing

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIgrid.py

    r457 r459  
    4646[ wxID_DRAWATOMSTYLE, wxID_DRAWATOMLABEL, wxID_DRAWATOMCOLOR, wxID_DRAWATOMRESETCOLOR,
    4747    wxID_DRAWVIEWPOINT, wxID_DRAWTRANSFORM, wxID_DRAWDELETE, wxID_DRAWFILLCELL,
    48     wxID_DRAWADDEQUIV, wxID_DRAWFILLCOORD,
    49 ] = [wx.NewId() for _init_coll_DrawAtom_Items in range(10)]
     48    wxID_DRAWADDEQUIV, wxID_DRAWFILLCOORD, wxID_DRAWDISAGL, wxID_DRAWTORSION,
     49] = [wx.NewId() for _init_coll_DrawAtom_Items in range(12)]
    5050
    5151[ wxID_IMCALIBRATE,wxID_IMRECALIBRATE,wxID_IMINTEGRATE, wxID_IMCLEARCALIB, 
     
    483483        self.DrawAtomsMenu = wx.MenuBar()
    484484        self.DrawAtomEdit = wx.Menu(title='')
     485        self.DrawAtomCompute = wx.Menu(title='')
    485486        self.DrawAtomsMenu.Append(menu=self.DrawAtomEdit, title='Edit')
     487        self.DrawAtomsMenu.Append(menu=self.DrawAtomCompute,title='Compute')
    486488        self.DrawAtomsMenu.Append(menu=MyHelp(self,helpType='Draw Atoms'),title='&Help')
    487489        self.DrawAtomEdit.Append(id=wxID_DRAWATOMSTYLE, kind=wx.ITEM_NORMAL,text='Atom style',
     
    505507        self.DrawAtomEdit.Append(id=wxID_DRAWDELETE, kind=wx.ITEM_NORMAL,text='Delete atoms',
    506508            help='Delete atoms from drawing set')
     509        self.DrawAtomCompute.Append(id=wxID_DRAWDISAGL, kind=wx.ITEM_NORMAL,text='Distances & Angles',
     510            help='Compute distances & angles for selected atoms')   
     511        self.DrawAtomCompute.Append(id=wxID_DRAWTORSION, kind=wx.ITEM_NORMAL,text='Torsions',
     512            help='Compute torsion angle for 4 selected atoms')   
    507513           
    508514# end of GSAS-II menu definitions
  • trunk/GSASIIphsGUI.py

    r458 r459  
    134134
    135135class DisAglDialog(wx.Dialog):
    136     def __init__(self,parent,data):
     136   
     137    def __default__(self,data,default):
     138        if data:
     139            self.data = data
     140        else:
     141            self.data = {}
     142            self.data['Name'] = default['Name']
     143            self.data['Factors'] = [0.85,0.85]
     144            self.data['AtomTypes'] = default['AtomTypes']
     145            self.data['BondRadii'] = default['BondRadii']
     146            self.data['AngleRadii'] = default['AngleRadii']
     147       
     148    def __init__(self,parent,data,default):
    137149        wx.Dialog.__init__(self,parent,-1,'Distance Angle Controls',
    138150            pos=wx.DefaultPosition,style=wx.DEFAULT_DIALOG_STYLE)
    139         self.data = data
    140         panel = wx.Panel(self)
     151        self.default = default
     152        self.panel = wx.Panel(self)         #just a dummy - gets destroyed in Draw!
     153        self.__default__(data,self.default)
     154        self.Draw(self.data)
     155               
     156    def Draw(self,data):
     157        self.panel.Destroy()
     158        self.panel = wx.Panel(self)
    141159        mainSizer = wx.BoxSizer(wx.VERTICAL)
    142         mainSizer.Add(wx.StaticText(panel,-1,'Controls for phase '+data['Name']),
     160        mainSizer.Add(wx.StaticText(self.panel,-1,'Controls for phase '+data['Name']),
    143161            0,wx.ALIGN_CENTER_VERTICAL|wx.LEFT,10)
    144162        mainSizer.Add((10,10),1)
    145163       
    146164        radiiSizer = wx.FlexGridSizer(2,3,5,5)
    147         radiiSizer.Add(wx.StaticText(panel,-1,' Type'),0,wx.ALIGN_CENTER_VERTICAL)
    148         radiiSizer.Add(wx.StaticText(panel,-1,'Bond radii'),0,wx.ALIGN_CENTER_VERTICAL)
    149         radiiSizer.Add(wx.StaticText(panel,-1,'Angle radii'),0,wx.ALIGN_CENTER_VERTICAL)
     165        radiiSizer.Add(wx.StaticText(self.panel,-1,' Type'),0,wx.ALIGN_CENTER_VERTICAL)
     166        radiiSizer.Add(wx.StaticText(self.panel,-1,'Bond radii'),0,wx.ALIGN_CENTER_VERTICAL)
     167        radiiSizer.Add(wx.StaticText(self.panel,-1,'Angle radii'),0,wx.ALIGN_CENTER_VERTICAL)
    150168        self.objList = {}
    151169        for id,item in enumerate(self.data['AtomTypes']):
    152             radiiSizer.Add(wx.StaticText(panel,-1,' '+item),0,wx.ALIGN_CENTER_VERTICAL)
    153             bRadii = wx.TextCtrl(panel,-1,value='%.3f'%(data['BondRadii'][id]),style=wx.TE_PROCESS_ENTER)
     170            radiiSizer.Add(wx.StaticText(self.panel,-1,' '+item),0,wx.ALIGN_CENTER_VERTICAL)
     171            bRadii = wx.TextCtrl(self.panel,-1,value='%.3f'%(data['BondRadii'][id]),style=wx.TE_PROCESS_ENTER)
    154172            self.objList[bRadii.GetId()] = ['BondRadii',id]
    155173            bRadii.Bind(wx.EVT_TEXT_ENTER,self.OnRadiiVal)
    156174            bRadii.Bind(wx.EVT_KILL_FOCUS,self.OnRadiiVal)
    157175            radiiSizer.Add(bRadii,0,wx.ALIGN_CENTER_VERTICAL)
    158             aRadii = wx.TextCtrl(panel,-1,value='%.3f'%(data['AngleRadii'][id]),style=wx.TE_PROCESS_ENTER)
     176            aRadii = wx.TextCtrl(self.panel,-1,value='%.3f'%(data['AngleRadii'][id]),style=wx.TE_PROCESS_ENTER)
    159177            self.objList[aRadii.GetId()] = ['AngleRadii',id]
    160178            aRadii.Bind(wx.EVT_TEXT_ENTER,self.OnRadiiVal)
     
    165183        Names = ['Bond','Angle']
    166184        for i,name in enumerate(Names):
    167             factorSizer.Add(wx.StaticText(panel,-1,name+' search factor'),0,wx.ALIGN_CENTER_VERTICAL)
    168             bondFact = wx.TextCtrl(panel,-1,value='%.3f'%(data['Factors'][i]),style=wx.TE_PROCESS_ENTER)
     185            factorSizer.Add(wx.StaticText(self.panel,-1,name+' search factor'),0,wx.ALIGN_CENTER_VERTICAL)
     186            bondFact = wx.TextCtrl(self.panel,-1,value='%.3f'%(data['Factors'][i]),style=wx.TE_PROCESS_ENTER)
    169187            self.objList[bondFact.GetId()] = ['Factors',i]
    170188            bondFact.Bind(wx.EVT_TEXT_ENTER,self.OnRadiiVal)
     
    173191        mainSizer.Add(factorSizer,0,wx.EXPAND)
    174192       
    175         OkBtn = wx.Button(panel,-1,"Ok")
     193        OkBtn = wx.Button(self.panel,-1,"Ok")
    176194        OkBtn.Bind(wx.EVT_BUTTON, self.OnOk)
     195        ResetBtn = wx.Button(self.panel,-1,'Reset')
     196        ResetBtn.Bind(wx.EVT_BUTTON, self.OnReset)
    177197        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
    178198        btnSizer.Add((20,20),1)
    179199        btnSizer.Add(OkBtn)
    180         btnSizer.Add((20,20),1)       
     200        btnSizer.Add(ResetBtn)
     201        btnSizer.Add((20,20),1)
    181202        mainSizer.Add(btnSizer,0,wx.EXPAND|wx.BOTTOM|wx.TOP, 10)
    182         panel.SetSizer(mainSizer)
    183         panel.Fit()
     203        self.panel.SetSizer(mainSizer)
     204        self.panel.Fit()
    184205        self.Fit()
    185206   
     
    193214        Obj.SetValue("%.3f"%(self.data[item[0]][item[1]]))          #reset in case of error
    194215       
    195     def getData(self):
    196         return self.Data
     216    def GetData(self):
     217        return self.data
    197218       
    198219    def OnOk(self,event):
     
    201222        self.EndModal(wx.ID_OK)             
    202223        self.Destroy()
     224       
     225    def OnReset(self,event):
     226        data = {}
     227        self.__default__(data,self.default)
     228        self.Draw(self.data)
    203229       
    204230def UpdatePhaseData(self,Item,data,oldPage):
     
    10481074        xyz = []
    10491075        DisAglData = {}
     1076        DisAglCtls = {}
    10501077        if indx:
    10511078            generalData = data['General']
    10521079            DisAglData['OrigIndx'] = indx
    1053             DisAglData['Name'] = generalData['Name']
    1054             DisAglData['Factors'] = [0.85,0.85]
    1055             DisAglData['AtomTypes'] = generalData['AtomTypes']
    1056             DisAglData['BondRadii'] = generalData['BondRadii']
    1057             DisAglData['AngleRadii'] = generalData['AngleRadii']
    1058             DisAglDialog(self,DisAglData).ShowModal()
     1080            if 'DisAglCtls' in generalData:
     1081                DisAglCtls = generalData['DisAglCtls']
     1082#            else:
     1083#                DisAglCtls['Name'] = generalData['Name']
     1084#                DisAglCtls['Factors'] = [0.85,0.85]
     1085#                DisAglCtls['AtomTypes'] = generalData['AtomTypes']
     1086#                DisAglCtls['BondRadii'] = generalData['BondRadii']
     1087#                DisAglCtls['AngleRadii'] = generalData['AngleRadii']
     1088            dlg = DisAglDialog(self,DisAglCtls,generalData)
     1089            if dlg.ShowModal() == wx.ID_OK:
     1090                DisAglCtls = dlg.GetData()
     1091            dlg.Destroy()
     1092            generalData['DisAglCtls'] = DisAglCtls
    10591093            atomData = data['Atoms']
    10601094            colLabels = [Atoms.GetColLabelValue(c) for c in range(Atoms.GetNumberCols())]
     
    10731107                DisAglData['pId'] = data['pId']
    10741108                DisAglData['covData'] = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self,self.root, 'Covariance'))
    1075             G2str.DistAngle(DisAglData)
    1076                
     1109            G2str.DistAngle(DisAglCtls,DisAglData)
     1110           
    10771111#Structure drawing GUI stuff               
    10781112
     
    17981832            atomData[ind][col] = value
    17991833               
     1834    def OnDrawTorsion(event):
     1835        indx = drawAtoms.GetSelectedRows()
     1836        print 'Future torsion calc for atoms',indx
     1837       
     1838    def OnDrawDistAngle(event):
     1839        indx = drawAtoms.GetSelectedRows()
     1840        print 'Future bond dist/angles for atoms',indx
     1841               
    18001842    def UpdateDrawOptions():
    18011843        import copy
     
    30543096            self.dataFrame.Bind(wx.EVT_MENU, FillUnitCell, id=G2gd.wxID_DRAWFILLCELL)
    30553097            self.dataFrame.Bind(wx.EVT_MENU, DrawAtomsDelete, id=G2gd.wxID_DRAWDELETE)
     3098            self.dataFrame.Bind(wx.EVT_MENU, OnDrawDistAngle, id=G2gd.wxID_DRAWDISAGL)
     3099            self.dataFrame.Bind(wx.EVT_MENU, OnDrawTorsion, id=G2gd.wxID_DRAWTORSION)
    30563100            UpdateDrawAtoms()
    30573101            G2plt.PlotStructure(self,data)
  • trunk/GSASIIspc.py

    r404 r459  
    293293                        idup = False
    294294                else:
    295                     if True in [np.allclose(newX,X,atol=0.0002) for oldX in XYZEquiv]:
     295                    if True in [np.allclose(newX,oldX,atol=0.0002) for oldX in XYZEquiv]:
    296296                        idup = False
    297297                if All or idup:
  • trunk/GSASIIstruct.py

    r458 r459  
    25552555    G2IO.SetSeqResult(GPXfile,Histograms,SeqResult)
    25562556
    2557 def DistAngle(DisAglData):
     2557def DistAngle(DisAglCtls,DisAglData):
    25582558    import numpy.ma as ma
    25592559   
     
    25632563        print 80*'*','\n'
    25642564
    2565     ShowBanner(DisAglData['Name'])
     2565    ShowBanner(DisAglCtls['Name'])
    25662566    SGData = DisAglData['SGData']
    25672567    SGtext = G2spc.SGPrint(SGData)
     
    25882588            ' alpha = ','%.3f'%(Cell[3]),' beta = ','%.3f'%(Cell[4]),' gamma = ', \
    25892589            '%.3f'%(Cell[5]),' volume = ','%.3f'%(Cell[6])
    2590     Factor = DisAglData['Factors']
    2591     Radii = dict(zip(DisAglData['AtomTypes'],zip(DisAglData['BondRadii'],DisAglData['AngleRadii'])))
     2590    Factor = DisAglCtls['Factors']
     2591    Radii = dict(zip(DisAglCtls['AtomTypes'],zip(DisAglCtls['BondRadii'],DisAglCtls['AngleRadii'])))
    25922592    Units = np.array([                   #is there a nicer way to make this?
    25932593        [-1,-1,-1],[-1,-1,0],[-1,-1,1],[-1,0,-1],[-1,0,0],[-1,0,1],[-1,1,-1],[-1,1,0],[-1,1,1],
     
    26242624                                IndBlist.append(str(dx.T[indb][i]))
    26252625                                unit = Units[indb][i]
    2626                                 tunit = '[%2d%2d%2d]'%(unit[0],unit[1],unit[2])
     2626                                tunit = '[%2d%2d%2d]'%(unit[0]+Tunit[0],unit[1]+Tunit[1],unit[2]+Tunit[2])
    26272627                                pdpx = G2mth.getDistDerv(Oatom[3:6],Tatom[3:6],Amat,unit,Top,SGData)
    26282628                                sig = 0.0
Note: See TracChangeset for help on using the changeset viewer.