Changeset 1100


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

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/GSASIIIO.py

    r1084 r1100  
    10841084                elif key[11:] == 'B':
    10851085                    S += EXPphase[key]
    1086                     Atom = [S[50:58].strip(),S[:10].strip(),'',
     1086                    Atom = [S[50:58].strip(),S[:10].strip().capitalize(),'',
    10871087                        float(S[10:20]),float(S[20:30]),float(S[30:40]),
    10881088                        float(S[40:50]),'',int(S[60:62]),S[130:131]]
     
    11021102                S = EXPphase[key]
    11031103                Atom = [S[56:60],S[50:54].strip().upper(),S[54:56],
    1104                     S[46:51].strip(),S[:8].strip(),'',
     1104                    S[46:51].strip(),S[:8].strip().capitalize(),'',
    11051105                    float(S[16:24]),float(S[24:32]),float(S[32:40]),
    11061106                    float(S[8:16]),'1',1,'I',float(S[40:46]),0,0,0,0,0,0]
     
    11881188            SytSym,Mult = G2spc.SytSym(XYZ,SGData)
    11891189            Uiso = float(S[61:67])/EightPiSq
    1190             Type = S[12:14].upper()
     1190            Type = S[12:14].lower()
    11911191            if Type[0] in '123456789':
    11921192                Type = Type[1:]
    11931193            Atom = [S[22:27].strip(),S[17:20].upper(),S[20:22],
    1194                 S[12:17].strip(),Type.strip(),'',XYZ[0],XYZ[1],XYZ[2],
     1194                S[12:17].strip(),Type.strip().capitalize(),'',XYZ[0],XYZ[1],XYZ[2],
    11951195                float(S[55:61]),SytSym,Mult,'I',Uiso,0,0,0,0,0,0]
    11961196            S = file.readline()
  • trunk/GSASIIphsGUI.py

    r1097 r1100  
    16261626                       
    16271627    def OnReImport(event):
    1628         print 'reimport atoms from file to be developed'
     1628        generalData = data['General']
     1629        cx,ct,cs,cia = generalData['AtomPtrs']
    16291630        reqrdr = G2frame.dataFrame.ReImportMenuId.get(event.GetId())
    16301631        rdlist = G2frame.OnImportGeneric(reqrdr,
    1631                                          G2frame.ImportPhaseReaderlist,
    1632                                          'phase')
     1632            G2frame.ImportPhaseReaderlist,'phase')
    16331633        if len(rdlist) == 0: return
    1634         # for now rdlist is only expected to have one element
    1635         # for now always use the first phase for when multiple phases are ever implemented
    1636         # but it would be better to loop until we find a phase that matches the one in data
    1637         for rd in rdlist:
    1638             # rd contains all info for a phase
    1639             PhaseName = rd.Phase['General']['Name']
    1640             print 'Read phase '+str(PhaseName)+' from file '+str(G2frame.lastimport)
    1641             atomData = data['Atoms']
    1642             for atom in rd.Phase['Atoms'][:5]:
    1643                 print atom
    1644             for atom in atomData[:5]:
    1645                 print atom
    1646            
    1647             return
     1634        # rdlist is only expected to have one element
     1635        rd = rdlist[0]
     1636        G2frame.OnFileSave(event)
     1637        # rd contains all info for a phase
     1638        PhaseName = rd.Phase['General']['Name']
     1639        print 'Read phase '+str(PhaseName)+' from file '+str(G2frame.lastimport)
     1640        atomData = data['Atoms']
     1641        atomNames = []
     1642        for atom in atomData:
     1643            atomNames.append(atom[:ct+1])
     1644        for atom in rd.Phase['Atoms']:
     1645            try:
     1646                idx = atomNames.index(atom[:ct+1])
     1647                atomData[idx][:-1] = atom[:-1]
     1648            except ValueError:
     1649                print atom[:ct+1], 'not in Atom array; not updated'
     1650        wx.CallAfter(FillAtomsGrid,Atoms)
     1651         
    16481652                       
    16491653################################################################################
  • 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.