Index: trunk/SophyaLib/NTools/NTools.o.list
===================================================================
--- trunk/SophyaLib/NTools/NTools.o.list	(revision 1103)
+++ trunk/SophyaLib/NTools/NTools.o.list	(revision 1104)
@@ -17,5 +17,4 @@
 generaldata.o
 generalfit.o
-imageop.o
 integ.o
 matxop.o
@@ -29,5 +28,4 @@
 poly.o
 rk4cdifeq.o
-rzimage.o
 simplesort.o
 tabmath.o
Index: trunk/SophyaLib/NTools/cimage.cc
===================================================================
--- trunk/SophyaLib/NTools/cimage.cc	(revision 1103)
+++ trunk/SophyaLib/NTools/cimage.cc	(revision 1104)
@@ -1,2008 +1,68 @@
-//  Classes image typee      
-//                    E.Aubourg , E. Lesquoy  01-03/95   
-//                    Modifs R. Ansari   04/95
-
+//  Classes image heritant de TMatrix<T>
+//                       R.Ansari, C.Magneville 07/2000    
 // LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
 
-// $Id: cimage.cc,v 1.6 2000-07-26 13:15:29 ansari Exp $        
-
-
 #include "machdefs.h"
-#include <string.h>
 #include <stdio.h>
-
-#include "perrors.h"
+#include <stdlib.h>
+#include "pexceptions.h"
 #include "cimage.h"
-#include "fct1dfit.h"
-#include "histos.h"
-#include "nbconst.h"
-#include "utils.h"
-
-/* ..............   Classe  Image<T>    ...............   */
-
-//++
-// Class 	Image<T>
-// Lib 		Images++
-// include	cimage.h
-//
-//
-//	Classe descendant (heritier) de la classe *RzImage*, permettant
-//	l'instantiation d'objets image avec un typage fort (entier, reel, ...)
-//
-//	Des objets de type "Image<uint_1>, Image<uint_2>, Image<int_2>, Image<int_4>"
-//	(entier) et "Image<r_4>" (flottant) peuvent etre crees.
-//	Des typedef (*ImageU1*, *ImageU2*, *ImageI2*, *ImageI4*, *ImageR4*) 
-//	facilite l'utilisation de ces classes.
-//--
-//++
-// Links	Parents
-// RzImage
-//--
-//++
-// Links	Descendants
-// FitsImage<T>
-//--
-//++
-// Links	Voir aussi
-// DVList
-//--
-
-//++
-// Titre	Constructeurs
-//--
-
-//++
-// Image<T>(int sizx, sizy, int zero)
-//	Creation d'une image de type "T", de taille "sizx*sizy" pixels.
-//	Si "zero" non nul, tous les pixels de l'image sont mis a zero.
-// Image<T>(char* flnm)
-//	Cree une image a partir du fichier "flnm". Celui-ci doit etre 
-//	au format "PPF" et cree par la methode "Save() ou "Write()".
-//--
 
 template <class T>
-Image<T>::Image(int sizx, int sizy, int zero)
-: RzImage(DataType((T)0), sizx, sizy), imagePtr( (T*) voidP )
+Image<T>::Image()
+// Constructeur par defaut.
+  : TMatrix<T>()
 {
-  if (zero) Zero();
-  END_CONSTRUCTOR
-}
-
-/* --Methode-- */
-template <class T>
-Image<T>::Image()
-: RzImage(DataType((T)0)), imagePtr(0)
-{
-  END_CONSTRUCTOR
-}
-
-
-/* --Methode-- */
-template <class T>
-void Image<T>::Allocate(int sizx, int sizy, int zero, ImgVectP* pvpsh)
-{
-  RzImage::Allocate(DataType((T)0), sizx, sizy, pvpsh);
-  imagePtr = (T*) voidP;
-  if (!imagePtr) THROW(allocationErr);
-  if (zero) Zero();
+  SetOrg();
+  SetPixelSize();
 }
 
 template <class T>
-void Image<T>::SetPixels(int szx, int szy, T* pim)
+Image<T>::Image(uint_4 sizx, uint_4 sizy, r_8 szpx, r_8 szpy, r_8 orgx, r_8 orgy)
+// Constructeur par defaut.
+  : TMatrix<T>(sizy, sizx) 
 {
-  RzImage::SetPixels(DataType((T)0), szx, szy, pim);
-  imagePtr = pim;
+  SetOrg(orgx, orgy);
+  SetPixelSize(szpx, szpy);
 }
 
-/* --Methode-- */
+template <class T>
+Image<T>::Image(const Image<T>& a)
+  : TMatrix<T>(a)
+{
+  SetOrg(a.XOrg(), a.YOrg() );
+  SetPixelSize(a.XPixSize(), a.YPixSize());
+}
+
+template <class T>
+Image<T>::Image(const Image<T>& a, bool share)
+  : TMatrix<T>(a, share)
+{
+  SetOrg(a.XOrg(), a.YOrg() );
+  SetPixelSize(a.XPixSize(), a.YPixSize());
+}
 template <class T>
 Image<T>::~Image()
-{}
-
-
-//++
-// Image<T>(const Image<T>& src, int sharePixels)
-//	Constructeur par copie. Fabrique une image identique a l'image "src".
-//	Si "sharePixels" est non nul, le tableau des pixels est commun 
-//	aux deux images ("src" et celle creee)
-// Image<T>(const Image<T>& src, int orgx, int orgy, int sizx, int sizy)
-//	Construit une image de type "T", a partir des pixels de l'image
-//	"src" (du meme type), de taille "sizx*sizy" et de l'origine
-//	"orgx, orgy" dans "src". Si "orgx" et/ou "orgy" sont negatifs,
-//	la taille de la nouvelle image est automatiquement calculee 
-//	pour contenir toute l'image source a partir de l'origine specifiee.
-//	Genere l'exception "sizeMismatchErr" en cas d'incompatibilite 
-//	taille/origine. 
-//--
-
-/* --Methode-- */
-template <class T> 
-Image<T>::Image(const Image<T>& src, int sharePixels)
-: RzImage(src, sharePixels)
 {
-  imagePtr = (T*) voidP;
-  if (!imagePtr) THROW(allocationErr);
-  END_CONSTRUCTOR
 }
 
