Changeset 855
- Timestamp:
- Feb 23, 2013 9:58:47 PM (10 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIconstrGUI.py
r854 r855 967 967 sel = Obj.GetValue() 968 968 rbData['rbRef'][iref] = atNames.index(sel) 969 FillRefChoice(rbId,rbData) 969 970 970 971 refAtmSizer = wx.BoxSizer(wx.HORIZONTAL) … … 1086 1087 choiceIds = [i for i in range(len(rbData['rbTypes']))] 1087 1088 1088 rbRef = rbData.get('rbRef',[ 0,1,2,False])1089 rbRef = rbData.get('rbRef',[-1,-1,-1,False]) 1089 1090 for i in range(3): 1090 1091 choiceIds.remove(rbRef[i]) … … 1124 1125 AtInfo = data['Residue']['AtInfo'] 1125 1126 refChoice = {} 1127 RefObjs = [] 1126 1128 1127 1129 def rbNameSizer(rbId,rbData): … … 1200 1202 def OnRefSel(event): 1201 1203 Obj = event.GetEventObject() 1202 iref,res = Indx[Obj.GetId()]1204 iref,res,jref = Indx[Obj.GetId()] 1203 1205 sel = Obj.GetValue() 1204 1206 ind = atNames.index(sel) 1205 1207 rbData['rbRef'][iref] = ind 1208 FillRefChoice(rbId,rbData) 1209 for i,ref in enumerate(RefObjs[jref]): 1210 ref.SetItems([atNames[j] for j in refChoice[rbId][i]]) 1211 ref.SetValue(atNames[rbData['rbRef'][i]]) 1206 1212 if not iref: #origin change 1207 1213 rbXYZ = rbData['rbXYZ'] … … 1253 1259 refAtmSizer.Add(wx.StaticText(ResidueRBDisplay,-1, 1254 1260 'Orientation reference atoms A-B-C: '),0,wx.ALIGN_CENTER_VERTICAL) 1261 refObj = [0,0,0] 1255 1262 for i in range(3): 1256 1263 choices = [atNames[j] for j in refChoice[rbId][i]] … … 1259 1266 refSel.SetValue(atNames[rbRef[i]]) 1260 1267 refSel.Bind(wx.EVT_COMBOBOX, OnRefSel) 1261 Indx[refSel.GetId()] = [i,vecGrid] 1268 Indx[refSel.GetId()] = [i,vecGrid,len(RefObjs)] 1269 refObj[i] = refSel 1262 1270 refAtmSizer.Add(refSel,0,wx.ALIGN_CENTER_VERTICAL) 1271 RefObjs.append(refObj) 1263 1272 1264 1273 mainSizer = wx.BoxSizer(wx.VERTICAL) -
trunk/GSASIIgrid.py
r852 r855 1256 1256 self.RigidBodiesEdit = wx.Menu(title='') 1257 1257 self.RigidBodiesMenu.Append(menu=self.RigidBodiesEdit, title='Edit') 1258 self.RigidBodiesEdit.Append(id=wxID_ASSIGNATMS2RB, kind=wx.ITEM_NORMAL,text='Assign atoms to rigid body', 1259 help='Select & position rigid body in structure of existing atoms') 1258 1260 self.RigidBodiesEdit.Append(id=wxID_AUTOFINDRESRB, kind=wx.ITEM_NORMAL,text='Auto find residues', 1259 1261 help='Auto find of residue RBs in macromolecule') 1260 self.RigidBodiesEdit.Append(id=wxID_ASSIGNATMS2RB, kind=wx.ITEM_NORMAL,text='Assign atoms to rigid body',1261 help='Select & position rigid body in structure for existing atoms')1262 1262 self.RigidBodiesEdit.Append(id=wxID_GLOBALRESREFINE, kind=wx.ITEM_NORMAL,text='Global residue refine', 1263 1263 help='Global setting of residue RB refinement flags') -
trunk/GSASIImath.py
r853 r855 197 197 XYZ.append([parmDict[name]+parmDict[dname] for name,dname in zip(names,dnames)]) 198 198 return XYZ 199 200 def GetXYZDist(xyz,XYZ,Amat): 201 ''' gets distance from position xyz to all XYZ, xyz & XYZ are np.array 202 and are in crystal coordinates; Amat is crystal to Cart matrix 203 ''' 204 return np.sqrt(np.sum(np.inner(Amat,XYZ-xyz)**2,axis=0)) 205 206 def getAtomXYZ(atoms,cx): 207 XYZ = [] 208 for atom in atoms: 209 XYZ.append(atom[cx:cx+3]) 210 return np.array(XYZ) 199 211 200 212 def UpdateResRBAtoms(Bmat,RBObj,RBData): -
trunk/GSASIIphsGUI.py
r854 r855 753 753 vecRBData = data['RBModels'].get('Vector',[]) 754 754 rbAtmDict = {} 755 for rbObj in resRBData :755 for rbObj in resRBData+vecRBData: 756 756 exclList = ['X' for i in range(len(rbObj['Ids']))] 757 757 rbAtmDict.update(dict(zip(rbObj['Ids'],exclList))) … … 1538 1538 if 'Quaternion' not in drawingData: 1539 1539 drawingData['Quaternion'] = G2mth.AV2Q(2*np.pi,np.inner(Amat,[0,0,1])) 1540 if 'showRigidBodies' not in drawingData: 1541 drawingData['showRigidBodies'] = True 1540 1542 cx,ct,cs,ci = [0,0,0,0] 1541 1543 if generalData['Type'] == 'nuclear': … … 1640 1642 rbXYZ -= rbXYZ[0] 1641 1643 rbId = ran.randint(0,sys.maxint) 1642 RBData['Residue'][rbId] = {'RBname':'UNKRB','rbXYZ':rbXYZ,'rbTypes':rbType, 1644 rbName = 'UNKRB' 1645 dlg = wx.TextEntryDialog(G2frame,'Enter the name for the new rigid body', 1646 'Edit rigid body name',rbName ,style=wx.OK) 1647 if dlg.ShowModal() == wx.ID_OK: 1648 rbName = dlg.GetValue() 1649 dlg.Destroy() 1650 RBData['Residue'][rbId] = {'RBname':rbName,'rbXYZ':rbXYZ,'rbTypes':rbType, 1643 1651 'atNames':atNames,'rbRef':[0,1,2,False],'rbSeq':[],'SelSeq':[0,0],'useCount':0} 1644 1652 G2frame.dataFrame.SetStatusText('New rigid body UNKRB added to set of Residue rigid bodies') … … 2546 2554 G2plt.PlotStructure(G2frame,data) 2547 2555 2556 def OnShowRB(event): 2557 drawingData['showRigidBodies'] = showRB.GetValue() 2558 FindBondsDraw() 2559 G2plt.PlotStructure(G2frame,data) 2560 2548 2561 def OnViewPoint(event): 2549 2562 Obj = event.GetEventObject() … … 2621 2634 showHydrogen.SetValue(drawingData['showHydrogen']) 2622 2635 line2Sizer.Add(showHydrogen,0,wx.ALIGN_CENTER_VERTICAL) 2636 2637 showRB = wx.CheckBox(dataDisplay,-1,label=' Show rigid Bodies?') 2638 showRB.Bind(wx.EVT_CHECKBOX, OnShowRB) 2639 showRB.SetValue(drawingData['showRigidBodies']) 2640 line2Sizer.Add(showRB,0,wx.ALIGN_CENTER_VERTICAL) 2641 2623 2642 showSizer.Add(line2Sizer) 2624 2643 return showSizer … … 3030 3049 Amat,Bmat = G2lat.cell2AB(general['Cell'][1:7]) 3031 3050 RBData = G2frame.PatternTree.GetItemPyData( 3032 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) ['Residue']3051 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) 3033 3052 Indx = {} 3034 3053 … … 3053 3072 val = float(Obj.GetValue()) 3054 3073 RBObj['Torsions'][item][0] = val 3055 newXYZ = G2mth.UpdateResRBAtoms(Bmat,RBObj,RBData )3074 newXYZ = G2mth.UpdateResRBAtoms(Bmat,RBObj,RBData['Residue']) 3056 3075 for i,id in enumerate(RBObj['Ids']): 3057 3076 data['Atoms'][AtLookUp[id]][cx:cx+3] = newXYZ[i] … … 3064 3083 G2plt.PlotStructure(G2frame,data) 3065 3084 3066 def OnDelRB(event): 3067 RBId = RBObj['RBId'] 3068 RBData[RBId]['useCount'] -= 1 3069 del RBObj 3085 def OnDelResRB(event): 3086 Obj = event.GetEventObject() 3087 RBId = Indx[Obj.GetId()] 3088 RBData['Residue'][RBId]['useCount'] -= 1 3089 RBObjs = data['RBModels']['Residue'] 3090 for rbObj in RBObjs: 3091 if RBId == rbObj['RBId']: 3092 data['RBModels']['Residue'].remove(rbObj) 3093 G2plt.PlotStructure(G2frame,data) 3070 3094 wx.CallAfter(FillRigidBodyGrid,True) 3095 3096 def OnThermSel(event): 3097 val = thermSel.GetValue() 3098 RBObj['ThermalMotion'] = ['None',[],[]] 3099 if val == 'Uiso': 3100 RBObj['ThermalMotion'] = ['Uiso',[0.01,],[False,]] 3101 elif val == 'T': 3102 RBObj['ThermalMotion'] = ['T',[0.0 for i in range(6)],[False for i in range(6)]] 3103 elif val == 'TL': 3104 RBObj['ThermalMotion'] = ['TL',[0.0 for i in range(12)],[False for i in range(12)]] 3105 elif val == 'TLS': 3106 RBObj['ThermalMotion'] = ['TLS',[0.0 for i in range(20)],[False for i in range(20)]] #SAA = S33-S11 & SBB = S22-S33 3107 wx.CallAfter(FillRigidBodyGrid,True) 3108 3109 def ThermDataSizer(): 3110 3111 def OnThermval(event): 3112 Obj = event.GetEventObject() 3113 item = Indx[Obj.GetId()] 3114 try: 3115 val = float(Obj.GetValue()) 3116 RBObj['ThermalMotion'][1][item] = val 3117 except ValueError: 3118 pass 3119 Obj.SetValue('%8.4f'%(RBObj['ThermalMotion'][1][item])) 3120 G2plt.PlotStructure(G2frame,data) 3121 3122 def OnTLSRef(event): 3123 Obj = event.GetEventObject() 3124 item = Indx[Obj.GetId()] 3125 RBObj['ThermalMotion'][2][item] = Obj.GetValue() 3126 3127 thermSizer = wx.FlexGridSizer(1,9,5,5) 3128 model = RBObj['ThermalMotion'] 3129 if model[0] == 'Uiso': 3130 names = ['Uiso',] 3131 elif 'T' in model[0]: 3132 names = ['T11','T22','T33','T12','T13','T23'] 3133 if 'L' in model[0]: 3134 names += ['L11','L22','L33','L12','L13','L23'] 3135 if 'S' in model[0]: 3136 names += ['S12','S13','S21','S23','S31','S32','SAA','SBB'] 3137 for i,name in enumerate(names): 3138 thermSizer.Add(wx.StaticText(RigidBodies,-1,name+': '),0,wx.ALIGN_CENTER_VERTICAL) 3139 thermVal = wx.TextCtrl(RigidBodies,-1,value='%8.4f'%(model[1][i]), 3140 style=wx.TE_PROCESS_ENTER) 3141 thermVal.Bind(wx.EVT_TEXT_ENTER,OnThermval) 3142 thermVal.Bind(wx.EVT_KILL_FOCUS,OnThermval) 3143 Indx[thermVal.GetId()] = i 3144 thermSizer.Add(thermVal) 3145 Tcheck = wx.CheckBox(RigidBodies,-1,'Refine?') 3146 Tcheck.Bind(wx.EVT_CHECKBOX,OnTLSRef) 3147 Tcheck.SetValue(model[2][i]) 3148 Indx[Tcheck.GetId()] = i 3149 thermSizer.Add(Tcheck,0,wx.ALIGN_CENTER_VERTICAL) 3150 return thermSizer 3071 3151 3072 3152 resrbSizer = wx.BoxSizer(wx.VERTICAL) … … 3075 3155 topLine.Add(wx.StaticText(RigidBodies,-1, 3076 3156 'Name: '+RBObj['RBname']+RBObj['numChain']+' '),0,wx.ALIGN_CENTER_VERTICAL) 3157 rbId = RBObj['RBId'] 3077 3158 delRB = wx.CheckBox(RigidBodies,-1,'Delete?') 3078 delRB.Bind(wx.EVT_CHECKBOX,OnDelRB) 3159 delRB.Bind(wx.EVT_CHECKBOX,OnDelResRB) 3160 Indx[delRB.GetId()] = rbId 3079 3161 topLine.Add(delRB,0,wx.ALIGN_CENTER_VERTICAL) 3080 3162 resrbSizer.Add(topLine) … … 3083 3165 Orien = RBObj['Orient'][0] 3084 3166 topSizer.Add(wx.StaticText(RigidBodies,-1, 3085 ' 3167 '%s %8.5f %8.5f %8.5f'%( 'Origin :',Orig[0],Orig[1],Orig[2]))) 3086 3168 Ocheck = wx.CheckBox(RigidBodies,-1,'Refine?') 3087 3169 Ocheck.Bind(wx.EVT_CHECKBOX,OnOrigRef) … … 3089 3171 topSizer.Add(Ocheck,0,wx.ALIGN_CENTER_VERTICAL) 3090 3172 topSizer.Add(wx.StaticText(RigidBodies,-1, 3091 ' 3173 '%s %8.5f %8.5f %8.5f %8.5f Refine?'%('Orientation:',Orien[0], \ 3092 3174 Orien[1],Orien[2],Orien[3])),0,wx.ALIGN_CENTER_VERTICAL) 3093 3175 Qcheck = wx.ComboBox(RigidBodies,-1,value='',choices=[' ','A','Q'], 3094 3176 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3095 Qcheck.Bind(wx.EVT_C HECKBOX,OnOrienRef)3177 Qcheck.Bind(wx.EVT_COMBOBOX,OnOrienRef) 3096 3178 Qcheck.SetValue(RBObj['Orient'][1]) 3097 3179 topSizer.Add(Qcheck) 3098 3180 resrbSizer.Add(topSizer) 3099 resrbSizer.Add(wx.StaticText(RigidBodies,-1,' 3181 resrbSizer.Add(wx.StaticText(RigidBodies,-1,'Torsions:'),0,wx.ALIGN_CENTER_VERTICAL) 3100 3182 torSizer = wx.FlexGridSizer(1,6,5,5) 3101 3183 for itors,tors in enumerate(RBObj['Torsions']): … … 3112 3194 torSizer.Add(torCheck,0,wx.ALIGN_CENTER_VERTICAL) 3113 3195 resrbSizer.Add(torSizer) 3114 return resrbSizer 3196 tchoice = ['None','Uiso','T','TL','TLS'] 3197 thermSizer = wx.BoxSizer(wx.HORIZONTAL) 3198 thermSizer.Add(wx.StaticText(RigidBodies,-1,'Rigid body thermal motion model: '),0,wx.ALIGN_CENTER_VERTICAL) 3199 thermSel = wx.ComboBox(RigidBodies,-1,value=RBObj['ThermalMotion'][0],choices=tchoice, 3200 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3201 thermSel.Bind(wx.EVT_COMBOBOX,OnThermSel) 3202 thermSizer.Add(thermSel,0,wx.ALIGN_CENTER_VERTICAL) 3203 resrbSizer.Add(thermSizer) 3204 if RBObj['ThermalMotion'][0] != 'None': 3205 resrbSizer.Add(ThermDataSizer()) 3206 return resrbSizer 3207 3208 def VecrbSizer(RBObj): 3209 3210 def OnOrigRef(event): 3211 RBObj['Orig'][1] = Ocheck.GetValue() 3212 3213 def OnOrienRef(event): 3214 RBObj['Orient'][1] = Qcheck.GetValue() 3215 Qcheck.Setvalue(RBObj['Orient'][1]) 3216 3217 def OnDelVecRB(event): 3218 Obj = event.GetEventObject() 3219 RBId = Indx[Obj.GetId()] 3220 RBData['Vector'][RBId]['useCount'] -= 1 3221 RBObjs = data['RBModels']['Vector'] 3222 for rbObj in RBObjs: 3223 if RBId == rbObj['RBId']: 3224 data['RBModels']['Vector'].remove(rbObj) 3225 G2plt.PlotStructure(G2frame,data) 3226 wx.CallAfter(FillRigidBodyGrid,True) 3227 3228 vecrbSizer = wx.BoxSizer(wx.VERTICAL) 3229 vecrbSizer.Add(wx.StaticText(RigidBodies,-1,120*'-')) 3230 topLine = wx.BoxSizer(wx.HORIZONTAL) 3231 topLine.Add(wx.StaticText(RigidBodies,-1, 3232 'Name: '+RBObj['RBname']+' '),0,wx.ALIGN_CENTER_VERTICAL) 3233 rbId = RBObj['RBId'] 3234 delRB = wx.CheckBox(RigidBodies,-1,'Delete?') 3235 delRB.Bind(wx.EVT_CHECKBOX,OnDelVecRB) 3236 Indx[delRB.GetId()] = rbId 3237 topLine.Add(delRB,0,wx.ALIGN_CENTER_VERTICAL) 3238 vecrbSizer.Add(topLine) 3239 topSizer = wx.FlexGridSizer(2,2,5,5) 3240 Orig = RBObj['Orig'][0] 3241 Orien = RBObj['Orient'][0] 3242 topSizer.Add(wx.StaticText(RigidBodies,-1, 3243 '%s %8.5f %8.5f %8.5f'%( 'Origin :',Orig[0],Orig[1],Orig[2]))) 3244 Ocheck = wx.CheckBox(RigidBodies,-1,'Refine?') 3245 Ocheck.Bind(wx.EVT_CHECKBOX,OnOrigRef) 3246 Ocheck.SetValue(RBObj['Orig'][1]) 3247 topSizer.Add(Ocheck,0,wx.ALIGN_CENTER_VERTICAL) 3248 topSizer.Add(wx.StaticText(RigidBodies,-1, 3249 '%s %8.5f %8.5f %8.5f %8.5f Refine?'%('Orientation:',Orien[0], \ 3250 Orien[1],Orien[2],Orien[3])),0,wx.ALIGN_CENTER_VERTICAL) 3251 Qcheck = wx.ComboBox(RigidBodies,-1,value='',choices=[' ','A','Q'], 3252 style=wx.CB_READONLY|wx.CB_DROPDOWN) 3253 Qcheck.Bind(wx.EVT_COMBOBOX,OnOrienRef) 3254 Qcheck.SetValue(RBObj['Orient'][1]) 3255 topSizer.Add(Qcheck) 3256 vecrbSizer.Add(topSizer) 3257 return vecrbSizer 3115 3258 3116 3259 G2frame.dataFrame.SetStatusText('') … … 3126 3269 for RBObj in data['RBModels']['Residue']: 3127 3270 mainSizer.Add(ResrbSizer(RBObj)) 3271 if 'Vector' in data['RBModels']: 3272 mainSizer.Add((5,5),0) 3273 mainSizer.Add(wx.StaticText(RigidBodies,-1,'Vector rigid bodies:'),0,wx.ALIGN_CENTER_VERTICAL) 3274 mainSizer.Add((5,5),0) 3275 for RBObj in data['RBModels']['Vector']: 3276 mainSizer.Add(VecrbSizer(RBObj)) 3128 3277 3129 3278 RigidBodies.SetSizer(mainSizer) … … 3139 3288 def OnRBAssign(event): 3140 3289 3141 rbData = G2frame.PatternTree.GetItemPyData(3290 RBData = G2frame.PatternTree.GetItemPyData( 3142 3291 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) 3143 3292 rbNames = {} 3144 for rbVec in rbData['Vector']:3293 for rbVec in RBData['Vector']: 3145 3294 if rbVec != 'AtInfo': 3146 rbNames[ rbData['Vector'][rbVec]['RBname']] =['Vector',rbVec]3147 for rbRes in rbData['Residue']:3295 rbNames[RBData['Vector'][rbVec]['RBname']] =['Vector',rbVec] 3296 for rbRes in RBData['Residue']: 3148 3297 if rbRes != 'AtInfo': 3149 rbNames[ rbData['Residue'][rbRes]['RBname']] = ['Residue',rbRes]3298 rbNames[RBData['Residue'][rbRes]['RBname']] = ['Residue',rbRes] 3150 3299 if not rbNames: 3151 3300 print '**** ERROR - no rigid bodies defined ****' … … 3162 3311 3163 3312 def OnOk(event): 3164 #more stuff here substituting rigid body for atoms 3313 rbType = data['testRBObj']['rbType'] 3314 RBObjs = data['RBModels'].get(rbType,[]) 3315 rbObj = data['testRBObj']['rbObj'] 3316 rbId = rbObj['RBId'] 3317 newXYZ = G2mth.UpdateRBAtoms(Bmat,rbObj,RBData,rbType) 3318 Ids = [] 3319 oldXYZ = G2mth.getAtomXYZ(atomData,cx) 3320 for xyz in newXYZ: 3321 dist = G2mth.GetXYZDist(xyz,oldXYZ,Amat) 3322 id = np.argmin(dist) 3323 Ids.append(atomData[id][-1]) 3324 atomData[id][cx:cx+3] = xyz 3325 rbObj['Ids'] = Ids 3326 rbObj['ThermalMotion'] = ['None',[],[]] #type,values,flags 3327 RBObjs.append(rbObj) 3328 data['RBModels'][rbType] = RBObjs 3329 RBData[rbType][rbId]['useCount'] += 1 3165 3330 del data['testRBObj'] 3331 G2plt.PlotStructure(G2frame,data) 3166 3332 FillRigidBodyGrid(True) 3167 3333 … … 3173 3339 selection = rbSel.GetValue() 3174 3340 rbType,rbId = rbNames[selection] 3175 data['testRBObj']['rbAtTypes'] = rbData[rbType][rbId]['rbTypes']3176 data['testRBObj']['AtInfo'] = rbData[rbType]['AtInfo']3341 data['testRBObj']['rbAtTypes'] = RBData[rbType][rbId]['rbTypes'] 3342 data['testRBObj']['AtInfo'] = RBData[rbType]['AtInfo'] 3177 3343 data['testRBObj']['rbType'] = rbType 3178 data['testRBObj']['rbData'] = rbData3344 data['testRBObj']['rbData'] = RBData 3179 3345 data['testRBObj']['Sizers'] = {} 3180 rbRef = rbData[rbType][rbId]['rbRef']3346 rbRef = RBData[rbType][rbId]['rbRef'] 3181 3347 data['testRBObj']['rbRef'] = rbRef 3182 3348 refType = [] … … 3186 3352 refType.append(reftype) 3187 3353 refName.append(reftype+' '+str(rbRef[0])) 3354 atNames,AtNames = fillAtNames(refType,atomData,ct) 3355 data['testRBObj']['atNames'] = atNames 3356 data['testRBObj']['AtNames'] = AtNames 3357 data['testRBObj']['rbObj'] = {'Orig':[[0,0,0],False], 3358 'Orient':[[0,0,0,1.],' '],'Ids':[],'RBId':rbId,'Torsions':[], 3359 'numChain':'','RBname':RBData[rbType][rbId]['RBname']} 3360 data['testRBObj']['torAtms'] = [] 3361 for item in RBData[rbType][rbId].get('rbSeq',[]): 3362 data['testRBObj']['rbObj']['Torsions'].append([item[2],False]) 3363 data['testRBObj']['torAtms'].append([-1,-1,-1]) 3364 Draw() 3365 3366 def fillAtNames(refType,atomData,ct): 3188 3367 atNames = [{},{},{}] 3189 3368 AtNames = {} … … 3193 3372 if atom[ct] == reftype: 3194 3373 atNames[i][atom[ct-1]] = iatm 3195 data['testRBObj']['atNames'] = atNames 3196 data['testRBObj']['AtNames'] = AtNames 3197 data['testRBObj']['rbObj'] = {'Orig':[[0,0,0],False],'Orient':[[0,0,0,1.],' '], 3198 'RBId':rbId,'Torsions':[],'numChain':'','RBname':rbData[rbType][rbId]['RBname']} 3199 data['testRBObj']['torAtms'] = [] 3200 for item in rbData[rbType][rbId].get('rbSeq',[]): 3201 data['testRBObj']['rbObj']['Torsions'].append([item[2],False]) 3202 data['testRBObj']['torAtms'].append([-1,-1,-1]) 3203 Draw() 3374 return atNames,AtNames 3204 3375 3205 3376 def OnOrigX(event): … … 3238 3409 rbId = rbObj['RBId'] 3239 3410 rbRef = data['testRBObj']['rbRef'] 3240 rbXYZ = - rbData[rbType][rbId]['rbXYZ']3411 rbXYZ = -RBData[rbType][rbId]['rbXYZ'] 3241 3412 nref = atNames[item][atName] 3242 3413 Oxyz = np.inner(Bmat,np.array(rbXYZ[rbRef[0]])) … … 3256 3427 rbId = rbObj['RBId'] 3257 3428 rbRef = data['testRBObj']['rbRef'] 3258 rbXYZ = rbData[rbType][rbId]['rbXYZ']3429 rbXYZ = RBData[rbType][rbId]['rbXYZ'] 3259 3430 rbOrig = rbXYZ[rbRef[0]] 3260 3431 VAR = rbXYZ[rbRef[1]]-rbOrig … … 3281 3452 def OnTorAngle(event): 3282 3453 Obj = event.GetEventObject() 3283 tor= Indx[Obj.GetId()]3454 [tor,torSlide] = Indx[Obj.GetId()] 3284 3455 Tors = data['testRBObj']['rbObj']['Torsions'][tor] 3285 3456 try: 3286 value = Obj.GetValue()3457 value = float(Obj.GetValue()) 3287 3458 except ValueError: 3288 3459 value = Tors[0] 3289 3460 Tors[0] = value 3290 3461 Obj.SetValue('%8.3f'%(value)) 3462 torSlide.SetValue(int(value*10)) 3291 3463 G2plt.PlotStructure(G2frame,data) 3292 3293 def OnTor AtPick(event):3464 3465 def OnTorSlide(event): 3294 3466 Obj = event.GetEventObject() 3295 tor,ind = Indx[Obj.GetId()] 3296 atName = Obj.GetValue() 3297 data['testRBObj']['torAtms'][tor][ind] = AtNames[atName] 3298 if all([i > -1 for i in data['testRBObj']['torAtms'][tor]]): 3299 rbObj = data['testRBObj']['rbObj'] 3300 rbId = rbObj['RBId'] 3301 rbXYZ = rbData['Residue'][rbId]['rbXYZ'] 3302 Oatm,Patm,Ratm = data['testRBObj']['torAtms'][tor] 3303 Seq = rbData['Residue'][rbId]['rbSeq'][tor] 3304 Tors = data['testRBObj']['rbObj']['Torsions'][tor] 3305 VBR = rbXYZ[Oatm]-rbXYZ[Patm] 3306 VAR = rbXYZ[Ratm]-rbXYZ[Patm] 3307 VAC = np.inner(Amat,atomData[Seq[3][0]][cx:cx+3])-np.inner(Amat,atomData[Seq[1]][cx:cx+3]) 3308 QuatA,D = G2mth.makeQuat(VAR,VAC,VBR) 3309 angle = 180.*D/np.pi 3310 Tors[0] = angle 3467 tor,ang = Indx[Obj.GetId()] 3468 Tors = data['testRBObj']['rbObj']['Torsions'][tor] 3469 val = float(Obj.GetValue())/10. 3470 Tors[0] = val 3471 ang.SetValue('%8.3f'%(val)) 3311 3472 G2plt.PlotStructure(G2frame,data) 3312 Draw()3313 3473 3314 3474 if len(data['testRBObj']): … … 3318 3478 mainSizer = wx.BoxSizer(wx.VERTICAL) 3319 3479 mainSizer.Add((5,5),0) 3320 mainSizer.Add(wx.StaticText(RigidBodies,-1,'Assign rigid body:'),0,wx.ALIGN_CENTER_VERTICAL)3321 mainSizer.Add((5,5),0)3322 3480 if data['testRBObj']: 3323 3481 Xsizers = [] … … 3325 3483 OriSizer = wx.FlexGridSizer(1,6,5,5) 3326 3484 rbObj = data['testRBObj']['rbObj'] 3485 rbName = rbObj['RBname'] 3327 3486 rbId = rbObj['RBId'] 3328 3487 Orig = rbObj['Orig'][0] … … 3334 3493 refName.append(data['testRBObj']['rbAtTypes'][ref]+str(ref)) 3335 3494 atNames = data['testRBObj']['atNames'] 3495 mainSizer.Add(wx.StaticText(RigidBodies,-1,'Locate rigid body : '+rbName), 3496 0,wx.ALIGN_CENTER_VERTICAL) 3497 mainSizer.Add((5,5),0) 3336 3498 OriSizer.Add(wx.StaticText(RigidBodies,-1,'Origin x,y,z: '),0,wx.ALIGN_CENTER_VERTICAL) 3337 3499 for ix,x in enumerate(Orig): … … 3343 3505 Xsizers.append(origX) 3344 3506 if len(atomData): 3507 choice = atNames[0].keys() 3508 choice.sort() 3345 3509 OriSizer.Add(wx.StaticText(RigidBodies,-1,'Select match to '+refName[0]+': '),0,wx.ALIGN_CENTER_VERTICAL) 3346 3510 atPick = wx.ComboBox(RigidBodies,-1,value=atomData[atInd[0]][ct-1], 3347 choices= atNames[0].keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN)3511 choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN) 3348 3512 atPick.Bind(wx.EVT_COMBOBOX, OnAtOrigPick) 3349 3513 Indx[atPick.GetId()] = 0 … … 3366 3530 OriSizer.Add(wx.StaticText(RigidBodies,-1,'Orientation setting: '),0,wx.ALIGN_CENTER_VERTICAL) 3367 3531 for i in [1,2]: 3532 choice = atNames[i].keys() 3533 choice.sort() 3368 3534 OriSizer.Add(wx.StaticText(RigidBodies,-1,'Select match to '+refName[i]+': '),0,wx.ALIGN_CENTER_VERTICAL) 3369 3535 atPick = wx.ComboBox(RigidBodies,-1,value=atomData[atInd[i]][ct-1], 3370 choices= atNames[i].keys(),style=wx.CB_READONLY|wx.CB_DROPDOWN)3536 choices=choice,style=wx.CB_READONLY|wx.CB_DROPDOWN) 3371 3537 atPick.Bind(wx.EVT_COMBOBOX, OnAtQPick) 3372 3538 Indx[atPick.GetId()] = i … … 3374 3540 mainSizer.Add(OriSizer) 3375 3541 mainSizer.Add((5,5),0) 3376 if Torsions: 3542 if Torsions: 3377 3543 AtNames = data['testRBObj']['AtNames'] 3378 3544 rbAtTypes = data['testRBObj']['rbAtTypes'] 3379 TorSizer = wx.FlexGridSizer(1,9,5,5)3380 Tor Atms = data['testRBObj']['torAtms']3381 rbSeq = rbData['Residue'][rbId]['rbSeq']3545 rbSeq = RBData['Residue'][rbId]['rbSeq'] 3546 TorSizer = wx.FlexGridSizer(1,4) 3547 TorSizer.AddGrowableCol(1,1) 3382 3548 for t,[torsion,seq] in enumerate(zip(Torsions,rbSeq)): 3383 torName = []3549 torName = '' 3384 3550 for item in [seq[0],seq[1],seq[3][0]]: 3385 torName.append(data['testRBObj']['rbAtTypes'][item]+str(item)) 3386 TorSizer.Add(wx.StaticText(RigidBodies,-1,'Side chain torsion: Select match to:'),0,wx.ALIGN_CENTER_VERTICAL) 3387 for i,item in enumerate([seq[0],seq[1],seq[3][0]]): 3388 atChoice = [] 3389 for at in AtNames.keys(): 3390 if rbAtTypes[item] in at: 3391 atChoice.append(at) 3392 Value = '' 3393 if TorAtms[t][i] > -1: 3394 Value = atomData[TorAtms[t][i]][ct-1] 3395 TorSizer.Add(wx.StaticText(RigidBodies,-1,torName[i]),0,wx.ALIGN_CENTER_VERTICAL) 3396 torPick = wx.ComboBox(RigidBodies,-1,value=Value, 3397 choices=atChoice,style=wx.CB_READONLY|wx.CB_DROPDOWN) 3398 torPick.Bind(wx.EVT_COMBOBOX,OnTorAtPick) 3399 Indx[torPick.GetId()] = [t,i] 3400 TorSizer.Add(torPick,0,wx.ALIGN_CENTER_VERTICAL) 3551 torName += data['testRBObj']['rbAtTypes'][item]+str(item)+' ' 3552 TorSizer.Add(wx.StaticText(RigidBodies,-1,'Side chain torsion for rb seq: '+torName),0,wx.ALIGN_CENTER_VERTICAL) 3553 torSlide = wx.Slider(RigidBodies,style=wx.SL_HORIZONTAL) 3554 torSlide.SetRange(0,3600) 3555 torSlide.SetValue(int(torsion[0]*10.)) 3556 torSlide.Bind(wx.EVT_SLIDER, OnTorSlide) 3557 TorSizer.Add(torSlide,1,wx.EXPAND|wx.RIGHT) 3401 3558 TorSizer.Add(wx.StaticText(RigidBodies,-1,' Angle: '),0,wx.ALIGN_CENTER_VERTICAL) 3402 3559 ang = wx.TextCtrl(RigidBodies,-1,value='%8.3f'%(torsion[0]),style=wx.TE_PROCESS_ENTER) 3403 3560 ang.Bind(wx.EVT_TEXT_ENTER,OnTorAngle) 3404 3561 ang.Bind(wx.EVT_KILL_FOCUS,OnTorAngle) 3405 Indx[ ang.GetId()] = t3406 TorSizer.Add(ang,0,wx.ALIGN_CENTER_VERTICAL)3407 3408 mainSizer.Add(TorSizer )3562 Indx[torSlide.GetId()] = [t,ang] 3563 Indx[ang.GetId()] = [t,torSlide] 3564 TorSizer.Add(ang,0,wx.ALIGN_CENTER_VERTICAL) 3565 mainSizer.Add(TorSizer,1,wx.EXPAND|wx.RIGHT) 3409 3566 else: 3410 3567 mainSizer.Add(wx.StaticText(RigidBodies,-1,'No side chain torsions'),0,wx.ALIGN_CENTER_VERTICAL) 3411 3568 else: 3569 mainSizer.Add(wx.StaticText(RigidBodies,-1,'Assign rigid body:'),0,wx.ALIGN_CENTER_VERTICAL) 3570 mainSizer.Add((5,5),0) 3412 3571 topSizer = wx.BoxSizer(wx.HORIZONTAL) 3413 3572 topSizer.Add(wx.StaticText(RigidBodies,-1,'Select rigid body model'),0,wx.ALIGN_CENTER_VERTICAL) … … 3441 3600 def OnAutoFindResRB(event): 3442 3601 RBData = G2frame.PatternTree.GetItemPyData( 3443 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) ['Residue']3444 rbKeys = RBData .keys()3602 G2gd.GetPatternTreeItemId(G2frame,G2frame.root,'Rigid bodies')) 3603 rbKeys = RBData['Residue'].keys() 3445 3604 rbKeys.remove('AtInfo') 3446 3605 if not len(rbKeys): 3447 3606 print '**** ERROR - no residue rigid bodies are defined ****' 3448 3607 return 3449 RBNames = [RBData[ k]['RBname'] for k in rbKeys]3608 RBNames = [RBData['Residue'][k]['RBname'] for k in rbKeys] 3450 3609 RBIds = dict(zip(RBNames,rbKeys)) 3451 3610 general = data['General'] … … 3471 3630 iatm += 1 3472 3631 continue #skip for OXT, water molecules, etc. 3473 rbRes = RBData[ RBIds[res]]3632 rbRes = RBData['Residue'][RBIds[res]] 3474 3633 rbRef = rbRes['rbRef'] 3475 3634 VAR = rbRes['rbXYZ'][rbRef[1]]-rbRes['rbXYZ'][rbRef[0]] … … 3512 3671 for ride in Riders: 3513 3672 SXYZ[ride] = G2mth.prodQVQ(QuatA,SXYZ[ride]-SXYZ[Patm])+SXYZ[Patm] 3514 RBData[ RBIds[res]]['useCount'] += 13673 RBData['Residue'][RBIds[res]]['useCount'] += 1 3515 3674 RBObjs.append(rbObj) 3516 3675 data['RBModels']['Residue'] = RBObjs 3517 3676 for RBObj in RBObjs: 3518 newXYZ = G2mth.UpdateResRBAtoms(Bmat,RBObj,RBData )3677 newXYZ = G2mth.UpdateResRBAtoms(Bmat,RBObj,RBData['Residue']) 3519 3678 for i,id in enumerate(RBObj['Ids']): 3520 3679 data['Atoms'][AtLookUp[id]][cx:cx+3] = newXYZ[i] -
trunk/GSASIIplot.py
r854 r855 2611 2611 if len(mapPeaks): 2612 2612 peakMax = np.max(mapPeaks.T[0]) 2613 resRBData = data['RBModels'].get('Residue',[]) 2614 vecRBData = data['RBModels'].get('Vector',[]) 2615 rbAtmDict = {} 2616 for rbObj in resRBData+vecRBData: 2617 exclList = ['X' for i in range(len(rbObj['Ids']))] 2618 rbAtmDict.update(dict(zip(rbObj['Ids'],exclList))) 2613 2619 testRBObj = data.get('testRBObj',{}) 2614 2620 rbObj = testRBObj.get('rbObj',{}) … … 3360 3366 atNum = -1 3361 3367 CL = atom[cs+2] 3362 color = np.array(CL)/255. 3368 atColor = np.array(CL)/255. 3369 if drawingData['showRigidBodies'] and atom[ci] in rbAtmDict: 3370 bndColor = Or 3371 else: 3372 bndColor = atColor 3363 3373 if iat in Ind and G2frame.dataDisplay.GetPageText(getSelection()) != 'Map peaks': 3364 color = np.array(Gr)/255.3374 atColor = np.array(Gr)/255. 3365 3375 # color += [.25,] 3366 3376 radius = 0.5 … … 3388 3398 else: 3389 3399 radius = ballScale*generalData['BondRadii'][atNum] 3390 RenderSphere(x,y,z,radius, color)3400 RenderSphere(x,y,z,radius,atColor) 3391 3401 if 'sticks' in atom[cs]: 3392 RenderBonds(x,y,z,Bonds,bondR, color)3402 RenderBonds(x,y,z,Bonds,bondR,bndColor) 3393 3403 elif 'ellipsoids' in atom[cs]: 3394 RenderBonds(x,y,z,Bonds,bondR, color)3404 RenderBonds(x,y,z,Bonds,bondR,bndColor) 3395 3405 if atom[cs+3] == 'A': 3396 3406 Uij = atom[cs+5:cs+11] … … 3403 3413 pass 3404 3414 else: 3405 RenderEllipsoid(x,y,z,ellipseProb,E,R4, color)3415 RenderEllipsoid(x,y,z,ellipseProb,E,R4,atColor) 3406 3416 else: 3407 3417 if atom[ct] == 'H' and not drawingData['showHydrogen']: … … 3409 3419 else: 3410 3420 radius = ellipseProb*math.sqrt(abs(atom[cs+4])) 3411 RenderSphere(x,y,z,radius, color)3421 RenderSphere(x,y,z,radius,atColor) 3412 3422 elif 'lines' in atom[cs]: 3413 3423 radius = 0.1 3414 RenderLines(x,y,z,Bonds, color)3424 RenderLines(x,y,z,Bonds,bndColor) 3415 3425 # RenderBonds(x,y,z,Bonds,0.05,color,6) 3416 3426 elif atom[cs] == 'sticks': 3417 3427 radius = 0.1 3418 RenderBonds(x,y,z,Bonds,bondR, color)3428 RenderBonds(x,y,z,Bonds,bondR,bndColor) 3419 3429 elif atom[cs] == 'polyhedra': 3420 RenderPolyhedra(x,y,z,Faces, color)3430 RenderPolyhedra(x,y,z,Faces,atColor) 3421 3431 elif atom[cs] == 'backbone': 3422 3432 if atom[ct-1].split()[0] in ['C','N']: … … 3424 3434 Backbones[atom[2]] = [] 3425 3435 Backbones[atom[2]].append(list(np.inner(Amat,np.array([x,y,z])))) 3426 BackboneColor.append(list( color))3436 BackboneColor.append(list(atColor)) 3427 3437 3428 3438 if atom[cs+1] == 'type':
Note: See TracChangeset
for help on using the changeset viewer.