1-concat.sh 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #!/usr/bin/env bash
  2. export VMDNOCUDA=1
  3. #export VMDNOOPTIX=1
  4. export VMDNOOSPRAY=1
  5. #######################################################################################
  6. ## ADJUSTABLE PARAMETERS ##
  7. #######################################################################################
  8. # number of frames to skip (i.e. from equilibration)
  9. skip=0
  10. # set folder name that contains the jobs
  11. job_folder="4-jobs"
  12. # set atom selection for concatenation
  13. concat_sel="chain A"
  14. # set atom selection to unwrap
  15. unwrap_sel="chain A"
  16. # set atom selection to wrap to
  17. wrap_to_sel="chain A"
  18. # set atom selection to wrap
  19. wrap_sel="chain A"
  20. # set atom selection for alignment
  21. align_sel="chain A"
  22. # set atom selection for EDA
  23. eda_sel="chain A and name CA"
  24. #######################################################################################
  25. ## SET VARS ##
  26. #######################################################################################
  27. # set folder name for output files
  28. out_dir="$(basename ${0})"
  29. out_dir="${out_dir%%.*}"
  30. # create suffixes for output files
  31. concat_sel_s="${concat_sel// /_}"
  32. eda_sel_s="${eda_sel// /_}"
  33. #######################################################################################
  34. ## FUNCTIONS ##
  35. #######################################################################################
  36. function get_systems() {
  37. systems=()
  38. all_systems=()
  39. _jobs=( $(ls -d ../${job_folder}/*/*/) )
  40. for _job in ${_jobs[@]}; do
  41. all_systems+=( $(basename ${_job}) )
  42. done
  43. systems+=( $(for _system in ${all_systems[@]}; do echo ${_system}; done | sort -u) )
  44. }
  45. #######################################################################################
  46. ## CONCATENATE, UNWRAP, ALIGN INDVIDUAL REPLICATES ##
  47. #######################################################################################
  48. function concat_individual() {
  49. get_systems
  50. for system in "${systems[@]}"; do
  51. dcds=()
  52. jobs=( $(ls -d ../${job_folder}/*/${system}/) )
  53. for job in ${jobs[@]}; do
  54. job=${job%%/}
  55. rel_job_path=${job#../${job_folder}/}
  56. mkdir -p ${out_dir}/individual/${rel_job_path}
  57. dcds=( $(ls ${job}/*sim_*.dcd | sort -V) )
  58. for dcd in ${dcds[@]}; do
  59. filename=${dcd##*/}
  60. filename=${filename%%.*}
  61. # UNWRAP AND ALIGN
  62. echo 'package require pbctools' > temp.tcl
  63. echo "pbc unwrap -all -sel \""${unwrap_sel}"\"" >> temp.tcl
  64. echo "pbc wrap -sel \""${wrap_sel}"\" -all -compound chain -center com -centersel \""${wrap_to_sel}"\"" >> temp.tcl
  65. echo "set out [atomselect top \""${concat_sel}"\"]" >> temp.tcl
  66. echo "animate write dcd ${out_dir}/individual/${rel_job_path}/temp-${filename}-${concat_sel_s}.dcd sel \$out waitfor all" >> temp.tcl
  67. for (( i=0; i<1; i++)); do
  68. echo "\$out writepsf ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.psf" >> temp.tcl
  69. echo "\$out writepdb ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.pdb" >> temp.tcl
  70. done
  71. echo "sync" >> temp.tcl
  72. echo 'exit' >> temp.tcl
  73. # run temp.tcl
  74. vmd -dispdev text -eofexit ${job}/${system}_solv_ion.psf ${dcd} < "temp.tcl"
  75. sync
  76. rm "temp.tcl"
  77. done
  78. dcds=( $(ls ${out_dir}/individual/${rel_job_path}/temp-*-${concat_sel_s}.dcd | sort -V) )
  79. echo "set ref [atomselect top \""${align_sel}"\" frame 0]" > temp.tcl
  80. echo "set sel [atomselect top \""${align_sel}"\"]" >> temp.tcl
  81. echo 'set all [atomselect top "all"]' >> temp.tcl
  82. echo 'set n [molinfo top get numframes]' >> temp.tcl
  83. echo 'for { set i 1 } { $i < $n } { incr i } {' >> temp.tcl
  84. echo ' $sel frame $i' >> temp.tcl
  85. echo ' $all frame $i' >> temp.tcl
  86. echo ' $all move [measure fit $sel $ref]' >> temp.tcl
  87. echo '}' >> temp.tcl
  88. echo "animate write dcd ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.dcd beg ${skip} waitfor all" >> temp.tcl
  89. echo "sync" >> temp.tcl
  90. echo 'exit' >> temp.tcl
  91. # run temp.tcl
  92. vmd -dispdev text -eofexit ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.psf ${dcds[@]} < "temp.tcl"
  93. sync
  94. rm "temp.tcl"
  95. rm ${out_dir}/individual/${rel_job_path}/temp*
  96. done
  97. done
  98. }
  99. #######################################################################################
  100. ## CONCATENATE AND ALIGN ALL REPLICATES ##
  101. #######################################################################################
  102. function concat_combined() {
  103. get_systems
  104. mkdir -p ${out_dir}/combined
  105. for system in ${systems[@]}; do
  106. # create dcd array and copy pdb/psf
  107. dcds=( $(ls ${out_dir}/individual/*/${system}/${system}-${concat_sel_s}.dcd | sort -V) )
  108. psfs=( $(ls ${out_dir}/individual/*/${system}/${system}-${concat_sel_s}.psf | sort -V) )
  109. pdbs=( $(ls ${out_dir}/individual/*/${system}/${system}-${concat_sel_s}.pdb | sort -V) )
  110. cp ${psfs[1]} ${out_dir}/combined/${system}-${concat_sel_s}.psf
  111. cp ${pdbs[1]} ${out_dir}/combined/${system}-${concat_sel_s}.pdb
  112. # ALIGN
  113. echo "set ref [atomselect top \""${align_sel}"\" frame 0]" >> temp.tcl
  114. echo "set sel [atomselect top \""${align_sel}"\"]" >> temp.tcl
  115. echo 'set all [atomselect top "all"]' >> temp.tcl
  116. echo 'set n [molinfo top get numframes]' >> temp.tcl
  117. echo 'for { set i 1 } { $i < $n } { incr i } {' >> temp.tcl
  118. echo ' $sel frame $i' >> temp.tcl
  119. echo ' $all frame $i' >> temp.tcl
  120. echo ' $all move [measure fit $sel $ref]' >> temp.tcl
  121. echo '}' >> temp.tcl
  122. # write aligned trr and dcd output files
  123. echo "animate write trr ${out_dir}/combined/${system}-${concat_sel_s}.trr waitfor all" >> temp.tcl
  124. echo "animate write dcd ${out_dir}/combined/${system}-${concat_sel_s}.dcd waitfor all" >> temp.tcl
  125. echo 'sync' >> temp.tcl
  126. echo 'exit' >> temp.tcl
  127. vmd -dispdev text -eofexit ${out_dir}/combined/${system}-${concat_sel_s}.psf ${dcds[@]} < "temp.tcl"
  128. rm "temp.tcl"
  129. sync
  130. done
  131. }
  132. #######################################################################################
  133. ## CONCATENATE AND ALIGN ALL SYSTEMS (EDA) ##
  134. #######################################################################################
  135. function concat_eda() {
  136. get_systems
  137. mkdir -p ${out_dir}/eda/
  138. # concat systems to eda_sel
  139. for system in ${systems[@]}; do
  140. echo "set out [atomselect top \""${eda_sel}"\"]" > temp.tcl
  141. echo "set last_out [atomselect top \""${eda_sel}"\" frame 0]" >> temp.tcl
  142. # write aligned dcd
  143. echo "animate write dcd ${out_dir}/eda/${system}-${eda_sel_s}.dcd sel \$out waitfor all" >> temp.tcl
  144. echo "\$last_out writepsf ${out_dir}/eda/${system}-${eda_sel_s}.psf" >> temp.tcl
  145. echo "\$last_out writepdb ${out_dir}/eda/${system}-${eda_sel_s}.pdb" >> temp.tcl
  146. echo 'sync' >> temp.tcl
  147. echo 'exit' >> temp.tcl
  148. vmd -dispdev text -eofexit ${out_dir}/combined/${system}-${concat_sel_s}.psf ${out_dir}/combined/${system}-${concat_sel_s}.dcd < "temp.tcl"
  149. sync
  150. rm "temp.tcl"
  151. done
  152. dcds=( $(ls ${out_dir}/eda/*-${eda_sel_s}.dcd | sort -V) )
  153. psfs=( $(ls ${out_dir}/eda/*-${eda_sel_s}.psf | sort -V) )
  154. pdbs=( $(ls ${out_dir}/eda/*-${eda_sel_s}.pdb | sort -V) )
  155. cp ${psfs[1]} ${out_dir}/eda/combined-${eda_sel_s}.psf
  156. cp ${pdbs[1]} ${out_dir}/eda/combined-${eda_sel_s}.pdb
  157. # concat and align
  158. echo "set ref [atomselect top \""${eda_sel}"\" frame 0]" > temp.tcl
  159. echo "set sel [atomselect top \""${eda_sel}"\"]" >> temp.tcl
  160. echo 'set all [atomselect top "all"]' >> temp.tcl
  161. echo 'set n [molinfo top get numframes]' >> temp.tcl
  162. echo 'for { set i 1 } { $i < $n } { incr i } {' >> temp.tcl
  163. echo ' $sel frame $i' >> temp.tcl
  164. echo ' $all frame $i' >> temp.tcl
  165. echo ' $all move [measure fit $sel $ref]' >> temp.tcl
  166. echo '}' >> temp.tcl
  167. echo "animate write dcd ${out_dir}/eda/combined-${eda_sel_s}.dcd waitfor all" >> temp.tcl
  168. echo 'sync' >> temp.tcl
  169. echo 'exit' >> temp.tcl
  170. vmd -dispdev text -eofexit ${out_dir}/eda/combined-${eda_sel_s}.psf ${dcds[@]} < "temp.tcl"
  171. sync
  172. rm temp.tcl
  173. for system in ${systems[@]}; do
  174. rm "${out_dir}/eda/${system}-${eda_sel_s}.dcd"
  175. rm "${out_dir}/eda/${system}-${eda_sel_s}.pdb"
  176. rm "${out_dir}/eda/${system}-${eda_sel_s}.psf"
  177. done
  178. }
  179. concat_individual
  180. #concat_combined
  181. #concat_eda