- Timestamp:
- Jun 27, 2011 12:11:26 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASIIindex.py ¶
r311 r312 230 230 else: 231 231 return False 232 233 def Values2A(ibrav,values): 234 if ibrav in [0,1,2]: 235 return [values[0],values[0],values[0],0,0,0] 236 elif ibrav in [3,4]: 237 return [values[0],values[0],values[1],values[0],0,0] 238 elif ibrav in [5,6]: 239 return [values[0],values[0],values[1],0,0,0] 240 elif ibrav in [7,8,9,10]: 241 return [values[0],values[1],values[2],0,0,0] 242 elif ibrav in [11,12]: 243 return [values[0],values[1],values[2],0,values[3],0] 244 else: 245 return list(values) 246 247 def A2values(ibrav,A): 248 if ibrav in [0,1,2]: 249 return [A[0],] 250 elif ibrav in [3,4,5,6]: 251 return [A[0],A[2]] 252 elif ibrav in [7,8,9,10]: 253 return [A[0],A[1],A[2]] 254 elif ibrav in [11,12]: 255 return [A[0],A[1],A[2],A[4]] 256 else: 257 return A 232 258 233 259 def FitHKL(ibrav,peaks,A,Pwr): 234 235 def Values2A(ibrav,values): 236 if ibrav in [0,1,2]: 237 return [values[0],values[0],values[0],0,0,0] 238 elif ibrav in [3,4]: 239 return [values[0],values[0],values[1],values[0],0,0] 240 elif ibrav in [5,6]: 241 return [values[0],values[0],values[1],0,0,0] 242 elif ibrav in [7,8,9,10]: 243 return [values[0],values[1],values[2],0,0,0] 244 elif ibrav in [11,12]: 245 return [values[0],values[1],values[2],0,values[3],0] 246 else: 247 return list(values) 248 249 def A2values(ibrav,A): 250 if ibrav in [0,1,2]: 251 return [A[0],] 252 elif ibrav in [3,4,5,6]: 253 return [A[0],A[2]] 254 elif ibrav in [7,8,9,10]: 255 return [A[0],A[1],A[2]] 256 elif ibrav in [11,12]: 257 return [A[0],A[1],A[2],A[4]] 258 else: 259 return A 260 261 def Jacobian(values,ibrav,d,H,Pwr): 262 # derivatives of rdsq = H[0]*H[0]*A[0]+H[1]*H[1]*A[1]+H[2]*H[2]*A[2]+H[0]*H[1]*A[3]+H[0]*H[2]*A[4]+H[1]*H[2]*A[5] 263 if ibrav in [0,1,2]: #m3m 264 return [H[0]*H[0]+H[1]*H[1]+H[2]*H[2],]*d**Pwr 265 elif ibrav in [3,4]: #R3H, P3/m & P6/mmm 266 return [H[0]*H[0]+H[1]*H[0]+H[1]*H[1],H[2]*H[2]]*d**Pwr 267 elif ibrav in [5,6]: #4/mmm 268 return [H[0]*H[0]+H[1]*H[1],H[2]*H[2]]*d**Pwr 269 elif ibrav in [7,8,9,10]: #mmm 270 return [H[0]*H[0],H[1]*H[1],H[2]*H[2]]*d**Pwr 271 elif ibrav in [11,12]: #2/m 272 return [H[0]*H[0],H[1]*H[1],H[2]*H[2],H[0]*H[2]]*d**Pwr 273 else: #-1 274 return [H[0]*H[0],H[1]*H[1],H[2]*H[2],H[1]*H[0],H[0]*H[2],H[1]*H[2]]*d**Pwr 275 260 276 261 def errFit(values,ibrav,d,H,Pwr): 277 262 A = Values2A(ibrav,values) … … 283 268 284 269 values = A2values(ibrav,A) 285 # result = so.leastsq(errFit,values,args=(ibrav,Peaks[7],Peaks[4:7],Pwr),286 # Dfun=Jacobian,col_deriv=True,full_output=True)287 270 result = so.leastsq(errFit,values,args=(ibrav,Peaks[7],Peaks[4:7],Pwr), 288 271 full_output=True,factor=0.1) … … 290 273 return True,np.sum(errFit(result[0],ibrav,Peaks[7],Peaks[4:7],Pwr)**2),A,result 291 274 292 def FitHKLZ(ibrav,peaks,Z,A): 293 return A,Z 294 275 def FitHKLZ(wave,ibrav,peaks,A,Z,Pwr): 276 277 def errFit(values,ibrav,d,H,tth,wave,Pwr): 278 A = Values2A(ibrav,values[:-1]) 279 Z = values[-1] 280 Qo = 1./d**2 281 Qc = G2lat.calc_rDsqZ(H,A,Z,tth,wave) 282 return (Qo-Qc)*d**Pwr 283 284 Peaks = np.array(peaks).T 285 286 values = A2values(ibrav,A) 287 values.append(Z) 288 result = so.leastsq(errFit,values,args=(ibrav,Peaks[7],Peaks[4:7],Peaks[0],wave,Pwr), 289 full_output=True) 290 A = Values2A(ibrav,result[0][:-1]) 291 Z = result[0][-1] 292 293 return True,np.sum(errFit(result[0],ibrav,Peaks[7],Peaks[4:7],Peaks[0],wave,Pwr)**2),A,Z,result 294 295 295 def rotOrthoA(A): 296 296 return [A[1],A[2],A[0],0,0,0] … … 333 333 return peaks[0][7] 334 334 335 def refinePeaks(peaks,ibrav,A,Zero): 336 #Zero is list(zero value, flag) 335 def refinePeaksZ(peaks,wave,ibrav,A,Zero): 336 dmin = getDmin(peaks) 337 OK,smin,Aref,Z,result = FitHKLZ(wave,ibrav,peaks,A,Zero,2) 338 Peaks = np.array(peaks).T 339 H = Peaks[4:7] 340 Peaks[8] = 1./np.sqrt(G2lat.calc_rDsqZ(H,Aref,Z,Peaks[0],wave)) 341 peaks = Peaks.T 342 343 HKL = G2lat.GenHBravais(dmin,ibrav,Aref) 344 M20,X20 = calc_M20(peaks,HKL) 345 return len(HKL),M20,X20,Aref,Z 346 347 def refinePeaks(peaks,ibrav,A): 337 348 dmin = getDmin(peaks) 338 349 smin = 1.0e10 339 350 pwr = 4 340 351 maxTries = 10 341 if ibrav == 13: #-1 - triclinic342 pwr = 4343 maxTries = 10344 352 OK = False 345 353 tries = 0 … … 376 384 377 385 M20,X20 = calc_M20(peaks,HKL) 378 return len(HKL),M20,X20,A ,Zero386 return len(HKL),M20,X20,A 379 387 380 388 def findBestCell(dlg,ncMax,A,Ntries,ibrav,peaks,V1): … … 405 413 406 414 if IndexPeaks(peaks,HKL) and len(HKL) > mHKL[ibrav]: 407 Lhkl,M20,X20,Aref ,Zero = refinePeaks(peaks,ibrav,Abeg,[0,False])415 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg) 408 416 Asave.append([calc_M20(peaks,HKL),Aref[:]]) 409 417 if ibrav == 9: #C-centered orthorhombic 410 418 for i in range(2): 411 419 Abeg = rotOrthoA(Abeg[:]) 412 Lhkl,M20,X20,Aref ,Zero = refinePeaks(peaks,ibrav,Abeg,[0,False])420 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg) 413 421 HKL = G2lat.GenHBravais(dmin,ibrav,Aref) 414 422 IndexPeaks(peaks,HKL) … … 416 424 elif ibrav == 11: #C-centered monoclinic 417 425 Abeg = swapMonoA(Abeg[:]) 418 Lhkl,M20,X20,Aref ,Zero = refinePeaks(peaks,ibrav,Abeg,[0,False])426 Lhkl,M20,X20,Aref = refinePeaks(peaks,ibrav,Abeg) 419 427 HKL = G2lat.GenHBravais(dmin,ibrav,Aref) 420 428 IndexPeaks(peaks,HKL) … … 432 440 X = sortM20(Asave) 433 441 if X: 434 Lhkl,M20,X20,A ,Zero = refinePeaks(peaks,ibrav,X[0][1],[0,False])442 Lhkl,M20,X20,A = refinePeaks(peaks,ibrav,X[0][1]) 435 443 return GoOn,Lhkl,M20,X20,A 436 444 … … 652 660 print 'msg:',result[3] 653 661 print 'ier:',result[4] 654 result = refinePeaks(peaks,ibrav,A ,[0,False])655 N,M20,X20,A ,Zero= result662 result = refinePeaks(peaks,ibrav,A) 663 N,M20,X20,A = result 656 664 print 'refinePeaks:',N,M20,X20,G2lat.A2cell(A) 657 665 print 'compare bestcell:',bestcell … … 664 672 print 'FitHKL' 665 673 OK,smin,A,result = FitHKL(ibrav,peaks,A,Pwr) 666 result = refinePeaks(peaks,ibrav,A ,[0,False])667 N,M20,X20,A ,Zero= result674 result = refinePeaks(peaks,ibrav,A) 675 N,M20,X20,A = result 668 676 print 'refinePeaks:',N,M20,X20,A 669 677 # Peaks = np.array(peaks) -
TabularUnified trunk/GSASIIlattice.py ¶
r311 r312 254 254 255 255 def calc_rDsqZ(H,A,Z,tth,lam): 256 rpd = math.pi/180.257 rdsq = calc_rDsq(H,A)+Z* math.sin(tth*rpd)*2.0*rpd/(lam*lam)256 rpd = np.pi/180. 257 rdsq = calc_rDsq(H,A)+Z*sind(tth)*2.0*rpd/lam**2 258 258 return rdsq 259 259 -
TabularUnified trunk/GSASIIpwdGUI.py ¶
r311 r312 792 792 ibrav = bravaisSymb.index(controls[5]) 793 793 dmin = G2indx.getDmin(peaks)-0.005 794 Lhkl,M20,X20,Aref,Zero = G2indx.refinePeaks(peaks,ibrav,A,controls[:2]) 795 controls[:2] = Zero 794 if controls[0]: 795 Lhkl,M20,X20,Aref,Zero = G2indx.refinePeaksZ(peaks,inst[1],ibrav,A,controls[1]) 796 controls[1] = Zero 797 else: 798 Lhkl,M20,X20,Aref = G2indx.refinePeaks(peaks,ibrav,A) 796 799 controls[6:12] = G2lat.A2cell(Aref) 797 800 controls[12] = G2lat.calc_V(Aref) … … 997 1000 zero.Bind(wx.EVT_KILL_FOCUS,OnZero) 998 1001 littleSizer.Add(zero,0,wx.ALIGN_CENTER_VERTICAL) 999 zeroVar = wx.CheckBox(self.dataDisplay,label="Refine? (not implemented)") 1002 zeroVar = wx.CheckBox(self.dataDisplay,label="Refine?") 1003 zeroVar.SetValue(controls[0]) 1000 1004 zeroVar.Bind(wx.EVT_CHECKBOX,OnZeroVar) 1001 1005 littleSizer.Add(zeroVar,0,wx.ALIGN_CENTER_VERTICAL)
Note: See TracChangeset
for help on using the changeset viewer.