]> Creatis software - bbtk.git/blobdiff - kernel/doc/bbtkPackageDevelopersGuide/bbtkPackageDevelopersGuide.tex
Doc headers
[bbtk.git] / kernel / doc / bbtkPackageDevelopersGuide / bbtkPackageDevelopersGuide.tex
index de75a2789bc21ec1e1432fcf99805ce200430667..8046e8ff0d83eca6bd2452870b7177ca63275edc 100644 (file)
@@ -1,15 +1,46 @@
+
 % ==========================================
 \documentclass[11pt,final,a4paper]{article}
 \input{config.tex}
+
+
+
 \begin{document}
-\title{The Black Box Toolkit\\Package Developers' Guide}
-\date{\today}
-\author{Laurent Guigues}
-\maketitle
+
+\begin{center}
+
+{\Large \BBTK}
+\vspace{1cm}
+
+{\Huge User's Guide}
+\vspace{1cm}
+
+\bbtk version \bbtkVersion
+\vspace{0.5cm}
+
+
+Last modified on : October 12, 2008 \\
+Generated on : \today 
+\vspace{0.5cm}
+\end{center}
+\begin{center}
+Eduardo Davila, Laurent Guigues, Jean-Pierre Roux 
+\end{center}
+\begin{center}
+CREATIS-LRMN, Centre de Recherche en Imagerie Medicale \\ CNRS UMR 5220, INSERM U620\\
+INSA Lyon\\
+Universit\'e Claude-Bernard Lyon 1
+\end{center}
+
+
+
 % ==========================================
 \tableofcontents
 % ==========================================
 
+\listoftables
+
+\listoffigures
 
 % ==========================================
 %\section*{Abstract}
 % ==========================================
 Any black box must be included in a \bbtk package, 
 that is in a particular shared library which can be loaded 
-dynamically by \bbtk (hence applications which use \bbtk, 
-such as the interpreter \bbi). 
+dynamically by \bbtk (hence applications which use \bbtkns, 
+such as the development environment,
+\bbStudions). 
 
 \begin{enumerate}
 \item \textbf{Create a new package. }
 Before defining any black box you  
 have to create a package, or more precisely  
-the files which will allow you to generate the package 
+the source files which will allow you to generate the package 
 (compile and link the shared library) and may be install it. 
  \texttt{bbStudio} does it for you.
  
@@ -53,6 +85,9 @@ that the existing project remain external to the package project.
 You will have to create your new package in a new location and 
 may be include/link against existing libraries. 
 \end{itemize}
+You'll have to run the standalone application \bbCreatePackagens, that allows 
+to create the basic file architecture 
+to start the development of a new black box package.
 
 \item \textbf{Describe your new box. }
 You can do it either :
@@ -64,6 +99,11 @@ When configuring your project with \cmake,
 the utility \bbfy will then generate the corresponding \CPP code. 
 \end{itemize}
 
+
+
+You'll have to run the standalone application \bbCreateBlackBox allows to create the basic file architecture 
+ to start the development of a new black box, that will be included in an already existing package.
+
 \end{enumerate}
 
 % ==========================================
@@ -72,8 +112,7 @@ the utility \bbfy will then generate the corresponding \CPP code.
 
 Run \texttt{bbStudio}.
 
-Use the option \texttt{Create Package} of the menu \texttt{Tools}.
-
+You'll get something like in fig. \ref{bb-Studio}
 
 \begin{figure}[!ht]
 \caption{\label{bb-Studio} bbStudio}
@@ -82,6 +121,8 @@ Use the option \texttt{Create Package} of the menu \texttt{Tools}.
 \end{center}
 \end{figure}
 
+Use the option \texttt{Create package} of the menu \texttt{Tools}.
+
 You will be asked to choose the directory where you want to create the package,
 then you'll get something like in fig. \ref{bbCreatePackage}. 
 
@@ -98,7 +139,7 @@ That will creates the directory structure and the \texttt{cmake}
 files necessary to build the project.
 
 You must then decide the name of your new package. 
-It will be the name used to load the package in \texttt{bbi}.
+This name will be used to load the package by \texttt{bbStudio}.
 Fill up the form like in fig. \ref{bbFillUpPackageForm}.
 
 
@@ -109,7 +150,7 @@ Fill up the form like in fig. \ref{bbFillUpPackageForm}.
 \end{center}
 \end{figure} 
 
-Edit the file 'MyPackage/CMakeLists.txt' to customize your package
+Edit the file \texttt{MyPackage/CMakeLists.txt} to customize your package
 
 
 the file tree obtained is :
@@ -322,7 +363,7 @@ In these sections, you can set :
 \item A \textbf{description} of the package, which will appear in the help of your package or in its html documentation automatically generated by \bbdoc.
 \item The \textbf{version} of the package.
 \item The \textbf{\xml sources} of the package : you can list each input \xml file explicitly or tell \cmake to include in the project \emph{all} the \xml files of the directory. 
-\item The \textbf{\CPP sources} of the package :  you can list each input \CPP file explicitly or tell \cmake to include in the project all the \CPP files of the directory.
+\item The \textbf{\CPP sources} of the package : you can list each input \CPP file explicitly or tell \cmake to include in the project all the \CPP files of the directory.
 \item \textbf{Additional include directories}. Set it if your package needs to include source files which are not in the package directory, typically if it depends on another library which is not one the libraries automatically handled (\vtk, \itk...).
 \item \textbf{Additional libraries} to link against. Set it if your package needs to link against another library which is not one the libraries automatically handled (\vtk, \itk...).
 \end{itemize}
@@ -352,9 +393,11 @@ Apart from this choice of the description langage to use,
 there is an important choice to do concerning the implementation of the box. 
 In \CPP, a black box is nothing but a class which has the standard 
 interface of all black boxes : what's its name ? inputs ? outputs ? and so on. 
+
+
 The abstract description of this interface is done in the class 
 \texttt{bbtk::BlackBox} and is implemented in its child classes : 
-\texttt{bbtk::UserBlackBox} and \texttt{bbtk::WxBlackBox} 
+\texttt{bbtk::AtomicBlackBox} and \texttt{bbtk::WxBlackBox} 
 \footnote{all the classes of the \bbtk library are in a \emph{namespace} 
 called \texttt{bbtk} 
 and the \CPP header of a class called \texttt{NameOfAClass} is 
@@ -366,10 +409,15 @@ If your black box is a \emph{Widget} black box,
 that is a black box which has (or is) 
 a piece of a graphical interface based on the \wx library,
 then it must inherit the class \texttt{bbtk::WxBlackBox}. 
-Concretely, a \texttt{bbtk::WxBlackBox} is associated 
+
+Concretely, a \texttt{bbtk::WxBlackBox} is associated to
 a \texttt{wxWindow} and must be able to return a pointer to it. 
-If your black box is not a widget black box, it must inherit 
-\texttt{bbtk::UserBlackBox}.
+If your black box is not a widget black box 
+(that is : doesn't returns a pointer to a \emph{Widget}),
+ it must inherit from \texttt{bbtk::AtomicBlackBox}.\\
+ It returns a \texttt{wxWidget} which can be embedded into the \texttt{wxWindow}.\\
+ In particular, modal dialogs which are created and destroyed at the end of the process method of the box
+  are NOT \texttt{WxBlackBoxes}/
 
 \subsubsection{Inherit or encapsulate ?}
 
@@ -393,7 +441,7 @@ In \CPP, in order to embed an existing processing \emph{class}
 into a standard interface you only have two possibilities :
 \begin{enumerate}
 \item {\bf Inherit} the existing processing class 
-\emph{and} the interface class (e.g. \texttt{bbtk::UserBlackBox}).
+\emph{and} the interface class (e.g. \texttt{bbtk::AtomicBlackBox}).
 In this case you have to :
 \begin{enumerate}
 \item make the link between the inputs and outputs of the black box 
@@ -403,7 +451,7 @@ method of the inherited class in the processing method of the black box.
 \end{enumerate}
 \item {\bf Encapsulate} the existing processing class 
 in a class inherited from 
-the interface class (e.g. \texttt{bbtk::UserBlackBox}).
+the interface class (e.g. \texttt{bbtk::AtomicBlackBox}).
 In this case you have to :
 \begin{enumerate}
 \item declare it as a member of the black box, 
@@ -457,10 +505,11 @@ Finally, to create a new black box, you will have to give :
 
  \item Its {\bf type}, either 
    \begin{enumerate} 
-     \item  a standard one (\texttt{std-template})
-     \item a VTK Polydata Algorithm based box (\texttt{VTK\_PolydataAlgorithm-template}),    
-     \item  a VTK Image Algorithm based box (\texttt{VTK\_ImageaAlgorithm-template}),
-     \item  if it uses the wxWidget Library (\texttt{widget-template})
+     \item  AtomicBlackBox : a basic one, with no special I/O (\texttt{std-template})
+     \item  WxBackBox : ouputs a \texttt{wxWindow}, 
+     \item a VTK Polydata Algorithm Box descendant,    
+     \item  a VTK Image Algorithm Box descendant
+
    \end{enumerate}
    
   \item The output format of the file, either a C++ file or an XML file.
@@ -588,8 +637,8 @@ describing the \texttt{Add} box of the \texttt{std} package :
 
 The tags and their role are easily understandable.
 
-As the box is not a widget, we inherit from 
-\texttt{bbtk::UserBlackBox} (\texttt{parentblackbox} tag).
+As the box is not a widget, we inherit implicitely from 
+\texttt{bbtk::AtomicBlackBox}.
 
 
 The only part of the file which needs a bit of explaination is 
@@ -602,9 +651,9 @@ like the \texttt{<} and \texttt{>} which have a
 special meaning in \xml. 
 In the case of the \texttt{Add} box, the process code 
 is very simple : remember that 
-\texttt{bbGetInputIn1} is the 
+\texttt{bbGetInputIn1()} is the 
 accessor to the input \texttt{In1} declared above and 
-\texttt{bbGetInputIn2} is the 
+\texttt{bbGetInputIn2()} is the 
 accessor to the input \texttt{In2};  
 the code simply adds the values of the two inputs 
 and sets the output \texttt{Out} with the resulting value.
@@ -614,14 +663,14 @@ you must modify the xml file generated in previous step :
 
 \begin{enumerate}
   \item Complete the description and author tags if you feel like.
-  \item add the '\#include' directives to be put in the generated .h file
+  \item add the \texttt{\#include} directives to be put in the generated \texttt{.h} file
   \item Create your inputs and outputs
   \item Fill in the process tag
   \item Fill in the constructor tag
   \item Fill in the copyconstructor tag
   \item Fill in the destructor tag
   \item Pray
-\end{enumerate} 
+\end{enumerate}
 
 
 % ==========================================
@@ -629,22 +678,45 @@ you must modify the xml file generated in previous step :
 % ==========================================
 
 % ==========================================
-\subsubsection{Specific \texttt{xml} tags for \texttt{vtkImageAlgorithm} classes bbfication}
+\subsubsection{Specific \texttt{xml} tags for \texttt{vtkImageAlgorithm} classes bbfication by inheritance}
 % ==========================================
+\begin{verbatim}
+
+<blackbox name="..." type="VTK_ImageAlgorithm">
+
+<vtkparent>the vtk ImageAlgorithm class it inherits from</vtkparent>
+<input  name="..."  type="double"        special="vtk parameter" description="..."/>
+<input name="..."   type="vtkImageData*" special="vtk input"    description="..."/>
 
+<output  name="..." type="double"        special="vtk parameter" description="..."/>
+<output name="..."  type="vtkImageData*" special="vtk output"    description="..."/>
+\end{verbatim}
 % ==========================================
-\subsubsection{Specific \texttt{xml} tags for \texttt{vtkPolyDataAlgorithm} classes bbfication}
+\subsubsection{Specific \texttt{xml} tags for \texttt{vtkPolyDataAlgorithm} classes bbfication by inheritance}
 % ==========================================
+\begin{verbatim}
+<blackbox name="..." type="VTK_PolyDataAlgorithm">
+
+<vtkparent>the vtk Polydata class it inherits from</vtkparent>
+<input  name="..."  type="double"       special="vtk parameter" description="..."/>
+<input  name="..."  type="vtkPolyData*" special="vtk input"    description="..."/>
+
+<output  name="..." type="double"       special="vtk parameter" description="..."/>
+<output name="..."  type="vtkPolyData*" special="vtk output"    description="..."/>
+
+\end{verbatim}
+
+\newpage
 
 % ==========================================
 \subsubsection{\bbfy \texttt{xml} tags reference}
 % ==========================================
 
-  
+ See tables \ref{xml_tags}, \ref{xml_tags2}
 % ==========================================
 \begin{table}[!ht]
 \caption{\label{xml_tags}
-\bbfy \texttt{xml} tags reference}
+\bbfy \texttt{xml} tags reference (part 1)}
 \small
 \begin{tabular}{|lcllm{6cm}|}
 \hline
@@ -682,38 +754,66 @@ Use \texttt{bbPACKAGE}, where \texttt{PACKAGE} is the name of the package\\\hlin
         & \texttt{special} & - & 0-1 & In: \{\texttt{``itk input'', 
 ``vtk input'', ``itk parameter'', ``vtk parameter''}\} (see below).\\\hline 
         & \texttt{generic\_type} & c) & 0-1 & The ``generic'' type of the input (see text). \\\hline 
-\texttt{<output>} & \texttt{name} & - & 1 &  The name of the output \\\hline 
+
+
+ \end{tabular}
+ \end{table}
+\begin{table}[!ht]
+\caption{\label{xml_tags2}
+\bbfy \texttt{xml} tags reference (part 2)}
+\small
+\begin{tabular}{|lcllm{6cm}|}
+\hline
+Tag & Attributes & Condition & Multiplicity & Description
+ \\ \hline
+ \texttt{<output>} & \texttt{name} & - & 1 &  The name of the output \\\hline 
         & \texttt{type} & - & 1 &  The type of the output \\\hline 
         & \texttt{special} & - & 0-1 & In: \{\texttt{``itk output'', 
-``vtk output''}\} (see below).\\\hline 
-        & \texttt{generic\_type} & c) & 0-1 & The ``generic'' type of the output (see text).\\\hline 
-
+``vtk output''}\} (see below).\\\hline
+        & \texttt{generic\_type} & c) & 0-1 & The ``generic'' type  of the output (see text).\\\hline  
+        & \texttt{nature} & c) & 0-1 & The ``nature'' of the output (used for automatic GUI generation).\\\hline 
 \texttt{<process>} & - & - & 0-1 & The code of the processing method of the box. Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline 
 \texttt{<constructor>} & - & - & 0-1 & The code of the user Constructor of the box (may contains default initialisations). Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline 
 \texttt{<copyconstructor>} & - & - & 0-1 & The code of the user Copy Constructor of the box . Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline
 \texttt{<destructor>} & - & - & 0-1 & The code of the user Destructor of the box. Must be put between clear tags : \texttt{<PRE></PRE>} \\\hline
  \end{tabular}
  \end{table}
