|
@@ -0,0 +1,227 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+export VMDNOCUDA=1
|
|
|
+#export VMDNOOPTIX=1
|
|
|
+export VMDNOOSPRAY=1
|
|
|
+
|
|
|
+#######################################################################################
|
|
|
+## ADJUSTABLE PARAMETERS ##
|
|
|
+#######################################################################################
|
|
|
+
|
|
|
+# number of frames to skip (i.e. from equilibration)
|
|
|
+skip=0
|
|
|
+# set folder name that contains the jobs
|
|
|
+job_folder="4-jobs"
|
|
|
+# set atom selection for concatenation
|
|
|
+concat_sel="chain A"
|
|
|
+# set atom selection to unwrap
|
|
|
+unwrap_sel="chain A"
|
|
|
+# set atom selection to wrap to
|
|
|
+wrap_to_sel="chain A"
|
|
|
+# set atom selection to wrap
|
|
|
+wrap_sel="chain A"
|
|
|
+# set atom selection for alignment
|
|
|
+align_sel="chain A"
|
|
|
+# set atom selection for EDA
|
|
|
+eda_sel="chain A and name CA"
|
|
|
+
|
|
|
+#######################################################################################
|
|
|
+## SET VARS ##
|
|
|
+#######################################################################################
|
|
|
+
|
|
|
+# set folder name for output files
|
|
|
+out_dir="$(basename ${0})"
|
|
|
+out_dir="${out_dir%%.*}"
|
|
|
+
|
|
|
+# create suffixes for output files
|
|
|
+concat_sel_s="${concat_sel// /_}"
|
|
|
+eda_sel_s="${eda_sel// /_}"
|
|
|
+
|
|
|
+#######################################################################################
|
|
|
+## FUNCTIONS ##
|
|
|
+#######################################################################################
|
|
|
+
|
|
|
+function get_systems() {
|
|
|
+ systems=()
|
|
|
+ all_systems=()
|
|
|
+ _jobs=( $(ls -d ../${job_folder}/*/*/) )
|
|
|
+ for _job in ${_jobs[@]}; do
|
|
|
+ all_systems+=( $(basename ${_job}) )
|
|
|
+ done
|
|
|
+ systems+=( $(for _system in ${all_systems[@]}; do echo ${_system}; done | sort -u) )
|
|
|
+}
|
|
|
+
|
|
|
+#######################################################################################
|
|
|
+## CONCATENATE, UNWRAP, ALIGN INDVIDUAL REPLICATES ##
|
|
|
+#######################################################################################
|
|
|
+
|
|
|
+function concat_individual() {
|
|
|
+
|
|
|
+ get_systems
|
|
|
+
|
|
|
+ for system in "${systems[@]}"; do
|
|
|
+
|
|
|
+ dcds=()
|
|
|
+ jobs=( $(ls -d ../${job_folder}/*/${system}/) )
|
|
|
+
|
|
|
+ for job in ${jobs[@]}; do
|
|
|
+ job=${job%%/}
|
|
|
+ rel_job_path=${job#../${job_folder}/}
|
|
|
+ mkdir -p ${out_dir}/individual/${rel_job_path}
|
|
|
+ dcds=( $(ls ${job}/*sim_*.dcd | sort -V) )
|
|
|
+
|
|
|
+ for dcd in ${dcds[@]}; do
|
|
|
+ filename=${dcd##*/}
|
|
|
+ filename=${filename%%.*}
|
|
|
+ # UNWRAP AND ALIGN
|
|
|
+ echo 'package require pbctools' > temp.tcl
|
|
|
+ echo "pbc unwrap -all -sel \""${unwrap_sel}"\"" >> temp.tcl
|
|
|
+ echo "pbc wrap -sel \""${wrap_sel}"\" -all -compound chain -center com -centersel \""${wrap_to_sel}"\"" >> temp.tcl
|
|
|
+ echo "set out [atomselect top \""${concat_sel}"\"]" >> temp.tcl
|
|
|
+ echo "animate write dcd ${out_dir}/individual/${rel_job_path}/temp-${filename}-${concat_sel_s}.dcd sel \$out waitfor all" >> temp.tcl
|
|
|
+ for (( i=0; i<1; i++)); do
|
|
|
+ echo "\$out writepsf ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.psf" >> temp.tcl
|
|
|
+ echo "\$out writepdb ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.pdb" >> temp.tcl
|
|
|
+ done
|
|
|
+
|
|
|
+ echo "sync" >> temp.tcl
|
|
|
+ echo 'exit' >> temp.tcl
|
|
|
+
|
|
|
+ # run temp.tcl
|
|
|
+ vmd -dispdev text -eofexit ${job}/${system}_solv_ion.psf ${dcd} < "temp.tcl"
|
|
|
+ sync
|
|
|
+
|
|
|
+ rm "temp.tcl"
|
|
|
+ done
|
|
|
+
|
|
|
+ dcds=( $(ls ${out_dir}/individual/${rel_job_path}/temp-*-${concat_sel_s}.dcd | sort -V) )
|
|
|
+
|
|
|
+ echo "set ref [atomselect top \""${align_sel}"\" frame 0]" > temp.tcl
|
|
|
+ echo "set sel [atomselect top \""${align_sel}"\"]" >> temp.tcl
|
|
|
+ echo 'set all [atomselect top "all"]' >> temp.tcl
|
|
|
+ echo 'set n [molinfo top get numframes]' >> temp.tcl
|
|
|
+ echo 'for { set i 1 } { $i < $n } { incr i } {' >> temp.tcl
|
|
|
+ echo ' $sel frame $i' >> temp.tcl
|
|
|
+ echo ' $all frame $i' >> temp.tcl
|
|
|
+ echo ' $all move [measure fit $sel $ref]' >> temp.tcl
|
|
|
+ echo '}' >> temp.tcl
|
|
|
+ echo "animate write dcd ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.dcd beg ${skip} waitfor all" >> temp.tcl
|
|
|
+ echo "sync" >> temp.tcl
|
|
|
+ echo 'exit' >> temp.tcl
|
|
|
+
|
|
|
+ # run temp.tcl
|
|
|
+ vmd -dispdev text -eofexit ${out_dir}/individual/${rel_job_path}/${system}-${concat_sel_s}.psf ${dcds[@]} < "temp.tcl"
|
|
|
+ sync
|
|
|
+ rm "temp.tcl"
|
|
|
+ rm ${out_dir}/individual/${rel_job_path}/temp*
|
|
|
+ done
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+#######################################################################################
|
|
|
+## CONCATENATE AND ALIGN ALL REPLICATES ##
|
|
|
+#######################################################################################
|
|
|
+
|
|
|
+function concat_combined() {
|
|
|
+
|
|
|
+ get_systems
|
|
|
+
|
|
|
+ mkdir -p ${out_dir}/combined
|
|
|
+
|
|
|
+ for system in ${systems[@]}; do
|
|
|
+
|
|
|
+
|
|
|
+ # create dcd array and copy pdb/psf
|
|
|
+ dcds=( $(ls ${out_dir}/individual/*/${system}/${system}-${concat_sel_s}.dcd | sort -V) )
|
|
|
+ psfs=( $(ls ${out_dir}/individual/*/${system}/${system}-${concat_sel_s}.psf | sort -V) )
|
|
|
+ pdbs=( $(ls ${out_dir}/individual/*/${system}/${system}-${concat_sel_s}.pdb | sort -V) )
|
|
|
+
|
|
|
+ cp ${psfs[1]} ${out_dir}/combined/${system}-${concat_sel_s}.psf
|
|
|
+ cp ${pdbs[1]} ${out_dir}/combined/${system}-${concat_sel_s}.pdb
|
|
|
+
|
|
|
+ # ALIGN
|
|
|
+ echo "set ref [atomselect top \""${align_sel}"\" frame 0]" >> temp.tcl
|
|
|
+ echo "set sel [atomselect top \""${align_sel}"\"]" >> temp.tcl
|
|
|
+ echo 'set all [atomselect top "all"]' >> temp.tcl
|
|
|
+ echo 'set n [molinfo top get numframes]' >> temp.tcl
|
|
|
+ echo 'for { set i 1 } { $i < $n } { incr i } {' >> temp.tcl
|
|
|
+ echo ' $sel frame $i' >> temp.tcl
|
|
|
+ echo ' $all frame $i' >> temp.tcl
|
|
|
+ echo ' $all move [measure fit $sel $ref]' >> temp.tcl
|
|
|
+ echo '}' >> temp.tcl
|
|
|
+ # write aligned trr and dcd output files
|
|
|
+ echo "animate write trr ${out_dir}/combined/${system}-${concat_sel_s}.trr waitfor all" >> temp.tcl
|
|
|
+ echo "animate write dcd ${out_dir}/combined/${system}-${concat_sel_s}.dcd waitfor all" >> temp.tcl
|
|
|
+ echo 'sync' >> temp.tcl
|
|
|
+ echo 'exit' >> temp.tcl
|
|
|
+
|
|
|
+ vmd -dispdev text -eofexit ${out_dir}/combined/${system}-${concat_sel_s}.psf ${dcds[@]} < "temp.tcl"
|
|
|
+ rm "temp.tcl"
|
|
|
+ sync
|
|
|
+
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+#######################################################################################
|
|
|
+## CONCATENATE AND ALIGN ALL SYSTEMS (EDA) ##
|
|
|
+#######################################################################################
|
|
|
+
|
|
|
+function concat_eda() {
|
|
|
+
|
|
|
+ get_systems
|
|
|
+
|
|
|
+ mkdir -p ${out_dir}/eda/
|
|
|
+
|
|
|
+ # concat systems to eda_sel
|
|
|
+ for system in ${systems[@]}; do
|
|
|
+
|
|
|
+ echo "set out [atomselect top \""${eda_sel}"\"]" > temp.tcl
|
|
|
+ echo "set last_out [atomselect top \""${eda_sel}"\" frame 0]" >> temp.tcl
|
|
|
+
|
|
|
+ # write aligned dcd
|
|
|
+ echo "animate write dcd ${out_dir}/eda/${system}-${eda_sel_s}.dcd sel \$out waitfor all" >> temp.tcl
|
|
|
+ echo "\$last_out writepsf ${out_dir}/eda/${system}-${eda_sel_s}.psf" >> temp.tcl
|
|
|
+ echo "\$last_out writepdb ${out_dir}/eda/${system}-${eda_sel_s}.pdb" >> temp.tcl
|
|
|
+ echo 'sync' >> temp.tcl
|
|
|
+ echo 'exit' >> temp.tcl
|
|
|
+
|
|
|
+ vmd -dispdev text -eofexit ${out_dir}/combined/${system}-${concat_sel_s}.psf ${out_dir}/combined/${system}-${concat_sel_s}.dcd < "temp.tcl"
|
|
|
+ sync
|
|
|
+ rm "temp.tcl"
|
|
|
+ done
|
|
|
+
|
|
|
+ dcds=( $(ls ${out_dir}/eda/*-${eda_sel_s}.dcd | sort -V) )
|
|
|
+ psfs=( $(ls ${out_dir}/eda/*-${eda_sel_s}.psf | sort -V) )
|
|
|
+ pdbs=( $(ls ${out_dir}/eda/*-${eda_sel_s}.pdb | sort -V) )
|
|
|
+
|
|
|
+ cp ${psfs[1]} ${out_dir}/eda/combined-${eda_sel_s}.psf
|
|
|
+ cp ${pdbs[1]} ${out_dir}/eda/combined-${eda_sel_s}.pdb
|
|
|
+
|
|
|
+ # concat and align
|
|
|
+ echo "set ref [atomselect top \""${eda_sel}"\" frame 0]" > temp.tcl
|
|
|
+ echo "set sel [atomselect top \""${eda_sel}"\"]" >> temp.tcl
|
|
|
+ echo 'set all [atomselect top "all"]' >> temp.tcl
|
|
|
+ echo 'set n [molinfo top get numframes]' >> temp.tcl
|
|
|
+ echo 'for { set i 1 } { $i < $n } { incr i } {' >> temp.tcl
|
|
|
+ echo ' $sel frame $i' >> temp.tcl
|
|
|
+ echo ' $all frame $i' >> temp.tcl
|
|
|
+ echo ' $all move [measure fit $sel $ref]' >> temp.tcl
|
|
|
+ echo '}' >> temp.tcl
|
|
|
+ echo "animate write dcd ${out_dir}/eda/combined-${eda_sel_s}.dcd waitfor all" >> temp.tcl
|
|
|
+ echo 'sync' >> temp.tcl
|
|
|
+ echo 'exit' >> temp.tcl
|
|
|
+
|
|
|
+ vmd -dispdev text -eofexit ${out_dir}/eda/combined-${eda_sel_s}.psf ${dcds[@]} < "temp.tcl"
|
|
|
+
|
|
|
+ sync
|
|
|
+ rm temp.tcl
|
|
|
+ for system in ${systems[@]}; do
|
|
|
+ rm "${out_dir}/eda/${system}-${eda_sel_s}.dcd"
|
|
|
+ rm "${out_dir}/eda/${system}-${eda_sel_s}.pdb"
|
|
|
+ rm "${out_dir}/eda/${system}-${eda_sel_s}.psf"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+concat_individual
|
|
|
+#concat_combined
|
|
|
+#concat_eda
|
|
|
+
|