##################################################
# Build NAMD/AMBER/GROMACS structures from coord #
##################################################

#Applications needed to build structures
TLEAP=tleap
PDB2GMX=pdb2gmx
GROMPP=grompp
VMD=vmd
CP=cp
HEAD=head

#TLEAP=/Users/dtanner/local/src/amber11/bin/tleap
#PDB2GMX=/Users/dtanner/local/bin/pdb2gmx
#GROMPP=/Users/dtanner/local/bin/grompp
#VMD=/Applications/VMD_1.9.app/Contents/MacOS/startup.command
#CP=/bin/cp
#HEAD=/usr/bin/head

#Don't Delete Intermediate Files
.SECONDARY:

#Structure Building Input Files
AD=archive
SD=structs
OD=output
CD=configs

#MD Type Suffixes
AS=a
GS=g
NS=n

default: small

# Build Small Structures/Configs (for testing)
small: \
${CD}/1IR2.${AS}.mdin \
${CD}/1IR2.${NS}.conf \
${CD}/1IR2.${GS}.tpr \
${CD}/2KKW.${AS}.mdin \
${CD}/2KKW.${NS}.conf \
${CD}/2KKW.${GS}.tpr \
${CD}/2W49.${AS}.mdin \
${CD}/2W49.${NS}.conf \
${CD}/2W49.${GS}.tpr

run_small: small
	./${CD}/run.${AS}.1IR2
	./${CD}/run.${GS}.1IR2
	./${CD}/run.${NS}.1IR2
	./${CD}/run.${AS}.2KKW
	./${CD}/run.${GS}.2KKW
	./${CD}/run.${NS}.2KKW
	./${CD}/run.${AS}.2W49
	./${CD}/run.${GS}.2W49
	./${CD}/run.${NS}.2W49

# Build All Structures
structs: \
${SD}/1IR2.${AS}.crd \
${SD}/2KKW.${AS}.crd \
${SD}/2W49.${AS}.crd \
${SD}/2W5U.${AS}.crd \
${SD}/3AK8.${AS}.crd \
${SD}/3EZQ.${AS}.crd \
${SD}/1IR2.${NS}.pdb \
${SD}/2KKW.${NS}.pdb \
${SD}/2W49.${NS}.pdb \
${SD}/2W5U.${NS}.pdb \
${SD}/3AK8.${NS}.pdb \
${SD}/3EZQ.${NS}.pdb \
${SD}/1IR2.${GS}.gro \
${SD}/2KKW.${GS}.gro \
${SD}/2W49.${GS}.gro \
${SD}/2W5U.${GS}.gro \
${SD}/3AK8.${GS}.gro \
${SD}/3EZQ.${GS}.gro

# Build Everything
all: \
${CD}/1IR2.${AS}.mdin \
${CD}/1IR2.${NS}.conf \
${CD}/1IR2.${GS}.tpr \
${CD}/2KKW.${AS}.mdin \
${CD}/2KKW.${NS}.conf \
${CD}/2KKW.${GS}.tpr \
${CD}/2W49.${AS}.mdin \
${CD}/2W49.${NS}.conf \
${CD}/2W49.${GS}.tpr \
${CD}/2W5U.${AS}.mdin \
${CD}/2W5U.${NS}.conf \
${CD}/2W5U.${GS}.tpr \
${CD}/3AK8.${AS}.mdin \
${CD}/3AK8.${NS}.conf \
${CD}/3AK8.${GS}.tpr \
${CD}/3EZQ.${AS}.mdin \
${CD}/3EZQ.${NS}.conf \
${CD}/3EZQ.${GS}.tpr

##################################################
# Build Config Files
${CD}/%.${AS}.mdin: ${SD}/%.${AS}.crd ${CD}/base.${AS}.mdin
	${CP} ${AD}/base.a.mdin $@
	${CP} ${AD}/run.${AS}.$* ${CD}
${CD}/base.${AS}.mdin:
	${CP} ${AD}/base.${AS}.mdin ${CD}

${CD}/%.${GS}.tpr: ${SD}/%.${GS}.gro
	${GROMPP} -f ${AD}/gb_run_config.mdp -c ${SD}/$*.${GS}.gro -p ${SD}/$*.${GS}.top -o ${CD}/$*.${GS}.tpr -po ${OD}/$*.mdp &> ${OD}/$*.tpr.log
	${CP} ${AD}/run.${GS}.$* ${CD}

${CD}/%.${NS}.conf: ${SD}/%.${NS}.pdb ${CD}/base.${NS}.conf
	${CP} ${AD}/$*.${NS}.conf $@
	${CP} ${AD}/run.${NS}.$* ${CD}
${CD}/base.${NS}.conf:
	${CP} ${AD}/base.${NS}.conf ${CD}
	${CP} ${AD}/par_all22_prot_cmap.inp ${SD}

##################################################
# Build Structures

#Build Amber Structure
${SD}/%.${AS}.crd: ${SD}/%.${AS}.tmp.pdb
	${TLEAP} -f ${AD}/$*.leap.script &> ${OD}/$*.crd.log

#Build Gromacs Structure
${SD}/%.${GS}.gro: ${SD}/%.${GS}.tmp.pdb
	${PDB2GMX} -ff charmm27 -water none -f $< -o ${SD}/$*.${GS}.gro -p ${SD}/$*.${GS}.top -i ${SD}/$*.${GS}.itp &> ${OD}/$*.gro.log

#Build NAMD Structure
${SD}/%.${NS}.pdb: ${SD}/%.${NS}.tmp.pdb
	${VMD} -dispdev text -e ${AD}/$*.tcl &> ${OD}/$*.pdb.log

##################################################
# Build Initial PDBs

#Build Initial Amber PDB from NAMD PDB
${SD}/%.${AS}.tmp.pdb: ${SD}/%.${NS}.tmp.pdb
	${CP} $< $@
	vim -S ${AD}/sub.n.a.cmd $@

#Build Initial GROMACS PDB from NAMD PDB
${SD}/%.${GS}.tmp.pdb: ${SD}/%.${NS}.tmp.pdb
	${CP} $< $@
	vim -S ${AD}/sub.n.g.cmd $@

##################################################
# Build Initial NAMD PDB

#Initial Coordinate File
#init=${AD}/3EZQ.mineq.coor

${SD}/%.${NS}.tmp.pdb:
	${CP} ${AD}/$*.mineq.pdb $@

#${SD}/2KKW.${NS}.tmp.pdb:
#	${CP} ${AD}/2KKW.mineq.coor $@
#${SD}/2W49.${NS}.tmp.pdb:
#	${HEAD} -n 7199 ${init} > $@
#${SD}/2W5U.${NS}.tmp.pdb:
#	${HEAD} -n 79179 ${init} > $@
#${SD}/3AK8.${NS}.tmp.pdb:
#	${HEAD} -n 316713 ${init} > $@
#${SD}/3EZQ.${NS}.tmp.pdb:
#	${CP} ${init} $@


##################################################
# Clean all made files
clean_logs:
	rm -f logs/*.*
clean_output:
	rm -f output/*.*
clean_structs:
	rm -f structs/*.*
clean_configs:
	rm -f configs/*.*
clean: clean_logs clean_output clean_structs clean_configs
