Changeset 1122 for trunk/exports


Ignore:
Timestamp:
Oct 24, 2013 4:18:38 PM (8 years ago)
Author:
vondreele
Message:

rename ASCIImap to just map
add export of ccp4 maps

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/exports/G2export_map.py

    r1121 r1122  
    1313import os.path
    1414import GSASIIpath
     15import numpy as np
    1516GSASIIpath.SetVersionNumber("$Revision$")
    1617import GSASIIIO as G2IO
     
    4647        self.loadTree()
    4748        if self.ExportSelect( # set export parameters
    48             AskFile=True     # prompt the user for a file name
     49            AskFile=True          # prompt the user for a file name
    4950            ): return
    5051        for phasenam in self.phasenam:
     
    5354            if not len(rho):
    5455                return
     56            print self.filename
    5557            self.OpenFile(self.filename)
    5658            self.Write("Map of Phase "+str(phasenam)+" from "+str(self.G2frame.GSASprojectfile))
     
    6870            self.CloseFile()
    6971            return
     72
     73class ExportMapCCP4(G2IO.ExportBaseclass):
     74    import os
     75    '''Used to create a text file for a phase
     76
     77    :param wx.Frame G2frame: reference to main GSAS-II frame
     78    '''
     79    def __init__(self,G2frame):
     80        super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__
     81            G2frame=G2frame,
     82            formatName = 'CCP4 map file',
     83            extension='.map',
     84            longFormatName = 'Export CCP4 .map file'
     85            )
     86        self.exporttype = ['map']
     87        self.multiple = False
     88
     89    # Tools for file writing.
     90    def OpenFile(self,fil=None):
     91        '''Open the output file as binary
     92
     93        :param str fil: The name of the file to open. If None (default)
     94          the name defaults to self.filename.
     95        :returns: the file object opened by the routine which is also
     96          saved as self.fp
     97        '''
     98        if not fil:
     99            fil = self.filename
     100        self.fp = open(fil,'wb')
     101        return self.fp
     102       
     103    def Write(self,data,dtype):
     104        import struct
     105        '''write a block of output
     106
     107        :param data: the data to be written.
     108        '''
     109        self.fp.write(struct.pack(dtype,data))
     110       
     111    def Exporter(self,event=None):
     112        '''Export a map as a text file
     113        '''
     114        # the export process starts here
     115        self.InitExport(event)
     116        # load all of the tree into a set of dicts
     117        self.loadTree()
     118        if self.ExportSelect( # set export parameters
     119            AskFile=False     # I'll make the file name
     120            ): return
     121        for phasenam in self.phasenam:
     122            phasedict = self.Phases[phasenam] # pointer to current phase info
     123            mapData = phasedict['General']['Map']
     124            rho = mapData.get('rho',[])
     125           
     126            if not len(rho):
     127                return
     128            cell = phasedict['General']['Cell'][1:7]
     129            nx,ny,nz = rho.shape
     130            filename,ext = os.path.splitext(self.filename)
     131            self.filename = filename+'_'+phasenam+'_'+mapData['MapType']+ext
     132            self.OpenFile(self.filename)
     133            for n in rho.shape: self.Write(n,'i')  #nX,nY,nZ
     134            self.Write(2,'i')           #mode=2 float map
     135            for i in [0,0,0]: self.Write(i,'i')    #1st position on x,y,z
     136            for n in rho.shape: self.Write(n,'i')  #nX,nY,nZ
     137            for c in cell: self.Write(c,'f')
     138            for i in [1,2,3]: self.Write(i,'i')    #axes order = x,y,z
     139            self.Write(np.min(rho),'f')
     140            self.Write(np.max(rho),'f')
     141            self.Write(np.mean(rho),'f')
     142            self.Write(0,'i')
     143            for i in range(24,53):
     144                self.Write(0,'i')
     145            for s in ['M','A','P',' ']: self.Write(s,'s')
     146            self.Write(0x44410000,'i')
     147            self.Write(np.std(rho),'f')
     148            for i in range(56,257):
     149                self.Write(0,'i')
     150            for x in rho.flatten('F'):
     151                self.Write(x,'f')
     152            print('map from Phase '+str(phasenam)+' written to file '+str(self.filename))
     153            self.CloseFile()
     154            return
Note: See TracChangeset for help on using the changeset viewer.