+ \newpage
 % ==========================================
 \begin{table}[!ht]
-\caption{\label{xml_tags}
+\caption{\label{xml_tags-conditions}
 \bbfy \texttt{xml} tags conditions}
 \small
 \begin{tabular}{|ll|}
 \hline
-a) & \texttt{<blackbox type == ''itkImageToImageFilter''>} \\ \hline
-b) & \texttt{<blackbox type == ''vtkImageAlgorithm'' or ''vtkPolyDataAlgorithm''>} \\ \hline
-c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and 
+a) & \texttt{<blackbox type == ''ITK\_ImageToImageFilter''>} \\ \hline
+b) & \texttt{<blackbox type == ''VTK\_ImageAlgorithm'' or ''VTK\_PolyDataAlgorithm''>} \\ \hline
+c) & \texttt{<blackbox type == ''ITK\_ImageToImageFilter''>} and 
      \texttt{<blackbox generic>} is present. \\ \hline
 \end{tabular}
 \end{table}
 
+\begin{table}[!ht]
+\caption{\label{basic_parent}}
+\bbfy \texttt{Basic box parent}
+\small
+\begin{tabular}{|ll|}
+\hline
+\texttt{bbtk::WxBlackBox}b) & If the blackbox associated to
+a \texttt{wxWindow} and is be able to return a pointer to it.... \\ \hline
+\texttt{bbtk::AtomicBlackBox} & Any other blackbox that doesn't return a pointer to a \texttt{wxWindow}
+
+\end{tabular}
+\end{table}
+
+
 
 
 % ==========================================
 \begin{table}[!ht]
