From 33ebfab205420318163460e9ed15d16b086eee64 Mon Sep 17 00:00:00 2001 From: Chris Gorgolewski Date: Fri, 19 Aug 2016 16:56:38 -0700 Subject: [PATCH] validation and strace based provenance --- Dockerfile | 43 ++++++++++++++++++++-------- run.py | 2 +- validation_and_provenance_wrapper.sh | 13 +++++++++ 3 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 validation_and_provenance_wrapper.sh diff --git a/Dockerfile b/Dockerfile index a8c9fd6..5141409 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,37 @@ FROM ubuntu:16.04 -# Enable NeuroDebian repository (if needed) +# Common for all BIDS Apps + +## Install the validator +RUN apt-get update && apt-get install -y curl +RUN curl -sL https://deb.nodesource.com/setup_4.x | bash - +RUN apt-get install -y nodejs +RUN npm install -g bids-validator + +## Install strace +RUN apt-get install -y build-essential wget +RUN wget "http://downloads.sourceforge.net/project/strace/strace/4.13/strace-4.13.tar.xz?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Fstrace%2F&ts=1471646564&use_mirror=pilotfiber" -O strace.tar.xz && \ + tar xvf strace.tar.xz && \ + cd strace-4.13 && \ + ./configure &&\ + make &&\ + make install &&\ + rm -rf \strace-4.13 + +## Create copy the validation_and_provenance_wrapper wrapper +RUN mkdir -p /code +COPY validation_and_provenance_wrapper.sh /code/validation_and_provenance_wrapper.sh + +# Specific to each BIDS App +## Install FSL RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive \ NEURODEBIAN_ENABLE=yes NEURODEBIAN_MIRROR=origin NEURODEBIAN_FLAVOR=full NEURODEBIAN_UPDATE=0 \ apt-get install -y neurodebian - -# Run apt-get calls RUN apt-get update \ && apt-get install -y fsl-5.0-core -# Configure environment +## Configure FSL ENV FSLDIR=/usr/share/fsl/5.0 ENV FSLOUTPUTTYPE=NIFTI_GZ ENV PATH=/usr/lib/fsl/5.0:$PATH @@ -21,15 +42,13 @@ ENV FSLTCLSH=/usr/bin/tclsh ENV FSLWISH=/usr/bin/wish ENV FSLOUTPUTTYPE=NIFTI_GZ -RUN apt-get install -y python3 -RUN apt-get install -y python3-pip +## Isntall nibabel +RUN apt-get install -y python3 python3-pip RUN pip3 install nibabel -RUN mkdir -p /code -RUN mkdir /oasis -RUN mkdir /projects -RUN mkdir /scratch -RUN mkdir /local-scratch +## Copy your entrypoint script COPY run.py /code/run.py +RUN chmod +x /code/run.py -ENTRYPOINT ["/code/run.py"] +## Define +ENTRYPOINT ["/code/validation_and_provenance_wrapper.sh", "/code/run.py"] diff --git a/run.py b/run.py index d148663..1b50f75 100755 --- a/run.py +++ b/run.py @@ -43,7 +43,7 @@ for T1_file in glob(os.path.join(args.bids_dir, "sub-%s"%subject_label, "anat", "*_T1w.nii*")) + glob(os.path.join(args.bids_dir,"sub-%s"%subject_label,"ses-*","anat", "*_T1w.nii*")): out_file = os.path.split(T1_file)[-1].replace("_T1w.", "_brain.") - cmd = "bet %s %s"%(T1_file, os.path.join(args.output_dir, out_file)) + cmd = "bet %s %s -f 0.7"%(T1_file, os.path.join(args.output_dir, out_file)) print(cmd) subprocess.run(cmd, shell=True, check=True) diff --git a/validation_and_provenance_wrapper.sh b/validation_and_provenance_wrapper.sh new file mode 100644 index 0000000..88ac70a --- /dev/null +++ b/validation_and_provenance_wrapper.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -e +if [ "$#" -ge 4 ]; then + bids-validator $2 + strace -r -s4096 -e trace=execve -fto $3/provenance.txt $1 ${@:2} + #reprozip trace -d $3/provenance $1 ${@:2} + #reprounzip graph -d $3/provenance --json $3/provenance/graph.json + #reprounzip graph -d $3/provenance --dot $3/provenance/graph.dot + #reprounzip graph -d $3/provenance --packages drop --otherfiles io --processes run --dot $3/provenance/graph_simplified.dot + #dot -Tpng $3/provenance/graph_simplified.dot -o $3/provenance/graph_simplified.png + else + $1 ${@:2} +fi