diff Dotplot_Release/dotplot.bash @ 12:f48b1312b6dd draft

Uploaded
author bornea
date Wed, 16 Mar 2016 12:09:43 -0400
parents bc752a05f16d
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Dotplot_Release/dotplot.bash	Wed Mar 16 12:09:43 2016 -0400
@@ -0,0 +1,252 @@
+#!/bin/bash
+#SCRIPT=$(readlink -e $0)
+#SCRIPTPATH=`dirname $SCRIPT`
+pushd `dirname $0` > /dev/null
+SCRIPTPATH=`pwd`
+popd > /dev/null
+
+usage() { printf "Usage: $0 
+[-f <saint_file_name.txt>]
+[-i <0 for SaintExpress format, 1 for other>]
+[-c <clustering to perform. Options: b (biclustering), h (hierarchical), n (none, requires input text files for bait and prey ordering; see options -b and -p)>]
+[-n <clustering type to be performed if option -c is set to \"h\">]
+[-d <distance metric to use if option -c is set to \"h\">]
+[-b <list of bait proteins in display order (see option -c n)>]
+[-p <list of prey proteins in display order (see option -c n). Set this to \"all\" if you want to include all preys and cluster them>]
+[-s <primary FDR cutoff [0-1, recommended=0.01]>]
+[-t <secondary FDR cutoff [must be less than the primary, recommended=0.025]>
+[-x <spectral count minimum. Only preys with >= this will be used]>
+[-m <maximum spectral count>]
+[-N <normalization, 0 for no (default), 1 for yes, 2 for normalization based on significant preys counts (prey FDR <= option -t)>]
+[-C <FDR cutoff for normalization if using option -N 2 (deafult is -t)>]\n"
+1>&2; exit 1; }
+
+N=0
+n="ward"
+d="canberra"
+x=0
+i=0
+while getopts ":f:i:s:t:x:m:c:n:d:b:p:N:C:" o; do
+    case "${o}" in
+        f)
+            f=${OPTARG}
+            ;;
+        i)
+	    i=${OPTARG}
+            ;;
+        s)
+            s=${OPTARG}
+            ;;
+	t)
+            t=${OPTARG}
+            ;;
+        x)
+	    x=${OPTARG}
+            ;;
+	m)
+            m=${OPTARG}
+            ;;
+	c)
+            c=${OPTARG}
+	    ;;
+	n)
+	    n=${OPTARG}
+	    ;;
+	d)
+	    d=${OPTARG}
+	    ;;
+	b)
+            b=${OPTARG}
+	    ;;
+	p)
+	    p=${OPTARG}
+	    ;;
+	N)
+	    N=${OPTARG}
+	    ;;
+	C)
+	    C=${OPTARG}
+	    ;;
+        *)
+            usage
+            ;;
+    esac
+done
+shift $((OPTIND-1))
+
+filename=${f%%.*}
+echo "Saint input file = ${f}"
+echo "Primary FDR cutoff = ${s}"
+echo "Secondary FDR cutoff for dotplot = ${t}"
+echo "Minimum spectral count for significant preys = ${x}"
+echo "Maximum spectral count for dot plot = ${m}"
+
+if [ -z "${f}" ] || [ -z "${s}" ] || [ -z "${t}" ] || [ -z "${m}" ] || [ -z "${c}" ]; then
+    usage
+fi
+
+if [ "${i}" == 1 ]; then
+	$SCRIPTPATH/SaintConvert.pl -i ${f}
+	f="mockSaintExpress.txt"
+fi
+
+if [ "${x}" -ge "${m}" ]; then
+	echo "spectral count minimum (${x}) cannot be greater than or equal to the maximum (${m})"
+	exit 1;
+elif [ "${x}" -lt 0 ]; then
+	echo "spectral count minimum (${x}) cannot be less than 0. Setting to 0 and continuing"
+	x=0
+fi
+
+###Check for normalization
+
+if [ "${N}" == 1 ]; then
+	printf "\nNormalization is being performed\n"
+	$SCRIPTPATH/Normalization.R ${f}
+	f="norm_saint.txt"
+elif [ "${N}" == 2 ]; then
+	printf "\nNormalization is being performed\n"
+	if [ -z "${C}" ]; then
+		C=${t}
+	fi
+	$SCRIPTPATH/Normalization_sigpreys.R ${f} ${C}
+	f="norm_saint.txt"
+fi
+
+
+###Check for clustering etc
+
+if [ "${c}" == "h" ] && [ -z "${n}" ]; then
+	printf "\nHierarchial clustering was selected (-c = h), but no clustering method (-n) was chosen.\n"
+	printf "The input parameter -n must be set to one of \"average\", \"centroid\", \"complete\", \"mcquitty\",\n"
+	printf "\"median\", \"single\" or \"ward\". \"ward\" will be selected as default.\n\n"
+	n="ward"
+elif [ "${c}" == "h" ] && [ -n "${n}" ]; then
+	if [ "${n}" == "average" ] || [ "${n}" == "centroid" ] || [ "${n}" == "complete" ] || [ "${n}" == "mcquitty" ] || [ "${n}" == "median" ] || [  "${n}" == "single" ] || [ "${n}" == "ward" ]; then
+		printf "\nHierarchical clustering (method = ${n}) will be performed\n\n"
+	else
+		printf "\n${n} is not a valid Hierarchical clustering method.\n"
+		printf "Choose one of \"average\", \"centroid\", \"complete\", \"mcquitty\", \"median\", \"single\" or \"ward\"\n\n"
+		exit 1
+	fi
+fi
+
+p_c=0
+if [ "${c}" == "h" ] && [ -z "${d}" ]; then
+	printf "\nHierarchial clustering was selected (-c = h), but no distance metric (-d) was chosen.\n"
+	printf "The input parameter -d must be set to one of  \"binary\", \"canberra\", \"euclidean\",\n"
+	printf "\"manhattan\", \"maximum\" or \"minkowski\". \"canberra\" will be selected as default.\n\n"
+	d="canberra"
+elif [ "${c}" == "h" ] && [ -n "${d}" ]; then
+	if [ "${d}" == "binary" ] || [ "${d}" == "canberra" ] || [ "${d}" == "euclidean" ] || [ "${d}" == "manhattan" ] || [ "${d}" == "maximum" ] || [  "${d}" == "minkowski" ]; then
+		printf "\nHierarchical clustering (distance metric = ${d}) will be performed\n\n"
+	else
+		printf "\n${d} is not a valid Hierarchical clustering distance metric.\n"
+		printf "Choose one of  \"binary\", \"canberra\", \"euclidean\", \"manhattan\", \"maximum\" or \"minkowski\"\n\n"
+		exit 1
+	fi
+fi
+
+if [ "${c}" == "n" ] && [ -z "${b}" ]; then
+	printf "\n\"No Clustering\" option was selected (-c = n), but no bait list was included (option -b).\n"
+	printf "Bait list must be in .txt formart.\n\n"
+	exit 1
+elif [ "${c}" == "n" ] && [ -z "${p}" ]; then
+	printf "\n\"No Clustering\" option was selected (-c = n), but no prey list was included (option -p).\n"
+	printf "Prey list must be in .txt formart.\n\n"
+	exit 1
+elif [ "${c}" == "n" ] && [ "${p}" == "all" ]; then
+	printf "\n\"No Clustering\" option was selected (-c = n) for baits, but preys will still be clustered.\n"
+	printf "using \"ward\" and \"canberra\" as defaults or options as supplied on command line.\n\n"
+	p="empty"
+	p_c=1
+	n="ward"
+	d="canberra"
+fi
+
+
+###Check number of baits
+
+bait_n=$(perl $SCRIPTPATH/BaitCheck.pl -i ${f})
+echo "Number of baits = "$bait_n
+printf "\n\n"
+
+if [ "${c}" == "b" ] && [ $bait_n == 2 ]; then
+	printf "\nWarning only 2 baits are present. Biclustering will not performed.\n"
+	printf "Hierarchical clustering (method = ward) will be performed instead.\n\n"
+	c="h"
+	n="ward"
+fi
+
+
+###Generate plots
+
+if [ "${c}" == "b" ]; then
+	printf "\nBiclustering will be performed\n\n"
+	$SCRIPTPATH/Step1_data_reformating.R ${f} ${s} ${filename}
+	$SCRIPTPATH/Step2_data_filtering.R ${filename}_matrix.txt ${x} ${filename}
+	GSL_RNG_SEED=123  $SCRIPTPATH/Step3_nestedcluster ${filename}.dat $SCRIPTPATH/biclust_param.txt
+	$SCRIPTPATH/Step4_biclustering.R ${filename}.dat
+
+	$SCRIPTPATH/SOFD.pl -i ${f} -s ${s} -x ${x}
+	$SCRIPTPATH/R_dotPlot.R ${s} ${t} ${m}
+	mkdir Output_${filename}
+	mkdir Output_${filename}/TempData_${filename}
+	mv bait_lists Output_${filename}/TempData_${filename}
+	mv Clusters Output_${filename}/TempData_${filename}
+	mv MCMCparameters Output_${filename}/TempData_${filename}
+	mv NestedClusters Output_${filename}/TempData_${filename}
+	mv NestedMu Output_${filename}/TempData_${filename}
+	mv NestedSigma2 Output_${filename}/TempData_${filename}
+	mv OPTclusters Output_${filename}/TempData_${filename}
+	mv ${filename}_matrix.txt Output_${filename}/TempData_${filename}
+	mv ${filename}.dat Output_${filename}/TempData_${filename}
+	mv SC_data.txt Output_${filename}/TempData_${filename}
+	mv FDR_data.txt Output_${filename}/TempData_${filename}
+	mv clustered_matrix.txt Output_${filename}/TempData_${filename}
+	mv singletons.txt Output_${filename}/TempData_${filename}
+	mv bait2bait_matrix.txt Output_${filename}/TempData_${filename}
+	mv baitClusters Output_${filename}/TempData_${filename}
+	mv clusteredData Output_${filename}/TempData_${filename}
+	mv dotplot.pdf Output_${filename}
+	mv bait2bait.pdf Output_${filename} 
+	mv estimated.pdf Output_${filename} 
+	mv stats.pdf Output_${filename}
+	cp $SCRIPTPATH/legend.pdf Output_${filename}
+elif [ "${c}" == "h" ]; then
+
+	$SCRIPTPATH/SOFD.pl -i ${f} -s ${s} -x ${x}
+	$SCRIPTPATH/R_dotPlot_hc.R ${s} ${t} ${m} ${n} ${d} $SCRIPTPATH
+
+	mkdir Output_${filename}
+	mkdir Output_${filename}/TempData_${filename}
+	mv dotplot.pdf Output_${filename}
+	mv heatmap_borders.pdf Output_${filename}
+	mv heatmap_no_borders.pdf Output_${filename}
+	mv bait2bait.pdf Output_${filename}
+	mv SC_data.txt Output_${filename}/TempData_${filename}
+	mv FDR_data.txt Output_${filename}/TempData_${filename}
+	cp $SCRIPTPATH/legend.pdf Output_${filename}
+elif [ "${c}" == "n" ]; then
+	
+	$SCRIPTPATH/SOFD.pl -i ${f} -s ${s} -x ${x}
+	echo "$SCRIPTPATH/R_dotPlot_nc.R ${s} ${t} ${m} ${b} $p_c ${p} ${n} ${d} $SCRIPTPATH"
+	$SCRIPTPATH/R_dotPlot_nc.R ${s} ${t} ${m} ${b} $p_c ${p} ${n} ${d} $SCRIPTPATH
+
+	mkdir Output_${filename}
+	mkdir Output_${filename}/TempData_${filename}
+	mv dotplot.pdf Output_${filename}
+	mv heatmap_borders.pdf Output_${filename}
+	mv heatmap_no_borders.pdf Output_${filename}
+	mv SC_data.txt Output_${filename}/TempData_${filename}
+	mv FDR_data.txt Output_${filename}/TempData_${filename}
+	cp $SCRIPTPATH/legend.pdf Output_${filename}
+else
+	printf -- "-c must be one of [b, h, n]:  b (biclustering), h (hierarchical), n (none, requires input text files for bait and prey ordering>\n"
+	exit 1;
+fi
+
+if [ "${N}" == "1" ] || [ "${N}" == "2" ]; then
+	mv norm_saint.txt Output_${filename}/TempData_${filename}
+fi
+