#This is a script that corrects coordinates of lipids "wrapped" #around a box created using periodic boundary conditions. proc wrapvar { x dim } { set dmin [expr -0.5*$dim] set dmax [expr 0.5*$dim] set ref [lindex $x 0] set result [list] foreach elem $x { set dx [expr {$elem - $ref}] if { $dx < $dmin } { lappend result [expr {$elem + $dim}] } elseif { $dx > $dmax } { lappend result [expr {$elem - $dim}] } else { lappend result $elem } } return $result } proc wrap { seltext } { # Check that periodic cell dimensions are defined foreach { a b } [molinfo top get {a b}] break if { $a < 1 || $b < 1 } { error "Periodic cell dimensions are not defined!" } # get a list of all residues set all [atomselect top $seltext] set residues [lsort -unique -integer [$all get resid]] # wrap x and y foreach res $residues { set sel [atomselect top "($seltext) and resid $res"] foreach var { x y } dim [list $a $b] { $sel set $var [wrapvar [$sel get $var] $dim] } } }