-\caption{\label{categories}
-\bbfy \texttt{Black Box} categories}
+\caption{\label{categories} \texttt{bbfy} \texttt{Black Box} categories}
 \small
 \begin{tabular}{|ll|}
 \hline
@@ -731,7 +831,7 @@ c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and
  \texttt{example}        & : Example script showing a box use-case      \\ \hline
  \texttt{filter}         & : Image processing box                       \\ \hline
  \texttt{image}          & : Image processing related box               \\ \hline
- \texttt{interaction}    & :  \\ \hline
+ \texttt{interaction}    & :                                            \\ \hline
  \texttt{math}           & : Mathematical operations\\ \hline
  \texttt{mesh}           & : Mesh processing related box \\ \hline
  \texttt{misc}           & : A box that cannot be put in other category ! \\ \hline
@@ -755,7 +855,6 @@ c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and
  \texttt{Kind}     &  Use as :     \\ \hline \\ \hline
  \texttt{ADAPTOR} & \\ \hline
  \texttt{DEFAULT\_ADAPTOR} & \\ \hline 
- \texttt{ADAPTOR} & \\ \hline 
  \texttt{WIDGET\_ADAPTOR} & \\ \hline 
  \texttt{DEFAULT\_WIDGET\_ADAPTOR} & \\ \hline
  \texttt{GUI} & \\ \hline 
