@@ -2422,6 +2422,12 @@ def errPeakPos(values,peakDsp,peakPos,peakWt,dataType,parmDict,varyList):
24222422 else :
24232423 return peakWt * (calcPos - peakPos )
24242424
2425+ def dervPeakPos (values ,peakDsp ,peakPos ,peakWt ,dataType ,parmDict ,varyList ):
2426+ dMdv = np .zeros (shape = (len (varyList ),len (peakDsp )))
2427+ calcPos = G2lat .getPeakPos (dataType ,parmDict ,peakDsp )
2428+ if dataType [2 ] in ['A' ,'B' ,'C' ]:
2429+ const = 0.18 / (np .pi * parmDict ['radius' ])
2430+
24252431 def errPeakAlp (values ,peakDsp ,peakAlp ,peakWt ,dataType ,parmDict ,varyList ):
24262432 parmDict .update (dict (zip (varyList ,values )))
24272433 if dataType [2 ] in ['A' ,'B' ]:
@@ -2431,6 +2437,19 @@ def errPeakAlp(values,peakDsp,peakAlp,peakWt,dataType,parmDict,varyList):
24312437 calcAlp = parmDict ['alpha' ]/ peakDsp
24322438 return peakWt * (calcAlp - peakAlp )
24332439
2440+ def dervPeakAlp (values ,peakDsp ,peakAlp ,peakWt ,dataType ,parmDict ,varyList ):
2441+ dMdv = np .zeros (shape = (len (varyList ),len (peakDsp )))
2442+ if dataType [2 ] in ['A' ,'B' ]:
2443+ calcPos = G2lat .getPeakPos (dataType ,parmDict ,peakDsp )
2444+ for iv ,vary in enumerate (varyList ):
2445+ if vary == 'alpha' :
2446+ dMdv [iv ,:] = 1.0 / peakDsp
2447+ if vary == 'alpha-0' :
2448+ dMdv [iv ,:] = 1.0
2449+ if vary == 'alpha-1' :
2450+ dMdv [iv ,:] = npsind (calcPos / 2. )
2451+ return np .sqrt (peakWt )* dMdv
2452+
24342453 def errPeakBet (values ,peakDsp ,peakBet ,peakWt ,dataType ,parmDict ,varyList ):
24352454 parmDict .update (dict (zip (varyList ,values )))
24362455 if dataType [2 ] in ['A' ,'B' ]:
@@ -2439,6 +2458,22 @@ def errPeakBet(values,peakDsp,peakBet,peakWt,dataType,parmDict,varyList):
24392458 else : #'T'
24402459 calcBet = parmDict ['beta-0' ]+ parmDict ['beta-1' ]/ peakDsp ** 4 + parmDict ['beta-q' ]/ peakDsp ** 2
24412460 return peakWt * (calcBet - peakBet )
2461+
2462+ def dervPeakBet (values ,peakDsp ,peakBet ,peakWt ,dataType ,parmDict ,varyList ):
2463+ dMdv = np .zeros (shape = (len (varyList ),len (peakDsp )))
2464+ if dataType [2 ] in ['A' ,'B' ]:
2465+ calcPos = G2lat .getPeakPos (dataType ,parmDict ,peakDsp )
2466+ for iv ,vary in enumerate (varyList ):
2467+ if vary == 'beta-0' :
2468+ dMdv [iv ,:] = 1.0
2469+ if vary == 'beta-1' :
2470+ if dataType [2 ] in ['A' ,'B' ]:
2471+ dMdv [iv ,:] = npsind (calcPos / 2. )
2472+ else :
2473+ dMdv [iv ,:] = 1.0 / peakDsp ** 4
2474+ if vary == 'beta-q' :
2475+ dMdv [iv ,:] = 1.0 / peakDsp ** 2
2476+ return np .sqrt (peakWt )* dMdv
24422477
24432478 def errPeakSig (values ,peakDsp ,peakSig ,peakWt ,dataType ,parmDict ,varyList ):
24442479 parmDict .update (dict (zip (varyList ,values )))
@@ -2450,6 +2485,30 @@ def errPeakSig(values,peakDsp,peakSig,peakWt,dataType,parmDict,varyList):
24502485 calcSig = parmDict ['sig-0' ]+ parmDict ['sig-1' ]* peakDsp ** 2 + parmDict ['sig-2' ]* peakDsp ** 4 + parmDict ['sig-q' ]* peakDsp
24512486 return peakWt * (calcSig - peakSig )
24522487
2488+ def dervPeakSig (values ,peakDsp ,peakSig ,peakWt ,dataType ,parmDict ,varyList ):
2489+ dMdv = np .zeros (shape = (len (varyList ),len (peakDsp )))
2490+ if dataType [2 ] in ['A' ,'B' ,'C' ]:
2491+ calcPos = G2lat .getPeakPos (dataType ,parmDict ,peakDsp )
2492+ tp = nptand (calcPos / 2.0 )
2493+ for iv ,vary in enumerate (varyList ):
2494+ if vary == 'U' :
2495+ dMdv [iv ,:] = tp ** 2
2496+ if vary == 'V' :
2497+ dMdv [iv ,:] = tp
2498+ if vary == 'W' :
2499+ dMdv [iv ,:] = 1.
2500+ else :
2501+ for iv ,vary in enumerate (varyList ):
2502+ if vary == 'sig-0' :
2503+ dMdv [iv ,:] = 1.0
2504+ if vary == 'sig-1' :
2505+ dMdv [iv ,:] = peakDsp ** 2
2506+ if vary == 'sig-2' :
2507+ dMdv [iv ,:] = peakDsp ** 4
2508+ if vary == 'sig-q' :
2509+ dMdv [iv ,:] = peakDsp
2510+ return np .sqrt (peakWt )* dMdv
2511+
24532512 def outResult ():
24542513 chisq = np .sum (result [2 ]['fvec' ]** 2 )
24552514 GOF = chisq / (len (peakPos )- len (posVary )) #reduced chi^2
@@ -2480,7 +2539,7 @@ def outResult():
24802539 parmDict .update (posDict )
24812540 if len (peakPos ) > 5 and len (posVary ):
24822541 values = np .array (Dict2Values (parmDict , posVary ))
2483- result = so .leastsq (errPeakPos ,values ,full_output = True ,ftol = 0.000001 ,
2542+ result = so .leastsq (errPeakPos ,values ,Dfun = None , full_output = True ,ftol = 0.000001 ,
24842543 args = (peakDsp ,peakPos ,peakPosWt ,dataType ,parmDict ,posVary ))
24852544 G2fil .G2Print ('Position calibration:' )
24862545 Values2Dict (parmDict , posVary , result [0 ])
@@ -2492,8 +2551,8 @@ def outResult():
24922551 parmDict .update (sigDict )
24932552 if len (peakSig ) > 5 and len (sigVary ):
24942553 values = np .array (Dict2Values (parmDict , sigVary ))
2495- result = so .leastsq (errPeakSig ,values ,full_output = True ,ftol = 0.000001 ,
2496- args = (sigDsp ,peakSig ,peakSigWt ,dataType ,parmDict ,sigVary ))
2554+ result = so .leastsq (errPeakSig ,values ,Dfun = dervPeakSig , full_output = True ,ftol = 0.000001 ,
2555+ col_deriv = True , args = (sigDsp ,peakSig ,peakSigWt ,dataType ,parmDict ,sigVary ))
24972556 G2fil .G2Print ('Sigma calibration:' )
24982557 Values2Dict (parmDict , sigVary , result [0 ])
24992558 sig = outResult ()
@@ -2507,8 +2566,8 @@ def outResult():
25072566 parmDict .update (alpDict )
25082567 if len (peakAlp ) > 5 and len (alpVary ):
25092568 values = np .array (Dict2Values (parmDict , alpVary ))
2510- result = so .leastsq (errPeakAlp ,values ,full_output = True ,ftol = 0.000001 ,
2511- args = (alpDsp ,peakAlp ,peakAlpWt ,dataType ,parmDict ,alpVary ))
2569+ result = so .leastsq (errPeakAlp ,values ,Dfun = dervPeakAlp , full_output = True ,ftol = 0.000001 ,
2570+ col_deriv = True , args = (alpDsp ,peakAlp ,peakAlpWt ,dataType ,parmDict ,alpVary ))
25122571 G2fil .G2Print ('Alpha calibration:' )
25132572 Values2Dict (parmDict , alpVary , result [0 ])
25142573 sig = outResult ()
@@ -2521,8 +2580,8 @@ def outResult():
25212580 parmDict .update (betDict )
25222581 if len (peakBet ) > 5 and len (betVary ):
25232582 values = np .array (Dict2Values (parmDict , betVary ))
2524- result = so .leastsq (errPeakBet ,values ,full_output = True ,ftol = 0.000001 ,
2525- args = (betDsp ,peakBet ,peakBetWt ,dataType ,parmDict ,betVary ))
2583+ result = so .leastsq (errPeakBet ,values ,Dfun = dervPeakBet , full_output = True ,ftol = 0.000001 ,
2584+ col_deriv = True , args = (betDsp ,peakBet ,peakBetWt ,dataType ,parmDict ,betVary ))
25262585 G2fil .G2Print ('Beta calibration:' )
25272586 Values2Dict (parmDict , betVary , result [0 ])
25282587 sig = outResult ()
0 commit comments