From: David Sarrut Date: Thu, 18 Jul 2013 08:52:25 +0000 (+0200) Subject: Merge branch 'master' of git.creatis.insa-lyon.fr:clitk X-Git-Tag: v1.4.0~169 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=3f3fe9260222ca3ec2a9a22b9f81009506792e38;hp=4050b3fcdf60172923de9e8dfdb058c6ac3daf31;p=clitk.git Merge branch 'master' of git.creatis.insa-lyon.fr:clitk --- diff --git a/cluster_tools/gate_job_cluster.job b/cluster_tools/gate_job_cluster.job index 6b893b1..1242dfd 100644 --- a/cluster_tools/gate_job_cluster.job +++ b/cluster_tools/gate_job_cluster.job @@ -65,7 +65,7 @@ test -d "${MACRODIR}" && test -d "${MACRODIR}/mac" || error "invalid macro" echo "Copying inputs" LOCALMACRODIR=$(mktemp -d) -trap "rm -rf ${LOCALMACRODIR} ; exit 1" 1 2 3 15 +trap "mv output ${OUTPUTDIR}/output.${PBS_JOBID%%.*} ; rm -r ${LOCALMACRODIR} ; exit 1" 1 2 3 15 cd ${LOCALMACRODIR} cp -r -L "${MACRODIR}"/{data,mac} . mkdir output diff --git a/cluster_tools/gate_power_merge.sh b/cluster_tools/gate_power_merge.sh index 55fc1f0..fc0e6aa 100755 --- a/cluster_tools/gate_power_merge.sh +++ b/cluster_tools/gate_power_merge.sh @@ -165,6 +165,37 @@ end_bar echo " ${indent}merged ${count} files" } +doseMerger="mergeDosePerEnegryFile.sh" +test -x "./mergeDosePerEnergyFile.sh" && doseMerger="./mergeDosePerEnergyFile.sh" + +function merge_dose { +local merged="$1" +shift +echo " ${indent}entering dose merger" +echo " ${indent}merger is ${doseMerger}" +echo " ${indent}creating ${merged}" +local count=0 +start_bar $# +while test $# -gt 0 +do + local partial="$1" + shift + let count++ + + if test ! -f "${merged}" + then + update_bar ${count} "copying first partial result ${partial}" + cp "${partial}" "${merged}" + continue + fi + + update_bar ${count} "adding ${partial}" + ${doseMerger} -i "${merged}" -j "${partial}" -o "${merged}" 2> /dev/null > /dev/null || warning "error while calling ${doseMerger}" +done +end_bar +echo " ${indent}merged ${count} files" +} + txtImageMerger="clitkMergeAsciiDoseActor" test -f "./clitkMergeAsciiDoseActor" && txtImageMerger="./clitkMergeAsciiDoseActor" @@ -336,6 +367,16 @@ function merge_dispatcher { return fi + if test "${firstpartialoutputextension}" == "txt" && grep -qs 'energydose' "${firstpartialoutputfile}" + then + echo "${indent}this is a dose file" + local mergedfile="${outputdir}/$(basename "${firstpartialoutputfile}")" + merge_dose "${mergedfile}" ${partialoutputfiles} || error "error while merging" + return + fi + + + if test "${firstpartialoutputextension}" == "txt" && grep -qs 'Resol' "${firstpartialoutputfile}" then local resol="$(sed -nr '/Resol/s/^.*=\s+\((.+)\)\s*$/\1/p' "${firstpartialoutputfile}")" diff --git a/cluster_tools/mergeDosePerEnergyFile.sh b/cluster_tools/mergeDosePerEnergyFile.sh new file mode 100755 index 0000000..b63c5ae --- /dev/null +++ b/cluster_tools/mergeDosePerEnergyFile.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -u + +function usage { + echo "$0 -i -j -o " + exit 1 +} + +if [ $# != 6 ] +then + usage +fi + +IN1=$2 +IN2=$4 +RESULT=$6 + +test -f ${IN1} && test -f ${IN2} || usage + +TMP="$(mktemp)" +echo "merging dose file" +for PARAM in `awk '$1 == "#" {print $3}' ${IN1}` +do + echo "merging ${PARAM}" + V1=`awk -v P=${PARAM} '$3 == P {print $4}' ${IN1} ` + V2=`awk -v P=${PARAM} '$3 == P {print $4}' ${IN2} ` + V1=`echo ${V1} | sed -e 's/[eE]+*/\*10\^/'` + V2=`echo ${V2} | sed -e 's/[eE]+*/\*10\^/'` + R=`echo "scale=30; ${V1} + ${V2}" | bc -l` + test -z "${R}" && continue + echo "# energydose ${PARAM} ${R}" >> ${TMP} +done +mv -f ${TMP} ${RESULT} diff --git a/common/clitkTransformUtilities.cxx b/common/clitkTransformUtilities.cxx index ef210d7..832d598 100644 --- a/common/clitkTransformUtilities.cxx +++ b/common/clitkTransformUtilities.cxx @@ -67,4 +67,32 @@ itk::Matrix GetRotationMatrix<3>(itk::Array rotationParame return GetRotationMatrix3D(rotationParameters); } +//-------------------------------------------------------------------- +itk::Matrix ReadMatrix3D(std::string fileName) +{ + // read input matrix + std::ifstream is; + openFileForReading(is, fileName); + std::vector nb; + double x; + skipComment(is); + is >> x; + while (is && !is.eof()) { + nb.push_back(x); + skipComment(is); + is >> x; + } + + if(nb.size() != 16) + itkGenericExceptionMacro(<< "Could not read 4x4 matrix in " << fileName); + + //copy it to the matrix + itk::Matrix matrix; + unsigned int index=0; + for (unsigned int i=0;i<4;i++) + for (unsigned int j=0;j<4;j++) + matrix[i][j]=nb[index++]; + return matrix; +} + } diff --git a/common/clitkTransformUtilities.h b/common/clitkTransformUtilities.h index cbc30b9..d3644b1 100644 --- a/common/clitkTransformUtilities.h +++ b/common/clitkTransformUtilities.h @@ -255,29 +255,7 @@ namespace clitk return matrix; } - inline itk::Matrix ReadMatrix3D(std::string fileName) - { - // read input matrix - std::ifstream is; - openFileForReading(is, fileName); - std::vector nb; - double x; - skipComment(is); - is >> x; - while (!is.eof()) { - nb.push_back(x); - skipComment(is); - is >> x; - } - - //copy it to the matrix - itk::Matrix matrix; - unsigned int index=0; - for (unsigned int i=0;i<4;i++) - for (unsigned int j=0;j<4;j++) - matrix[i][j]=nb[index++]; - return matrix; - } + itk::Matrix ReadMatrix3D(std::string fileName); inline vtkMatrix4x4* ReadVTKMatrix3D(std::string fileName) { // read input matrix diff --git a/common/vvImageReader.cxx b/common/vvImageReader.cxx index f4f1a90..ddc4ad3 100644 --- a/common/vvImageReader.cxx +++ b/common/vvImageReader.cxx @@ -161,7 +161,15 @@ void vvImageReader::ReadMatImageTransform() if(f.is_open()) { f.close(); - itk::Matrix itkMat = clitk::ReadMatrix3D(filename); + itk::Matrix itkMat; + itkMat.SetIdentity(); + try { + itkMat = clitk::ReadMatrix3D(filename); + } + catch (itk::ExceptionObject & err) { + itkWarningMacro(<< "Found " << filename + << " but this is not a 4x4 matrix so it is ignored."); + } vtkSmartPointer matrix = vtkSmartPointer::New(); matrix->Identity();