@@ -764,16 +863,123 @@ c) & \texttt{<blackbox type == ''itkImageToImageFilter''>} and
 \end{tabular}
 \end{table}
 
+
+% ==========================================
+\begin{table}[!ht]
+\caption{\label{nature}
+\bbfy \texttt{nature}}
+\small
+\begin{tabular}{|ll|}
+\hline
+ \texttt{Nature}     &   : used for    \\ \hline \\ \hline
+ \texttt{file name} & Poping up a File Selector\\ \hline
+ \texttt{directory name} & Poping up a Directory Selector\\ \hline 
+ \texttt{file extension} & \\ \hline  
+ \texttt{colour} & Poping up a Colour Selector\\ \hline 
+ \texttt{pixel type} & \\ \hline 
+ \texttt{image dimension} & \\ \hline
+ \texttt{image index} & \\ \hline 
+ \texttt{image size} & \\ \hline 
+ \texttt{voxel size} & \\ \hline  
+\end{tabular}
+\end{table}
+
+.\\
+.\\
+.\\
+.\\
+.\\
+
+
+\newpage 
+
+
 % ==========================================
 \subsection{\CPP description of a box}
 % ==========================================
 
-TO DO...
-
-Look at the files \texttt{examples/TEMPLATE\_bbPackagenameBoxname.h/cxx}
-and \texttt{examples/TEMPLATE\_bbPackagenameWXBoxname.h/cxx}
+Almost everything is performed usig macros.
 