-/* --Methode-- */
-template <class T> 
-Image<T>::Image(const Image<T>& src, int orgx, int orgy, int sizx, int sizy)
-:RzImage()
-{
-  // A optimiser...
-  if (sizx < 0) sizx = src.XSize()-orgx;
-  if (sizy < 0) sizy = src.YSize()-orgy;
-  if (orgx+sizx > src.XSize() || orgy+sizy > src.YSize())
-    THROW(sizeMismatchErr);
-
-  Allocate(sizx, sizy);
-  for (int i=0; i<sizx; i++)
-    for (int j=0; j<sizy; j++)
-      (*this)(i,j) = src(i+orgx, j+orgy);
-
-  SetOrg(src.XOrg()+orgx, src.YOrg()+orgy);
-  SetPxSize(src.XPxSize(), src.YPxSize());    
-  END_CONSTRUCTOR
-}
-
-//++
-// LaTeX 	Pour contrer un mauvais espacement des paragraphes de LaTeX
-// \newpage
-//--
-//++
-// Image<T>()
-//	Creation d'une image de type "T" sans allocation du tableau des pixels.
-//	Le tableau des pixels devra etre ensuite alloue par la methode "Allocate()"
-//--
-
-//++
-// Image<T>(const RzImage& rzimg)
-//	Permet de construire une image typee a partir d'une RzImage ("rzimg")
-//	Le tableau des pixels est commun aux deux images.
-//	Les pixels de l'image "rzimg" doivent etre du type "T", sinon 
-//	l'exception "typeMismatchErr" est generee.
-//--
-/* --Methode-- */
-template <class T>
-Image<T>::Image(const RzImage& rzimg)
-:RzImage(rzimg,1)
-{
-
-  if (rzimg.PixelType() != DataType((T)0))
-    THROW(typeMismatchErr);
-  imagePtr = (T*) voidP;
-  if (!imagePtr) THROW(allocationErr);
-
-  END_CONSTRUCTOR
-}
-
-//++
-// void Allocate(int sizx, int sizy, int zero=1, ImgVectP* pvpsh=NULL)
-//	Alloue le tableau des pixels.
-//--
-//++
-// ~Image<T>
-//	Destructeur. supprime le tableau des pixels en memoire si celui-ci
-//	n'est pas utilise par d'autres objets image.
-//--
-
-/* --Methode-- */
-template <class T> 
-Image<T>::Image(char *flnm)
-:RzImage(flnm)
-{
-  imagePtr = (T*) voidP;
-  if (!imagePtr) THROW(allocationErr);
-
-  END_CONSTRUCTOR
-}
-
-
-/* --Methode-- */
-template <class T> 
-void  Image<T>::ReadSelf(PInPersist& s)
-{
-  RzImage::ReadSelf(s);
-  imagePtr = (T*) voidP;
-}
-
-//++
-// Titre	Operateurs
-//	Un grand nombre des operations pouvant etre effectuees sur un 
-//	tableau de nombre ont ete defini pour les objets "Image<T>"
-//	Dans les operations faisant intervenir deux images, l'exception
-//	"sizeMismatchErr" est generee si les tailles (en X ou en Y) des 
-//	deux images ne sont pas identiques.
-//--
-
-//++
-// Image<T>& operator= (const Image<T>& rhs)
-//	Copie le contenu (valeurs des pixels) de l'image "rhs".
-//	Si l'image destination (membre gauche de =) n'a pas son 
-//	tableau de pixels alloue, celui-ci est cree a une taille
-//	identique a celle de "rhs"
-// Image<T>& operator= (T val)
-//	Met tous les pixels de l'image a la valeur "val"
-//--
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator = (const Image<T>& src)
-{
-  if (imagePtr) {
-    if (siz_x != src.siz_x || siz_y != src.siz_y)
-      THROW(sizeMismatchErr);
-  } else
-    Allocate(src.siz_x, src.siz_y);
-  
-  (RzImage)(*this) = (RzImage)src;
-  return *this;
-}
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator = (T a)
-{
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pDst++)
-    *pDst = a;
-
-  return *this;
-}
-
-/* --Methode-- */
-template <class T>
-void Image<T>::Zero()
-{
-  memset(imagePtr,0,siz_x * siz_y * sizeof(T));
-}
-
-/* --Methode-- */
-#if 0 // a la mort de RzImage
-template <class T>
-void Image<T>::Clear()
-{
-  if (imagePtr) {
-    delete[] imagePtr;
-    imagePtr = 0;
-    siz_x = 0;
-    siz_y = 0;
-  }
-}
+///////////////////////////////////////////////////////////////
+#ifdef __CXX_PRAGMA_TEMPLATES__
+#pragma define_template Image<uint_2>
+#pragma define_template Image<int_4>
+#pragma define_template Image<int_8>
+#pragma define_template Image<r_4>
+#pragma define_template Image<r_8> 
+//#pragma define_template Image< complex<r_4> > 
+//#pragma define_template Image< complex<r_8> > 
 #endif
 
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator+= (Image<T> const& a)
-{
-  if (siz_x != a.siz_x || siz_y != a.siz_y)
-    THROW(sizeMismatchErr);
-  T* pSrc = a.imagePtr;
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pSrc++, pDst++)
-    *pDst = PutInRange((double)*pSrc + (double)*pDst, *pDst);
-
-  return *this;
-}
-
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator-= (Image<T> const& a)
-{
-  if (siz_x != a.siz_x || siz_y != a.siz_y)
-    THROW(sizeMismatchErr);
-  T* pSrc = a.imagePtr;
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pSrc++, pDst++)
-    *pDst = PutInRange((double)*pDst - (double)*pSrc, *pDst);
-
-  return *this;
-}
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator*= (Image<T> const& a)
-{
-  if (siz_x != a.siz_x || siz_y != a.siz_y)
-    THROW(sizeMismatchErr);
-  T* pSrc = a.imagePtr;
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pSrc++, pDst++)
-    *pDst = PutInRange((double)*pDst * (double)*pSrc, *pDst);
-
-  return *this;
-}
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator/= (Image<T> const& a)
-{
-  if (siz_x != a.siz_x || siz_y != a.siz_y)
-    THROW(sizeMismatchErr);
-  T* pSrc = a.imagePtr;
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pSrc++, pDst++)
-    if (*pSrc)
-      *pDst = PutInRange((double)*pDst / (double)*pSrc, *pDst);
-    else *pDst = (T) MaxRange(*pDst);
-
-  return *this;
-}
-
-//++
-//  Image<T>& operator += -= *= /= (Image<T> const& rhs)
-//	Ajoute (+=), soustrait(-=), multiplie(*=), divise(/=) les valeurs des pixels 
-//	de l'image a gauche de l'operateur par les pixels correspondants
-//	de l'image a droite de l'operateur ("rhs")
-//  Image<T>& operator += -= *= /= (double crhs)
-//	Ajoute (+=), soustrait(-=), multiplie(*=), divise(/=) les valeurs des pixels 
-//	de l'image a gauche de l'operateur par la constante "crhs"
-//--
-
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator+= (double a)
-{
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pDst++)
-    *pDst = PutInRange((double)*pDst + a, *pDst);
-
-  return *this;
-}
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator-= (double a)
-{
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pDst++)
-    *pDst = PutInRange((double)*pDst - a, *pDst);
-
-  return *this;
-}
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator*= (double a)
-{
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-
-  for (int i=0; i<nPix; i++, pDst++)
-    *pDst = PutInRange((double)*pDst * a, *pDst);
-
-  return *this;
-}
-
-
-/* --Methode-- */
-template <class T> 
-Image<T>& Image<T>::operator/= (double a)
-{
-  T* pDst = imagePtr;
-  int nPix = siz_x * siz_y;
-  
-  for (int i=0; i<nPix; i++, pDst++)
-    *pDst = PutInRange((double)*pDst / a, *pDst);
-  
-  return *this;
-}
-
-
-
-//++
-// Image<T> operator + - * / (Image<T> const& a, Image<T> const& b)
-//	Ajoute, soustrait, multiplie, divise les pixels des deux 
-//	images "a" et "b" et l'affecte a gauche de l'operateur egal.
-// operator + - * / (Image<T> const& a, double cb)
-//	Ajoute, soustrait, multiplie, divise le contenu de l'image "a"
-//	par la constante "cb" et l'affecte a l'image a gauche de l'operateur = .
-// 
-//	Il est preferable d'utiliser dans la mesure du possible, les 
-//	operateurs "+=", "-=", "*=", "/=" afin d'eviter des copies 
-//	inutiles.
-//
-//	*Exemples:*
-//| // Creation des images
-//| ImageR4  ai(200,300), bi, ci;
-//| // Tous les pixels a 238.5
-//| ai = 238.5;
-//| // Image bi meme taille, meme valeurs de pixels que ai
-//| bi = ai;    
-//| // On soustrait 13.2 a tous les pixels de ai
-//| ai -= 13.2;
-//| // Je divise bi par ai (pixel par pixel) qu'on affecte a bi
-//| bi /= ai;
-//| // On somme ai et bi (pixel par pixel) qu'on affecte a ci
-//| ci = ai + bi; 
-//--
-
-
-/* --Methode-- */
-template <class T>
-Image<T> Image<T>::WhereNonZero()
-{
-  Image<T> c(*this);
-  for (int i=0; i<XSize(); i++)
-    for (int j=0; j<YSize(); j++)
-      c(i,j) = c(i,j) ? 1 : 0;
-  return c;
-}
-
-//++
-// void PrintImage(ostream& os) const
-//	Envoie le contenu de l'image (formatte, texte) sur le 
-//	flot (stream) de sortie "os".
-//	Attention: Ca peut faire beaucoup de ligne !
-// void PrintImage() const
-//	Appel a PrintImage(cout) - Sortie sur cout .
-//--
-
-
-/* --Methode-- */
-template <class T>
-void Image<T>::PrintImage(ostream& os) const
-//  Impression de tout le contenu de l'image
-{
-#define PrPvLn 10
-#define PrSize 6
-int i,j,k,ido,ideb,ifin;
-int siz_x,siz_y;
-
-siz_x= XSize();
-siz_y= YSize();
-
-os << " Image::PrintImage: type pixel " ;
-os << DataName(dataType) ;  
-os << ", NbPix=("<<siz_x<<","<<siz_y<<") \n";  
-
-
-/* segmentation avec des lignes de PrPvLn valeurs */
-
-ido = (siz_x-1) / PrPvLn + 1;
-
-char buff[256];
-
-for(k=0;k<ido;k++)
-  {
-  ideb = k*PrPvLn;
-  ifin = ideb + PrPvLn;
-  if ( ifin >siz_x ) ifin =  siz_x ;
-  sprintf(buff, "    ---- colonnes   %d   a   %d  ----\n",ideb,ifin-1);
-  os << buff ;
-  for(j=0; j<siz_y; j++)
-    {
-    sprintf(buff, "%3d - ",j);
-    os << buff;
-    for (i=ideb; i<ifin; i++)
-      {
-        os.width(PrSize);
-// les uint_1 sont traites comme characteres par les ostream ...
-        if (PixelType() == kuint_1) os << ((int)((*this)(i,j))) << " ";
-        else os << (*this)(i,j) << " ";
-      }
-     os << endl;
-     }
-   }
-
- return;
-}
-
-
-//++
-// Titre	Acces aux pixels
-//--
-//++
-// T&  operator() (int x, int y)
-//	Acces au pixel "(x,y)" de l'image (lecture/ecriture)
-// T&  operator[] (int i)
-//	Acces au pixel numero "i" de l'image (lecture/ecriture)
-//
-//| ImageU2 img(100,100);
-//| int i,j,k;
-//| // Remplissage de la moitie de l'image
-//| for(k=0; k<100*50; k++)  img[k] = k%500;
-//| img(50, 10); // Valeur du pixel (50, 10)
-//
-// T*  ImagePtr()
-//	Renvoie un pointeur du type "T (uint_2, r_4, ...)" sur le
-//	tableau des pixels de l'image. A n'utiliser que si un reelle
-//	optimisation de l'acces aux pixels peut etre effectuee.
-//--
-
-
-
-//++
-// Titre	Traitements simples
-//--
-//++
-// int  CheckDyn(double min=-9.e19, double max=9.e19)
-//	Cette methode retourne le nombre de pixels hors dynamique "( <min ou >max )"
-//	Met a jour les donnees membres "min/maxPix nbNul/Sat".
-//	Calcule aussi la moyenne et le sigma des pixels -> "moyPix, sigPix"
-//	Implementation plus efficace de la methode "RzImage::CheckDyn()"
-//--
-
-/* --Methode-- */
-template <class T>
-int Image<T>::CheckDyn(double min, double max)
-
-/*  Cette methode retourne le nombre de pixels hors dynamique    */
-/* ds le pave ( <min ou >max )                                   */
-/* Met a jour la structure image Min/MaxPix nbNul/Sat            */
-/* Calcule aussi la moyenne et le sigma des pixels, met a jour   */
-/* moypix et sigpix dans la structure                            */
-
-{
-T pixv=0;
-double dv;
-
-T minadu = PutInRange(min, pixv);
-T maxadu = PutInRange(max, pixv);
-T minpix = PutInRange(maxadu+1, pixv);
-T maxpix = PutInRange(minadu-1, pixv);
-
-double m = 0.;
-double s = 0.;
-int n9 = 0;
-int n0 = 0;
-int n = XSize()*YSize();
-for(int i=0; i<n; i++) 
-  {
-  pixv = imagePtr[i];
-  if (pixv <= maxadu && pixv >= minadu) 
-    {  
-    if (pixv < minpix)  minpix = pixv;
-    else if (pixv > maxpix)  maxpix = pixv;  
-    dv = (double)pixv;
-    m += dv;  s += (dv*dv);
-    }
-  else 
-    {  
-    if (pixv > maxadu)  n9++;
-    if (pixv < minadu)  n0++; 
-    }
-  }
-
-nbNul = n0;
-nbSat = n9;
-minPix = minpix;
-maxPix = maxpix;
-
-n -= (n0+n9);
-if (n > 0)
-  { dv = (double)n;  m /= dv;  s = s/dv - m*m;
-  if (s>0.)  s = sqrt(s);  else s = 0.;
-  moyPix = m;  sigPix = s; }
-else { moyPix = 0.;  sigPix = -1.; }
-
-return(n0+n9);
-}
-
-//++
-// SeuilBas(double seuil, double val)
-//	Met les pixels en dessous du "seuil" (< seuil) a la valeur "val".
-// SeuilBas(double seuil)
-//	Met les pixels en dessous du "seuil" (< seuil) a zero
-// SeuilHaut(double seuil, double val)
-//	Met les pixels au dessus du "seuil" (> seuil) a la valeur "val".
-// SeuilHaut(double seuil)
-//	Met les pixels au dessus du "seuil" (> seuil) a zero
-//--
-
-/* --Methode-- */
-template <class T>
-void Image<T>::SeuilBas(double seuil, double val)
-
-/*   Met a une valeur definie tous les pixels    */
-/*   en dessous du seuil                         */
-
-{
-  if (!ImagePtr())   THROW(nullPtrErr);
-  T* PtPix=ImagePtr();
-  int nPix=XSize()*YSize();
-  for(int i=0 ; i<nPix;i++,PtPix++) {if(*PtPix < (T) seuil) *PtPix = (T) val;};
-}
-
-/* --Methode-- */
-template <class T>
-void Image<T>::SeuilHaut(double seuil, double val)
-
-/*   Met a une valeur definie tous les pixels    */
-/*   en dessus du seuil                         */
-
-{
-  if (!ImagePtr())   THROW(nullPtrErr);
-  T* PtPix=ImagePtr();
-  int nPix=XSize()*YSize();
-  for(int i=0 ; i<nPix;i++,PtPix++) {if(*PtPix > (T) seuil) *PtPix = (T) val;};
-}
-
-/* --Methode-- */
-template <class T>
-void Image<T>::SeuilBas(double seuil)
-{
-  SeuilBas(seuil,seuil);
-}
-
-/* --Methode-- */
-template <class T>
-void Image<T>::SeuilHaut(double seuil)
-{
-  SeuilHaut(seuil,seuil);
-}
-
-/* --Methode-- (cmv 23/09/96) */
-template <class T>
-//++
-void Image<T>::HBinInt(int& nbin,float& xmin,float& xmax)
-//
-//	Valeur pour avoir un bin entier quand on fait un
-//	histogramme 1D des pixels (pour les images entieres).
-//--
-{
-if( PixelType()<kuint_2 || PixelType()>kint_4 ) return;
-double binw = (xmax-xmin)/nbin;
-binw = (double) ( (int)(binw+0.5) );
-if( binw <= 0. ) binw = 1.;
-xmin = (float) ( (int) xmin );
-xmax = (float) ( (int) (xmax + binw) );
-nbin = (int)( (xmax-xmin)/binw + 0.1 );
-}
-
-/* --Methode-- (cmv 23/09/96) */
-template <class T>
-//++
-int Image<T>::EstimeFdSg(float& xbmax,float& sgbmax
-             ,float nbsig,float frac,float lowbad,float highbad,int deb)
-//
-//	Pour donner une estimation  du fond de ciel et du sigma ciel.
-//	Il est conseille de faire ceci sur une image partielle.
-//	Une premiere estimation du fond et du sigma est faite en nettoyant
-//	iterativement (cf MoySigmaIter).
-//	Puis un histogramme est rempli et rebinne jusqu'a ce que son maximum
-//	soit statistiquement significatif. Le fond et le sigma sont ensuite
-//	calcules par les methodes `FitMax' et `EstimeWidthS' de la classe Histo.
-//| xbmax = position du maximum
-//| sgbmax = valeur du sigma
-//| nbsig = dimensionnement de l'histo de depart en nombre
-//|         de sigma autour de la valeur maximum
-//| frac = valeur maximum principale / maximum secondaire a partir
-//|        de laquelle on considere qu'elle a une signification
-//|        statistique. 
-//| lowbad,highbad = dynamique utile de l'image traitee
-//| deb = niveau de debug
-//| Return : 0 = OK, -1 = echec MoySigmaIter, -2 = echec FitMax,
-//|                  -3 = echec FindWidth
-//--
-{
-T pixv=0;
-T minadu = PutInRange((double) lowbad , pixv);
-T maxadu = PutInRange((double) highbad, pixv);
-bool testl = (lowbad<highbad) ? true : false;
-lowbad  = (float) minadu;  highbad = (float) maxadu;
-
-if(deb<0) deb=0;
-int envd = 0;
-GetIntEnv("PDEBUG_FOND", envd);
-if (deb < envd) deb = envd;
-
-// moyenne et sigma bruts (iteratifs)
-int rc;
-float fd,sg;
-rc = MoySigmaIter(fd,sg,lowbad,highbad,1,5,0.1,3.5,deb-1);
-if(deb>0) cout<<"EstimeFdSg: MoySigmaIter rc="<<rc<<" fd="<<fd<<" sg="<<sg<<endl;
-if(rc<=0) return -1;
-
-// remplissage histogramme avec beaucoup de bins
-int nbin;
-float xmin,xmax;
-xmin = fd - nbsig*sg; if(testl && xmin<lowbad ) xmin = lowbad;
-xmax = fd + nbsig*sg; if(testl && xmax>highbad) xmax = highbad;
-nbin = XSize()*YSize()/20; if(nbin>2000) nbin=2000;
-Histo H(xmin,xmax,nbin);
-for(int i=0;i<XSize()*YSize();i++) H.Add((float) (*this)[i],1.);
-
-// redimensionnement de l'histo pour avoir une bonne signification stat.
-for(;;) {
-  r_8 max1,max2;
-  int_4 imax1,imax2;
-  rc = H.MaxiLocal(max1,imax1,max2,imax2);
-  float rap = 1.;
-  if( max1 != 0. ) rap = max2/max1;
-  // if(nbin<100) H.Print(80);
-  if(deb>1)
-     cout<<"nbin="<<nbin
-         <<"   maxloc="<<rc
-         <<"   maxi="<<max1<<" imax="<<imax1<<" xmax="<<H.BinCenter(imax1)
-         <<"   maxn="<<max2<<" imaxn="<<imax2<<" xmaxn="<<H.BinCenter(imax2)
-         <<" -> "<<rap<<endl;
-  if( rap<frac || nbin<=10 ) break;
-  nbin = (int)(nbin/1.5);
-  H.HRebin(nbin);
-}
-if(deb>1) { if(nbin<250) H.Print(80); else H.Print(80,-1.,1.,-1);}
-
-TRY {
-  xbmax = H.FitMax(2,0.5,deb-2);
-  if(deb>1) cout<<"H.FitMax = "<<xbmax<<endl;
-} CATCHALL {
-   if(deb) cout<< "Echec H.FitMax"<< endl;
-   return(-2);
-} ENDTRY
-
-TRY {
-  r_8 sdroit = -2., dum=sgbmax;
-  H.EstimeWidthS(0.5,dum,sdroit);
-  if(dum<=0.) dum = H.FindWidth(0.5,deb-2);
-  dum /= 2.36;
-  sgbmax = dum;
-  if(deb>1) cout<<"H.FindWidth = "<<sgbmax<<" (droit="<<sdroit<<")"<<endl;
-} CATCHALL {
-   cout<< "Echec H.FindWidth"<< endl;
-   return(-3);
-} ENDTRY
-
-return 0;
-}
-
-/* --Methode--  (cmv 23/09/96) */
-template <class T>
-//++
-float Image<T>::FondCiel(int nbin,float bin_low,float bin_high
-                         ,int degre,float frac,int modu,int deb)
-//
-//	Calcul du fond de ciel:
-//	Remplissage d'un histogramme avec le contenu des pixels du pave,
-//	recherche du bin contenant le maximum,
-//	recheche des limites a frac% de chaque cote du maximum
-//	et fit d'un polynome du 2sd ou 3ieme degre dans cette zone.
-//| Input:
-//|   nbin,bin_low,bin_high : definition de l'histogramme
-//|   degre : degre du fit (2 ou 3)
-//|   frac : definition de la zone de fit a frac% du maximum
-//|   modu : on prend 1 px sur modu
-//|   deb : debug flag
-//| Output: renvoie le maximum de l'histogramme (fond de ciel)
-//|         et update le membre protected fond (si succes)
-//--
-{
-T pixv;
-
-if(modu<=0) modu = 1;
-if(frac<=0.) frac = 0.5;
-if(degre<2 || degre>3) degre = 2;
-if(deb>0)
-  printf("Image::FondCiel: nbin=%d dyn=%g,%g deg=%d frac=%g modu=%d\n"
-        ,nbin,bin_low,bin_high,degre,frac,modu);
-if(nbin<=degre) THROW(inconsistentErr);
-
-TRY {
-
-  Histo tab(bin_low,bin_high,nbin);
-  double sum = 0.;
-  volatile int n = 0, nsum = 0;
-  for(int i=0;i<XSize()*YSize();i++) {
-    n++;
-    if( n%modu != 0 ) continue;
-    pixv = imagePtr[i];
-    tab.Add( (float) pixv );
-    sum += (double) pixv;
-    nsum++;
-  }
-  if(deb>1) { int im = tab.IMax();
-              tab.Print(80,1.,-1.,0,im-50,im+50); }
-
-  float xf = 0.;
-  // tout dans moins de degre bins
-  if( tab.BinNonNul() <= degre ) {
-    if(nsum<=0) THROW(inconsistentErr);
-    xf = sum / (double) nsum;
-    if(deb>0) printf("%d bins <= %d -> Succes Mean = %g\n"
-                    ,tab.BinNonNul(),degre,xf);
-    fond = xf;
-    RETURN(xf);
-  }
-
-  TRY {
-    xf = tab.FitMax(degre,frac,deb-1);
-    if(deb>0) printf("Succes tab.FitMax = %g\n",xf);
-    fond = xf;
-    RETURN(xf);
-  } CATCHALL {
-    if(deb>0)
-       printf("Echec tab.FitMax BinNonNul=%d\n",tab.BinNonNul());
-    THROW(inconsistentErr);
-  } ENDTRY
-
-} CATCHALL {
-   THROW_SAME;
-} ENDTRY
-}
-
-/* --Methode-- (cmv 23/09/96) */
-template <class T>
-//++
-float Image<T>::SigmaCiel(int nbin,float bin_low,float bin_high
-                         ,float& means,float lowbad,float highbad
-                         ,float nsig,int modu,int deb)
-//
-//	Calcul du sigma du fond de ciel:
-//	Remplissage d'un histogramme avec px-<px8> pour les pixels
-//	entre lowbad et highbad (px=valeur du pixel etudie,
-//	<px8>=moyenne des 8 pixels qui lui sont contigus).
-//	Une premiere estimation du sigma (s1) et realisee en cherchant
-//	la largeur a mi-hauteur de cet histogramme. Puis un fit non-lineaire
-//	d'une gaussienne est effectue dans +/- nsig*s1
-//| Input:
-//|   nbin,bin_low,bin_high : definition de l'histogramme
-//|   lowbad,highbad : limites des pixels a utiliser
-//|   nsig : la zone de fit est definie a +/- nsig*sigma du maximum
-//|   modu : on prend 1 px sur modu
-//|   deb : debug flag
-//| Output:
-//|   means = moyenne fittee de l'histogramme (normalement -> 0)
-//|   renvoie le sigma du fond de ciel
-//|     et update le membre protected sigmaFond (si succes)
-//--
-{
-T pixv=0;
-T minadu = PutInRange((double) lowbad , pixv);
-T maxadu = PutInRange((double) highbad, pixv);
-volatile bool testl = (lowbad<highbad) ? true : false;
-
-if(nbin<5) THROW(inconsistentErr);
-if(nsig<=0.) nsig = 4.;
-if(modu<=0) modu = 1;
-means = 0.;
-if(deb>0)
-  cout << "SigmaCiel( nbin=" << nbin
-       << ", bin_low=" << bin_low
-       << ", bin_high=" << bin_high
-       << ", lowbad=" << lowbad
-       << ", highbad=" << highbad
-       << ", nsig=" << nsig
-       << ", modu=" << modu
-       << ", deb=" << deb << endl;
-
-// coeff pour corriger le sigma de (S-<S8>) par rapport au sigma de S
-// sigma(S) = sigma(S-<S8>) * 1/sqrt(1+1/8) = 2*sqrt(2)/3
-double coeff = 2.*Rac2/3.;
-
-TRY {
-
-  Histo tab(bin_low,bin_high,nbin);
-  tab.Errors();
-
-  int nmod = 0, nsum = 0;
-  double sum= 0., sum2 = 0.;
-  for(int j=1;j<YSize()-1;j++) for(int i=1;i<XSize()-1;i++) {
-    nmod++;
-    if( nmod%modu != 0 ) continue;
-    pixv = (*this)(i,j);
-    if ( testl && (pixv < minadu || pixv > maxadu) ) continue;
-    double vp = (double) pixv;
-    double pxv = 0.;
-    volatile int n = 0;
-    for(int j1=j-1;j1<=j+1;j1++) for(int i1=i-1;i1<=i+1;i1++) {
-      if ( i1 == i && j1 == j ) continue;
-      pixv = (*this)(i1,j1);
-      if ( testl && (pixv < minadu || pixv > maxadu) ) continue;
-      pxv += (double) pixv;
-      n++;
-    }
-    if ( n != 8 ) continue;
-    vp = vp - pxv/(double) n;
-    tab.Add( (float) vp );
-    nsum++;
-    sum += vp;
-    sum2 += vp*vp;
-  }
-
-  float ms = tab.BinCenter( tab.IMax() );
-  volatile float sg = 0.;
-  if( tab.BinNonNul() == 1 ) {
-    if(deb>0) cout << tab.BinNonNul()
-                   << " bins non nul dans l'histogramme" << endl;
-    if(nsum<=1) THROW(inconsistentErr);
-    sum /= (double) nsum;
-    sum2 = sum2/(double) nsum - sum*sum;
-    if(sum2<0.) THROW(inconsistentErr);
-    means = sum;
-    sum2 = sqrt(sum2) * coeff;
-    sigmaFond = sum2;
-    RETURN((float) sum2);
-  } else {
-    TRY {
-      sg = tab.FindWidth(0.5,deb-1) / 2.36;
-    } CATCHALL {
-      THROW_SAME;
-    } ENDTRY
-  }
-  double h = tab.VMax();
-  if(deb>0) cout << "from histo: ms=" << ms 
-                           << "  sg=" << sg
-                           << "  h=" << h << endl;
-
-  float xmin = ms - nsig*sg;
-  float xmax = ms + nsig*sg;
-  int imin = tab.FindBin(xmin);
-  int imax = tab.FindBin(xmax);
-  if( imax-imin+1 < 4 ) {imax++; imin--;}
-  if(imin<0) imin=0;
-  if(imax>=tab.NBins()) imax=tab.NBins()-1;
-  int nb = imax-imin+1;
-  if( nb < 4 ) THROW(inconsistentErr);
-  if(deb>0) printf("xrange=[%g,%g] irange=[%d,%d] nb=%d\n"
-                  ,xmin,xmax,imin,imax,nb);
-  if(deb>2) tab.Print(80,1.,-1.,0,imin,imax);
-
-  Gauss1DPol     myfunc;
-  GeneralFit     myfit(&myfunc);
-  GeneralFitData mydata(1,nb);
-  for(int i=imin;i<=imax;i++) {
-     float e = tab.Error(i);
-     if( e <= 0. ) e = 1.;
-     mydata.AddData1(tab.BinCenter(i),tab(i),e);
-   }
-
-  myfit.SetData(&mydata);
-  myfit.SetParam(0,h,h/50.);
-  myfit.SetParam(1,ms,sg/10.);
-  myfit.SetParam(2,sg,sg/10.);
-  myfit.SetBound(2,0.,sg*5.);
-  int rc = myfit.Fit();
-  if(rc<0) THROW(inconsistentErr);
-  if(deb>1) myfit.PrintFit();
-
-  means = myfit.GetParm(1);
-  sum2 = myfit.GetParm(2) * coeff;
-  sigmaFond = sum2;
-  RETURN((float) sum2);
-
-} CATCHALL {
-   THROW_SAME;
-} ENDTRY
-
-}
-
-
-/* --Methode-- (cmv 23/09/96) */
-template <class T>
-//++
-int Image<T>::MoySigma(float& mean,float& sigma,float lowbad,float highbad,int modu)
-//
-//	Calcul de la moyenne (mean) et du sigma (sigma) dans un pave
-//	en ne considerant que les pixels compris entre lowbad et highbad.
-//	Seul 1 px sur modu est utilise.
-//	La fonction retourne le nombre de pixels utilises pour le calcul.
-//--
-{
-T pixv=0;
-T minadu = PutInRange((double) lowbad , pixv);
-T maxadu = PutInRange((double) highbad, pixv);
-bool testl = (lowbad<highbad) ? true : false;
-
-if(modu<=0) modu = 1;
-mean = sigma = 0.;
-
-int rc = 0, n = 0;
-double m = 0., s = 0., mm, ss, v;
-
-for(int j=0;j<YSize();j++) {
-  mm = ss = 0.;
-  for(int i=0;i<XSize();i++) {
-    n++;
-    if( n%modu != 0 ) continue;
-    pixv = (*this)(i,j);
-    if( testl && (pixv < minadu || pixv > maxadu) ) continue;
-    v = (double) pixv;
-    rc++;
-    mm += v;
-    ss += v*v;
-  }
-  m += mm;
-  s += ss;
-}
-
-if(rc==0) return(-1);
-
-m /= (double) rc;
-s = s/(double) rc - m*m;
-if(s<0.) return(-2);
-
-mean  = (float) m;
-sigma = (float) sqrt(s);
-
-moyPix = mean;     // Mise a jour de la structure
-sigPix = sigma;
-
-return rc;
-}
-
-/* --Methode-- (cmv 23/09/96) */
-template <class T>
-//++
-int Image<T>::MoySigmaIter(float& mean,float& sigma,float lowbad,float highbad
-                          ,int modu,int nitermx,float perdiff,float scut,int deb)
-//
-//	Calcul de moyenne et sigma iterativement:
-//| lowbad,highbad = dynamique permise pour la valeur
-//|                  des pixels en ADU
-//| modu = 1 px sur modu est utilise
-//| nitermx = nombre maximum d'iterations permises
-//| perdiff = condition d'arret en pourcent sur la variation du sigma
-//| scut = coupure en nombre de sigma courant pour l'iteration suivante
-//| mean = moyenne retournee
-//| sigma = sigma retourne
-//| return <= 0 probleme, sinon (>0) nombre de pixels utilises
-//--
-{
-if( scut<=0. || nitermx<=0 || perdiff<=0. ) return 0;
-if(modu<=0) modu = 1;
-bool testl = (lowbad<highbad) ? true : false;
-
-mean = sigma = 0.;
-float sigmaold = 0;
-float xmin = lowbad;
-float xmax = highbad;
-int rc = 0;
-
-for(int it=0;it<nitermx;it++) {
-  rc = MoySigma(mean,sigma,xmin,xmax,modu);
-  if(deb>0) cout<<"MoySigmaIter mean="<<mean<<" sigma="<<sigma
-                <<" npix="<<rc<<" entre "<<xmin<<","<<xmax<<endl;
-  if( rc <= 0 || sigma<=0. ) return rc;
-  if( it>=1 && fabs((double)(sigma-sigmaold))/sigma < perdiff ) break;
-  xmin = mean - scut*sigma; if(testl && xmin<lowbad ) xmin = lowbad;
-  xmax = mean + scut*sigma; if(testl && xmax>highbad) xmax = highbad;
-  sigmaold = sigma;
-}
-
-return rc;
-}
-
-/* --Methode-- (cmv 23/09/96) */
-template <class T>
-//++
-int Image<T>::FondSigmaCiel(float lowbad,float highbad,int pvsz
-              ,float nbsig1,float nbsig2,float nbsig3
-              ,float binsg,float frac,int modu,int deb)
-//
-//	Calcul automatique du fond de ciel et du sigma ciel en utilisant
-//	les methodes precedentes et en calculant au mieux le binning.
-//| lowbad,highbad: dynamoque utile de l'image (ADU)
-//| pvsz : taille du pave a traiter (centre au milieu de l'image)
-//| nbsig1 : pour EstimeFdSg  -> calcul sgbmax (def=3.5).
-//| nbsig2 : pour FondCiel (histo entre X maxi +/- nbsig2*sgbmax
-//|                        nbin = 2.*nbsig2*binsg) (def=5).
-//| nbsig3 : pour SigmaCiel (histo entre 0 +/- nbsig3*sgbmax
-//|                         nbin = 2.*nbsig3*binsg) (def=5).
-//| binsg : taille du bin pour les histos de FondCiel et SigmaCiel
-//|                        (def=0.33)
-//| frac : pour EstimeFdSg(...,frac,...)  (def=0.33)
-//--
-{
-if(pvsz<=0) pvsz = 100;
-if(nbsig1<=0) nbsig1 = 3.5;
-if(nbsig2<=0) nbsig2 = 5.0;
-if(nbsig3<=0) nbsig3 = 5.0;
-if(binsg<=0) binsg = 0.33; binsg = 1./binsg;
-if(frac<=0.) frac = 0.33;
-if(deb<0) deb=0;
-int lpdb = (deb>=3) ? deb-2 : 0;
-int envd = 0;
-GetIntEnv("PDEBUG_FOND", envd);
-if (lpdb < envd) lpdb = envd;
-if (deb < envd) deb = envd;
-float xbmax = 0., sgbmax = 0.;
-int nbin,rc;
-float xmin,xmax,binw,means;
-
-// creation sous image
-int pvsx = pvsz, pvsy = pvsz;
-if( pvsx > XSize() ) pvsx = XSize();
-if( pvsy > YSize() ) pvsy = YSize();
-Image<T> *ssima = NULL;
-bool cree = false;
-if( pvsx == XSize() && pvsy == YSize() ) {
-  ssima = this;
-} else {
-  int orgx = XSize()/2 - pvsx/2;  if( orgx < 0 ) orgx = 0;
-  int orgy = YSize()/2 - pvsy/2;  if( orgy < 0 ) orgy = 0;
-  if( orgx + pvsx > XSize() ) pvsx = XSize() - orgx;
-  if( orgy + pvsy > YSize() ) pvsy = YSize() - orgy;
-  ssima = new Image<T>(pvsx,pvsy);
-  cree = true;
-  CopieImageF(*ssima,*this,orgx,orgy,pvsx,pvsy,0,0,0.,0.);
-}
-
-// moyenne et sigma approches sur sous-image
-rc = ssima->EstimeFdSg(xbmax,sgbmax,nbsig1,frac,lowbad,highbad,deb-1);
-if( cree ) delete ssima;
-if(rc<0) return -2;
-fond = xbmax;
-sigmaFond = sgbmax;
-
-// bin entier... pas forcement necessaire.
-xmin = xbmax - nbsig2*sgbmax;
-xmax = xbmax + nbsig2*sgbmax;
-nbin = (int)(2.*nbsig2*binsg); if(nbin<5) nbin=5;
-binw = (xmax-xmin)/nbin;
-if(deb>0) cout<<"bin auto: xmin="<<xmin<<" xmax="<<xmax
-              <<" nbin="<<nbin<<" binw="<<binw<<endl;
-HBinInt(nbin,xmin,xmax);
-binw = (xmax-xmin)/nbin;
-if(deb>0) cout<<"bin auto entier:  nbin="<<nbin<<" binw="<<binw
-              <<" entre "<<xmin<<","<<xmax<<endl;
-
-// Optimisation de modu
-if( modu <= 0 ) {
-  // 4 fois plus de pixels que dans le pre-pave
-  int npv = 4*pvsz*pvsz;
-  int nima = XSize()*YSize();
-  if( npv >= nima || nima < 10000 ) modu = 1;
-      else modu = (int)( (float) nima / (float) npv );
-  if(deb) cout<<"modulo choisi a "<<modu<<endl;
-}
-
-// moyenne evoluee
-TRY {
-  fond = FondCiel(nbin,xmin,xmax,3,0.5,modu,lpdb);
-  if(deb>0) cout <<"Fond de ciel = "<<fond<< endl;
-} CATCHALL {
-  if(deb>0) cout << "Echec FondCiel" << endl;
-  return(-3);
-} ENDTRY
-  
-// sigma evolue
-TRY {
-  float dyn = nbsig3*sgbmax;
-  int nbins = (int) (2.*nbsig3*binsg);
-  float binws = (2.*dyn)/nbins;
-  sigmaFond = SigmaCiel(nbins,-dyn,dyn,means,lowbad,highbad,4.,modu,lpdb);
-  if(deb>0) cout <<"Sigma fond de ciel = "<<sigmaFond
-                <<" (ms="<<means<<") sur "<<nbins
-                <<" bins de largeur "<<binws<< endl;
-} CATCHALL {
-  if(deb>0) cout << "Echec SigmaCiel" << endl;
-  return(-4);
-} ENDTRY
-
-// Impression finale
-if(deb) cout <<"ImgSigmaCiel: fond= "<<xbmax<<" / "<< fond
-             <<"   sigma= "<<sgbmax<<" / "<<sigmaFond<<endl;
-
-return 0;
-}
-
-
-
-/*  .......................................................  */
-/*         Fonctions de copie d'images et de paves           */
-/*  .......................................................  */
-
-
-/* Nouvelle-Fonction */ 
-template <class T2, class T1>
-void CopieImageF(Image<T2>& copie, Image<T1> const& pim,
-         int org_pim_x, int org_pim_y,            /* origine pave a copier */
-         int pim_lpav_x, int pim_lpav_y,          /* largeur pave a copier */
-         int org_copie_x, int org_copie_y,        /* origine copie         */
-         double cutmin, double cutmax)            /* coupure pour max range*/
-
-/* Copie d'une image (pim) ds l'autre (copie) a partir d'un  */
-/* offset specifie en pixel                                  */
-/* attention: pas d'offset -> org_x = org_y = 0              */
-{
-int i,j;
-// int x,y;  $CHECK$ Reza 21/06/99 changement de methode de calcul des bornes
-const T1* pt_pim;
-T2* pt_copie;
-double pim_pix;
-int l_copie_x,l_copie_y;
-int step_copie_x;
-int step_pim_x;
-int pim_siz_x, pim_siz_y;
-// int copie_siz_x, copie_siz_y;  $CHECK$ Reza 21/06/99 changement de methode de calcul des bornes
-int switch_copie;
-
-pim_siz_x=pim.XSize();
-pim_siz_y=pim.YSize();
-if((org_pim_x < 0) || (org_pim_x > pim_siz_x))
-  { cout<< "CopieImage_erreure : org_pim_x: " <<org_pim_x<<" < 0 ou > a "<<pim_siz_x<<endl;
-    THROW(rangeCheckErr);}
-if((org_pim_y < 0) || (org_pim_y > pim_siz_y))
-  { cout<< "CopieImage_erreure : org_pim_y: " <<org_pim_y<<" < 0 ou > a "<<pim_siz_y<<endl;
-    THROW(rangeCheckErr);}
-
-if( (org_copie_x < 0) || (org_copie_x > copie.XSize()) )
-  { cout<< "CopieImage_erreure : org_copie_x: " <<org_copie_x<<" < 0 ou > a "<< copie.XSize() << endl;
-    THROW(rangeCheckErr);}
-if( (org_copie_y < 0) || (org_copie_y > copie.YSize()) )
-  { cout<< "CopieImage_erreure : org_copie_y: " <<org_copie_y<<" < 0 ou > a "<< copie.YSize() << endl;
-    THROW(rangeCheckErr);}
-
-/* $CHECK$ Reza 21/06/99  Changement de methode de calcul ------
-$CHECK$ Reza 21/06/99 , je change la taille a copier en fonction de l'origine de copie 
-copie_siz_x=copie.XSize()-org_copie_x;
-copie_siz_y=copie.YSize()-org_copie_y;
-
-x=pim_lpav_x;
-if(x > (pim_siz_x-org_pim_x)) x=pim_siz_x-org_pim_x;
-step_pim_x = pim_siz_x-x;
-
-if(x < copie_siz_x)
-  {
-   l_copie_x=x;
-   step_copie_x=copie_siz_x-x;
-  }
-else
-  {
-   l_copie_x=copie_siz_x;
-   step_copie_x=0;
-   step_pim_x=step_pim_x+x-copie_siz_x;
-   }
-
-if(org_copie_x  > 0 )
-  {
-  int x=copie_siz_x-org_copie_x;
-  if(x < l_copie_x )
-    {
-     step_pim_x=step_pim_x+l_copie_x-x;
-     l_copie_x=x;
-     step_copie_x=org_copie_x;
-    }
-  else
-    { 
-     step_copie_x=copie_siz_x-l_copie_x;
-    }
-  }
-
-y=pim_lpav_y;
-if(y > (pim_siz_y-org_pim_y)) y=pim_siz_y-org_pim_y;
-
-if(y < copie_siz_y)
-  {
-   l_copie_y=y;
-  }
-else
-  {
-   l_copie_y=copie_siz_y;
-   }
-
-*/
-
-l_copie_x = copie.XSize()-org_copie_x;
-l_copie_y = copie.YSize()-org_copie_y;
-if ( pim_lpav_x > (pim.XSize()-org_pim_x) )  pim_lpav_x = pim.XSize()-org_pim_x;
-if ( pim_lpav_y > (pim.YSize()-org_pim_y) )  pim_lpav_y = pim.YSize()-org_pim_y;
-if ( (pim_lpav_x > 0) && (l_copie_x > pim_lpav_x) )  l_copie_x = pim_lpav_x;
-if ( (pim_lpav_y > 0) && (l_copie_y > pim_lpav_y) )  l_copie_y = pim_lpav_y;
-step_pim_x = pim.XSize()-l_copie_x;
-step_copie_x = copie.XSize()-l_copie_x;
-
-pt_pim  = pim.ImagePtr() + org_pim_y*pim.XSize() + org_pim_x;
-pt_copie=copie.ImagePtr() + org_copie_y*copie.XSize() + org_copie_x;
-
-switch((int)ConvType(*pt_pim,*pt_copie)) {
-  case t_same: case t_up:
-    switch_copie=0;
-  break;
-  case t_spe: case t_down:
-    switch_copie=1;
-  break;
-}
-
-if(cutmin < cutmax) switch_copie *= 2;
-
-switch(switch_copie) {
-  case 0:
-    for (j=0; j< l_copie_y; j++)
-      {
-      for(i=0; i< l_copie_x; i++)
-        {
-        *pt_copie++ =(T2)*pt_pim++;
-        }
-      pt_pim   += step_pim_x;
-      pt_copie += step_copie_x;
-      }
-  break;
-  case 1:
-    for (j=0; j< l_copie_y; j++)
-      {
-      for(i=0; i< l_copie_x; i++)
-        {
-        pim_pix = *pt_pim++;
-        *pt_copie++ = PutInRange(pim_pix, *pt_copie);
-        }
-      pt_pim   += step_pim_x;
-      pt_copie += step_copie_x;
-      }
-  break;
-  case 2:
-    for (j=0; j< l_copie_y; j++)
-      {
-      for(i=0; i< l_copie_x; i++)
-        {
-        pim_pix = *pt_pim++;
-        *pt_copie++ = (T2)SharePix(pim_pix,*pt_copie,cutmin,cutmax);
-        }
-      pt_pim   += step_pim_x;
-      pt_copie += step_copie_x;
-      }
-  break;
-}
-
-copie.SetOrg( pim.XOrg()+org_pim_x-org_copie_x, pim.YOrg()+org_pim_y-org_copie_y);
-}
-
-
-/* Nouvelle-Fonction */ 
-template <class T2, class T1>
-void CopieImage(Image<T2>& copie , Image<T1> const& pim)
-{
-if (!pim.ImagePtr())   THROW(nullPtrErr);
-if (!copie.ImagePtr()) copie.Allocate(pim.XSize(),pim.YSize());
-
-CopieImageF(copie, pim,0,0,pim.XSize(),pim.YSize(),0,0,0., 0.);
-}
-
-/* Nouvelle-Fonction */ 
-template <class T2, class T1>
-void CopieImage(Image<T2>& copie , Image<T1> const& pim,
-                int org_pim_x    , int org_pim_y,
-                int pim_lpav_x   , int pim_lpav_y,
-                int org_copie_x  , int org_copie_y,
-                double cutmin    , double cutmax )
-{
-if (!pim.ImagePtr())   THROW(nullPtrErr);
-if (!copie.ImagePtr()) THROW(nullPtrErr);
-copie.SetOrg( pim.XOrg()+org_pim_x-org_copie_x, pim.YOrg()+org_pim_y-org_copie_y);
-// copie.SetOrg(org_pim_x,org_pim_y);
-
-/* Reza 28/04/95 : Je protege pour le moment contre les pave en
-dehors de l'image, mais je veux pouvoir copier des paves decale par
-rapport aux bornes de l'image source  Re- CMV+Reza 30/09/96 */
-/* $CHECK$ Reza 21/06/99 - Ca devrait etre OK  */
-if ( (org_pim_x < 0) || (org_pim_y < 0) ||
-     (org_pim_x >= pim.XSize() ) || (org_pim_y >= pim.YSize() ) ||
-     ((org_pim_x+copie.XSize()) > pim.XSize()) ||
-     ((org_pim_y+copie.YSize()) > pim.YSize()) ) copie.Zero(); 
-
-if ( (org_pim_x >= pim.XSize()) || (org_pim_y >= pim.YSize()) ) {
-  copie.SetOrg( pim.XOrg()+org_pim_x-org_copie_x, pim.YOrg()+org_pim_y-org_copie_y);
-  return;
-}   
-// if ( (org_pim_x < 0) || (org_pim_y < 0) ||
-//      (org_pim_x >= pim.XSize() ) || (org_pim_y >= pim.YSize() )) return;
-
-int oox = org_pim_x;
-int ooy = org_pim_y;
-int ocx = org_copie_x;
-int ocy = org_copie_y;
-if (oox < 0)  { ocx -= oox;  oox = 0; }
-if (ooy < 0)  { ocy -= ooy;  ooy = 0; }
-/*  Fin de $CHECK$  */
-
-// void CopieImageF(Image<T2>& copie, Image<T1> const& pim,
-//         int org_pim_x, int org_pim_y,            /* origine pave a copier */
-//         int pim_lpav_x, int pim_lpav_y,          /* largeur pave a copier */
-//         int org_copie_x, int org_copie_y,        /* origine copie         */
-//         double cutmin, double cutmax)            /* coupure pour max range*/
-
-if((pim_lpav_x <= 0) || (pim_lpav_x > pim.XSize())) pim_lpav_x=pim.XSize();
-if((pim_lpav_y <= 0) || (pim_lpav_y > pim.YSize())) pim_lpav_y=pim.YSize();
-try {
-  CopieImageF(copie, pim, oox, ooy, 
-              pim_lpav_x, pim_lpav_y,
-              ocx, ocy, cutmin,cutmax);
-  }  catch(RangeCheckError) {
-// $PLANCKCHECK$   if (merr != rangeCheckErr) THROW(merr);  // Re- $CHECK$ CMV+Reza 30/09/96
-  } ENDTRY
-
-copie.SetOrg( pim.XOrg()+org_pim_x-org_copie_x, pim.YOrg()+org_pim_y-org_copie_y);
-}
-
-
-/* Nouvelle-Fonction */ 
-template <class T2, class T1>
-void CopiePave ( Image<T2>& pave , Image<T1> const& pim,
-                 float xc, float yc,
-                 double cutmin, double cutmax) 
-{
-int ix, iy;
-
-xc -= 0.5 * (float)(pave.XSize()-1);
-yc -= 0.5 * (float)(pave.YSize()-1);
-//  CopiePave tient compte de l'origine de l'image de depart   Reza 18/9/96
-xc -= pim.XOrg();     yc -= pim.YOrg();
-
-if ( xc >= 0.)  ix = (int)xc;
-else ix = (int)(xc-1.0);
-if ( yc >= 0.)  iy = (int)yc;
-else iy = (int)(yc-1.0);
-CopieImage(pave, pim, ix, iy, 0, 0, 0, 0, cutmin, cutmax ) ;
-}
-
-
-/* Nouvelle-Fonction */ 
-template <class T>
-void RzCopieImage(Image<T>& copie, RzImage const& pim,
-                  int org_pim_x , int org_pim_y,
-                  int pim_lpav_x, int pim_lpav_y,
-                  int org_copie_x, int org_copie_y,
-                  double cutmin , double cutmax)
-{
-  switch (pim.PixelType()) {
-  case kuint_2: {
-    ImageU2 src((RzImage&)pim);
-    CopieImage(copie, src, org_pim_x , org_pim_y,
-               pim_lpav_x, pim_lpav_y, org_copie_x, 
-               org_copie_y, cutmin, cutmax );
-    break;
-    }
-  case kint_2: {
-    ImageI2 src((RzImage&)pim);
-    CopieImage(copie, src, org_pim_x , org_pim_y,
-               pim_lpav_x, pim_lpav_y, org_copie_x, 
-               org_copie_y, cutmin, cutmax );
-    break;
-    }
-  case kint_4: {
-    ImageI4 src((RzImage&)pim);
-    CopieImage(copie, src, org_pim_x , org_pim_y,
-               pim_lpav_x, pim_lpav_y, org_copie_x, 
-               org_copie_y, cutmin, cutmax );
-    break;
-    }
-  case kr_4: {
-    ImageR4 src((RzImage&)pim);
-    CopieImage(copie, src, org_pim_x , org_pim_y,
-               pim_lpav_x, pim_lpav_y, org_copie_x, 
-               org_copie_y, cutmin, cutmax );
-    break;
-    }
-  case kr_8:
-  case kuint_4:
-  case kuint_1:
-  case kint_1:
-    cerr << " RzCopieImage(...) / Error, Unsupported image type (kr_8/ kuint_4/ kuint_1/ kint_1) " 
-         << (int)pim.PixelType() << "\n";
-    break;
-  default:
-    cerr << " RzCopieImage(...) / Error, Unknown image type !" <<  (int)pim.PixelType() << "\n";
-    break;
-  } 
-}
-
-
-/* Nouvelle-Fonction */ 
-template <class T>
-void RzCopieImage(Image<T>& copie, RzImage const& pim)
-{
-  switch (pim.PixelType()) {
-  case kuint_2: {
-    ImageU2 src((RzImage&)pim);
-    CopieImage(copie, src);
-    break;
-    }
-  case kint_2: {
-    ImageI2 src((RzImage&)pim);
-    CopieImage(copie, src);
-    break;
-    }
-  case kint_4: {
-    ImageI4 src((RzImage&)pim);
-    CopieImage(copie, src);
-    break;
-    }
-  case kr_4: {
-    ImageR4 src((RzImage&)pim);
-    CopieImage(copie, src);
-    break;
-    }
-  case kr_8:
-  case kuint_4:
-  case kuint_1:
-  case kint_1:
-    cerr << " RzCopieImage() / Error, Unsupported image type (kr_8/ kuint_4/ kuint_1/ kint_1) " 
-         << (int)pim.PixelType() << "\n";
-    break;
-  default:
-    cerr << " RzCopieImage() / Error, Unknown image type ! " <<  (int)pim.PixelType() << "\n";
-    break;
-  } 
-}
-
-/* Nouvelle-Fonction */ 
-template <class T>
-void RzCopiePave(Image<T> & pave, RzImage const & pim,
-                 float xc, float yc, 
-                 double cutmin, double cutmax) 
-{
-int ix, iy;
-
-xc -= 0.5 * (float)(pave.XSize()-1);
-yc -= 0.5 * (float)(pave.YSize()-1);
-//  RzCopiePave tient compte de l'origine de l'image de depart   Reza 18/9/96
-xc -= pim.XOrg();     yc -= pim.YOrg();
-
-if ( xc >= 0.)  ix = (int)xc;
-else ix = (int)(xc-1.0);
-if ( yc >= 0.)  iy = (int)yc;
-else iy = (int)(yc-1.0);
-
-RzCopieImage(pave, pim, ix, iy, 0, 0, 0, 0, cutmin, cutmax) ;
-}
-
-
-/* Nouvelle-Fonction */ 
-void RzPrintImage(RzImage & img)
-{
-switch (img.PixelType()) 
-  {
-  case kuint_1: 
-    {
-    ImageU1 src((RzImage&)img);
-    cout << src ;
-    break;
-    }
-  case kuint_2: 
-    {
-    ImageU2 src((RzImage&)img);
-    cout << src ;
-    break;
-    }
-  case kint_2: 
-    {
-    ImageI2 src((RzImage&)img);
-    cout << src ;
-    break;
-    }
-  case kint_4: 
-    {
-    ImageI4 src((RzImage&)img);
-    cout << src ;
-    break;
-    }
-  case kr_4: 
-    {
-    ImageR4 src((RzImage&)img);
-    cout << src ;
-    break;
-    }
-  case kr_8:
-  case kuint_4:
-  case kint_1:
-    cerr << " RzPrintImage() / Error, Unsupported image type (kr_8/kuint_4/ kint_1) " 
-         << (int)img.PixelType() << "\n";
-    break;
-  default:
-    cerr << " RzPrintImage() / Error, Unknown image type " <<  (int)img.PixelType() << "\n";
-    break;
-  } 
-}
-
-
-// ********** INSTANCES
-#if defined(__xlC) || defined(__aCC__)
-void instancetempcimage(int n)
-{
-// #pragma define_template
-/* Cette fonction sert uniquement a forcer le compilo a instancier les
-  classes/fonctions template   */
-
-int m = n-50;
-ImageU1  iu1(n,n), xiu1(m,m);
-ImageU2  iu2(n,n), xiu2(m,m);
-ImageI2  ii2(n,n), xii2(m,m);
-ImageI4  ii4(n,n), xii4(m,m);
-ImageR4  ir4(n,n), xir4(m,m);
-RzImage  rzi(kr_4, n, n);
-
-cout << iu1;
-cout << iu2;
-cout << ii2;
-cout << ii4;
-cout << ir4;
-
-CopieImageF(iu2, xiu2, 50, 50);
-CopieImageF(iu2, xii2, 50, 50);
-CopieImageF(iu2, xii4, 50, 50);
-CopieImageF(iu2, xir4, 50, 50);
-CopieImageF(ii2, xiu2, 50, 50);
-CopieImageF(ii2, xii2, 50, 50);
-CopieImageF(ii2, xii4, 50, 50);
-CopieImageF(ii2, xir4, 50, 50);
-CopieImageF(ii4, xiu2, 50, 50);
-CopieImageF(ii4, xii2, 50, 50);
-CopieImageF(ii4, xii4, 50, 50);
-CopieImageF(ii4, xir4, 50, 50);
-CopieImageF(ir4, xiu2, 50, 50);
-CopieImageF(ir4, xii2, 50, 50);
-CopieImageF(ir4, xii4, 50, 50);
-CopieImageF(ir4, xir4, 50, 50);
-
-CopieImage(iu2, xiu2);
-CopieImage(iu2, xii2);
-CopieImage(iu2, xii4);
-CopieImage(iu2, xir4);
-CopieImage(ii2, xiu2);
-CopieImage(ii2, xii2);
-CopieImage(ii2, xii4);
-CopieImage(ii2, xir4);
-CopieImage(ii4, xiu2);
-CopieImage(ii4, xii2);
-CopieImage(ii4, xii4);
-CopieImage(ii4, xir4);
-CopieImage(ir4, xiu2);
-CopieImage(ir4, xii2);
-CopieImage(ir4, xii4);
-CopieImage(ir4, xir4);
-
-CopieImage(iu2, xiu2, 50, 50);
-CopieImage(iu2, xii2, 50, 50);
-CopieImage(iu2, xii4, 50, 50);
-CopieImage(iu2, xir4, 50, 50);
-CopieImage(ii2, xiu2, 50, 50);
-CopieImage(ii2, xii2, 50, 50);
-CopieImage(ii2, xii4, 50, 50);
-CopieImage(ii2, xir4, 50, 50);
-CopieImage(ii4, xiu2, 50, 50);
-CopieImage(ii4, xii2, 50, 50);
-CopieImage(ii4, xii4, 50, 50);
-CopieImage(ii4, xir4, 50, 50);
-CopieImage(ir4, xiu2, 50, 50);
-CopieImage(ir4, xii2, 50, 50);
-CopieImage(ir4, xii4, 50, 50);
-CopieImage(ir4, xir4, 50, 50);
-
-CopiePave(iu2, xiu2, (float)25., (float)25.);
-CopiePave(iu2, xii2, (float)25., (float)25.);
-CopiePave(iu2, xii4, (float)25., (float)25.);
-CopiePave(iu2, xir4, (float)25., (float)25.);
-CopiePave(ii2, xiu2, (float)25., (float)25.);
-CopiePave(ii2, xii2, (float)25., (float)25.);
-CopiePave(ii2, xii4, (float)25., (float)25.);
-CopiePave(ii2, xir4, (float)25., (float)25.);
-CopiePave(ii4, xiu2, (float)25., (float)25.);
-CopiePave(ii4, xii2, (float)25., (float)25.);
-CopiePave(ii4, xii4, (float)25.,(float) 25.);
-CopiePave(ii4, xir4, (float)25., (float)25.);
-CopiePave(ir4, xiu2, (float)25., (float)25.);
-CopiePave(ir4, xii2, (float)25., (float)25.);
-CopiePave(ir4, xii4, (float)25., (float)25.);
-CopiePave(ir4, xir4, (float)25., (float)25.);
-
-RzCopieImage(iu2, rzi, 50, 50);
-RzCopieImage(ii2, rzi, 50, 50);
-RzCopieImage(ii4, rzi, 50, 50);
-RzCopieImage(ir4, rzi, 50, 50);
-
-RzCopieImage(iu2, rzi);
-RzCopieImage(ii2, rzi);
-RzCopieImage(ii4, rzi);
-RzCopieImage(ir4, rzi);
-
-RzCopiePave(iu2, rzi, (float)25., (float)25.);
-RzCopiePave(ii2, rzi, (float)25., (float)25.);
-RzCopiePave(ii4, rzi, (float)25., (float)25.);
-RzCopiePave(ir4, rzi, (float)25., (float)25.);
-
-return;
-}
-
+#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
+template class Image<uint_2>;
+template class Image<int_4>;
+template class Image<int_8>;
+template class Image<r_4>;
+template class Image<r_8>;
+//template class Image< complex<r_4> >;
+//template class Image< complex<r_8> >;
 #endif
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template Image<uint_1>
-#pragma define_template Image<uint_2>
-#pragma define_template Image<int_2>
-#pragma define_template Image<int_4>
-#pragma define_template Image<r_4>
-
-// pour supprimer les message Warning: Unresolved:
-//                                     __ls__XR7ostreamRC10Image__TUc
-
-ostream& operator << (ostream& s, ImageU1 const& pim)
-{
-cout << "operator << (ostream, ImageU1) Not implemented ..." << endl;
-return(s);
-}
-
-// CopieImageF
-#pragma define_template CopieImageF < uint_1 , uint_1 >
-#pragma define_template CopieImageF < uint_1 , uint_2 >
-#pragma define_template CopieImageF < uint_1 , int_2 >
-#pragma define_template CopieImageF < uint_1 , int_4 >
-#pragma define_template CopieImageF < uint_1 , r_4 >
-
-#pragma define_template CopieImageF < uint_2 , uint_2 >
-#pragma define_template CopieImageF < uint_2 , int_2 >
-#pragma define_template CopieImageF < uint_2 , int_4 >
-#pragma define_template CopieImageF < uint_2 , r_4 >
-
-#pragma define_template CopieImageF < int_2 , uint_2 >
-#pragma define_template CopieImageF < int_2 , int_2 >
-#pragma define_template CopieImageF < int_2 , int_4 >
-#pragma define_template CopieImageF < int_2 , r_4 >
-
-#pragma define_template CopieImageF < int_4 , uint_2 >
-#pragma define_template CopieImageF < int_4 , int_2 >
-#pragma define_template CopieImageF < int_4 , int_4 >
-#pragma define_template CopieImageF < int_4 , r_4 >
-
-#pragma define_template CopieImageF < r_4 , uint_2 >
-#pragma define_template CopieImageF < r_4 , int_2 >
-#pragma define_template CopieImageF < r_4 , int_4 >
-#pragma define_template CopieImageF < r_4 , r_4 >
-
-// CopieImage
-#pragma define_template CopieImage < uint_2 , uint_2 >
-#pragma define_template CopieImage < uint_2 , int_2 >
-#pragma define_template CopieImage < uint_2 , int_4 >
-#pragma define_template CopieImage < uint_2 , r_4 >
-
-#pragma define_template CopieImage < int_2 , uint_2 >
-#pragma define_template CopieImage < int_2 , int_2 >
-#pragma define_template CopieImage < int_2 , int_4 >
-#pragma define_template CopieImage < int_2 , r_4 >
-
-#pragma define_template CopieImage < int_4 , uint_2 >
-#pragma define_template CopieImage < int_4 , int_2 >
-#pragma define_template CopieImage < int_4 , int_4 >
-#pragma define_template CopieImage < int_4 , r_4 >
-
-#pragma define_template CopieImage < r_4 , uint_2 >
-#pragma define_template CopieImage < r_4 , int_2 >
-#pragma define_template CopieImage < r_4 , int_4 >
-#pragma define_template CopieImage < r_4 , r_4 >
-
-// CopiePave
-#pragma define_template CopiePave < uint_2 , uint_2 >
-#pragma define_template CopiePave < uint_2 , int_2 >
-#pragma define_template CopiePave < uint_2 , int_4 >
-#pragma define_template CopiePave < uint_2 , r_4 >
-
-#pragma define_template CopiePave < int_2 , uint_2 >
-#pragma define_template CopiePave < int_2 , int_2 >
-#pragma define_template CopiePave < int_2 , int_4 >
-#pragma define_template CopiePave < int_2 , r_4 >
-
-#pragma define_template CopiePave < int_4 , uint_2 >
-#pragma define_template CopiePave < int_4 , int_2 >
-#pragma define_template CopiePave < int_4 , int_4 >
-#pragma define_template CopiePave < int_4 , r_4 >
-
-#pragma define_template CopiePave < r_4 , uint_2 >
-#pragma define_template CopiePave < r_4 , int_2 >
-#pragma define_template CopiePave < r_4 , int_4 >
-#pragma define_template CopiePave < r_4 , r_4 >
-
-//RzCopieImage
-#pragma define_template RzCopieImage < uint_2 >
-#pragma define_template RzCopieImage < int_2 >
-#pragma define_template RzCopieImage < int_4 >
-#pragma define_template RzCopieImage < r_4 >
-
-//RzCopiePave
-#pragma define_template RzCopiePave < uint_2 >
-#pragma define_template RzCopiePave < int_2 >
-#pragma define_template RzCopiePave < int_4 >
-#pragma define_template RzCopiePave < r_4 >
-
-
-#endif
-
-
-#if defined(ANSI_TEMPLATES) 
-template class Image<uint_1>;
-template class Image<uint_2>;
-template class Image<int_2>;
-template class Image<int_4>;
-template class Image<r_4>;
-
-#if !defined(__aCC__)     // HP - aCC a du mal avec les fonctions templates 
-
-template void CopieImageF<uint_2, uint_2>(Image<uint_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<uint_2,  int_2>(Image<uint_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<uint_2,  int_4>(Image<uint_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<uint_2,    r_4>(Image<uint_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_2, uint_2>(Image< int_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_2,  int_2>(Image< int_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_2,  int_4>(Image< int_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_2,    r_4>(Image< int_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_4, uint_2>(Image< int_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_4,  int_2>(Image< int_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_4,  int_4>(Image< int_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF< int_4,    r_4>(Image< int_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<   r_4, uint_2>(Image<   r_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<   r_4,  int_2>(Image<   r_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<   r_4,  int_4>(Image<   r_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF<   r_4,    r_4>(Image<   r_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-
-template void CopieImage<uint_2, uint_2>(Image<uint_2>&, Image<uint_2> const&);
-template void CopieImage<uint_2,  int_2>(Image<uint_2>&, Image< int_2> const&);
-template void CopieImage<uint_2,  int_4>(Image<uint_2>&, Image< int_4> const&);
-template void CopieImage<uint_2,    r_4>(Image<uint_2>&, Image<   r_4> const&);
-template void CopieImage< int_2, uint_2>(Image< int_2>&, Image<uint_2> const&);
-template void CopieImage< int_2,  int_2>(Image< int_2>&, Image< int_2> const&);
-template void CopieImage< int_2,  int_4>(Image< int_2>&, Image< int_4> const&);
-template void CopieImage< int_2,    r_4>(Image< int_2>&, Image<   r_4> const&);
-template void CopieImage< int_4, uint_2>(Image< int_4>&, Image<uint_2> const&);
-template void CopieImage< int_4,  int_2>(Image< int_4>&, Image< int_2> const&);
-template void CopieImage< int_4,  int_4>(Image< int_4>&, Image< int_4> const&);
-template void CopieImage< int_4,    r_4>(Image< int_4>&, Image<   r_4> const&);
-template void CopieImage<   r_4, uint_2>(Image<   r_4>&, Image<uint_2> const&);
-template void CopieImage<   r_4,  int_2>(Image<   r_4>&, Image< int_2> const&);
-template void CopieImage<   r_4,  int_4>(Image<   r_4>&, Image< int_4> const&);
-template void CopieImage<   r_4,    r_4>(Image<   r_4>&, Image<   r_4> const&);
-
-template void CopieImage<uint_2, uint_2>(Image<uint_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<uint_2,  int_2>(Image<uint_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<uint_2,  int_4>(Image<uint_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<uint_2,    r_4>(Image<uint_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_2, uint_2>(Image< int_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_2,  int_2>(Image< int_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_2,  int_4>(Image< int_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_2,    r_4>(Image< int_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_4, uint_2>(Image< int_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_4,  int_2>(Image< int_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_4,  int_4>(Image< int_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage< int_4,    r_4>(Image< int_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<   r_4, uint_2>(Image<   r_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<   r_4,  int_2>(Image<   r_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<   r_4,  int_4>(Image<   r_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage<   r_4,    r_4>(Image<   r_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-
-template void CopiePave<uint_2, uint_2>(Image<uint_2>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave<uint_2,  int_2>(Image<uint_2>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave<uint_2,  int_4>(Image<uint_2>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave<uint_2,    r_4>(Image<uint_2>&, Image<   r_4> const&, float, float, double, double);
-template void CopiePave< int_2, uint_2>(Image< int_2>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave< int_2,  int_2>(Image< int_2>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave< int_2,  int_4>(Image< int_2>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave< int_2,    r_4>(Image< int_2>&, Image<   r_4> const&, float, float, double, double);
-template void CopiePave< int_4, uint_2>(Image< int_4>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave< int_4,  int_2>(Image< int_4>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave< int_4,  int_4>(Image< int_4>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave< int_4,    r_4>(Image< int_4>&, Image<   r_4> const&, float, float, double, double);
-template void CopiePave<   r_4, uint_2>(Image<   r_4>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave<   r_4,  int_2>(Image<   r_4>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave<   r_4,  int_4>(Image<   r_4>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave<   r_4,    r_4>(Image<   r_4>&, Image<   r_4> const&, float, float, double, double);
-
-
-template void RzCopieImage<uint_2>(Image<uint_2> &, RzImage const &, int, int, int, int, int, int, double, double);
-template void RzCopieImage< int_2>(Image< int_2> &, RzImage const &, int, int, int, int, int, int, double, double);
-template void RzCopieImage< int_4>(Image< int_4> &, RzImage const &, int, int, int, int, int, int, double, double);
-template void RzCopieImage<   r_4>(Image<   r_4> &, RzImage const &, int, int, int, int, int, int, double, double);
-
-template void RzCopieImage<uint_2>(Image<uint_2> &, RzImage const &);
-template void RzCopieImage< int_2>(Image< int_2> &, RzImage const &);
-template void RzCopieImage< int_4>(Image< int_4> &, RzImage const &);
-template void RzCopieImage<   r_4>(Image<   r_4> &, RzImage const &);
-
-template void RzCopiePave<uint_2>(Image<uint_2> &, RzImage const &, float, float, double, double);
-template void RzCopiePave< int_2>(Image< int_2> &, RzImage const &, float, float, double, double);
-template void RzCopiePave< int_4>(Image< int_4> &, RzImage const &, float, float, double, double);
-template void RzCopiePave<   r_4>(Image<   r_4> &, RzImage const &, float, float, double, double);
-
-#endif   // Pb avec HP aCC
-
-#endif
-
-
-#ifdef __GNU_TEMPLATES__
-template class Image<bool>;
-template class Image<uint_1>;
-template class Image<uint_2>;
-template class Image<int_2>;
-template class Image<int_4>;
-template class Image<r_4>;
-
-
-template void CopieImageF(Image<uint_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<uint_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<uint_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<uint_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image< int_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<   r_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<   r_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<   r_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImageF(Image<   r_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-
-template void CopieImage(Image<uint_2>&, Image<uint_2> const&);
-template void CopieImage(Image<uint_2>&, Image< int_2> const&);
-template void CopieImage(Image<uint_2>&, Image< int_4> const&);
-template void CopieImage(Image<uint_2>&, Image<   r_4> const&);
-template void CopieImage(Image< int_2>&, Image<uint_2> const&);
-template void CopieImage(Image< int_2>&, Image< int_2> const&);
-template void CopieImage(Image< int_2>&, Image< int_4> const&);
-template void CopieImage(Image< int_2>&, Image<   r_4> const&);
-template void CopieImage(Image< int_4>&, Image<uint_2> const&);
-template void CopieImage(Image< int_4>&, Image< int_2> const&);
-template void CopieImage(Image< int_4>&, Image< int_4> const&);
-template void CopieImage(Image< int_4>&, Image<   r_4> const&);
-template void CopieImage(Image<   r_4>&, Image<uint_2> const&);
-template void CopieImage(Image<   r_4>&, Image< int_2> const&);
-template void CopieImage(Image<   r_4>&, Image< int_4> const&);
-template void CopieImage(Image<   r_4>&, Image<   r_4> const&);
-
-template void CopieImage(Image<uint_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<uint_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<uint_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<uint_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_2>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_2>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_2>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_2>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image< int_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<   r_4>&, Image<uint_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<   r_4>&, Image< int_2> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<   r_4>&, Image< int_4> const&, int, int, int, int, int, int, double, double);
-template void CopieImage(Image<   r_4>&, Image<   r_4> const&, int, int, int, int, int, int, double, double);
-
-template void CopiePave(Image<uint_2>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave(Image<uint_2>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave(Image<uint_2>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave(Image<uint_2>&, Image<   r_4> const&, float, float, double, double);
-template void CopiePave(Image< int_2>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave(Image< int_2>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave(Image< int_2>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave(Image< int_2>&, Image<   r_4> const&, float, float, double, double);
-template void CopiePave(Image< int_4>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave(Image< int_4>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave(Image< int_4>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave(Image< int_4>&, Image<   r_4> const&, float, float, double, double);
-template void CopiePave(Image<   r_4>&, Image<uint_2> const&, float, float, double, double);
-template void CopiePave(Image<   r_4>&, Image< int_2> const&, float, float, double, double);
-template void CopiePave(Image<   r_4>&, Image< int_4> const&, float, float, double, double);
-template void CopiePave(Image<   r_4>&, Image<   r_4> const&, float, float, double, double);
-
-
-template void RzCopieImage(Image<uint_2> &, RzImage const &, int, int, int, int, int, int, double, double);
-template void RzCopieImage(Image< int_2> &, RzImage const &, int, int, int, int, int, int, double, double);
-template void RzCopieImage(Image< int_4> &, RzImage const &, int, int, int, int, int, int, double, double);
-template void RzCopieImage(Image<   r_4> &, RzImage const &, int, int, int, int, int, int, double, double);
-
-template void RzCopieImage(Image<uint_2> &, RzImage const &);
-template void RzCopieImage(Image< int_2> &, RzImage const &);
-template void RzCopieImage(Image< int_4> &, RzImage const &);
-template void RzCopieImage(Image<   r_4> &, RzImage const &);
-
-template void RzCopiePave(Image<uint_2> &, RzImage const &, float, float, double, double);
-template void RzCopiePave(Image< int_2> &, RzImage const &, float, float, double, double);
-template void RzCopiePave(Image< int_4> &, RzImage const &, float, float, double, double);
-template void RzCopiePave(Image<   r_4> &, RzImage const &, float, float, double, double);
-
-#endif
-
Index: trunk/SophyaLib/NTools/cimage.h
===================================================================
--- trunk/SophyaLib/NTools/cimage.h	(revision 1103)
+++ trunk/SophyaLib/NTools/cimage.h	(revision 1104)
@@ -1,6 +1,5 @@
 // This may look like C code, but it is really -*- C++ -*-
-//  Classes image typee      E.Aubourg , E. Lesquoy     
-//                           Modifs R. Ansari   04/95
-
+//  Classes image heritant de TMatrix<T>
+//                       R.Ansari, C.Magneville 07/2000    
 // LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
 
@@ -8,12 +7,5 @@
 #define CIMAGE_SEEN
 
-#include <iostream.h>
-#include <iomanip.h>
-#include "rzimage.h"
-
-// Flags de verifications sur les indices  dans rzimage.h 
-
-//#define IMGRGCHECK
-//#define IMGVOIDCHECK
+#include "tmatrix.h"
 
 
@@ -21,278 +13,79 @@
 // Classe Image
 
+namespace SOPHYA {
 
 template <class T>
-class Image : public RzImage {
+class Image : public TMatrix<T> {
 
 public:
-  Image(int sizx, int sizy, int zero=1);
   Image();
-  Image(const Image<T>&, int sharePixels=0);
-  Image(const Image<T>&, int orgx, int orgy, int sizx=-1, int sizy=-1);
-  EXPLICIT Image(const RzImage&); // Pour Reza. Partage les pixels
-  Image(char *flnm);
+  Image(uint_4 sizx, uint_4 sizy, r_8 szpx=1., r_8 szpy=1., r_8 orgx=0., r_8 orgy=0.);
+  Image(const Image<T>& a);
+  Image(const Image<T>& a, bool share);
+
   virtual ~Image();
 
-  static PPersist*      Create()              { return new Image<T>;}
+  // Inline element acces methods 
+  inline T const& operator()(uint_4 ix,uint_4 jy) const;
+  inline T&       operator()(uint_4 ix,uint_4 jy);
 
-  virtual void    ReadSelf(PInPersist&);
+  inline uint_4  XSize() const {return NCols();}
+  inline uint_4  YSize() const {return NRows();}
 
-  Image<T>&       operator= (const Image<T> &);
-  Image<T>&       operator= (T);
+  inline r_8     XOrg() const {return org_x;}
+  inline r_8     YOrg() const {return org_y;}
 
-  Image<T>&       operator+= (Image<T> const&);
-  Image<T>&       operator-= (Image<T> const&);
-  Image<T>&       operator*= (Image<T> const&);
-  Image<T>&       operator/= (Image<T> const&);
+  inline r_8     XPixSize() const {return pxsz_x;}
+  inline r_8     YPixSize() const {return pxsz_y;}
 
-  Image<T>&       operator+= (double);
-  Image<T>&       operator-= (double);
-  Image<T>&       operator*= (double);
-  Image<T>&       operator/= (double);
-
-  Image<T>        WhereNonZero();
-
-
-//   Impression de tout le contenu de l'image 
-  virtual void    PrintImage(ostream& os) const;
-  inline void     PrintImage() const  { PrintImage(cout); }
-
-  void            Zero();
-  void            Allocate(int sizx, int sizy, int zero=1, ImgVectP* pvpsh=NULL);
-
-  inline T&       operator() (int x, int y);
-  inline T        operator() (int x, int y) const;
-  inline T&       operator[] (int i);
-  inline T        operator[] (int i) const;
-  T*              ImagePtr()         {return imagePtr;}
-  const T*        ImagePtr() const   {return imagePtr;}
-                                            
-  int             CheckDyn(double min=-9.e19, double max=9.e19);
-
-  void            SeuilBas(double seuil, double val);
-  void            SeuilHaut(double seuil, double val);
-  void            SeuilBas(double seuil);
-  void            SeuilHaut(double seuil);
-  void            SetPixels(int szx, int szy, T* pim);
-
-  int EstimeFdSg(float& xbmax,float& sgbmax,float nbsig=3.5,float frac=0.33
-                ,float lowbad=1.,float highbad=-1.,int deb=0);
-  float FondCiel(int nbin,float bin_low,float bin_high
-                ,int degre=2,float frac=0.5f,int modu=1,int deb=0);
-  float SigmaCiel(int nbin,float bin_low,float bin_high,float& means
-                 ,float lowbad=1.,float highbad=-1.
-                 ,float nsig=4.f,int modu=1,int deb=0);
-  int   MoySigma(float& mean,float& sigma
-                ,float lowbad=1.,float highbad=-1.,int modu=1);
-  int   MoySigmaIter(float& mean,float& sigma,float lowbad=1.,float highbad=-1.
-                    ,int modu=1,int nitermx=10
-                    ,float perdiff=0.1f,float scut=3.5f, int deb=0);
-  int   FondSigmaCiel(float lowbad,float highbad,int pvsz=100
-              ,float nbsig1=3.5f,float nbsig2=7.f,float nbsig3=5.f
-              ,float binsg=0.5f,float frac=0.33f,int modu=1,int deb=0);
-
+  inline void    SetOrg(r_8 orgx=0., r_8 orgy=0.)
+                       { org_x = orgx;  org_y = orgy; }  
+  inline void    SetPixelSize(r_8 szx=1., r_8 szy=1.)
+                       { pxsz_x = szx;   pxsz_y = szy; }
 
 protected:
-
-  void HBinInt(int& nbin,float& xmin,float& xmax);
-
-  T*              imagePtr;
+  r_8   org_x,org_y;        //  Coordonnees pixel(0,0)
+  r_8   pxsz_x, pxsz_y;     //  Taille des pixels
 };
 
-// Definition de l'operateur << 
-//template <class T> 
-//ostream& operator << (ostream& s, Image<T> const& img)
-//  {  img.Print(s);  return(s);  }
-
-
-/*  .......................................................  */
-/*          Implementation inline des acces pixels           */
-/*  .......................................................  */
-
-// ----- Macro de verification des indices  ------ 
-
-#ifdef IMGRGCHECK
-#define CHECKIMG(_x_,_y_)                                  \
-      if ((_x_ >= siz_x) || (_y_ >= siz_y) ||              \
-          (_x_ < 0) || (_y_ < 0)) THROW(rangeCheckErr);  \
-      if (!imagePtr) THROW(nullPtrErr)
-#else
-#if defined(IMGVOIDCHECK)
-#define CHECKIMG(_x_,_y_) \
-      if (!imagePtr) THROW(NullPtrErr)
-#else
-#define CHECKIMG(_x_,_y_)
-#endif
-#endif /* IMGRGCHECK */
-
-#define INRANGE(_x_,_y_) ((_x_ < siz_x) && (_y_ < siz_y) && \
-                          (_x_ >= 0) && (_y_ >= 0))
-
-
-// Fin des macros  ------ 
-
-
 template <class T>
-inline T & Image<T>::operator() (int x, int y)
+inline T const& Image<T>::operator()(uint_4 ix, uint_4 jy) const
 {
-  CHECKIMG(x,y);
-  return imagePtr[x+y*siz_x];
+  return (TMatrix<T>::operator() (jy, ix));
 }
 
 template <class T>
-inline T Image<T>::operator() (int x, int y) const
+inline T & Image<T>::operator()(uint_4 ix, uint_4 jy) 
 {
-  CHECKIMG(x,y);
-  return imagePtr[x+y*siz_x];
-}
-
-template <class T>
-inline T & Image<T>::operator[] (int i)
-{
-  CHECKIMG(0,0);
-  return imagePtr[i];
-}
-
-template <class T>
-inline T Image<T>::operator[] (int i) const
-{
-  CHECKIMG(0,0);
-  return imagePtr[i];
-}
-
-// Operateurs addition, multiplication, ... (+ - * / ) avec des doubles 
-
-template <class T> 
-Image<T> operator+ (Image<T> const& a, double b) 
-{
-  Image<T> c(a);
-  c += b;
-  return c;
-}
-
-template <class T> 
-Image<T> operator- (Image<T> const& a, double b) 
-{
-  Image<T> c(a);
-  c -= b;
-  return c;
-}
-
-template <class T> 
-Image<T> operator* (Image<T> const& a, double b) 
-{
-  Image<T> c(a);
-  c *= b;
-  return c;
-}
-
-template <class T> 
-Image<T> operator/ (Image<T> const& a, double b) 
-{
-  Image<T> c(a);
-  c /= b;
-  return c;
-}
-
-// Operateurs addition, multiplication, ... (+ - * / ) entre images
-template <class T> 
-Image<T> operator+ (Image<T> const& a, Image<T> const& b)
-{
-  Image<T> c(a);
-  c += b;
-  return c;
-}
-
-template <class T> 
-Image<T> operator- (Image<T> const& a, Image<T> const& b) 
-{
-  Image<T> c(a);
-  c -= b;
-  return c;
-}
-
-template <class T> 
-Image<T> operator* (Image<T> const& a, Image<T> const& b) 
-{
-  Image<T> c(a);
-  c *= b;
-  return c;
-}
-
-template <class T> 
-Image<T> operator/ (Image<T> const& a, Image<T> const& b) 
-{
-  Image<T> c(a);
-  c /= b;
-  return c;
+  return (TMatrix<T>::operator() (jy, ix));
 }
 
 
-/*  .......................................................  */
-/*         Fonctions de copie d'images et de paves           */
-/*  .......................................................  */
-
-template <class T2, class T1>
-void CopieImageF(Image<T2>& copie, Image<T1> const& pim,
-                 int org_pim_x=0, int org_pim_y=0,
-                 int pim_lpav_x=0, int pim_lpav_y=0,
-                 int org_copie_x=0, int org_copie_y=0,
-                 double cutmin=0., double cutmax=0.);
-                
-template <class T2, class T1>
-void CopieImage(Image<T2>& copie, Image<T1> const& pim);
-
-template <class T2, class T1>
-void CopieImage(Image<T2>& copie, Image<T1> const& pim,
-                int org_pim_x, int org_pim_y,
-                int pim_lpav_x=0, int pim_lpav_y=0,
-                int org_copie_x=0, int org_copie_y=0,
-                double cutmin=0, double cutmax=0);
-
-
-template <class T2, class T1>
-void 
-CopiePave(Image<T2>& pave, Image<T1> const& pim,
-	  float xc, float yc, 
-	  double cutmin=0, double cutmax=0);
-
-
-template <class T>
-void 
-RzCopieImage(Image<T>& copie, RzImage const& pim,
-	     int org_pim_x, int org_pim_y,
-	     int pim_lpav_x=0, int pim_lpav_y=0,
-	     int org_copie_x=0, int org_copie_y=0,
-	     double cutmin=0, double cutmax=0);
-
-template <class T>
-void 
-RzCopieImage(Image<T>& copie, RzImage const& pim);
-
-template <class T>
-void 
-RzCopiePave(Image<T> & pave, RzImage const & pim,
-	    float xc, float yc,
-	    double cutmin=0, double cutmax=0);
-/*  .......................................................  */
-/*         Autres fonctions utilitaires pour RzImage         */
-/*  .......................................................  */
-
-void RzPrintImage(RzImage & img);
-
-/*  Images de types usuels   */
-
-typedef Image<uint_1> ImageU1;
 typedef Image<uint_2> ImageU2;
-typedef Image<int_2>  ImageI2;
 typedef Image<int_4>  ImageI4;
 typedef Image<r_4>    ImageR4;
+typedef Image<r_8>    ImageR8;
 
+class GeneralFit;
+class RzImage {
+public:
+  RzImage() { }
+  ~RzImage() { }
+  inline uint_4  XSize() const {return 0;}
+  inline uint_4  YSize() const {return 0;}
 
-#ifdef __MWERKS__
-template <class T>
-ostream& operator << (ostream& s, Image<T> const& pim);
-#endif
+  inline r_8     XOrg() const {return 0;}
+  inline r_8     YOrg() const {return 0;}
 
+  inline r_8     XPixSize() const {return 1.;}
+  inline r_8     YPixSize() const {return 1.;}
+  inline r_8     DValue(int i, int j) const { return 0.; }
+  // Resultats d'un GeneralFit
+  inline RzImage*      FitResidus(GeneralFit& gfit) { return NULL; }
+  inline RzImage*      FitFunction(GeneralFit& gfit) { return NULL; }
+
+};
+
+}  // End of namespace SOPHYA
 
 #endif
Index: trunk/SophyaLib/NTools/dynccd.cc
===================================================================
--- trunk/SophyaLib/NTools/dynccd.cc	(revision 1103)
+++ trunk/SophyaLib/NTools/dynccd.cc	(revision 1104)
@@ -46,12 +46,12 @@
 //--
 //++
-// DynCCD(int TypNoise=0, float MinADU=-9.e19, float MaxADU=9.e19, float Gain=1., float RONoise=0., float RefFond=0., float RefSFond=0.);
+// DynCCD(int_4TypNoise=0, r_8 MinADU=-9.e19, r_8 MaxADU=9.e19, r_8 Gain=1., r_8 RONoise=0., r_8 RefFond=0., r_8 RefSFond=0.);
 //	Creation d'un objet DynCCD ("typ" determine la methode de calcul du bruit)
 //	|Test verbatim 
 //
-// void Set(int TypNoise=0, float MinADU=-9.e19, float MaxADU=9.e19, float Gain=1., float RONoise=0., float RefFond=0., float RefSFond=0.);
+// void Set(int_4TypNoise=0, r_8 MinADU=-9.e19, r_8 MaxADU=9.e19, r_8 Gain=1., r_8 RONoise=0., r_8 RefFond=0., r_8 RefSFond=0.);
 //	Modification des parametres de la dynamique
 // void Print()
-// float Noise(float pixel) const
+// r_8 Noise(r_8 pixel) const
 //	Renvoie la valeur du bruit pour "pixel" en ADU.
 //--
@@ -62,6 +62,6 @@
 
 /* --Methode-- */
-DynCCD::DynCCD(int typ, float min, float max, float g,
-               float ron, float rf, float rfs)
+DynCCD::DynCCD(int_4 typ, r_8 min, r_8 max, r_8 g,
+               r_8 ron, r_8 rf, r_8 rfs)
 {
 if ( (typ >= kConstantNoise) && (typ <= kSqrtADUNoise) )  TypNoise = typ;
@@ -73,6 +73,6 @@
 
 /* --Methode-- */
-void DynCCD::Set(int typ, float min, float max, float g,
-               float ron, float rf, float rfs)
+void DynCCD::Set(int_4 typ, r_8 min, r_8 max, r_8 g,
+               r_8 ron, r_8 rf, r_8 rfs)
 {
 if ( (typ >= kConstantNoise) && (typ <= kSqrtADUNoise) )  TypNoise = typ;
@@ -93,5 +93,5 @@
 
 /* --Methode-- */
-float DynCCD::Noise(float pixel) const
+r_8 DynCCD::Noise(r_8 pixel) const
 
 /* Cette fonction calcule la valeur du bruit pour pixel     */
@@ -108,6 +108,6 @@
 
 {
-float h,s,ronsq;
-float fond;
+r_8 h,s,ronsq;
+r_8 fond;
 
 if ( (pixel > MaxADU) || (pixel < MinADU) )   return(0.);
@@ -122,5 +122,5 @@
   ronsq = RONoise/Gain;  ronsq *= ronsq; }
 
-h = (pixel>fond) ? (float)(pixel-fond) : 0.;
+h = (pixel>fond) ? (r_8)(pixel-fond) : 0.;
 s = ronsq+h/Gain;
 s = fsqrt(s);
@@ -161,5 +161,5 @@
 /* Nouvelle-Fonction */
 template <class T>
-Image<T> * NoiseImage(Image<T> const * pim, DynCCD const * dynccd)
+Image<T>  NoiseImage(Image<T> const & pim, DynCCD const & dynccd)
 
 /* Creation et Calcul d'une image de bruit a partir de l'image */
@@ -168,85 +168,19 @@
 
 {
-float h,s,ronsq;
-float fond, min,max;
-int i, npix;
-float minois, offnois;
-
-if (pim == NULL)  return(NULL);
-
-const T * pix = pim->ImagePtr();
-npix = pim->XSize()*pim->YSize();
-Image<T> * nois = new Image<T>(pim->XSize(), pim->YSize(), false);
-nois->SetOrg(pim->XOrg(), pim->YOrg());
-T * pno = nois->ImagePtr();
-
-min = dynccd->MinADU;   max = dynccd->MaxADU;
-
-
-switch (dynccd->TypNoise)
-  {
-  case kConstantNoise :
-    for(i=0; i<npix; i++)
-      {
-      if ( (*pix <= max) && (*pix >= min) )  *pno = 1;
-      else *pno = 0;
-      pix++;   pno++;
-      }
-    break;
-
-  case kSqrtADUNoise :
-    for(i=0; i<npix; i++)
-      {
-      if ( (*pix <= max) && (*pix >= min) )  *pno = 1;
-      else *pno = (T) fsqrt(fabsf((float)(*pix)));    
-      pix++;   pno++;
-      }
-    break;
-
-  case kPhotonNoise :
-  case kSigFondNoise :
-    if ( dynccd->TypNoise == kSigFondNoise)
-      { fond = dynccd->RefFond;
-      ronsq = dynccd->RefSFond * dynccd->RefSFond; }
-    else
-      { fond = 0;
-      ronsq = dynccd->RONoise/dynccd->Gain;  ronsq *= ronsq; }
-
-// Calcul de minois / offnois pour obtenir un bruit correct malgre 
-// les conversions (float) -> (entier)
-
-    switch(pim->PixelType())
-      {
-      case kuint_2:
-      case kint_2:
-      case kint_4:
-        minois = 1.001;
-        offnois = 0.5;
-        break;
-      case kr_4:
-      case kr_8:
-        minois = 1.e-9;
-        offnois = 0.;
-        break;
-      default:
-        minois = 1.e-9;
-        offnois = 0.;
-        break;
-      }
-
-    for(i=0; i<npix; i++)
-      {
-      if ( (*pix <= max) && (*pix >= min) ) 
-        {
-        h = (*pix>fond) ? (float)(*pix)-fond : 0.;
-        s = ronsq+h/dynccd->Gain;
-        s = fsqrt(s)+offnois;
-        *pno = (s > minois) ? (T)s : (T)minois;
-        } 
-      else *pno = 0;
-      pix++;   pno++;
-      }
-    break;
-  }
+r_8 h,s,ronsq;
+r_8 fond, min,max;
+int_4 k, npix;
+r_8 minois, offnois;
+
+npix = pim.XSize()*pim.YSize();
+Image<T> nois(pim.XSize(), pim.YSize());
+nois.SetOrg(pim.XOrg(), pim.YOrg());
+
+min = dynccd.MinADU;   max = dynccd.MaxADU;
+for(k=0; k<npix; k++)      {
+  if ( (pim[k] <= max) && (pim[k] >= min) )  nois[k] = (T)1;
+  else nois[k] = 0;
+}
+
 
 return(nois);
@@ -258,89 +192,12 @@
 void ImgAddNoise(Image<T>& img, DynCCD const& dyn)
 {
-	T* p = img.ImagePtr();
-	int nPix = img.XSize() * img.YSize();
+  int_4 nPix = img.XSize() * img.YSize();
 	
-	for (int i=0; i<nPix; i++, p++)
-		*p += (T) (dyn.Noise(*p)*NorRand());
-}
-
-
-
-/* Nouvelle-Fonction */
-RzImage * NoiseImage(RzImage const * pim, DynCCD const * dynccd)
-
-/* Creation et Calcul d'une image de bruit a partir de l'image */
-/* pim et de dynccd. Voir la methode DynCCD::Noise() pour la   */
-/* description du calcul                                       */
-{
-RzImage * nois = NULL;
-
-switch (pim->PixelType()) 
-  {
-  case kuint_2: 
-    {
-    ImageU2 pix((RzImage&)(*pim));
-    nois = NoiseImage(&pix, dynccd);
-    break;
-    }
-  case kint_2:
-    {
-    ImageI2 pix((RzImage&)(*pim));
-    nois = NoiseImage(&pix, dynccd);
-    break;
-    }
-  case kint_4:
-    {
-    ImageI4 pix((RzImage&)(*pim));
-    nois = NoiseImage(&pix, dynccd);
-    break;
-    }
-  case kr_4:
-    {
-    ImageR4 pix((RzImage&)(*pim));
-    nois = NoiseImage(&pix, dynccd);
-    break;
-    }  
-  case kuint_4:
-  case kr_8:
-    cerr << "NoiseImage(RzImage, ...) Unsupported image type (kuint_4/kr_8) " 
-         << int(pim->PixelType()) << "\n" ; 
-    break;
-  default:
-    cerr << "NoiseImage(RzImage, ...) Unknown image type !! " << int(pim->PixelType()) << "\n" ;
-    break;
-  }   
-
-return(nois);
-}
-
-
-// ******** INSTANCES
-
-#if defined(__xlC) || defined(__aCC__)
-void instancetempdynccd(int n)
-{
-/* Cette fonction sert uniquement a forcer le compilo a instancier les
-  classes/fonctions template   */
-
-ImageU2  iu2(n,n), *piu2;
-ImageI2  ii2(n,n), *pii2;
-ImageI4  ii4(n,n), *pii4;
-ImageR4  ir4(n,n), *pir4;
-DynCCD dyn(1,0.,65000., 4., 20.);
-
-piu2 = NoiseImage(&iu2, &dyn);
-pii2 = NoiseImage(&ii2, &dyn);
-pii4 = NoiseImage(&ii4, &dyn);
-pir4 = NoiseImage(&ir4, &dyn);
-
-ImgAddNoise(*piu2, dyn);
-ImgAddNoise(*pii2, dyn);
-ImgAddNoise(*pii4, dyn);
-ImgAddNoise(*pir4, dyn);
-
-return;
-}
-#endif
+  for (int_4 i=0; i<nPix; i++)
+    img[i] += (T) (dyn.Noise(img[i])*NorRand());
+}
+
+
+
 
 
@@ -348,10 +205,8 @@
 
 #pragma define_template NoiseImage<uint_2>
-#pragma define_template NoiseImage<int_2>
 #pragma define_template NoiseImage<int_4>
 #pragma define_template NoiseImage<r_4>
 
 #pragma define_template ImgAddNoise<uint_2>
-#pragma define_template ImgAddNoise<int_2>
 #pragma define_template ImgAddNoise<int_4>
 #pragma define_template ImgAddNoise<r_4>
@@ -360,12 +215,10 @@
 
 
-#if ( defined(ANSI_TEMPLATES) && !defined(__aCC__) )
+#if defined(ANSI_TEMPLATES) 
 template Image<uint_2> * NoiseImage<uint_2>(Image<uint_2> const * , DynCCD const *);
-template Image< int_2> * NoiseImage< int_2>(Image< int_2> const * , DynCCD const *);
 template Image< int_4> * NoiseImage< int_4>(Image< int_4> const * , DynCCD const *);
 template Image<   r_4> * NoiseImage<   r_4>(Image<   r_4> const * , DynCCD const *);
 
 template void ImgAddNoise<uint_2>(Image<uint_2>&, DynCCD const&);
-template void ImgAddNoise< int_2>(Image< int_2>&, DynCCD const&);
 template void ImgAddNoise< int_4>(Image< int_4>&, DynCCD const&);
 template void ImgAddNoise<   r_4>(Image<   r_4>&, DynCCD const&);
@@ -375,10 +228,8 @@
 #if defined(__GNU_TEMPLATES__)
 template Image<uint_2> * NoiseImage(Image<uint_2> const *, DynCCD const *);
-template Image< int_2> * NoiseImage(Image< int_2> const *, DynCCD const *);
 template Image< int_4> * NoiseImage(Image< int_4> const *, DynCCD const *);
 template Image<   r_4> * NoiseImage(Image<   r_4> const *, DynCCD const *);
 
 template void ImgAddNoise(Image<uint_2>&, DynCCD const&);
-template void ImgAddNoise(Image< int_2>&, DynCCD const&);
 template void ImgAddNoise(Image< int_4>&, DynCCD const&);
 template void ImgAddNoise(Image<   r_4>&, DynCCD const&);
Index: trunk/SophyaLib/NTools/dynccd.h
===================================================================
--- trunk/SophyaLib/NTools/dynccd.h	(revision 1103)
+++ trunk/SophyaLib/NTools/dynccd.h	(revision 1104)
@@ -6,4 +6,5 @@
 #include "machdefs.h"
 #include "pexceptions.h"
+#include "cimage.h"
 #include "ppersist.h"
 
@@ -17,31 +18,25 @@
 
   int_4 TypNoise;        // Type de calcul du bruit 
-  float MinADU,MaxADU;   // Valeur min et max des pixels 
-  float Gain;            // Gain en electron/ADU 
-  float RONoise;         // Bruit de lecture en electron  
-  float RefFond;         // Fond de ciel de ref (TypNoise=2) 
-  float RefSFond;        // Sigma du fond  (TypNoise=2) */
+  r_8 MinADU,MaxADU;   // Valeur min et max des pixels 
+  r_8 Gain;            // Gain en electron/ADU 
+  r_8 RONoise;         // Bruit de lecture en electron  
+  r_8 RefFond;         // Fond de ciel de ref (TypNoise=2) 
+  r_8 RefSFond;        // Sigma du fond  (TypNoise=2) */
 
 /*    ===>  Les methodes   */
-  DynCCD(int typ=0, float min=-9.e19, float max=9.e19,
-         float g=1., float ron=0., float rf=0., float rfs=0.);
+  DynCCD(int_4 typ=0, r_8 min=-9.e19, r_8 max=9.e19,
+         r_8 g=1., r_8 ron=0., r_8 rf=0., r_8 rfs=0.);
 
-  void Set(int typ=0, float min=-9.e19, float max=9.e19,
-         float g=1., float ron=0., float rf=0., float rfs=0.);
+  void Set(int_4 typ=0, r_8 min=-9.e19, r_8 max=9.e19,
+         r_8 g=1., r_8 ron=0., r_8 rf=0., r_8 rfs=0.);
   void Print();
-  float Noise(float pixel) const;
+  r_8 Noise(r_8 pixel) const;
 };
 
 } // Fin du namespace
 
-// Quelques fonctions pour manipuler des images de bruit
-
-class RzImage;
-RzImage * NoiseImage(RzImage const *pim, DynCCD const * dynccd);
-
-template <class T> class Image;
 
 template <class T>
-Image<T> * NoiseImage(Image<T> const * pim, DynCCD const * dynccd);
+Image<T> NoiseImage(Image<T> const & pim, DynCCD const & dynccd);
 
 template <class T>
@@ -53,5 +48,5 @@
 {
   c.PutI4(data.TypNoise);
-  c.PutR4s(&data.MinADU, 6);
+  c.PutR8s(&data.MinADU, 6);
   return c;
 }
@@ -61,9 +56,9 @@
 {
   c.GetI4(data.TypNoise);
-  c.GetR4s(&data.MinADU, 6);
+  c.GetR8s(&data.MinADU, 6);
   return c;
 }
 
-//STRUCTPERSISTIO(DynCCD, TypNoise, sizeof(int_4)+6*sizeof(float))
+
 
 
Index: trunk/SophyaLib/NTools/exclude
===================================================================
--- trunk/SophyaLib/NTools/exclude	(revision 1103)
+++ trunk/SophyaLib/NTools/exclude	(revision 1104)
@@ -1,1 +1,1 @@
-
+imageop.cc
Index: trunk/SophyaLib/NTools/ntoolsinit.cc
===================================================================
--- trunk/SophyaLib/NTools/ntoolsinit.cc	(revision 1103)
+++ trunk/SophyaLib/NTools/ntoolsinit.cc	(revision 1104)
@@ -41,10 +41,7 @@
   DObjRegister(ObjFileIO<GeneralFitData>, GeneralFitData);
 
-  PPRegister(RzImage);
-  PPRegister(ImageU2);
-  PPRegister(ImageI2);
-  PPRegister(ImageI4);
-  PPRegister(ImageR4);
-
+  DObjRegister(FIO_TArray<uint_2>, Image<uint_2>);
+  DObjRegister(FIO_TArray<int_4>, Image<int_4>);
+  DObjRegister(FIO_TArray<r_4>, Image<r_4>);
 
 
Index: trunk/SophyaLib/NTools/rzimage.cc
===================================================================
--- trunk/SophyaLib/NTools/rzimage.cc	(revision 1103)
+++ 	(revision )
@@ -1,902 +1,0 @@
-//  Classe image generique      
-//                  E.Aubourg , E. Lesquoy  01-03/95 
-//                  Modifs R. Ansari   04/95
-
-// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
-
-//  $Id: rzimage.cc,v 1.6 1999-10-25 16:40:03 ansari Exp $
-
-#include "machdefs.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "rzimage.h"
-#include "dvlist.h"
-#include "generalfit.h"
-
-
-/* .........  Methodes de la classe  RzVect    .........   */
-//++
-// Class 	RzVect<T>
-// Lib 		Images++
-// include	rzvect.h
-//
-//	Cette classe permet de construire des vecteurs de types T 
-//	"(short, int, float, double, ...)". Cette classe est utilisee
-//	par la classe *RzImage*.
-//--
-
-//++
-// Titre	Constructeurs
-//--
-//++
-// RzVect<T>(int n)
-//	Constructeur avec allocation d'espace pour "n" elements
-//	"RzVect<uint_1>, RzVect<uint_2>, RzVect<int_2>, RzVect<int_4>"
-//	" RzVect<r_4>, RzVect<r_8>"
-// RzVect<T>(int n, T* data)
-//	Constructeur avec specification du tableau de stockage des elements
-//	*Attention* "data" doit etre alloue a la bonne taille ("n")
-// ~RzVect<T>()
-//	Destructeur - Libere l'espace de stockage des elements si l'objet a
-//	ete construit par le premier constructeur
-//	
-//--
-
-/* --Methode-- */
-template <class T>
-RzVect<T>::RzVect(int n)
-: p(new T[n]), nElt(n), nImgRef(1), shareable(1), ownTable(1)
-{END_CONSTRUCTOR}
-
-/* --Methode-- */
-template <class T>
-RzVect<T>::RzVect(int n, T* data)
-: p(data), nElt(n), nImgRef(0), shareable(0), ownTable(0)
-{END_CONSTRUCTOR}
-
-
-/* --Methode-- */
-template <class T>
-RzVect<T>::~RzVect()
-{
-  if (ownTable) delete[] p;
-  #ifdef DEBUG
-  p = (T*) -1;
-  #endif
-}
-
-//++
-// Titre	Acces aux elements
-//--
-//++
-// T& operator[](int i)
-//	Acces a l'element "i" (lecture/ecriture)
-// int  IElem(int k)
-//      Valeur converti en entier "(int)" de l'element "k" (lecture)
-// float  FElem(int k)
-//      Valeur converti en reel "(float)" de l'element "k" (lecture)
-// double  DElem(int k)
-//      Valeur converti en reel "(double)" de l'element "k" (lecture)
-//--
-
-/* ..............   Classe  RzImage    ...............   */
-
-//++
-// Class 	RzImage
-// Lib 		Images++
-// include	rzimage.h
-//
-//	Cette classe permet de gerer les donnees correspondantes a une image.
-//	Une image est un tableau rectangulaire de valeurs de pixels.
-//	*RzImage* offre la possibilite de creer des images de valeurs de
-//	pixels entier ou flottant "(unsigned char uint_1, short int_2," 
-//	"unsigned short uint_2, int int_4, float r_4, double r_8)"
-//	les objets de la classe RzImage sont faiblement types. La classe
-//      *Image<T>* qui derive de RzImage permet la creation d'objets
-//	types. Chaque image peut contenir un objet *DVList* permettant 
-//	a l'utilisateur d'associer un ensemble de valeurs a l'image. 
-//--
-//++
-// Links	Parents
-// PPersist
-//--
-//++
-// Links	Descendants
-// Image<T>
-// FitsImage<T>
-//--
-//++
-// Links	Voir aussi
-// DVList
-//--
-
-//++
-// Titre	Constructeurs
-//--
-//++
-// RzImage()
-//	Creation d'une image vide, non typee.
-// RzImage(PBaseDataTypes dType, int sizx, int sizy, -
-//         int imgId = 0, char const * imgName = 0)
-//	Creation d'une image de taille "sizx * sizy" pixels , de type "dType".
-//      (dType = kuint_1, kuint_2, kint_2, kint_4, kr_4, kr_8).
-//      "imgId" et "imgName" permettent d'indiquer une identification optionnelle.
-// RzImage(const RzImage&, int sharePixels=0)
-//	Constructeur par copie. Permet de partager le tableau des pixels (RzVect)
-//	si "sharePixels" non nul (<> 0)
-// RzImage(char *flnm)
-//	Les RzImage etant des objets persistants (*PPersist*), ils peuvent etre
-//	instancies a partir d'un fichier (nom = "flnm") ecrit par la methode Write()
-// ~RzImage()
-//	Destructeur. 
-//  operator= (RzImage const &)
-//	Copie les valeurs de pixels d'une image a l'autre.
-//	Si la 1ere image a son propre tableau de pixel, il faut que 
-//	les deux images aient le meme type de pixels et la meme taille.
-//	Sinon, une exception ("typeMismatchErr" ou "sizeMismatchErr") est 
-//	generee.  
-//--
-
-/* --Methode-- */
-RzImage::RzImage(PBaseDataTypes dType)
-: dataType(dType)
-{
-  voidP = NULL;
-  isFits = 0;
-  siz_x = siz_y = 0;
-  vect.u2 = 0;
-  mInfo = NULL;
-  SetNameId(0, "");
-  SetOrg(0, 0);
-  SetPxSize();
-  SetAtt();
-  END_CONSTRUCTOR
-}
-
-/* --Methode-- */
-RzImage::RzImage(PBaseDataTypes dType, int sizx, int sizy, int imgId, char const* imgName)
-: dataType(dType)
-{
-  isFits = 0;
-  siz_x = siz_y = 0;
-  vect.u2 = 0;
-  voidP = NULL;
-  mInfo = NULL;
-  Allocate(dType, sizx, sizy);
-  SetNameId(imgId, imgName);
-  SetOrg(0, 0);
-  SetPxSize();
-  SetAtt();
-  END_CONSTRUCTOR
-}
-
-/* --Methode-- */
-RzImage::RzImage(const RzImage& src, int sharePixels)
-: dataType(kpbdt_unknown)
-{
-  isFits = 0;
-  siz_x = siz_y = 0;
-  vect.u2 = 0;
-  voidP = NULL;
-  mInfo = NULL;
-  if (sharePixels) {
-    ImgVectP vs = src.vect;
-    Allocate(src.PixelType(), src.XSize(), src.YSize(), &vs); 
-  }
-  else { 
-    Allocate(src.PixelType(), src.XSize(), src.YSize(), NULL);
-    memcpy(voidP, src.voidP, siz_x*siz_y*DataSize(dataType)); 
-  }
-
-  SetNameId(src.id, src.name);
-  SetOrg(src.XOrg(), src.YOrg());
-  SetPxSize(src.XPxSize(), src.YPxSize());    
-  SetAtt(src.nbNul, src.nbSat,
-       src.minPix, src.maxPix, src.moyPix, src.sigPix,
-       src.fond, src.sigmaFond);
-  END_CONSTRUCTOR
-}
-
-/* --Methode-- */
-RzImage::RzImage(char *flnm)
-: dataType(kpbdt_unknown)
-{
-  isFits = 0;
-  vect.u2 = 0;
-  voidP = NULL;
-  mInfo = NULL;
-  PInPersist s(flnm);
-  Read(s);
-  END_CONSTRUCTOR
-}
-
-/* --Methode-- */
-RzImage::~RzImage()
-{
-if (mInfo) delete mInfo;
-DeAllocPixels();
-}
-
-/* --Methode-- */
-RzImage& RzImage::operator = (const RzImage& src)
-{
-
-if (PixelType() >= 0)
-  {
-  if (src.PixelType() != PixelType())
-    THROW(typeMismatchErr);
-  if (siz_x != src.siz_x || siz_y != src.siz_y) 
-    THROW(sizeMismatchErr);
-  } 
-else  Allocate(src.PixelType(), src.siz_x, src.siz_y);
-  
-memcpy(voidP, src.voidP, siz_x*siz_y*DataSize(dataType));
-SetNameId(src.id, src.name);
-SetOrg(src.XOrg(), src.YOrg());
-SetPxSize(src.XPxSize(), src.YPxSize());    
-SetAtt(src.nbNul, src.nbSat,
-       src.minPix, src.maxPix, src.moyPix, src.sigPix,
-       src.fond, src.sigmaFond);
- 
-return(*this); 
-}
-
-/* --Methode-- */
-void RzImage::Allocate(PBaseDataTypes dType, int sizx, int sizy, ImgVectP* pvpsh)
-// ATTENTION : Si pvpsh non nul, on partage les pixels 
-{
-  DeAllocPixels(); // EA 090998 -- memory leak...
-  siz_x = sizx;
-  siz_y = sizy;
-  if ((int)dataType<=0)  dataType = dType; // Sinon ERREUR. Exception?
-  switch (dataType) {
-  case kuint_1:
-    vect.u1 = NULL;
-    if (pvpsh)
-      if (pvpsh->u1)  
-        { ASSERT(pvpsh->u1->Shareable());
-        vect.u1 = pvpsh->u1;  vect.u1->NImgRef()++; }
-    if (!vect.u1)  vect.u1 = new RzVect<uint_1> (siz_x * siz_y);
-    voidP   = vect.u1->p;
-    IVal_p = &RzImage::IVal_u1;
-    FVal_p = &RzImage::FVal_u1;
-    DVal_p = &RzImage::DVal_u1;
-    break;
-  case kuint_2:
-    vect.u2 = NULL;
-    if (pvpsh)
-      if (pvpsh->u2)  
-        { ASSERT(pvpsh->u2->Shareable());
-        vect.u2 = pvpsh->u2;  vect.u2->NImgRef()++; }
-    if (!vect.u2)  vect.u2 = new RzVect<uint_2> (siz_x * siz_y);
-    voidP   = vect.u2->p;
-    IVal_p = &RzImage::IVal_u2;
-    FVal_p = &RzImage::FVal_u2;
-    DVal_p = &RzImage::DVal_u2;
-    break;
-  case kint_2:
-    vect.i2 = NULL;
-    if (pvpsh)
-      if (pvpsh->i2)  
-        { ASSERT(pvpsh->i2->Shareable());
-        vect.i2 = pvpsh->i2;  vect.i2->NImgRef()++; }
-    if (!vect.i2)  vect.i2 = new RzVect<int_2> (siz_x * siz_y);
-    voidP   = vect.i2->p;
-    IVal_p = &RzImage::IVal_i2;
-    FVal_p = &RzImage::FVal_i2;
-    DVal_p = &RzImage::DVal_i2;
-    break;
-  case kint_4:
-    vect.i4 = NULL;
-    if (pvpsh)
-      if (pvpsh->i4)  
-        { ASSERT(pvpsh->i4->Shareable());
-        vect.i4 = pvpsh->i4;  vect.i4->NImgRef()++; }
-    if (!vect.i4)  vect.i4 = new RzVect<int_4> (siz_x * siz_y);
-    voidP   = vect.i4->p;
-    IVal_p = &RzImage::IVal_i4;
-    FVal_p = &RzImage::FVal_i4;
-    DVal_p = &RzImage::DVal_i4;
-    break;
-  case kr_4:
-    vect.r4 = NULL;
-    if (pvpsh)
-      if (pvpsh->r4)  
-        { ASSERT(pvpsh->r4->Shareable());
-        vect.r4 = pvpsh->r4;  vect.r4->NImgRef()++; }
-    if (!vect.r4)  vect.r4 = new RzVect<r_4> (siz_x * siz_y);
-    voidP   = vect.r4->p;
-    IVal_p = &RzImage::IVal_r4;
-    FVal_p = &RzImage::FVal_r4;
-    DVal_p = &RzImage::DVal_r4;
-    break;
-  case kr_8:
-    vect.r8 = NULL;
-    if (pvpsh)
-      if (pvpsh->r8)  
-        { ASSERT(pvpsh->r8->Shareable());
-        vect.r8 = pvpsh->r8;  vect.r8->NImgRef()++; }
-    if (!vect.r8)  vect.r8 = new RzVect<r_8> (siz_x * siz_y);
-    voidP   = vect.r8->p;
-    IVal_p = &RzImage::IVal_r8;
-    FVal_p = &RzImage::FVal_r8;
-    DVal_p = &RzImage::DVal_r8;
-    break;
-  default:
-    printf("RzImage::Allocate Error - Unsupported DataType= %d \n", (int)dataType);
-    break;    
-  } 
-}
-
-/* --Methode-- */
-void RzImage::SetPixels(PBaseDataTypes dType, int sizx, int sizy, void* data)
-{
-  if (voidP != data)  DeAllocPixels();
-  siz_x = sizx;
-  siz_y = sizy;
-  //  if (dataType<0) (int&) dataType = (int)dType; // Sinon ERREUR. Exception?
-  if (dataType<0)  dataType = dType; // Sinon ERREUR. Exception?
-  switch (dataType) {
-  case kuint_1:
-    vect.u1 = new RzVect<uint_1> (siz_x * siz_y, (uint_1*)data);
-    voidP   = vect.u1->p;
-    IVal_p = &RzImage::IVal_u1;
-    FVal_p = &RzImage::FVal_u1;
-    DVal_p = &RzImage::DVal_u1;
-    break;
-  case kuint_2:
-    vect.u2 = new RzVect<uint_2> (siz_x * siz_y, (uint_2*)data);
-    voidP   = vect.u2->p;
-    IVal_p = &RzImage::IVal_u2;
-    FVal_p = &RzImage::FVal_u2;
-    DVal_p = &RzImage::DVal_u2;
-    break;
-  case kint_2:
-    vect.i2 = new RzVect<int_2> (siz_x * siz_y, (int_2*)data);
-    voidP   = vect.i2->p;
-    IVal_p = &RzImage::IVal_i2;
-    FVal_p = &RzImage::FVal_i2;
-    DVal_p = &RzImage::DVal_i2;
-    break;
-  case kint_4:
-    vect.i4 = new RzVect<int_4> (siz_x * siz_y, (int_4*)data);
-    voidP   = vect.i4->p;
-    IVal_p = &RzImage::IVal_i4;
-    FVal_p = &RzImage::FVal_i4;
-    DVal_p = &RzImage::DVal_i4;
-    break;
-  case kr_4:
-    vect.r4 = new RzVect<r_4> (siz_x * siz_y, (r_4*)data);
-    voidP   = vect.r4->p;
-    IVal_p = &RzImage::IVal_r4;
-    FVal_p = &RzImage::FVal_r4;
-    DVal_p = &RzImage::DVal_r4;
-    break;
-  case kr_8:
-    vect.r8 = new RzVect<r_8> (siz_x * siz_y, (r_8*)data);
-    voidP   = vect.r8->p;
-    IVal_p = &RzImage::IVal_r8;
-    FVal_p = &RzImage::FVal_r8;
-    DVal_p = &RzImage::DVal_r8;
-    break;
-  default:
-    printf("RzImage::SetPixels Error - Unsupported DataType= %d \n", (int)dataType);
-    break;    
-  } 
-}
-
-/* --Methode-- */
-void RzImage::DeAllocPixels()
-{
-if (!voidP)  return;
-  switch (dataType) {
-  case kuint_1:
-    if (! (--vect.u1->NImgRef()))
-      delete vect.u1;
-    vect.u1 = NULL;
-    break;
-  case kuint_2:
-    if (! (--vect.u2->NImgRef()))
-      delete vect.u2;
-    vect.u2 = NULL;
-    break;
-  case kint_2:
-    if (! (--vect.i2->NImgRef()))
-      delete vect.i2;
-    vect.i2 = NULL;
-    break;
-  case kint_4:
-    if (! (--vect.i4->NImgRef()))
-      delete vect.i4;
-    vect.i4 = NULL;
-    break;
-  case kr_4:
-    if (! (--vect.r4->NImgRef()))
-      delete vect.r4;
-    vect.r4 = NULL;
-    break;
-  case kr_8:
-    if (! (--vect.r8->NImgRef()))
-      delete vect.r8;
-    vect.r8 = NULL;
-    break;
-  default:
-    printf("RzImage::DeAllocPixels Error - Unsupported DataType= %d \n", (int)dataType);
-    break;    
-  }
-
-voidP = NULL;
-siz_x = siz_y = 0;
-vect.u2 = NULL;
-}
-
-//++
-// Titre	Informations globales
-//--
-//++
-// int_4  XSize(), YSize()
-//	Taille de l'image en X, Y
-// int_4  XOrg(),  YOrg()
-//	Origines (X,Y) de l'image. Cette origine permet en particulier 
-//	de conserver l'information de decalage, quand l'image est 
-//	extraite d'une image plus grande. Les valeurs de l'origine
-//	peuvent etre modifiees par la methode "SetOrg()"
-// void SetOrg(int_4 orgx, int_4 orgy)
-//	Modifie l'origine de l'image
-// float  XPxSize()  YPxSize()
-//	Taille des pixels (X,Y) de l'image. Peuvent etre modifiees
-//	par la methode "SetPxSize()"
-// void SetPxSize()
-// PBaseDataTypes   PixelType()
-//	Type des pixels de l'image "(kint_2, kint_4, kr_4, ...)"
-// char * PixelNomType()
-//	Nom du Type des pixels de l'image. Chaine de caracteres = kint_2, kint_4, ...
-// char * Nom()
-//	Nom de l'image. "Ident()" retourne l' "id" associe a l'image
-// void SetNameId(int imgid = 0, char const * nom = NULL)
-//	Permet de modifier l'identificateur et le nom d'une image
-// void SetAtt(int nbnul = -1, int nbsat = -1, -
-//             float minpix = 0, float maxpix = -1., -
-//             float moypix = 0, float sigpix = -1., -
-//             float fnd = -1., float sigfnd = -1.)
-//	Des donnees membres du type reels (float) 
-//	"fond, sigmaFond, minPix, moyPix,sigPix" et entier (int) "nbNul, nbSat"
-//	sont associees a chaque image. Leurs valeurs peuvent etre modifiees
-//	a l'aide de la methode "SetAtt()" ou la methode "CheckDyn()" 
-// int   CheckDyn(double min=-9.e19, double max=9.e19)
-//	Cette methode retourne le nombre de pixels hors dynamique "( <min ou >max )"
-//	Met a jour les donnees membres "min/maxPix nbNul/Sat".
-//	Calcule aussi la moyenne et le sigma des pixels -> "moyPix, sigPix"
-//--
-
-//++
-// Titre	I/O
-//--
-//++
-// void  Write(string const& flnm)
-// void  Save(char *flnm)
-//	Ecrit l'image en format PPF (PPersist) dans le fichier "flnm"
-// void  Read(string const& flnm)
-//	Lit le fichier "flnm" (au format PPF)
-//--
-
-/* --Methode-- */
-DVList&  RzImage::Info()
-{
-if (mInfo == NULL)  mInfo = new DVList;
-return(*mInfo);
-}
-
-/* --Methode-- */
-void RzImage::SetOrg(int_4 orgx, int_4 orgy)
-{
-org_x = orgx;   org_y = orgy;
-return;
-}
-
-/* --Methode-- */
-void RzImage::SetPxSize(float szx, float szy)
-{
-if (szx <= 0.)  szx = 1.;
-if (szy <= 0.)  szy = 1.;
-pxsz_x = szx;   pxsz_y = szy;
-return;
-}
-
-/* --Methode-- */
-void RzImage::SetAtt(int nbnul, int nbsat,
-              float minpix, float maxpix,
-              float moypix, float sigpix,
-              float fnd, float sigfnd)
-{
-nbNul = nbnul;  nbSat = nbsat;
-minPix = minpix;   maxPix = maxpix;
-moyPix = moypix; sigPix = sigpix;
-fond = fnd;  sigmaFond = sigfnd;
-return;
-}
-
-
-/* --Methode-- */
-void RzImage::SetNameId(int imgid, char const * nom)
-{
-id = imgid;
-if (nom)  { strncpy(name, nom, 32);  name[31] = '\0'; }
-else name[0] = '\0';
-return;
-}
-
-/* --Methode-- */
-void RzImage::Save(char *flnm)
-{
-POutPersist s(flnm);
-Write(s);
-}
-
-/* --Methode-- */
-void RzImage::WriteSelf(POutPersist& s) const
-
-/*  Ecriture de la structure image ds un fichier de maniere */ 
-/* brute - (Dump memoire)                                   */
-/* Pour utilisation par PPersist::Write()                   */
-
-{
-char buf[256];
-unsigned long sz;
-int i,j;
-int_4 itab[5];
-
-sprintf(buf,"\nRzImage(%s)[%d*%d]  Org: %d %d  PxSz: %g %g (Id=%d Nom=%s)\n",
-        PixelNomType(),siz_x, siz_y, org_x, org_y, pxsz_x, pxsz_y, id, name);
-i = strlen(buf); 
-sprintf(buf+i,"NbSat,Nul=%d %d Min,Max= %g %g Moy,Sig= %g %g Fond,Sig= %g %g\n",
-        nbSat, nbNul, minPix, maxPix, moyPix, sigPix, fond, sigmaFond);
-i += strlen(buf+i);
-for(j=i; j<255; j++)  buf[j] = ' ';  buf[255] = '\0';
-s.PutBytes(buf, 256);
-
-itab[0] = (int)dataType;
-itab[1] = siz_x;  itab[2] = siz_y;
-itab[3] = itab[4] = 0; 
-if (mInfo)  itab[3] = 1;    // Has DVList as info
-s.PutI4s(itab, 5);
-
-s.PutR4(fond);
-s.PutR4(sigmaFond);
-s.PutI4(nbNul);
-s.PutI4(nbSat);
-s.PutR4s(&minPix, 4); // minPix -> sigPix
-
-s.PutI4(org_x);
-s.PutI4(org_y);
-s.PutR4(pxsz_x);
-s.PutR4(pxsz_y);
-s.PutI4(isFits);
-s.PutBytes(name, 32);
-s.PutI4(id);
-
-sz = XSize()*YSize();
-switch (dataType) {
-case kuint_1:
-  s.PutBytes(voidP, sz);
-  break;
-case kuint_2:
-  s.PutU2s((uint_2*)voidP, sz);
-  break;
-case kint_2:
-  s.PutI2s((int_2*)voidP, sz);
-  break;
-case kint_4:
-  s.PutI4s((int_4*)voidP, sz);
-  break;
-case kr_4:
-  s.PutR4s((r_4*)voidP, sz);
-  break;
-case kr_8:
-  s.PutR8s((r_8*)voidP, sz);
-  break;
-default:
-  printf("RzImage::WriteSelf Error - Unsupported DataType= %d \n", (int)dataType);
-  break;    
-} 
-
-if (mInfo) s << (*mInfo);
-return;
-}
-
-
-/* --Methode-- */
-void RzImage::ReadSelf(PInPersist& s)
-/*  Relecture de fichier cree par WriteSelf()    */
-/*  Pour utilisation par PPersist::Read()        */
-{
-char buf[256];
-unsigned long sz;
-int_4 itab[5];
-int_4 opt;
-
-s.GetBytes(buf, 256);
-s.GetI4s(itab, 5);
-opt = (int_4)PixelType();
-if ((opt > 0) && (opt != itab[0]))  { 
-    cerr << "RzImage::ReadSelf() Image type (=" << opt 
-         << ") mismatch (type in file=" << itab[0] << ")" << endl;
-    THROW(typeMismatchErr); }
-Allocate((PBaseDataTypes)itab[0], itab[1], itab[2]);
-
-s.GetR4(fond);
-s.GetR4(sigmaFond);
-s.GetI4(nbNul);
-s.GetI4(nbSat);
-s.GetR4s(&minPix, 4); // minPix -> sigPix
-
-s.GetI4(org_x);
-s.GetI4(org_y);
-s.GetR4(pxsz_x);
-s.GetR4(pxsz_y);
-s.GetI4(isFits);
-s.GetBytes(name, 32);
-s.GetI4(id);
-
-sz = XSize()*YSize();
-switch (dataType) {
-case kuint_1:
-  s.GetBytes(voidP, sz);
-  break;
-case kuint_2:
-  s.GetU2s((uint_2*)voidP, sz);
-  break;
-case kint_2:
-  s.GetI2s((int_2*)voidP, sz);
-  break;
-case kint_4:
-  s.GetI4s((int_4*)voidP, sz);
-  break;
-case kr_4:
-  s.GetR4s((r_4*)voidP, sz);
-  break;
-case kr_8:
-  s.GetR8s((r_8*)voidP, sz);
-  break;
-default:
-  printf("RzImage::ReadSelf Error - Unsupported DataType= %d \n", (int)dataType);
-  break;    
-} 
-
-if (itab[3])  // has info
-  { if (mInfo == NULL)  mInfo = new DVList;
-  s >> (*mInfo); }
-
-return;
-}
-
-
-//++
-// Titre	Impression
-//--
-//++
-// void  Print(ostream& os)
-//	Imprime sur le flot "os" les informations globales concernant l'image
-// void  Print()
-//	Imprime (sur cout) les informations globales concernant l'image
-// ostream&   operator << (ostream& s, RzImage const & img)
-//      sortie sur flot "s" (Appel a "Print(s)").
-//--
-
-/* --Methode-- */
-void RzImage::Print(ostream& os) const
-{
-char buff[256];
-os << " ---- RzImage::Print() ----- \n";
-sprintf(buff, "RzImage(%s)[%d*%d]  Org: %d %d  PxSz= %g %g (Id=%d Nom=%s)\n",
-       PixelNomType(),siz_x, siz_y, org_x, org_y, pxsz_x, pxsz_y, id, name);
-os << buff;
-sprintf(buff, "NbSat,Nul=%d %d Min,Max= %g %g Moy,Sig= %g %g Fond,Sig= %g %g\n",
-       nbSat, nbNul, minPix, maxPix, moyPix, sigPix, fond, sigmaFond);
-os << buff;
-if (mInfo) mInfo->Print(os);
-os << endl;
-}
-
-/* --Methode-- */
-int RzImage::CheckDyn(double min, double max)
-
-/*  Cette methode retourne le nombre de pixels hors dynamique    */
-/* ds le pave ( <min ou >max )                                   */
-/* Met a jour la structure image Min/MaxPix nbNul/Sat            */
-/* Calcule aussi la moyenne et le sigma des pixels, met a jour   */
-/* moypix et sigpix dans la structure                            */
-
-{
-float pixv=0;
-double dv;
-
-float minadu = PutInRange(min, pixv); 
-float maxadu = PutInRange(max, pixv);
-float minpix = PutInRange(maxadu+1, pixv);
-float maxpix = PutInRange(minadu-1, pixv);
-
-double m = 0.;
-double s = 0.;
-int n9 = 0;
-int n0 = 0;
-int n = XSize()*YSize();
-for(int i=0; i<n; i++) 
-  {
-  pixv = FValue(i);
-  if (pixv <= maxadu && pixv >= minadu) 
-    {  
-    if (pixv < minpix)  minpix = pixv;
-    else if (pixv > maxpix)  maxpix = pixv; 
-    dv = (double)pixv;
-    m += dv;  s += (dv*dv);
-    }
-  else 
-    {  
-    if (pixv > maxadu)  n9++;
-    if (pixv < minadu)  n0++; 
-    }
-  }
-
-nbNul = n0;
-nbSat = n9;
-minPix = minpix;
-maxPix = maxpix;
-
-n -= (n0+n9);
-if (n > 0)
-  { dv = (double)n;  m /= dv;  s = s/dv - m*m;
-  if (s>0.)  s = sqrt(s);  else s = 0.;
-  moyPix = m;  sigPix = s; }
-else { moyPix = 0.;  sigPix = -1.; }
-
-return(n0+n9);
-}
-
-////////////////////////////////////////////////////////////////
-//++
-RzImage* RzImage::FitResidus(GeneralFit& gfit)
-//
-//	Retourne une RzImage R4 contenant les residus du fit ``gfit''.
-//--
-{
-if(XSize()<=0 || YSize()<=0) return NULL;
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL) return NULL;
-Vector par = gfit.GetParm();
-RzImage* img = new RzImage(DataType((r_4)0.),XSize(),YSize());
-img->SetOrg(XOrg(),YOrg());
-img->SetPxSize(XPxSize(),YPxSize());
-r_4* ptr = (r_4 *) img->VoidP();
-for(int i=0;i<XSize();i++) {
-  double x[2];
-  x[0] = XOrg()+(i+0.5)*XPxSize();
-  for(int j=0;j<YSize();j++) {
-    x[1] = YOrg()+(j+0.5)*YPxSize();
-    *(ptr+i+j*img->siz_x) = FValue(i,j) - (float) f->Value(x,par.Data());
-  }
-}
-return img;
-}
-
-//++
-RzImage* RzImage::FitFunction(GeneralFit& gfit)
-//
-//	Retourne RzImage R4 contenant la fonction du fit ``gfit''.
-//--
-{
-if(XSize()<=0 || YSize()<=0) return NULL;
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL) return NULL;
-Vector par = gfit.GetParm();
-RzImage* img = new RzImage(DataType((r_4)0.),XSize(),YSize());
-img->SetOrg(XOrg(),YOrg());
-img->SetPxSize(XPxSize(),YPxSize());
-r_4* ptr = (r_4 *) img->VoidP();
-for(int i=0;i<XSize();i++) {
-  double x[2];
-  x[0] = XOrg()+(i+0.5)*XPxSize();
-  for(int j=0;j<YSize();j++) {
-    x[1] = YOrg()+(j+0.5)*YPxSize();
-    *(ptr+i+j*img->siz_x) = (float) f->Value(x,par.Data());
-  }
-}
-return img;
-}
-
-//++
-// Titre	Acces aux pixels
-//	*Attention:* Les methodes IValue() FValue() et DValue() sont lentes.
-//	Ne pas les utiliser dans les parties du code ou la vitesse de traitement
-//	est critique.
-//--
-//++
-// void * VoidP()
-//	Renvoie un pointeur void sur le tableau des pixels. Doit etre converti
-//	dans le bon type suivant le contenu de l'image.
-// int IValue(int i, int j)
-//	Renvoie la valeur du pixel "(i,j)" converti en int
-// float FValue(int i, int j)
-//	Renvoie la valeur du pixel "(i,j)" converti en float
-// double DValue(int i, int j)
-//	Renvoie la valeur du pixel "(i,j)" converti en double
-// int IValue(int k)
-//	Renvoie la valeur du pixel numero "k" converti en int
-// float FValue(int k)
-//	Renvoie la valeur du pixel numero "k" converti en float
-// double DValue(int k)
-//	envoie la valeur du pixel numero "k" converti en double
-//
-//	Les pixels sont rangees ligne apres ligne 
-//|	{(1,1), (2,1), ... (m, 1), (1,2), ... , (m,2), .... (m,n)}
-//--
-
-/* --Methodes-- */
-int RzImage::IVal_u1(int k) const          {return vect.u1->IElem(k);}
-int RzImage::IVal_u2(int k) const          {return vect.u2->IElem(k);}
-int RzImage::IVal_i2(int k) const          {return vect.i2->IElem(k);}
-int RzImage::IVal_i4(int k) const          {return vect.i4->IElem(k);}
-int RzImage::IVal_r4(int k) const          {return vect.r4->IElem(k);}
-int RzImage::IVal_r8(int k) const          {return vect.r8->IElem(k);}
-
-float RzImage::FVal_u1(int k) const        {return vect.u1->FElem(k);}
-float RzImage::FVal_u2(int k) const        {return vect.u2->FElem(k);}
-float RzImage::FVal_i2(int k) const        {return vect.i2->FElem(k);}
-float RzImage::FVal_i4(int k) const        {return vect.i4->FElem(k);}
-float RzImage::FVal_r4(int k) const        {return vect.r4->FElem(k);}
-float RzImage::FVal_r8(int k) const        {return vect.r8->FElem(k);}
-
-double RzImage::DVal_u1(int k) const       {return vect.u1->DElem(k);}
-double RzImage::DVal_u2(int k) const       {return vect.u2->DElem(k);}
-double RzImage::DVal_i2(int k) const       {return vect.i2->DElem(k);}
-double RzImage::DVal_i4(int k) const       {return vect.i4->DElem(k);}
-double RzImage::DVal_r4(int k) const       {return vect.r4->DElem(k);}
-double RzImage::DVal_r8(int k) const       {return vect.r8->DElem(k);}
-
-
-
-// ******** INSTANCES
-#if defined(__xlC) 
-void instancetemprzimg(int n)
-{
-/* Cette fonction sert uniquement a forcer le compilo a instancier les
-  classes/fonctions template   */
-
-RzVect<uint_1> rzvu1(n);
-RzVect<uint_2> rzvu2(n);
-RzVect<int_2> rzvi2(n);
-RzVect<int_4> rzvi4(n);
-RzVect<r_4> rzvr4(n);
-RzVect<r_8> rzvr8(n);
-return;
-}
-
-#endif
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template RzVect<uint_1>
-#pragma define_template RzVect<uint_2>
-#pragma define_template RzVect<int_2>
-#pragma define_template RzVect<int_4>
-#pragma define_template RzVect<r_4>
-#pragma define_template RzVect<r_8>
-#endif
-
-#ifdef GNU_TEMPLATES
-template class RzVect<uint_1>;
-template class RzVect<uint_2>;
-template class RzVect<int_2>;
-template class RzVect<int_4>;
-template class RzVect<r_4>;
-template class RzVect<r_8>;
-#endif
-
-#if defined(ANSI_TEMPLATES) 
-template class RzVect<uint_1>;
-template class RzVect<uint_2>;
-template class RzVect<int_2>;
-template class RzVect<int_4>;
-template class RzVect<r_4>;
-template class RzVect<r_8>;
-#endif
Index: trunk/SophyaLib/NTools/rzimage.h
===================================================================
--- trunk/SophyaLib/NTools/rzimage.h	(revision 1103)
+++ 	(revision )
@@ -1,236 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-//  Classe image generique   E.Aubourg , E. Lesquoy     
-//                           Modifs R. Ansari   04/95
-
-// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
-
-#ifndef RZIMAGE_SEEN
-#define RZIMAGE_SEEN
-
-#include <iostream.h>
-
-#include "rzvect.h"
-#include "datatypes.h"
-#include "ppersist.h"
-#include "dvlist.h"
-
-namespace SOPHYA {
-class GeneralFit;
-}
-
-// Flags de verifications sur les indices 
-
-//#define IMGRGCHECK
-//#define IMGVOIDCHECK
-
-
-// ------------- Classe RzImage ------------------  
-
-typedef union {   // il faut acceder le bon en fonction de datatype
-  RzVect<uint_1>* u1;
-  RzVect<uint_2>* u2;
-  RzVect<int_2>*  i2;
-  RzVect<int_4>*  i4;
-  RzVect<r_4>*    r4;
-  RzVect<r_8>*    r8;
-} ImgVectP ;
-
-
-
-class RzImage : public PPersist , public AnyDataObj {
-  //class RzImage EXC_AWARE {
-public:
-
-                RzImage(PBaseDataTypes dType, int sizx, int sizy, 
-                        int imgId = 0, char const * imgName = 0);
-                RzImage(PBaseDataTypes dType=kpbdt_unknown);
-                RzImage(const RzImage&, int sharePixels=0);
-
-                RzImage(char *flnm);    // Creation/Lecture fichier de obtenu par Write()
-
-  virtual       ~RzImage(); 
-
-  static PPersist*      Create()                { return new RzImage;}
-
-  RzImage&      operator= (RzImage const &);
-
-  inline int_4  XSize() const {return siz_x;}
-  inline int_4  YSize() const {return siz_y;}
-
-  inline int_4  XOrg() const {return org_x;}
-  inline int_4  YOrg() const {return org_y;}
-
-  inline float  XPxSize() const {return pxsz_x;}
-  inline float  YPxSize() const {return pxsz_y;}
-
-  inline ImgVectP    Vect() const {return vect;}
-  inline void * VoidP() const {return voidP;}
-  inline int    IsFits() const {return isFits;}
-
-  inline PBaseDataTypes    PixelType() const { return dataType; }
-  inline char * PixelNomType() const { return DataName(dataType); }
-
-  inline char * Nom()  { return name; }
-  inline const char * Nom() const { return name; }
-  inline int_4  Ident() const { return id; }
-
-  DVList&       Info();
- 
-  void          Allocate(PBaseDataTypes dType, int sizx, int sizy, ImgVectP* pvpsh=NULL);
-  void          DeAllocPixels();
-  void          SetPixels(PBaseDataTypes dType, int sizx, int sizy, void* data);
-
-  void          SetOrg(int_4 orgx, int_4 orgy);
-  void          SetPxSize(float szx=1, float szy=1);
-  void          SetAtt(int nbnul = -1, int nbsat = -1,
-                       float minpix = 0, float maxpix = -1.,
-                       float moypix = 0, float sigpix = -1., 
-                       float fnd = -1., float sigfnd = -1.);
-
-  void          SetNameId(int imgid = 0, char const * nom = NULL);
-
-// Fonctions d'impressions 
-  virtual void  Print(ostream& os) const;
-  inline void   Print() const { Print(cout); }
-
-  virtual int   CheckDyn(double min=-9.e19, double max=9.e19);
-
-// Resultats d'un GeneralFit
-  RzImage* 	FitResidus(GeneralFit& gfit);
-  RzImage* 	FitFunction(GeneralFit& gfit);
-
-  void          Save(char *flnm);
-  virtual void  WriteSelf(POutPersist&) const;
-  virtual void  ReadSelf(PInPersist&);
-  virtual AnyDataObj* DataObj() { return(this); }
-  virtual void       SetDataObj(AnyDataObj &) 
-  { throw  ForbiddenError("RzImage::SetDataObj() not allowed ! "); }
-
-//  Fonctions d'acces aux pixels avec conversion 
-// ATTENTION LENT ! EVITER AUX ENDROITS CRITIQUES.
-
-  int           IValue(int i, int j) const ;    
-  int           IValue(int k) const ;           
-  float         FValue(int i, int j) const ;    
-  float         FValue(int k) const ;
-  double        DValue(int i, int j) const ;
-  double        DValue(int k) const ;
-
-// Quelques variables caracterisant la distribution des pixels 
-  r_4       fond;         // Fond de l'image 
-  r_4       sigmaFond;    // Fluctuation du fond
-  int_4     nbNul;        // Nb de pixels < min
-  int_4     nbSat;        // Nb de pixels > max 
-  r_4       minPix;       // Valeur mini des pixels >= min <= max 
-  r_4       maxPix;       // Valeur maxi des pixels >= min <= max 
-  r_4       moyPix;       // Valeur moyenne des pixels
-  r_4       sigPix;       // Sigma distribution des pixels 
-
-protected:
-  PBaseDataTypes  dataType;
-  int_4     siz_x,siz_y;        //  Taille x,y    
-  int_4     org_x,org_y;        //  Origines si image lu ds un fichier   
-  r_4       pxsz_x, pxsz_y;     //  Taille des pixels 
-  int_4     isFits;             //  Beurk. Ah que Reza ne me fait-il pas faire! 
-  char name[32];                //  Nom de l'image (Gestion des objets) 
-  int_4 id;                     //  Identificateur (Gestion des objets) 
-
-  void* voidP;          // un pointeur sans type   -
-                        // Vivement le RTTI qu'on puisse eliminer ces choses
-  ImgVectP vect;        // il faut acceder le bon en fonction de datatype
-
-  DVList* mInfo;        // Infos (variables) attachees a l'image
-      
-private:
-  int (RzImage::* IVal_p)(int) const;
-  float (RzImage::* FVal_p)(int) const;
-  double (RzImage::* DVal_p)(int) const;
-  
-  int IVal_u1(int k) const;
-  int IVal_u2(int k) const;
-  int IVal_i2(int k) const;
-  int IVal_r4(int k) const;
-  int IVal_i4(int k) const;
-  int IVal_r8(int k) const;
-  
-  float FVal_u1(int k) const;
-  float FVal_u2(int k) const;
-  float FVal_i2(int k) const;
-  float FVal_r4(int k) const;
-  float FVal_i4(int k) const;
-  float FVal_r8(int k) const;
-  
-  double DVal_u1(int k) const;
-  double DVal_u2(int k) const;
-  double DVal_i2(int k) const;
-  double DVal_r4(int k) const;
-  double DVal_i4(int k) const;
-  double DVal_r8(int k) const;
-};
-
-// Definition de l'operateur << 
-inline ostream& operator << (ostream& s, RzImage const & img)
-  {  img.Print(s);  return(s);  }
-
-// Implementation des methodes d'acces pixels inline 
-
-#ifdef IMGRGCHECK
-#define RZCHECKIMG2(_x_,_y_)                                  \
-      if ((_x_ >= siz_x) || (_y_ >= siz_y) ||              \
-          (_x_ < 0) || (_y_ < 0)) THROW(rangeCheckErr);  \
-      if (!voidP) THROW(nullPtrErr)
-#define RZCHECKIMG1(_x_)                                  \
-      if ((_x_ >= siz_x*siz_y) || (_x_ < 0)) THROW(rangeCheckErr);  \
-      if (!voidP) THROW(nullPtrErr)
-#else
-#if defined(IMGVOIDCHECK)
-#define RZCHECKIMG2(_x_,_y_) \
-      if (!voidP) THROW(NullPtrErr)
-#define RZCHECKIMG1(_x_,_y_) \
-      if (!voidP) THROW(NullPtrErr)
-#else
-#define RZCHECKIMG2(_x_,_y_)
-#define RZCHECKIMG1(_x_)
-#endif
-#endif /* IMGRGCHECK */
-
-// Methodes d'acces pixels inline 
-
-inline int RzImage::IValue(int k) const
-{ 
-RZCHECKIMG1(k);
-return (this->*IVal_p)(k); 
-}
-
-inline int RzImage::IValue(int i, int j) const
-{ 
-RZCHECKIMG2(i,j);
-return IValue(i+j*siz_x); 
-}
-
-inline float RzImage::FValue(int k) const
-{ 
-RZCHECKIMG1(k);
-return (this->*FVal_p)(k); 
-}
-
-inline float RzImage::FValue(int i, int j) const
-{ 
-RZCHECKIMG2(i,j);
-return FValue(i+j*siz_x); 
-}
-
-inline double RzImage::DValue(int k) const
-{ 
-RZCHECKIMG1(k);
-return (this->*DVal_p)(k); 
-}
-
-inline double RzImage::DValue(int i, int j) const
-{ 
-RZCHECKIMG2(i,j);
-return DValue(i+j*siz_x); 
-}
-
-
-#endif
