Re: how to get psf files of DNA but not RNA with psfgen?

From: Xueqing Zou (
Date: Thu Sep 17 2009 - 09:52:19 CDT

Hi, Yuhui

   You can use "patch" to make deoxyribose. The following script is
used to make psf file for double-stranded DNA. You can easily modify
it for your single-stranded DNA.

Best, Xueqing


mol load pdb DNA.pdb

set newfile DNA_psfgen

set TOPOFILE ./top_all27_prot_na.inp

proc psfalias {} {
        # Define common aliases
        # Here's for nucleics
        pdbalias residue G GUA
        pdbalias residue C CYT
        pdbalias residue A ADE
        pdbalias residue T THY

        foreach bp { GUA CYT ADE THY URA } {
                pdbalias atom $bp "O5\*" O5'
                pdbalias atom $bp "C5\*" C5'
                pdbalias atom $bp "O4\*" O4'
                pdbalias atom $bp "C4\*" C4'
                pdbalias atom $bp "C3\*" C3'
                pdbalias atom $bp "O3\*" O3'
                pdbalias atom $bp "C2\*" C2'
                pdbalias atom $bp "O2\*" O2'
                pdbalias atom $bp "C1\*" C1'


package require psfgen
topology $TOPOFILE

set sel [atomselect top "chain A"]
set listA [lsort -unique [$sel get {resid resname}] ]
foreach selatom $sel {
$selatom set segid ADNA

$sel writepdb ADNA.pdb

set sel [atomselect top "chain B"]
set listB [lsort -unique [$sel get {resid resname}] ]
foreach selatom $sel {
$selatom set segid BDNA

$sel writepdb BDNA.pdb

# splitting the input pdb

set segidList {ADNA BDNA}
set patchList [list $listA $listB]

segment ADNA {

     first 5TER
     last 3TER

     pdb ADNA.pdb

segment BDNA {

     first 5TER
     last 3TER

     pdb BDNA.pdb

puts "Begin to patch to make DEOXYribose"

  # patch to make DEOXYribose
  # purine use patch DEO2
  # pyrimidine use patch DEO1

foreach segid $segidList tmpList $patchList {
puts "segid: $segid tmpList:$tmpList"
     foreach record $tmpList {
        foreach {resid resname} $record { break }
        if {$resname == "THY" || $resname == "CYT" } {
            patch DEO1 ${segid}:$resid
            puts "patch DEO1 ${segid}:$resid"

        if {$resname == "ADE" || $resname == "GUA" } {
            puts "patch DEO2 ${segid}:$resid"
            patch DEO2 ${segid}:$resid
     coordpdb ${segid}.pdb


puts "End of DEOXYribose "

writepsf $newfile.psf
writepdb $newfile.pdb
On Sep 17, 2009, at 6:25 AM, ع wrote:

> Dear all,
> I construct a single-strand DNA with random sequence within
> NAMOT, and then try to generate PSF file of DNA with following VMD
> script:
> set ssDNA ssDna
> mol load pdb ${ssDNA}.pdb
> set sel [atomselect top noh]
> $sel writepdb DNA-no-hydrogens.pdb
> package require psfgen
> topology top_all27_na.rtf
> segment S {pdb DNA-no-hydrogens.pdb}
> coordpdb DNA-no-hydrogens.pdb S
> guesscoord
> writepdb ${ssDNA}_1.pdb
> writepsf ${ssDNA}_1.psf
> However, I find that there are two serious questions:
> 1) for the head residue, there is no P atom in original PDB
> file. However, there exists P atom on the head residue in the final
> PDB file.
> 2) After checking the final PDB file, I think that the resulting
> molecule is Ribose but not Deoxy.
> I guess that not only does the "guesscoord" command add missing H
> atoms to the molecule, but it also adds O and P atoms, according to
> the topology file.
> What I hope to get is DNA PSF file. I think one approach is to
> modify description of residues in the topology file. However, this
> can not deal with question 1).
> Can anyone give me some suggestions?
> By the way, I am a researcher with background of
> Microelectronics. So I am not familiar with biology. I greatly
> appreciate some easy-understood suggestions.
> Thanks and best wishes!
> --
> Yuhui He (ع)
> Ph. D
> Inst. Microelectronics, Chinese Academy of Sciences,
> Beijing 100871, China.

This archive was generated by hypermail 2.1.6 : Wed Feb 29 2012 - 15:53:17 CST