-%\bibliography{all}
+For a quick start, the best you have to do is to run \texttt{bbStudio}, then in the menu \texttt{Tools}, choose the item
+ \texttt{Create blackbox}, click on \texttt{C++}, and have a look to the generated files.
+% ==========================================
+\subsubsection{\texttt{.h} description of a box}
+% ========================================== 
+ \begin{itemize}
+    \item  \texttt{namespace} : your package name.
+    \item \texttt{class} : the name of your box
+    \item \texttt{public inheritance} : 
+      \begin{itemize}
+         \item{bbtk::WxBlackBox}
+           Your Black Box is intended to return a wxWidget, able to be included into an other one (you choosed
+           \texttt{widget-template} for \texttt{Type of the blackbox} )
+         \item{bbtk::AtomicBlackBox}
+           Your Black box is any processig box (std, ITK or VTK based)
+        \item{any processing class} (ITK, VTK, ...) your box inherits.  
+      \end{itemize}      
+    \item \texttt{BBTK\_BLACK\_BOX\_INTERFACE} : (yourBoxName, the list of the classes it inherits from, VTK Parent -if any-).
+    Yes, we know it's redundant with previous point... That's why we allow you to describe your class in xml format!
+    \item \texttt{bbUserConstructor} declaration of your own callback function, that will be called in the box constructor method
+    \item \texttt{bbUserCopyConstructor} declaration of your own callback function, that will be called in the box copy constructor method 
+    \item \texttt{bbUserDestructor} declaration of your own callback function, that will be called in the box destructor method
+    \item \texttt{BBTK\_DECLARE\_INPUT} : input parameter name (as it will appear to the users of your black box),
+                                        C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...) 
+    \item \texttt{BBTK\_DECLARE\_OUTPUT} : output parameter name (as it will appear to the users of your black box),
+                                        C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...
+    \item \texttt{BBTK\_DECLARE\_VTK\_INPUT}  Declares a vtkAlgorithm-inherited AtomicBlackBox input
+    \item \texttt{BBTK\_DECLARE\_VTK\_OUTPUT} Declares a vtkAlgorithm-inherited AtomicBlackBox output                                                                                  
+    \item \texttt{BBTK\_DECLARE\_VTK\_PARAM} Declares an AtomicBlackBox input corresponding to an inherited vtk parameter 
+     (you know, the ones that are declared by vtkSetMacro/vtkGetMacro). Its name must be the same than the vtk parameter name                          
+    \item \texttt{BBTK\_DECLARE\_VTK\_IMAGE\_ALGORITHM\_INPUT}     Declares a vtkImageAlgorithm-inherited    AtomicBlackBox input
+    \item \texttt{BBTK\_DECLARE\_VTK\_POLY\_DATA\_ALGORITHM\_INPUT} Declares a vtkPolyDataAlgorithm-inherited AtomicBlackBox input                                     
+    \item \texttt{BBTK\_PROCESS}   Defines the default bbUserProcess method for vtk inherited black boxes (actually : calls vtkParent::Update)
+                                                                              
+    \item \texttt{BBTK\_BEGIN\_DESCRIBE\_BLACK\_BOX}  : 
+    (yourBoxName,  \texttt{bbtk::WxBlackBox} or \texttt{bbtk::AtomicBlackBox} depending on what you
+    black box inherits from).
+    Yes, we know it's redundant with public inheritance ... That's why we allow you to describe your class in xml format! 
+    All the following items will be used in the Help interface; describe them carefully (i.e. in a Human understandable way!).
+    \item \texttt{BBTK\_NAME} : the name of your box 
+    \item \texttt{BBTK\_AUTHOR} : author name (better you put e-mail adress)
+    \item \texttt{BBTK\_DESCRIPTION} : brief description of what does the box
+    \item \texttt{BBTK\_CATEGORY} : box category  (see table \ref{categories})
+    \item \texttt{BBTK\_INPUT} for each one of the input parameters, you have to supply : 
+       \begin{itemize}
+         \item The current Blackbox name.
+         \item The parameter name
+         \item A brief description of what the parameter is used for.
+         \item The C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...) 
+         \item The nature of the parameter (see table \ref{nature}) if you wish  your box may be used by automatic GUI generator.
+        Supply an empty string ("") if you don't care.          
+       \end{itemize}
+    \item \texttt{ BBTK\_OUTPUT} for each one of the output parameters, you have to supply :
+       \begin{itemize}
+         \item The current Blackbox name.
+         \item The parameter name
+         \item A brief description of what the parameter is used for.
+         \item The C++ type of the parameter (e.g. double, std::string, vtkImageData*, ...) 
+       \end{itemize} 
+    \item \texttt{BBTK\_END\_DESCRIBE\_BLACK\_BOX} : means the torture is (almost) over.        
+ \end{itemize}
+% ==========================================
+\subsubsection{\texttt{.cxx} description of a box}
+% ========================================== 
+ \begin{itemize}
+    \item  \texttt{BBTK\_ADD\_BLACK\_BOX\_TO\_PACKAGE} : (Package name, Blackbox name)
+    \item  \texttt{BBTK\_BLACK\_BOX\_IMPLEMENTATION} : (Blackbox name, Blackbox basic parent \\ (bbtk::AtomicBlackBox/ bbtk::WxBlackBox)see :\label{basic_parent}
+    \item  \texttt{Process} :definition of your own callback function, that will be called in the box  method. \\ At least, you'll write here the default initialisation of the outputs
+    \item  \texttt{UserConstructor} :  definition of your own callback function, that will be called in the box constructor method. \\
+                                       At least, you'll write here the default initialisation of the inputs (to avoid unpredictable behaviour if user forgets to
+                                      Set/Connect any Input).  
+    \item  \texttt{UserCopyConstructor} : definition of your own callback function, that will be called in the box copy constructor method
+    \item  \texttt{UserDestructor} :  definition of your own callback function, that will be called in the box destructor method      
+ \end{itemize}
+ %\bibliography{all}