source: trunk/exports/G2export_pwdr.py @ 1236

Last change on this file since 1236 was 1236, checked in by toby, 8 years ago

Add FXYE & XYE exporters; allow multiple powder exports; fix formatting of float32 intensities (which should be gone); minor sequential refinement changes; remove old export patterns items; new padded format routine

  • Property svn:eol-style set to native
File size: 6.5 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3########### SVN repository information ###################
4# $Date: 2014-01-10 14:46:36 -0600 (Fri, 10 Jan 2014) $
5# $Author: vondreele $
6# $Revision: 1191 $
7# $URL: https://subversion.xor.aps.anl.gov/pyGSAS/trunk/exports/G2export_csv.py $
8# $Id: G2export_csv.py 1191 2014-01-10 20:46:36Z vondreele $
9########### SVN repository information ###################
10'''
11*Module G2export_pwdr: Export powder input files*
12-------------------------------------------------
13
14Creates files used by GSAS (FXYE) & TOPAS (XYE) as input
15
16'''
17import os.path
18import numpy as np
19import GSASIIpath
20GSASIIpath.SetVersionNumber("$Revision: 1191 $")
21import GSASIIIO as G2IO
22import GSASIIpy3 as G2py3
23import GSASIIobj as G2obj
24
25class ExportPowderFXYE(G2IO.ExportBaseclass):
26    '''Used to create a FXYE file for a powder data set
27
28    :param wx.Frame G2frame: reference to main GSAS-II frame
29    '''
30    def __init__(self,G2frame):
31        super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__
32            G2frame=G2frame,
33            formatName = 'GSAS FXYE file',
34            extension='.fxye',
35            longFormatName = 'Export powder data as GSAS FXYE (column) file'
36            )
37        self.exporttype = ['powder']
38        self.multiple = True
39
40    def Exporter(self,event=None):
41        '''Export one or more sets of powder data as FXYE file(s)
42        '''
43        # the export process starts here
44        self.InitExport(event)
45        # load all of the tree into a set of dicts
46        self.loadTree()
47        if self.ExportSelect( # set export parameters
48            AskFile=False # use the default file name, which is ignored
49            ): return
50        filenamelist = []
51        for hist in self.histnam:
52            fileroot = G2obj.MakeUniqueLabel(self.MakePWDRfilename(hist),filenamelist)
53            # create an instrument parameter file
54            self.filename = fileroot + '.prm'
55            self.OpenFile()
56            histblk = self.Histograms[hist]
57            Inst = histblk['Instrument Parameters'][0]
58            self.Write( '            123456789012345678901234567890123456789012345678901234567890        ')
59            self.Write( 'INS   BANK      1                                                               ')
60            self.Write(('INS   HTYPE   %sR                                                              ')%(Inst['Type'][0]))
61            if 'Lam1' in Inst:              #Ka1 & Ka2
62                self.Write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   ')%(Inst['Lam1'][0],Inst['Lam2'][0]))
63            elif 'Lam' in Inst:             #single wavelength
64                self.Write(('INS  1 ICONS%10.7f%10.7f    0.0000               0.990    0     0.500   ')%(Inst['Lam'][1],0.0))
65            self.Write( 'INS  1 IRAD     0                                                               ')
66            self.Write( 'INS  1I HEAD                                                                    ')
67            self.Write( 'INS  1I ITYP    0    0.0000  180.0000         1                                 ')
68            self.Write(('INS  1DETAZM%10.3f                                                          ')%(Inst['Azimuth'][0]))
69            self.Write( 'INS  1PRCF1     3    8   0.00100                                                ')
70            self.Write(('INS  1PRCF11     %15.6g%15.6g%15.6g%15.6g   ')%(Inst['U'][1],Inst['V'][1],Inst['W'][1],0.0))
71            self.Write(('INS  1PRCF12     %15.6g%15.6g%15.6g%15.6g   ')%(Inst['X'][1],Inst['Y'][1],Inst['SH/L'][1]/2.,Inst['SH/L'][1]/2.))
72            self.CloseFile()
73            print('Parameters from '+str(hist)+' written to file '+str(self.filename))
74            prmname = self.filename
75           
76            self.filename = fileroot + self.extension
77            self.OpenFile()
78            histblk = self.Histograms[hist]
79            self.Write(hist[5:])
80            self.Write('Instrument parameter file:'+os.path.split(prmname)[1])
81            x = 100*np.array(histblk['Data'][0])
82            # convert weights to sigmas; use largest weight as minimum esd
83            s = np.sqrt(np.maximum(0.,np.array(histblk['Data'][2])))
84            s[s==0] = np.max(s)
85            s = 1./s
86            self.Write('BANK 1 %d %d CONS %.2f %.2f 0 0 FXYE' % (
87                len(x),len(x),x[0],(x[1]-x[0])
88                ))
89#            for X,Y,S in zip(x,histblk['Data'][1],s):
90#                self.Write("{:15.6g} {:15.6g} {:15.6g}".format(X,Y,S))
91            for XYS in zip(x,histblk['Data'][1],s):
92                line = ''
93                for val in XYS:
94                    line += G2py3.FormatPadValue(val,(15,6))
95                self.Write(line)
96            self.CloseFile()
97            print('Histogram '+str(hist)+' written to file '+str(self.filename))
98
99
100class ExportPowderXYE(G2IO.ExportBaseclass):
101    '''Used to create a Topas XYE file for a powder data set
102
103    :param wx.Frame G2frame: reference to main GSAS-II frame
104    '''
105    def __init__(self,G2frame):
106        super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__
107            G2frame=G2frame,
108            formatName = 'Topas XYE file',
109            extension='.xye',
110            longFormatName = 'Export powder data as Topas XYE (column) file'
111            )
112        self.exporttype = ['powder']
113        self.multiple = True
114
115    def Exporter(self,event=None):
116        '''Export one or more sets of powder data as XYE file(s)
117        '''
118        # the export process starts here
119        self.InitExport(event)
120        # load all of the tree into a set of dicts
121        self.loadTree()
122        if self.ExportSelect( # set export parameters
123            AskFile=False # use the default file name, which is ignored
124            ): return
125        filenamelist = []
126        for hist in self.histnam:
127            fileroot = G2obj.MakeUniqueLabel(self.MakePWDRfilename(hist),filenamelist)
128           
129            self.filename = fileroot + self.extension
130            self.OpenFile()
131            histblk = self.Histograms[hist]
132            self.Write('# '+hist[5:])
133            x = np.array(histblk['Data'][0])
134            # convert weights to sigmas; use largest weight as minimum esd
135            s = np.sqrt(np.maximum(0.,np.array(histblk['Data'][2])))
136            s[s==0] = np.max(s)
137            s = 1./s
138            for XYS in zip(x,histblk['Data'][1],s):
139                line = ''
140                for val in XYS:
141                    line += G2py3.FormatPadValue(val,(15,6))
142                self.Write(line)
143            self.CloseFile()
144            print('Histogram '+str(hist)+' written to file '+str(self.filename))
Note: See TracBrowser for help on using the repository browser.