script_dir=`dirname $0`
TM_dir=`dirname ${script_dir}`
# ARGUMENT PARSING
while (( "$#" )); do
case "$1" in
-n)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
name=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-i)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
input_dir=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-o)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
output_dir=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-M)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
add_muts=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-p)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
PLmethod=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-g)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
G=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-u)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
unobserved=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-r)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
driver_symbol_file=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-m)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
nonsynonymous_mutation_file=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-d)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
dpclust_data_dir=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-w)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
wgd_file=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-s)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
sample_list=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-c)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
wcc_dir=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-a)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
assembly=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-R)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
remove_acrocentric=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-S)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
memory_saver=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-G)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
gene_gr=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-b)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
bb_file_pattern=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-e)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
estimate_MRCA=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-*|--*=) # unsupported flags
echo "Error: Unsupported flag $1" >&2
exit 1
;;
*) # report unsupported positional arguments
echo "Error: Positional arguments are not supported in this pipeline"
exit 1
;;
esac
done
# SETTING DEFAULT VALUES
if [ "${assembly}" = "" ]; then
assembly="hg38"
fi
if [ "${assembly}" = "hg19" ]; then
if [ "${chr_coords}" = "" ]; then
chr_coords=${TM_dir}/reference_files/chromosome_coordinates_hg19.txt
fi
if [ "${centro_coords}" = "" ]; then
centro_coords=${TM_dir}/reference_files/UCSC_centromeres_hg19.txt
fi
if [ "${gene_gr}" = "" ]; then
gene_gr=${TM_dir}/reference_files/all_gene_gr_hg19.Rdata
fi
fi
if [ "${add_muts}" = "" ]; then
add_muts="TRUE"
fi
if [ "${unobvserved}" = "" ]; then
unobserved="notIncluded"
fi
if [ "${chr_coords}" = "" ]; then
chr_coords=${TM_dir}/reference_files/chromosome_coordinates_hg38.txt
fi
if [ "${centro_coords}" = "" ]; then
centro_coords=${TM_dir}/reference_files/UCSC_GRC_combined_centromeres_hg38.txt
fi
if [ "${wgd_file}" = "" ]; then
wgd_file="none"
elif [ "${wgd_file:0:1}" != "/" ]; then
wgd_file="`pwd`/${wgd_file}"
fi
if [ "${sample_list}" != "" ]; then
if [ "${sample_list:0:1}" != "/" ]; then
sample_list="`pwd`/${sample_list}"
fi
fi
if [ "${remove_acrocentric}" = "" ]; then
remove_acrocentric=TRUE
fi
if [ "${memory_saver}" = "" ]; then
memory_saver=FALSE
fi
if [ "${gene_gr}" = "" ]; then
gene_gr=${TM_dir}/reference_files/all_gene_gr_hg38.Rdata
fi
if [ "${bb_file_pattern}" = "" ]; then
bb_file_pattern="subclones.txt"
fi
if [ "${estimate_MRCA}" = "" ]; then
estimate_MRCA="FALSE"
fi
# make paths absolute to avoid any qsub confusion
if [ "${TM_dir:0:1}" != "/" ]; then
TM_dir="`pwd`/${TM_dir}"
fi
if [ "${input_dir:0:1}" != "/" ]; then
input_dir="`pwd`/${input_dir}"
fi
if [ "${output_dir:0:1}" != "/" ]; then
output_dir="`pwd`/${output_dir}"
fi
if [ "${chr_coords:0:1}" != "/" ]; then
chr_coords="`pwd`/${chr_coords}"
fi
if [ "${centro_coords:0:1}" != "/" ]; then
centro_coords="`pwd`/${centro_coords}"
fi
if [ "${driver_symbol_file:0:1}" != "/" ]; then
driver_symbol_file="`pwd`/${driver_symbol_file}"
fi
if [ "${nonsynonymous_mutation_file:0:1}" != "/" ]; then
nonsynonymous_mutation_file="`pwd`/${nonsynonymous_mutation_file}"
fi
if [ "${dpclust_data_dir:0:1}" != "/" ]; then
dpclust_data_dir="`pwd`/${dpclust_data_dir}"
fi
if [ "${wcc_dir}" != "" ]; then
if [ "${wcc_dir:0:1}" != "/" ]; then
wcc_dir="`pwd`/${wcc_dir}"
fi
fi
# CREATE OUTPUT DIRECTORY
log_dir=${output_dir}/qsub_logs/
mkdir -p ${log_dir}
# Write input parameter values to logs
echo "name=${name}
input_dir=${input_dir}
output_dir=${output_dir}
add_muts=${add_muts}
PLmethod=${PLmethod}
G=${G}
unobserved=${unobserved}
driver_symbol_file=${driver_symbol_file}
nonsynonymous_mutation_file=${nonsynonymous_mutation_file}
dpclust_data_dir=${dpclust_data_dir}
wgd_file=${wgd_file}
sample_list=${sample_list}
wcc_dir=${wcc_dir}
assembly=${assembly}
chr_coords=${chr_coords}
centro_coords=${centro_coords}
remove_acrocentric=${remove_acrocentric}
memory_saver=${memory_saver}
bb_file_pattern=${bb_file_pattern}
estimate_MRCA=${estimate_MRCA}
" > ${log_dir}/pipeline_params.txt
echo "submitting first steps"
# NOTE: if sample_list is not passed in, the variable will be empty, and this is (correctly) handled by the scripts, by using all samples in the input directory
hj=`qsub -terse -o ${log_dir}/firstSteps_out.txt -e ${log_dir}/firstSteps_err.txt ${TM_dir}/BASH/run_first_steps.sh ${TM_dir}/R/ ${name} ${input_dir}/ ${output_dir}/ ${wgd_file} ${bb_file_pattern} ${sample_list}`
# sleep commands prior to each qsub command ensure that any dependent scripts are submitted after those on which they depend
sleep 5
echo "submitting landscape"
hj=`qsub -hold_jid ${hj} -terse -o ${log_dir} -e ${log_dir} ${TM_dir}/BASH/TM_3_CN_landscape_CW.sh ${TM_dir}/R/TM_3_CN_landscape_CW.R ${name} ${output_dir} ${output_dir} ${chr_coords}`
# For later stages, sample_list needs to be "none" if missing, rather than empty, as an empty variable will cause problems for those stages
if [ "${sample_list}" = "" ]; then
sample_list="none"
fi
sleep 5
echo "submitting event identification"
hj=`qsub -hold_jid ${hj} -terse -o ${log_dir}/event_ident_out.txt -e ${log_dir}/event_ident_err.txt ${TM_dir}/BASH/run_event_identification_steps.sh ${TM_dir}/R/ ${name} ${output_dir}/ ${output_dir}/ ${chr_coords} ${centro_coords} ${input_dir}/ ${sample_list} ${remove_acrocentric}`
if [ "${add_muts}" = "TRUE" ]; then
sleep 5
echo "submitting driver prep"
hj=`qsub -hold_jid ${hj} -terse -o ${log_dir} -e ${log_dir} ${TM_dir}/BASH/run_driver_prep.sh ${TM_dir}/R/ ${name} ${output_dir}/ ${sample_list} ${driver_symbol_file} ${nonsynonymous_mutation_file} ${dpclust_data_dir} ${gene_gr} ${wcc_dir}`
fi
sleep 5
echo "submitting timing"
OLDIFS=${IFS}
IFS=,
read -r -a allG <<< "${G}"
for thisG in ${allG[@]}; do
qsub -hold_jid ${hj} -terse -N PLTiming -o ${output_dir}/qsub_logs/Timing_out_${thisG}.txt -e ${output_dir}/qsub_logs/Timing_err_${thisG}.txt ${TM_dir}/BASH/run_postFDR_5.sh ${TM_dir}/R/TM_postFDR_5_ordering_events_final_CW.R ${name} ${output_dir}/ ${output_dir}/ ${PLmethod} ${output_dir}/${name}_driver_mut_file_for_timing.txt ${wgd_file} ${thisG} ${unobserved} ${add_muts} ${memory_saver} ${estimate_MRCA}
done
IFS=${OLDIFS}