Changeset 1001 for trunk/GSASIImath.py
- Timestamp:
- Jul 18, 2013 3:19:58 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/GSASIImath.py ¶
r991 r1001 31 31 import GSASIIlattice as G2lat 32 32 import GSASIIspc as G2spc 33 import GSASIIpwd as G2pwd 33 34 import numpy.fft as fft 34 35 import pypowder as pyd … … 2202 2203 T0=None, Tf=1e-12, maxeval=None, maxaccept=None, maxiter=400, 2203 2204 boltzmann=1.0, learn_rate=0.5, feps=1e-6, quench=1.0, m=1.0, n=1.0, 2204 lower=-100, upper=100, dwell=50, slope=0.9, dlg=None):2205 lower=-100, upper=100, dwell=50, slope=0.9,ranStart=True,dlg=None): 2205 2206 """Minimize a function using simulated annealing. 2206 2207 … … 2245 2246 :param float slope: 2246 2247 Parameter for log schedule 2248 :param bool ranStart=True: 2249 False for fixed point start 2247 2250 2248 2251 :returns: (xmin, Jmin, T, feval, iters, accept, retval) where … … 2332 2335 x0 = schedule.getstart_temp(best_state) 2333 2336 else: 2334 x0 = random.uniform(size=len(x0))*(upper-lower) + lower #comment to avoid random start 2337 if ranStart: 2338 x0 = random.uniform(size=len(x0))*(upper-lower) + lower #comment to avoid random start 2335 2339 best_state.x = None 2336 2340 best_state.cost = numpy.Inf … … 2345 2349 schedule.T = schedule.T0 2346 2350 fqueue = [100, 300, 500, 700] 2347 iters = 02351 iters = 1 2348 2352 keepGoing = True 2349 2353 while keepGoing: … … 2450 2454 2451 2455 ''' 2452 gamFW = lambda s,g: math.exp(math.log(s**5+2.69269*s**4*g+2.42843*s**3*g**2+4.47163*s**2*g**3+0.07842*s*g**4+g**5)/5.)2453 2456 2454 2457 twopi = 2.0*np.pi … … 2586 2589 return Tdata,Xdata.T 2587 2590 2588 def calcMDcorr(MDval,MDaxis,Uniq,G):2589 ''' Calls fortran routine'''2590 MDcorr = pyd.pymdcalc(MDval,MDaxis,len(Uniq),Uniq.flatten(),G)2591 return MDcorr2592 2593 def mcsaMDSFcalc(ifInv,Tdata,Mdata,Xdata,MDval,MDaxis,G,mul,FFs,Uniq,Phi):2594 ''' Calls fortran routine'''2595 Icalc = pyd.pymcsamdsfcalc(ifInv,len(Tdata),Tdata,Mdata,Xdata.flatten(),2596 MDval,MDaxis,G,mul,len(FFs),FFs,len(Uniq),Uniq.flatten(),Phi)2597 return Icalc2598 2599 def mcsaSFcalc(ifInv,Tdata,Mdata,Xdata,mul,FFs,Uniq,Phi):2600 ''' Calls fortran routine'''2601 Icalc = pyd.pymcsasfcalc(ifInv,len(Tdata),Tdata,Mdata,Xdata.flatten(),2602 mul,len(FFs),FFs,len(Uniq),Uniq.flatten(),Phi)2603 return Icalc2604 2591 2605 2592 def mcsaCalc(values,refList,rcov,ifInv,RBdata,varyList,parmDict): … … 2610 2597 puts result F^2 in each ref[8] in refList 2611 2598 ''' 2599 def mcsaMDSFcalc(mul,FFs,Uniq,Phi): 2600 ''' Calls fortran routine''' 2601 Icalc = pyd.pymcsamdsfcalc(ifInv,len(Tdata),Tdata,Mdata,Xdata.flatten(), 2602 MDval,MDaxis,Gmat,mul,len(FFs),FFs,len(Uniq),Uniq.flatten(),Phi) 2603 return Icalc 2612 2604 global tsum 2613 2605 parmDict.update(dict(zip(varyList,values))) … … 2621 2613 for refl in refList: 2622 2614 t0 = time.time() 2623 refl[5] = mcsaMDSFcalc(ifInv,Tdata,Mdata,Xdata,MDval,MDaxis,Gmat, 2624 refl[3],refl[7],refl[8],refl[9]) 2625 # refl[5] = mcsaSFcalc(ifInv,Tdata,Mdata,Xdata,refl[3],refl[7],refl[8],refl[9]) 2626 # refl[5] *= calcMDcorr(MDval,MDaxis,refl[8],Gmat) 2615 refl[5] = mcsaMDSFcalc(refl[3],refl[7],refl[8],refl[9]) 2627 2616 tsum += (time.time()-t0) 2628 2617 sumFcsq += refl[5] … … 2687 2676 h,k,l,m,d,pos,sig,gam,f = ref[:9] 2688 2677 if d >= MCSA['dmin']: 2689 sig = gamFW(sig,gam)/sq8ln2 #--> sig from FWHM2678 sig = G2pwd.getgamFW(sig,gam)/sq8ln2 #--> sig from FWHM 2690 2679 SQ = 0.25/d**2 2691 2680 Uniq,phi = G2spc.GenHKLf([h,k,l],SGData)[2:] … … 2763 2752 boltzmann=MCSA['boltzmann'], learn_rate=0.5, 2764 2753 quench=MCSA['fast parms'][0], m=MCSA['fast parms'][1], n=MCSA['fast parms'][2], 2765 lower=lower, upper=upper, slope=MCSA['log slope'], dlg=pgbar)2754 lower=lower, upper=upper, slope=MCSA['log slope'],ranStart=MCSA.get('ranStart',True),dlg=pgbar) 2766 2755 Result = [False,False,results[1],results[2],]+list(results[0]) 2767 2756 Result.append(varyList)
Note: See TracChangeset
for help on using the changeset viewer.