Source code for GSASII.exports.G2export_examples

# -*- coding: utf-8 -*-
'''Classes in :mod:`~GSASII.exports.G2export_examples` follow:
'''
# note documentation in docs/source/exports.rst
#
from __future__ import division, print_function
import os
import numpy as np
from .. import GSASIIobj as G2obj
from .. import GSASIImath as G2mth
from .. import GSASIIpwd as G2pwd
from .. import GSASIIfiles as G2fil

[docs] class ExportPhaseText(G2fil.ExportBaseclass): '''Used to create a text file for a phase :param wx.Frame G2frame: reference to main GSAS-II frame ''' def __init__(self,G2frame): super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__ G2frame=G2frame, formatName = 'Text file', extension='.txt', longFormatName = 'Export phase as text file' ) self.exporttype = ['phase'] self.multiple = True # allow multiple phases to be selected
[docs] def Exporter(self,event=None): '''Export a phase as a text file ''' # the export process starts here self.InitExport(event) # load all of the tree into a set of dicts self.loadTree() # create a dict with refined values and their uncertainties self.loadParmDict() if self.ExportSelect(): return # set export parameters; prompt for file name self.OpenFile() # if more than one format is selected, put them into a single file for phasenam in self.phasenam: phasedict = self.Phases[phasenam] # pointer to current phase info i = self.Phases[phasenam]['pId'] self.Write('\n'+80*'=') self.Write("Phase "+str(phasenam)+" from "+str(self.G2frame.GSASprojectfile)) self.Write("\nSpace group = "+str(phasedict['General']['SGData']['SpGrp'].strip())) # get cell parameters & print them cellList,cellSig = self.GetCell(phasenam) prevsig = 0 for lbl,defsig,val,sig in zip( ['a','b','c','alpha','beta ','gamma','volume'], 3*[-0.00001] + 3*[-0.001] + [-0.01], # sign values to use when no sigma cellList,cellSig ): if sig: txt = G2mth.ValEsd(val,sig) prevsig = -sig # use this as the significance for next value else: txt = G2mth.ValEsd(val,min(defsig,prevsig),True) self.Write(lbl+' = '+txt) # get atoms and print them in nice columns AtomsList = self.GetAtoms(phasenam) fmt = "{:8s} {:4s} {:4s} {:12s} {:12s} {:12s} {:10s} {:10s}" self.Write('\nAtoms\n'+80*'-') self.Write(fmt.format("label","elem","mult","x","y","z","frac","Uiso")) self.Write(80*'-') aniso = False for lbl,typ,mult,xyz,td in AtomsList: vals = [lbl,typ,str(mult)] if xyz[3][0] == 0: continue for val,sig in xyz: vals.append(G2mth.ValEsd(val,sig)) if len(td) == 1: vals.append(G2mth.ValEsd(td[0][0],td[0][1])) else: vals.append("aniso") aniso = True self.Write(fmt.format(*vals)) # print anisotropic values, if any if aniso: self.Write('\nAnisotropic parameters') self.Write(80*'-') fmt = "{:8s} {:4s} {:10s} {:10s} {:10s} {:10s} {:10s} {:10s}" self.Write(fmt.format("label","elem",'U11','U22','U33','U12','U13','U23')) self.Write(80*'-') for lbl,typ,mult,xyz,td in AtomsList: if len(td) == 1: continue if xyz[3][0] == 0: continue vals = [lbl,typ] for val,sig in td: vals.append(G2mth.ValEsd(val,sig)) self.Write(fmt.format(*vals)) print('Phase '+phasenam+' written to file '+self.fullpath) self.CloseFile()
[docs] class ExportPowderText(G2fil.ExportBaseclass): '''Used to create a text file for a powder data set :param wx.Frame G2frame: reference to main GSAS-II frame ''' def __init__(self,G2frame): super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__ G2frame=G2frame, formatName = 'Text file', extension='.txt', longFormatName = 'Export powder data as text file' ) self.exporttype = ['powder'] self.multiple = True # allow one or more histogram(s) to be selected def Writer(self,TreeName,filename=None): self.OpenFile(filename) histblk = self.Histograms[TreeName] hfmt = 5*"{:12s} " digitList = 2*((13,3),) + ((13,5),) + 2*((13,3),) self.Write(hfmt.format("x","y_obs","weight","y_calc","y_bkg")) for vallist in zip(histblk['Data'][0], histblk['Data'][1], histblk['Data'][2], histblk['Data'][3], histblk['Data'][4], #histblk['Data'][5], ): strg = '' for val,digits in zip(vallist,digitList): strg += G2fil.FormatPadValue(val,digits) self.Write(strg) self.CloseFile()
[docs] def Exporter(self,event=None): '''Export a set of powder data as a text file ''' # the export process starts here self.InitExport(event) # load all of the tree into a set of dicts self.loadTree() if self.ExportSelect( # set export parameters AskFile='single' # selected one or more histograms; get file name (1 hist) or a directory (>1) ): return filenamelist = [] for hist in self.histnam: if len(self.histnam) == 1: name = self.filename else: # multiple files: create a unique name from the histogram name = self.MakePWDRfilename(hist) fileroot = os.path.splitext(G2obj.MakeUniqueLabel(name,filenamelist))[0] self.filename = os.path.join(self.dirname,fileroot + self.extension) self.Writer(hist) print(hist+' written to file '+self.fullpath)
[docs] class ExportPowderReflText(G2fil.ExportBaseclass): '''Used to create a text file of reflections from a powder data set :param wx.Frame G2frame: reference to main GSAS-II frame ''' def __init__(self,G2frame): super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__ G2frame=G2frame, formatName = 'reflection list as text', extension='.txt', longFormatName = 'Export powder reflection list as a text file' ) self.exporttype = ['powder'] self.multiple = False # only allow one histogram to be selected
[docs] def Exporter(self,event=None): '''Export a set of powder reflections as a text file ''' self.InitExport(event) # load all of the tree into a set of dicts self.loadTree() if self.ExportSelect( # set export parameters AskFile='default' # base name on the GPX file name ): return self.OpenFile() hist = list(self.histnam)[0] # there should only be one histogram, in any case take the 1st self.Write('\nHistogram '+hist) histblk = self.Histograms[hist] for phasenam in histblk['Reflection Lists']: phasDict = histblk['Reflection Lists'][phasenam] tname = {'T':'TOF','C':'2-theta','B':'2-theta'}[phasDict['Type'][2]] self.Write('\nPhase '+str(phasenam)) if phasDict.get('Super',False): self.Write(96*'=') hklfmt = "{:.0f},{:.0f},{:.0f},{:.0f}" hfmt = "{:>10s} {:>8s} {:>12s} {:>12s} {:>7s} {:>6s} {:>8s} {:>8s} {:>8s} {:>8s}" if 'T' in phasDict['Type']: fmt = "{:>10s} {:8.3f} {:12.3f} {:12.3f} {:7.2f} {:6.0f} {:8.3f} {:8.3f} {:8.3f} {:8.4f}" else: fmt = "{:>10s} {:8.3f} {:12.3f} {:12.3f} {:7.2f} {:6.0f} {:8.5f} {:8.5f} {:8.5f} {:8.4f}" self.Write(hfmt.format("h,k,l,m",tname,"F_obs","F_calc","phase","mult","sig","gam","FWHM","Prfo")) self.Write(96*'=') refList = phasDict['RefList'] for refItem in refList: if 'T' in phasDict['Type']: h,k,l,m,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:17] FWHM = G2pwd.getgamFW(gam,sig) self.Write(fmt.format(hklfmt.format(h,k,l,m),pos,Fobs,Fcalc,phase,mult,sig,gam,FWHM,prfo)) elif 'C' in phasDict['Type']: h,k,l,m,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,prfo = refItem[:14] g = gam/100. #centideg -> deg s = np.sqrt(max(sig,0.0001))/100. #var -> sig in deg FWHM = G2pwd.getgamFW(g,s) #FWHM self.Write(fmt.format(hklfmt.format(h,k,l,m),pos,Fobs,Fcalc,phase,mult,s,g,FWHM,prfo)) elif 'B' in phasDict['Type']: h,k,l,m,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:17] g = gam/100. #centideg -> deg s = np.sqrt(max(sig,0.0001))/100. #var -> sig in deg FWHM = G2pwd.getgamFW(g,s) #FWHM self.Write(fmt.format(hklfmt.format(h,k,l,m),pos,Fobs,Fcalc,phase,mult,s,g,FWHM,prfo)) else: self.Write(94*'=') hklfmt = "{:.0f},{:.0f},{:.0f}" hfmt = "{:>8s} {:>8s} {:>12s} {:>12s} {:>7s} {:>6s} {:>8s} {:>8s} {:>8s} {:>8s}" if 'T' in phasDict['Type']: fmt = "{:>8s} {:8.3f} {:12.3f} {:12.3f} {:7.2f} {:6.0f} {:8.3f} {:8.3f} {:8.3f} {:8.4f}" else: fmt = "{:>8s} {:8.3f} {:12.3f} {:12.3f} {:7.2f} {:6.0f} {:8.5f} {:8.5f} {:8.5f} {:8.4f}" self.Write(hfmt.format("h,k,l",tname,"F_obs","F_calc","phase","mult","sig","gam","FWHM","Prfo")) self.Write(94*'=') refList = phasDict['RefList'] for refItem in refList: if 'T' in phasDict['Type']: h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:16] FWHM = G2pwd.getgamFW(gam,sig) self.Write(fmt.format(hklfmt.format(h,k,l),pos,Fobs,Fcalc,phase,mult,np.sqrt(max(sig,0.0001)),gam,FWHM,prfo)) elif 'C' in phasDict['Type']: h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,prfo = refItem[:13] g = gam/100. #centideg -> deg s = np.sqrt(max(sig,0.0001))/100. #var -> sig in deg FWHM = G2pwd.getgamFW(g,s) self.Write(fmt.format(hklfmt.format(h,k,l),pos,Fobs,Fcalc,phase,mult, \ s,g,FWHM,prfo)) elif 'B' in phasDict['Type']: h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:16] g = gam/100. #centideg -> deg s = np.sqrt(max(sig,0.0001))/100. #var -> sig in deg FWHM = G2pwd.getgamFW(g,s) self.Write(fmt.format(hklfmt.format(h,k,l),pos,Fobs,Fcalc,phase,mult, \ s,g,FWHM,prfo)) self.CloseFile() print(hist+'reflections written to file '+self.fullpath)
[docs] class ExportPowderReflHKLF(G2fil.ExportBaseclass): '''Used to create a text file of reflections from a powder data set as shelx HKLF file :param wx.Frame G2frame: reference to main GSAS-II frame ''' def __init__(self,G2frame): super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__ G2frame=G2frame, formatName = 'reflection list as HKLF', extension='.hkl', longFormatName = 'Export powder reflection list as a HKLF file' ) self.exporttype = ['powder'] self.multiple = False # only allow one histogram to be selected
[docs] def Exporter(self,event=None): '''Export a set of powder reflections as a shelx HKLF file ''' self.InitExport(event) # load all of the tree into a set of dicts self.loadTree() if self.ExportSelect( # set export parameters AskFile='default' # base name on the GPX file name ): return self.OpenFile() hist = list(self.histnam)[0] # there should only be one histogram, in any case take the 1st self.Write('#Histogram '+hist) histblk = self.Histograms[hist] for phasenam in histblk['Reflection Lists']: phasDict = histblk['Reflection Lists'][phasenam] self.Write('#Phase '+str(phasenam)) if phasDict.get('Super',False): hklfmt = "{:5d}{:5d}{:5d}{:3d}" hfmt = "{:>20s}" fmt = "{:>20s}{:8.2f}{:8.2f}" self.Write(hfmt.format("#h,k,l,m,F^2,sig(F^2)")) refList = phasDict['RefList'] for refItem in refList: if 'T' in phasDict['Type']: h,k,l,m,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:17] elif 'C' in phasDict['Type']: h,k,l,m,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,prfo = refItem[:14] elif 'B' in phasDict['Type']: h,k,l,m,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:17] sig = np.sqrt(Fobs) self.Write(fmt.format(hklfmt.format(int(h),int(k),int(l),int(m)),Fobs,sig)) else: hklfmt = "{:5d}{:5d}{:5d}" hfmt = "{:>15s}" fmt = "{:>15s}{:8g}{:8g}" self.Write(hfmt.format("#h,k,l,F^2,sig(F^2)")) refList = phasDict['RefList'] for refItem in refList: if 'T' in phasDict['Type']: h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:16] elif 'C' in phasDict['Type']: h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,prfo = refItem[:13] elif 'B' in phasDict['Type']: h,k,l,mult,dsp,pos,sig,gam,Fobs,Fcalc,phase,x,x,x,x,prfo = refItem[:16] sig = np.sqrt(Fobs) self.Write(fmt.format(hklfmt.format(int(h),int(k),int(l)),Fobs,sig)) self.CloseFile() print(hist+'reflections written to file '+self.fullpath)
[docs] class ExportSingleText(G2fil.ExportBaseclass): '''Used to create a text file with single crystal reflection data skips user rejected & space group extinct reflections :param wx.Frame G2frame: reference to main GSAS-II frame ''' def __init__(self,G2frame): super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__ G2frame=G2frame, formatName = 'Text file', extension='.txt', longFormatName = 'Export reflection list as a text file' ) self.exporttype = ['single'] self.multiple = False # only allow one histogram to be selected def Writer(self,hist,filename=None): self.OpenFile(filename) hklfmt = "{:.0f},{:.0f},{:.0f}" hfmt = "{:>10s} {:>8s} {:>12s} {:>12s} {:>12s} {:>7s} {:>6s}" fmt = "{:>10s} {:8.3f} {:12.2f} {:12.4f} {:12.2f} {:7.2f} {:6.0f}" self.Write(80*'=') self.Write(hfmt.format("h,k,l","d-space","F_obs","sig(Fobs)","F_calc","phase","twin")) self.Write(80*'=') for ( h,k,l,twin,dsp,Fobs,sigFobs,Fcalc,FobsT,FcalcT,phase,Icorr ) in hist.data['data'][1]['RefList']: if twin > 0: self.Write(fmt.format(hklfmt.format(h,k,l),dsp,Fobs,sigFobs,Fcalc,phase,twin)) self.CloseFile() print(hist.name+' written to file '+self.fullpath)
[docs] def Exporter(self,event=None): '''Export a set of single crystal data as a text file ''' # the export process starts here self.InitExport(event) # load all of the tree into a set of dicts self.loadTree() if self.ExportSelect( # set export parameters AskFile='default' # base name on the GPX file name ): return self.OpenFile() hist = list(self.histnam)[0] # there should only be one histogram, in any case take the 1st histblk = self.Histograms[hist] hklfmt = "{:.0f},{:.0f},{:.0f}" hfmt = "{:>10s} {:>8s} {:>12s} {:>12s} {:>12s} {:>7s} {:>6s}" fmt = "{:>10s} {:8.3f} {:12.2f} {:12.4f} {:12.2f} {:7.2f} {:6.0f}" self.Write(80*'=') self.Write(hfmt.format("h,k,l","d-space","F_obs","sig(Fobs)","F_calc","phase","twin")) self.Write(80*'=') for ( h,k,l,twin,dsp,Fobs,sigFobs,Fcalc,FobsT,FcalcT,phase,Icorr ) in histblk['Data']['RefList']: if twin > 0: self.Write(fmt.format(hklfmt.format(h,k,l),dsp,Fobs,sigFobs,Fcalc,phase,twin)) self.CloseFile() print(hist+' written to file '+self.fullpath)