Changeset 3990
- Timestamp:
- May 22, 2019 2:04:11 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASIIdataGUI.py
r3982 r3990 4716 4716 histNames = Controls['Seq Data'] 4717 4717 else: # patch from before Controls['Seq Data'] was implemented 4718 histNames = G2stIO.GetHistogramNames( GPXfile,['PWDR',])4718 histNames = G2stIO.GetHistogramNames(self.GPXfile,['PWDR',]) 4719 4719 if Controls.get('Reverse Seq'): 4720 4720 histNames.reverse() … … 5583 5583 #Phase / Dysnomia (Maximum Entropy Method) tab 5584 5584 G2G.Define_wxId('wxID_LOADDYSNOMIA', 'wxID_SAVEDYSNOMIA', 'wxID_RUNDYSNOMIA', ) 5585 self.MEM Data= wx.MenuBar()5586 self.PrefillDataMenu(self.MEM Data)5587 self.MEM Data.Append(menu=wx.Menu(title=''),title='Select tab')5585 self.MEMMenu = wx.MenuBar() 5586 self.PrefillDataMenu(self.MEMMenu) 5587 self.MEMMenu.Append(menu=wx.Menu(title=''),title='Select tab') 5588 5588 self.MEMDataEdit = wx.Menu(title='') 5589 self.MEM Data.Append(menu=self.MEMDataEdit, title='Operations')5589 self.MEMMenu.Append(menu=self.MEMDataEdit, title='Operations') 5590 5590 self.MEMDataEdit.Append(G2G.wxID_LOADDYSNOMIA,'Load from Dysnomia file','Load MEM info from Dysnomia file') 5591 5591 self.MEMDataEdit.Append(G2G.wxID_SAVEDYSNOMIA,'Save Dysnomia file','Save MEM info in Dysnomia file') … … 7817 7817 G2frame.PatternId,'Instrument Parameters')) 7818 7818 if 'C' in Inst[0]['Type'][0]: 7819 magSizer.Add(wx.StaticText(panel,-1,'2Theta' 7820 ),1,wx.ALIGN_CENTER,1) 7819 magSizer.Add(wx.StaticText(panel,-1,'2Theta'),1,wx.ALIGN_CENTER,1) 7821 7820 else: 7822 magSizer.Add(wx.StaticText(panel,-1,'TOF' 7823 ),1,wx.ALIGN_CENTER,1) 7821 magSizer.Add(wx.StaticText(panel,-1,'TOF'),1,wx.ALIGN_CENTER,1) 7824 7822 magSizer.Add(wx.StaticText(panel,-1,'Magnification\nfactor', 7825 7823 style=wx.ALIGN_CENTRE_HORIZONTAL),1,wx.ALIGN_CENTER,1) 7826 7824 magSizer.Add(wx.StaticText(panel,-1,'Delete\nbutton', 7827 style=wx.ALIGN_CENTRE_HORIZONTAL 7828 ),1,wx.ALIGN_CENTER,1) 7825 style=wx.ALIGN_CENTRE_HORIZONTAL),1,wx.ALIGN_CENTER,1) 7829 7826 magSizer.Add(wx.StaticText(panel,-1,'(start)'),1,wx.ALIGN_CENTER,1) 7830 7827 edit = G2G.ValidatedTxtCtrl(panel,data[0]['Magnification'][0],1, 7831 nDig=(7,2), 7832 min=0.01,max=1000., 7833 OnLeave=OnEditMag,size=(65,-1)) 7828 nDig=(7,2),min=0.01,max=1000.,OnLeave=OnEditMag,size=(65,-1)) 7834 7829 magSizer.Add(edit,1,wx.ALIGN_CENTER,5) 7835 7830 magSizer.Add((1,1)) 7836 7831 for i in range(1,lenmag): 7837 edit = G2G.ValidatedTxtCtrl(panel,data[0]['Magnification'][i],0, 7838 nDig=(10,3), 7839 min=data[1][0][0],max=data[1][0][-1], 7840 OnLeave=OnEditMag) 7832 edit = G2G.ValidatedTxtCtrl(panel,data[0]['Magnification'][i],0,nDig=(10,3), 7833 min=data[1][0][0],max=data[1][0][-1],OnLeave=OnEditMag) 7841 7834 magSizer.Add(edit) 7842 7835 edit = G2G.ValidatedTxtCtrl(panel,data[0]['Magnification'][i],1, 7843 nDig=(7,2), 7844 min=0.01,max=1000., 7845 OnLeave=OnEditMag,size=(65,-1)) 7836 nDig=(7,2),min=0.01,max=1000.,OnLeave=OnEditMag,size=(65,-1)) 7846 7837 magSizer.Add(edit,1,wx.ALIGN_CENTER,5) 7847 7838 delmag = wx.Button(panel,wx.ID_ANY,label='Del',size=(40,-1)) … … 7878 7869 SuperVec = [] 7879 7870 refList = data[1]['RefList'] 7880 # GSASIIpath.IPyBreak()7881 7871 FoMax = np.max(refList.T[5+data[1].get('Super',0)]) 7882 7872 page = G2frame.G2plotNB.nb.GetSelection() -
trunk/GSASIIphsGUI.py
r3982 r3990 40 40 import sys 41 41 import random as ran 42 import subprocess as subp 42 43 import GSASIIpath 43 44 GSASIIpath.SetVersionNumber("$Revision$") … … 2186 2187 2187 2188 def OnDysnomia(event): 2188 generalData['doDysnomia'] = not generalData['doDysnomia']2189 data['General']['doDysnomia'] = not data['General']['doDysnomia'] 2189 2190 pages = [G2frame.phaseDisplay.GetPageText(PageNum) for PageNum in range(G2frame.phaseDisplay.GetPageCount())] 2190 2191 if generalData['doDysnomia']: 2191 2192 if 'Dysnomia' not in pages: 2192 2193 G2frame.MEMData = wx.ScrolledWindow(G2frame.phaseDisplay) 2194 G2frame.Bind(wx.EVT_MENU, OnLoadDysnomia, id=G2G.wxID_LOADDYSNOMIA) 2195 G2frame.Bind(wx.EVT_MENU, OnSaveDysnomia, id=G2G.wxID_SAVEDYSNOMIA) 2196 G2frame.Bind(wx.EVT_MENU, OnRunDysnomia, id=G2G.wxID_RUNDYSNOMIA) 2193 2197 G2frame.phaseDisplay.InsertPage(7,G2frame.MEMData,'Dysnomia') 2194 2198 Id = wx.NewId() 2195 2199 TabSelectionIdDict[Id] = 'Dysnomia' 2200 2201 2196 2202 if 'Dysnomia' not in data: #set defaults here 2197 2203 data['Dysnomia'] = {'DenStart':'uniform','Optimize':'ZSPA','Lagrange':['user',0.001,0.05], 2198 'wt pwr':0,'E_factor':1.,'Ncyc':5000,'prior':'uniform','Lam frac':[1,0,0,0,0,0,0,0]} 2204 'wt pwr':0,'E_factor':1.,'Ncyc':5000,'prior':'uniform','Lam frac':[1,0,0,0,0,0,0,0], 2205 'overlap':1.0} 2199 2206 else: 2200 2207 if 'Dysnomia' in pages: … … 4125 4132 ''' Present the controls for running Dysnomia 4126 4133 ''' 4127 #data['Dys onmia'] = {'DenStart':'uniform','Optimize':'ZSPA','Lagrange':['user',0.001,0.05],4134 #data['Dysnomia'] = {'DenStart':'uniform','Optimize':'ZSPA','Lagrange':['user',0.001,0.05], 4128 4135 # 'wt pwr':0,'E_factor':1.,'Ncyc':5000,'prior':'uniform','Lam frac':[1,0,0,0,0,0,0,0]} 4129 4136 def OnOptMeth(event): … … 4145 4152 MEMData.GetSizer().Clear(True) 4146 4153 DysData = data['Dysnomia'] 4154 if 'overlap' not in DysData: 4155 DysData['overlap'] = 1.0 4147 4156 mainSizer = wx.BoxSizer(wx.VERTICAL) 4148 4157 mainSizer.Add(wx.StaticText(MEMData,label=' Maximum Entropy Method (Dysnomia) controls:')) … … 4153 4162 OptMeth.Bind(wx.EVT_COMBOBOX,OnOptMeth) 4154 4163 lineSizer.Add(OptMeth,0,WACV) 4164 lineSizer.Add(wx.StaticText(MEMData,label=' Peak overlap factor'),0,WACV) 4165 overlap = G2G.ValidatedTxtCtrl(MEMData,DysData,'overlap',nDig=(10,4),min=0.1,max=1.) 4166 lineSizer.Add(overlap,0,WACV) 4155 4167 mainSizer.Add(lineSizer) 4156 4168 if DysData['Optimize'] == 'ZSPA': … … 4206 4218 def OnRunDysnomia(event): 4207 4219 4208 4220 #data['Dysnomia'] = {'DenStart':'uniform','Optimize':'ZSPA','Lagrange':['user',0.001,0.05], 4221 # 'wt pwr':0,'E_factor':1.,'Ncyc':5000,'prior':'uniform','Lam frac':[1,0,0,0,0,0,0,0]} 4222 4209 4223 generalData = data['General'] 4210 4224 Map = generalData['Map'] 4211 Phase = generalData['Name'].replace(' ','_') 4212 DysData = data['Dysnomia'] 4213 prf = open(Phase+'.prf','w') 4214 prf.write(Phase+'.mem\n') #or .fos? 4215 prf.write(Phase+'.out\n') 4216 prf.write(Phase+'.pgrid\n') 4217 prf.write(Phase+'.fba\n') 4218 prf.write(Phase+'_eps.raw\n') 4219 4220 4221 4222 4223 prf.close() 4225 UseList = Map['RefList'] 4226 pId = G2gd.GetGPXtreeItemId(G2frame,G2frame.root,UseList[0]) #only use 1st histogram 4227 reflSets = G2frame.GPXtree.GetItemPyData(G2gd.GetGPXtreeItemId(G2frame,pId,'Reflection Lists')) 4228 reflData = reflSets[generalData['Name']]['RefList'] 4229 Type = Map['Type'] 4230 MEMtype = 0 4231 if 'N' in Type: 4232 for el in generalData['Isotope']: 4233 isotope = generalData['Isotope'][el] 4234 if generalData['Isotopes'][el][isotope]['SL'][0] < 0.: 4235 MEMtype = 1 4236 prfName = str(G2pwd.makePRFfile(data,MEMtype)) 4237 if not G2pwd.makeMEMfile(data,reflData,MEMtype): 4238 print('non standard space groupsnot permitted in Dysnomia') 4239 return 4224 4240 4225 4241 wx.MessageBox(''' For use of Dysnomia, please cite: … … 4228 4244 K. Moma, T. Ikeda, A.A. Belik & F. Izumi, Powder Diffr. 2013, 28, 184-193. 4229 4245 doi:10.1017/S088571561300002X''',caption='Dysnomia (MEM)',style=wx.ICON_INFORMATION) 4246 4247 path2GSAS2 = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) 4248 DYSNOMIA = os.path.join(path2GSAS2,'Dysnomia','Dysnomia64.exe') 4249 print('Run '+DYSNOMIA) 4250 4251 subp.call([DYSNOMIA,prfName]) 4230 4252 4231 4253 … … 9629 9651 wx.CallAfter(G2plt.PlotStructure,G2frame,data,firstCall=True) 9630 9652 elif text == 'Dysnomia': 9631 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.MEM Data)9653 G2gd.SetDataMenuBar(G2frame,G2frame.dataWindow.MEMMenu) 9632 9654 UpdateDysnomia() 9633 9655 elif text == 'Draw Options': … … 9719 9741 # Dysnomia (MEM) 9720 9742 if data['General']['doDysnomia']: 9721 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.MEM Data)9743 FillSelectPageMenu(TabSelectionIdDict, G2frame.dataWindow.MEMMenu) 9722 9744 G2frame.Bind(wx.EVT_MENU, OnLoadDysnomia, id=G2G.wxID_LOADDYSNOMIA) 9723 9745 G2frame.Bind(wx.EVT_MENU, OnSaveDysnomia, id=G2G.wxID_SAVEDYSNOMIA) … … 9858 9880 G2frame.phaseDisplay.AddPage(MapPeaks,'Map peaks') 9859 9881 if data['General']['doDysnomia']: 9860 G2frame. Dysnomia = wx.ScrolledWindow(G2frame.phaseDisplay)9861 G2frame.phaseDisplay.AddPage(G2frame. Dysnomia,'Dysnomia')9882 G2frame.MEMData = wx.ScrolledWindow(G2frame.phaseDisplay) 9883 G2frame.phaseDisplay.AddPage(G2frame.MEMData,'Dysnomia') 9862 9884 Pages.append('Dysnomia') 9863 9885 Pages.append('Map peaks') -
trunk/GSASIIpwd.py
r3959 r3990 2810 2810 Layers['Sadp']['Img'] = Sapd 2811 2811 print (' GETSAD time = %.2fs'%(time.time()-time0)) 2812 # GSASIIpath.IPyBreak() 2813 2812 2813 ############################################################################### 2814 #### Maximum Entropy Method - Dysnomia 2815 ############################################################################### 2816 2817 def makePRFfile(data,MEMtype): 2818 ''' makes Dysnomia .prf control file from Dysnomia GUI controls 2819 2820 ;param dict data: GSAS-II phase data 2821 :param int MEMtype: 1 for neutron data with negative scattering lengths 2822 0 otherwise 2823 :returns str: name of Dysnomia control file 2824 ''' 2825 2826 generalData = data['General'] 2827 pName = generalData['Name'].replace(' ','_') 2828 DysData = data['Dysnomia'] 2829 prfName = pName+'.prf' 2830 prf = open(prfName,'w') 2831 prf.write('$PREFERENCES\n') 2832 prf.write(pName+'.mem\n') #or .fos? 2833 prf.write(pName+'.out\n') 2834 prf.write(pName+'.pgrid\n') 2835 prf.write(pName+'.fba\n') 2836 prf.write(pName+'_eps.raw\n') 2837 prf.write('%d\n'%MEMtype) 2838 if DysData['DenStart'] == 'uniform': 2839 prf.write('0\n') 2840 else: 2841 prf.write('1\n') 2842 if DysData['Optimize'] == 'ZSPA': 2843 prf.write('0\n') 2844 else: 2845 prf.write('1\n') 2846 prf.write('1\n') 2847 if DysData['Lagrange'][0] == 'user': 2848 prf.write('0\n') 2849 else: 2850 prf.write('1\n') 2851 prf.write('%.4f %d\n'%(DysData['Lagrange'][1],DysData['wt pwr'])) 2852 prf.write('%.3f\n'%DysData['Lagrange'][2]) 2853 prf.write('%.2f\n'%DysData['E_factor']) 2854 prf.write('1\n') 2855 prf.write('0\n') 2856 prf.write('%d\n'%DysData['Ncyc']) 2857 prf.write('1\n') 2858 prf.write('1 0 0 0 0 0 0 0\n') 2859 if DysData['prior'] == 'uniform': 2860 prf.write('0\n') 2861 else: 2862 prf.write('1\n') 2863 prf.close() 2864 return prfName 2865 2866 def makeMEMfile(data,reflData,MEMtype): 2867 ''' make Dysnomia .mem file of reflection data, etc. 2868 ;param dict data: GSAS-II phase data 2869 :param list reflData: GSAS-II reflection data 2870 :param int MEMtype: 1 for neutron data with negative scattering lengths 2871 0 otherwise 2872 ''' 2873 2874 DysData = data['Dysnomia'] 2875 generalData = data['General'] 2876 pName = generalData['Name'].replace(' ','_') 2877 memName = pName+'.mem' 2878 Map = generalData['Map'] 2879 Type = Map['Type'] 2880 UseList = Map['RefList'] 2881 mem = open(memName,'w') 2882 mem.write('%s\n'%(generalData['Name']+' from '+UseList[0])) 2883 a,b,c,alp,bet,gam = generalData['Cell'][1:7] 2884 mem.write('%10.5f%10.5f%10.5f%10.5f,%10.5f%10.5f\n'%(a,b,c,alp,bet,gam)) 2885 mem.write(' 0.0000000 0.0000000 -1 0 0 0 P\n') #dummy PO stuff 2886 SGSym = generalData['SGData']['SpGrp'] 2887 try: 2888 SGId = G2spc.spgbyNum.index(SGSym) 2889 except IndexError: 2890 return False 2891 org = 1 2892 if SGSym in G2spc.spg2origins: 2893 org = 2 2894 mapsize = Map['rho'].shape 2895 sumZ = 0. 2896 sumpos = 0. 2897 sumneg = 0. 2898 mem.write('%5d%5d%5d%5d%5d\n'%(SGId,org,mapsize[0],mapsize[1],mapsize[2])) 2899 for atm in generalData['NoAtoms']: 2900 Nat = generalData['NoAtoms'][atm] 2901 AtInfo = G2elem.GetAtomInfo(atm) 2902 sumZ += Nat*AtInfo['Z'] 2903 isotope = generalData['Isotope'][atm] 2904 blen = generalData['Isotopes'][atm][isotope]['SL'][0] 2905 if blen < 0.: 2906 sumneg += blen*Nat 2907 else: 2908 sumpos += blen*Nat 2909 if 'X' in Type: 2910 mem.write('%10.2f 0.001\n'%sumZ) 2911 elif 'N' in Type and MEMtype: 2912 mem.write('%10.3f%10.3f 0.001\n'%(sumpos,sumneg)) 2913 else: 2914 mem.write('%10.3 0.001\n'%sumpos) 2915 2916 refs = [] 2917 prevpos = 0. 2918 for ref in reflData: 2919 if 'T' in Type: 2920 h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = ref[:16] 2921 FWHM = getgamFW(gam,sig) 2922 else: 2923 h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,prfo = ref[:13] 2924 g = gam/100. #centideg -> deg 2925 s = np.sqrt(max(sig,0.0001))/100. #var -> sig in deg 2926 FWHM = getgamFW(g,s) 2927 delt = pos-prevpos 2928 refs.append([h,k,l,mult,pos,FWHM,Fobs,phase,delt]) 2929 prevpos = pos 2930 2931 ovlp = DysData['overlap'] 2932 refs1 = [] 2933 refs2 = [] 2934 nref2 = 0 2935 iref = 0 2936 Nref = len(refs) 2937 start = False 2938 while iref < Nref-1: 2939 if refs[iref+1][-1] < ovlp*refs[iref][5]: 2940 if refs[iref][-1] > ovlp*refs[iref][5]: 2941 refs2.append([]) 2942 start = True 2943 if nref2 == len(refs2): 2944 refs2.append([]) 2945 refs2[nref2].append(refs[iref]) 2946 else: 2947 if start: 2948 refs2[nref2].append(refs[iref]) 2949 start = False 2950 nref2 += 1 2951 else: 2952 refs1.append(refs[iref]) 2953 iref += 1 2954 if start: 2955 refs2[nref2].append(refs[iref]) 2956 else: 2957 refs1.append(refs[iref]) 2958 2959 mem.write('%5d\n'%len(refs1)) 2960 for ref in refs1: 2961 h,k,l = ref[:3] 2962 Fobs = np.sqrt(ref[6]) 2963 mem.write('%5d%5d%5d%10.3f%10.3f%10.3f\n'%(h,k,l,Fobs*npcosd(ref[7]),Fobs*npsind(ref[7]),max(0.01*Fobs,0.1))) 2964 mem.write('%5d\n'%len(refs2)) 2965 for ref2 in refs2: 2966 if not len(ref2): 2967 break 2968 mem.write('%5d\n'%len(ref2)) 2969 Gsum = 0. 2970 Msum = 0 2971 for ref in ref2: 2972 Gsum += ref[6]*ref[3] 2973 Msum += ref[3] 2974 G = np.sqrt(Gsum/Msum) 2975 h,k,l = ref2[0][:3] 2976 mem.write('%5d%5d%5d%10.3f%10.3f%5d\n'%(h,k,l,G,max(0.01*G,0.1),ref2[0][3])) 2977 for ref in ref2[1:]: 2978 h,k,l,m = ref[:4] 2979 mem.write('%5d%5d%5d%5d\n'%(h,k,l,m)) 2980 mem.write('0\n') 2981 mem.close() 2982 return True 2814 2983 #testing data 2815 2984 NeedTestData = True -
trunk/exports/G2export_examples.py
r3223 r3990 194 194 ): return 195 195 self.OpenFile() 196 hist = self.histnam[0] # there should only be one histogram, in any case take the 1st196 hist = list(self.histnam)[0] # there should only be one histogram, in any case take the 1st 197 197 self.Write('\nHistogram '+hist) 198 198 histblk = self.Histograms[hist] … … 276 276 ): return 277 277 self.OpenFile() 278 hist = self.histnam[0] # there should only be one histogram, in any case take the 1st278 hist = list(self.histnam)[0] # there should only be one histogram, in any case take the 1st 279 279 histblk = self.Histograms[hist] 280 280 hklfmt = "{:.0f},{:.0f},{:.0f}"
Note: See TracChangeset
for help on using the changeset viewer.