]> Creatis software - clitk.git/commitdiff
Merge branch 'master' of /home/dsarrut/clitk3.server
authorRomulo Pinho <pinho@lyon.fnclcc.fr>
Mon, 3 Oct 2011 15:26:54 +0000 (17:26 +0200)
committerRomulo Pinho <pinho@lyon.fnclcc.fr>
Mon, 3 Oct 2011 15:26:54 +0000 (17:26 +0200)
common/clitkCommon.cxx
common/clitkDD.h
scripts/create_mhd_4D.sh
scripts/dcm_sort_by_field.sh
tests/doc/vvDoc.tex [new file with mode: 0644]
tests/tools/CMakeLists.txt
tests/tools/toolTestRunner.cxx
vv/qt_ui/vvOverlayPanel.ui

index 785b0fd2c021ad087dd500a68ba0d03a60481b65..10f608e6ce8b7ba7c92d6085f4d1b1588a047e3d 100644 (file)
@@ -243,7 +243,7 @@ double clitk::ComputeEuclideanDistanceFromPointToPlane(const itk::ContinuousInde
 // Open a file for reading
 void clitk::openFileForReading(std::ifstream & is, const std::string & filename)
 {
-  is.open(filename.c_str(), std::ios::in);
+  is.open(filename.c_str(), std::ios::in | std::ios::binary);
   if ( is.fail() ) {
     clitkExceptionMacro("Could not open file for reading: " 
                         << filename << ". Error is : <" 
index f43db9d005d9ef9d98f4b6ca4dc66bb5713b8b66..c21bb815acbc080e97f3adfd9b844c934209292e 100644 (file)
@@ -29,6 +29,7 @@
     std::ostringstream ossDD; \
     ossDD << #a " = [ " << a << " ]" << std::endl; \
     OutputDebugString(ossDD.str().c_str()); \
+    std::cout << ossDD.str() << std::endl; \
   }
 #else
 # define DD(a) std::cout << #a " = [ " << a << " ]" << std::endl;std::cout.flush();
index bc51da445d06389ab8a1347495d680b566d4c892..b363f7e3034c3143755923a3904b0fbbf8a7596e 100755 (executable)
@@ -28,87 +28,88 @@ then
   exit 1
 fi
 
-nb_phase_file=`find $1 -maxdepth 1 -iname "*[0-9]*.mhd" -o -iname "*[0-9]*\]*.mhd" | wc -l`
+nb_phase_file=`find $1 -maxdepth 1 -iname "*[0-9]*.mhd" | wc -l`
 if [ $nb_phase_file = 0 ]
 then
-  echo "Error: no phase found"
+  echo "No phase found in $1"
   exit 1
 fi
 
-########## CT #########
 
-list_pattern=""
+list_prefix=""
 list_phase_file=`find $1 -maxdepth 1 -iname "*[0-9]*.mhd"`
 for phase_file in $list_phase_file
 do
   phase_file_name=`basename $phase_file`
-  if [[ ! -z `echo "$phase_file_name" | grep ","` ]]
+  if [[ ! -z `echo "$phase_file_name" | grep "__[0-9]"` ]]
   then
-    prefix=`echo $phase_file_name | sed "s/,_.*/,_/"`
+    prefix=`echo $phase_file_name | sed "s/__[0-9].*/__/"`
   else
-    prefix="NONE"
+    if [[ ! -z `echo "$phase_file_name" | grep "[0-9]-.*\]"` ]]
+    then
+      if [[ ! -z `echo "$phase_file_name" | grep "[0-9][0-9]-.*\]"` ]]
+      then
+       prefix=`echo $phase_file_name | sed "s/[0-9][0-9]-.*//"`
+      else
+       prefix=`echo $phase_file_name | sed "s/[0-9]-.*//"`
+      fi
+    else
+      prefix="NONE"
+    fi
   fi
-  if [[ -z `echo "$list_pattern" | grep "$prefix"` ]]
-  then
-    list_pattern="$list_pattern $prefix"
-  fi
-done
-
 
-for pattern in $list_pattern
-do
-
-  if [ "$pattern" = "NONE" ]
+  if [[ -z `echo "$list_prefix" | grep "$prefix"` ]]
   then
-    pattern=""
+    list_prefix="$list_prefix $prefix"
   fi
-
-  nbph=`find $1 -maxdepth 1 -iname "${pattern}*[0-9]*.mhd" | wc -l`
-  orig=`find $1 -maxdepth 1 -iname "${pattern}*[0-9]*.mhd" | sort | head -n 1`
-  listph=`find $1 -maxdepth 1 -iname "${pattern}*[0-9]*.raw" | sort`
-
-  file_name_4D="${pattern}_4D.mhd"
-  echo $file_name_4D
-
-  write_mhd_4D $1
-
 done
 
 
-############ PET ###########
-
-list_pattern=""
-list_phase_file=`find $1 -maxdepth 1 -iname "*[0-9]*\]*.mhd"`
-for phase_file in $list_phase_file
+for prefix in $list_prefix
 do
-  phase_file_name=`basename $phase_file`
-  if [[ ! -z `echo "$phase_file_name" | grep "[0-9]-.*\]"` ]]
-  then
-    prefix=`echo $phase_file_name | sed "s/.*[0-9]-/-/;s/\]_.*//"`
-  else
-    prefix="NONE"
-  fi
-  if [[ -z `echo "$list_pattern" | grep -- "$prefix"` ]]
+  if [ "$prefix" = "NONE" ]
   then
-    list_pattern="$list_pattern $prefix"
+    prefix=""
   fi
-done
 
-  
-for pattern in $list_pattern
-do
-
-  if [ "$pattern" = "NONE" ]
-  then
-    pattern=""
-  fi
+  list_suffix=""
+  list_phase_file_prefix=`find $1 -maxdepth 1 -iname "${prefix}[0-9]*.mhd"`
+  for phase_file_prefix in $list_phase_file_prefix
+  do
+    phase_file_prefix_name=`basename $phase_file_prefix`
+    if [[ ! -z `echo "$phase_file_prefix_name" | grep "__[0-9]"` ]]
+    then
+      suffix="NONE"
+    else
+      if [[ ! -z `echo "$phase_file_prefix_name" | grep "[0-9]-.*\]"` ]]
+      then
+       suffix=`echo $phase_file_prefix_name | sed "s/.*[0-9]-//;s/_\.mhd//;s/\.mhd//"`
+      else
+       suffix="NONE"
+      fi
+    fi
+
+    if [[ -z `echo "$list_suffix" | grep "$suffix"` ]]
+    then
+      list_suffix="$list_suffix $suffix"
+    fi
+  done
 
-  nbph=`find $1 -maxdepth 1 -iname "*[0-9]${pattern}\]*.mhd" | wc -l`
-  orig=`find $1 -maxdepth 1 -iname "*[0-9]${pattern}\]*.mhd" | sort | head -n 1`
-  listph=`find $1 -maxdepth 1 -iname "*[0-9]${pattern}\]*.raw" | sort`
-  
-  file_name_4D=`basename "$orig" | sed "s/[0-9]${pattern}\]/${pattern}\]/;s/_.mhd/_4D.mhd/"`
+  for suffix in $list_suffix
+  do
+    if [ "$suffix" = "NONE" ]
+    then
+      suffix=""
+    fi
+    nbph=`find $1 -maxdepth 1 -iname "*${prefix}*[0-9]*${suffix}*.mhd" | wc -l`
+    orig=`find $1 -maxdepth 1 -iname "*${prefix}*[0-9]*${suffix}*.mhd" | sort | head -n 1`
+    listph=`find $1 -maxdepth 1 -iname "*${prefix}*[0-9]*${suffix}*.raw" | sort`
+
+    file_name_4D="${prefix}4D${suffix}.mhd"
+    
+    write_mhd_4D $1
 
-  write_mhd_4D $1
+  done
 
 done
+
index 44dba5980643a1f06818dc5be68f7ad175c88fda..81d1b6b8d5f1214b737b8b2d5a0d7b1335e6e2aa 100755 (executable)
@@ -4,12 +4,14 @@ then
     echo Usage: dcm_sort_by_field.sh \"field name\"
     exit
 fi
-[ -d sorted ] && rm -r sorted
-find . -type f -iname "*.dcm" > dicom_files
+path_dir=`pwd`
+dir_name=`basename "$path_dir"`
+[ -d "../${dir_name}_sorted" ] && rm -r "../${dir_name}_sorted"
+mkdir "../${dir_name}_sorted"
+find . -type f -iname "*.dcm" > ../${dir_name}_sorted/dicom_files
 finished=0
-total=$(wc -l dicom_files)
-mkdir sorted
-cat dicom_files | while :
+total=$(wc -l ../${dir_name}_sorted/dicom_files)
+cat ../${dir_name}_sorted/dicom_files | while :
 do
     jobrunning=0
     conc_jobs=50
@@ -18,14 +20,14 @@ do
         read i || { wait; break 2; }
         {
             name="$(clitkDicomInfo "$i" | grep "$1" | head -n 1 | sed "s/.*\[//;s/.$//;s/ /_/g")"
-           [ -z "$name" ] && echo "Warning: key not found in file $i" 1>&2 && mkdir -p unsorted && basename=$(basename "$i") && cp -l "$i" "unsorted/$basename" && exit 1 #copy to unsorted directory if dicom key not found
+           [ -z "$name" ] && echo "Warning: key not found in file $i" 1>&2 && mkdir -p "../${dir_name}_unsorted" && basename=$(basename "$i") && cp -l "$i" "../${dir_name}_unsorted/$basename" && exit 1 #copy to unsorted directory if dicom key not found
             #[ -z "$name" ] && echo "Warning: key not found in file $i" 1>&2 && exit 1 #don't do anything if dicom key not found
             name=`echo "$name" | sed 's/\//_/g'`
            name=`echo "$name" | sed 's/\\\/_/g'`
            name=`echo "$name" | sed 's/\*/_/g'`
-           [ -d "sorted/$name" ] || mkdir "sorted/$name" 2>>/dev/null
+           [ -d "../${dir_name}_sorted/$name" ] || mkdir "../${dir_name}_sorted/$name" 2>>/dev/null
             basename=$(basename "$i")
-            cp -l "$i" "sorted/$name/$basename"
+            cp -l "$i" "../${dir_name}_sorted/$name/$basename"
         }&
         jobrunning=$(( $jobrunning + 1 ))
     done
@@ -33,4 +35,4 @@ do
     echo -e -n "( $finished / $total )\r"
     wait
 done
-rm dicom_files
+rm ../${dir_name}_sorted/dicom_files
diff --git a/tests/doc/vvDoc.tex b/tests/doc/vvDoc.tex
new file mode 100644 (file)
index 0000000..1ff2059
--- /dev/null
@@ -0,0 +1,325 @@
+\documentclass[12pt]{report}
+
+\usepackage[a4paper, top=1.5cm, bottom=1.5cm, left=1.5cm, right=1.5cm]{geometry}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[francais]{babel}
+\usepackage{graphicx}
+\usepackage{amsmath}
+\usepackage{amsthm}
+\usepackage{amsfonts}
+\usepackage{amssymb}
+\usepackage{mathrsfs}
+\usepackage{color}
+\usepackage{colortbl}
+\usepackage{lastpage}
+\usepackage{fancyhdr}
+\usepackage{hyperref}  % html link
+\usepackage{float} %placement images
+\usepackage{caption} %légendes centrées
+\usepackage{textcomp} %caractères spéciaux
+\usepackage{version} %ajoute l'environnement comment pour les commentaires longs
+
+%configure caption
+\captionsetup{margin=10pt,font=small,labelfont=bf,justification=centerlast}
+
+%définition des entêtes et pieds de page
+\fancyhf{}
+\setlength{\headheight}{15pt}
+\renewcommand{\headrulewidth}{0pt} %épaisseur ligne de séparation
+\renewcommand{\footrulewidth}{0pt}
+\pagestyle{fancyplain}
+\renewcommand{\chaptermark}[1]{\markboth{#1}{}} 
+\renewcommand{\sectionmark}[1]{\markright{#1}{}}
+\lhead{}
+\chead{}
+\rhead{}
+\lfoot{}
+\cfoot{\thepage\ / \pageref{LastPage}}
+\rfoot{}
+\newenvironment{note}{\textbf{Note:}}{}
+
+\begin{document}
+\title{Tester vv}
+\maketitle
+\thispagestyle{empty} %pas d'entêtes pour la première page
+\clearpage
+
+\renewcommand{\contentsname}{Sommaire}
+\tableofcontents
+\clearpage
+
+ \chapter{Intégration continue}
+\section{Les options de make}
+Il y a principalement quatre \htmladdnormallink{options}{http://www.vtk.org/Wiki/CTest:Nightly,_Experimental,_Continuous} de compilation : 
+Nightly, Continuous, Experimental et Test.
+
+Quiconque peut lancer une compilation avec l'une de ces options.
+\begin{itemize}
+\item make Nightly fait un raz des binaires mais garde la configuration, update les sources, build, lance les tests puis submit au dashboard.
+\item make Experimental fait un build, lance les tests puis submit au dashboard.
+\item make Continous fait un build, lance les tests puis submit au dashboard.
+\end{itemize}
+
+
+\section{Installation des compilations automatiques}
+\begin{enumerate}
+       \item Récupérer les scripts \begin{verbatim}git clone http://russule/gitSources/vvDashboard\end{verbatim}
+       \item Configurer les scripts
+       \item Créer la tache sous linux et éventuellement sous windows
+\end{enumerate}
+
+\subsection{Configuration des scripts}
+Voici un bref résumé du rôle de chacun des scripts
+\begin{itemize} 
+ \item builderNightly.bat : Lance les builds pour windows
+ \item commonConfig.cmake : Arborescence des dossiers, URL des données de test, path vers ITK et VTK
+ \item continuousBuild.cmake : Amorce un continuous
+ \item dartConfig.cmake : Configuration du serveur distant
+ \item fetch\_data\_test.bat : git pull ou clone si le repo n'existe pas
+ \item fetch\_data\_test.sh : idem pour linux
+ \item nightlyBuild.cmake : Parse les arguments pour lancer le build correspondant.
+L'appèle du script est de la forme
+\begin{verbatim}
+       ctest -S nightlyBuild.cmake,Itkv3.20.0 (ou ,ItkNightly)
+# variante : ctest -S nightlyBuild.cmake,Itkv3.20.0,NoTools
+# où il faut définir que faire lorsque l'argument NoTools est trouvé (ici, CLITK_BUILD_TOOLS=OFF)
+\end{verbatim}
+ \item startNightlyBuilds.sh : Lance toutes les nightly et lance la vm
+ \item vmLaunch.sh : Lance toutes les images virtuelles.
+ \item itkNightlyBuild.cmake : Met à jour le dossier itk from scratch. Ce script est appelé par nightlyBuild.cmake,ItkNightly
+\end{itemize}
+
+Les principales informations à modifier sont dans le fichier commonConfig.cmake.\\
+Description de commonConfig.cmake
+\begin{verbatim}
+set(itkBin "${itkVersion}Bin/")
+set(dashboard_binary_name "vv${itkVersion}${buildOptions}Bin/")
+set(dashboard_source_name "vvSource")
+#adresse où télécharger(cloner) les données de test.
+set(data_test_path "${CTEST_DASHBOARD_ROOT}${dashboard_binary_name}data/") 
+
+#http://192.168.156.8/gitSources/vvDataTest est l'adresse où récupérer les données de test
+EXEC_PROGRAM(${CTEST_SCRIPT_DIRECTORY}/fetch_data_test.${ext} ARGS ${data_test_path} http://192.168.156.8/gitSources/vvDataTest)
+\end{verbatim}
+Exemple d'architecture des dossiers : 
+\begin{verbatim}
+./vvItkNightlyBin
+./vvItkNightlyNoToolsBin
+./vvItkv3.20.0Bin
+./vvItkv3.20.0NoToolsBin
+./vvItkv3.20.0NoVvBin
+./vvSource
+\end{verbatim}
+
+\subsection{Création des taches}
+Concernant les compilations automatiques, il est possible de créer une tache appelant le script startNightlyBuilds. \\
+Ce dernier exécute pour chacun des builds configurés un raz, une mise à jour, une configuration, une compilation, puis l'exécution des tests et la
+soumission de leurs résultats.\\
+Il lance également la machine virtuelle, dans laquelle se trouve des builds sous windows.
+\begin{itemize}
+\item Pour Suse : 
+\begin{verbatim}
+  >crontab -l
+0  22   *   *   * /home/mpech/workspace/vv/vvDashboard/startNightlyBuilds.sh > /home/mpech/workspace/nightlyLog.log
+0  5   *   *   * ctest -S /home/mpech/workspace/vv/vvDashboard/continuousBuild.cmake,ItkNightly -V > /home/mpech/workspace/vvItkNightly/continuousMaster.log 2>&1
+\end{verbatim}
+A 22h, on commence les builds linux puis on lance la VM. Chaque OS a la responsabilité de s'éteindre.\\
+\begin{note}
+A 5h tous les jours un continuous est lancé. Il n'est pas nécessaire d'appeler plusieurs fois le continous : 
+une fois appelé, il dure pendant ''dashboard\_loop'' et tente une mise à jour du repo et soumet un build
+au dashboard si le repo a été modifié, tous les ''CTEST\_DELAY\_TIME''. Ces variables
+se modifient dans continuousBuild.cmake.
+En regardant le script continuousBuild.cmake, on constate qu'il est effectif pendant une durée de \${dashboard\_loop}68400/3600=19h.
+\end{note}
+\item Sous windows :
+Il faut également créer une tâche appelant builderNightly.bat. Ce dernier lance également les builds et une fois ceux-ci finis,
+éteint l'OS.
+Voici un \htmladdnormallink{lien}{http://www.vistax64.com/tutorials/132903-task-scheduler-create-task.html}.
+Démarrer>exécuter>taskschd.msc ou bien clique-droit gérer sur ''Ordinateur'' dans l'explorateur de fichiers.
+
+Sur le pannel de gauche, librairie>windows, créer un dossier par exemple vv, et à l'intérieur créer une nouvelle tache.
+Seuls les déclencheurs et l'action (builderNightly.bat) nous intéresse.
+\end{itemize}
+
+\section{Configuration du dashboard}
+Le dashboard de VV est accessible via ce \htmladdnormallink{lien}{http://my.cdash.org/index.php?project=VV}.\\
+
+Le fuseau horaire d'affichage du dashboard est EDT.\\
+Nous sommes CET. Il n'est pas possible de modifier l'heure affichée sur le dashboard pour qu'elle
+corresponde à l'heure CET.
+En revanche, il est possible de spécifier l'heure de début des nightly : sachant qu'il y a un décalage de 6h
+(10h en France équivaut à 4h sur le dashboard). Par exemple si nous soumettons un build à 1h CET le mardi, cela équivaut à soumettre ce build à 19h EDT le lundi.\\
+Ce faisant, en indiquant que les nightly commencent à 19h EDT sur le dashboard, notre build sera bien affiché mardi sur le dashboard.
+
+
+ \chapter{Création d'un sous-module pour les données de test}
+\section{Git deuxième repo}
+Actuellement, un deuxième repo est utilisé pour les données de test.
+\begin{verbatim}
+http://russule/gitSources/vvDataTest
+# ou bien 
+/home/mpech/workspace/git/vvDataTest
+\end{verbatim}
+
+Le serveur n'est pas configuré pour pouvoir pusher par http. Donc soit passer par le repo /home/..., soit
+\begin{verbatim}
+git push ssh://mpech@russule/home/mpech/workspace/gitSources/vvDataTest
+\end{verbatim}
+
+\subsection{Mise en place du Git par http}
+\begin{verbatim}
+sudo zypper install apache2
+cd /srv/www/htdocs
+sudo ln -s /home/mpech/workspace/git gitSources
+\end{verbatim}
+Il est possible que le dossier ne soit pas accessible, s'assurer que FollowSymlinks est bien précisé. Chez moi dans
+le fichier ''/etc/apache2/default-server.conf'', rajouter les options si non présentes.\\
+Indexes pour afficher la liste des dossiers/fichiers présents dans un répertoire \\
+FollowSymLinks pour permettre les liens symboliques depuis le répertoire web vers un répertoire quelconque.
+\begin{verbatim}
+<Directory "/srv/www/htdocs">
+        Options Indexes FollowSymLinks
+\end{verbatim}
+
+Enfin, après chaque push vers le remote repo, il faut updater le serveur manuellement.
+\begin{verbatim}
+cd /home/mpech/workspace/git;
+git update-server-info
+\end{verbatim}
+A la place, on peut activer le hook post-update de git (en renommant le post-update.sample sans son suffixe): 
+\begin{verbatim}
+cd /home/mpech/workspace/git/vvDatatest/hooks
+mv post-update.sample post-update
+\end{verbatim}
+De fait, git sera automatiquement mis à jour.
+\\
+\begin{note}
+ Ici git ne fait pas référence au données de test, le répertoire git contient
+\begin{itemize}
+\item vvDataTest qui est le repo qui nous intéresse
+\item vvDashboard qui contient les scripts pour les nightly, également versionné
+\end{itemize}
+\end{note}
+
+\section{Git submodule}
+Procédure pour monter le dossier de tests.
+Création de notre repo data (qui contiendra les données de test): 
+\begin{verbatim}
+git init --bare data
+git clone tests dataCloned
+(
+ cd dataCloned; echo "a">a; git add a; git commit -m "add a";
+ git push origin master
+)
+\end{verbatim}
+Le fichier ''a'' est accessible aux autres clones de data.
+
+On ajoute notre repo dataCloned en tant que submodule du super repo (par exemple vv).
+\begin{verbatim}
+cd vv;
+git submodule add ../dataCloned tests/data
+git commit -m "added the submodule data"
+git push
+\end{verbatim}
+
+Côté client : 
+\begin{verbatim}
+cd vv;
+git pull;
+git submodule init; 
+git submodule update; //now tests/data contain a file named "a"
+cd tests/data; echo "b">b; git add b && git commit -m "adding b";
+git push
+\end{verbatim}
+
+Comme le sous-module a été modifié, on oublie pas de mettre à jour super : 
+\begin{verbatim}
+git submodule add tests/data #remarque : PAS de trailing slash à la fin de data
+git commit -m "mise à jour du sous-repos"
+git push
+\end{verbatim}
+
+Désormais les autres pourront git submodule update avec la dernière version du repo de data.
+
+Si on avait pas commité, alors le submodule update ne tient pas compte des nouvelles modifications
+sur le repository data.
+
+\subsection{Enlever des fichiers du repository data}
+Si pour une raison x, on veut enlever des fichiers de data. Par exemple heavy.dcm
+dans le submodule ou simplement dans dataCloned : 
+\begin{verbatim}
+#modify l'arbre
+git filter-branch --index-filter 'git rm --cached --ignore-unmatch heavy.dcm' HEAD
+git push origin master --force
+\end{verbatim}
+
+dans le bare repo data : 
+\begin{verbatim}
+git reflog expire --expire=now --all
+git gc --aggressive --prune=now
+\end{verbatim}
+
+Côté super, on met à jour le submodule,
+\begin{verbatim}
+git pull 
+#puis on ajoute la nouvelle référence : 
+git add tests/data; git commit -m "updated submodule"; git push
+\end{verbatim}
+
+
+Côté client, celui-ci n'a plus qu'à runner 
+\begin{verbatim}
+git pull; git submodule update
+\end{verbatim}
+Si il avait le fichier heavy.dcm, alors celui-ci est potentiellement encore dans le .git du submodule. Il peut l'enlever
+à coup de 
+\begin{verbatim}
+rm -rf .git/refs/original
+git reflog expire --expire=now --all
+git gc --aggressive --prune=now
+\end{verbatim}
+
+Source : \htmladdnormallink{github}{http://help.github.com/remove-sensitive-data/}
+
+
+
+
+ \chapter{Procédure de test d'outils}
+\section{Procédure de test}
+\begin{enumerate}
+       \item Choisir un outil, et une image test d'entrée.
+       \item Lui faire générer une image
+       \item Cette image générée sert de référence. L'outil valide doit générer cette image à partir de l'image test d'entrée.
+       \item Passer l'image test d'entrée et s'assurer que l'outil génère bien l'image de référence.
+\end{enumerate}
+\section{Step by Step}
+\begin{enumerate}
+       \item Choisir un outils : ex : clitkCropImage
+       \item Chercher comment le lancer : 
+\begin{verbatim}
+cat $(find -name *CropImage*ggo)
+\end{verbatim}
+       \item Choisir les images qui vont bien: par défaut sont présentes Lung3D.mhd, Deformation4D.mhd (toutes deux de petites
+tailles), les paramètres etc...
+       \item Exécuter l'outil : ./clitkCropImage {parametres}
+       \item Récupérer la (les) images générées (vérifier qu'elle(s) est(sont) correcte(s)) et les copier dans le dossier
+des images de test.
+       \item Mettre à jour le /tests/tools/CMakeLists.txt en ajoutant le test
+       \item Vérifier qu'on a bien le test qui passe, 
+\begin{verbatim}
+#on reparse le CMakeLists.txt
+       cmake ../vvSource
+#et on run les tests
+       make test
+\end{verbatim}
+Si un test échoue, on peut accéder à la raison via le fichier /Testing/Temporary/lastTest.log
+       \item Répéter pour autant de tests qu'on veut faire sur un outils
+       \item Mettre à jour le dashboard ''make Experimental''
+       \item Commit/Push les images sur le git des images tests
+       \item Commit du CMakeLists.txt sur le repository de vv
+\end{enumerate}
+
+
+\end{document}
index 5e1165b1900180ad44c1e481758cdfdcf2fe1ae8..d505c8a739ba7a4df0fd537e760bfe5be4aeaa30 100644 (file)
@@ -4,11 +4,6 @@ include_directories(
   ${GTEST_DIR}/include
 )
 
-SET (CUSTOM_TEST_SRC
-  clitkImageInfoTest.cxx
-  vvMainTest.cxx
-)
-
 SET(BUILDNAME ${BUILDNAME}_tools CACHE INTERNAL DOCSTRING)
 ADD_DEFINITIONS(-DCLITK_TEST_TOOLS_PATH=\"${PROJECT_BINARY_DIR}/bin/\")
 SET (srcs
@@ -16,7 +11,7 @@ SET (srcs
 )
 
 ADD_EXECUTABLE(toolTestRunner ${srcs})
-TARGET_LINK_LIBRARIES(toolTestRunner vvLib ${vvExternalLibs})
+TARGET_LINK_LIBRARIES(toolTestRunner ${ITK_LIBRARIES})
 SET(exe ${EXECUTABLE_OUTPUT_PATH}/toolTestRunner) 
 SET(p ${CLITK_TEST_DATA_PATH})
 #=========================================================
@@ -41,8 +36,8 @@ ADD_TEST(clitkGetDirection_4d ${exe} clitkGetDirection -i ${p}Deformation4D.mhd
 ADD_TEST(clitkGetDirection_3d ${exe} clitkGetDirection -i ${p}Lung3D.mhd       ${p}Lung3D_ref.direction)
 #=========================================================
 # clitkBinarize
-ADD_TEST(clitkBinarizeBGl0.1356_4d ${exe} clitkBinarizeImage -i ${p}Deformation4D.mhd --mode BG -l 0.1356 -o Deformation4D_ref.binarizeBGl0.1356.mhd ${p}Deformation4D_ref.binarizeBGl0.1356)
-ADD_TEST(clitkBinarizeFGl0.1556_3d ${exe} clitkBinarizeImage -i ${p}Lung3D.mhd        --mode FG -l 0.1556 -o Lung3D_ref.binarizeFGl0.1556.mhd ${p}Lung3D_ref.binarizeFGl0.1556)
+ADD_TEST(clitkBinarizeBGl0.1356_4d ${exe} clitkBinarizeImage -i ${p}Deformation4D.mhd --mode BG -l 0.1356 -o Deformation4D_ref.binarizeBGl0.1356.mhd ${p}Deformation4D_ref.binarizeBGl0.1356.mhd)
+ADD_TEST(clitkBinarizeFGl0.1556_3d ${exe} clitkBinarizeImage -i ${p}Lung3D.mhd        --mode FG -l 0.1556 -o Lung3D_ref.binarizeFGl0.1556.mhd ${p}Lung3D_ref.binarizeFGl0.1556.mhd)
 #=========================================================
 # clitkImageArithm
 ADD_TEST(clitkImageArithm0_3d ${exe} clitkImageArithm -i ${p}Lung3D.mhd -j ${p}Lung3D.mhd -t 0 -o Lung3D_ref.arithm0.mhd ${p}Lung3D_ref.arithm0.mhd)
@@ -73,11 +68,12 @@ ADD_TEST(clitkMorphoMath2_4d ${exe} clitkMorphoMath -i ${p}Deformation4D.mhd -o
 ADD_TEST(clitkMorphoMath3_4d ${exe} clitkMorphoMath -i ${p}Deformation4D.mhd -o Deformation4D_ref.morphoMath.t3.mhd ${p}Deformation4D_ref.morphoMath.t3.mhd)
 ADD_TEST(clitkMorphoMath4_4d ${exe} clitkMorphoMath -i ${p}Deformation4D.mhd -o Deformation4D_ref.morphoMath.t4.mhd ${p}Deformation4D_ref.morphoMath.t4.mhd)
 ADD_TEST(clitkMorphoMath5_4d ${exe} clitkMorphoMath -i ${p}Deformation4D.mhd -o Deformation4D_ref.morphoMath.t5.mhd ${p}Deformation4D_ref.morphoMath.t5.mhd)
-
-
 #=========================================================
-
-
+#clitkSetBackground
+ADD_TEST(clitkSetBackground_4d ${exe} clitkSetBackground -i ${p}Deformation4D.mhd -m ${p}Deformation4D.mhd -o Deformation4D_ref.setBackground.mhd ${p}Deformation4D_ref.setBackground.mhd)
+ADD_TEST(clitkSetBackground_3d ${exe} clitkSetBackground -i ${p}Lung3D.mhd -m ${p}Lung3D.mhd -o Lung3D_ref.setBackground.mhd ${p}Lung3D_ref.setBackground.mhd)
+#clitkWarpImage
+ADD_TEST(clitkWarpImage_3d ${exe} clitkWarpImage -i ${p}00-P.mhd --vf ${p}vf50-P_1.mhd -o 00-P_ref.warpImage.mhd ${p}00-P_ref.warpImage.mhd)
 
 
 
index 753aa37bcef992c0bccf53ff922ae6c3724aab86..212321106ec1a32458977c592be1e19a4274a8a6 100644 (file)
@@ -151,6 +151,7 @@ int main(int argc, char** argv){
   //run the command line
   system(cmd_line.str().c_str());
   
+       assertFalse(!itksys::SystemTools::FileExists(outFile.c_str(), true), "no mhd have been generated");
   
        //compare source files
 #ifdef _WIN32
@@ -162,7 +163,6 @@ int main(int argc, char** argv){
 #else
   assertFalse(!mhdCmp(outFile.c_str(), refFile), "Generated mhd file != ref File");
 #endif
-  
   std::string refRawFile = mhdToRawName(strRefFile);
   std::string rawFile = mhdToRawName(outFile);
   
index 912bf5e660dc44b5b190dfc169d282a8056b7c14..a6585160d53ee2ee6873b7a614f18789a47fb175 100644 (file)
@@ -422,7 +422,7 @@ p, li { white-space: pre-wrap; }
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="0" column="1" colspan="5">
        <widget class="QLabel" name="dataFusionnedLabel">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -435,14 +435,14 @@ p, li { white-space: pre-wrap; }
         </property>
        </widget>
       </item>
-      <item row="1" column="0" colspan="2">
+      <item row="1" column="0" colspan="3">
        <widget class="QLabel" name="opacityLabel">
         <property name="text">
          <string>Global Opacity :</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="3" colspan="3">
+      <item row="1" column="3" colspan="2">
        <widget class="QSlider" name="opacityHorizontalSlider">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -455,7 +455,7 @@ p, li { white-space: pre-wrap; }
         </property>
        </widget>
       </item>
-      <item row="1" column="6">
+      <item row="1" column="5">
        <widget class="QDoubleSpinBox" name="fusionOpacitySpin">
         <property name="decimals">
          <number>2</number>
@@ -490,7 +490,7 @@ p, li { white-space: pre-wrap; }
         </property>
        </widget>
       </item>
-      <item row="2" column="3" colspan="3">
+      <item row="2" column="3" colspan="2">
        <widget class="QSlider" name="thresOpacityHorizontalSlider">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -503,7 +503,7 @@ p, li { white-space: pre-wrap; }
         </property>
        </widget>
       </item>
-      <item row="2" column="6">
+      <item row="2" column="5">
        <widget class="QDoubleSpinBox" name="fusionThresSpin">
         <property name="decimals">
          <number>2</number>
@@ -567,14 +567,14 @@ p, li { white-space: pre-wrap; }
         </item>
        </widget>
       </item>
-      <item row="4" column="0" colspan="2">
+      <item row="4" column="0">
        <widget class="QLabel" name="label_7">
         <property name="text">
          <string>Window :</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="2" colspan="2">
+      <item row="4" column="1" colspan="2">
        <widget class="QDoubleSpinBox" name="fusionWindowSpinBox">
         <property name="decimals">
          <number>4</number>
@@ -593,14 +593,14 @@ p, li { white-space: pre-wrap; }
         </property>
        </widget>
       </item>
-      <item row="4" column="4">
+      <item row="4" column="3">
        <widget class="QLabel" name="label_8">
         <property name="text">
          <string>Level :</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="5" colspan="2">
+      <item row="4" column="4" colspan="2">
        <widget class="QDoubleSpinBox" name="fusionLevelSpinBox">
         <property name="decimals">
          <number>4</number>