From 20439284eb07d0629fd5fb6027e57c3e4dfaeb9f Mon Sep 17 00:00:00 2001 From: jean-pierre roux Date: Tue, 7 Oct 2008 16:22:35 +0000 Subject: [PATCH] Temporary version, to hold some of the removed (maybe useful later) parts od bbtkUserGuide.tex --- .../bbtkUsersGuide/bbtkReferenceManual.tex | 607 ++++++++++++++++++ 1 file changed, 607 insertions(+) create mode 100644 kernel/doc/bbtkUsersGuide/bbtkReferenceManual.tex diff --git a/kernel/doc/bbtkUsersGuide/bbtkReferenceManual.tex b/kernel/doc/bbtkUsersGuide/bbtkReferenceManual.tex new file mode 100644 index 0000000..8573bea --- /dev/null +++ b/kernel/doc/bbtkUsersGuide/bbtkReferenceManual.tex @@ -0,0 +1,607 @@ +% ========================================== +\documentclass[11pt,final,a4paper]{article} +\input{config.tex} + + +\def\todo{\scriptsize\fbox{\bf TODO !!}\normalsize} +\def\x{\bm{x}} +\def\BBTK{{\xspace}The {\bf Reference Manual} } +\def\bbtk{{\xspace}$\texttt{bbtk}$ } +\def\bbi{{\xspace}$\texttt{bbi}$ } +\def\bbStudio{{\xspace}$\texttt{bbStudio}$ } +\def\bbfy{{\xspace}$\texttt{bbfy}$ } +\def\bbdoc{{\xspace}$\texttt{bbdoc}$ } +\def\bbCreatePackage{{\xspace}$\texttt{bbCreatePackage}$ } + +\def\bb{{\xspace}$\texttt{bb}$ } +%\def\bbp{{\xspace}$\texttt{bbp}$\xspace} + +\def\cmake{{\xspace}$\texttt{cmake}$ } + +\def\C{{\xspace}$\texttt{C}$ } +\def\CPP{{\xspace}$\texttt{C++}$ } + +\def\xml{{\xspace}$\texttt{xml}$ } + +\def\itk{{\xspace}$\texttt{itk}$ } +\def\vtk{{\xspace}$\texttt{vtk}$ } +\def\gdcm{{\xspace}$\texttt{gdcm}$ } +\def\gsmis{{\xspace}$\texttt{gsmis}$ } +\def\wx{{\xspace}$\texttt{wxWidgets}$ } + +\def\lin{{\xspace}\textit{Linux} } +\def\win{{\xspace}\textit{Windows} } + +% the same macros with no space at the end + +\def\BBTKns{{\xspace}The {\bf Black Box Toolkit}} +\def\bbtkns{{\xspace}$\texttt{bbtk}$} +\def\bbins{{\xspace}$\texttt{bbi}$} +\def\bbfyns{{\xspace}$\texttt{bbfy}$} +\def\bbdocns{{\xspace}$\texttt{bbdoc}$} +\def\bbCreatePackagens{{\xspace}$\texttt{bbCreatePackage}$} + +\def\bbns{{\xspace}$\texttt{bb}$} +%\def\bbp{{\xspace}$\texttt{bbp}$\xspace} + +\def\cmakens{{\xspace}$\texttt{cmake}$} + +\def\Cns{{\xspace}$\texttt{C}$} +\def\CPPns{{\xspace}$\texttt{C++}$} + +\def\xmlns{{\xspace}$\texttt{xml}$} + +\def\itkns{{\xspace}$\texttt{itk}$} +\def\vtkns{{\xspace}$\texttt{vtk}$} +\def\gdcmns{{\xspace}$\texttt{gdcm}$} +\def\gsmisns{{\xspace}$\texttt{gsmis}$} +\def\wxns{{\xspace}$\texttt{wxWidgets}$} + +\def\linns{{\xspace}\textit{Linux}} +\def\winns{{\xspace}\textit{Windows}} + + + + +\begin{document} +\begin{center} + +{\Large \BBTK} +\vspace{1cm} + +{\Huge Reference Manual} +\vspace{1cm} + +\bbtk version 1.0 +\vspace{0.5cm} + + +Last modified on : September 20, 2008 \\ +Generated on : \today +\vspace{0.5cm} + +Fantomas, Belphegor +\end{center} + +% ========================================== +\tableofcontents +% ========================================== + +\listoftables + +\listoffigures + + + +% ========================================== +%\section*{Abstract} +% ========================================== +\newpage +% ========================================== +\hrule + + +\begin{verbatim} +---> Should be moved in a 'Reference Manual' ?\\ +---> Any suggestion welcome! +\end{verbatim} + +\section{aaa} +\subsection{bbb} + +\begin{table}[!ht] +\caption{\label{kinds} \texttt{Black Box} kinds} +\small +\begin{tabular}{|ll|} +\hline +\texttt{Kind name} & : Meaning \\ \hline \\ \hline +\texttt{ADAPTOR} & : Adaptor Box \\ \hline +\texttt{DEFAULT\_ADAPTOR} & : \\ \hline +\texttt{WIDGET\_ADAPTOR} & : \\ \hline +\texttt{DEFAULT\_WIDGET\_ADAPTOR} & : \\ \hline +\texttt{GUI} & : \\ \hline +\texttt{DEFAULT\_GUI} & : \\ \hline +\texttt{ALL} & : If kind='ALL' then sets the level for all kinds \\ \hline +\end{tabular} +\end{table} + + + + + \bf\emph{Boxes} : Box retrieving on various criterions : + \begin{itemize} + \item {\bf\emph{By name}} (Alphabetical list) + \item {\bf\emph{By package}} (see table : \ref{bbi-list_of_packages}) + \item {\bf\emph{By category}} (see table : \ref{categories}) + \item {\bf\emph{Adaptors}} Used internaly to perform type conversions (not end user intended) + \end{itemize} + + + +% ========================================== +\begin{table}[!ht] +\caption{\label{bbi-list_of_packages} List of bbtk supplied packages.} +\small +\begin{tabular}{|lp{10cm}|} +\hline +Package & What it's used for \\ \hline +\texttt{std} & : the 'standard' package including basic useful boxes \\ \hline +\texttt{wx} & : basic graphical interface elements (widgets : sliders, buttons, etc.) based on the \texttt{wxWidgets} library \\ \hline +\itk & : the basic image processing package, based on the \itk library. (without description)\\ \hline +\vtk & : prints help on the package \texttt{package-name} and its boxes (with brief description). The package must have been previously loaded\\ \hline +\texttt{wxvtk} & : widget boxes based on the \vtk library.\\ \hline +\texttt{itkvtk} & : adaptors to convert \itk structures into \vtk structures and conversally.\\ \hline +%\texttt{creaImageIO} & : provides high level widgets to read images including DICOM.\\ \hline +\texttt{toolsbbtk} & : Tools for bbtk administration and package development.\\ \hline + +\end{tabular} +\end{table} +% ========================================== + + + +% ========================================== +\begin{table}[!ht] +\caption{\label{categories} \texttt{Black Box} categories} +\small +\begin{tabular}{|lp{10cm}|} +\hline + \texttt{Category name} & : Meaning \\ \hline \\ \hline + \texttt{adaptor} & : Adaptor box \\ \hline + \texttt{application} & : Final application, end user intended \\ \hline + \texttt{atomic box} & : System category. + Automatically assigned to Atomic Black Boxes (c++ defined) \\ \hline + \texttt{complex box} & : System category. + Automatically assigned to Complex Black Boxes (script defined) \\ \hline + \texttt{command line} & : Script which defines a command line application \\ + & :(no embedded GUI, but command line imput parameters) \\ \hline + \texttt{demo} & : Demonstration \\ \hline + \texttt{devel} & : Developer tool (bbCreatePackage.bbs, ...) \\ \hline + \texttt{dicom} & : DICOM aware box \\ \hline + \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{math} & : Mathematical operations \\ \hline + \texttt{mesh} & : Mesh processing related box \\ \hline + \texttt{misc} & : Box that cannot be put in any other category ! \\ \hline + \texttt{read/write} & : Box that read or write data from or to disk \\ \hline + \texttt{viewer} & : Box which displays some data \\ \hline + \texttt{widget} & : Piece of graphical interface \\ \hline + \texttt{3D object creator} & : Sophisticated 3D widget \\ \hline + \texttt{toolsbbtk} & : Component of bbStudio \\ \hline +\end{tabular} +\end{table} + +% ========================================== + + + + + +\subsection{ccc} + +\begin{verbatim} +---> Should be moved in a 'Reference Manual' ?\\ +---> Any suggestion welcome! +\end{verbatim} + +% ========================================== +\subsubsection{Black box packages} +\label{bbi-more-on-packages} +% ========================================== + +There are various others user-intended packages : +\begin{itemize} +\item{vtk} \\ +It contains some vtk based image processing filters : +% \begin{enumerate} + + \paragraph{AppendPolyData} + Appends one of more polygonal datasets into a single polygonal dataset + + \paragraph{ConeSource} + Creates a Cone + + \paragraph{ImageAnisotropicDiffusion3D} +vtk\-Image\-Anisotropic\-Diffusion\-3D dif\-fuses a volume iteratively. \\ +The neighborhood of the diffusion is determined by the instance flags. \\ +if 'Faces' is on, the 6 voxels adjoined by faces are included in the neighborhood. \\ +If 'Edges' is on the 12 edge connected voxels are included, and if 'Corners' is on, the 8 corner connected voxels are included. \\ +'DiffusionFactor' determines how far a pixel value moves toward its neighbors, and is insensitive to the number of neighbors chosen.\\ +The diffusion is anisotropic because it only occurs when a gradient measure is below 'GradientThreshold'. \\ +Two gradient measures exist and are toggled by the 'GradientMagnitudeThreshold' flag. \\ +When 'GradientMagnitudeThreshold' is on, the magnitude of the gradient, computed by central differences, above 'DiffusionThreshold' a voxel is not +modified. \\ +The alternative measure examines each neighbor independently.\\ +The gradient between the voxel and the neighbor must be below the 'DiffusionThreshold' for diffusion to occur with THAT neighbor.\\ + Receives : \\ + - In : an image (vtkImageData*)\\ + - Diffusion : Difference threshold that stops the diffusion\\ + Outputs : \\ + - Out : the isosurface mesh (vtkPolyData*) + + \paragraph{ImageCharacteristics} + Exports objet sizes, and Spacings + + \paragraph{ImageDilateErode3D} + + Dilates one value and erodes another.\\ + vtkImageDilateErode3D will dilate one value and erode another. \\ + It uses an elliptical foot print, and only erodes/dilates on the boundary of the two values. \\ + The filter is restricted to the X, Y, and Z axes for now.\\ + It can degenerate to a 2 or 1 dimensional filter by setting the kernel size to 1 for a specific axis. \\ + (bbfication of vtkImageDilateErode3D) \\ + Receives : \\ + - In : an image (vtkImageData*)\\ + - DilateValue : The dilatation value\\ + - ErodeValue : The erosion value\\ + Outputs : \\ + - Out : the isosurface mesh (vtkPolyData*) + + \paragraph{ImageGaussianSmooth} + Performs a gaussian convolution of the input image\\ + Receives : \\ + - In : an image (vtkImageData*)\\ + - StdDevX : Standard deviation in X direction\\ + - StdDevY : Standard deviation in Y direction\\ + Outputs : \\ + - Out : the isosurface mesh (vtkPolyData*) + + \paragraph{ImagePlanes} + Creates three 3D planes with the input image mapped onto with which the user can interact; \\ + The output vtkImagePlaneWidget objects are to be inserted into a 3D scene (e.g. a Viewer3D) + Receives : \\ + - In : an image (vtkImageData*)\\ + Outputs : \\ + - PlaneX : the image plane in X direction (vtkImagePlaneWidget*)\\ + - PlaneY : the image plane in Y direction (vtkImagePlaneWidget*)\\ + - PlaneY : the image plane in Z direction (vtkImagePlaneWidget*)\\ + + Outputs : \\ + - Out : the isosurface mesh (vtkPolyData*) + + \paragraph{IsoSurfaceExtractor} + Extracts an iso-surface of a 3D image and creates a vtkProp3D object to insert into a 3D scene (e.g. a Viewer3D) + Receives : \\ + - In : an image (vtkImageData*)\\ + - Isovalue : the isosurface value (double)\\ + - Colour : Surface colour (vector of 3 doubles) + Outputs : \\ + - Out : the isosurface (vtkProp3D**) + + \paragraph{MIPCreator} + Creates a Maximum Intensity Projection (MIP) view of a 3D image.\\ + Receives : \\ + - In : an image (vtkImageData*)\\ + - Scale : the Gray scale scaling (float) \\ + - Shift : the Gray scale shift (float) \\ + Ouputs : \\ + - Out : The MIP object (vtkProp3D*) to be plugged into a 3D Viever + + \paragraph{MarchingCubes} + Extracts an iso-surface of an image using the marching cubes algorithm (bbfication of vtkMarchingCubes)\\ + Receives : \\ + - In : an image (vtkImageData*)\\ + - Value : the isosurface value (double)\\ + Outputs : \\ + - Out : the isosurface mesh (vtkPolyData*) + + \paragraph{MetaImageReader} + Reads .mhd / .mhd image formats (bbfication of vtkMetaImageReader) \\ + Receives : \\ + - In : the name of the file to be read (std::string) + Outputs : + - Out : The image (vtkImageData*) + + \paragraph{SegmentationConnectivity} + Segmentation with min max threshold and connectivity \\ + Receives : \\ + - In : an image (vtkImageData*)\\ + - PositionXYZ : initial position (std::vector) \\ + - ThresholdMinMax : min, max threshold values (std::vector) \\ + Outputs : \\ + - Out : The image (vtkImageData*) + + \paragraph{SphereSource} + Creates a Sphere +% \end{enumerate} + +\item{itk} \\ +It contains some itk based image processing filters : + + \paragraph{BinaryThresholdImageFilter} + Binarizes an image by thresholding (generic bbification of itk::BinaryThresholdImageFilter) + Receives : \\ + + - In : Input image. Can be any itk::Image* \\ + - InsideValue : Output value for pixels inside thresholds (Double) \\ + - LowerThreshold : Lower threshold(Double) \\ + - OutsideValue : Output value for pixels outside thresholds (Double) \\ + - UpperThreshold : Upper threshold (Double) \\ + Outputs : \\ + - Out' : Output image. Of the same type and dimension than the input image + + \paragraph{DICOMSeriesFileNames} + Reads a series from a DICOM directory as a 3D itk image + + \paragraph{ExtractImageFilter} + Decrease the image size by cropping the image to the selected region bounds (bbification of itk::ExtractImageFilter) + + \paragraph{ImageProperties} + Outputs different properties of an image (type, dimension, size, spacing, ...) + + \paragraph{ImageRegion} +Creates a generic ImageRegion (bbtk::any) from two vectors providing the index and size of the region. +The dimension D of the actual itk::ImageRegion created is the max of the sizes of Index and Size +(the smallest vector is padded by zeros) + + \paragraph{ImageReader} +Generic itk image reader + + \paragraph{ImageWriter} +Generic itk image writer + + \paragraph{ImageSeriesReader} +Generic itk image series reader. + + \paragraph{ResampleImageFilter} +Resamples an image + +\item{itkvtk} \\ +It doesn't contain any end user intended box, only adaptors : to convert a generic itkImage to a vtkImageData, and vtkImageData* to a generic itkImage pointer + +Sorry nothing is done, right now for meshes. + +\item{wxvtk} \\ + +It contains two atomic black boxes. + + \paragraph{Viewer2D} + Receives : \\ + - a \textless vtkImageData* \textgreater (In),\\ + - an Orientation(0:yz / 1:xz / 2:xy),\\ + - an initial slice number (Slice).\\ + Outputs :\\ + - a \textless vtkRenderer* \textgreater (Renderer) + + \paragraph{Viewer3D} + Receives :\\ + - up to 5 Input Actors (\textless vtkProp3D* \textgreater),\\ + - up to 5 Input Observers (\textless vtkInteractorObserver* \textgreater), \\ + - a boolean 'Stereo' option, to use Red-Blue filter + Outputs :\\ + - an Interactor (\textless wxVTKRenderWindowInteractor* \textgreater) with which vtk widgets can interact, \\ + - a Renderer (\textless vtkRenderer* \textgreater) to which actors can be added. + +It contains too some sophisticated complex black boxes : + + \paragraph{IsoSurfaceWithControls} + Image iso-surface extractor (vtk::IsoSurfaceExtractor) with associated control panel (isovalue, opacity and colour)\\ + Receives :\\ + - an initial isovalue (Isovalue) + - an initial opacity (Opacity) + - an initial colour (Colour) + Outputs :\\ + \textless vtkProp3D* \textgreater (In)\\ + + \paragraph{MIPWithControls} + Maximum Intensity Projection (MIP) creator (vtk::MIPCreator) with associated control panel (shift and scale) \\ + Receives :\\ + - an initial scale (Scale) + - an initial shift (Shift) + Outputs :\\ + \textless vtkProp3D* \textgreater (In)\\ + +\item{wx} \\ + +Some boxes are the bbfication of usefull xwWidgets, some other ones are more +sophisticated. + + \paragraph{ColourSelector} Colour Selector dialog (bbfication of wxColourSelector) \\ + %\begin{verbatim} + \texttt{Out} : Colour choosen in format '[0,1] [0,1] [0,1]' + %\end{verbatim} + + \paragraph{ColourSelectorButton} A button which displays a colour picker dialog when clicked \\ + %\begin{verbatim} + \texttt{In} :Initial colour \\ + \texttt{Out} : Colour choosen in format '[0,1] [0,1] [0,1]' + %\end{verbatim} \\ + + \paragraph{CommandButton} Button which executes bbi commands \\ + %\begin{verbatim} + \texttt{In} : Commands to be executed separated by commas (;). Each single quote (') is replaced by a double quote ("). \\ + \texttt{Label} : Label of the button \\ + \texttt{Widget} : Output widget \\ + %\end{verbatim} + + \paragraph{DirectorySelector} Pops up a directory selection dialog (wxDirDialog)\\ + %\begin{verbatim} + \texttt{DefaultDir} : The default directory\\ + \texttt{Message} : Message to show on the dialog \\ + \texttt{Title} : Title of the dialog \\ + \texttt{Out} : The directory selected by the user\\ + %\end{verbatim} + + \paragraph{FileSelector} Pops up a file selection dialog for reading or saving (wxFileDialog)\\ + %\begin{verbatim} + \texttt{DefaultDir} : The default directory \\ + \texttt{DefaultFile} : The default filename \\ + \texttt{Message} : Message to show on the dialog \\ + \texttt{OpenSave} : Open for an open dialog (default) / Save for a save dialog\\ + \texttt{Title} : Title of the dialog \\ + \texttt{Wildcard} : A wildcard, such as "*.*" or "BMP files (*.bmp)|*.bmp|GIF files (*.gif)|*.gif" \\ + \texttt{Out} : The file selected by the user \\ + %\end{verbatim} + + \paragraph{InputText} A zone in which the user can enter a text (wxTextCtrl)\\ + %\begin{verbatim} + \texttt{In} : Initial text (default '')\\ + \texttt{Title} : Title of the input zone (default '')\\ + \texttt{WinTitle} : Title of the window (*)\\ + \texttt{Out} :Current text\\ + %\end{verbatim} + + \paragraph{LayoutLine} LayoutLine widget (wxBoxSizer)\\ + %\begin{verbatim} + \texttt{Orientation} Orientation (default V), 0=H=HORIZONTAL , 1=V=VERTICAL \\ + \texttt{Widget}1 widget 1 \\ + \texttt{Widget2} widget 2 \\ + \texttt{Widget3} widget 3 \\ + \texttt{Widget4} widget 4 \\ + \texttt{Widget5} widget 5 \\ + \texttt{Widget6} widget 6 \\ + \texttt{Widget7} widget 7 \\ + \texttt{Widget8} widget 8 \\ + \texttt{Widget9} widget 9\\ + %\end{verbatim} + + \paragraph{LayoutSplit} Widget which splits a window in two fixed size parts (wxSplitterWindow)\\ + %\begin{verbatim} + \texttt{Orientation} : Orientation (default H), 0=H=HORIZONTAL , 1=V=VERTICAL\\ + \texttt{Proportion} : Proportion (in percent) of the first children in the window\\ + \texttt{Widget1} : Upper or left widget\\ + \texttt{Widget2} : Lower or right widget\\ + %\end{verbatim} + + \paragraph{LayoutTDown} Creates a 'T like' complex container : Down {UpLeft, UpRight} \\ + %\begin{verbatim} + \texttt{Widget1} : UpLeft container\\ + \texttt{Widget2} : UpRight container\\ + \texttt{Widget3} : Down container\\ + \begin{verbatim} +// --------------- +// | | | +// | W1 | W2 | +// |-------------| +// | | +// | W3 | +// --------------- + \end{verbatim} + + \paragraph{LayoutTLeft} Creates a 'T like' complex container : Left {RigthUp, RightDown}\\ + %\begin{verbatim} + \texttt{input} Widget1 : "UpLeft container" \\ + \texttt{input} Widget2 : "UpRight container" \\ + \texttt{input} Wigdet3 : "Down container" \\ + \begin{verbatim} +// --------------- +// | | W2 | +// | W1 | | +// | |------| +// | | W3 | +// | | | +// --------------- + \end{verbatim} + + \paragraph{LayoutTRight} Creates a 'T like' complex container : Right {LeftUp, LeftDown}\\ + %\begin{verbatim} + \texttt{input} Widget1 currentBox.Widget1 "Up container" \\ + \texttt{input} Widget2 down.Widget1 "DownLeft container" \\ + \texttt{input} Widget3 down.Widget2 "DownRight container"\\ + \begin{verbatim} +// --------------- +// | | | +// | W1 | | +// |------| W2 | +// | W3 | | +// | | | +// --------------- + \end{verbatim} + + \paragraph{LayoutTUp} Creates a 'T like' complex container : Up {DownLeft, DownRight} as w1{w2,w3}\\ + %\begin{verbatim} + \texttt{ input} Widget1 currentBox.Widget1 "Up" \\ + \texttt{input} Widget2 down.Widget1 "DownLeft" \\ + \texttt{input} Widget3 down.Widget2 "DownRight"\\ + +// \begin{verbatim} +// ---------------- +// | W1 | +// | | +// |------|-------| +// | W3 | W2 | +// | | | +// ---------------- + \end{verbatim} + + \paragraph{LayoutTab} LayoutTab widget (wxNotebook)\\ + %\begin{verbatim} + \texttt{Orientation} Orientation (default T), 0=T=TOP , 1=R=RIGHT , 2=B=BOTTON , 3=L=LEFT \\ + \texttt{Widget1} widget 1 \\ + \texttt{Widget2} widget 2 \\ + \texttt{Widget3} widget 3 \\ + \texttt{Widget4} widget 4 \\ + \texttt{Widget5} widget 5 \\ + \texttt{Widget6} widget 6 \\ + \texttt{Widget7} widget 7 \\ + \texttt{Widget8} widget 8 \\ + \texttt{Widget9} widget 9 \\ +%\end{verbatim} + + \paragraph{OutputText} Text zone to be inserted into a window (wxStaticText)\\ + %\begin{verbatim} + \texttt{In} Text \\ + \texttt{Title} Title prepended to the text\\ + %\end{verbatim} + + \paragraph{RadioButton} RadioButton group widget 0-9 entries\\ + %\begin{verbatim} + \texttt{In} Set initial item \\ + \texttt{In0} option 0\\ + \texttt{In1} option 1\\ + \texttt{In2} option 2\\ + \texttt{In3} option 3\\ + \texttt{In4} option 4\\ + \texttt{In5} option 5 \\ + \texttt{In6} option 6 \\ + \texttt{In7} option 7 \\ + \texttt{In8} option 8 \\ + \texttt{In9} option 9 \\ + \texttt{Title} Title of the widget (default '')\\ + \texttt{Out} Number of the selected Item + %\end{verbatim} + + \paragraph{Slider} Slider widget (wxSlider)\\ + %\begin{verbatim} + \texttt{ChangeResolution} Enables the user to change the slider resolution (default FALSE) \\ + \texttt{In} Initial slider position(default 0) \\ + \texttt{Label} Show slider labels ? (default FALSE) \\ + \texttt{Max} Maximum value of the slider (default 500)\\ + \texttt{Min} Minimum value of the slider (default 0)\\ + \texttt{Orientation} Orientation : (default H) 0=H=HORIZONTAL, 1=V=VERTICAL\\ + \texttt{ReactiveOnTrack} Slider sends info when track moves (default 0 = no)\\ + \texttt{Title} Title shown above the slider (default '')\\ + %\end{verbatim} +\end{itemize} + + +%\bibliography{all} + + + +%\section{Conclusion} + + +\end{document} -- 2.45.1