Changeset 4548


Ignore:
Timestamp:
Aug 19, 2020 8:14:36 AM (3 years ago)
Author:
vondreele
Message:

Add csv exporter for reflectometry data

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r4539 r4548  
    11551155        self.powderDict = {}
    11561156        self.sasdDict = {}
     1157        self.refdDict = {}
    11571158        self.xtalDict = {}
    11581159        self.parmDict = {}
     
    13141315                self.histnam = [choices[hnum]]
    13151316                numselected = len(self.histnam)
     1317        elif self.currentExportType == 'refd':
     1318            if len(self.refdDict) == 0:
     1319                self.G2frame.ErrorDialog(
     1320                    'Empty project',
     1321                    'Project does not contain any reflectivity data.')
     1322                return True
     1323            elif len(self.refdDict) == 1:
     1324                self.histnam = self.refdDict.values()
     1325            elif self.multiple:
     1326                choices = sorted(self.refdDict.values())
     1327                hnum = G2G.ItemSelector(choices,self.G2frame,multiple=True)
     1328                if not hnum: return True
     1329                self.histnam = [choices[i] for i in hnum]
     1330                numselected = len(self.histnam)
     1331            else:
     1332                choices = sorted(self.refdDict.values())
     1333                hnum = G2G.ItemSelector(choices,self.G2frame)
     1334                if hnum is None: return True
     1335                self.histnam = [choices[hnum]]
     1336                numselected = len(self.histnam)
    13161337        elif self.currentExportType == 'image':
    13171338            if len(self.Histograms) == 0:
     
    14891510        self.powderDict = {}
    14901511        self.sasdDict = {}
     1512        self.refdDict = {}
    14911513        self.xtalDict = {}
    14921514        self.Phases = {}
     
    15161538        elif self.currentExportType == 'sasd':
    15171539            histType = 'SASD'
     1540        elif self.currentExportType == 'refd':
     1541            histType = 'REFD'
    15181542
    15191543        if histType: # Loading just one kind of tree entry
     
    15501574                elif hist.startswith("SASD"):
    15511575                    d = self.sasdDict
     1576                elif hist.startswith("REFD"):
     1577                    d = self.refdDict
    15521578                else:
    15531579                    return                   
     
    15771603            elif hist.startswith("SASD"):
    15781604                self.sasdDict[i] = hist
     1605            elif hist.startswith("REFD"):
     1606                self.refdDict[i] = hist
    15791607
    15801608    def dumpTree(self,mode='type'):
  • trunk/GSASIIdataGUI.py

    r4547 r4548  
    27192719        powdermenu = wx.Menu()
    27202720        item = menu.AppendSubMenu(powdermenu,'Powder data as','Export powder diffraction histogram(s)')
     2721       
     2722        sasdmenu = wx.Menu()
     2723        item = menu.AppendSubMenu(sasdmenu,'Small angle data as','Export small angle histogram(s)')
     2724
     2725        refdmenu = wx.Menu()
     2726        item = menu.AppendSubMenu(refdmenu,'Reflectometry data as','Export reflectometry histogram(s)')
    27212727
    27222728        singlemenu = wx.Menu()
     
    27282734        mapmenu = wx.Menu()
    27292735        item = menu.AppendSubMenu(mapmenu,'Maps as','Export density map(s)')
    2730        
    2731         sasdmenu = wx.Menu()
    2732         item = menu.AppendSubMenu(sasdmenu,'Small angle data as','Export small angle histogram(s)')
    27332736
    27342737        # sequential exports are handled differently; N.B. enabled in testSeqRefineMode
     
    27622765                elif typ == "sasd":
    27632766                    submenu = sasdmenu
     2767                elif typ == "refd":
     2768                    submenu = refdmenu
    27642769                # elif typ == "pdf":
    27652770                #     submenu = pdfmenu
  • trunk/exports/G2export_csv.py

    r4522 r4548  
    465465            print('Histogram '+hist+' written to file '+self.fullpath)
    466466
     467class ExportREFDCSV(G2IO.ExportBaseclass):
     468    '''Used to create a csv file for a reflectometry data set
     469
     470    :param wx.Frame G2frame: reference to main GSAS-II frame
     471    '''
     472    def __init__(self,G2frame):
     473        super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__
     474            G2frame=G2frame,
     475            formatName = 'CSV file',
     476            extension='.csv',
     477            longFormatName = 'Export reflectometry data as comma-separated (csv) file'
     478            )
     479        self.exporttype = ['refd']
     480        #self.multiple = False # only allow one histogram to be selected
     481        self.multiple = True
     482
     483    def Writer(self,TreeName,filename=None):
     484        self.OpenFile(filename)
     485        histblk = self.Histograms[TreeName]
     486        # if len(self.Histograms[TreeName]['Models']['Size']['Distribution']):
     487        #     self.Write('"Size Distribution"')
     488        #     Distr = np.array(self.Histograms[TreeName]['Models']['Size']['Distribution'])
     489        #     WriteList(self,("bin_pos","bin_width","bin_value"))
     490        #     digitList = 2*((13,3),)+((13,4,'g'),)
     491        #     for bindata in Distr.T:
     492        #         line = ""
     493        #         for val,digits in zip(bindata,digitList):
     494        #             if line: line += ','
     495        #             line += G2py3.FormatValue(val,digits)
     496        #         self.Write(line)           
     497        self.Write('"Reflectometry data"')
     498        Parms = self.Histograms[TreeName]['Instrument Parameters'][0]
     499        for parm in Parms:
     500            if parm in ['Type','Source',]:
     501                line = '"Instparm: %s","%s"'%(parm,Parms[parm][0])
     502            elif parm in ['Lam',]:
     503                line = '"Instparm: %s",%10.6f'%(parm,Parms[parm][1])
     504            else:
     505                line = '"Instparm: %s",%10.2f'%(parm,Parms[parm][1])
     506            self.Write(line)
     507        WriteList(self,("q","y_obs","y_sig","y_calc","y_bkg"))
     508        digitList = 5*((13,5,'g'),)
     509        for vallist in zip(histblk['Data'][0],
     510                       histblk['Data'][1],
     511                       1./np.sqrt(histblk['Data'][2]),
     512                       histblk['Data'][3],
     513                       histblk['Data'][4],
     514                       ):
     515            line = ""
     516            for val,digits in zip(vallist,digitList):
     517                if line: line += ','
     518                line += G2py3.FormatValue(val,digits)
     519            self.Write(line)
     520        self.CloseFile()
     521       
     522    def Exporter(self,event=None):
     523        '''Export a set of reflectometry data as a csv file
     524        '''
     525        # the export process starts here
     526        self.InitExport(event)
     527        # load all of the tree into a set of dicts
     528        self.loadTree()
     529        if self.ExportSelect( # set export parameters
     530            AskFile='single' # get a file name/directory to save in
     531            ): return
     532        filenamelist = []
     533        for hist in self.histnam:
     534            if len(self.histnam) == 1:
     535                name = self.filename
     536            else:    # multiple files: create a unique name from the histogram
     537                name = self.MakePWDRfilename(hist)
     538            fileroot = os.path.splitext(G2obj.MakeUniqueLabel(name,filenamelist))[0]
     539            # create the file
     540            self.filename = os.path.join(self.dirname,fileroot + self.extension)
     541            self.Writer(hist)
     542            print('Histogram '+hist+' written to file '+self.fullpath)
     543
    467544class ExportSingleCSV(G2IO.ExportBaseclass):
    468545    '''Used to create a csv file with single crystal reflection data
Note: See TracChangeset for help on using the changeset viewer.