Mercurial > repos > pjbriggs > amplicon_analysis_pipeline
comparison install_amplicon_analysis-1.3.5.sh @ 42:098ad1dd7760 draft
planemo upload for repository https://github.com/pjbriggs/Amplicon_analysis-galaxy commit 10be6f00106e853a6720e4052871d9d84e027137
author | pjbriggs |
---|---|
date | Thu, 05 Dec 2019 11:48:01 +0000 |
parents | |
children | 213b5cdecb70 |
comparison
equal
deleted
inserted
replaced
41:7b9786a43a16 | 42:098ad1dd7760 |
---|---|
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 # Reset the conda version to a known working version | |
92 # (to avoid problems observed with e.g. conda 4.7.10) | |
93 echo "" | |
94 reset_conda_version | |
95 # Update the installation files | |
96 # This is to avoid problems when the length the installation | |
97 # directory path exceeds the limit for the shebang statement | |
98 # in the conda files | |
99 echo "" | |
100 echo -n "Rewriting conda shebangs..." | |
101 rewrite_conda_shebangs | |
102 echo "ok" | |
103 echo -n "Adding conda bin to PATH..." | |
104 PATH=${CONDA_BIN}:$PATH | |
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 echo Created conda environment in ${ENV_DIR} | |
146 cd $cwd | |
147 rm -rf $wd/* | |
148 rmdir $wd | |
149 # | |
150 # Patch qiime 1.9.1 tools to switch deprecated 'axisbg' | |
151 # matplotlib property to 'facecolor': | |
152 # https://matplotlib.org/api/prev_api_changes/api_changes_2.0.0.html | |
153 echo "" | |
154 for exe in make_2d_plots.py plot_taxa_summary.py ; do | |
155 echo -n "Patching ${exe}..." | |
156 find ${CONDA_DIR} -type f -name "$exe" -exec sed -i 's/axisbg=/facecolor=/g' {} \; | |
157 echo "done" | |
158 done | |
159 # | |
160 # Patch qiime 1.9.1 tools to switch deprecated 'set_axis_bgcolor' | |
161 # method call to 'set_facecolor': | |
162 # https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.set_axis_bgcolor.html | |
163 for exe in make_rarefaction_plots.py ; do | |
164 echo -n "Patching ${exe}..." | |
165 find ${CONDA_DIR} -type f -name "$exe" -exec sed -i 's/set_axis_bgcolor/set_facecolor/g' {} \; | |
166 echo "done" | |
167 done | |
168 } | |
169 # | |
170 # Install all the non-conda dependencies in a single | |
171 # function (invokes separate functions for each package) | |
172 install_non_conda_packages() | |
173 { | |
174 echo "+++++++++++++++++++++++++++++" | |
175 echo "Installing non-conda packages" | |
176 echo "+++++++++++++++++++++++++++++" | |
177 # Temporary working directory | |
178 local wd=$(mktemp -d) | |
179 local cwd=$(pwd) | |
180 local wd=$(mktemp -d) | |
181 cd $wd | |
182 # Amplicon analysis pipeline | |
183 echo -n "Installing Amplicon_analysis_pipeline..." | |
184 if [ -e ${BIN_DIR}/Amplicon_analysis_pipeline.sh ] ; then | |
185 echo "already installed" | |
186 else | |
187 install_amplicon_analysis_pipeline | |
188 echo "ok" | |
189 fi | |
190 # ChimeraSlayer | |
191 echo -n "Installing ChimeraSlayer..." | |
192 if [ -e ${BIN_DIR}/ChimeraSlayer.pl ] ; then | |
193 echo "already installed" | |
194 else | |
195 install_chimeraslayer | |
196 echo "ok" | |
197 fi | |
198 # Uclust | |
199 # This no longer seems to be available for download from | |
200 # drive5.com so don't download | |
201 echo "WARNING uclust not available: skipping installation" | |
202 } | |
203 # | |
204 # Amplicon analyis pipeline | |
205 install_amplicon_analysis_pipeline() | |
206 { | |
207 local wd=$(mktemp -d) | |
208 local cwd=$(pwd) | |
209 local wd=$(mktemp -d) | |
210 cd $wd | |
211 wget -q https://github.com/MTutino/Amplicon_analysis/archive/${PIPELINE_VERSION}.tar.gz | |
212 tar zxf ${PIPELINE_VERSION}.tar.gz | |
213 cd Amplicon_analysis-${PIPELINE_VERSION} | |
214 INSTALL_DIR=${TOP_DIR}/share/amplicon_analysis_pipeline-${PIPELINE_VERSION} | |
215 mkdir -p $INSTALL_DIR | |
216 ln -s $INSTALL_DIR ${TOP_DIR}/share/amplicon_analysis_pipeline | |
217 for f in *.sh *.R ; do | |
218 /bin/cp $f $INSTALL_DIR | |
219 done | |
220 /bin/cp -r uc2otutab $INSTALL_DIR | |
221 mkdir -p ${BIN_DIR} | |
222 cat >${BIN_DIR}/Amplicon_analysis_pipeline.sh <<EOF | |
223 #!/usr/bin/env bash | |
224 # | |
225 # Point to Qiime config | |
226 export QIIME_CONFIG_FP=${TOP_DIR}/qiime/qiime_config | |
227 # Set up the RDP jar file | |
228 export RDP_JAR_PATH=${TOP_DIR}/share/rdp_classifier/rdp_classifier-${RDP_CLASSIFIER_VERSION}.jar | |
229 # Set the Matplotlib backend | |
230 export MPLBACKEND="agg" | |
231 # Put the scripts onto the PATH | |
232 export PATH=${BIN_DIR}:${INSTALL_DIR}:\$PATH | |
233 # Activate the conda environment | |
234 export PATH=${CONDA_BIN}:\$PATH | |
235 source ${CONDA_BIN}/activate ${ENV_NAME} | |
236 # Execute the driver script with the supplied arguments | |
237 $INSTALL_DIR/Amplicon_analysis_pipeline.sh \$@ | |
238 exit \$? | |
239 EOF | |
240 chmod 0755 ${BIN_DIR}/Amplicon_analysis_pipeline.sh | |
241 cat >${BIN_DIR}/install_reference_data.sh <<EOF | |
242 #!/usr/bin/env bash -e | |
243 # | |
244 function usage() { | |
245 echo "Usage: \$(basename \$0) DIR" | |
246 } | |
247 if [ -z "\$1" ] ; then | |
248 usage | |
249 exit 0 | |
250 elif [ "\$1" == "--help" ] || [ "\$1" == "-h" ] ; then | |
251 usage | |
252 echo "" | |
253 echo "Install reference data into DIR" | |
254 exit 0 | |
255 fi | |
256 echo "==========================================" | |
257 echo "Installing Amplicon analysis pipeline data" | |
258 echo "==========================================" | |
259 if [ ! -e "\$1" ] ; then | |
260 echo "Making directory \$1" | |
261 mkdir -p \$1 | |
262 fi | |
263 cd \$1 | |
264 DATA_DIR=\$(pwd) | |
265 echo "Installing reference data under \$DATA_DIR" | |
266 $INSTALL_DIR/References.sh | |
267 echo "" | |
268 echo "Use '-r \$DATA_DIR' when running Amplicon_analysis_pipeline.sh" | |
269 echo "to use the reference data from this directory" | |
270 echo "" | |
271 echo "\$(basename \$0): finished" | |
272 EOF | |
273 chmod 0755 ${BIN_DIR}/install_reference_data.sh | |
274 cd $cwd | |
275 rm -rf $wd/* | |
276 rmdir $wd | |
277 } | |
278 # | |
279 # ChimeraSlayer | |
280 install_chimeraslayer() | |
281 { | |
282 local cwd=$(pwd) | |
283 local wd=$(mktemp -d) | |
284 cd $wd | |
285 wget -q https://sourceforge.net/projects/microbiomeutil/files/__OLD_VERSIONS/microbiomeutil_2010-04-29.tar.gz | |
286 tar zxf microbiomeutil_2010-04-29.tar.gz | |
287 cd microbiomeutil_2010-04-29 | |
288 INSTALL_DIR=${TOP_DIR}/share/microbiome_chimeraslayer-2010-04-29 | |
289 mkdir -p $INSTALL_DIR | |
290 ln -s $INSTALL_DIR ${TOP_DIR}/share/microbiome_chimeraslayer | |
291 /bin/cp -r ChimeraSlayer $INSTALL_DIR | |
292 cat >${BIN_DIR}/ChimeraSlayer.pl <<EOF | |
293 #!/usr/bin/env bash | |
294 export PATH=$INSTALL_DIR:\$PATH | |
295 $INSTALL_DIR/ChimeraSlayer/ChimeraSlayer.pl $@ | |
296 EOF | |
297 chmod 0755 ${INSTALL_DIR}/ChimeraSlayer/ChimeraSlayer.pl | |
298 chmod 0755 ${BIN_DIR}/ChimeraSlayer.pl | |
299 cd $cwd | |
300 rm -rf $wd/* | |
301 rmdir $wd | |
302 } | |
303 # | |
304 # uclust required for QIIME/pyNAST | |
305 # License only allows this version to be used with those two packages | |
306 # See: http://drive5.com/uclust/downloads1_2_22q.html | |
307 install_uclust() | |
308 { | |
309 local cwd=$(pwd) | |
310 local wd=$(mktemp -d) | |
311 cd $wd | |
312 wget -q http://drive5.com/uclust/uclustq1.2.22_i86linux64 | |
313 INSTALL_DIR=${TOP_DIR}/share/uclust-1.2.22 | |
314 mkdir -p $INSTALL_DIR | |
315 ln -s $INSTALL_DIR ${TOP_DIR}/share/uclust | |
316 /bin/mv uclustq1.2.22_i86linux64 ${INSTALL_DIR}/uclust | |
317 chmod 0755 ${INSTALL_DIR}/uclust | |
318 ln -s ${INSTALL_DIR}/uclust ${BIN_DIR} | |
319 cd $cwd | |
320 rm -rf $wd/* | |
321 rmdir $wd | |
322 } | |
323 setup_pipeline_environment() | |
324 { | |
325 echo "+++++++++++++++++++++++++++++++" | |
326 echo "Setting up pipeline environment" | |
327 echo "+++++++++++++++++++++++++++++++" | |
328 # fasta_splitter.pl | |
329 echo -n "Setting up fasta_splitter.pl..." | |
330 if [ -e ${BIN_DIR}/fasta-splitter.pl ] ; then | |
331 echo "already exists" | |
332 elif [ ! -e ${ENV_DIR}/share/fasta-splitter/fasta-splitter.pl ] ; then | |
333 echo "failed" | |
334 fail "fasta-splitter.pl not found" | |
335 else | |
336 ln -s ${ENV_DIR}/share/fasta-splitter/fasta-splitter.pl ${BIN_DIR}/fasta-splitter.pl | |
337 echo "ok" | |
338 fi | |
339 # rdp_classifier.jar | |
340 local rdp_classifier_jar=rdp_classifier-${RDP_CLASSIFIER_VERSION}.jar | |
341 echo -n "Setting up rdp_classifier.jar..." | |
342 if [ -e ${TOP_DIR}/share/rdp_classifier/${rdp_classifier_jar} ] ; then | |
343 echo "already exists" | |
344 elif [ ! -e ${ENV_DIR}/share/rdp_classifier/rdp_classifier.jar ] ; then | |
345 echo "failed" | |
346 fail "rdp_classifier.jar not found" | |
347 else | |
348 mkdir -p ${TOP_DIR}/share/rdp_classifier | |
349 ln -s ${ENV_DIR}/share/rdp_classifier/rdp_classifier.jar ${TOP_DIR}/share/rdp_classifier/${rdp_classifier_jar} | |
350 echo "ok" | |
351 fi | |
352 # qiime_config | |
353 echo -n "Setting up qiime_config..." | |
354 if [ -e ${TOP_DIR}/qiime/qiime_config ] ; then | |
355 echo "already exists" | |
356 else | |
357 mkdir -p ${TOP_DIR}/qiime | |
358 cat >${TOP_DIR}/qiime/qiime_config <<EOF-qiime-config | |
359 qiime_scripts_dir ${ENV_DIR}/bin | |
360 EOF-qiime-config | |
361 echo "ok" | |
362 fi | |
363 } | |
364 # | |
365 # Top level script does the installation | |
366 echo "=======================================" | |
367 echo "Amplicon_analysis_pipeline installation" | |
368 echo "=======================================" | |
369 echo "Installing into ${TOP_DIR}" | |
370 if [ -e ${TOP_DIR} ] ; then | |
371 fail "Directory already exists" | |
372 fi | |
373 mkdir -p ${TOP_DIR} | |
374 install_conda | |
375 install_conda_packages | |
376 install_non_conda_packages | |
377 setup_pipeline_environment | |
378 echo "====================================" | |
379 echo "Amplicon_analysis_pipeline installed" | |
380 echo "====================================" | |
381 echo "" | |
382 echo "Install reference data using:" | |
383 echo "" | |
384 echo "\$ ${BIN_DIR}/install_reference_data.sh DIR" | |
385 echo "" | |
386 echo "Run pipeline scripts using:" | |
387 echo "" | |
388 echo "\$ ${BIN_DIR}/Amplicon_analysis_pipeline.sh ..." | |
389 echo "" | |
390 echo "(or add ${BIN_DIR} to your PATH)" | |
391 echo "" | |
392 echo "$(basename $0): finished" | |
393 ## | |
394 # |