Changeset 249


Ignore:
Timestamp:
Feb 18, 2011 3:36:51 PM (11 years ago)
Author:
vondreele
Message:

Modify export powder & delete data to allow global selections
make sure azimuth goes with pattern
refactor powderXyeSave & powderFxyeSave

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASII.py

    r248 r249  
    162162    def _init_coll_Export_Items(self,parent):
    163163        self.ExportPattern = parent.Append(help='Select PWDR item to enable',id=wxID_EXPORTPATTERN, kind=wx.ITEM_NORMAL,
    164             text='Export Powder Pattern...')
     164            text='Export Powder Patterns...')
    165165        self.ExportPeakList = parent.Append(help='',id=wxID_EXPORTPEAKLIST, kind=wx.ITEM_NORMAL,
    166166            text='Export All Peak Lists...')
     
    176176        self.ExportPhase.Enable(False)
    177177        self.ExportCIF.Enable(False)
    178         self.Bind(wx.EVT_MENU, self.OnExportPattern, id=wxID_EXPORTPATTERN)
     178        self.Bind(wx.EVT_MENU, self.OnExportPatterns, id=wxID_EXPORTPATTERN)
    179179        self.Bind(wx.EVT_MENU, self.OnExportPeakList, id=wxID_EXPORTPEAKLIST)
    180180        self.Bind(wx.EVT_MENU, self.OnExportHKL, id=wxID_EXPORTHKL)
     
    358358                                v = Iparm['INS  1PRCF11'].split()
    359359                                data.extend([float(v[0]),float(v[1]),float(v[2])])                  #get GU, GV & GW - always here
     360                                try:
     361                                    azm = float(Iparm['INS  1DETAZM'])
     362                                except KeyError:                                                #not in this Iparm file
     363                                    azm = 0.0
    360364                                v = Iparm['INS  1PRCF12'].split()
    361365                                if v1[0] == 3:
    362                                     data.extend([float(v[0]),float(v[1]),float(v[2])+float(v[3],0.0)])  #get LX, LY, S+H/L & azimuth
     366                                    data.extend([float(v[0]),float(v[1]),float(v[2])+float(v[3],azm)])  #get LX, LY, S+H/L & azimuth
    363367                                else:
    364                                     data.extend([0.0,0.0,0.002,0.0])                                      #OK defaults if fxn #3 not 1st in iprm file
     368                                    data.extend([0.0,0.0,0.002,azm])                                      #OK defaults if fxn #3 not 1st in iprm file
    365369                                codes.extend([0,0,0,0,0,0,0])
    366370                            self.PatternTree.SetItemPyData(self.PatternTree.AppendItem(Id,text='Instrument Parameters'),[tuple(data),data,codes,names])
     
    900904       
    901905    def OnDataDelete(self, event):
    902         TextList = []
     906        TextList = ['All Data']
    903907        DelList = []
    904908        DelItemList = []
     909        ifPWDR = False
     910        ifIMG = False
     911        ifHKLF = False
    905912        if self.PatternTree.GetCount():
    906913            item, cookie = self.PatternTree.GetFirstChild(self.root)
     
    908915                name = self.PatternTree.GetItemText(item)
    909916                if 'PWDR' in name or 'HKLF' in name or 'IMG' in name:
     917                    if 'PWDR' in name: ifPWDR = True
     918                    if 'IMG' in name: ifIMG = True
     919                    if 'HKLF' in name: ifHKLF = True
    910920                    TextList.append(name)
    911                 item, cookie = self.PatternTree.GetNextChild(self.root, cookie)               
     921                item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
     922            if ifPWDR: TextList.insert(1,'All PWDR')
     923            if ifIMG: TextList.insert(1,'All IMG')
     924            if ifHKLF: TextList.insert(1,'All HKLF')               
    912925            dlg = wx.MultiChoiceDialog(self, 'Which data to delete?', 'Delete data', TextList, wx.CHOICEDLG_STYLE)
    913926            try:
     
    915928                    result = dlg.GetSelections()
    916929                    for i in result: DelList.append(TextList[i])
     930                    if 'All Data' in DelList:
     931                        DelList = [item for item in TextList if item[:3] != 'All']
     932                    elif 'All PWDR' in DelList:
     933                        DelList = [item for item in TextList if item[:4] == 'PWDR']
     934                    elif 'All IMG' in DelList:
     935                        DelList = [item for item in TextList if item[:3] == 'IMG']
     936                    elif 'All HKLF' in DelList:
     937                        DelList = [item for item in TextList if item[:4] == 'HKLF']
    917938                    item, cookie = self.PatternTree.GetFirstChild(self.root)
    918939                    while item:
     
    10241045       
    10251046    def OnImportPattern(self,event):
    1026             dlg = wx.FileDialog(self, 'Choose nonGSAS powder file', '.', '',
    1027                 '(*.*)|*.*',wx.OPEN)
     1047        dlg = wx.FileDialog(self, 'Choose nonGSAS powder file', '.', '',
     1048            '(*.*)|*.*',wx.OPEN)
     1049        if self.dirname:
     1050            dlg.SetDirectory(self.dirname)
     1051        try:
     1052            if dlg.ShowModal() == wx.ID_OK:
     1053                self.powderfile = dlg.GetPath()
     1054                self.dirname = dlg.GetDirectory()
     1055        finally:
     1056            dlg.Destroy()
     1057           
     1058    def OnImportHKL(self,event):
     1059        dlg = wx.FileDialog(self, 'Choose structure factor file', '.', '',
     1060            '(*.*)|*.*',wx.OPEN)
     1061        if self.dirname:
     1062            dlg.SetDirectory(self.dirname)
     1063        try:
     1064            if dlg.ShowModal() == wx.ID_OK:
     1065                self.HKLfile = dlg.GetPath()
     1066                self.dirname = dlg.GetDirectory()
     1067        finally:
     1068            dlg.Destroy()
     1069       
     1070    def OnImportPhase(self,event):
     1071        dlg = wx.FileDialog(self, 'Choose GSAS EXP file', '.', '',
     1072            'EXP file (*.EXP)|*.EXP',wx.OPEN)
     1073        if self.dirname:
     1074            dlg.SetDirectory(self.dirname)
     1075        try:
     1076            Phase = {}
     1077            if dlg.ShowModal() == wx.ID_OK:
     1078                EXPfile = dlg.GetPath()
     1079                self.dirname = dlg.GetDirectory()
     1080                Phase = G2IO.ReadEXPPhase(self,EXPfile)
     1081        finally:
     1082            dlg.Destroy()
     1083        if Phase:
     1084            PhaseName = Phase['General']['Name']
     1085            if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'):
     1086                sub = self.PatternTree.AppendItem(parent=self.root,text='Phases')
     1087            else:
     1088                sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases')
     1089            sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName)
     1090            self.PatternTree.SetItemPyData(sub,Phase)
     1091           
     1092    def OnImportPDB(self,event):
     1093        dlg = wx.FileDialog(self, 'Choose PDB file', '.', '',
     1094            'PDB file (*.pdb,*.ent)|*.pdb;*.ent|All files (*.*)|*.*',wx.OPEN)
     1095        if self.dirname:
     1096            dlg.SetDirectory(self.dirname)
     1097        try:
     1098            if dlg.ShowModal() == wx.ID_OK:
     1099                PDBfile = dlg.GetPath()
     1100                self.dirname = dlg.GetDirectory()
     1101                Phase = G2IO.ReadPDBPhase(PDBfile)
     1102        finally:
     1103            dlg.Destroy()
     1104        if Phase:
     1105            PhaseName = Phase['General']['Name']
     1106            if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'):
     1107                sub = self.PatternTree.AppendItem(parent=self.root,text='Phases')
     1108            else:
     1109                sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases')
     1110            sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName)
     1111            self.PatternTree.SetItemPyData(sub,Phase)       
     1112       
     1113    def OnImportCIF(self,event):
     1114        dlg = wx.FileDialog(self, 'Choose CIF file', '.', '',
     1115            'CIF file (*.cif)|*.cif',wx.OPEN)
     1116        if self.dirname:
     1117            dlg.SetDirectory(self.dirname)
     1118        try:
     1119            if dlg.ShowModal() == wx.ID_OK:
     1120                CIFfile = dlg.GetPath()
     1121                self.dirname = dlg.GetDirectory()
     1122                Phase = G2IO.ReadCIFPhase(CIFfile)
     1123        finally:
     1124            dlg.Destroy()
     1125        if Phase:
     1126            PhaseName = Phase['General']['Name']
     1127            if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'):
     1128                sub = self.PatternTree.AppendItem(parent=self.root,text='Phases')
     1129            else:
     1130                sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases')
     1131            sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName)
     1132            self.PatternTree.SetItemPyData(sub,Phase)       
     1133       
     1134    def OnExportPatterns(self,event):
     1135        names = ['All']
     1136        exports = []
     1137        item, cookie = self.PatternTree.GetFirstChild(self.root)
     1138        while item:
     1139            name = self.PatternTree.GetItemText(item)
     1140            if 'PWDR' in name:
     1141                names.append(name)
     1142            item, cookie = self.PatternTree.GetNextChild(self.root, cookie)
     1143        if names:
     1144            dlg = wx.MultiChoiceDialog(self,'Select','Powder patterns to export',names)
     1145            if dlg.ShowModal() == wx.ID_OK:
     1146                sel = dlg.GetSelections()
     1147                if sel[0] == 0:
     1148                    exports = names[1:]
     1149                else:
     1150                    for x in sel:
     1151                        exports.append(names[x])
     1152            dlg.Destroy()
     1153        if exports:
     1154            dlg = wx.FileDialog(self, 'Choose output powder file name', '.', '',
     1155                'GSAS fxye file (*.fxye)|*.fxye|xye file (*.xye)|*.xye',
     1156                wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
    10281157            if self.dirname:
    10291158                dlg.SetDirectory(self.dirname)
    10301159            try:
    10311160                if dlg.ShowModal() == wx.ID_OK:
    1032                     self.powderfile = dlg.GetPath()
     1161                    powderfile = dlg.GetPath()
     1162                    if 'fxye' in powderfile:
     1163                        G2IO.powderFxyeSave(self,exports,powderfile)
     1164                    else:       #just xye
     1165                        G2IO.powderXyeSave(self,exports,powderfile)
    10331166                    self.dirname = dlg.GetDirectory()
    10341167            finally:
    10351168                dlg.Destroy()
    1036                
    1037     def OnImportHKL(self,event):
    1038             dlg = wx.FileDialog(self, 'Choose structure factor file', '.', '',
    1039                 '(*.*)|*.*',wx.OPEN)
    1040             if self.dirname:
    1041                 dlg.SetDirectory(self.dirname)
    1042             try:
    1043                 if dlg.ShowModal() == wx.ID_OK:
    1044                     self.HKLfile = dlg.GetPath()
    1045                     self.dirname = dlg.GetDirectory()
    1046             finally:
    1047                 dlg.Destroy()
    1048        
    1049     def OnImportPhase(self,event):
    1050             dlg = wx.FileDialog(self, 'Choose GSAS EXP file', '.', '',
    1051                 'EXP file (*.EXP)|*.EXP',wx.OPEN)
    1052             if self.dirname:
    1053                 dlg.SetDirectory(self.dirname)
    1054             try:
    1055                 Phase = {}
    1056                 if dlg.ShowModal() == wx.ID_OK:
    1057                     EXPfile = dlg.GetPath()
    1058                     self.dirname = dlg.GetDirectory()
    1059                     Phase = G2IO.ReadEXPPhase(self,EXPfile)
    1060             finally:
    1061                 dlg.Destroy()
    1062             if Phase:
    1063                 PhaseName = Phase['General']['Name']
    1064                 if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'):
    1065                     sub = self.PatternTree.AppendItem(parent=self.root,text='Phases')
    1066                 else:
    1067                     sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases')
    1068                 sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName)
    1069                 self.PatternTree.SetItemPyData(sub,Phase)
    1070                
    1071     def OnImportPDB(self,event):
    1072             dlg = wx.FileDialog(self, 'Choose PDB file', '.', '',
    1073                 'PDB file (*.pdb,*.ent)|*.pdb;*.ent|All files (*.*)|*.*',wx.OPEN)
    1074             if self.dirname:
    1075                 dlg.SetDirectory(self.dirname)
    1076             try:
    1077                 if dlg.ShowModal() == wx.ID_OK:
    1078                     PDBfile = dlg.GetPath()
    1079                     self.dirname = dlg.GetDirectory()
    1080                     Phase = G2IO.ReadPDBPhase(PDBfile)
    1081             finally:
    1082                 dlg.Destroy()
    1083             if Phase:
    1084                 PhaseName = Phase['General']['Name']
    1085                 if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'):
    1086                     sub = self.PatternTree.AppendItem(parent=self.root,text='Phases')
    1087                 else:
    1088                     sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases')
    1089                 sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName)
    1090                 self.PatternTree.SetItemPyData(sub,Phase)       
    1091        
    1092     def OnImportCIF(self,event):
    1093             dlg = wx.FileDialog(self, 'Choose CIF file', '.', '',
    1094                 'CIF file (*.cif)|*.cif',wx.OPEN)
    1095             if self.dirname:
    1096                 dlg.SetDirectory(self.dirname)
    1097             try:
    1098                 if dlg.ShowModal() == wx.ID_OK:
    1099                     CIFfile = dlg.GetPath()
    1100                     self.dirname = dlg.GetDirectory()
    1101                     Phase = G2IO.ReadCIFPhase(CIFfile)
    1102             finally:
    1103                 dlg.Destroy()
    1104             if Phase:
    1105                 PhaseName = Phase['General']['Name']
    1106                 if not G2gd.GetPatternTreeItemId(self,self.root,'Phases'):
    1107                     sub = self.PatternTree.AppendItem(parent=self.root,text='Phases')
    1108                 else:
    1109                     sub = G2gd.GetPatternTreeItemId(self,self.root,'Phases')
    1110                 sub = self.PatternTree.AppendItem(parent=sub,text=PhaseName)
    1111                 self.PatternTree.SetItemPyData(sub,Phase)       
    1112        
    1113     def OnExportPattern(self,event):
    1114         dlg = wx.FileDialog(self, 'Choose output powder file name', '.', '',
    1115             'GSAS fxye file (*.fxye)|*.fxye|xye file (*.xye)|*.xye',
    1116             wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
    1117         if self.dirname:
    1118             dlg.SetDirectory(self.dirname)
    1119         try:
    1120             if dlg.ShowModal() == wx.ID_OK:
    1121                 powderfile = dlg.GetPath()
    1122                 if 'fxye' in powderfile:
    1123                     G2IO.powderFxyeSave(self,powderfile)
    1124                 else:       #just xye
    1125                     G2IO.powderXyeSave(self,powderfile)
    1126                 self.dirname = dlg.GetDirectory()
    1127         finally:
    1128             dlg.Destroy()
    11291169       
    11301170    def OnExportPeakList(self,event):
  • trunk/GSASIIIO.py

    r246 r249  
    802802        parms[10] = azm
    803803        Y = self.Integrate[0][i]
    804         W = np.sqrt(Y)
     804        W = 1./Y                    #probably not true
    805805        Sample = {'Scale':[1.0,True],'Type':'Debye-Scherrer','Absorption':[0.0,False],'DisplaceX':[0.0,False],
    806806            'DisplaceY':[0.0,False],'Diffuse':[],'Temperature':300.,'Pressure':1.0,'Humidity':0.0,'Voltage':0.0,'Force':0.0}
     
    828828    self.PatternId = Id
    829829           
    830 def powderFxyeSave(self,powderfile):
    831     file = open(powderfile,'w')
    832     prm = open(powderfile.strip('fxye')+'prm','w')      #old style GSAS parm file
    833     print 'save powder pattern to file: ',powderfile
     830def powderFxyeSave(self,exports,powderfile):
     831    head,tail = ospath.split(powderfile)
     832    name,ext = tail.split('.')
    834833    wx.BeginBusyCursor()
    835     Inst = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, \
    836                     self.PickId, 'Instrument Parameters'))[1]
    837     if len(Inst) == 11:             #single wavelength
    838         lam1 = Inst[1]
    839         lam2 = 0.0
    840         GU,GV,GW = Inst[4:7]
    841         LX,LY = Inst[7:9]
    842         SL = HL = Inst[9]/2.0   
    843     else:                           #Ka1 & Ka2
    844         lam1 = Inst[1]
    845         lam2 = Inst[2]
    846         GU,GV,GW = Inst[6:9]
    847         LX,LY = Inst[9:11]
    848         SL = HL = Inst[11]/2.0   
    849     prm.write( '            123456789012345678901234567890123456789012345678901234567890        '+'\n')
    850     prm.write( 'INS   BANK      1                                                               '+'\n')
    851     prm.write( 'INS   HTYPE   PXCR                                                              '+'\n')
    852     prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(lam1,lam2))
    853     prm.write( 'INS  1 IRAD     0                                                               '+'\n')
    854     prm.write( 'INS  1I HEAD                                                                    '+'\n')
    855     prm.write( 'INS  1I ITYP    0    0.0000  180.0000         1                                 '+'\n')
    856     prm.write( 'INS  1PRCF1     3    8   0.00100                                                '+'\n')
    857     prm.write(('INS  1PRCF11     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(GU,GV,GW,0.0))
    858     prm.write(('INS  1PRCF12     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(LX,LY,SL,HL))
    859     prm.close()
    860     try:
    861         x,y,w,yc,yb,yd = self.PatternTree.GetItemPyData(self.PickId)[1]
    862         file.write(powderfile+'\n')
    863         file.write('BANK 1 %d %d CONS %.2f %.2f 0 0 FXYE\n'%(len(x),len(x),\
    864             100.*x[0],100.*(x[1]-x[0])))
    865         s = list(np.sqrt(1./np.array(w)))       
    866         XYW = zip(x,y,s)
    867         for X,Y,S in XYW:
    868             file.write("%15.6g %15.6g %15.6g\n" % (100.*X,Y,S))
    869         file.close()
    870     finally:
    871         wx.EndBusyCursor()
    872     print 'powder pattern file written'
     834    for i,export in enumerate(exports):
     835        filename = ospath.join(head,name+'-%03d.'%(i)+ext)
     836        prmname = filename.strip(ext)+'prm'
     837        prm = open(prmname,'w')      #old style GSAS parm file
     838        PickId = G2gd.GetPatternTreeItemId(self, self.root, export)
     839        Values,Names = self.PatternTree.GetItemPyData(G2gd.GetPatternTreeItemId(self, \
     840            PickId, 'Instrument Parameters'))[1::2]     #get values & names
     841        Inst = dict(zip(Names,Values))
     842        print Inst['Type']
     843        prm.write( '            123456789012345678901234567890123456789012345678901234567890        '+'\n')
     844        prm.write( 'INS   BANK      1                                                               '+'\n')
     845        prm.write(('INS   HTYPE   %sR                                                              '+'\n')%(Inst['Type']))
     846        if 'Lam1' in Inst:              #Ka1 & Ka2
     847            prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(Inst['Lam1'],Inst['Lam2']))
     848        elif 'Lam' in Inst:             #single wavelength
     849            prm.write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   '+'\n')%(Inst['Lam'],0.0))
     850        prm.write( 'INS  1 IRAD     0                                                               '+'\n')
     851        prm.write( 'INS  1I HEAD                                                                    '+'\n')
     852        prm.write( 'INS  1I ITYP    0    0.0000  180.0000         1                                 '+'\n')
     853        prm.write(('INS  1DETAZM%10.3f                                                          '+'\n')%(Inst['Azimuth']))
     854        prm.write( 'INS  1PRCF1     3    8   0.00100                                                '+'\n')
     855        prm.write(('INS  1PRCF11     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(Inst['U'],Inst['V'],Inst['W'],0.0))
     856        prm.write(('INS  1PRCF12     %15.6g%15.6g%15.6g%15.6g   '+'\n')%(Inst['X'],Inst['Y'],Inst['SH/L']/2.,Inst['SH/L']/2.))
     857        prm.close()
     858        file = open(filename,'w')
     859        print 'save powder pattern to file: ',filename
     860        try:
     861            x,y,w,yc,yb,yd = self.PatternTree.GetItemPyData(PickId)[1]
     862            file.write(powderfile+'\n')
     863            file.write('BANK 1 %d %d CONS %.2f %.2f 0 0 FXYE\n'%(len(x),len(x),\
     864                100.*x[0],100.*(x[1]-x[0])))
     865            s = list(np.sqrt(1./np.array(w)))       
     866            XYW = zip(x,y,s)
     867            for X,Y,S in XYW:
     868                file.write("%15.6g %15.6g %15.6g\n" % (100.*X,Y,max(S,1.0)))
     869            file.close()
     870        finally:
     871            wx.EndBusyCursor()
     872        print 'powder pattern file written'
    873873       
    874 def powderXyeSave(self,powderfile):
    875     file = open(powderfile,'w')
    876     print 'save powder pattern to file: ',powderfile
    877     wx.BeginBusyCursor()
    878     try:
    879         x,y,w,yc,yb,yd = self.PatternTree.GetItemPyData(self.PickId)[1]
    880         XYW = zip(x,y,w)
    881         for X,Y,W in XYW:
    882             file.write("%15.6g %15.6g %15.6g\n" % (X,Y,W))
    883         file.close()
    884     finally:
    885         wx.EndBusyCursor()
    886     print 'powder pattern file written'
     874def powderXyeSave(self,exports,powderfile):
     875    head,tail = ospath.split(powderfile)
     876    name,ext = tail.split('.')
     877    for i,export in enumerate(exports):
     878        filename = ospath.join(head,name+'-%03d.'%(i)+ext)
     879        PickId = G2gd.GetPatternTreeItemId(self, self.root, export)
     880        file = open(filename,'w')
     881        file.write('#%s\n'%(export))
     882        print 'save powder pattern to file: ',filename
     883        wx.BeginBusyCursor()
     884        try:
     885            x,y,w,yc,yb,yd = self.PatternTree.GetItemPyData(PickId)[1]
     886            XYW = zip(x,y,w)
     887            for X,Y,W in XYW:
     888                file.write("%15.6g %15.6g %15.6g\n" % (X,Y,W))
     889            file.close()
     890        finally:
     891            wx.EndBusyCursor()
     892        print 'powder pattern file written'
    887893   
    888894def PeakListSave(self,file,peaks):
Note: See TracChangeset for help on using the changeset viewer.