#!/bin/bash # make-normal-signal.sh script_name="make-normal-signal.sh" script_ver="1.0.0" #Help function usage() { echo "-h Help documentation for $script_name"\\n echo "-f --File path to Replicate 1 alignment." echo "-s --File path to Replicate 2 alignment." echo "-r --UCSC Reference genome (e.g. hg19, mm10)" echo "-e --The experiment names." echo "-o --The ouput directory." echo "Example: $script_name -f 'foo1.bam' -s 'foo2.bam man2.bam' -r 'hg19' -e 'foo man' -o output" exit 1 } # Version function version(){ echo "$script_name $script_ver" exit 1 } main(){ # Load required modules module load python/2.7.x-anaconda module load star/2.4.2a module load picard/1.127 module load UCSC_userApps/v317 # Parsing options OPTIND=1 # Reset OPTIND while getopts :f:s:r:e:o:hv opt do case $opt in f) aln1=$OPTARG;; s) aln2=$OPTARG;; r) ucsc_reference=$OPTARG;; e) exp=$OPTARG;; o) out=$OPTARG;; h) usage;; v) version;; esac done shift $(($OPTIND -1)) # Check for mandatory options if [[ -z $aln1 ]] || [[ -z $aln2 ]] || [[ -z $ucsc_reference ]] || [[ -z $exp ]] || [[ -z $out ]]; then usage fi # Define the out directory out_dir=$out\/$script_name-$script_ver # Make sure directories exist if [ ! -e $out ]; then mkdir $out fi # Run make-normal-signal.R if directory doesn't exist if [ ! -d $out_dir ]; then mkdir $out_dir # Fetch chrom sizes echo "* Downloading chrom.sizes..." fetchChromSizes $ucsc_reference > $out_dir/chrom.sizes java -Xmx2g -jar $PICARD/picard.jar MergeSamFiles OUTPUT=$out_dir/$exp.bam INPUT=$aln1 INPUT=$aln2 cd $out_dir STAR --runMode inputAlignmentsFromBAM --inputBAMfile $exp.bam --outWigType bedGraph --outWigStrand Stranded --outFileNamePrefix $exp --outWigReferencesPrefix chr bedSort $out_dir/$exp\Signal.UniqueMultiple.str1.out.bg $out_dir/$exp\Signal.UniqueMultiple.str1.out.sorted.bg bedSort $out_dir/$exp\Signal.UniqueMultiple.str2.out.bg $out_dir/$exp\Signal.UniqueMultiple.str2.out.sorted.bg bedGraphToBigWig $out_dir/$exp\Signal.UniqueMultiple.str1.out.sorted.bg $out_dir/chrom.sizes $out_dir/$exp.negative.bw bedGraphToBigWig $out_dir/$exp\Signal.UniqueMultiple.str2.out.sorted.bg $out_dir/chrom.sizes $out_dir/$exp.positive.bw rm $out_dir/$exp*.bg rm $out_dir/$exp.bam # Get input and output files and then print out metadata.json file input_files=("${array_aln1[@]}" "${array_aln2[@]}") printf -v input "\"%s\"," "${input_files[@]}" input=${input%,} output_file=($out_dir\/*) printf -v output "\"%s\"," "${output_file[@]}" output=${output%,} printf '{"script name":"%s","script version":"%s", "input files": [%s], "output files": [%s]}' "$script_name" "$script_ver" "$input" "$output" | python -m json.tool > $out_dir/metadata.json else echo "* Normalized Signal has been made. " fi } main "$@"