Changeset 934 for trunk/GSASIIphsGUI.py
- Timestamp:
- May 28, 2013 4:29:16 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIphsGUI.py
r927 r934 83 83 if 'RBModels' not in data: 84 84 data['RBModels'] = {} 85 if 'MCSA' not in data: 86 data['MCSA'] = {'Models':[{'Type':'MD','Coef':[1.0,False,[0.,3.],],'axis':[0,0,1]}],'Results':[],'AtInfo':{}} 85 87 #end patch 86 88 … … 120 122 if 'MCSA controls' not in generalData: 121 123 generalData['MCSA controls'] = {'Data source':'','Annealing':[50.0,0.001,0.90,1000], 122 'dmin':2.0,'Algolrithm':' Normal','Jump coeff':[0.95,0.5]} #'Normal','Random jump','Tremayne jump'124 'dmin':2.0,'Algolrithm':'Random jump','Jump coeff':[0.95,0.5],'nRuns':1} #'Random jump','Tremayne jump' 123 125 # end of patches 124 126 generalData['NoAtoms'] = {} … … 649 651 pass 650 652 dmin.SetValue("%.3f"%(MCSA['dmin'])) #reset in case of error 653 654 def OnNoRuns(event): 655 MCSA['nRuns'] = int(noRuns.GetValue()) 651 656 652 657 def OnAlist(event): … … 690 695 refList = ['Pawley reflections'] 691 696 for item in data['Histograms'].keys(): 692 if 'HKLF' in item :697 if 'HKLF' in item or 'PWDR' in item: 693 698 refList.append(item) 694 699 mcsaSizer = wx.BoxSizer(wx.VERTICAL) … … 707 712 mcsaSizer.Add((5,5),) 708 713 line2Sizer = wx.BoxSizer(wx.HORIZONTAL) 709 Achoice = ['Normal','Random jump','Tremayne jump'] 714 Rchoice = ['1','2','3','5','10','15','20'] 715 line2Sizer.Add(wx.StaticText(General,label=' No. MC/SA runs: '),0,wx.ALIGN_CENTER_VERTICAL) 716 noRuns = wx.ComboBox(General,-1,value=str(MCSA.get('nRuns',1)),choices=Rchoice, 717 style=wx.CB_READONLY|wx.CB_DROPDOWN) 718 noRuns.Bind(wx.EVT_COMBOBOX,OnNoRuns) 719 line2Sizer.Add(noRuns,0,wx.ALIGN_CENTER_VERTICAL) 720 Achoice = ['Random jump','Tremayne jump'] 710 721 line2Sizer.Add(wx.StaticText(General,label=' MC/SA algorithm: '),0,wx.ALIGN_CENTER_VERTICAL) 711 722 Alist = wx.ComboBox(General,-1,value=MCSA['Algolrithm'],choices=Achoice, … … 1254 1265 print '**** ERROR - no rigid bodies defined ****' 1255 1266 return 1267 dlg = wx.SingleChoiceDialog(G2frame.dataFrame,'Select','Rigid body',rbNames.keys()) 1268 if dlg.ShowModal() == wx.ID_OK: 1269 sel = dlg.GetSelection() 1270 rbname = rbNames.keys()[sel] 1271 rbType,rbId = rbNames[rbname] 1272 RB = rbData[rbType][rbId] 1256 1273 1257 1274 def OnAtomMove(event): … … 2783 2800 if True: # Bob wants this tab to always resize -- let's try that. 2784 2801 Size = mainSizer.Fit(G2frame.dataFrame) 2785 Size[0] = max(Size[0]+35,500) # leave some extra room and don't get too small 2802 # Size[0] = max(Size[0]+35,400) # leave some extra room and don't get too small 2803 Size[0] += 35 #compensate for scroll bar 2786 2804 Size[1] = max(Size[1]+35,350) #compensate for status bar 2787 2805 drawOptions.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1) … … 3917 3935 wx.EndBusyCursor() 3918 3936 FillRigidBodyGrid() 3937 3938 ################################################################################ 3939 ##### MC/SA routines 3940 ################################################################################ 3941 3942 def UpdateMCSA(refresh=True): 3943 Indx = {} 3944 3945 def OnPosRef(event): 3946 Obj = event.GetEventObject() 3947 model,item,ix = Indx[Obj.GetId()] 3948 model[item][1][ix] = Obj.GetValue() 3949 3950 def OnPosVal(event): 3951 Obj = event.GetEventObject() 3952 model,item,ix = Indx[Obj.GetId()] 3953 try: 3954 model[item][0][ix] = float(Obj.GetValue()) 3955 except ValueError: 3956 pass 3957 Obj.SetValue("%.4f"%(model[item][0][ix])) 3958 G2plt.PlotStructure(G2frame,data) 3959 3960 def OnPosRange(event): 3961 Obj = event.GetEventObject() 3962 model,item,ix = Indx[Obj.GetId()] 3963 Range = Obj.GetValue().split() 3964 try: 3965 rmin,rmax = [float(Range[i]) for i in range(2)] 3966 if rmin >= rmax: 3967 raise ValueError 3968 except (ValueError,IndexError): 3969 rmin,rmax = model[item][2][ix] 3970 model[item][2][ix] = [rmin,rmax] 3971 Obj.SetValue('%.3f %.3f'%(rmin,rmax)) 3972 3973 def atomSizer(model): 3974 3975 atomsizer = wx.FlexGridSizer(1,7,5,5) 3976 atomsizer.Add(wx.StaticText(MCSA,-1,' Atom: '+model['name']+': '),0,wx.ALIGN_CENTER_VERTICAL) 3977 for ix,item in enumerate(['x','y','z']): 3978 posRef = wx.CheckBox(MCSA,-1,label=item+': ') 3979 posRef.SetValue(model['Pos'][1][ix]) 3980 posRef.Bind(wx.EVT_CHECKBOX,OnPosRef) 3981 Indx[posRef.GetId()] = [model,'Pos',ix] 3982 atomsizer.Add(posRef,0,wx.ALIGN_CENTER_VERTICAL) 3983 posVal = wx.TextCtrl(MCSA,-1,'%.4f'%(model['Pos'][0][ix]),style=wx.TE_PROCESS_ENTER) 3984 posVal.Bind(wx.EVT_TEXT_ENTER,OnPosVal) 3985 posVal.Bind(wx.EVT_KILL_FOCUS,OnPosVal) 3986 Indx[posVal.GetId()] = [model,'Pos',ix] 3987 atomsizer.Add(posVal,0,wx.ALIGN_CENTER_VERTICAL) 3988 atomsizer.Add((5,5),0) 3989 for ix,item in enumerate(['x','y','z']): 3990 atomsizer.Add(wx.StaticText(MCSA,-1,' Range: '),0,wx.ALIGN_CENTER_VERTICAL) 3991 rmin,rmax = model['Pos'][2][ix] 3992 posRange = wx.TextCtrl(MCSA,-1,'%.3f %.3f'%(rmin,rmax),style=wx.TE_PROCESS_ENTER) 3993 Indx[posRange.GetId()] = [model,'Pos',ix] 3994 posRange.Bind(wx.EVT_TEXT_ENTER,OnPosRange) 3995 posRange.Bind(wx.EVT_KILL_FOCUS,OnPosRange) 3996 atomsizer.Add(posRange,0,wx.ALIGN_CENTER_VERTICAL) 3997 return atomsizer 3998 3999 def rbSizer(model): 4000 4001 def OnOrVar(event): 4002 Obj = event.GetEventObject() 4003 model = Indx[Obj.GetId()] 4004 model['Ovar'] = Obj.GetValue() 4005 4006 def OnOriVal(event): 4007 Obj = event.GetEventObject() 4008 model,ix = Indx[Obj.GetId()] 4009 A,V = G2mth.Q2AVdeg(model['Ori'][0]) 4010 # V = np.inner(Bmat,V) 4011 if ix: 4012 Anew = A 4013 Vec = Obj.GetValue().split() 4014 try: 4015 Vnew = [float(Vec[i]) for i in range(3)] 4016 except ValueError: 4017 Vnew = V 4018 else: 4019 Vnew = V 4020 try: 4021 Anew = float(Obj.GetValue()) 4022 except ValueError: 4023 Anew = A 4024 # V = np.inner(Amat,V) 4025 Q = G2mth.AVdeg2Q(Anew,Vnew) 4026 model['Ori'][0] = Q 4027 G2plt.PlotStructure(G2frame,data) 4028 UpdateMCSA() 4029 4030 def OnMolCent(event): 4031 Obj = event.GetEventObject() 4032 model = Indx[Obj.GetId()] 4033 model['MolCent'] = Obj.GetValue() 4034 G2plt.PlotStructure(G2frame,data) 4035 4036 rbsizer = wx.BoxSizer(wx.VERTICAL) 4037 rbsizer1 = wx.FlexGridSizer(1,7,5,5) 4038 rbsizer1.Add(wx.StaticText(MCSA,-1,model['Type']+': '+model['name']+': '),0,wx.ALIGN_CENTER_VERTICAL) 4039 for ix,item in enumerate(['x','y','z']): 4040 posRef = wx.CheckBox(MCSA,-1,label=item+': ') 4041 posRef.SetValue(model['Pos'][1][ix]) 4042 posRef.Bind(wx.EVT_CHECKBOX,OnPosRef) 4043 Indx[posRef.GetId()] = [model,'Pos',ix] 4044 rbsizer1.Add(posRef,0,wx.ALIGN_CENTER_VERTICAL) 4045 posVal = wx.TextCtrl(MCSA,-1,'%.4f'%(model['Pos'][0][ix]),style=wx.TE_PROCESS_ENTER) 4046 posVal.Bind(wx.EVT_TEXT_ENTER,OnPosVal) 4047 posVal.Bind(wx.EVT_KILL_FOCUS,OnPosVal) 4048 Indx[posVal.GetId()] = [model,'Pos',ix] 4049 rbsizer1.Add(posVal,0,wx.ALIGN_CENTER_VERTICAL) 4050 molcent = wx.CheckBox(MCSA,-1,label=' Use mol. center? ') 4051 molcent.SetValue(model['MolCent']) 4052 molcent.Bind(wx.EVT_CHECKBOX,OnMolCent) 4053 Indx[molcent.GetId()] = model 4054 rbsizer1.Add(molcent,0,wx.ALIGN_CENTER_VERTICAL) 4055 for ix,item in enumerate(['x','y','z']): 4056 rbsizer1.Add(wx.StaticText(MCSA,-1,' Range: '),0,wx.ALIGN_CENTER_VERTICAL) 4057 rmin,rmax = model['Pos'][2][ix] 4058 posRange = wx.TextCtrl(MCSA,-1,'%.3f %.3f'%(rmin,rmax),style=wx.TE_PROCESS_ENTER) 4059 Indx[posRange.GetId()] = [model,'Pos',ix] 4060 posRange.Bind(wx.EVT_TEXT_ENTER,OnPosRange) 4061 posRange.Bind(wx.EVT_KILL_FOCUS,OnPosRange) 4062 rbsizer1.Add(posRange,0,wx.ALIGN_CENTER_VERTICAL) 4063 4064 rbsizer2 = wx.FlexGridSizer(1,6,5,5) 4065 Orien,OrienV = G2mth.Q2AVdeg(model['Ori'][0]) 4066 Ori = [Orien,]+list(OrienV) 4067 rbsizer2.Add(wx.StaticText(MCSA,-1,'Oa: '),0,wx.ALIGN_CENTER_VERTICAL) 4068 angVal = wx.TextCtrl(MCSA,-1,'%.5f'%(Ori[0]),style=wx.TE_PROCESS_ENTER) 4069 angVal.Bind(wx.EVT_TEXT_ENTER,OnOriVal) 4070 angVal.Bind(wx.EVT_KILL_FOCUS,OnOriVal) 4071 Indx[angVal.GetId()] = [model,0] 4072 rbsizer2.Add(angVal,0,wx.ALIGN_CENTER_VERTICAL) 4073 rbsizer2.Add(wx.StaticText(MCSA,-1,'Oi,Oj,Ok: '),0,wx.ALIGN_CENTER_VERTICAL) 4074 vecVal = wx.TextCtrl(MCSA,-1,'%.3f %.3f %.3f'%(Ori[1],Ori[2],Ori[3]),style=wx.TE_PROCESS_ENTER) 4075 vecVal.Bind(wx.EVT_TEXT_ENTER,OnOriVal) 4076 vecVal.Bind(wx.EVT_KILL_FOCUS,OnOriVal) 4077 Indx[vecVal.GetId()] = [model,1] 4078 rbsizer2.Add(vecVal,0,wx.ALIGN_CENTER_VERTICAL) 4079 rbsizer2.Add(wx.StaticText(MCSA,-1,' Vary? '),0,wx.ALIGN_CENTER_VERTICAL) 4080 choice = [' ','A','AV'] 4081 orvar = wx.ComboBox(MCSA,-1,value=model['Ovar'],choices=choice, 4082 style=wx.CB_READONLY|wx.CB_DROPDOWN) 4083 orvar.Bind(wx.EVT_COMBOBOX, OnOrVar) 4084 Indx[orvar.GetId()] = model 4085 rbsizer2.Add(orvar,0,wx.ALIGN_CENTER_VERTICAL) 4086 rbsizer2.Add(wx.StaticText(MCSA,-1,' Range: Oa: '),0,wx.ALIGN_CENTER_VERTICAL) 4087 Rge = model['Ori'][2] 4088 angRange = wx.TextCtrl(MCSA,-1,'%.3f %.3f'%(Rge[0][0],Rge[0][1]),style=wx.TE_PROCESS_ENTER) 4089 Indx[angRange.GetId()] = [model,'Ori',0] 4090 angRange.Bind(wx.EVT_TEXT_ENTER,OnPosRange) 4091 angRange.Bind(wx.EVT_KILL_FOCUS,OnPosRange) 4092 rbsizer2.Add(angRange,0,wx.ALIGN_CENTER_VERTICAL) 4093 rbsizer2.Add(wx.StaticText(MCSA,-1,'Oi,Oj,Ok: '),0,wx.ALIGN_CENTER_VERTICAL) 4094 for io,item in enumerate(['Oi','Oj','Ok']): 4095 rmin,rmax = Rge[io+1] 4096 vecRange = wx.TextCtrl(MCSA,-1,'%.3f %.3f '%(rmin,rmax),style=wx.TE_PROCESS_ENTER) 4097 Indx[vecRange.GetId()] = [model,'Ori',io+1] 4098 vecRange.Bind(wx.EVT_TEXT_ENTER,OnPosRange) 4099 vecRange.Bind(wx.EVT_KILL_FOCUS,OnPosRange) 4100 rbsizer2.Add(vecRange,0,wx.ALIGN_CENTER_VERTICAL) 4101 rbsizer.Add(rbsizer1) 4102 rbsizer.Add(rbsizer2) 4103 if model['Type'] == 'Residue': 4104 rbsizer3 = wx.FlexGridSizer(1,8,5,5) 4105 for it,tor in enumerate(model['Tor'][0]): 4106 name = 'Tor('+str(it)+')' 4107 torRef = wx.CheckBox(MCSA,-1,label=' %s: '%(name)) 4108 torRef.SetValue(model['Tor'][1][it]) 4109 torRef.Bind(wx.EVT_CHECKBOX,OnPosRef) 4110 Indx[torRef.GetId()] = [model,'Tor',it] 4111 rbsizer3.Add(torRef,0,wx.ALIGN_CENTER_VERTICAL) 4112 torVal = wx.TextCtrl(MCSA,-1,'%.4f'%(tor),style=wx.TE_PROCESS_ENTER) 4113 torVal.Bind(wx.EVT_TEXT_ENTER,OnPosVal) 4114 torVal.Bind(wx.EVT_KILL_FOCUS,OnPosVal) 4115 Indx[torVal.GetId()] = [model,'Tor',it] 4116 rbsizer3.Add(torVal,0,wx.ALIGN_CENTER_VERTICAL) 4117 rbsizer3.Add(wx.StaticText(MCSA,-1,' Range: '),0,wx.ALIGN_CENTER_VERTICAL) 4118 rmin,rmax = model['Tor'][2][it] 4119 torRange = wx.TextCtrl(MCSA,-1,'%.3f %.3f'%(rmin,rmax),style=wx.TE_PROCESS_ENTER) 4120 Indx[torRange.GetId()] = [model,'Tor',it] 4121 torRange.Bind(wx.EVT_TEXT_ENTER,OnPosRange) 4122 torRange.Bind(wx.EVT_KILL_FOCUS,OnPosRange) 4123 rbsizer3.Add(torRange,0,wx.ALIGN_CENTER_VERTICAL) 4124 rbsizer.Add(rbsizer3) 4125 4126 return rbsizer 4127 4128 def MDSizer(POData): 4129 4130 def OnPORef(event): 4131 POData['Coef'][1] = poRef.GetValue() 4132 4133 def OnPOVal(event): 4134 try: 4135 mdVal = float(poVal.GetValue()) 4136 if mdVal > 0: 4137 POData['Coef'][0] = mdVal 4138 except ValueError: 4139 pass 4140 poVal.SetValue("%.3f"%(POData['Coef'][0])) 4141 4142 def OnPORange(event): 4143 Range = poRange.GetValue().split() 4144 try: 4145 rmin,rmax = [float(Range[i]) for i in range(2)] 4146 if rmin >= rmax: 4147 raise ValueError 4148 except (ValueError,IndexError): 4149 rmin,rmax = POData['Coef'][2] 4150 POData['Coef'][2] = [rmin,rmax] 4151 poRange.SetValue('%.3f %.3f'%(rmin,rmax)) 4152 4153 def OnPOAxis(event): 4154 Saxis = poAxis.GetValue().split() 4155 try: 4156 hkl = [int(Saxis[i]) for i in range(3)] 4157 except (ValueError,IndexError): 4158 hkl = POData['axis'] 4159 if not np.any(np.array(hkl)): 4160 hkl = POData['axis'] 4161 POData['axis'] = hkl 4162 h,k,l = hkl 4163 poAxis.SetValue('%3d %3d %3d'%(h,k,l)) 4164 4165 poSizer = wx.BoxSizer(wx.HORIZONTAL) 4166 poRef = wx.CheckBox(MCSA,-1,label=' March-Dollase ratio: ') 4167 poRef.SetValue(POData['Coef'][1]) 4168 poRef.Bind(wx.EVT_CHECKBOX,OnPORef) 4169 poSizer.Add(poRef,0,wx.ALIGN_CENTER_VERTICAL) 4170 poVal = wx.TextCtrl(MCSA,-1,'%.3f'%(POData['Coef'][0]),style=wx.TE_PROCESS_ENTER) 4171 poVal.Bind(wx.EVT_TEXT_ENTER,OnPOVal) 4172 poVal.Bind(wx.EVT_KILL_FOCUS,OnPOVal) 4173 poSizer.Add(poVal,0,wx.ALIGN_CENTER_VERTICAL) 4174 poSizer.Add(wx.StaticText(MCSA,-1,' Range: '),0,wx.ALIGN_CENTER_VERTICAL) 4175 rmin,rmax = POData['Coef'][2] 4176 poRange = wx.TextCtrl(MCSA,-1,'%.3f %.3f'%(rmin,rmax),style=wx.TE_PROCESS_ENTER) 4177 poRange.Bind(wx.EVT_TEXT_ENTER,OnPORange) 4178 poRange.Bind(wx.EVT_KILL_FOCUS,OnPORange) 4179 poSizer.Add(poRange,0,wx.ALIGN_CENTER_VERTICAL) 4180 poSizer.Add(wx.StaticText(MCSA,-1,' Unique axis, H K L: '),0,wx.ALIGN_CENTER_VERTICAL) 4181 h,k,l = POData['axis'] 4182 poAxis = wx.TextCtrl(MCSA,-1,'%3d %3d %3d'%(h,k,l),style=wx.TE_PROCESS_ENTER) 4183 poAxis.Bind(wx.EVT_TEXT_ENTER,OnPOAxis) 4184 poAxis.Bind(wx.EVT_KILL_FOCUS,OnPOAxis) 4185 poSizer.Add(poAxis,0,wx.ALIGN_CENTER_VERTICAL) 4186 return poSizer 4187 4188 # UpdateMCSA executable code starts here 4189 if refresh: 4190 MCSA.DestroyChildren() 4191 general = data['General'] 4192 Amat,Bmat = G2lat.cell2AB(general['Cell'][1:7]) 4193 RBData = G2frame.PatternTree.GetItemPyData( 4194 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) 4195 Indx = {} 4196 atomStyle = 'balls & sticks' 4197 if 'macro' in general['Type']: 4198 atomStyle = 'sticks' 4199 G2frame.dataFrame.SetStatusText('') 4200 mainSizer = wx.BoxSizer(wx.VERTICAL) 4201 if not data['MCSA']['Models']: 4202 mainSizer.Add((5,5),0) 4203 mainSizer.Add(wx.StaticText(MCSA,-1,'No MC/SA models:'),0,wx.ALIGN_CENTER_VERTICAL) 4204 mainSizer.Add((5,5),0) 4205 else: 4206 mainSizer.Add((5,5),0) 4207 mainSizer.Add(wx.StaticText(MCSA,-1,'MC/SA models:'),0,wx.ALIGN_CENTER_VERTICAL) 4208 mainSizer.Add((5,5),0) 4209 for model in data['MCSA']['Models']: 4210 if model['Type'] == 'MD': 4211 mainSizer.Add(MDSizer(model)) 4212 elif model['Type'] == 'Atom': 4213 mainSizer.Add(atomSizer(model)) 4214 else: 4215 mainSizer.Add(rbSizer(model)) 4216 G2gd.HorizontalLine(mainSizer,MCSA) 4217 4218 if not data['MCSA']['Results']: 4219 mainSizer.Add((5,5),0) 4220 mainSizer.Add(wx.StaticText(MCSA,-1,'No MC/SA results:'),0,wx.ALIGN_CENTER_VERTICAL) 4221 mainSizer.Add((5,5),0) 4222 else: 4223 for result in data['MCSA']['Results']: 4224 print result 4225 4226 MCSA.SetSizer(mainSizer) 4227 if G2frame.dataFrame.PhaseUserSize is None: 4228 mainSizer.FitInside(G2frame.dataFrame) 4229 Size = mainSizer.GetMinSize() 4230 Size[0] += 40 4231 Size[1] = max(Size[1],290) + 35 4232 MCSA.SetSize(Size) 4233 MCSA.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1) 4234 Size[1] = min(Size[1],450) 4235 G2frame.dataFrame.setSizePosLeft(Size) 4236 else: 4237 Size = G2frame.dataFrame.PhaseUserSize 4238 MCSA.SetSize(Size) 4239 MCSA.SetScrollbars(10,10,Size[0]/10-4,Size[1]/10-1) 4240 G2frame.dataFrame.Update() 4241 4242 def OnRunMCSA(event): 4243 generalData = data['General'] 4244 mcsaControls = generalData['MCSA controls'] 4245 reflName = mcsaControls['Data source'] 4246 phaseName = generalData['Name'] 4247 MCSAdata = data['MCSA'] 4248 covData = {} 4249 if 'PWDR' in reflName: 4250 PatternId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, reflName) 4251 reflSets = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,PatternId,'Reflection Lists')) 4252 reflData = reflSets[phaseName] 4253 reflType = 'PWDR' 4254 elif 'HKLF' in reflName: 4255 PatternId = G2gd.GetPatternTreeItemId(G2frame,G2frame.root, reflName) 4256 reflData = G2frame.PatternTree.GetItemPyData(PatternId)[1] 4257 reflType = 'HKLF' 4258 elif reflName == 'Pawley reflections': 4259 reflData = data['Pawley ref'] 4260 covData = G2frame.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(G2frame,G2frame.root, 'Covariance')) 4261 reflType = 'Pawley' 4262 else: 4263 print '**** ERROR - No data defined for MC/SA run' 4264 return 4265 MCSAmodels = MCSAdata['Models'] 4266 if not len(MCSAmodels): 4267 print '**** ERROR - no models defined for MC/SA run****' 4268 return 4269 pgbar = wx.ProgressDialog('MC/SA','Residual Rcf =',101.0, 4270 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_CAN_ABORT) 4271 screenSize = wx.ClientDisplayRect() 4272 Size = pgbar.GetSize() 4273 Size = (int(Size[0]*1.2),Size[1]) # increase size a bit along x 4274 pgbar.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5)) 4275 pgbar.SetSize(Size) 4276 try: 4277 MCSAdata['Results'] = G2mth.mcsaSearch(data,reflType,reflData,covData,pgbar) 4278 finally: 4279 pgbar.Destroy() 4280 if not data['Drawing']: #if new drawing - no drawing data! 4281 SetupDrawingData() 4282 print ' MC/SA run finished: best model residual: %f.3'%(0.01) 4283 UpdateMCSA() 4284 4285 def OnMCSAaddAtom(event): 4286 dlg = G2elemGUI.PickElement(G2frame) 4287 if dlg.ShowModal() == wx.ID_OK: 4288 El = dlg.Elem.strip() 4289 Info = G2elem.GetAtomInfo(El) 4290 dlg.Destroy() 4291 4292 atom = {'Type':'Atom','atType':El,'Pos':[[0.,0.,0.], 4293 [False,False,False],[[0.,1.],[0.,1.],[0.,1.]]], 4294 'name':El+'('+str(len(data['MCSA']['Models']))+')'} 4295 data['MCSA']['Models'].append(atom) 4296 data['MCSA']['AtInfo'][El] = [Info['Drad'],Info['Color']] 4297 G2plt.PlotStructure(G2frame,data) 4298 UpdateMCSA() 4299 4300 def OnMCSAaddRB(event): 4301 rbData = G2frame.PatternTree.GetItemPyData( 4302 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) 4303 rbNames = {} 4304 for rbVec in rbData['Vector']: 4305 if rbVec != 'AtInfo': 4306 rbNames[rbData['Vector'][rbVec]['RBname']] = ['Vector',rbVec] 4307 for rbRes in rbData['Residue']: 4308 if rbRes != 'AtInfo': 4309 rbNames[rbData['Residue'][rbRes]['RBname']] = ['Residue',rbRes] 4310 if not rbNames: 4311 print '**** ERROR - no rigid bodies defined ****' 4312 return 4313 dlg = wx.SingleChoiceDialog(G2frame.dataFrame,'Select','Rigid body',rbNames.keys()) 4314 if dlg.ShowModal() == wx.ID_OK: 4315 sel = dlg.GetSelection() 4316 rbname = rbNames.keys()[sel] 4317 rbType,rbId = rbNames[rbname] 4318 RB = rbData[rbType][rbId] 4319 body = {'name':RB['RBname']+'('+str(len(data['MCSA']['Models']))+')','RBId':rbId,'Type':rbType, 4320 'Pos':[[0.,0.,0.],[False,False,False],[[0.,1.],[0.,1.],[0.,1.]]],'Ovar':'','MolCent':False, 4321 'Ori':[[1.,0.,0.,0.],[False,False,False,False],[[-180.,180.],[-1.,1.],[-1.,1.],[-1.,1.]]]} 4322 if rbType == 'Residue': 4323 body['Tor'] = [[],[],[]] 4324 for i,tor in enumerate(RB['rbSeq']): 4325 body['Tor'][0].append(0.0) 4326 body['Tor'][1].append(False) 4327 body['Tor'][2].append([0.,360.]) 4328 data['MCSA']['Models'].append(body) 4329 data['MCSA']['rbData'] = rbData 4330 data['MCSA']['AtInfo'].update(rbData[rbType]['AtInfo']) 4331 G2plt.PlotStructure(G2frame,data) 4332 UpdateMCSA() 4333 4334 def OnMCSAclear(event): 4335 data['MCSA'] = {'Models':[{'Type':'MD','Coef':[1.0,False,[0.,3.],],'axis':[0,0,1]}],'Results':[],'AtInfo':{}} 4336 G2plt.PlotStructure(G2frame,data) 4337 UpdateMCSA() 3919 4338 3920 3921 4339 ################################################################################ 3922 4340 ##### Pawley routines … … 4383 4801 else: 4384 4802 print 'Bad charge flip map - no peak search done' 4385 4803 4386 4804 def OnTextureRefine(event): 4387 4805 print 'refine texture?' … … 4492 4910 #G2plt.PlotStructure(G2frame,data) 4493 4911 wx.CallAfter(G2plt.PlotStructure,G2frame,data) 4912 elif text == 'MC/SA': 4913 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.MCSAMenu) 4914 G2frame.dataFrame.Bind(wx.EVT_MENU, OnMCSAaddAtom, id=G2gd.wxID_ADDMCSAATOM) 4915 G2frame.dataFrame.Bind(wx.EVT_MENU, OnMCSAaddRB, id=G2gd.wxID_ADDMCSARB) 4916 G2frame.dataFrame.Bind(wx.EVT_MENU, OnMCSAclear, id=G2gd.wxID_CLEARMCSARB) 4917 UpdateMCSA() 4918 wx.CallAfter(G2plt.PlotStructure,G2frame,data) 4494 4919 elif text == 'Texture': 4495 4920 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.TextureMenu) … … 4497 4922 G2frame.dataFrame.Bind(wx.EVT_MENU, OnTextureClear, id=G2gd.wxID_CLEARTEXTURE) 4498 4923 UpdateTexture() 4499 G2plt.PlotTexture(G2frame,data,Start=True) 4500 4924 G2plt.PlotTexture(G2frame,data,Start=True) 4501 4925 else: 4502 4926 G2gd.SetDataMenuBar(G2frame) … … 4519 4943 MapPeaks = G2gd.GSGrid(G2frame.dataDisplay) 4520 4944 G2frame.dataDisplay.AddPage(MapPeaks,'Map peaks') 4945 MCSA = wx.ScrolledWindow(G2frame.dataDisplay) 4946 G2frame.dataDisplay.AddPage(MCSA,'MC/SA') 4521 4947 Texture = wx.ScrolledWindow(G2frame.dataDisplay) 4522 4948 G2frame.dataDisplay.AddPage(Texture,'Texture') … … 4528 4954 G2frame.dataFrame.Bind(wx.EVT_MENU, OnChargeFlip, id=G2gd.wxID_CHARGEFLIP) 4529 4955 G2frame.dataFrame.Bind(wx.EVT_MENU, OnFourClear, id=G2gd.wxID_FOURCLEAR) 4956 G2frame.dataFrame.Bind(wx.EVT_MENU, OnRunMCSA, id=G2gd.wxID_RUNMCSA) 4530 4957 G2frame.dataDisplay.Bind(wx.aui.EVT_AUINOTEBOOK_PAGE_CHANGED, OnPageChanged) 4531 4958 4532 4959 G2gd.SetDataMenuBar(G2frame,G2frame.dataFrame.DataGeneral) 4533 SetupGeneral() # this is done all over the place (including in 4534 # UpdateGeneral). Why here too? 4960 SetupGeneral() 4535 4961 4536 4962 GeneralData = data['General']
Note: See TracChangeset
for help on using the changeset viewer.