3
$\begingroup$

I am trying to generate a matrix of small molecules arranged at locations (x, y, z) on a cube. I already have a Tcl script that can generate the required PDB and PSF files. However, I was wondering if there is a way to merge them into a single PDB and PSF file using Tcl itself. Reproduced below is the script to generate the molecules at the given positions.

set psf     adenine.xplor_ext.psf
set pdb     adenine.pdb
set resname     ADE

set a   3
set b   3
set d   10

# first generate in required pdb and psf files

set xend [expr $a / 2]
set xstart [expr -1 * $xend]

set yend [expr $b / 2]
set ystart [expr -1 * $yend]

set counter 1

for { set i $xstart } { $i <= $xend } { incr i } {
    for { set j $ystart } { $j <= $yend } { incr j } {
        mol load psf $psf
        mol addfile $pdb type pdb waitfor all
        set sel [atomselect top "resname $resname"]
        set com [measure center $sel weight mass]
        $sel moveby [vecscale -1 $com]
        set xdist [expr $d * $i]
        set ydist [expr $d * $j]
        set transvec [list $xdist $ydist 0]
        puts $transvec
        $sel moveby $transvec
        $sel set segname AD$counter
        $sel set resid $counter
        $sel writepsf adenine.$i.$j.psf
        $sel writepdb adenine.$i.$j.pdb
        incr counter
        mol delete all
    }
}
exit

From VMD, I see that the molecules are merged using a call to CHARMM program (at least that is what I could understand from the TkConsole window). But it works by calling 2 PDB files at a time, and is not necessarily what I am looking for. Any help in this regard would be much appreciated.

$\endgroup$

1 Answer 1

4
$\begingroup$
set midlist {}
for { set i $xstart } { $i <= $xend } { incr i } {
        for { set j $ystart } { $j <= $yend } { incr j } {
             set mol [mol new adenine.$i.$j.psf waitfor all]
             mol addfile adenine.$i.$j.pdb
             lappend midlist $mol
            }
    }
set mol [::TopoTools::mergemols $midlist]

animate write psf adenine.merged.psf $mol
animate write pdb adenine.merged.pdb $mol

TopoTools does the job

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .