diff --git a/fsladd b/fsladd index b36fda9efb9af985403f7bb25c9022e92f3e944d..053bd5d4b031eb51438d75833ff1b975b09923fd 100755 --- a/fsladd +++ b/fsladd @@ -1,31 +1,37 @@ -#!/bin/sh -# Copyright (C) 2012 University of Oxford -# -# SHCOPYRIGHT +#!/usr/bin/env python +# fsladd - add ( or average! ) a list of images +# Stephen Smith, Saad Jbabdi and Matthew Webster FMRIB Image Analysis Group +# Copyright (C) 2015 University of Oxford +# SHBASECOPYRIGHT +import sys +import os +import subprocess +import argparse -if [ "$1" == "" ];then - echo "" - echo "Usage: fsladd <output> [-m] <listOfVolumes> " - echo "" - echo "-m : calculates the mean instead of sum" - echo "" - exit 1 -fi - -o=$1 -shift; - -m="" -if [ "$1" == "-m" ];then - shift; - m=" -div $#" -fi - -cmd="${FSLDIR}/bin/fslmaths $1" -shift; -for i in $@;do - cmd=" $cmd -add $i" -done -cmd=" $cmd $m $o" -$cmd +def main(output,files,scale,mean): + if scale: + newMean=1000 + scales = [ newMean/float(subprocess.check_output([os.path.join(os.environ["FSLDIR"],"bin","fslstats"),inputFile,"-M"])) for inputFile in files ] + files = [ [files[i],"-mul",str(scales[i]/scales[i+1])] if i < len(scales)-1 else [files[i],"-mul",str(scales[i])] for i in range(0,len(scales)) ] + else: + files = [ [fileName] for fileName in files ] + command = [os.path.join(os.environ["FSLDIR"],"bin","fslmaths")]+files[0] + for index in range(1,len(files)): + command+=["-add"]+files[index] + if mean: + command+=["-div",str(len(files))] + command.append(output) + print command + status=subprocess.call(command) + +if __name__ == "__main__": + parser = argparse.ArgumentParser(add_help=False,usage='%(prog)s <output> [-m] [-s] <listOfVolumes>') + parser.add_argument('-m',dest='mean',help='calculate mean instead of sum',action='store_true',default = False) + parser.add_argument('-s',dest='scale',help='scale each input image mean to 1000 before processing',action='store_true',default = False) + parser.add_argument('files',nargs='+',help=argparse.SUPPRESS) + if len(sys.argv) < 3: + parser.print_help() + sys.exit(1) + args=parser.parse_args(sys.argv[2:]) + main(sys.argv[1],args.files,args.scale,args.mean)