Subject: Summary: convert PDB to CHARMm

From: Xiaomei Yang <[email-masked]>
Date: Sat, 20 Mar 1999 16:13:46 -0600

Hi, CCLers,

My original question on how to convert PDB file to CHARMm format
seemed ridiculous, but I was in a situation without QUANTA/CHARMm
in hand. Anyway, many thanks to all the people who answered my 
question and gave me helpful information. Now the summary.

How to convert PDB files to CHARMm format
=========================================

       1.  CHARMm
       2.  QUANTA
       3.  RasMol
       4.  Babel
       5.  your own code

1. CHARMm itself can read PDB files and convert to CRD/PSF format.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

   as suggested by 

              G. Matthias Ullmann <[email-masked]
              Rick Venable <[email-masked]>
              Ryszard Czerminski <[email-masked]>
              [email-masked] (Daniel E. Macks)
              Shobana Sundaram <[email-masked]
              [email-masked] (aldo jongejan)

   Matthias and Shobana gave me the commands of CHARMm in details.
Daniel
   referred me to the Charmm documentaion io.doc file. Aldo suggested me
   read the source code. In a few days I can access the CHARMm program
in
   our Univ. Thanks.

Example 1:
==========
            (by "G. Matthias Ullmann" <[email-masked]>)
            ------------------------------------------------

open read unit 12 card name "1rie.protein.pdb"
read sequ pdb unit 12
generate 1rie setup
rewind unit 12
read coor pdb unit 12
close unit 12

But you should read only one straint at once. If you have more than
one straint, repeat the command like this:

open read unit 12 card name "1rie.hetero.pdb"
read sequ pdb unit 12
generate fes setup
rewind unit 12
read coor pdb unit 12 appe
close unit 12

You have to edit the PDB file a little bit, so that it look like

ATOM      1  N   THR    53      15.450   0.804  17.223  1.00 15.05     
1rfs
ATOM      2  CA  THR    53      14.080   0.730  16.642  1.00 15.16     
1rfs
ATOM      3  C   THR    53      14.002   1.723  15.471  1.00 14.32     
1rfs
ATOM      4  O   THR    53      14.581   2.805  15.549  1.00 14.38     
1rfs
ATOM      5  CB  THR    53      13.011   1.058  17.715  1.00 16.16     
1rfs
ATOM      6  OG1 THR    53      13.161   2.411  18.160  1.00 18.16     
1rfs
ATOM      7  CG2 THR    53      13.171   0.139  18.916  1.00 16.08     
1rfs
ATOM      8 1H   THR    53      15.677   1.830  17.297  1.00  0.00     
1rfs
ATOM      9 2H   THR    53      15.484   0.373  18.153  1.00  0.00     
1rfs
ATOM     10 3H   THR    53      16.137   0.366  16.590  1.00  0.00     
1rfs
ATOM     11  HG1 THR    53      13.847   2.552  18.821  1.00  0.00     
1rfs

The string in the last column has to be the segid. Otherwise you can not
read the coordinates properly.

                    ----- End of Example 1.

Example 2:
==========
            (by Shobana Sundaram <[email-masked]>)
            -----------------------------------------------------

open read card unit 10 name a.pdb ('your filename')
read coor pdb unit 10
close unit 10

if you want only the coordinates to be written

open write unit 11 card name a.crd
write coor unit 11 card
* title
*

and if you want to write in psf format which included connectivities
etc..

write psf card name a.psf
* title
*
                      ----- End of Example 2

2. QUANTA - the Graphical User Interface for CHARMm can of course do
this.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

   as suggested by

              [email-masked] (Daniel E. Macks)
              Istvan Enyedy" <[email-masked]>
              Shobana Sundaram <[email-masked]>

3. RasMol can read both PDB and CHARMm formats
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

   as suggested by

              Rick Venable <[email-masked]>

   RasMol can export the current image to various graphical formats,
such as
   gif, bmp, ps; but it is not clear if it can re-write the structure
into
   any formats other than the input one.   (Xiaomei)

4. Babel reads both PDB and CHARMm formats but doesn't write to CHARMm
format.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

