Changeset 482
- Timestamp:
- Feb 13, 2012 11:33:35 AM (12 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/GSASII.py
r481 r482 90 90 ] = [wx.NewId() for _init_coll_Export_Items in range(7)] 91 91 92 def FileDlgFixExt(dlg,file): #this is needed to fix a problem in linux wx.FileDialog93 ext = dlg.GetWildcard().split('|')[2*dlg.GetFilterIndex()+1].strip('*')94 if ext not in file:95 file += ext96 return file97 98 92 class GSASII(wx.Frame): 99 93 … … 1042 1036 if dlg.ShowModal() == wx.ID_OK: 1043 1037 newimagefile = dlg.GetPath() 1044 newimagefile = FileDlgFixExt(dlg,newimagefile)1038 newimagefile = G2IO.FileDlgFixExt(dlg,newimagefile) 1045 1039 G2IO.PutG2Image(newimagefile,Comments,Data,Npix,newImage) 1046 1040 Imax = np.amax(newImage) … … 1255 1249 if dlg.ShowModal() == wx.ID_OK: 1256 1250 self.GSASprojectfile = dlg.GetPath() 1257 self.GSASprojectfile = FileDlgFixExt(dlg,self.GSASprojectfile)1251 self.GSASprojectfile = G2IO.FileDlgFixExt(dlg,self.GSASprojectfile) 1258 1252 self.dirname = dlg.GetDirectory() 1259 1253 G2IO.ProjFileOpen(self) … … 1312 1306 if dlg.ShowModal() == wx.ID_OK: 1313 1307 self.GSASprojectfile = dlg.GetPath() 1314 self.GSASprojectfile = FileDlgFixExt(dlg,self.GSASprojectfile)1308 self.GSASprojectfile = G2IO.FileDlgFixExt(dlg,self.GSASprojectfile) 1315 1309 self.PatternTree.SetItemText(self.root,'Loaded Data: '+self.GSASprojectfile) 1316 1310 G2IO.ProjFileSave(self) … … 1547 1541 if dlg.ShowModal() == wx.ID_OK: 1548 1542 powderfile = dlg.GetPath() 1549 powderfile = FileDlgFixExt(dlg,powderfile)1543 powderfile = G2IO.FileDlgFixExt(dlg,powderfile) 1550 1544 if 'fxye' in powderfile: 1551 1545 G2IO.powderFxyeSave(self,exports,powderfile) … … 1561 1555 if dlg.ShowModal() == wx.ID_OK: 1562 1556 self.peaklistfile = dlg.GetPath() 1563 self.peaklistfile = FileDlgFixExt(dlg,self.peaklistfile)1557 self.peaklistfile = G2IO.FileDlgFixExt(dlg,self.peaklistfile) 1564 1558 file = open(self.peaklistfile,'w') 1565 1559 item, cookie = self.PatternTree.GetFirstChild(self.root) -
trunk/GSASIIIO.py
r475 r482 36 36 return 0 37 37 38 def FileDlgFixExt(dlg,file): 39 #this is needed to fix a problem in linux wx.FileDialog 40 ext = dlg.GetWildcard().split('|')[2*dlg.GetFilterIndex()+1].strip('*') 41 if ext not in file: 42 file += ext 43 return file 44 38 45 def SelectPowderData(G2frame, filename): 39 46 """Selects banks of data from a filename of any GSAS powder data format … … 849 856 print 'project save successful' 850 857 851 def GetControls(GPXfile):852 ''' Returns dictionary of control items found in GSASII gpx file853 input:854 GPXfile = .gpx full file name855 return:856 Controls = dictionary of control items857 '''858 Controls = {'deriv type':'analytical','min dM/M':0.0001,'shift factor':1.}859 file = open(GPXfile,'rb')860 while True:861 try:862 data = cPickle.load(file)863 except EOFError:864 break865 datum = data[0]866 if datum[0] == 'Controls':867 Controls.update(datum[1])868 file.close()869 return Controls870 871 def GetConstraints(GPXfile):872 constList = []873 file = open(GPXfile,'rb')874 while True:875 try:876 data = cPickle.load(file)877 except EOFError:878 break879 datum = data[0]880 if datum[0] == 'Constraints':881 constDict = datum[1]882 for item in constDict:883 constList += constDict[item]884 file.close()885 constDict = []886 constFlag = []887 fixedList = []888 for item in constList:889 if item[-2]:890 fixedList.append(str(item[-2]))891 else:892 fixedList.append('0')893 if item[-1]:894 constFlag.append(['VARY'])895 else:896 constFlag.append([])897 itemDict = {}898 for term in item[:-2]:899 itemDict[term[1]] = term[0]900 constDict.append(itemDict)901 return constDict,constFlag,fixedList902 903 def GetPhaseNames(GPXfile):904 ''' Returns a list of phase names found under 'Phases' in GSASII gpx file905 input:906 GPXfile = gpx full file name907 return:908 PhaseNames = list of phase names909 '''910 file = open(GPXfile,'rb')911 PhaseNames = []912 while True:913 try:914 data = cPickle.load(file)915 except EOFError:916 break917 datum = data[0]918 if 'Phases' == datum[0]:919 for datus in data[1:]:920 PhaseNames.append(datus[0])921 file.close()922 return PhaseNames923 924 def GetAllPhaseData(GPXfile,PhaseName):925 ''' Returns the entire dictionary for PhaseName from GSASII gpx file926 input:927 GPXfile = gpx full file name928 PhaseName = phase name929 return:930 phase dictionary931 '''932 file = open(GPXfile,'rb')933 General = {}934 Atoms = []935 while True:936 try:937 data = cPickle.load(file)938 except EOFError:939 break940 datum = data[0]941 if 'Phases' == datum[0]:942 for datus in data[1:]:943 if datus[0] == PhaseName:944 break945 file.close()946 return datus[1]947 948 def GetHistograms(GPXfile,hNames):949 """ Returns a dictionary of histograms found in GSASII gpx file950 input:951 GPXfile = .gpx full file name952 hNames = list of histogram names953 return:954 Histograms = dictionary of histograms (types = PWDR & HKLF)955 """956 file = open(GPXfile,'rb')957 Histograms = {}958 while True:959 try:960 data = cPickle.load(file)961 except EOFError:962 break963 datum = data[0]964 hist = datum[0]965 if hist in hNames:966 if 'PWDR' in hist[:4]:967 PWDRdata = {}968 PWDRdata['Data'] = datum[1][1] #powder data arrays969 PWDRdata[data[2][0]] = data[2][1] #Limits970 PWDRdata[data[3][0]] = data[3][1] #Background971 PWDRdata[data[4][0]] = data[4][1] #Instrument parameters972 PWDRdata[data[5][0]] = data[5][1] #Sample parameters973 try:974 PWDRdata[data[9][0]] = data[9][1] #Reflection lists might be missing975 except IndexError:976 PWDRdata['Reflection lists'] = {}977 978 Histograms[hist] = PWDRdata979 elif 'HKLF' in hist[:4]:980 HKLFdata = []981 datum = data[0]982 HKLFdata = datum[1:][0]983 Histograms[hist] = HKLFdata984 file.close()985 return Histograms986 987 def GetHistogramNames(GPXfile,hType):988 """ Returns a list of histogram names found in GSASII gpx file989 input:990 GPXfile = .gpx full file name991 hType = list ['PWDR','HKLF']992 return:993 HistogramNames = list of histogram names (types = PWDR & HKLF)994 """995 file = open(GPXfile,'rb')996 HistogramNames = []997 while True:998 try:999 data = cPickle.load(file)1000 except EOFError:1001 break1002 datum = data[0]1003 if datum[0][:4] in hType:1004 HistogramNames.append(datum[0])1005 file.close()1006 return HistogramNames1007 1008 def GetUsedHistogramsAndPhases(GPXfile):1009 ''' Returns all histograms that are found in any phase1010 and any phase that uses a histogram1011 input:1012 GPXfile = .gpx full file name1013 return:1014 Histograms = dictionary of histograms as {name:data,...}1015 Phases = dictionary of phases that use histograms1016 '''1017 phaseNames = GetPhaseNames(GPXfile)1018 histoList = GetHistogramNames(GPXfile,['PWDR','HKLF'])1019 allHistograms = GetHistograms(GPXfile,histoList)1020 phaseData = {}1021 for name in phaseNames:1022 phaseData[name] = GetAllPhaseData(GPXfile,name)1023 Histograms = {}1024 Phases = {}1025 for phase in phaseData:1026 Phase = phaseData[phase]1027 if Phase['Histograms']:1028 if phase not in Phases:1029 pId = phaseNames.index(phase)1030 Phase['pId'] = pId1031 Phases[phase] = Phase1032 for hist in Phase['Histograms']:1033 if hist not in Histograms:1034 Histograms[hist] = allHistograms[hist]1035 #future restraint, etc. histograms here1036 hId = histoList.index(hist)1037 Histograms[hist]['hId'] = hId1038 return Histograms,Phases1039 1040 def GPXBackup(GPXfile,makeBack=True):1041 import distutils.file_util as dfu1042 GPXpath,GPXname = ospath.split(GPXfile)1043 if GPXpath == '': GPXpath = '.'1044 Name = ospath.splitext(GPXname)[0]1045 files = os.listdir(GPXpath)1046 last = 01047 for name in files:1048 name = name.split('.')1049 if len(name) >= 3 and name[0] == Name and 'bak' in name[-2]:1050 if makeBack:1051 last = max(last,int(name[-2].strip('bak'))+1)1052 else:1053 last = max(last,int(name[-2].strip('bak')))1054 GPXback = ospath.join(GPXpath,GPXname.rstrip('.'.join(name[-2:]))+'.bak'+str(last)+'.gpx')1055 dfu.copy_file(GPXfile,GPXback)1056 return GPXback1057 1058 def SetUsedHistogramsAndPhases(GPXfile,Histograms,Phases,CovData,makeBack=True):1059 ''' Updates gpxfile from all histograms that are found in any phase1060 and any phase that used a histogram1061 input:1062 GPXfile = .gpx full file name1063 Histograms = dictionary of histograms as {name:data,...}1064 Phases = dictionary of phases that use histograms1065 CovData = dictionary of refined variables, varyList, & covariance matrix1066 makeBack = True if new backup of .gpx file is to be made; else use the last one made1067 '''1068 1069 GPXback = GPXBackup(GPXfile,makeBack)1070 print '\n',135*'-'1071 print 'Read from file:',GPXback1072 print 'Save to file :',GPXfile1073 infile = open(GPXback,'rb')1074 outfile = open(GPXfile,'wb')1075 while True:1076 try:1077 data = cPickle.load(infile)1078 except EOFError:1079 break1080 datum = data[0]1081 # print 'read: ',datum[0]1082 if datum[0] == 'Phases':1083 for iphase in range(len(data)):1084 if data[iphase][0] in Phases:1085 phaseName = data[iphase][0]1086 data[iphase][1].update(Phases[phaseName])1087 elif datum[0] == 'Covariance':1088 data[0][1] = CovData1089 try:1090 histogram = Histograms[datum[0]]1091 # print 'found ',datum[0]1092 data[0][1][1] = histogram['Data']1093 for datus in data[1:]:1094 # print ' read: ',datus[0]1095 if datus[0] in ['Background','Instrument Parameters','Sample Parameters','Reflection Lists']:1096 datus[1] = histogram[datus[0]]1097 except KeyError:1098 pass1099 1100 cPickle.dump(data,outfile,1)1101 infile.close()1102 outfile.close()1103 print 'GPX file save successful'1104 1105 def SetSeqResult(GPXfile,Histograms,SeqResult):1106 GPXback = GPXBackup(GPXfile)1107 print '\n',135*'-'1108 print 'Read from file:',GPXback1109 print 'Save to file :',GPXfile1110 infile = open(GPXback,'rb')1111 outfile = open(GPXfile,'wb')1112 while True:1113 try:1114 data = cPickle.load(infile)1115 except EOFError:1116 break1117 datum = data[0]1118 if datum[0] == 'Sequental results':1119 data[0][1] = SeqResult1120 try:1121 histogram = Histograms[datum[0]]1122 data[0][1][1] = histogram['Data']1123 for datus in data[1:]:1124 if datus[0] in ['Background','Instrument Parameters','Sample Parameters','Reflection Lists']:1125 datus[1] = histogram[datus[0]]1126 except KeyError:1127 pass1128 1129 cPickle.dump(data,outfile,1)1130 infile.close()1131 outfile.close()1132 print 'GPX file save successful'1133 1134 def GetPWDRdata(GPXfile,PWDRname):1135 ''' Returns powder data from GSASII gpx file1136 input:1137 GPXfile = .gpx full file name1138 PWDRname = powder histogram name as obtained from GetHistogramNames1139 return:1140 PWDRdata = powder data dictionary with:1141 Data - powder data arrays, Limits, Instrument Parameters, Sample Parameters1142 1143 '''1144 file = open(GPXfile,'rb')1145 PWDRdata = {}1146 while True:1147 try:1148 data = cPickle.load(file)1149 except EOFError:1150 break1151 datum = data[0]1152 if datum[0] == PWDRname:1153 PWDRdata['Data'] = datum[1][1] #powder data arrays1154 PWDRdata[data[2][0]] = data[2][1] #Limits1155 PWDRdata[data[3][0]] = data[3][1] #Background1156 PWDRdata[data[4][0]] = data[4][1] #Instrument parameters1157 PWDRdata[data[5][0]] = data[5][1] #Sample parameters1158 try:1159 PWDRdata[data[9][0]] = data[9][1] #Reflection lists might be missing1160 except IndexError:1161 PWDRdata['Reflection lists'] = {}1162 file.close()1163 return PWDRdata1164 1165 def GetHKLFdata(GPXfile,HKLFname):1166 ''' Returns single crystal data from GSASII gpx file1167 input:1168 GPXfile = .gpx full file name1169 HKLFname = single crystal histogram name as obtained from GetHistogramNames1170 return:1171 HKLFdata = single crystal data list of reflections: for each reflection:1172 HKLF = [np.array([h,k,l]),FoSq,sigFoSq,FcSq,Fcp,Fcpp,phase]1173 '''1174 file = open(GPXfile,'rb')1175 HKLFdata = []1176 while True:1177 try:1178 data = cPickle.load(file)1179 except EOFError:1180 break1181 datum = data[0]1182 if datum[0] == HKLFname:1183 HKLFdata = datum[1:][0]1184 file.close()1185 return HKLFdata1186 1187 858 def SaveIntegration(G2frame,PickId,data): 1188 859 azms = G2frame.Integrate[1] -
trunk/GSASIIgrid.py
r478 r482 85 85 [ wxID_RESTRAINTADD, 86 86 ] = [wx.NewId() for _init_coll_Restraint_Items in range(1)] 87 88 [ wxID_SAVESEQSEL, 89 ] = [wx.NewId() for _init_coll_Sequential_Items in range(1)] 87 90 88 91 [ wxID_SELECTPHASE, … … 264 267 self.RestraintEdit.Append(id=wxID_RESTRAINTADD, kind=wx.ITEM_NORMAL,text='Add restraint', 265 268 help='restraint dummy menu item') 269 270 # Sequential results 271 self.SequentialMenu = wx.MenuBar() 272 self.SequentialFile = wx.Menu(title='') 273 self.SequentialMenu.Append(menu=self.SequentialFile, title='File') 274 self.SequentialMenu.Append(menu=MyHelp(self,helpType='Sequential'),title='&Help') 275 self.SequentialFile.Append(id=wxID_SAVESEQSEL, kind=wx.ITEM_NORMAL,text='Save...', 276 help='Save selected sequential refinement results') 266 277 267 278 # PDR / Limits … … 924 935 name = histNames[rows[0]] 925 936 G2plt.PlotCovariance(G2frame,Data=data[name]) 937 938 def OnSaveSelSeq(event): 939 cols = G2frame.dataDisplay.GetSelectedCols() 940 if cols: 941 numRows = G2frame.SeqTable.GetNumberRows() 942 dataNames = [] 943 saveNames = [G2frame.SeqTable.GetRowLabelValue(r) for r in range(numRows)] 944 saveData = [] 945 for col in cols: 946 dataNames.append(G2frame.SeqTable.GetColLabelValue(col)) 947 saveData.append(zip(G2frame.SeqTable.GetColValues(col),GetSigData(col))) 948 saveData = np.array(saveData) 949 dlg = wx.FileDialog(self, 'Choose text output file for your selection', '.', '', 950 'Text output file (*.txt)|*.txt',wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT|wx.CHANGE_DIR) 951 try: 952 if dlg.ShowModal() == wx.ID_OK: 953 SeqTextFile = dlg.GetPath() 954 SeqTextFile = G2IO.FileDlgFixExt(dlg,SeqTextFile) 955 SeqFile = open(SeqTextFile,'w') 956 finally: 957 dlg.Destroy() 958 959 print dataNames,saveData.shape 926 960 927 961 if G2frame.dataDisplay: … … 938 972 atomList[newAtomDict[item][0]] = item 939 973 sampleParms = GetSampleParms() 940 G2frame.dataFrame.SetMenuBar(G2frame.dataFrame. BlankMenu)974 G2frame.dataFrame.SetMenuBar(G2frame.dataFrame.SequentialMenu) 941 975 G2frame.dataFrame.SetLabel('Sequental refinement results') 942 976 G2frame.dataFrame.CreateStatusBar() 977 G2frame.dataFrame.Bind(wx.EVT_MENU, OnSaveSelSeq, id=wxID_SAVESEQSEL) 943 978 colLabels = data['varyList']+atomList.keys()+cellList.keys() 944 979 Types = len(data['varyList']+atomList.keys()+cellList.keys())*[wg.GRID_VALUE_FLOAT,] -
trunk/GSASIIpwd.py
r453 r482 11 11 import sys 12 12 import math 13 import wx14 13 import time 15 14 … … 23 22 24 23 import GSASIIpath 25 import GSASIIplot as G2plt26 24 import GSASIIlattice as G2lat 27 25 import GSASIIElem as G2elem … … 945 943 parmdict.update(zip(varylist,values)) 946 944 947 def DoPeakFit(FitPgm,Peaks,Background,Limits,Inst,data,oneCycle=False,controls=None ):945 def DoPeakFit(FitPgm,Peaks,Background,Limits,Inst,data,oneCycle=False,controls=None,dlg=None): 948 946 949 947 def SetBackgroundParms(Background): … … 1200 1198 values = np.array(Dict2Values(parmDict, varyList)) 1201 1199 if FitPgm == 'LSQ': 1202 dlg = wx.ProgressDialog('Residual','Peak fit Rwp = ',101.0,1203 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT)1204 screenSize = wx.ClientDisplayRect()1205 Size = dlg.GetSize()1206 dlg.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5))1207 1200 try: 1208 1201 result = so.leastsq(errPeakProfile,values,Dfun=devPeakProfile,full_output=True,ftol=Ftol,col_deriv=True, -
trunk/GSASIIpwdGUI.py
r468 r482 120 120 data = G2frame.PatternTree.GetItemPyData(PatternId)[1] 121 121 wx.BeginBusyCursor() 122 try: 123 G2pwd.DoPeakFit(FitPgm,peaks,background,limits,inst,data,oneCycle,controls) 122 dlg = wx.ProgressDialog('Residual','Peak fit Rwp = ',101.0, 123 style = wx.PD_ELAPSED_TIME|wx.PD_AUTO_HIDE|wx.PD_REMAINING_TIME|wx.PD_CAN_ABORT) 124 screenSize = wx.ClientDisplayRect() 125 Size = dlg.GetSize() 126 dlg.SetPosition(wx.Point(screenSize[2]-Size[0]-305,screenSize[1]+5)) 127 try: 128 G2pwd.DoPeakFit(FitPgm,peaks,background,limits,inst,data,oneCycle,controls,dlg) 124 129 finally: 125 130 wx.EndBusyCursor() -
trunk/GSASIIstruct.py
r480 r482 8 8 ########### SVN repository information ################### 9 9 import sys 10 import numpy as np 11 import numpy.linalg as nl 10 import os 12 11 import os.path as ospath 13 12 import time 14 13 import math 14 import cPickle 15 import numpy as np 16 import numpy.linalg as nl 17 import scipy.optimize as so 15 18 import GSASIIpath 16 import GSASIIIO as G2IO17 19 import GSASIIElem as G2el 18 20 import GSASIIlattice as G2lat … … 21 23 import GSASIImapvars as G2mv 22 24 import GSASIImath as G2mth 23 import scipy.optimize as so24 25 25 26 sind = lambda x: np.sin(x*np.pi/180.) … … 31 32 32 33 34 def GetControls(GPXfile): 35 ''' Returns dictionary of control items found in GSASII gpx file 36 input: 37 GPXfile = .gpx full file name 38 return: 39 Controls = dictionary of control items 40 ''' 41 Controls = {'deriv type':'analytical','min dM/M':0.0001,'shift factor':1.} 42 file = open(GPXfile,'rb') 43 while True: 44 try: 45 data = cPickle.load(file) 46 except EOFError: 47 break 48 datum = data[0] 49 if datum[0] == 'Controls': 50 Controls.update(datum[1]) 51 file.close() 52 return Controls 53 54 def GetConstraints(GPXfile): 55 constList = [] 56 file = open(GPXfile,'rb') 57 while True: 58 try: 59 data = cPickle.load(file) 60 except EOFError: 61 break 62 datum = data[0] 63 if datum[0] == 'Constraints': 64 constDict = datum[1] 65 for item in constDict: 66 constList += constDict[item] 67 file.close() 68 constDict = [] 69 constFlag = [] 70 fixedList = [] 71 for item in constList: 72 if item[-2]: 73 fixedList.append(str(item[-2])) 74 else: 75 fixedList.append('0') 76 if item[-1]: 77 constFlag.append(['VARY']) 78 else: 79 constFlag.append([]) 80 itemDict = {} 81 for term in item[:-2]: 82 itemDict[term[1]] = term[0] 83 constDict.append(itemDict) 84 return constDict,constFlag,fixedList 85 86 def GetPhaseNames(GPXfile): 87 ''' Returns a list of phase names found under 'Phases' in GSASII gpx file 88 input: 89 GPXfile = gpx full file name 90 return: 91 PhaseNames = list of phase names 92 ''' 93 file = open(GPXfile,'rb') 94 PhaseNames = [] 95 while True: 96 try: 97 data = cPickle.load(file) 98 except EOFError: 99 break 100 datum = data[0] 101 if 'Phases' == datum[0]: 102 for datus in data[1:]: 103 PhaseNames.append(datus[0]) 104 file.close() 105 return PhaseNames 106 107 def GetAllPhaseData(GPXfile,PhaseName): 108 ''' Returns the entire dictionary for PhaseName from GSASII gpx file 109 input: 110 GPXfile = gpx full file name 111 PhaseName = phase name 112 return: 113 phase dictionary 114 ''' 115 file = open(GPXfile,'rb') 116 General = {} 117 Atoms = [] 118 while True: 119 try: 120 data = cPickle.load(file) 121 except EOFError: 122 break 123 datum = data[0] 124 if 'Phases' == datum[0]: 125 for datus in data[1:]: 126 if datus[0] == PhaseName: 127 break 128 file.close() 129 return datus[1] 130 131 def GetHistograms(GPXfile,hNames): 132 """ Returns a dictionary of histograms found in GSASII gpx file 133 input: 134 GPXfile = .gpx full file name 135 hNames = list of histogram names 136 return: 137 Histograms = dictionary of histograms (types = PWDR & HKLF) 138 """ 139 file = open(GPXfile,'rb') 140 Histograms = {} 141 while True: 142 try: 143 data = cPickle.load(file) 144 except EOFError: 145 break 146 datum = data[0] 147 hist = datum[0] 148 if hist in hNames: 149 if 'PWDR' in hist[:4]: 150 PWDRdata = {} 151 PWDRdata['Data'] = datum[1][1] #powder data arrays 152 PWDRdata[data[2][0]] = data[2][1] #Limits 153 PWDRdata[data[3][0]] = data[3][1] #Background 154 PWDRdata[data[4][0]] = data[4][1] #Instrument parameters 155 PWDRdata[data[5][0]] = data[5][1] #Sample parameters 156 try: 157 PWDRdata[data[9][0]] = data[9][1] #Reflection lists might be missing 158 except IndexError: 159 PWDRdata['Reflection lists'] = {} 160 161 Histograms[hist] = PWDRdata 162 elif 'HKLF' in hist[:4]: 163 HKLFdata = [] 164 datum = data[0] 165 HKLFdata = datum[1:][0] 166 Histograms[hist] = HKLFdata 167 file.close() 168 return Histograms 169 170 def GetHistogramNames(GPXfile,hType): 171 """ Returns a list of histogram names found in GSASII gpx file 172 input: 173 GPXfile = .gpx full file name 174 hType = list ['PWDR','HKLF'] 175 return: 176 HistogramNames = list of histogram names (types = PWDR & HKLF) 177 """ 178 file = open(GPXfile,'rb') 179 HistogramNames = [] 180 while True: 181 try: 182 data = cPickle.load(file) 183 except EOFError: 184 break 185 datum = data[0] 186 if datum[0][:4] in hType: 187 HistogramNames.append(datum[0]) 188 file.close() 189 return HistogramNames 190 191 def GetUsedHistogramsAndPhases(GPXfile): 192 ''' Returns all histograms that are found in any phase 193 and any phase that uses a histogram 194 input: 195 GPXfile = .gpx full file name 196 return: 197 Histograms = dictionary of histograms as {name:data,...} 198 Phases = dictionary of phases that use histograms 199 ''' 200 phaseNames = GetPhaseNames(GPXfile) 201 histoList = GetHistogramNames(GPXfile,['PWDR','HKLF']) 202 allHistograms = GetHistograms(GPXfile,histoList) 203 phaseData = {} 204 for name in phaseNames: 205 phaseData[name] = GetAllPhaseData(GPXfile,name) 206 Histograms = {} 207 Phases = {} 208 for phase in phaseData: 209 Phase = phaseData[phase] 210 if Phase['Histograms']: 211 if phase not in Phases: 212 pId = phaseNames.index(phase) 213 Phase['pId'] = pId 214 Phases[phase] = Phase 215 for hist in Phase['Histograms']: 216 if hist not in Histograms: 217 Histograms[hist] = allHistograms[hist] 218 #future restraint, etc. histograms here 219 hId = histoList.index(hist) 220 Histograms[hist]['hId'] = hId 221 return Histograms,Phases 222 223 def GPXBackup(GPXfile,makeBack=True): 224 import distutils.file_util as dfu 225 GPXpath,GPXname = ospath.split(GPXfile) 226 if GPXpath == '': GPXpath = '.' 227 Name = ospath.splitext(GPXname)[0] 228 files = os.listdir(GPXpath) 229 last = 0 230 for name in files: 231 name = name.split('.') 232 if len(name) >= 3 and name[0] == Name and 'bak' in name[-2]: 233 if makeBack: 234 last = max(last,int(name[-2].strip('bak'))+1) 235 else: 236 last = max(last,int(name[-2].strip('bak'))) 237 GPXback = ospath.join(GPXpath,GPXname.rstrip('.'.join(name[-2:]))+'.bak'+str(last)+'.gpx') 238 dfu.copy_file(GPXfile,GPXback) 239 return GPXback 240 241 def SetUsedHistogramsAndPhases(GPXfile,Histograms,Phases,CovData,makeBack=True): 242 ''' Updates gpxfile from all histograms that are found in any phase 243 and any phase that used a histogram 244 input: 245 GPXfile = .gpx full file name 246 Histograms = dictionary of histograms as {name:data,...} 247 Phases = dictionary of phases that use histograms 248 CovData = dictionary of refined variables, varyList, & covariance matrix 249 makeBack = True if new backup of .gpx file is to be made; else use the last one made 250 ''' 251 252 GPXback = GPXBackup(GPXfile,makeBack) 253 print '\n',135*'-' 254 print 'Read from file:',GPXback 255 print 'Save to file :',GPXfile 256 infile = open(GPXback,'rb') 257 outfile = open(GPXfile,'wb') 258 while True: 259 try: 260 data = cPickle.load(infile) 261 except EOFError: 262 break 263 datum = data[0] 264 # print 'read: ',datum[0] 265 if datum[0] == 'Phases': 266 for iphase in range(len(data)): 267 if data[iphase][0] in Phases: 268 phaseName = data[iphase][0] 269 data[iphase][1].update(Phases[phaseName]) 270 elif datum[0] == 'Covariance': 271 data[0][1] = CovData 272 try: 273 histogram = Histograms[datum[0]] 274 # print 'found ',datum[0] 275 data[0][1][1] = histogram['Data'] 276 for datus in data[1:]: 277 # print ' read: ',datus[0] 278 if datus[0] in ['Background','Instrument Parameters','Sample Parameters','Reflection Lists']: 279 datus[1] = histogram[datus[0]] 280 except KeyError: 281 pass 282 283 cPickle.dump(data,outfile,1) 284 infile.close() 285 outfile.close() 286 print 'GPX file save successful' 287 288 def SetSeqResult(GPXfile,Histograms,SeqResult): 289 GPXback = GPXBackup(GPXfile) 290 print '\n',135*'-' 291 print 'Read from file:',GPXback 292 print 'Save to file :',GPXfile 293 infile = open(GPXback,'rb') 294 outfile = open(GPXfile,'wb') 295 while True: 296 try: 297 data = cPickle.load(infile) 298 except EOFError: 299 break 300 datum = data[0] 301 if datum[0] == 'Sequental results': 302 data[0][1] = SeqResult 303 try: 304 histogram = Histograms[datum[0]] 305 data[0][1][1] = histogram['Data'] 306 for datus in data[1:]: 307 if datus[0] in ['Background','Instrument Parameters','Sample Parameters','Reflection Lists']: 308 datus[1] = histogram[datus[0]] 309 except KeyError: 310 pass 311 312 cPickle.dump(data,outfile,1) 313 infile.close() 314 outfile.close() 315 print 'GPX file save successful' 316 317 def GetPWDRdata(GPXfile,PWDRname): 318 ''' Returns powder data from GSASII gpx file 319 input: 320 GPXfile = .gpx full file name 321 PWDRname = powder histogram name as obtained from GetHistogramNames 322 return: 323 PWDRdata = powder data dictionary with: 324 Data - powder data arrays, Limits, Instrument Parameters, Sample Parameters 325 326 ''' 327 file = open(GPXfile,'rb') 328 PWDRdata = {} 329 while True: 330 try: 331 data = cPickle.load(file) 332 except EOFError: 333 break 334 datum = data[0] 335 if datum[0] == PWDRname: 336 PWDRdata['Data'] = datum[1][1] #powder data arrays 337 PWDRdata[data[2][0]] = data[2][1] #Limits 338 PWDRdata[data[3][0]] = data[3][1] #Background 339 PWDRdata[data[4][0]] = data[4][1] #Instrument parameters 340 PWDRdata[data[5][0]] = data[5][1] #Sample parameters 341 try: 342 PWDRdata[data[9][0]] = data[9][1] #Reflection lists might be missing 343 except IndexError: 344 PWDRdata['Reflection lists'] = {} 345 file.close() 346 return PWDRdata 347 348 def GetHKLFdata(GPXfile,HKLFname): 349 ''' Returns single crystal data from GSASII gpx file 350 input: 351 GPXfile = .gpx full file name 352 HKLFname = single crystal histogram name as obtained from GetHistogramNames 353 return: 354 HKLFdata = single crystal data list of reflections: for each reflection: 355 HKLF = [np.array([h,k,l]),FoSq,sigFoSq,FcSq,Fcp,Fcpp,phase] 356 ''' 357 file = open(GPXfile,'rb') 358 HKLFdata = [] 359 while True: 360 try: 361 data = cPickle.load(file) 362 except EOFError: 363 break 364 datum = data[0] 365 if datum[0] == HKLFname: 366 HKLFdata = datum[1:][0] 367 file.close() 368 return HKLFdata 369 33 370 def ShowBanner(): 34 371 print 80*'*' … … 2277 2614 calcControls = {} 2278 2615 G2mv.InitVars() 2279 Controls = G 2IO.GetControls(GPXfile)2616 Controls = GetControls(GPXfile) 2280 2617 ShowControls(Controls) 2281 constrDict,constrFlag,fixedList = G 2IO.GetConstraints(GPXfile)2282 Histograms,Phases = G 2IO.GetUsedHistogramsAndPhases(GPXfile)2618 constrDict,constrFlag,fixedList = GetConstraints(GPXfile) 2619 Histograms,Phases = GetUsedHistogramsAndPhases(GPXfile) 2283 2620 if not Phases: 2284 2621 print ' *** ERROR - you have no histograms to refine! ***' … … 2392 2729 SetHistogramData(parmDict,sigDict,Histograms) 2393 2730 G2mv.PrintIndependentVars(parmDict,varyList,sigDict) 2394 G2IO.SetUsedHistogramsAndPhases(GPXfile,Histograms,Phases,covData)2731 SetUsedHistogramsAndPhases(GPXfile,Histograms,Phases,covData) 2395 2732 2396 2733 #for testing purposes!!! … … 2418 2755 print ' Sequential Refinement' 2419 2756 G2mv.InitVars() 2420 Controls = G 2IO.GetControls(GPXfile)2757 Controls = GetControls(GPXfile) 2421 2758 ShowControls(Controls) 2422 constrDict,constrFlag,fixedList = G 2IO.GetConstraints(GPXfile)2423 Histograms,Phases = G 2IO.GetUsedHistogramsAndPhases(GPXfile)2759 constrDict,constrFlag,fixedList = GetConstraints(GPXfile) 2760 Histograms,Phases = GetUsedHistogramsAndPhases(GPXfile) 2424 2761 if not Phases: 2425 2762 print ' *** ERROR - you have no histograms to refine! ***' … … 2434 2771 histNames = Controls['Seq Data'] 2435 2772 else: 2436 histNames = G 2IO.GetHistogramNames(GPXfile,['PWDR',])2773 histNames = GetHistogramNames(GPXfile,['PWDR',]) 2437 2774 if 'Reverse Seq' in Controls: 2438 2775 if Controls['Reverse Seq']: … … 2552 2889 SetHistogramData(parmDict,sigDict,Histo,ifPrint) 2553 2890 SeqResult[histogram] = covData 2554 G2IO.SetUsedHistogramsAndPhases(GPXfile,Histo,Phases,covData,makeBack)2891 SetUsedHistogramsAndPhases(GPXfile,Histo,Phases,covData,makeBack) 2555 2892 makeBack = False 2556 G2IO.SetSeqResult(GPXfile,Histograms,SeqResult)2893 SetSeqResult(GPXfile,Histograms,SeqResult) 2557 2894 2558 2895 def DistAngle(DisAglCtls,DisAglData):
Note: See TracChangeset
for help on using the changeset viewer.