Changeset 1100 for trunk/exports


Ignore:
Timestamp:
Oct 11, 2013 10:55:06 AM (8 years ago)
Author:
vondreele
Message:

finish 1st version (workable) of a PDB exporter for macromolecular structures
make exporter for Cartesian XYZ file for any phase

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/exports/G2export_PDB.py

    r1090 r1100  
    120120        # create a dict with refined values and their uncertainties
    121121        self.loadParmDict()
    122         if self.SetupExport(event,                         # set export parameters
    123                             AskFile=True
    124                             ): return
     122        if self.SetupExport(event,AskFile=True):                         # set export parameters
     123            return
    125124        for phasenam in self.phasenam:
    126125            phasedict = self.Phases[phasenam] # pointer to current phase info
     
    168167            nHet = 0
    169168            nTer = 0
     169            fmt = '{:6s}{:5d}  {:4s}{:3s} {:1s}{:4s}    '+3*'{:8.3f}'+2*'{:6.2f}'+'{:s}'
    170170            for atom in Atoms:
    171                 if atom[cia] == 'I':
     171                if atom[cia] == 'I':    #need to deal with aniso thermals for proteins = "ANISOU" records
    172172                    Biso = atom[cia+1]*8.*np.pi**2
    173173                xyz = np.inner(A,np.array(atom[cx:cx+3]))
    174174                if atom[ct-3] in AA3letter:
    175                     fmt = 'ATOM{:7d}  {:4s}{:3s}{:2s}{:4s}    '+3*'{:8.3f}'+2*'{:6.2f}'+'{:s}'
    176                     self.Write(fmt.format(iatom,atom[ct-1],atom[ct-3],    \
    177                         atom[ct-2],atom[ct-4],xyz[0],xyz[1],xyz[2],atom[cx+3],Biso,atom[ct].rjust(12)))
     175                    self.Write(fmt.format('ATOM  ',iatom,atom[ct-1],atom[ct-3].strip(),    \
     176                        atom[ct-2].strip(),atom[ct-4].rjust(4),xyz[0],xyz[1],xyz[2],atom[cx+3], \
     177                        Biso,atom[ct].rjust(12)))
    178178                    if atom[ct-1] == 'OXT':
    179179                        iatom += 1
    180                         self.Write('TER {:7d}  {:4s}{:3s}'.format(iatom,atom[ct-1],atom[ct-3]))
     180                        self.Write('{:6s}{:5d}  {:4s}{:3s}'.format('TER   ',iatom,atom[ct-1],atom[ct-3].strip()))
    181181                        nTer += 1
    182182                else:
    183183                    nHet += 1
    184                     fmt = 'HETATM{:5d} {:5s}{:3s}{:2s}{:4s}    '+3*'{:8.3f}'+2*'{:6.2f}'+'{:s}'
    185                     self.Write(fmt.format(iatom,atom[ct-1].ljust(5),atom[ct-3],    \
    186                         atom[ct-2],atom[ct-4],xyz[0],xyz[1],xyz[2],atom[cx+3],Biso,atom[ct].rjust(12)))
     184                    self.Write(fmt.format('HETATM',iatom,atom[ct-1],atom[ct-3].strip(),    \
     185                        atom[ct-2].strip(),atom[ct-4].rjust(4),xyz[0],xyz[1],xyz[2],atom[cx+3], \
     186                        Biso,atom[ct].rjust(12)))
    187187                iatom += 1
    188188           
     
    194194            print('Phase '+str(phasenam)+' written to file '+str(fil))
    195195
     196class ExportPhaseCartXYZ(G2IO.ExportBaseclass):
     197    '''Used to create a Cartesian XYZ file for a phase
     198
     199    :param wx.Frame G2frame: reference to main GSAS-II frame
     200    '''
     201    def __init__(self,G2frame):
     202        super(self.__class__,self).__init__( # fancy way to say <parentclass>.__init__
     203            G2frame=G2frame,
     204            formatName = 'Cart XYZ',
     205            extension='.XYZ',
     206            longFormatName = 'Export phase as .XYZ file'
     207            )
     208        self.exporttype = ['phase']
     209        self.multiple = True
     210
     211    def Exporter(self,event=None):
     212        '''Export as a XYZ file
     213        '''
     214        # the export process starts here
     215        # load all of the tree into a set of dicts
     216        self.loadTree()
     217        # create a dict with refined values and their uncertainties
     218        self.loadParmDict()
     219        if self.SetupExport(event,AskFile=True):                       # set export parameters
     220            return
     221        for phasenam in self.phasenam:
     222            phasedict = self.Phases[phasenam] # pointer to current phase info
     223            General = phasedict['General']
     224            i = self.Phases[phasenam]['pId']
     225            if len(self.phasenam) > 1: # if more than one filename is included, add a phase #
     226                nam,ext = os.path.splitext(self.filename)
     227                fil = nam+"_"+str(i)+ext
     228            else:
     229                fil = self.filename
     230            fp = self.OpenFile(fil)
     231            Atoms = phasedict['Atoms']
     232            if not len(Atoms):
     233                print('**** ERROR - Phase '+str(phasenam)+' has no atoms! ****')
     234                return
     235            cx,ct,cs,cia = General['AtomPtrs']
     236            Cell = General['Cell'][1:7]
     237            A,B = G2lat.cell2AB(Cell)
     238            fmt = '{:4s}'+3*'{:12.4f}'
     239            self.Write('{:6d}'.format(len(Atoms)))
     240            self.Write(' ')
     241            for atom in Atoms:
     242                xyz = np.inner(A,np.array(atom[cx:cx+3]))
     243                self.Write(fmt.format(atom[ct],*xyz))
     244            self.CloseFile()
     245            print('Phase '+str(phasenam)+' written to file '+str(fil))
    196246   
Note: See TracChangeset for help on using the changeset viewer.