5. Write you own code
<<<<<<<<<<<<<<<<<<<<<

   as suggestd by

             Themis Lazaridis <[email-masked]>
             <[email-masked]> (aldo jongejan)

   Themis gave me his little code that helped me to accomplish my job in
   time. Thanks.

Example 3:
==========
           (by Themis Lazaridis <[email-masked]>)
           -----------------------------------------------

Themis Lazaridis
Department of Chemistry                 phone (212) 650-8364
City College of New York                fax   (212) 650-6107
Convent Avenue & 138th St.              email: [email-masked]
New York, NY 10031                     
http://www.sci.ccny.cuny.edu/~themis
----------------------
c Reads PDB file, writes out charmm file
c Uses a temp file
c PDB format
c text IATOM  TYPE  RES  IRES      X  Y  Z    W
c  A6   I5  2X A4   A4    I5  4X     3F8.3 6X F6.2
c charmm format
c ATOMNO RESNO   RES  TYPE  X     Y     Z   SEGID RESID Weighting
c   I5    I5  1X A4 1X A4 F10.5 F10.5 F10.5 1X A4 1X A4 F10.5
c
c
        character*80 infile,outfile,line
        character*4 str1,type,res,code,segid,resid,residold,resold
        character*1 chain
        logical loxt(1000)
        write (6,*) 'Give input PDB files, output will be .crd'
1       read (5,'(a)') infile
        i=1
2       i=i+1
        if (infile(i:i).eq.' ') then
         outfile=infile(1:i-1)//'.crd'
        else
         goto 2
        endif
        open (unit=11, file=infile, status='old')
        open (unit=12, file='temppdb', status='unknown')
        open (unit=13, file=outfile, status='new')
        write (13,'(a80)') '* converted from '//infile
        write (13,'(a)') '*'
        do 4 i=1,1000
4       loxt(i)=.false.
        nss=0
        ires=0
        iat=0
        residold='    '
        resold='    '
        do 100 i=1,100000
        read (11,'(a80)',end=1000) line
        read (unit=line,fmt=500) str1
        if (str1.eq.'SSBO') then
          nss=nss+1
          goto 100
        else if (str1.eq.'ATOM') then
        iat= iat+1
        read (unit=line,fmt=500) str1,iatom,type,res,chain,resid,
     &    x,y,z,a,w,code
500     format (a4,2x,i5,2x,a4,a4,a1,a4,4x,3f8.3,2f6.2,6x,a4)
          if ((resid.ne.residold).or.(res.ne.resold)) ires=ires+1
          residold=resid
          resold= res
          if (chain.ne.'    ') then
            segid=chain//code
          elseif (code.ne.'    ') then
            segid=code
          else
            segid='MAIN'
          endif
          if (type.eq.'CD1 ') then
             if (res.eq.'ILE ') type='CD  '
          elseif (type.eq.'OCT1') then
             type='OT1 '
          elseif (type.eq.'OCT2') then
             type='OT2 '
          elseif (type.eq.'OXT ') then
             type='OT2 '
             loxt(ires)=.true.
          endif
c fluch resid left
5         if (resid(1:1).eq.' ') then
            resid=resid(2:4)//' '
            goto 5
          endif
          write (12,600) iat,ires,res,type,x,y,z,segid,resid,w
600     format (I5,I5,1X,A4,1X,A4,3F10.5,1X,A4,1X,a4,F10.5)
        else
          goto 100
        endif
100     continue
1000    write (6,*) 'Disulfide bonds', nss
        nres=ires
        write (13,'(i5)') iat
        close (unit=12)
        open (unit=12,file='temppdb',status='old')
        do 200 i=1,100000
        read (12,'(a80)',end=2000) line
        read (unit=line,fmt=600) iatom,ires,res,type,x,y,z,segid,resid,w
        if (loxt(ires).and.(type.eq.'O   ')) type='OT1 '
        write (13,600) iatom,ires,res,type,x,y,z,segid,resid,w
200     continue
2000    close (unit=11)
        close (unit=12)
        close (unit=13)
        goto 1
        end

             ----- End of Example 3

                         -----End of Summary

//////////////////////
Xiaomei Yang, Postdoc
Dept of Chem & Biochem
Univ of Texas at Austin
Austin, 78712 TX, USA
Tel: +1-512-471-4671 (O)
[email-masked]
/////////////////////////////