VMD-L Mailing List
From: subramanian vidhyasankar (svsquery_at_gmail.com)
Date: Sat Sep 22 2018 - 08:14:09 CDT
- Next message: subramanian vidhyasankar: "mail about renumbering of residues"
- Previous message: Peter Mawanga: "Re: Query about PME data in .dx format"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]
*Dear namd users*
* I am using membrane tutorial in that tutorial
they used a TCL script named as Keep_water_out.tcl. I am able to use that
script without any exception by setteing set watexcept { } being Non
familiar with tcl script When i use that script, none of the water
molecules taken to push Up or to push down . but for my system , force
must be given to all water molecules to prevent lipid hydration But the
script run well without any error . My question is how to enable the index
of water molecules to be taken to push up or push down in every 100 steps
My output files is given as follows*
*TCL: Waters to push Up: TCL: Waters to push Down: *
*TCL: Reassign waters to push at step: 0*
*My tcl script is given below*
###################################################################
# user definitions begin
###################################################################
print "Starting Tcl forces"
# define force constant per group (Kcal/(mol*A))
set fconst 0.1
set pressure 1.0
set fconstUp [expr $fconst*$pressure]
set fconstDown [expr -$fconst*$pressure]
# define water and lipid names
set watResName "TIP3 "
set watAtomName "OH2 "
set lipResName "POPC"
set lipAtomName "C1 "
# define exceptions
###################################################################
# user definitions stop here!
###################################################################
###################################################################
# preprocessing for calcforces
###################################################################
# define all water oxigens and lipid C21 :
set waters_list {}
set c21plus_list {}
set c21minus_list {}
set inStream [open $allatompdb r]
foreach line [split [read $inStream] \n] {
set string1 [string range $line 0 3]
set string2 [string range $line 6 10]
set string3 [string range $line 17 20]
set string4 [string range $line 13 15]
set string5 [string range $line 46 53]
set string6 [string range $line 72 75]
set string7 [string range $line 22 25]
if { ([string equal $string1 {ATOM}] || \
[string equal $string1 {ATOM}] ) && \
[string equal $watResName $string3] &&\
[string equal $watAtomName $string4] } {
lappend waters_list "[string trim $string6]\
[string trim $string7] $watAtomName"
}
if { ([string equal $string1 {ATOM}] || \
[string equal $string1 {ATOM}] ) && \
[string equal $lipResName $string3] &&\
[string equal $lipAtomName $string4] } {
if { [string trim $string5] >= 0 } {
lappend c21plus_list "[string trim $string6]\
[string trim $string7] $lipAtomName"
} else {
lappend c21minus_list "[string trim $string6]\
[string trim $string7] $lipAtomName"
}
}
}
close $inStream
# make list of indices
set waters {}
set c21plus {}
set c21minus {}
foreach atomrecord $c21plus_list {
foreach {segname resid atom} $atomrecord { break }
set atomindex [atomid $segname $resid $atom]
lappend c21plus $atomindex
addatom $atomindex
}
foreach atomrecord $c21minus_list {
foreach {segname resid atom} $atomrecord { break }
set atomindex [atomid $segname $resid $atom]
lappend c21minus $atomindex
addatom $atomindex
}
foreach atomrecord $waters_list {
foreach {segname resid atom} $atomrecord { break }
set atomindex [atomid $segname $resid $atom]
set flag 0
if ($flag==0) {
lappend waters $atomindex
addatom $atomindex
}
}
set c21plus [concat $c21plus]
set c21minus [concat $c21minus]
set waters [concat $waters]
if {([llength $c21plus] > 0) && ([llength $c21minus] > 0)} {
set push 1
} else {
print "WARNING: membrane has not been detected"
set push 0
}
# initialize printing counter (independent on step counter)
set pushCount $waterCheckFreq
set checkCount $lipidCheckFreq
set printcount 0
set waterstopushUp {}
set waterstopushDown {}
###################################################################
# this procedure is executed at each time step
###################################################################
print "Starting calcforces..."
proc calcforces {} {
global fconstUp fconstDown stateread fstate fcount
global stepcount lipidCheckFreq waterCheckFreq
global pushCount checkCount printcount
global waters c21plus c21minus zplus zminus
global waterstopushUp waterstopushDown pressure
global push
if {$push == 1} {
##------------------------- apply forces ----------------------------###
# print " Up: $waterstopushUp"
# print "Down: $waterstopushDown"
foreach i $waterstopushUp {
set f [list 0.0 0.0 $fconstUp ]
# print "Push up atom $i at z $z with force $f "
addforce $i $f
}
foreach i $waterstopushDown {
set f [list 0.0 0.0 $fconstDown ]
# print "Push down atom $i at z $z with force $f "
addforce $i $f
}
###------- get atom indeces from NAMD before recalculation ----###
if { $pushCount == [expr $waterCheckFreq -1] } {
loadcoords coord
# print "Reconfiguring I ..."
clearconfig
# reconfig
foreach atom $c21plus {
addatom $atom
}
foreach atom $c21minus {
addatom $atom
}
foreach atom $waters {
addatom $atom
}
}
###------------ recalculate membrane size and waters to push -----------###
if { $checkCount == $lipidCheckFreq } {
loadcoords coord
set zplus 0.0
foreach index $c21plus {
foreach {x y z} $coord($index) { break }
# print "Z($index): $z"
set zplus [expr $zplus + $z]
}
set zplus [expr $zplus/double([llength $c21plus]) ]
set zminus 0.0
foreach index $c21minus {
foreach {x y z} $coord($index) { break }
# print "Z($index): $z"
set zminus [expr $zminus + $z]
}
set zminus [expr $zminus/double([llength $c21minus ] ) ]
print "membrane dimensions at step $printcount: {$zplus $zminus}"
set checkCount 0
}
if { $pushCount == $waterCheckFreq } {
set waterstopushUp {}
set waterstopushDown {}
set zHalf [expr ($zplus - $zminus)/2.0 ]
foreach index $waters {
foreach {x y z} $coord($index) { break }
### print "$z"
if { $z >= $zminus && $z <= $zplus } {
# print "$z in $index"
if { [expr $zplus - $z] <= $zHalf } {
lappend waterstopushUp $index
} else {
lappend waterstopushDown $index
}
}
}
print "Waters to push Up: $waterstopushUp"
print "Waters to push Down: $waterstopushDown"
print "Reassign waters to push at step: $printcount"
set pushCount 0
clearconfig
# reconfig
# print "Reconfiguring II ..."
set waterstopush [concat $waterstopushUp $waterstopushDown]
foreach atom $waterstopush {
addatom $atom
}
}
incr printcount
incr pushCount
incr checkCount
}
return
}
- Next message: subramanian vidhyasankar: "mail about renumbering of residues"
- Previous message: Peter Mawanga: "Re: Query about PME data in .dx format"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] [ attachment ]