Changeset 1923
- Timestamp:
- Jul 8, 2015 3:21:58 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIstrIO.py
r1918 r1923 2265 2265 sumTwFr = 0. 2266 2266 controlDict[pfx+'TwinLaw'] = [] 2267 controlDict[pfx+'TwinInv'] = [] 2267 controlDict[pfx+'TwinInv'] = [] 2268 NTL = 0 2268 2269 for it,twin in enumerate(Twins): 2269 2270 if 'bool' in str(type(twin[0])): … … 2271 2272 controlDict[pfx+'TwinLaw'].append(np.zeros((3,3))) 2272 2273 else: 2274 NTL += 1 2273 2275 controlDict[pfx+'TwinInv'].append(False) 2274 2276 controlDict[pfx+'TwinLaw'].append(twin[0]) … … 2277 2279 sumTwFr += twin[1] 2278 2280 else: 2279 hapDict[pfx+'TwinFr:'+str(it)] = twin[1][0] 2281 hapDict[pfx+'TwinFr:0'] = twin[1][0] 2282 controlDict[pfx+'TwinNMN'] = twin[1][2] 2280 2283 if Twins[0][1][1]: 2281 2284 hapVary.append(pfx+'TwinFr:'+str(it)) 2285 controlDict[pfx+'NTL'] = NTL 2282 2286 #need to make constraint on TwinFr 2283 2287 controlDict[pfx+'TwinLaw'] = np.array(controlDict[pfx+'TwinLaw']) -
trunk/GSASIIstrMath.py
r1922 r1923 745 745 TwDict = refDict.get('TwDict',{}) 746 746 if 'S' in calcControls[hfx+'histType']: 747 NTL = calcControls[phfx+'NTL'] 748 NM = calcControls[phfx+'TwinNMN']+1 747 749 TwinLaw = calcControls[phfx+'TwinLaw'] 748 750 TwinFr = np.array([parmDict[phfx+'TwinFr:'+str(i)] for i in range(len(TwinLaw))]) … … 785 787 if iref in TwDict: 786 788 for i in TwDict[iref]: 787 H[ir][i] = np.array(TwDict[iref][i])*TwinInv[i] 789 for n in range(NTL): 790 H[ir][i+n*NM] = np.inner(TwinLaw[n*NM],np.array(TwDict[iref][i])*TwinInv[i+n*NM]) 788 791 TwMask = np.any(H,axis=-1) 789 792 SQ = 1./(2.*refl.T[4])**2 #array(blkSize) … … 847 850 TwDict = refDict.get('TwDict',{}) 848 851 if 'S' in calcControls[hfx+'histType']: 852 NTL = calcControls[phfx+'NTL'] 853 NM = calcControls[phfx+'TwinNMN']+1 849 854 TwinLaw = calcControls[phfx+'TwinLaw'] 850 855 TwinFr = np.array([parmDict[phfx+'TwinFr:'+str(i)] for i in range(len(TwinLaw))]) … … 891 896 if iref in TwDict: 892 897 for i in TwDict[iref]: 893 H[i] = np.array(TwDict[iref][i])*TwinInv[i] 898 for n in range(NTL): 899 H[i+n*NM] = np.inner(TwinLaw[n*NM],np.array(TwDict[iref][i])*TwinInv[i+n*NM]) 894 900 TwMask = np.any(H,axis=-1) 895 901 SQ = 1./(2.*refl[4])**2 # or (sin(theta)/lambda)**2 … … 971 977 dFdui[iref] = [2.*TwMask[it]*SA[it]*(dfadui[0][it]+dfbdui[1][it])+2.*TwMask[it]*SB[it]*(dfbdui[0][it]+dfadui[1][it]) for it in range(nTwin)] 972 978 dFdua[iref] = [2.*TwMask[it]*SA[it]*(dfadua[it][0]+dfbdua[it][1])+2.*TwMask[it]*SB[it]*(dfbdua[it][0]+dfadua[it][1]) for it in range(nTwin)] 973 dFdtw[iref] = TwMask*np.sum(fas,axis=0)**2+TwMask*np.sum(fbs,axis=0)**2 979 dFdtw[iref] = np.sum(TwMask*fas,axis=0)**2+np.sum(TwMask*fbs,axis=0)**2 980 974 981 else: #these are good for no twin single crystals 975 982 dFdfr[iref] = 2.*SA*(dfadfr[0]+dfbdfr[1])*Mdata/len(Uniq)+ \ … … 2456 2463 G,g = G2lat.A2Gmat(A) #recip & real metric tensors 2457 2464 refDict = Histogram['Data'] 2465 if parmDict[phfx+'Scale'] < 0.: 2466 parmDict[phfx+'Scale'] = .001 2458 2467 if im: 2459 2468 dFdvDict = SStructureFactorDerv(refDict,im,G,hfx,pfx,SGData,SSGData,calcControls,parmDict) … … 2481 2490 depDerivDict[var][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*ref[11+im] 2482 2491 if phfx+'Scale' in varylist: 2483 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[ 9+im]*ref[11+im] #OK2492 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale'] #OK 2484 2493 elif phfx+'Scale' in dependentVars: 2485 depDerivDict[phfx+'Scale'][iref] = w*ref[ 9+im]*ref[11+im] #OK2494 depDerivDict[phfx+'Scale'][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale'] #OK 2486 2495 for item in ['Ep','Es','Eg']: 2487 2496 if phfx+item in varylist and phfx+item in dervDict: … … 2510 2519 depDerivDict[var][iref] = w*dFdvDict[var][iref]*parmDict[phfx+'Scale']*ref[11+im] 2511 2520 if phfx+'Scale' in varylist: 2512 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[ 9+im]*ref[11+im] #OK2521 dMdvh[varylist.index(phfx+'Scale')][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale'] #OK 2513 2522 elif phfx+'Scale' in dependentVars: 2514 depDerivDict[phfx+'Scale'][iref] = w*ref[ 9+im]*ref[11+im] #OK2523 depDerivDict[phfx+'Scale'][iref] = w*ref[7+im]*ref[11+im]/parmDict[phfx+'Scale'] #OK 2515 2524 for item in ['Ep','Es','Eg']: #OK! 2516 2525 if phfx+item in varylist and phfx+item in dervDict: … … 2728 2737 SGData = Phase['General']['SGData'] 2729 2738 im = 0 2739 if parmDict[phfx+'Scale'] < 0.: 2740 parmDict[phfx+'Scale'] = .001 2730 2741 if Phase['General']['Type'] in ['modulated','magnetic']: 2731 2742 SSGData = Phase['General']['SSGData']
Note: See TracChangeset
for help on using the changeset viewer.