#SHELL = /bin/csh

# aliases for common targets

all: SHARP SOLVE SHELX XPLOR Pattersons

frugal:
	@ echo "clearing out large intermediate files"
	rm -f ./mtz/rawdata.mtz ./mtz/sorted_ref.mtz ./mtz/rough_scaled.mtz ./mtz/localscaled.mtz ./logs/*.old*

SHARP: ./mtz/all.mtz
	@ echo "./mtz/all.mtz is ready for input into SHARP or mlphare."

SOLVE: ./SOLVE/FP.unmerged.fmt ./SOLVE/FP.fmt
	@ echo "./SOLVE/*.fmt are ready for input into SOLVE"

SHELX: ./SHELX/ano.hkl ./SHELX/iso.hkl ./SHELX/fh.hkl 
	@ echo "./SHELX/*.hkl are ready for input into SHELX"

XPLOR: ./XPLOR/FP_anom.fobs
	@ echo "./XPLOR/*.fobs are ready for input into XPLOR's mad_merge.inp"

Pattersons: ./maps/FH_Patt.map 
	@ echo "Pattersons are ready in ./maps"

##############################################################################
# Actual file targets for sorting, scaling, and localscaling

# sort all raw wavelength data together (and scale reference set)
./mtz/rawdata.mtz: ./scripts/sort_everything.com ../raw.mtz
	@ if test -f ./logs/sorting.log; then mv ./logs/sorting.log ./logs/sorting.log.old ; fi
	@ echo "sorting raw data ..."
	@ ./scripts/sort_everything.com > ./logs/sorting.log

# scale and merge the reference set
./mtz/reference.mtz: ./mtz/rawdata.mtz ./scripts/make_reference_set.com 
	@ if test -f ./logs/make_reference_set.log; then mv ./logs/make_reference_set.log ./logs/make_reference_set.log.old ; fi
	@ echo "prescaling reference set (FP) ... (see ./logs/make_reference_set.log)"
	@ ./scripts/make_reference_set.com ./mtz/rawdata.mtz  > ./logs/make_reference_set.log

# import the reference set into the raw data file
./mtz/sorted_ref.mtz: ./mtz/reference.mtz ./mtz/rawdata.mtz ./scripts/import_reference.com 
	@ if test ! -f ./logs/make_reference_set.log; then echo "" > ./logs/make_reference_set.log ; fi
	@ echo "importing the reference set ... (see ./logs/make_reference_set.log)"
	@ ./scripts/import_reference.com ./mtz/reference.mtz IMEAN SIGIMEAN FreeR_flags ./mtz/rawdata.mtz  >> ./logs/make_reference_set.log

# rough scaling
./mtz/rough_scaled.mtz: ./mtz/sorted_ref.mtz ./scripts/rough_scale.com ./runlist.txt
	@ if test -f ./logs/rough_scale.log; then mv ./logs/rough_scale.log ./logs/rough_scale.log.old ; fi
	@ echo "smooth scaling everything to ./mtz/reference.mtz.  (see ./logs/rough_scale.log)"
	@ ./scripts/rough_scale.com ./mtz/sorted_ref.mtz  | tee ./logs/rough_scale.log | egrep "Cycle|shift"

# smooth localscaling
./mtz/localscaled.mtz: ./mtz/rough_scaled.mtz ./scripts/localscale.com ./runlist.txt
	@ if test -f ./logs/localscale.log; then mv ./logs/localscale.log ./logs/localscale.log.old ; fi
	@ echo "localscaling: this can take a long time.  (see ./logs/localscale.log)"
	@ ./scripts/localscale.com ./mtz/rough_scaled.mtz  | tee ./logs/localscale.log | egrep "Cycle|shift"
	@ echo ""

###############################################################################

# merge individual wavelengths from final scaled file
./mtz/FP.mtz: ./mtz/localscaled.mtz ./scripts/merge.com
	@ if test -f ./logs/merge_FP.log; then mv ./logs/merge_FP.log ./logs/merge_FP.log.old ; fi
	@ echo "mergeing FP as ./mtz/FP.mtz ...  (see ./logs/merge_FP.log)"
	@ ./scripts/merge.com FP ./mtz/localscaled.mtz > ./logs/merge_FP.log
	@ mv merged.mtz ./mtz/FP.mtz

###############################################################################
# collate scaled and merged wavelengths together (and make free-R flags)
./mtz/all.mtz: ./mtz/FP.mtz ./scripts/scaleit.com
	@ if test -f ./logs/scaleit.log; then mv ./logs/scaleit.log ./logs/scaleit.log.old ; fi
	@ echo ""
	@ echo "combining FP into ./mtz/all.mtz ... (see ./logs/scaleit.log)"
	@ ./scripts/scala_summary.com ./logs/merge_*.log
	@ ./scripts/scaleit.com > ./logs/scaleit.log
	@ mv scaleited.mtz ./mtz/all.mtz
	@ rm -f cadded.mtz
	@ echo "adding 5% Free-R flags ..."
	@ ./scripts/FreeRer.com ./mtz/all.mtz 5% >> ./logs/scaleit.log
	@ mv FreeRed.mtz ./mtz/all.mtz
	@ mv freeR_flag.mtz ./mtz
	@ mv XPLOR.cv ./XPLOR/freeR.cv
	@ echo ""
	@ echo "True completeness to 2.24 A:"
	@ ./scripts/mtz_sum.com 2.24 ./mtz/all.mtz
	@ echo ""
	@ ./scripts/scaleit_sum.com ./logs/scaleit.log >> ./logs/scaleit.log
	@ echo "look at end of ./logs/scaleit.log for Dano and Diso vs FP"

###############################################################################
# creation of Patterson maps

# calculate "best" FH Patterson (and update shelx data)
./maps/FH_Patt.map: ./mtz/all.mtz ./scripts/bestFH.com
	@ ./scripts/bestFH.com ./mtz/all.mtz > ./logs/bestFH.log
	@ cat bestFH.log >> ./logs/bestFH.log 
	@ rm -f bestFH.log 2> /dev/null
	@ mv fh.hkl ./SHELX/fh.hkl 2> /dev/null
	@ mv FH.mtz ./mtz/bestFH.mtz 2> /dev/null
	@ mv FH_Patt.map ./maps/FH_Patt.map 2> /dev/null
#	@ mv wFH_Patt.map ./maps/ 2> /dev/null

###############################################################################
# conversion to other programs formats

# SOLVE
./SOLVE/FP.fmt: ./mtz/FP.mtz ./SOLVE/mtz2SOLVE.com
	@ ./SOLVE/mtz2SOLVE.com ./mtz/FP.mtz > ./logs/extract_SOLVE_FP.log
	@ mv SOLVE.fmt ./SOLVE/FP.fmt

./SOLVE/FP.unmerged.fmt: ./mtz/localscaled.mtz  ./scripts/extract.com  ./SOLVE/mtz2SOLVE.com
	@ ./scripts/extract.com FP ./mtz/localscaled.mtz > ./logs/extract_unmerged_SOLVE_FP.log
	@ ./SOLVE/mtz2SOLVE.com unmerged.mtz >> ./logs/extract_unmerged_SOLVE_FP.log
	@ rm -f unmerged.mtz > /dev/null
	@ mv SOLVE.fmt ./SOLVE/FP.unmerged.fmt

###############################################################################
# SHELX

# these will be made when the Pattersons are made
./SHELX/fh.hkl: ./maps/FH_Patt.map
./SHELX/fm.hkl: ./maps/FM_Patt.map

# pick best SHELX data files
./SHELX/ano.hkl: ./SHELX/FP_ano.hkl
	@ ./SHELX/best_signal.com ./SHELX/*_ano.hkl
	@ mv best.hkl ./SHELX/ano.hkl

./SHELX/iso.hkl: 
./SHELX/FP_ano.hkl: ./mtz/FP.mtz ./SHELX/mtz2SHELX.com
	@ ./SHELX/mtz2SHELX.com ./mtz/FP.mtz > ./logs/extract_SHELX-FP_ano.log
	@ mv SHELX_ano.hkl ./SHELX/FP_ano.hkl
	@ echo ./SHELX/FP_ano.hkl >> ./logs/extract_SHELX-FP_ano.log
	
###############################################################################
# X-plor
./XPLOR/FP_anom.fobs: ./mtz/FP.mtz
	@ ./XPLOR/mtz2XPLOR.com ./mtz/FP.mtz > ./logs/extract_XPLOR-FP.log
	@ mv XPLOR.fobs ./XPLOR/FP_anom.fobs

