comparison install_amplicon_analysis-1.3.5.sh @ 4:86a12d75ebe4 draft default tip

planemo upload for repository https://github.com/pjbriggs/Amplicon_analysis-galaxy commit 7be61b7ed35ca3deaad68d2eae384c8cd365bcb8
author pjbriggs
date Fri, 20 Dec 2019 06:59:49 -0500
parents
children
comparison
equal deleted inserted replaced
3:3ab198df8f3f 4:86a12d75ebe4
1 #!/bin/sh -e
2 #
3 # Prototype script to setup a conda environment with the
4 # dependencies needed for the Amplicon_analysis_pipeline
5 # script
6 #
7 # Handle command line
8 usage()
9 {
10 echo "Usage: $(basename $0) [DIR]"
11 echo ""
12 echo "Installs the Amplicon_analysis_pipeline package plus"
13 echo "dependencies in directory DIR (or current directory "
14 echo "if DIR not supplied)"
15 }
16 if [ ! -z "$1" ] ; then
17 # Check if help was requested
18 case "$1" in
19 --help|-h)
20 usage
21 exit 0
22 ;;
23 esac
24 # Assume it's the installation directory
25 cd $1
26 fi
27 # Versions
28 PIPELINE_VERSION=1.3.5
29 CONDA_REQUIRED_VERSION=4.6.14
30 RDP_CLASSIFIER_VERSION=2.2
31 # Directories
32 TOP_DIR=$(pwd)/Amplicon_analysis-${PIPELINE_VERSION}
33 BIN_DIR=${TOP_DIR}/bin
34 CONDA_DIR=${TOP_DIR}/conda
35 CONDA_BIN=${CONDA_DIR}/bin
36 CONDA_LIB=${CONDA_DIR}/lib
37 CONDA=${CONDA_BIN}/conda
38 ENV_NAME="amplicon_analysis_pipeline@${PIPELINE_VERSION}"
39 ENV_DIR=${CONDA_DIR}/envs/$ENV_NAME
40 #
41 # Functions
42 #
43 # Report failure and terminate script
44 fail()
45 {
46 echo ""
47 echo ERROR $@ >&2
48 echo ""
49 echo "$(basename $0): installation failed"
50 exit 1
51 }
52 #
53 # Rewrite the shebangs in the installed conda scripts
54 # to remove the full path to conda 'bin' directory
55 rewrite_conda_shebangs()
56 {
57 pattern="s,^#!${CONDA_BIN}/,#!/usr/bin/env ,g"
58 find ${CONDA_BIN} -type f -exec sed -i "$pattern" {} \;
59 }
60 #
61 # Reset conda version if required
62 reset_conda_version()
63 {
64 CONDA_VERSION="$(${CONDA_BIN}/conda -V 2>&1 | head -n 1 | cut -d' ' -f2)"
65 echo conda version: ${CONDA_VERSION}
66 if [ "${CONDA_VERSION}" != "${CONDA_REQUIRED_VERSION}" ] ; then
67 echo "Resetting conda to last known working version $CONDA_REQUIRED_VERSION"
68 ${CONDA_BIN}/conda config --set allow_conda_downgrades true
69 ${CONDA_BIN}/conda install -y conda=${CONDA_REQUIRED_VERSION}
70 else
71 echo "conda version ok"
72 fi
73 }
74 #
75 # Install conda
76 install_conda()
77 {
78 echo "++++++++++++++++"
79 echo "Installing conda"
80 echo "++++++++++++++++"
81 if [ -e ${CONDA_DIR} ] ; then
82 echo "*** $CONDA_DIR already exists ***" >&2
83 return
84 fi
85 local cwd=$(pwd)
86 local wd=$(mktemp -d)
87 cd $wd
88 wget -q https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh
89 bash ./Miniconda2-latest-Linux-x86_64.sh -b -p ${CONDA_DIR}
90 echo Installed conda in ${CONDA_DIR}
91 echo -n "Adding conda bin to PATH..."
92 export PATH=${CONDA_BIN}:$PATH
93 echo "ok"
94 # Reset the conda version to a known working version
95 # (to avoid problems observed with e.g. conda 4.7.10)
96 echo ""
97 reset_conda_version
98 # Update the installation files
99 # This is to avoid problems when the length the installation
100 # directory path exceeds the limit for the shebang statement
101 # in the conda files
102 echo ""
103 echo -n "Rewriting conda shebangs..."
104 rewrite_conda_shebangs
105 echo "ok"
106 cd $cwd
107 rm -rf $wd/*
108 rmdir $wd
109 }
110 #
111 # Create conda environment
112 install_conda_packages()
113 {
114 echo "+++++++++++++++++++++++++"
115 echo "Installing conda packages"
116 echo "+++++++++++++++++++++++++"
117 local cwd=$(pwd)
118 local wd=$(mktemp -d)
119 cd $wd
120 cat >environment.yml <<EOF
121 name: ${ENV_NAME}
122 channels:
123 - defaults
124 - conda-forge
125 - bioconda
126 dependencies:
127 - python=2.7
128 - cutadapt=1.8
129 - sickle-trim=1.33
130 - bioawk=1.0
131 - pandaseq=2.8.1
132 - spades=3.10.1
133 - fastqc=0.11.3
134 - qiime=1.9.1
135 - blast-legacy=2.2.26
136 - fasta-splitter=0.2.6
137 - rdp_classifier=$RDP_CLASSIFIER_VERSION
138 - vsearch=2.10.4
139 - r=3.5.1
140 - r-tidyverse=1.2.1
141 - bioconductor-dada2=1.8
142 - bioconductor-biomformat=1.8.0
143 EOF
144 ${CONDA} env create --name "${ENV_NAME}" -f environment.yml
145 if [ $? -ne 0 ] ; then
146 fail "Non-zero exit status from 'conda env create'"
147 elif [ ! -e "${ENV_DIR}" ] ; then
148 fail "Failed to create conda environment: ${ENV_DIR} not found"
149 fi
150 echo Created conda environment in ${ENV_DIR}
151 cd $cwd
152 rm -rf $wd/*
153 rmdir $wd
154 #
155 # Patch qiime 1.9.1 tools to switch deprecated 'axisbg'
156 # matplotlib property to 'facecolor':
157 # https://matplotlib.org/api/prev_api_changes/api_changes_2.0.0.html
158 echo ""
159 for exe in make_2d_plots.py plot_taxa_summary.py ; do
160 echo -n "Patching ${exe}..."
161 find ${CONDA_DIR} -type f -name "$exe" -exec sed -i 's/axisbg=/facecolor=/g' {} \;
162 echo "done"
163 done
164 #
165 # Patch qiime 1.9.1 tools to switch deprecated 'set_axis_bgcolor'
166 # method call to 'set_facecolor':
167 # https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.set_axis_bgcolor.html
168 for exe in make_rarefaction_plots.py ; do
169 echo -n "Patching ${exe}..."
170 find ${CONDA_DIR} -type f -name "$exe" -exec sed -i 's/set_axis_bgcolor/set_facecolor/g' {} \;
171 echo "done"
172 done
173 }
174 #
175 # Install all the non-conda dependencies in a single
176 # function (invokes separate functions for each package)
177 install_non_conda_packages()
178 {
179 echo "+++++++++++++++++++++++++++++"
180 echo "Installing non-conda packages"
181 echo "+++++++++++++++++++++++++++++"
182 # Temporary working directory
183 local wd=$(mktemp -d)
184 local cwd=$(pwd)
185 local wd=$(mktemp -d)
186 cd $wd
187 # Amplicon analysis pipeline
188 echo -n "Installing Amplicon_analysis_pipeline..."
189 if [ -e ${BIN_DIR}/Amplicon_analysis_pipeline.sh ] ; then
190 echo "already installed"
191 else
192 install_amplicon_analysis_pipeline
193 echo "ok"
194 fi
195 # ChimeraSlayer
196 echo -n "Installing ChimeraSlayer..."
197 if [ -e ${BIN_DIR}/ChimeraSlayer.pl ] ; then
198 echo "already installed"
199 else
200 install_chimeraslayer
201 echo "ok"
202 fi
203 # Uclust
204 # This no longer seems to be available for download from
205 # drive5.com so don't download
206 echo "WARNING uclust not available: skipping installation"
207 }
208 #
209 # Amplicon analyis pipeline
210 install_amplicon_analysis_pipeline()
211 {
212 local wd=$(mktemp -d)
213 local cwd=$(pwd)
214 local wd=$(mktemp -d)
215 cd $wd
216 wget -q https://github.com/MTutino/Amplicon_analysis/archive/${PIPELINE_VERSION}.tar.gz
217 tar zxf ${PIPELINE_VERSION}.tar.gz
218 cd Amplicon_analysis-${PIPELINE_VERSION}
219 INSTALL_DIR=${TOP_DIR}/share/amplicon_analysis_pipeline-${PIPELINE_VERSION}
220 mkdir -p $INSTALL_DIR
221 ln -s $INSTALL_DIR ${TOP_DIR}/share/amplicon_analysis_pipeline
222 for f in *.sh *.R ; do
223 /bin/cp $f $INSTALL_DIR
224 done
225 /bin/cp -r uc2otutab $INSTALL_DIR
226 mkdir -p ${BIN_DIR}
227 cat >${BIN_DIR}/Amplicon_analysis_pipeline.sh <<EOF
228 #!/usr/bin/env bash
229 #
230 # Point to Qiime config
231 export QIIME_CONFIG_FP=${TOP_DIR}/qiime/qiime_config
232 # Set up the RDP jar file
233 export RDP_JAR_PATH=${TOP_DIR}/share/rdp_classifier/rdp_classifier-${RDP_CLASSIFIER_VERSION}.jar
234 # Set the Matplotlib backend
235 export MPLBACKEND="agg"
236 # Put the scripts onto the PATH
237 export PATH=${BIN_DIR}:${INSTALL_DIR}:\$PATH
238 # Activate the conda environment
239 export PATH=${CONDA_BIN}:\$PATH
240 source ${CONDA_BIN}/activate ${ENV_NAME}
241 # Execute the driver script with the supplied arguments
242 $INSTALL_DIR/Amplicon_analysis_pipeline.sh \$@
243 exit \$?
244 EOF
245 chmod 0755 ${BIN_DIR}/Amplicon_analysis_pipeline.sh
246 cat >${BIN_DIR}/install_reference_data.sh <<EOF
247 #!/usr/bin/env bash -e
248 #
249 function usage() {
250 echo "Usage: \$(basename \$0) DIR"
251 }
252 if [ -z "\$1" ] ; then
253 usage
254 exit 0
255 elif [ "\$1" == "--help" ] || [ "\$1" == "-h" ] ; then
256 usage
257 echo ""
258 echo "Install reference data into DIR"
259 exit 0
260 fi
261 echo "=========================================="
262 echo "Installing Amplicon analysis pipeline data"
263 echo "=========================================="
264 if [ ! -e "\$1" ] ; then
265 echo "Making directory \$1"
266 mkdir -p \$1
267 fi
268 cd \$1
269 DATA_DIR=\$(pwd)
270 echo "Installing reference data under \$DATA_DIR"
271 $INSTALL_DIR/References.sh
272 echo ""
273 echo "Use '-r \$DATA_DIR' when running Amplicon_analysis_pipeline.sh"
274 echo "to use the reference data from this directory"
275 echo ""
276 echo "\$(basename \$0): finished"
277 EOF
278 chmod 0755 ${BIN_DIR}/install_reference_data.sh
279 cd $cwd
280 rm -rf $wd/*
281 rmdir $wd
282 }
283 #
284 # ChimeraSlayer
285 install_chimeraslayer()
286 {
287 local cwd=$(pwd)
288 local wd=$(mktemp -d)
289 cd $wd
290 wget -q https://sourceforge.net/projects/microbiomeutil/files/__OLD_VERSIONS/microbiomeutil_2010-04-29.tar.gz
291 tar zxf microbiomeutil_2010-04-29.tar.gz
292 cd microbiomeutil_2010-04-29
293 INSTALL_DIR=${TOP_DIR}/share/microbiome_chimeraslayer-2010-04-29
294 mkdir -p $INSTALL_DIR
295 ln -s $INSTALL_DIR ${TOP_DIR}/share/microbiome_chimeraslayer
296 /bin/cp -r ChimeraSlayer $INSTALL_DIR
297 cat >${BIN_DIR}/ChimeraSlayer.pl <<EOF
298 #!/usr/bin/env bash
299 export PATH=$INSTALL_DIR:\$PATH
300 $INSTALL_DIR/ChimeraSlayer/ChimeraSlayer.pl $@
301 EOF
302 chmod 0755 ${INSTALL_DIR}/ChimeraSlayer/ChimeraSlayer.pl
303 chmod 0755 ${BIN_DIR}/ChimeraSlayer.pl
304 cd $cwd
305 rm -rf $wd/*
306 rmdir $wd
307 }
308 #
309 # uclust required for QIIME/pyNAST
310 # License only allows this version to be used with those two packages
311 # See: http://drive5.com/uclust/downloads1_2_22q.html
312 install_uclust()
313 {
314 local cwd=$(pwd)
315 local wd=$(mktemp -d)
316 cd $wd
317 wget -q http://drive5.com/uclust/uclustq1.2.22_i86linux64
318 INSTALL_DIR=${TOP_DIR}/share/uclust-1.2.22
319 mkdir -p $INSTALL_DIR
320 ln -s $INSTALL_DIR ${TOP_DIR}/share/uclust
321 /bin/mv uclustq1.2.22_i86linux64 ${INSTALL_DIR}/uclust
322 chmod 0755 ${INSTALL_DIR}/uclust
323 ln -s ${INSTALL_DIR}/uclust ${BIN_DIR}
324 cd $cwd
325 rm -rf $wd/*
326 rmdir $wd
327 }
328 setup_pipeline_environment()
329 {
330 echo "+++++++++++++++++++++++++++++++"
331 echo "Setting up pipeline environment"
332 echo "+++++++++++++++++++++++++++++++"
333 # fasta_splitter.pl
334 echo -n "Setting up fasta_splitter.pl..."
335 if [ -e ${BIN_DIR}/fasta-splitter.pl ] ; then
336 echo "already exists"
337 elif [ ! -e ${ENV_DIR}/share/fasta-splitter/fasta-splitter.pl ] ; then
338 echo "failed"
339 fail "fasta-splitter.pl not found"
340 else
341 ln -s ${ENV_DIR}/share/fasta-splitter/fasta-splitter.pl ${BIN_DIR}/fasta-splitter.pl
342 echo "ok"
343 fi
344 # rdp_classifier.jar
345 local rdp_classifier_jar=rdp_classifier-${RDP_CLASSIFIER_VERSION}.jar
346 echo -n "Setting up rdp_classifier.jar..."
347 if [ -e ${TOP_DIR}/share/rdp_classifier/${rdp_classifier_jar} ] ; then
348 echo "already exists"
349 elif [ ! -e ${ENV_DIR}/share/rdp_classifier/rdp_classifier.jar ] ; then
350 echo "failed"
351 fail "rdp_classifier.jar not found"
352 else
353 mkdir -p ${TOP_DIR}/share/rdp_classifier
354 ln -s ${ENV_DIR}/share/rdp_classifier/rdp_classifier.jar ${TOP_DIR}/share/rdp_classifier/${rdp_classifier_jar}
355 echo "ok"
356 fi
357 # qiime_config
358 echo -n "Setting up qiime_config..."
359 if [ -e ${TOP_DIR}/qiime/qiime_config ] ; then
360 echo "already exists"
361 else
362 mkdir -p ${TOP_DIR}/qiime
363 cat >${TOP_DIR}/qiime/qiime_config <<EOF-qiime-config
364 qiime_scripts_dir ${ENV_DIR}/bin
365 EOF-qiime-config
366 echo "ok"
367 fi
368 }
369 #
370 # Top level script does the installation
371 echo "======================================="
372 echo "Amplicon_analysis_pipeline installation"
373 echo "======================================="
374 echo "Installing into ${TOP_DIR}"
375 if [ -e ${TOP_DIR} ] ; then
376 fail "Directory already exists"
377 fi
378 mkdir -p ${TOP_DIR}
379 install_conda
380 install_conda_packages
381 install_non_conda_packages
382 setup_pipeline_environment
383 echo "===================================="
384 echo "Amplicon_analysis_pipeline installed"
385 echo "===================================="
386 echo ""
387 echo "Install reference data using:"
388 echo ""
389 echo "\$ ${BIN_DIR}/install_reference_data.sh DIR"
390 echo ""
391 echo "Run pipeline scripts using:"
392 echo ""
393 echo "\$ ${BIN_DIR}/Amplicon_analysis_pipeline.sh ..."
394 echo ""
395 echo "(or add ${BIN_DIR} to your PATH)"
396 echo ""
397 echo "$(basename $0): finished"
398 ##
399 #