Index: trunk/SophyaLib/NTools/NTools.o.list
===================================================================
--- trunk/SophyaLib/NTools/NTools.o.list	(revision 753)
+++ trunk/SophyaLib/NTools/NTools.o.list	(revision 756)
@@ -1,12 +1,8 @@
-arrfitter.o
 cimage.o
 cspline.o
-cvector.o
-datacards.o
 datatypes.o
 dates.o
 datime.o
 difeq.o
-dvlist.o
 dynccd.o
 fct1dfit.o
@@ -24,5 +20,4 @@
 integ.o
 linfit.o
-matrix.o
 matxop.o
 median.o
@@ -30,6 +25,7 @@
 nbrandom.o
 nbtri.o
+ntoolsinit.o
 ntupintf.o
-outilsinit.o
+objfitter.o
 perandom.o
 poly.o
@@ -37,5 +33,4 @@
 rzimage.o
 simplesort.o
-strutil.o
 tabmath.o
 utils.o
Index: trunk/SophyaLib/NTools/cvector.cc
===================================================================
--- trunk/SophyaLib/NTools/cvector.cc	(revision 753)
+++ 	(revision )
@@ -1,212 +1,0 @@
-#include "machdefs.h"
-#include <string.h>
-#include "cvector.h"
-#include "generalfit.h"
-#include "tvector.h"
-
-//++
-// Class	OVector
-// Lib	Outils++
-// include	cvector.h
-//
-//    Vecteur colonne, en fait une matrice avec une seule colonne, pour faire
-//    des opérations matricielles.      
-//--
-
-//++
-// Links	Parents
-// OMatrix
-//--
-
-//++
-// Titre	Constructeurs
-//--
-
-//++
-OVector::OVector(int n)
-//
-//	Constructeur, n = nombre d'éléments.
-//--
-: OMatrix(n, 1)
-{END_CONSTRUCTOR}
-
-
-//++
-OVector::OVector(int n, double* values)
-//
-//	Constructeur, à partir des valeurs. Pas d'allocation.
-//--
-: OMatrix(n, 1, values)
-{END_CONSTRUCTOR}
-
-
-//++
-OVector::OVector(const OVector& v)
-//
-//	Constructeur par copie.
-//--
-: OMatrix(v)
-{END_CONSTRUCTOR}
-
-
-//++
-OVector::OVector(const OMatrix& a)
-//
-//	Constructeur par "copie" à partir d'une matrice, qui doit avoir une seule colonne.
-//
-//	*Exceptions :*
-//	sizeMismatchErr    si la matrice a plus d'une colonne
-//--
-: OMatrix(a.nr,1)      // OMatrix(a) ne marche pas, pourquoi ???? bug gcc ???
-{
-  if (a.nc != 1) THROW(sizeMismatchErr);
-  memcpy(data, a.data, a.nr * sizeof(double));
-  END_CONSTRUCTOR
-}
-
-//++
-OVector::OVector(const TVector<r_8>& v)
-//
-//	Constructeur par "copie" a partir d'un TVector<r_8>.
-//	Attention, les donnees sont partagees.
-//--
-: OMatrix(v)
-{
-}
-
-//++
-// Titre	Opérateurs
-//--
-
-//++
-// double& operator()(int n)
-// double const& operator()(int n) const
-//	Accès aux éléments.
-//--
-
-
-//++
-OVector& OVector::operator = (double x)
-//
-//	Affectation à partir d'un scalaire. Tous les éléments prennent cette valeur.
-//--
-{
-  for (int i=0; i<nr; i++)
-    (*this)(i) = x ;
-  return *this;
-}
-
-//++
-double operator* (const OVector& v1, const OVector& v2)
-//
-//	Produit scalaire entre deux vecteurs.
-//--
-{
-  if (v1.nr != v2.nr) THROW(sizeMismatchErr);
-  double *p    = v1.data;
-  double *pEnd = v1.data + v1.ndata;
-  double *q    = v2.data;
-
-  double r = 0;
-
-  while (p<pEnd)
-    r += *p++ * *q++;
-
-  return r;
-}
-
-//++
-// OVector operator* (const OVector& v, double b)
-//	multiplication par un scalaire.
-//--
-
-//++
-// OVector operator* (const OMatrix& a, const OVector& b)
-//	produit matrice*vecteur.
-//--
-
-//++
-// Titres	Méthodes
-//--
-
-//++
-// int NElts() const
-//
-//	Nombre de lignes du vecteur.
-//--
-
-//++
-// void Realloc(int n, bool force=false)
-//
-//	Change la taille du vecteur. Réallocation physique seulement si
-//	pas assez de place, ou forcée si force=true.
-//--
-
-//++
-double LinSolveInPlace(OMatrix& a, OVector& b)
-//
-//	Résolution du système A*C = B
-//--
-{
-  if (a.NCol() != b.NRows()) THROW(sizeMismatchErr);
-  if (a.NCol() != a.NRows()) THROW(sizeMismatchErr);
-
-  return OMatrix::GausPiv(a,b);
-}
-
-
-//++
-double LinSolve(const OMatrix& a, const OVector& b, OVector& c)
-//
-//	Résolution du système A*C = B, avec C retourné dans B
-//--
-{ 
-  if (a.NCol() != b.NRows()) THROW(sizeMismatchErr);
-  if (a.NCol() != a.NRows()) THROW(sizeMismatchErr);
-  c = b;
-  OMatrix a1(a);
-  return OMatrix::GausPiv(a1,c);
-}
-
-//////////////////////////////////////////////////////////
-//++
-OVector OVector::FitResidus(GeneralFit& gfit,double xorg,double dx)
-//
-//	Retourne une classe contenant les residus du fit ``gfit''.
-//	La coordonnee de l'element (i) est -> x = xorg + i*dx
-//--
-{
-if(NElts()<=0)
-  throw(SzMismatchError("OVector::FitResidus: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("OVector::FitResidus: NULL pointer\n"));
-OVector par = gfit.GetParm();
-OVector v(*this);
-for(int i=0;i<NElts();i++) {
-  double x = xorg+i*dx;
-  v(i) -= f->Value(&x,par.Data());
-}
-return v;
-}
-
-//++
-OVector OVector::FitFunction(GeneralFit& gfit,double xorg,double dx)
-//
-//	Retourne une classe contenant la fonction du fit ``gfit''.
-//	La coordonnee de l'element (i) est -> x = xorg + i*dx
-//--
-{
-if(NElts()<=0)
-  throw(SzMismatchError("OVector::FitResidus: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("OVector::FitResidus: NULL pointer\n"));
-OVector par = gfit.GetParm();
-OVector v(*this);
-for(int i=0;i<NElts();i++) {
-  double x = xorg+i*dx;
-  v(i) = f->Value(&x,par.Data());
-}
-return v;
-}
Index: trunk/SophyaLib/NTools/cvector.h
===================================================================
--- trunk/SophyaLib/NTools/cvector.h	(revision 753)
+++ 	(revision )
@@ -1,101 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-#ifndef VECTOR_SEEN
-#define VECTOR_SEEN
-#include "matrix.h"
-
-namespace SOPHYA {
-  class GeneralFit;
-  template <class T> class TVector;
-}
-
-// <summary> Vecteur colonne pour operations matricielles </summary>
-// Vecteur colonne, en fait une matrice avec une seule colonne, pour faire
-// des operations matricielles.
-class OVector : public OMatrix {
-  friend class TVector<r_8>;
-public:
-  // Constructeur, n = nombre d'elements.
-  EXPLICIT OVector(int n=1);
-  // Constructeur, a partir des valeurs. Pas d'allocation.
-  OVector(int n, double* values);
-  // Constructeur par copie
-  OVector(const OVector& v);
-  // Constructeur par "copie" a partir d'une matrice, qui doit avoir une colonne
-  // <thrown> sizeMismatchErr </thrown>
-  OVector(const OMatrix& a);
-  // Constructeur par copie a partir d'un TVector<r_8>
-  OVector(const TVector<r_8>& v);
-
-  // Construction automatique pour PPF
-  // <group>
-  enum {classId = ClassId_Vector};
-  int_4                 ClassId() const         { return classId; }
-  static PPersist*      Create() {return new OVector(1);}
-  // </group>
-  
-  // Change la taille du vecteur. Reallocation physique seulement si
-  // pas assez de place, ou forcee si force=true
-  void Realloc(int n, bool force=false);
-
-  OVector& operator = (const OVector& v);
-  OVector& operator = (double x);
-
-  // Acces aux elements
-  // <group>
-  double& operator()(int n);
-  double const& operator()(int n) const;
-  // </group>
-
-  // produit scalaire
-  // <group>
-  friend double operator* (const OVector& v1, const OVector& v2);
-  friend OVector operator* (const OVector& v, double b)
-  {return OVector(((OMatrix const&)v) * b);}
-  // </group>
-  // produit matrice*vecteur
-  friend OVector operator* (const OMatrix& a, const OVector& b)
-  {return OVector(a * ((OMatrix const&) (b)));}
-
-  // Nombre de lignes du vecteur
-  int NElts() const {return nr;}
-
-  // Resolution du systeme A*C = B
-  friend double LinSolve(const OMatrix& a, const OVector& b, OVector& c);
-  
-  // Resolution du systeme A*C = B, avec C retourne dans B
-  friend double LinSolveInPlace(OMatrix& a, OVector& b);
-
-  // Residus et fonction fittees.
-  OVector FitResidus(GeneralFit& gfit,double xorg=0.,double dx=1.);
-  OVector FitFunction(GeneralFit& gfit,double xorg=0.,double dx=1.);
-
-};
-
-
-inline OVector& OVector::operator = (const OVector& v)
-{ OMatrix::operator =(v); return *this; }
-
-
-inline double const& OVector::operator()(int n) const
-{
-#ifdef RGCHECK
-  if (n<0 || n>=ndata) THROW(rangeCheckErr);
-#endif
-  return data[n];
-}
-
-
-inline double& OVector::operator()(int n)
-{ 
-#ifdef RGCHECK
-  if (n<0 || n>=ndata) THROW(rangeCheckErr);
-#endif
-  return data[n];
-}
-
-inline void OVector::Realloc(int n, bool force)
-{ OMatrix::Realloc(n,1,force);}
-
-
-#endif /* VECTOR_SEEN */
Index: trunk/SophyaLib/NTools/datacards.cc
===================================================================
--- trunk/SophyaLib/NTools/datacards.cc	(revision 753)
+++ 	(revision )
@@ -1,312 +1,0 @@
-// $Id: datacards.cc,v 1.3 1999-11-20 21:03:16 ansari Exp $
-//
-// Datacards, acquisition EROS II
-//
-//
-// Eric Aubourg, Decembre 95
-//
-// DAPNIA/SPP (Saclay) / CEA
-
-#include "machdefs.h"
-#include "datacards.h"
-#include "pexceptions.h"
-#include <algorithm>
-#include <iostream.h>
-#include <iomanip.h>
-#include <stdio.h>
-
-//++
-// Class	DataCards
-// Lib		Outils++ 
-// include	datacards.h
-//
-//   	Cette classe permet la gestion des parametres d'un programme a partir 
-//   	de mot-cle (lecture d'un fichier par exemple)
-//--
-
-//++
-// Titre	Constructeurs
-//--
-//++
-//
-// DataCards()
-// DataCards(string const& fn)
-//    Createur avec lecture des parametres ds le fichier de nom "fn"
-//--
-
-DataCards::DataCards()
-{
-}
-
-DataCards::DataCards(string const& fn)
-{
-  ReadFile(fn);
-}
-
-//++
-// Titre	Methodes
-//--
-//++
-// AddProcF(ProcCard f, string const& mtch="*")
-//	Ajoute une fonction de traitement a la liste pour les mots cle
-//      compatibles avec la chaine "mtch" ("mtch" peut contenir "*" en debut 
-//      fin de mot) 
-//
-// Clear()
-//	Supprime les cartes existantes
-//
-// ReadFile(string const& fn) 
-//      Lit le contenu du fichiers "fn" et ajoute les cartes a la liste
-//
-// AppendCard(string const& line)
-//	Rajoute la carte "line" a la liste
-//--
-
-void
-DataCards::AddProcF(ProcCard f, string const& mtch)
-{
-CrdPF mpf;
-if (f == NULL)  return;
-mpf.pf = f;
-if (mtch.length() <= 0)  mpf.patt = "*";
-else  mpf.patt = mtch;
-cpfs.push_back(mpf);
-
-// On applique cette nouvelle fonction aux cartes existantes
-CardList::iterator  ic;
-for(ic = cards.begin(); ic != cards.end(); ic ++)
-  {
-  vector<string>::iterator ik;
-  string tks;
-  for(ik = (*ic).tokens.begin(); ik != (*ic).tokens.end(); ik++)
-    tks = tks + " " + (*ik);
-  ApplyPF(mpf, (*ic).kw, tks);
-  }
-}
-
-void
-DataCards::Clear()
-{
-cards.erase(cards.begin(), cards.end());
-}
-
-void
-DataCards::ReadFile(string const& fn)
-{
-  string file = fn;
-  if (file == "") {
-    char * efn = getenv("PEIDA_DATACARDS");
-    if (efn != NULL)    file = efn;  
-  }
-  if (file == "")  return;
-
-  try {
-    DoReadFile(file);
-  } catch(...) {
-    char* wdp = getenv("PEIDA_WORK");
-    if (wdp) {
-      cerr << "DataCards::ReadFile() Error reading file " << fn << " (Trying with PEIDA_WORK) \n";
-      file = wdp + file;
-      DoReadFile(file);
-    }
-    else cerr << "DataCards::ReadFile() Error reading file " << fn << "\n";
-    throw IOExc("DataCards::ReadFile() Error");  
-  } 
-}
-
-void
-DataCards::AppendCard(string const& crd)
-{
-Card c;
-size_t p = 1;
-size_t q = crd.find_first_of(" \t");
-size_t l = crd.length();
-
-string toks;
-if (l < 2)  return;
-if (crd[0] != '@')  return;
-
-if (q < l)
-  {  c.kw = crd.substr(p,q-p);  toks = crd.substr(q, l-q); }
-else { c.kw = crd.substr(p,l-p);  toks = ""; }
-//  On applique les ProcFunc's
-ApplyPFL(c.kw, toks);
-while (q < l) 
-  {
-  p = crd.find_first_not_of(" \t",q+1); // au debut d'un token
-  if (p>=l) break;
-  q = crd.find_first_of(" \t",p); // la fin du token;
-  string token = crd.substr(p,q-p);
-  c.tokens.push_back(token);
-  }
-// On supprime la carte de la liste, si elle existe deja ...
-RemoveCard(c.kw);
-cards.push_back(c);
-}
-
-void
-DataCards::DoReadFile(string const& fn)
-{
-char line_buff[512];
-FILE *fip;
-
-if ( (fip = fopen(fn.c_str(),"r")) == NULL )  
-  throw IOExc("DataCards::DoReadFile() fopen Error ") ;
-while (fgets(line_buff,511,fip) != NULL)
-  {
-  line_buff[strlen(line_buff)-1] = '\0';   /*  LF/CR de la fin */
-  string line(line_buff);
-  AppendCard(line);
-  }
-}
-
-int
-DataCards::ApplyPF(CrdPF & cpf, string const& key, string const& toks)
-{
-int l,lk;
-int rc = 0;
-// On verifie si le "pattern" correspond
-bool mtch = false;
-l = cpf.patt.length(); 
-if (cpf.patt == "*")  mtch = true;
-else if (cpf.patt[0] == '*')   
-  {
-  lk = key.length();
-  if (cpf.patt[l-1] != '*')
-    {
-    if (strcmp(key.c_str()+(lk-l+1), cpf.patt.c_str()+1) == 0)   mtch = true;
-    }
-  else if  (key.find(cpf.patt.substr(1,l-2)) < lk)  mtch = true;
-  }
-else if (cpf.patt[l-1] == '*')
-  {
-  if ( strncmp(key.c_str(), cpf.patt.c_str(),l-1) == 0)  mtch = true;
-  }
-else if (key == cpf.patt)  mtch = true;
-
-// Si oui, on appelle la fonction correspondante
-if (mtch)  rc = cpf.pf(key, toks); 
-
-return(rc);
-}
-
-
-int
-DataCards::ApplyPFL(string const& key, string const& toks)
-{
-int rc = 0;
-CrdPFList::iterator icf;
-for(icf = cpfs.begin(); icf != cpfs.end(); icf++)
-  rc += ApplyPF((*icf), key, toks);
-return(rc);
-}
-
-void  
-DataCards::RemoveCard(string const& key)
-{
-CardList::iterator i;
-for(i=cards.begin(); i != cards.end(); i++)
-  if ((*i).kw == key) { cards.erase(i);  break;  }
-}
-
-DataCards::Card *
-DataCards::FindKey(string const& key)
-{
-/*
-  CardList::iterator i = find_if(cards.begin(), cards.end(), bind2nd(KeyEq(),key));
-  if (i == cards.end() ) return NULL;
-*/
-  CardList::iterator i;
-  for(i=cards.begin(); i != cards.end(); i++)
-    if ((*i).kw == key) return &*i;
-
-  return NULL;
-}
-
-//++
-// Titre	Acces aux parametres
-//--
-//++
-// int   NbCards()
-//	Renvoie le nombre de cartes data
-// bool	 HasKey(string const& key) 
-//	Indique l'existence d'une carte avec la cle "key"
-// int   NbParam(string const& key)
-//	Indique le nombre de parametre (separes par des espaces) pour la cle "key"
-// string  SParam(string const& key, int num = 0, string def="")
-//	Renvoie la valeur du parametre numero "num" ( 0..(NbParam()-1) ) sous forme de
-//	chaine de caracteres ("string")
-// long    IParam(string const& key, int numero = 0, long def = 0)
-//	Renvoie la valeur du parametre numero "num" ( 0..(NbParam()-1) ) convertie 
-//	en entier ("long")
-// double  DParam(string const& key, int numero = 0, double def = 0)
-//	Renvoie la valeur du parametre numero "num" ( 0..(NbParam()-1) ) convertie 
-//	en flottant ("double")
-//--
-
-
-bool
-DataCards::HasKey(string const& key)
-{
-  return FindKey(key) != NULL;
-}
-
-int 
-DataCards::NbCards()
-{
-return(cards.size());
-}
-
-int 
-DataCards::NbParam(string const& key)
-{
-  DataCards::Card * p = FindKey(key);
-  if (!p) return(-1);
-  else return(p->tokens.size());
-}
-
-string
-DataCards::SParam(string const& key, int numero, string def)
-{
-  DataCards::Card * p = FindKey(key);
-  if (!p) return def;
-  if ( (numero < 0) || (numero >= p->tokens.size()) )  return def;
-  return p->tokens[numero];
-}
-
-long
-DataCards::IParam(string const& key, int numero, long def)
-{
-  string p = SParam(key, numero, "");
-  if (p == "") return def;
-  long i;
-  //istrstream(p.c_str(), p.length()) >> i;
-  sscanf(p.c_str(),"%ld",&i);
-  return i;
-}
-
-double
-DataCards::DParam(string const& key, int numero, double def)
-{
-  string p = SParam(key, numero, "");
-  if (p == "") return def;
-  double i;
-  //istrstream(p.c_str(), p.length()) >> i;
-  sscanf(p.c_str(),"%lg",&i);
-  return i;
-}
-
-   
-ostream& operator << (ostream& s, DataCards c)
-{
-  for (DataCards::CardList::iterator i = c.cards.begin(); i != c.cards.end(); i++) {
-    s << setw(10) << (*i).kw << " ";
-    for (vector<string>::iterator j = (*i).tokens.begin(); j != (*i).tokens.end(); j++)
-      s << (*j) << " ";
-    s << endl;
-  }
-  return s;
-}
-
-
-
Index: trunk/SophyaLib/NTools/datacards.h
===================================================================
--- trunk/SophyaLib/NTools/datacards.h	(revision 753)
+++ 	(revision )
@@ -1,83 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-//
-// $Id: datacards.h,v 1.2 1999-10-21 15:25:42 ansari Exp $
-//
-// Datacards, acquisition EROS II
-//
-//
-// Eric Aubourg, Decembre 95
-// Reza Ansari, Aout 96
-//
-// DAPNIA/SPP (Saclay) / CEA    LAL - IN2P3/CNRS  (Orsay)
-
-#ifndef DATACARDS_SEEN
-#define DATACARDS_SEEN
-
-#include <string.h>
-#include <string>
-#include <functional>
-#include <list>
-#include <vector>
-#include <string>
-
-#include "peida.h"
-
-typedef int (*ProcCard)(string const& key, string const& toks);
- 
-class DataCards EXC_AWARE {
-public:
-   DataCards();                  
-   DataCards(string const& fn);
-
-           // nom dans variable d'environnement PEIDA_DATACARDS
-           // par defaut, peida.datacards                        
-           // Si pas chemin complet, on tente dans repertoire 
-           // en cours, puis dans PEIDA_WORK
-
-   virtual ~DataCards() {}
-
-   void    AddProcF(ProcCard f, string const& mtch="*");
-
-   void    Clear();
-   void    ReadFile(string const& fn);
-   void    AppendCard(string const& line);
-
-   int     NbCards();
-   bool    HasKey(string const& key);
-   int     NbParam(string const& key);
-   string  SParam(string const& key, int numero = 0, string def="");
-   long    IParam(string const& key, int numero = 0, long def = 0);
-   double  DParam(string const& key, int numero = 0, double def = 0);
-   
-   friend ostream& operator << (ostream& s, DataCards c);
-
-public:
-   struct Card {
-     string kw;
-     vector<string> tokens;
-	 STRUCTCOMPF(Card,kw)
-   };
-   typedef list<Card> CardList;
-   struct CrdPF {
-     ProcCard pf;
-     string  patt;
-	 STRUCTCOMPF(CrdPF,pf)
-   };
-   typedef list<CrdPF> CrdPFList;
-protected:
-   CardList cards;
-   CrdPFList cpfs;
-
-   void  DoReadFile(string const& fn);
-
-   int   ApplyPF(CrdPF & cpf, string const& key, string const& toks);
-   int   ApplyPFL(string const& key, string const& toks);
-
-   void  RemoveCard(string const& key);
-   
-   Card* FindKey(string const& key);
-   struct KeyEq : binary_function<Card, string, bool> {
-    bool operator()(const Card& x, const string& y) const { return x.kw == y; }
-   };
-};
-#endif
Index: trunk/SophyaLib/NTools/dvlist.cc
===================================================================
--- trunk/SophyaLib/NTools/dvlist.cc	(revision 753)
+++ 	(revision )
@@ -1,450 +1,0 @@
-//  Classe Dynamic Variable List (DVList) de PEIDA
-//                  R. Ansari  1997
-// LAL (Orsay) / IN2P3-CNRS  DAPNIA/SPP (Saclay) / CEA
-
-#include "machdefs.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "dvlist.h"
-#include "strutil.h"
-
-//++
-// Class	DVList
-// Lib		Outils++
-// include	dvlist.h
-//
-//	Cette classe permet de gérer une ensemble de variables (ou paramètres)
-//	pouvant être définies dynamiquement à l'execution. Le nom des 
-//	variables ne doit pas contenir de blancs ("<espace>") et est 
-//	limité à 64 caractères maximum. Cette classe 
-//	offre la possibilité de sauvegarder l'ensemble 
-//	des variables (Nom, Type, Valeur) dans un fichier, ou de
-//	recréer l'objet DVList et l'ensemble de ses variables à 
-//	partir d'un fichier (Objet PPersist). Une zone commentaire (max=320 c.) 
-//	est associée à chaque objet DVList, accessible à travers  
-//	la méthode "Comment()". Les objets de cette classe sont  
-//	en particulier destinés à être inclus dans d'autres objets 
-//	PPersist plus complexes. La classe DVList gère des 
-//	variables de type entier ("int_8"), réél double précision ("r_8")
-//	et de type chaine de caracteres ("string, char*", maxi 30 caracteres ).
-//	Une classe intermédiaire (*MuTyV*) est utilisée pour représenter une 
-//	variable et fournit les services de conversion entre les différents types.
-//--
-//--
-//++
-// Links	Parents
-// PPersist
-//--
-
-char MuTyV::myStrBuf[64];   // Declare static ds le .h 
-
-static MuTyV ddvdum(-9.e19);
-
-
-//++
-// Titre	Constructeurs
-//--
-
-//++
-// DVList()
-//	Constructeur par défaut
-// DVList(DVList& cfd)
-//	Constructeur par copie. Le nouvel objet est une copie complète de "cfd"
-// DVList(char* flnm)
-//	Constructeur avec initialisation à partir du contenu du fichier (PPF)
-//	"flnm". Le fichier doit avoir été créé par la méthode "Write()"
-//--
-
-/* --Methode-- */
-DVList::DVList()
-{
-comment = "";
-}
-
-/* --Methode-- */
-DVList::DVList(const DVList& dvl)
-{
-Merge(dvl);
-}
-
-/* --Methode-- */
-DVList::DVList(char *flnm)
-{
-PInPersist s(flnm);
-ObjFileIO<DVList> fiodvl(this);
-fiodvl.Read(s);
-}
-
-
-/* --Methode-- */
-DVList::~DVList()
-{
-}
-
-//++
-// Titre	Gestion des variables et opérateurs
-//--
-
-//++
-// void  Clear()
-//	Supprime la définition de toutes les variables de l'objet.
-// DVList&  Merge(const DVList& lv)
-//	Fusionne l'objet avec la liste des variables de l'objet "lv"
-// DVList&  operator= (const DVList& cofr)
-//	Remplace la liste des variables de l'objet par celle de l'objet "cofr".   
-//--
-
-/* --Methode-- */
-DVList&     DVList::operator= (const DVList& dvl)
-{
-Clear();
-return(Merge(dvl));
-}
-
-
-/* --Methode-- */
-void        DVList::Clear()
-{
-mvlist.erase(mvlist.begin(), mvlist.end());
-comment = "";
-}
-
-/* --Methode-- */
-DVList&     DVList::Merge(const DVList& dvl)
-{
-ValList::const_iterator it;
-for(it = dvl.mvlist.begin(); it != dvl.mvlist.end(); it++)
-  {
-  switch ((*it).second.elval.typ) 
-    {
-    case 'I' :
-      SetI((*it).first, (*it).second.elval.mtv.iv);
-      break;
-    case 'D' : 
-      SetD((*it).first, (*it).second.elval.mtv.dv);
-      break;
-    case 'S' : 
-      SetS((*it).first, (*it).second.elval.mtv.strv);
-      break;
-    default :
-      break;
-    }
-  }
-comment = comment + "\n" + dvl.comment;
-return(*this);
-}
-
-
-//++
-// int_8   GetI(string const& key, int_8  def=-1)
-// r_8     GetD(string const& key, r_8 def=-9.e19)
-// string  GetS(string const& key, char* def="")
-//	Retourne la valeur de la variable de nom "key" et de type entier, réél, 
-//	chaine de caracteres.
-//	Si la variable n'existe pas, la valeur par défaut "def" est renvoyée.
-// string  GetComment(string const& key)
-//	Retourne le commentaire associé à la variable de nom "key".
-//--
-
-/* --Methode-- */
-int_8       DVList::GetI(string const& key, int_8 def)
-{
-ValList::iterator it = mvlist.find(key);
-if (it == mvlist.end())  return(def);
-if ( (*it).second.elval.typ != 'I') return(def);
-return((*it).second.elval.mtv.iv);
-}
-
-/* --Methode-- */
-r_8      DVList::GetD(string const& key, r_8 def)
-{
-ValList::iterator it = mvlist.find(key);
-if (it == mvlist.end())  return(def);
-if ( (*it).second.elval.typ != 'D') return(def);
-return((*it).second.elval.mtv.dv);
-}
-
-/* --Methode-- */
-string      DVList::GetS(string const& key, char* def)
-{
-ValList::iterator it = mvlist.find(key);
-if (it == mvlist.end())  return(def);
-if ( (*it).second.elval.typ != 'S') return(def);
-return((*it).second.elval.mtv.strv);
-}
-
-/* --Methode-- */
-string      DVList::GetComment(string const& key)
-{
-ValList::iterator it = mvlist.find(key);
-if (it == mvlist.end())  return("");
-return((*it).second.elcomm);
-}
-
-//++
-// void  SetI(string const& key, int_8  val)
-// void  SetD(string const& key, r_8 val)
-// void  SetS(string const& key, char*  val)
-// void  SetS(string const& key, string val)
-//	Crée la variable de nom "key", de type entier, double, string et 
-//	lui attribue la valeur "val". Si une variable du même nom existe, 
-//	sa valeur et eventuellement son type sont modifiés.  Les noms de
-//	variables ne doivent pas contenir de caractères spéciaux, 
-//	en particulier pas de CR/LF.
-// void  SetComment(string const& key, string const& comm)
-//	Modifie le commentaire associé à la variable de nom "key", si
-//	celle-ci existe. Le texte du commentaire ne doit pas contenir
-//	de caractères spéciaux, et en particulier pas de CR/LF. 
-//--
-
-/* --Methode-- */
-void        DVList::SetI(string const& key, int_8 val)
-{
-Get(key) = (int_8)val;
-}
-
-/* --Methode-- */
-void        DVList::SetD(string const& key, r_8 val)
-{
-Get(key) = (r_8)val;
-}
-
-/* --Methode-- */
-void        DVList::SetS(string const& key, char const* val)
-{
-MuTyV div(val);
-Get(key) = div;
-}
-
-/* --Methode-- */
-void        DVList::SetS(string const& key, string val)
-{
-MuTyV div(val);
-Get(key) = div;
-}
-
-/* --Methode-- */
-void        DVList::SetComment(string const& key, string const& comm)
-{
-ValList::iterator it = mvlist.find(key);
-if (it == mvlist.end())  return;
-(*it).second.elcomm = comm;
-}
-
-//++
-// MuTyV&  Get(string const& key) 
-//	Renvoie une référence sur l'objet "MuTyV" de la liste avec le nom "key".
-//	Si cet objet (variable) n'existe pas, il est créé.
-// MuTyV&     operator()  (string const& key) 
-// MuTyV&     operator[]  (string const& key) 
-//
-//	Renvoie la variable de nom "key". Equivalent à "Get(key)". 
-// string&  Comment()
-//	Renvoie une référence sur le champ commentaire de l'objet.
-//--
-
-/* --Methode-- */
-MuTyV&      DVList::Get(string const& key)
-{
-size_t l = key.length();
-if ( (l < 1) || (key.find_first_of(" ") < l) )  return(ddvdum);
-// dvlElement xxx = {(int_8)0 , ""};  marche pas sur mac/CW (!) - cf DY
-dvlElement xxx; xxx.elval = (int_8)0;  xxx.elcomm = "";
-ValList::iterator it = mvlist.find(key);
-if (it == mvlist.end()) mvlist[key] = xxx;  
-it = mvlist.find(key);
-if (it == mvlist.end()) return(ddvdum); 
-else return((*it).second.elval);
-}
-
-//++
-// Titre	Entrée-Sortie
-//--
-
-//++
-//  void  Print()
-//	Imprime (sur "cout") la liste des variables et leurs valeurs.
-//  void  Print(ostream& os)
-//	Imprime sur le flot "os" la liste des variables et leurs valeurs.
-//  ostream&    operator << (ostream& s, DVList& dvl)
-//	sortie sur flot "s" (Appel a "Print(s)").
-//  void  Write(string const& fn)
-//	Ecriture d'un fichier PPersist de nom "fn"
-//  void  Read(string const& fn)
-//	Lecture d'un fichier PPersist de nom "fn"
-//--
-
-
-/* --Methode-- */
-void        DVList::Print(ostream& os) const
-{
-os << "DVList::Print() - NVar= " << (int)mvlist.size() << "\n";
-if (comment.length() > 0)  os << comment << endl;
-char buff[256];
-ValList::const_iterator it;
-for(it = mvlist.begin(); it != mvlist.end(); it++)  {
-  switch ((*it).second.elval.typ) 
-    {
-    case 'I' :
-      sprintf(buff, "%s = %d (int) %s\n", (*it).first.substr(0,64).c_str(), 
-	      (*it).second.elval.mtv.iv, (*it).second.elcomm.substr(0,128).c_str());
-      break;
-    case 'D' : 
-      sprintf(buff, "%s = %.20g (double) %s\n", (*it).first.substr(0,64).c_str(), 
-	      (*it).second.elval.mtv.dv, (*it).second.elcomm.substr(0,128).c_str());
-      break;
-    case 'S' : 
-      sprintf(buff, "%s = %s (string) %s\n", (*it).first.substr(0,64).c_str(), 
-	      (*it).second.elval.mtv.strv, (*it).second.elcomm.substr(0,128).c_str());
-      break;
-    default :
-      break;
-    }
-  os << (string)buff;
-  }
-os << endl;
-}
-
-
-//++
-// Titre	Exemples
-//	Utilisation des objets *MuTyV* :
-//|	MuTyV mvu;         // Declaration d'une variable 
-//|	mvu = 60;          // mvu est de type entier (= 60)
-//|	mvu = 66.6;        // et double (= 66.6) maintenant ...   
-//|	MuTyV mvi(14);     // On construit une variable entiere = 14
-//|	r_4 x = mvi;     // x vaut 14.0
-//|	MuTyV mvd(44.4);   // Variable double = 44.4
-//|	int k = mvd;       // k vaut 44  
-//|	MuTyV mvs("Bonjour, Ca va ?");   // Variable chaine de caracteres 
-//|	string s = mvs;    // s vaut "Bonjour, Ca va ?"  
-//	Utilisation des *DVList* :		 
-//|	DVList  dvl;
-//|	dvl("toto") = 14;
-//|	dvl("titi") = 25.5;
-//|	dvl("tata") = "Bonjour, Ca va ?";
-//	Majuscules et minuscules sont differenciees pour les noms, pas de blanc ...
-//|	dvl("hello") = 88;
-//|	dvl("Hello") = 77.77;
-//|	dvl.Comment() = "Test d'objet DVList, avec variables hello, Hello ";
-//|	dvl.Write("dvlist.ppf");
-//	Plus loin, ou dans un autre programme, on relit le fichier fabrique plus haut 
-//|	DVList dvlr("dvlist.ppf");
-//|	int k = dvlr["toto"] ;     //  k = 14
-//|	r_8 b = dvlr["titi"] ;  //  b = 25.5
-//|	string s =  dvlr["tata"] ; //  s = "Bonjour, Ca va ?"
-//|	r_4 c = dvlr["Hello"] ;  //  c = 77.77
-//|	int l =  dvlr["Hello"] ;   //  l = 77
-//|	int m =  dvlr["hello"] ;   //  m = 88
-//--
-
-
-//----------------------------------------------------------
-// Classe pour la gestion de persistance
-// ObjFileIO<DVList>
-//----------------------------------------------------------
-
-/* --Methode-- */
-void        ObjFileIO<DVList>::WriteSelf(POutPersist& s) const
-{
-char buf[512];
-
-int lc = dobj->Comment().length();
-if (lc > 511) lc = 511;
-if (lc > 0) {
-  sprintf(buf,"Comment: ( %6d ) ", lc); 
-  s.PutLine(buf);
-  s.PutBytes(dobj->Comment().c_str(), lc);
-  }
-s.PutLine("----Variable-List---------------");
-DVList::ValList::const_iterator it;
-for(it = dobj->Begin(); it != dobj->End(); it++)  {
-  switch ((*it).second.elval.typ) {
-    case 'I' :
-      sprintf(buf,"I %s %d", (*it).first.substr(0,64).c_str(), (*it).second.elval.mtv.iv );
-      s.PutLine(buf); 
-      break;
-    case 'D' : 
-      sprintf(buf,"D %s %.20g", (*it).first.substr(0,64).c_str(), (*it).second.elval.mtv.dv );
-      s.PutLine(buf); 
-      break;
-    case 'S' : 
-      sprintf(buf,"S %s %s", (*it).first.substr(0,64).c_str(), (*it).second.elval.mtv.strv );
-      s.PutLine(buf); 
-      break;
-    default :
-      break;
-  }
-// Ecriture eventuelle du commentaire associe
-  if ((*it).second.elcomm.length() > 0) {
-    sprintf(buf,"# %s", (*it).second.elcomm.substr(0,256).c_str());
-    s.PutLine(buf); 
-  }
-}
-
-s.PutLine("ZZZZZ--End-of-Varible-List------");
-}
-
-/* --Methode-- */
-void        ObjFileIO<DVList>::ReadSelf(PInPersist& s)
-{
-char buf[512];
-int_8 j,iv;
-r_8 dv;
-bool ok=true;
-buf[0] = '\0';
-dobj->Clear();
-
-s.GetLine(buf, 511);  // Pour lire les "------- "
-if (buf[0] != '-') {  // Il y a un champ commentaire a lire 
-  buf[18] ='\0';
-  int lc = atoi(buf+11);
-  if (lc > 511)  { 
-    cerr << "DVList::ReadSelf() Pb/Bug ??  CommentLength= " << lc << endl;
-    lc = 511;
-    }
-  s.GetBytes(buf, lc);
-  buf[lc] ='\0';
-  dobj->Comment() = buf;
-  }
-
-string key="";
-while(ok) {
-  s.GetLine(buf, 511);
-  buf[511] = '\0';
-  if (strncmp(buf,"ZZZZZ",5) == 0)  { ok=false; break; }
-  if (buf[0] == '#') {
-    dobj->SetComment(key, buf+2);
-    continue;
-  }
-  j = posc(buf+2, ' ')+2;
-  buf[j] = '\0';
-  switch (buf[0]) {
-    case 'I' :
-      iv = (int_8)atol(buf+j+1);
-      key = buf+2;
-      dobj->SetI(key, iv);
-      break;
-    case 'D' :
-      dv = atof(buf+j+1);
-      key = buf+2;
-      dobj->SetD(key, dv);
-      break;
-    case 'S' :
-      key = buf+2;
-      dobj->SetS(key, buf+j+1);
-      break;
-    default :
-      break;
-    }
-  } 
-}
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template ObjFileIO<DVList>
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class ObjFileIO<DVList>;
-#endif
Index: trunk/SophyaLib/NTools/dvlist.h
===================================================================
--- trunk/SophyaLib/NTools/dvlist.h	(revision 753)
+++ 	(revision )
@@ -1,136 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// Classe DVList : Liste dynamique de variables (valeurs) 
-// identifiees par un nom    Reza Ansari - Dec 96
-
-#ifndef DVLIST_H_SEEN
-#define DVLIST_H_SEEN
-
-#include "objfio.h"
-
-#include <stdio.h>
-
-#include <iostream.h>
-
-#include <list>
-#include <map>
-#include <string.h>
-#include <string>
-
-namespace SOPHYA {
-
-// Classe utilitaire pour manipuler des variables typees 
-class MuTyV {
-public:
-  union {
-  int_8 iv;
-  r_8 dv;
-  char strv[31];
-  } mtv; 
-  char typ;
-
-  static char myStrBuf[64];  
-
-  inline MuTyV() { typ = 'I'; mtv.iv = 0;  mtv.dv = 0.;  mtv.strv[0] ='\0'; }
-  inline MuTyV(int_4 i) { typ = 'I'; mtv.iv = (int_8)i; mtv.dv = 0.;  mtv.strv[0] ='\0'; }
-  inline MuTyV(int_8 i) { typ = 'I'; mtv.iv = i; mtv.dv = 0.;  mtv.strv[0] ='\0'; }
-  inline MuTyV(r_4 f) { typ = 'D'; mtv.dv = (r_8)f;  mtv.iv = 0;  mtv.strv[0] ='\0'; }
-  inline MuTyV(r_8 d) { typ = 'D'; mtv.dv = d; mtv.iv = 0;  mtv.strv[0] ='\0'; }
-  inline MuTyV(char const* s)  { typ = 'S'; strncpy(mtv.strv, s, 31); mtv.strv[30] = '\0'; }
-  inline MuTyV(string const& s) { typ = 'S'; strncpy(mtv.strv, s.c_str(), 31); mtv.strv[30] = '\0'; }
-  inline int_4  operator= (int_4 v)  { typ = 'I'; mtv.iv = (int_8)v; return(v); }
-  inline int_8  operator= (int_8 v)  { typ = 'I'; mtv.iv = v; return(v); }
-  inline r_4  operator= (r_4 v)  { typ = 'D'; mtv.dv = (r_8)v; return(v); }
-  inline r_8 operator= (r_8 v) { typ = 'D'; mtv.dv = v; return(v); }
-  inline char*  operator= (char* s)  { typ = 'S'; strncpy(mtv.strv, s, 31); 
-                                       mtv.strv[30] = '\0';  return(s); }
-  inline string& operator= (string& s)    { typ = 'S'; strncpy(mtv.strv, s.c_str(), 31); 
-                                            mtv.strv[30] = '\0'; return(s); }
-
-  inline operator int_4() { if (typ == 'I')  return((int_4)mtv.iv);
-                            else if (typ == 'D') return((int_4)mtv.dv); 
-                            else return(atol(mtv.strv)); }
-  inline operator int_8() { if (typ == 'I')  return((int_8)mtv.iv);
-                            else if (typ == 'D') return((int_8)mtv.dv); 
-                            else return(atol(mtv.strv)); }
-  inline operator r_4() { if (typ == 'I')  return((r_4)mtv.iv);
-                            else if (typ == 'D') return((r_4)mtv.dv); 
-                            else return((r_4)atof(mtv.strv)); }
-  inline operator r_8() { if (typ == 'I')  return((r_8)mtv.iv);
-                            else if (typ == 'D') return(mtv.dv); 
-                            else return(atof(mtv.strv)); }
-  inline operator string() { char *ss=myStrBuf;
-                            if (typ == 'I')  sprintf(ss,"%ld", mtv.iv);
-                            else if (typ == 'D') sprintf(ss,"%.20g", mtv.dv);
-                            else ss = mtv.strv;
-                            return(ss); }
-};
-
-//  Classe liste de variables  Dynamic Variable List  
-
-class DVList : public AnyDataObj {
-public:
-//  enum {classId = ClassId_DVList };
-
-                    DVList();
-                    DVList(const DVList&);
-                    DVList(char *flnm);
-
-  virtual           ~DVList();
-
-  DVList&           operator= (const DVList&);
-
-  void              Clear();
-  DVList&           Merge(const DVList&);
-
-  int_8             GetI(string const& key, int_8 def=-1);
-  r_8               GetD(string const& key, r_8 def=-9.e19);
-  string            GetS(string const& key, char* def="");
-  string            GetComment(string const& key);
-
-  void              SetI(string const& key, int_8 val);
-  void              SetD(string const& key, r_8 val);
-  void              SetS(string const& key, char const*  val);
-  void              SetS(string const& key, string val);
-  void              SetComment(string const& key, string const& comm);
-
-  MuTyV&            Get(string const& key);
-  inline MuTyV&     operator()  (string const& key)  { return Get(key); }
-  inline MuTyV&     operator[]  (string const& key)  { return Get(key); }
-  inline string&    Comment() { return(comment); }
-
-  inline void       Print() const  { Print(cout); }  
-  virtual void      Print(ostream& os)  const;
-
-// Chaque element dans un DVList est constitue desormais d'un MuTyV
-// et d'une chaine de caracteres (commentaire) regroupe dans la structure
-// dvlElement. Ces elements sont associes aux noms de variables dans un 
-// map<...> ValList.            Reza 02/2000
-
-  struct dvlElement {MuTyV elval; string elcomm; } ;
-  typedef map<string, dvlElement, less<string> >  ValList; 
-  inline ValList::const_iterator Begin() { return(mvlist.begin()); } 
-  inline ValList::const_iterator End() { return(mvlist.end()); } 
-  
-
-private:
-  
-  ValList mvlist;
-  string comment;
-};
-
-inline ostream& operator << (ostream& s, DVList const & dvl)
-  {  dvl.Print(s);  return(s);  }
-
-inline POutPersist& operator << (POutPersist& os, DVList & obj)
-{ ObjFileIO<DVList> fio(&obj);  fio.Write(os);  return(os); }
-inline PInPersist& operator >> (PInPersist& is, DVList & obj)
-{ ObjFileIO<DVList> fio(&obj);  fio.Read(is);  return(is); }
-
-// Classe pour la gestion de persistance
-// ObjFileIO<DVList>
-
-} // namespace SOPHYA
-
-#endif /* DVLIST_H__SEEN */
-
-
Index: trunk/SophyaLib/NTools/fftpackc.c
===================================================================
--- trunk/SophyaLib/NTools/fftpackc.c	(revision 753)
+++ trunk/SophyaLib/NTools/fftpackc.c	(revision 756)
@@ -11,9 +11,9 @@
 
 /*  ------ File cfftb.f ------ */
-/* Subroutine */ int cfftb_(integer *n, r_4 *c__, r_4 *wsave)
-{
-    extern /* Subroutine */ int cfftb1_(integer *, r_4 *, r_4 *, r_4 *, 
+/* Subroutine */ int cfftb_(int_4 *n, r_4 *c__, r_4 *wsave)
+{
+    extern /* Subroutine */ int cfftb1_(int_4 *, r_4 *, r_4 *, r_4 *, 
 	    int_4 *);
-    static integer iw1, iw2;
+    static int_4 iw1, iw2;
 
     /* Parameter adjustments */
@@ -32,22 +32,22 @@
 
 /*  ------ File cfftb1.f ------ */
-/* Subroutine */ int cfftb1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, 
+/* Subroutine */ int cfftb1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, 
 	int_4 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer idot, i__;
-    extern /* Subroutine */ int passb_(integer *, integer *, integer *, 
-	    integer *, integer *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, 
+    static int_4 idot, i__;
+    extern /* Subroutine */ int passb_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, 
 	    r_4 *);
-    static integer k1, l1, l2, n2;
-    extern /* Subroutine */ int passb2_(integer *, integer *, r_4 *, r_4 *, 
-	    r_4 *), passb3_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *), passb4_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *, r_4 *), passb5_(integer *, integer *, r_4 *, r_4 *, 
+    static int_4 k1, l1, l2, n2;
+    extern /* Subroutine */ int passb2_(int_4 *, int_4 *, r_4 *, r_4 *, 
+	    r_4 *), passb3_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *), passb4_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *, r_4 *), passb5_(int_4 *, int_4 *, r_4 *, r_4 *, 
 	    r_4 *, r_4 *, r_4 *, r_4 *);
-    static integer na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
+    static int_4 na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
 
     /* Parameter adjustments */
@@ -164,9 +164,9 @@
 
 /*  ------ File cfftf.f ------ */
-/* Subroutine */ int cfftf_(integer *n, r_4 *c__, r_4 *wsave)
-{
-    extern /* Subroutine */ int cfftf1_(integer *, r_4 *, r_4 *, r_4 *, 
+/* Subroutine */ int cfftf_(int_4 *n, r_4 *c__, r_4 *wsave)
+{
+    extern /* Subroutine */ int cfftf1_(int_4 *, r_4 *, r_4 *, r_4 *, 
 	    int_4 *);
-    static integer iw1, iw2;
+    static int_4 iw1, iw2;
 
     /* Parameter adjustments */
@@ -185,22 +185,22 @@
 
 /*  ------ File cfftf1.f ------ */
-/* Subroutine */ int cfftf1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, 
+/* Subroutine */ int cfftf1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, 
 	int_4 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer idot, i__;
-    extern /* Subroutine */ int passf_(integer *, integer *, integer *, 
-	    integer *, integer *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, 
+    static int_4 idot, i__;
+    extern /* Subroutine */ int passf_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, 
 	    r_4 *);
-    static integer k1, l1, l2, n2;
-    extern /* Subroutine */ int passf2_(integer *, integer *, r_4 *, r_4 *, 
-	    r_4 *), passf3_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *), passf4_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *, r_4 *), passf5_(integer *, integer *, r_4 *, r_4 *, 
+    static int_4 k1, l1, l2, n2;
+    extern /* Subroutine */ int passf2_(int_4 *, int_4 *, r_4 *, r_4 *, 
+	    r_4 *), passf3_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *), passf4_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *, r_4 *), passf5_(int_4 *, int_4 *, r_4 *, r_4 *, 
 	    r_4 *, r_4 *, r_4 *, r_4 *);
-    static integer na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
+    static int_4 na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
 
     /* Parameter adjustments */
@@ -317,8 +317,8 @@
 
 /*  ------ File cffti.f ------ */
-/* Subroutine */ int cffti_(integer *n, r_4 *wsave)
-{
-    extern /* Subroutine */ int cffti1_(integer *, r_4 *, int_4 *);
-    static integer iw1, iw2;
+/* Subroutine */ int cffti_(int_4 *n, r_4 *wsave)
+{
+    extern /* Subroutine */ int cffti1_(int_4 *, r_4 *, int_4 *);
+    static int_4 iw1, iw2;
 
     /* Parameter adjustments */
@@ -336,12 +336,12 @@
 
 /*  ------ File cffti1.f ------ */
-/* Subroutine */ int cffti1_(integer *n, r_4 *wa, int_4 *ifac)
+/* Subroutine */ int cffti1_(int_4 *n, r_4 *wa, int_4 *ifac)
 {
     /* Initialized data */
 
-    static integer ntryh[4] = { 3,4,2,5 };
+    static int_4 ntryh[4] = { 3,4,2,5 };
 
     /* System generated locals */
-    integer i__1, i__2, i__3;
+    int_4 i__1, i__2, i__3;
 
     /* Builtin functions */ 
@@ -350,11 +350,11 @@
     /* Local variables */
     static r_4 argh;
-    static integer idot, ntry, i__, j;
+    static int_4 idot, ntry, i__, j;
     static r_4 argld;
-    static integer i1, k1, l1, l2, ib;
+    static int_4 i1, k1, l1, l2, ib;
     static r_4 fi;
-    static integer ld, ii, nf, ip, nl, nq, nr;
+    static int_4 ld, ii, nf, ip, nl, nq, nr;
     static r_4 arg;
-    static integer ido, ipm;
+    static int_4 ido, ipm;
     static r_4 tpi;
 
@@ -454,5 +454,5 @@
 
 /*  ------ File cosqb.f ------ */
-/* Subroutine */ int cosqb_(integer *n, r_4 *x, r_4 *wsave)
+/* Subroutine */ int cosqb_(int_4 *n, r_4 *x, r_4 *wsave)
 {
     /* Initialized data */
@@ -461,9 +461,9 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
     static r_4 x1;
-    extern /* Subroutine */ int cosqb1_(integer *, r_4 *, r_4 *, r_4 *);
+    extern /* Subroutine */ int cosqb1_(int_4 *, r_4 *, r_4 *, r_4 *);
 
     /* Parameter adjustments */
@@ -493,13 +493,13 @@
 
 /*  ------ File cosqb1.f ------ */
-/* Subroutine */ int cosqb1_(integer *n, r_4 *x, r_4 *w, r_4 *xh)
+/* Subroutine */ int cosqb1_(int_4 *n, r_4 *x, r_4 *w, r_4 *xh)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
-    extern /* Subroutine */ int rfftb_(integer *, r_4 *, r_4 *);
-    static integer kc, np2, ns2;
+    static int_4 modn, i__, k;
+    extern /* Subroutine */ int rfftb_(int_4 *, r_4 *, r_4 *);
+    static int_4 kc, np2, ns2;
     static r_4 xim1;
 
@@ -547,5 +547,5 @@
 
 /*  ------ File cosqf.f ------ */
-/* Subroutine */ int cosqf_(integer *n, r_4 *x, r_4 *wsave)
+/* Subroutine */ int cosqf_(int_4 *n, r_4 *x, r_4 *wsave)
 {
     /* Initialized data */
@@ -554,9 +554,9 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
     static r_4 tsqx;
-    extern /* Subroutine */ int cosqf1_(integer *, r_4 *, r_4 *, r_4 *);
+    extern /* Subroutine */ int cosqf1_(int_4 *, r_4 *, r_4 *, r_4 *);
 
     /* Parameter adjustments */
@@ -584,13 +584,13 @@
 
 /*  ------ File cosqf1.f ------ */
-/* Subroutine */ int cosqf1_(integer *n, r_4 *x, r_4 *w, r_4 *xh)
+/* Subroutine */ int cosqf1_(int_4 *n, r_4 *x, r_4 *w, r_4 *xh)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
-    extern /* Subroutine */ int rfftf_(integer *, r_4 *, r_4 *);
-    static integer kc, np2, ns2;
+    static int_4 modn, i__, k;
+    extern /* Subroutine */ int rfftf_(int_4 *, r_4 *, r_4 *);
+    static int_4 kc, np2, ns2;
     static r_4 xim1;
 
@@ -636,5 +636,5 @@
 
 /*  ------ File cosqi.f ------ */
-/* Subroutine */ int cosqi_(integer *n, r_4 *wsave)
+/* Subroutine */ int cosqi_(int_4 *n, r_4 *wsave)
 {
     /* Initialized data */
@@ -643,5 +643,5 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Builtin functions */
@@ -649,6 +649,6 @@
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int rffti_(integer *, r_4 *);
+    static int_4 k;
+    extern /* Subroutine */ int rffti_(int_4 *, r_4 *);
     static r_4 fk, dt;
 
@@ -670,18 +670,18 @@
 
 /*  ------ File cost.f ------ */
-/* Subroutine */ int cost_(integer *n, r_4 *x, r_4 *wsave)
+/* Subroutine */ int cost_(int_4 *n, r_4 *x, r_4 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
-    extern /* Subroutine */ int rfftf_(integer *, r_4 *, r_4 *);
+    static int_4 modn, i__, k;
+    extern /* Subroutine */ int rfftf_(int_4 *, r_4 *, r_4 *);
     static r_4 c1, t1, t2;
-    static integer kc;
+    static int_4 kc;
     static r_4 xi;
-    static integer nm1, np1;
+    static int_4 nm1, np1;
     static r_4 x1h;
-    static integer ns2;
+    static int_4 ns2;
     static r_4 tx2, x1p3, xim2;
 
@@ -753,5 +753,5 @@
 
 /*  ------ File costi.f ------ */
-/* Subroutine */ int costi_(integer *n, r_4 *wsave)
+/* Subroutine */ int costi_(int_4 *n, r_4 *wsave)
 {
     /* Initialized data */
@@ -760,5 +760,5 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Builtin functions */
@@ -766,9 +766,9 @@
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int rffti_(integer *, r_4 *);
-    static integer kc;
+    static int_4 k;
+    extern /* Subroutine */ int rffti_(int_4 *, r_4 *);
+    static int_4 kc;
     static r_4 fk, dt;
-    static integer nm1, np1, ns2;
+    static int_4 nm1, np1, ns2;
 
     /* Parameter adjustments */
@@ -797,13 +797,13 @@
 
 /*  ------ File ezfft1.f ------ */
-/* Subroutine */ int ezfft1_(integer *n, r_4 *wa, int_4 *ifac)
+/* Subroutine */ int ezfft1_(int_4 *n, r_4 *wa, int_4 *ifac)
 {
     /* Initialized data */
 
-    static integer ntryh[4] = { 4,2,3,5 };
+    static int_4 ntryh[4] = { 4,2,3,5 };
     static r_4 tpi = 6.28318530717959f;
 
     /* System generated locals */
-    integer i__1, i__2, i__3;
+    int_4 i__1, i__2, i__3;
 
     /* Builtin functions */
@@ -812,9 +812,9 @@
     /* Local variables */
     static r_4 argh;
-    static integer ntry, i__, j, k1, l1, l2, ib, ii, nf, ip, nl, is, nq, nr;
+    static int_4 ntry, i__, j, k1, l1, l2, ib, ii, nf, ip, nl, is, nq, nr;
     static r_4 ch1, sh1;
-    static integer ido, ipm;
+    static int_4 ido, ipm;
     static r_4 dch1, ch1h, arg1, dsh1;
-    static integer nfm1;
+    static int_4 nfm1;
 
     /* Parameter adjustments */
@@ -916,14 +916,14 @@
 
 /*  ------ File ezfftb.f ------ */
-/* Subroutine */ int ezfftb_(integer *n, r_4 *r__, r_4 *azero, r_4 *a, 
+/* Subroutine */ int ezfftb_(int_4 *n, r_4 *r__, r_4 *azero, r_4 *a, 
 	r_4 *b, r_4 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer i__;
-    extern /* Subroutine */ int rfftb_(integer *, r_4 *, r_4 *);
-    static integer ns2;
+    static int_4 i__;
+    extern /* Subroutine */ int rfftb_(int_4 *, r_4 *, r_4 *);
+    static int_4 ns2;
 
     /* Parameter adjustments */
@@ -965,17 +965,17 @@
 
 /*  ------ File ezfftf.f ------ */
-/* Subroutine */ int ezfftf_(integer *n, r_4 *r__, r_4 *azero, r_4 *a, 
+/* Subroutine */ int ezfftf_(int_4 *n, r_4 *r__, r_4 *azero, r_4 *a, 
 	r_4 *b, r_4 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer i__;
-    extern /* Subroutine */ int rfftf_(integer *, r_4 *, r_4 *);
+    static int_4 i__;
+    extern /* Subroutine */ int rfftf_(int_4 *, r_4 *, r_4 *);
     static r_4 cf;
-    static integer ns2;
+    static int_4 ns2;
     static r_4 cfm;
-    static integer ns2m;
+    static int_4 ns2m;
 
 
@@ -1030,7 +1030,7 @@
 
 /*  ------ File ezffti.f ------ */
-/* Subroutine */ int ezffti_(integer *n, r_4 *wsave)
-{
-    extern /* Subroutine */ int ezfft1_(integer *, r_4 *, int_4 *);
+/* Subroutine */ int ezffti_(int_4 *n, r_4 *wsave)
+{
+    extern /* Subroutine */ int ezfft1_(int_4 *, r_4 *, int_4 *);
 
     /* Parameter adjustments */
@@ -1046,18 +1046,18 @@
 
 /*  ------ File passb.f ------ */
-/* Subroutine */ int passb_(integer *nac, integer *ido, integer *ip, integer *
-	l1, integer *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, 
+/* Subroutine */ int passb_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *
+	l1, int_4 *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, 
 	r_4 *wa)
 {
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
 
     /* Local variables */
-    static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
+    static int_4 idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
 	    idl, inc, idp;
     static r_4 wai, war;
-    static integer ipp2;
+    static int_4 ipp2;
 
     /* Parameter adjustments */
@@ -1287,12 +1287,12 @@
 
 /*  ------ File passb2.f ------ */
-/* Subroutine */ int passb2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passb2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ti2, tr2;
 
@@ -1349,5 +1349,5 @@
 
 /*  ------ File passb3.f ------ */
-/* Subroutine */ int passb3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passb3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2)
 {
@@ -1358,8 +1358,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
 
@@ -1437,12 +1437,12 @@
 
 /*  ------ File passb4.f ------ */
-/* Subroutine */ int passb4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passb4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
@@ -1542,5 +1542,5 @@
 
 /*  ------ File passb5.f ------ */
-/* Subroutine */ int passb5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passb5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4)
 {
@@ -1553,8 +1553,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
 	    ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
@@ -1677,18 +1677,18 @@
 
 /*  ------ File passf.f ------ */
-/* Subroutine */ int passf_(integer *nac, integer *ido, integer *ip, integer *
-	l1, integer *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, 
+/* Subroutine */ int passf_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *
+	l1, int_4 *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, 
 	r_4 *wa)
 {
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
 
     /* Local variables */
-    static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
+    static int_4 idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
 	    idl, inc, idp;
     static r_4 wai, war;
-    static integer ipp2;
+    static int_4 ipp2;
 
     /* Parameter adjustments */
@@ -1918,12 +1918,12 @@
 
 /*  ------ File passf2.f ------ */
-/* Subroutine */ int passf2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passf2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ti2, tr2;
 
@@ -1980,5 +1980,5 @@
 
 /*  ------ File passf3.f ------ */
-/* Subroutine */ int passf3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passf3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2)
 {
@@ -1989,8 +1989,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
 
@@ -2068,12 +2068,12 @@
 
 /*  ------ File passf4.f ------ */
-/* Subroutine */ int passf4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passf4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
@@ -2173,5 +2173,5 @@
 
 /*  ------ File passf5.f ------ */
-/* Subroutine */ int passf5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int passf5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4)
 {
@@ -2184,8 +2184,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_4 ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
 	    ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
@@ -2308,14 +2308,14 @@
 
 /*  ------ File radb2.f ------ */
-/* Subroutine */ int radb2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radb2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ti2, tr2;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -2385,5 +2385,5 @@
 
 /*  ------ File radb3.f ------ */
-/* Subroutine */ int radb3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radb3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2)
 {
@@ -2394,10 +2394,10 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -2468,5 +2468,5 @@
 
 /*  ------ File radb4.f ------ */
-/* Subroutine */ int radb4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radb4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3)
 {
@@ -2476,11 +2476,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -2592,5 +2592,5 @@
 
 /*  ------ File radb5.f ------ */
-/* Subroutine */ int radb5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radb5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4)
 {
@@ -2603,11 +2603,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
 	    ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -2716,5 +2716,5 @@
 
 /*  ------ File radbg.f ------ */
-/* Subroutine */ int radbg_(integer *ido, integer *ip, integer *l1, integer *
+/* Subroutine */ int radbg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *
 	idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa)
 {
@@ -2724,5 +2724,5 @@
 
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
@@ -2732,9 +2732,9 @@
 
     /* Local variables */
-    static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
+    static int_4 idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
     static r_4 dc2, ai1, ai2, ar1, ar2, ds2;
-    static integer nbd;
+    static int_4 nbd;
     static r_4 dcp, arg, dsp, ar1h, ar2h;
-    static integer idp2, ipp2;
+    static int_4 idp2, ipp2;
 
     /* Parameter adjustments */
@@ -3057,14 +3057,14 @@
 
 /*  ------ File radf2.f ------ */
-/* Subroutine */ int radf2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radf2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1)
 {
     /* System generated locals */
-    integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
+    int_4 ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ti2, tr2;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -3135,5 +3135,5 @@
 
 /*  ------ File radf3.f ------ */
-/* Subroutine */ int radf3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radf3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2)
 {
@@ -3144,10 +3144,10 @@
 
     /* System generated locals */
-    integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
+    int_4 ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -3214,5 +3214,5 @@
 
 /*  ------ File radf4.f ------ */
-/* Subroutine */ int radf4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radf4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3)
 {
@@ -3222,11 +3222,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -3330,5 +3330,5 @@
 
 /*  ------ File radf5.f ------ */
-/* Subroutine */ int radf5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, 
+/* Subroutine */ int radf5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, 
 	r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4)
 {
@@ -3341,11 +3341,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_4 ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, dr3, 
 	    dr4, dr5, cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -3448,5 +3448,5 @@
 
 /*  ------ File radfg.f ------ */
-/* Subroutine */ int radfg_(integer *ido, integer *ip, integer *l1, integer *
+/* Subroutine */ int radfg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *
 	idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa)
 {
@@ -3456,5 +3456,5 @@
 
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
@@ -3464,9 +3464,9 @@
 
     /* Local variables */
-    static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
+    static int_4 idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
     static r_4 dc2, ai1, ai2, ar1, ar2, ds2;
-    static integer nbd;
+    static int_4 nbd;
     static r_4 dcp, arg, dsp, ar1h, ar2h;
-    static integer idp2, ipp2;
+    static int_4 idp2, ipp2;
 
     /* Parameter adjustments */
@@ -3795,7 +3795,7 @@
 
 /*  ------ File rfftb.f ------ */
-/* Subroutine */ int rfftb_(integer *n, r_4 *r__, r_4 *wsave)
-{
-    extern /* Subroutine */ int rfftb1_(integer *, r_4 *, r_4 *, r_4 *, 
+/* Subroutine */ int rfftb_(int_4 *n, r_4 *r__, r_4 *wsave)
+{
+    extern /* Subroutine */ int rfftb1_(int_4 *, r_4 *, r_4 *, r_4 *, 
 	    int_4 *);
 
@@ -3813,20 +3813,20 @@
 
 /*  ------ File rfftb1.f ------ */
-/* Subroutine */ int rfftb1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, 
+/* Subroutine */ int rfftb1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, 
 	int_4 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    extern /* Subroutine */ int radb2_(integer *, integer *, r_4 *, r_4 *, 
-	    r_4 *), radb3_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *), radb4_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *, r_4 *), radb5_(integer *, integer *, r_4 *, r_4 *, 
+    extern /* Subroutine */ int radb2_(int_4 *, int_4 *, r_4 *, r_4 *, 
+	    r_4 *), radb3_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *), radb4_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *, r_4 *), radb5_(int_4 *, int_4 *, r_4 *, r_4 *, 
 	    r_4 *, r_4 *, r_4 *, r_4 *);
-    static integer i__;
-    extern /* Subroutine */ int radbg_(integer *, integer *, integer *, 
-	    integer *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *);
-    static integer k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
+    static int_4 i__;
+    extern /* Subroutine */ int radbg_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *);
+    static int_4 k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
 
     /* Parameter adjustments */
@@ -3941,7 +3941,7 @@
 
 /*  ------ File rfftf.f ------ */
-/* Subroutine */ int rfftf_(integer *n, r_4 *r__, r_4 *wsave)
-{
-    extern /* Subroutine */ int rfftf1_(integer *, r_4 *, r_4 *, r_4 *, 
+/* Subroutine */ int rfftf_(int_4 *n, r_4 *r__, r_4 *wsave)
+{
+    extern /* Subroutine */ int rfftf1_(int_4 *, r_4 *, r_4 *, r_4 *, 
 	    int_4 *);
 
@@ -3959,20 +3959,20 @@
 
 /*  ------ File rfftf1.f ------ */
-/* Subroutine */ int rfftf1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, 
+/* Subroutine */ int rfftf1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, 
 	int_4 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    extern /* Subroutine */ int radf2_(integer *, integer *, r_4 *, r_4 *, 
-	    r_4 *), radf3_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *), radf4_(integer *, integer *, r_4 *, r_4 *, r_4 *, 
-	    r_4 *, r_4 *), radf5_(integer *, integer *, r_4 *, r_4 *, 
+    extern /* Subroutine */ int radf2_(int_4 *, int_4 *, r_4 *, r_4 *, 
+	    r_4 *), radf3_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *), radf4_(int_4 *, int_4 *, r_4 *, r_4 *, r_4 *, 
+	    r_4 *, r_4 *), radf5_(int_4 *, int_4 *, r_4 *, r_4 *, 
 	    r_4 *, r_4 *, r_4 *, r_4 *);
-    static integer i__;
-    extern /* Subroutine */ int radfg_(integer *, integer *, integer *, 
-	    integer *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *);
-    static integer k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
+    static int_4 i__;
+    extern /* Subroutine */ int radfg_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *, r_4 *);
+    static int_4 k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
 
     /* Parameter adjustments */
@@ -4082,7 +4082,7 @@
 
 /*  ------ File rffti.f ------ */
-/* Subroutine */ int rffti_(integer *n, r_4 *wsave)
-{
-    extern /* Subroutine */ int rffti1_(integer *, r_4 *, int_4 *);
+/* Subroutine */ int rffti_(int_4 *n, r_4 *wsave)
+{
+    extern /* Subroutine */ int rffti1_(int_4 *, r_4 *, int_4 *);
 
     /* Parameter adjustments */
@@ -4098,12 +4098,12 @@
 
 /*  ------ File rffti1.f ------ */
-/* Subroutine */ int rffti1_(integer *n, r_4 *wa, int_4 *ifac)
+/* Subroutine */ int rffti1_(int_4 *n, r_4 *wa, int_4 *ifac)
 {
     /* Initialized data */
 
-    static integer ntryh[4] = { 4,2,3,5 };
+    static int_4 ntryh[4] = { 4,2,3,5 };
 
     /* System generated locals */
-    integer i__1, i__2, i__3;
+    int_4 i__1, i__2, i__3;
 
     /* Builtin functions */
@@ -4112,13 +4112,13 @@
     /* Local variables */
     static r_4 argh;
-    static integer ntry, i__, j;
+    static int_4 ntry, i__, j;
     static r_4 argld;
-    static integer k1, l1, l2, ib;
+    static int_4 k1, l1, l2, ib;
     static r_4 fi;
-    static integer ld, ii, nf, ip, nl, is, nq, nr;
+    static int_4 ld, ii, nf, ip, nl, is, nq, nr;
     static r_4 arg;
-    static integer ido, ipm;
+    static int_4 ido, ipm;
     static r_4 tpi;
-    static integer nfm1;
+    static int_4 nfm1;
 
     /* Parameter adjustments */
@@ -4213,14 +4213,14 @@
 
 /*  ------ File sinqb.f ------ */
-/* Subroutine */ int sinqb_(integer *n, r_4 *x, r_4 *wsave)
+/* Subroutine */ int sinqb_(int_4 *n, r_4 *x, r_4 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int cosqb_(integer *, r_4 *, r_4 *);
+    static int_4 k;
+    extern /* Subroutine */ int cosqb_(int_4 *, r_4 *, r_4 *);
     static r_4 xhold;
-    static integer kc, ns2;
+    static int_4 kc, ns2;
 
     /* Parameter adjustments */
@@ -4254,14 +4254,14 @@
 
 /*  ------ File sinqf.f ------ */
-/* Subroutine */ int sinqf_(integer *n, r_4 *x, r_4 *wsave)
+/* Subroutine */ int sinqf_(int_4 *n, r_4 *x, r_4 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int cosqf_(integer *, r_4 *, r_4 *);
+    static int_4 k;
+    extern /* Subroutine */ int cosqf_(int_4 *, r_4 *, r_4 *);
     static r_4 xhold;
-    static integer kc, ns2;
+    static int_4 kc, ns2;
 
     /* Parameter adjustments */
@@ -4292,7 +4292,7 @@
 
 /*  ------ File sinqi.f ------ */
-/* Subroutine */ int sinqi_(integer *n, r_4 *wsave)
-{
-    extern /* Subroutine */ int cosqi_(integer *, r_4 *);
+/* Subroutine */ int sinqi_(int_4 *n, r_4 *wsave)
+{
+    extern /* Subroutine */ int cosqi_(int_4 *, r_4 *);
 
     /* Parameter adjustments */
@@ -4305,9 +4305,9 @@
 
 /*  ------ File sint.f ------ */
-/* Subroutine */ int sint_(integer *n, r_4 *x, r_4 *wsave)
-{
-    extern /* Subroutine */ int sint1_(integer *, r_4 *, r_4 *, r_4 *, 
+/* Subroutine */ int sint_(int_4 *n, r_4 *x, r_4 *wsave)
+{
+    extern /* Subroutine */ int sint1_(int_4 *, r_4 *, r_4 *, r_4 *, 
 	    r_4 *, int_4 *);
-    static integer np1, iw1, iw2, iw3;
+    static int_4 np1, iw1, iw2, iw3;
 
     /* Parameter adjustments */
@@ -4325,5 +4325,5 @@
 
 /*  ------ File sint1.f ------ */
-/* Subroutine */ int sint1_(integer *n, r_4 *war, r_4 *was, r_4 *xh, r_4 *
+/* Subroutine */ int sint1_(int_4 *n, r_4 *war, r_4 *was, r_4 *xh, r_4 *
 	x, int_4 *ifac)
 {
@@ -4333,12 +4333,12 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
+    static int_4 modn, i__, k;
     static r_4 xhold, t1, t2;
-    extern /* Subroutine */ int rfftf1_(integer *, r_4 *, r_4 *, r_4 *, 
+    extern /* Subroutine */ int rfftf1_(int_4 *, r_4 *, r_4 *, r_4 *, 
 	    int_4 *);
-    static integer kc, np1, ns2;
+    static int_4 kc, np1, ns2;
 
     /* Parameter adjustments */
@@ -4411,5 +4411,5 @@
 
 /*  ------ File sinti.f ------ */
-/* Subroutine */ int sinti_(integer *n, r_4 *wsave)
+/* Subroutine */ int sinti_(int_4 *n, r_4 *wsave)
 {
     /* Initialized data */
@@ -4418,5 +4418,5 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Builtin functions */
@@ -4424,8 +4424,8 @@
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int rffti_(integer *, r_4 *);
+    static int_4 k;
+    extern /* Subroutine */ int rffti_(int_4 *, r_4 *);
     static r_4 dt;
-    static integer np1, ns2;
+    static int_4 np1, ns2;
 
     /* Parameter adjustments */
@@ -4452,9 +4452,9 @@
 /* --------------------------------------------------------------- */
 
-/* Subroutine */ int cdfftb_(integer *n, r_8 *c__, r_8 *wsave)
-{
-    extern /* Subroutine */ int cdfftb1_(integer *, r_8 *, r_8 *, r_8 *, 
+/* Subroutine */ int cdfftb_(int_4 *n, r_8 *c__, r_8 *wsave)
+{
+    extern /* Subroutine */ int cdfftb1_(int_4 *, r_8 *, r_8 *, r_8 *, 
 	    int_8 *);
-    static integer iw1, iw2;
+    static int_4 iw1, iw2;
 
     /* Parameter adjustments */
@@ -4473,22 +4473,22 @@
 
 /*  ------ File cdfftb1.f ------ */
-/* Subroutine */ int cdfftb1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, 
+/* Subroutine */ int cdfftb1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, 
 	int_8 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer idot, i__;
-    extern /* Subroutine */ int dpassb_(integer *, integer *, integer *, 
-	    integer *, integer *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, 
+    static int_4 idot, i__;
+    extern /* Subroutine */ int dpassb_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, 
 	    r_8 *);
-    static integer k1, l1, l2, n2;
-    extern /* Subroutine */ int dpassb2_(integer *, integer *, r_8 *, r_8 *, 
-	    r_8 *), dpassb3_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *), dpassb4_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *, r_8 *), dpassb5_(integer *, integer *, r_8 *, r_8 *, 
+    static int_4 k1, l1, l2, n2;
+    extern /* Subroutine */ int dpassb2_(int_4 *, int_4 *, r_8 *, r_8 *, 
+	    r_8 *), dpassb3_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *), dpassb4_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *, r_8 *), dpassb5_(int_4 *, int_4 *, r_8 *, r_8 *, 
 	    r_8 *, r_8 *, r_8 *, r_8 *);
-    static integer na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
+    static int_4 na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
 
     /* Parameter adjustments */
@@ -4605,9 +4605,9 @@
 
 /*  ------ File cdfftf.f ------ */
-/* Subroutine */ int cdfftf_(integer *n, r_8 *c__, r_8 *wsave)
-{
-    extern /* Subroutine */ int cdfftf1_(integer *, r_8 *, r_8 *, r_8 *, 
+/* Subroutine */ int cdfftf_(int_4 *n, r_8 *c__, r_8 *wsave)
+{
+    extern /* Subroutine */ int cdfftf1_(int_4 *, r_8 *, r_8 *, r_8 *, 
 	    int_8 *);
-    static integer iw1, iw2;
+    static int_4 iw1, iw2;
 
     /* Parameter adjustments */
@@ -4626,22 +4626,22 @@
 
 /*  ------ File cdfftf1.f ------ */
-/* Subroutine */ int cdfftf1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, 
+/* Subroutine */ int cdfftf1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, 
 	int_8 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer idot, i__;
-    extern /* Subroutine */ int dpassf_(integer *, integer *, integer *, 
-	    integer *, integer *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, 
+    static int_4 idot, i__;
+    extern /* Subroutine */ int dpassf_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, 
 	    r_8 *);
-    static integer k1, l1, l2, n2;
-    extern /* Subroutine */ int dpassf2_(integer *, integer *, r_8 *, r_8 *, 
-	    r_8 *), dpassf3_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *), dpassf4_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *, r_8 *), dpassf5_(integer *, integer *, r_8 *, r_8 *, 
+    static int_4 k1, l1, l2, n2;
+    extern /* Subroutine */ int dpassf2_(int_4 *, int_4 *, r_8 *, r_8 *, 
+	    r_8 *), dpassf3_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *), dpassf4_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *, r_8 *), dpassf5_(int_4 *, int_4 *, r_8 *, r_8 *, 
 	    r_8 *, r_8 *, r_8 *, r_8 *);
-    static integer na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
+    static int_4 na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
 
     /* Parameter adjustments */
@@ -4758,8 +4758,8 @@
 
 /*  ------ File cdffti.f ------ */
-/* Subroutine */ int cdffti_(integer *n, r_8 *wsave)
-{
-    extern /* Subroutine */ int cdffti1_(integer *, r_8 *, int_8 *);
-    static integer iw1, iw2;
+/* Subroutine */ int cdffti_(int_4 *n, r_8 *wsave)
+{
+    extern /* Subroutine */ int cdffti1_(int_4 *, r_8 *, int_8 *);
+    static int_4 iw1, iw2;
 
     /* Parameter adjustments */
@@ -4777,12 +4777,12 @@
 
 /*  ------ File cdffti1.f ------ */
-/* Subroutine */ int cdffti1_(integer *n, r_8 *wa, int_8 *ifac)
+/* Subroutine */ int cdffti1_(int_4 *n, r_8 *wa, int_8 *ifac)
 {
     /* Initialized data */
 
-    static integer ntryh[4] = { 3,4,2,5 };
+    static int_4 ntryh[4] = { 3,4,2,5 };
 
     /* System generated locals */
-    integer i__1, i__2, i__3;
+    int_4 i__1, i__2, i__3;
 
     /* Builtin functions */
@@ -4791,11 +4791,11 @@
     /* Local variables */
     static r_8 argh;
-    static integer idot, ntry, i__, j;
+    static int_4 idot, ntry, i__, j;
     static r_8 argld;
-    static integer i1, k1, l1, l2, ib;
+    static int_4 i1, k1, l1, l2, ib;
     static r_8 fi;
-    static integer ld, ii, nf, ip, nl, nq, nr;
+    static int_4 ld, ii, nf, ip, nl, nq, nr;
     static r_8 arg;
-    static integer ido, ipm;
+    static int_4 ido, ipm;
     static r_8 tpi;
 
@@ -4895,5 +4895,5 @@
 
 /*  ------ File dcosqb.f ------ */
-/* Subroutine */ int dcosqb_(integer *n, r_8 *x, r_8 *wsave)
+/* Subroutine */ int dcosqb_(int_4 *n, r_8 *x, r_8 *wsave)
 {
     /* Initialized data */
@@ -4902,9 +4902,9 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
     static r_8 x1;
-    extern /* Subroutine */ int dcosqb1_(integer *, r_8 *, r_8 *, r_8 *);
+    extern /* Subroutine */ int dcosqb1_(int_4 *, r_8 *, r_8 *, r_8 *);
 
     /* Parameter adjustments */
@@ -4934,13 +4934,13 @@
 
 /*  ------ File dcosqb1.f ------ */
-/* Subroutine */ int dcosqb1_(integer *n, r_8 *x, r_8 *w, r_8 *xh)
+/* Subroutine */ int dcosqb1_(int_4 *n, r_8 *x, r_8 *w, r_8 *xh)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
-    extern /* Subroutine */ int dfftb_(integer *, r_8 *, r_8 *);
-    static integer kc, np2, ns2;
+    static int_4 modn, i__, k;
+    extern /* Subroutine */ int dfftb_(int_4 *, r_8 *, r_8 *);
+    static int_4 kc, np2, ns2;
     static r_8 xim1;
 
@@ -4988,5 +4988,5 @@
 
 /*  ------ File dcosqf.f ------ */
-/* Subroutine */ int dcosqf_(integer *n, r_8 *x, r_8 *wsave)
+/* Subroutine */ int dcosqf_(int_4 *n, r_8 *x, r_8 *wsave)
 {
     /* Initialized data */
@@ -4995,9 +4995,9 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
     static r_8 tsqx;
-    extern /* Subroutine */ int dcosqf1_(integer *, r_8 *, r_8 *, r_8 *);
+    extern /* Subroutine */ int dcosqf1_(int_4 *, r_8 *, r_8 *, r_8 *);
 
     /* Parameter adjustments */
@@ -5025,13 +5025,13 @@
 
 /*  ------ File dcosqf1.f ------ */
-/* Subroutine */ int dcosqf1_(integer *n, r_8 *x, r_8 *w, r_8 *xh)
+/* Subroutine */ int dcosqf1_(int_4 *n, r_8 *x, r_8 *w, r_8 *xh)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
-    extern /* Subroutine */ int dfftf_(integer *, r_8 *, r_8 *);
-    static integer kc, np2, ns2;
+    static int_4 modn, i__, k;
+    extern /* Subroutine */ int dfftf_(int_4 *, r_8 *, r_8 *);
+    static int_4 kc, np2, ns2;
     static r_8 xim1;
 
@@ -5077,5 +5077,5 @@
 
 /*  ------ File dcosqi.f ------ */
-/* Subroutine */ int dcosqi_(integer *n, r_8 *wsave)
+/* Subroutine */ int dcosqi_(int_4 *n, r_8 *wsave)
 {
     /* Initialized data */
@@ -5084,5 +5084,5 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Builtin functions */
@@ -5090,6 +5090,6 @@
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int dffti_(integer *, r_8 *);
+    static int_4 k;
+    extern /* Subroutine */ int dffti_(int_4 *, r_8 *);
     static r_8 fk, dt;
 
@@ -5111,18 +5111,18 @@
 
 /*  ------ File dcost.f ------ */
-/* Subroutine */ int dcost_(integer *n, r_8 *x, r_8 *wsave)
+/* Subroutine */ int dcost_(int_4 *n, r_8 *x, r_8 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
-    extern /* Subroutine */ int dfftf_(integer *, r_8 *, r_8 *);
+    static int_4 modn, i__, k;
+    extern /* Subroutine */ int dfftf_(int_4 *, r_8 *, r_8 *);
     static r_8 c1, t1, t2;
-    static integer kc;
+    static int_4 kc;
     static r_8 xi;
-    static integer nm1, np1;
+    static int_4 nm1, np1;
     static r_8 x1h;
-    static integer ns2;
+    static int_4 ns2;
     static r_8 tx2, x1p3, xim2;
 
@@ -5194,5 +5194,5 @@
 
 /*  ------ File dcosti.f ------ */
-/* Subroutine */ int dcosti_(integer *n, r_8 *wsave)
+/* Subroutine */ int dcosti_(int_4 *n, r_8 *wsave)
 {
     /* Initialized data */
@@ -5201,5 +5201,5 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Builtin functions */
@@ -5207,9 +5207,9 @@
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int dffti_(integer *, r_8 *);
-    static integer kc;
+    static int_4 k;
+    extern /* Subroutine */ int dffti_(int_4 *, r_8 *);
+    static int_4 kc;
     static r_8 fk, dt;
-    static integer nm1, np1, ns2;
+    static int_4 nm1, np1, ns2;
 
     /* Parameter adjustments */
@@ -5238,13 +5238,13 @@
 
 /*  ------ File dezfft1.f ------ */
-/* Subroutine */ int dezfft1_(integer *n, r_8 *wa, int_8 *ifac)
+/* Subroutine */ int dezfft1_(int_4 *n, r_8 *wa, int_8 *ifac)
 {
     /* Initialized data */
 
-    static integer ntryh[4] = { 4,2,3,5 };
+    static int_4 ntryh[4] = { 4,2,3,5 };
     static r_8 tpi = 6.28318530717959f;
 
     /* System generated locals */
-    integer i__1, i__2, i__3;
+    int_4 i__1, i__2, i__3;
 
     /* Builtin functions */
@@ -5253,9 +5253,9 @@
     /* Local variables */
     static r_8 argh;
-    static integer ntry, i__, j, k1, l1, l2, ib, ii, nf, ip, nl, is, nq, nr;
+    static int_4 ntry, i__, j, k1, l1, l2, ib, ii, nf, ip, nl, is, nq, nr;
     static r_8 ch1, sh1;
-    static integer ido, ipm;
+    static int_4 ido, ipm;
     static r_8 dch1, ch1h, arg1, dsh1;
-    static integer nfm1;
+    static int_4 nfm1;
 
     /* Parameter adjustments */
@@ -5357,14 +5357,14 @@
 
 /*  ------ File dezfftb.f ------ */
-/* Subroutine */ int dezfftb_(integer *n, r_8 *r__, r_8 *azero, r_8 *a, 
+/* Subroutine */ int dezfftb_(int_4 *n, r_8 *r__, r_8 *azero, r_8 *a, 
 	r_8 *b, r_8 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer i__;
-    extern /* Subroutine */ int dfftb_(integer *, r_8 *, r_8 *);
-    static integer ns2;
+    static int_4 i__;
+    extern /* Subroutine */ int dfftb_(int_4 *, r_8 *, r_8 *);
+    static int_4 ns2;
 
     /* Parameter adjustments */
@@ -5406,17 +5406,17 @@
 
 /*  ------ File dezfftf.f ------ */
-/* Subroutine */ int dezfftf_(integer *n, r_8 *r__, r_8 *azero, r_8 *a, 
+/* Subroutine */ int dezfftf_(int_4 *n, r_8 *r__, r_8 *azero, r_8 *a, 
 	r_8 *b, r_8 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer i__;
-    extern /* Subroutine */ int dfftf_(integer *, r_8 *, r_8 *);
+    static int_4 i__;
+    extern /* Subroutine */ int dfftf_(int_4 *, r_8 *, r_8 *);
     static r_8 cf;
-    static integer ns2;
+    static int_4 ns2;
     static r_8 cfm;
-    static integer ns2m;
+    static int_4 ns2m;
 
 
@@ -5471,7 +5471,7 @@
 
 /*  ------ File dezffti.f ------ */
-/* Subroutine */ int dezffti_(integer *n, r_8 *wsave)
-{
-    extern /* Subroutine */ int dezfft1_(integer *, r_8 *, int_8 *);
+/* Subroutine */ int dezffti_(int_4 *n, r_8 *wsave)
+{
+    extern /* Subroutine */ int dezfft1_(int_4 *, r_8 *, int_8 *);
 
     /* Parameter adjustments */
@@ -5487,18 +5487,18 @@
 
 /*  ------ File dpassb.f ------ */
-/* Subroutine */ int dpassb_(integer *nac, integer *ido, integer *ip, integer *
-	l1, integer *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, 
+/* Subroutine */ int dpassb_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *
+	l1, int_4 *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, 
 	r_8 *wa)
 {
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
 
     /* Local variables */
-    static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
+    static int_4 idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
 	    idl, inc, idp;
     static r_8 wai, war;
-    static integer ipp2;
+    static int_4 ipp2;
 
     /* Parameter adjustments */
@@ -5728,12 +5728,12 @@
 
 /*  ------ File dpassb2.f ------ */
-/* Subroutine */ int dpassb2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassb2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ti2, tr2;
 
@@ -5790,5 +5790,5 @@
 
 /*  ------ File dpassb3.f ------ */
-/* Subroutine */ int dpassb3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassb3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2)
 {
@@ -5799,8 +5799,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
 
@@ -5878,12 +5878,12 @@
 
 /*  ------ File dpassb4.f ------ */
-/* Subroutine */ int dpassb4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassb4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
@@ -5983,5 +5983,5 @@
 
 /*  ------ File dpassb5.f ------ */
-/* Subroutine */ int dpassb5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassb5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4)
 {
@@ -5994,8 +5994,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
 	    ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
@@ -6118,18 +6118,18 @@
 
 /*  ------ File dpassf.f ------ */
-/* Subroutine */ int dpassf_(integer *nac, integer *ido, integer *ip, integer *
-	l1, integer *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, 
+/* Subroutine */ int dpassf_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *
+	l1, int_4 *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, 
 	r_8 *wa)
 {
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
 
     /* Local variables */
-    static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
+    static int_4 idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
 	    idl, inc, idp;
     static r_8 wai, war;
-    static integer ipp2;
+    static int_4 ipp2;
 
     /* Parameter adjustments */
@@ -6359,12 +6359,12 @@
 
 /*  ------ File dpassf2.f ------ */
-/* Subroutine */ int dpassf2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassf2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ti2, tr2;
 
@@ -6421,5 +6421,5 @@
 
 /*  ------ File dpassf3.f ------ */
-/* Subroutine */ int dpassf3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassf3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2)
 {
@@ -6430,8 +6430,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
 
@@ -6509,12 +6509,12 @@
 
 /*  ------ File dpassf4.f ------ */
-/* Subroutine */ int dpassf4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassf4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
@@ -6614,5 +6614,5 @@
 
 /*  ------ File dpassf5.f ------ */
-/* Subroutine */ int dpassf5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dpassf5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4)
 {
@@ -6625,8 +6625,8 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k;
+    static int_4 i__, k;
     static r_8 ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
 	    ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
@@ -6749,14 +6749,14 @@
 
 /*  ------ File dadb2.f ------ */
-/* Subroutine */ int dadb2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadb2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1)
 {
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ti2, tr2;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -6826,5 +6826,5 @@
 
 /*  ------ File dadb3.f ------ */
-/* Subroutine */ int dadb3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadb3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2)
 {
@@ -6835,10 +6835,10 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -6909,5 +6909,5 @@
 
 /*  ------ File dadb4.f ------ */
-/* Subroutine */ int dadb4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadb4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3)
 {
@@ -6917,11 +6917,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -7033,5 +7033,5 @@
 
 /*  ------ File dadb5.f ------ */
-/* Subroutine */ int dadb5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadb5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4)
 {
@@ -7044,11 +7044,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
 	    ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -7157,5 +7157,5 @@
 
 /*  ------ File dadbg.f ------ */
-/* Subroutine */ int dadbg_(integer *ido, integer *ip, integer *l1, integer *
+/* Subroutine */ int dadbg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *
 	idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa)
 {
@@ -7165,5 +7165,5 @@
 
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
@@ -7173,9 +7173,9 @@
 
     /* Local variables */
-    static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
+    static int_4 idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
     static r_8 dc2, ai1, ai2, ar1, ar2, ds2;
-    static integer nbd;
+    static int_4 nbd;
     static r_8 dcp, arg, dsp, ar1h, ar2h;
-    static integer idp2, ipp2;
+    static int_4 idp2, ipp2;
 
     /* Parameter adjustments */
@@ -7498,14 +7498,14 @@
 
 /*  ------ File dadf2.f ------ */
-/* Subroutine */ int dadf2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadf2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1)
 {
     /* System generated locals */
-    integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
+    int_4 ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ti2, tr2;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -7576,5 +7576,5 @@
 
 /*  ------ File dadf3.f ------ */
-/* Subroutine */ int dadf3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadf3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2)
 {
@@ -7585,10 +7585,10 @@
 
     /* System generated locals */
-    integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
+    int_4 ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -7655,5 +7655,5 @@
 
 /*  ------ File dadf4.f ------ */
-/* Subroutine */ int dadf4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadf4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3)
 {
@@ -7663,11 +7663,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
 	    tr3, tr4;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -7771,5 +7771,5 @@
 
 /*  ------ File dadf5.f ------ */
-/* Subroutine */ int dadf5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, 
+/* Subroutine */ int dadf5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, 
 	r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4)
 {
@@ -7782,11 +7782,11 @@
 
     /* System generated locals */
-    integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
+    int_4 cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
 
     /* Local variables */
-    static integer i__, k, ic;
+    static int_4 i__, k, ic;
     static r_8 ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, dr3, 
 	    dr4, dr5, cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5;
-    static integer idp2;
+    static int_4 idp2;
 
     /* Parameter adjustments */
@@ -7889,5 +7889,5 @@
 
 /*  ------ File dadfg.f ------ */
-/* Subroutine */ int dadfg_(integer *ido, integer *ip, integer *l1, integer *
+/* Subroutine */ int dadfg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *
 	idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa)
 {
@@ -7897,5 +7897,5 @@
 
     /* System generated locals */
-    integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
+    int_4 ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
 	     c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
 	    i__1, i__2, i__3;
@@ -7905,9 +7905,9 @@
 
     /* Local variables */
-    static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
+    static int_4 idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
     static r_8 dc2, ai1, ai2, ar1, ar2, ds2;
-    static integer nbd;
+    static int_4 nbd;
     static r_8 dcp, arg, dsp, ar1h, ar2h;
-    static integer idp2, ipp2;
+    static int_4 idp2, ipp2;
 
     /* Parameter adjustments */
@@ -8236,7 +8236,7 @@
 
 /*  ------ File dfftb.f ------ */
-/* Subroutine */ int dfftb_(integer *n, r_8 *r__, r_8 *wsave)
-{
-    extern /* Subroutine */ int dfftb1_(integer *, r_8 *, r_8 *, r_8 *, 
+/* Subroutine */ int dfftb_(int_4 *n, r_8 *r__, r_8 *wsave)
+{
+    extern /* Subroutine */ int dfftb1_(int_4 *, r_8 *, r_8 *, r_8 *, 
 	    int_8 *);
 
@@ -8254,20 +8254,20 @@
 
 /*  ------ File dfftb1.f ------ */
-/* Subroutine */ int dfftb1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, 
+/* Subroutine */ int dfftb1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, 
 	int_8 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    extern /* Subroutine */ int dadb2_(integer *, integer *, r_8 *, r_8 *, 
-	    r_8 *), dadb3_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *), dadb4_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *, r_8 *), dadb5_(integer *, integer *, r_8 *, r_8 *, 
+    extern /* Subroutine */ int dadb2_(int_4 *, int_4 *, r_8 *, r_8 *, 
+	    r_8 *), dadb3_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *), dadb4_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *, r_8 *), dadb5_(int_4 *, int_4 *, r_8 *, r_8 *, 
 	    r_8 *, r_8 *, r_8 *, r_8 *);
-    static integer i__;
-    extern /* Subroutine */ int dadbg_(integer *, integer *, integer *, 
-	    integer *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *);
-    static integer k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
+    static int_4 i__;
+    extern /* Subroutine */ int dadbg_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *);
+    static int_4 k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
 
     /* Parameter adjustments */
@@ -8382,7 +8382,7 @@
 
 /*  ------ File dfftf.f ------ */
-/* Subroutine */ int dfftf_(integer *n, r_8 *r__, r_8 *wsave)
-{
-    extern /* Subroutine */ int dfftf1_(integer *, r_8 *, r_8 *, r_8 *, 
+/* Subroutine */ int dfftf_(int_4 *n, r_8 *r__, r_8 *wsave)
+{
+    extern /* Subroutine */ int dfftf1_(int_4 *, r_8 *, r_8 *, r_8 *, 
 	    int_8 *);
 
@@ -8400,20 +8400,20 @@
 
 /*  ------ File dfftf1.f ------ */
-/* Subroutine */ int dfftf1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, 
+/* Subroutine */ int dfftf1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, 
 	int_8 *ifac)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    extern /* Subroutine */ int dadf2_(integer *, integer *, r_8 *, r_8 *, 
-	    r_8 *), dadf3_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *), dadf4_(integer *, integer *, r_8 *, r_8 *, r_8 *, 
-	    r_8 *, r_8 *), dadf5_(integer *, integer *, r_8 *, r_8 *, 
+    extern /* Subroutine */ int dadf2_(int_4 *, int_4 *, r_8 *, r_8 *, 
+	    r_8 *), dadf3_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *), dadf4_(int_4 *, int_4 *, r_8 *, r_8 *, r_8 *, 
+	    r_8 *, r_8 *), dadf5_(int_4 *, int_4 *, r_8 *, r_8 *, 
 	    r_8 *, r_8 *, r_8 *, r_8 *);
-    static integer i__;
-    extern /* Subroutine */ int dadfg_(integer *, integer *, integer *, 
-	    integer *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *);
-    static integer k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
+    static int_4 i__;
+    extern /* Subroutine */ int dadfg_(int_4 *, int_4 *, int_4 *, 
+	    int_4 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *, r_8 *);
+    static int_4 k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
 
     /* Parameter adjustments */
@@ -8523,7 +8523,7 @@
 
 /*  ------ File dffti.f ------ */
-/* Subroutine */ int dffti_(integer *n, r_8 *wsave)
-{
-    extern /* Subroutine */ int dffti1_(integer *, r_8 *, int_8 *);
+/* Subroutine */ int dffti_(int_4 *n, r_8 *wsave)
+{
+    extern /* Subroutine */ int dffti1_(int_4 *, r_8 *, int_8 *);
 
     /* Parameter adjustments */
@@ -8539,12 +8539,12 @@
 
 /*  ------ File dffti1.f ------ */
-/* Subroutine */ int dffti1_(integer *n, r_8 *wa, int_8 *ifac)
+/* Subroutine */ int dffti1_(int_4 *n, r_8 *wa, int_8 *ifac)
 {
     /* Initialized data */
 
-    static integer ntryh[4] = { 4,2,3,5 };
+    static int_4 ntryh[4] = { 4,2,3,5 };
 
     /* System generated locals */
-    integer i__1, i__2, i__3;
+    int_4 i__1, i__2, i__3;
 
     /* Builtin functions */
@@ -8553,13 +8553,13 @@
     /* Local variables */
     static r_8 argh;
-    static integer ntry, i__, j;
+    static int_4 ntry, i__, j;
     static r_8 argld;
-    static integer k1, l1, l2, ib;
+    static int_4 k1, l1, l2, ib;
     static r_8 fi;
-    static integer ld, ii, nf, ip, nl, is, nq, nr;
+    static int_4 ld, ii, nf, ip, nl, is, nq, nr;
     static r_8 arg;
-    static integer ido, ipm;
+    static int_4 ido, ipm;
     static r_8 tpi;
-    static integer nfm1;
+    static int_4 nfm1;
 
     /* Parameter adjustments */
@@ -8654,14 +8654,14 @@
 
 /*  ------ File dsinqb.f ------ */
-/* Subroutine */ int dsinqb_(integer *n, r_8 *x, r_8 *wsave)
+/* Subroutine */ int dsinqb_(int_4 *n, r_8 *x, r_8 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int dcosqb_(integer *, r_8 *, r_8 *);
+    static int_4 k;
+    extern /* Subroutine */ int dcosqb_(int_4 *, r_8 *, r_8 *);
     static r_8 xhold;
-    static integer kc, ns2;
+    static int_4 kc, ns2;
 
     /* Parameter adjustments */
@@ -8695,14 +8695,14 @@
 
 /*  ------ File dsinqf.f ------ */
-/* Subroutine */ int dsinqf_(integer *n, r_8 *x, r_8 *wsave)
+/* Subroutine */ int dsinqf_(int_4 *n, r_8 *x, r_8 *wsave)
 {
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int dcosqf_(integer *, r_8 *, r_8 *);
+    static int_4 k;
+    extern /* Subroutine */ int dcosqf_(int_4 *, r_8 *, r_8 *);
     static r_8 xhold;
-    static integer kc, ns2;
+    static int_4 kc, ns2;
 
     /* Parameter adjustments */
@@ -8733,7 +8733,7 @@
 
 /*  ------ File dsinqi.f ------ */
-/* Subroutine */ int dsinqi_(integer *n, r_8 *wsave)
-{
-    extern /* Subroutine */ int dcosqi_(integer *, r_8 *);
+/* Subroutine */ int dsinqi_(int_4 *n, r_8 *wsave)
+{
+    extern /* Subroutine */ int dcosqi_(int_4 *, r_8 *);
 
     /* Parameter adjustments */
@@ -8746,9 +8746,9 @@
 
 /*  ------ File dsint.f ------ */
-/* Subroutine */ int dsint_(integer *n, r_8 *x, r_8 *wsave)
-{
-    extern /* Subroutine */ int dsint1_(integer *, r_8 *, r_8 *, r_8 *, 
+/* Subroutine */ int dsint_(int_4 *n, r_8 *x, r_8 *wsave)
+{
+    extern /* Subroutine */ int dsint1_(int_4 *, r_8 *, r_8 *, r_8 *, 
 	    r_8 *, int_8 *);
-    static integer np1, iw1, iw2, iw3;
+    static int_4 np1, iw1, iw2, iw3;
 
     /* Parameter adjustments */
@@ -8766,5 +8766,5 @@
 
 /*  ------ File dsint1.f ------ */
-/* Subroutine */ int dsint1_(integer *n, r_8 *war, r_8 *was, r_8 *xh, r_8 *
+/* Subroutine */ int dsint1_(int_4 *n, r_8 *war, r_8 *was, r_8 *xh, r_8 *
 	x, int_8 *ifac)
 {
@@ -8774,12 +8774,12 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Local variables */
-    static integer modn, i__, k;
+    static int_4 modn, i__, k;
     static r_8 xhold, t1, t2;
-    extern /* Subroutine */ int dfftf1_(integer *, r_8 *, r_8 *, r_8 *, 
+    extern /* Subroutine */ int dfftf1_(int_4 *, r_8 *, r_8 *, r_8 *, 
 	    int_8 *);
-    static integer kc, np1, ns2;
+    static int_4 kc, np1, ns2;
 
     /* Parameter adjustments */
@@ -8852,5 +8852,5 @@
 
 /*  ------ File dsinti.f ------ */
-/* Subroutine */ int dsinti_(integer *n, r_8 *wsave)
+/* Subroutine */ int dsinti_(int_4 *n, r_8 *wsave)
 {
     /* Initialized data */
@@ -8859,5 +8859,5 @@
 
     /* System generated locals */
-    integer i__1;
+    int_4 i__1;
 
     /* Builtin functions */
@@ -8865,8 +8865,8 @@
 
     /* Local variables */
-    static integer k;
-    extern /* Subroutine */ int dffti_(integer *, r_8 *);
+    static int_4 k;
+    extern /* Subroutine */ int dffti_(int_4 *, r_8 *);
     static r_8 dt;
-    static integer np1, ns2;
+    static int_4 np1, ns2;
 
     /* Parameter adjustments */
Index: trunk/SophyaLib/NTools/fftpackc.h
===================================================================
--- trunk/SophyaLib/NTools/fftpackc.h	(revision 753)
+++ trunk/SophyaLib/NTools/fftpackc.h	(revision 756)
@@ -8,12 +8,12 @@
 #endif
 
-typedef int integer;
-typedef unsigned uinteger;
-typedef char *address;
-typedef short int shortint;
-  // typedef float real;
-  // typedef double doublereal;
-  //typedef struct { float r, i; } complex;
-  //typedef struct { double r, i; } doublecomplex;
+  /* typedef int integer;
+  typedef unsigned uinteger;
+  typedef char *address;
+  typedef short int shortint;
+  typedef float real;
+  typedef double doublereal;
+  typedef struct { float r, i; } complex;
+  typedef struct { double r, i; } doublecomplex;  */
 
 /* typedef int_4 logical;
@@ -24,105 +24,105 @@
 /* ---------------------- */
 
-extern int cfftb_(integer *n, r_4 *c__, r_4 *wsave);
-extern int cfftb1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
-extern int cfftf_(integer *n, r_4 *c__, r_4 *wsave);
-extern int cfftf1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
-extern int cffti_(integer *n, r_4 *wsave);
-extern int cffti1_(integer *n, r_4 *wa, int_4 *ifac);
-extern int cosqb_(integer *n, r_4 *x, r_4 *wsave);
-extern int cosqb1_(integer *n, r_4 *x, r_4 *w, r_4 *xh);
-extern int cosqf_(integer *n, r_4 *x, r_4 *wsave);
-extern int cosqf1_(integer *n, r_4 *x, r_4 *w, r_4 *xh);
-extern int cosqi_(integer *n, r_4 *wsave);
-extern int cost_(integer *n, r_4 *x, r_4 *wsave);
-extern int costi_(integer *n, r_4 *wsave);
-extern int ezfft1_(integer *n, r_4 *wa, int_4 *ifac);
-extern int ezfftb_(integer *n, r_4 *r__, r_4 *azero, r_4 *a, r_4 *b, r_4 *wsave);
-extern int ezfftf_(integer *n, r_4 *r__, r_4 *azero, r_4 *a, r_4 *b, r_4 *wsave);
-extern int ezffti_(integer *n, r_4 *wsave);
-extern int passb_(integer *nac, integer *ido, integer *ip, integer *l1, integer *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
-extern int passb2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
-extern int passb3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
-extern int passb4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
-extern int passb5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
-extern int passf_(integer *nac, integer *ido, integer *ip, integer *l1, integer *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
-extern int passf2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
-extern int passf3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
-extern int passf4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
-extern int passf5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
-extern int radb2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
-extern int radb3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
-extern int radb4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
-extern int radb5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
-extern int radbg_(integer *ido, integer *ip, integer *l1, integer *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
-extern int radf2_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
-extern int radf3_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
-extern int radf4_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
-extern int radf5_(integer *ido, integer *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
-extern int radfg_(integer *ido, integer *ip, integer *l1, integer *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
-extern int rfftb_(integer *n, r_4 *r__, r_4 *wsave);
-extern int rfftb1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
-extern int rfftf_(integer *n, r_4 *r__, r_4 *wsave);
-extern int rfftf1_(integer *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
-extern int rffti_(integer *n, r_4 *wsave);
-extern int rffti1_(integer *n, r_4 *wa, int_4 *ifac);
-extern int sinqb_(integer *n, r_4 *x, r_4 *wsave);
-extern int sinqf_(integer *n, r_4 *x, r_4 *wsave);
-extern int sinqi_(integer *n, r_4 *wsave);
-extern int sint_(integer *n, r_4 *x, r_4 *wsave);
-extern int sint1_(integer *n, r_4 *war, r_4 *was, r_4 *xh, r_4 *x, int_4 *ifac);
-extern int sinti_(integer *n, r_4 *wsave);
+extern int cfftb_(int_4 *n, r_4 *c__, r_4 *wsave);
+extern int cfftb1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
+extern int cfftf_(int_4 *n, r_4 *c__, r_4 *wsave);
+extern int cfftf1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
+extern int cffti_(int_4 *n, r_4 *wsave);
+extern int cffti1_(int_4 *n, r_4 *wa, int_4 *ifac);
+extern int cosqb_(int_4 *n, r_4 *x, r_4 *wsave);
+extern int cosqb1_(int_4 *n, r_4 *x, r_4 *w, r_4 *xh);
+extern int cosqf_(int_4 *n, r_4 *x, r_4 *wsave);
+extern int cosqf1_(int_4 *n, r_4 *x, r_4 *w, r_4 *xh);
+extern int cosqi_(int_4 *n, r_4 *wsave);
+extern int cost_(int_4 *n, r_4 *x, r_4 *wsave);
+extern int costi_(int_4 *n, r_4 *wsave);
+extern int ezfft1_(int_4 *n, r_4 *wa, int_4 *ifac);
+extern int ezfftb_(int_4 *n, r_4 *r__, r_4 *azero, r_4 *a, r_4 *b, r_4 *wsave);
+extern int ezfftf_(int_4 *n, r_4 *r__, r_4 *azero, r_4 *a, r_4 *b, r_4 *wsave);
+extern int ezffti_(int_4 *n, r_4 *wsave);
+extern int passb_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
+extern int passb2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
+extern int passb3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
+extern int passb4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
+extern int passb5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
+extern int passf_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
+extern int passf2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
+extern int passf3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
+extern int passf4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
+extern int passf5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
+extern int radb2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
+extern int radb3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
+extern int radb4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
+extern int radb5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
+extern int radbg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
+extern int radf2_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1);
+extern int radf3_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2);
+extern int radf4_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3);
+extern int radf5_(int_4 *ido, int_4 *l1, r_4 *cc, r_4 *ch, r_4 *wa1, r_4 *wa2, r_4 *wa3, r_4 *wa4);
+extern int radfg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_4 *cc, r_4 *c1, r_4 *c2, r_4 *ch, r_4 *ch2, r_4 *wa);
+extern int rfftb_(int_4 *n, r_4 *r__, r_4 *wsave);
+extern int rfftb1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
+extern int rfftf_(int_4 *n, r_4 *r__, r_4 *wsave);
+extern int rfftf1_(int_4 *n, r_4 *c__, r_4 *ch, r_4 *wa, int_4 *ifac);
+extern int rffti_(int_4 *n, r_4 *wsave);
+extern int rffti1_(int_4 *n, r_4 *wa, int_4 *ifac);
+extern int sinqb_(int_4 *n, r_4 *x, r_4 *wsave);
+extern int sinqf_(int_4 *n, r_4 *x, r_4 *wsave);
+extern int sinqi_(int_4 *n, r_4 *wsave);
+extern int sint_(int_4 *n, r_4 *x, r_4 *wsave);
+extern int sint1_(int_4 *n, r_4 *war, r_4 *was, r_4 *xh, r_4 *x, int_4 *ifac);
+extern int sinti_(int_4 *n, r_4 *wsave);
 
 /* ---------------------- */
 
-extern int cdfftb_(integer *n, r_8 *c__, r_8 *wsave);
-extern int cdfftb1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
-extern int cdfftf_(integer *n, r_8 *c__, r_8 *wsave);
-extern int cdfftf1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
-extern int cdffti_(integer *n, r_8 *wsave);
-extern int cdffti1_(integer *n, r_8 *wa, int_8 *ifac);
-extern int dcosqb_(integer *n, r_8 *x, r_8 *wsave);
-extern int dcosqb1_(integer *n, r_8 *x, r_8 *w, r_8 *xh);
-extern int dcosqf_(integer *n, r_8 *x, r_8 *wsave);
-extern int dcosqf1_(integer *n, r_8 *x, r_8 *w, r_8 *xh);
-extern int dcosqi_(integer *n, r_8 *wsave);
-extern int dcost_(integer *n, r_8 *x, r_8 *wsave);
-extern int dcosti_(integer *n, r_8 *wsave);
-extern int dezfft1_(integer *n, r_8 *wa, int_8 *ifac);
-extern int dezfftb_(integer *n, r_8 *r__, r_8 *azero, r_8 *a, r_8 *b, r_8 *wsave);
-extern int dezfftf_(integer *n, r_8 *r__, r_8 *azero, r_8 *a, r_8 *b, r_8 *wsave);
-extern int dezffti_(integer *n, r_8 *wsave);
-extern int dpassb_(integer *nac, integer *ido, integer *ip, integer *l1, integer *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
-extern int dpassb2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
-extern int dpassb3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
-extern int dpassb4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
-extern int dpassb5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
-extern int dpassf_(integer *nac, integer *ido, integer *ip, integer *l1, integer *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
-extern int dpassf2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
-extern int dpassf3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
-extern int dpassf4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
-extern int dpassf5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
-extern int dadb2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
-extern int dadb3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
-extern int dadb4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
-extern int dadb5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
-extern int dadbg_(integer *ido, integer *ip, integer *l1, integer *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
-extern int dadf2_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
-extern int dadf3_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
-extern int dadf4_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
-extern int dadf5_(integer *ido, integer *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
-extern int dadfg_(integer *ido, integer *ip, integer *l1, integer *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
-extern int dfftb_(integer *n, r_8 *r__, r_8 *wsave);
-extern int dfftb1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
-extern int dfftf_(integer *n, r_8 *r__, r_8 *wsave);
-extern int dfftf1_(integer *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
-extern int dffti_(integer *n, r_8 *wsave);
-extern int dffti1_(integer *n, r_8 *wa, int_8 *ifac);
-extern int dsinqb_(integer *n, r_8 *x, r_8 *wsave);
-extern int dsinqf_(integer *n, r_8 *x, r_8 *wsave);
-extern int dsinqi_(integer *n, r_8 *wsave);
-extern int dsint_(integer *n, r_8 *x, r_8 *wsave);
-extern int dsint1_(integer *n, r_8 *war, r_8 *was, r_8 *xh, r_8 *x, int_8 *ifac);
-extern int dsinti_(integer *n, r_8 *wsave);
+extern int cdfftb_(int_4 *n, r_8 *c__, r_8 *wsave);
+extern int cdfftb1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
+extern int cdfftf_(int_4 *n, r_8 *c__, r_8 *wsave);
+extern int cdfftf1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
+extern int cdffti_(int_4 *n, r_8 *wsave);
+extern int cdffti1_(int_4 *n, r_8 *wa, int_8 *ifac);
+extern int dcosqb_(int_4 *n, r_8 *x, r_8 *wsave);
+extern int dcosqb1_(int_4 *n, r_8 *x, r_8 *w, r_8 *xh);
+extern int dcosqf_(int_4 *n, r_8 *x, r_8 *wsave);
+extern int dcosqf1_(int_4 *n, r_8 *x, r_8 *w, r_8 *xh);
+extern int dcosqi_(int_4 *n, r_8 *wsave);
+extern int dcost_(int_4 *n, r_8 *x, r_8 *wsave);
+extern int dcosti_(int_4 *n, r_8 *wsave);
+extern int dezfft1_(int_4 *n, r_8 *wa, int_8 *ifac);
+extern int dezfftb_(int_4 *n, r_8 *r__, r_8 *azero, r_8 *a, r_8 *b, r_8 *wsave);
+extern int dezfftf_(int_4 *n, r_8 *r__, r_8 *azero, r_8 *a, r_8 *b, r_8 *wsave);
+extern int dezffti_(int_4 *n, r_8 *wsave);
+extern int dpassb_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
+extern int dpassb2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
+extern int dpassb3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
+extern int dpassb4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
+extern int dpassb5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
+extern int dpassf_(int_4 *nac, int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
+extern int dpassf2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
+extern int dpassf3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
+extern int dpassf4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
+extern int dpassf5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
+extern int dadb2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
+extern int dadb3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
+extern int dadb4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
+extern int dadb5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
+extern int dadbg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
+extern int dadf2_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1);
+extern int dadf3_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2);
+extern int dadf4_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3);
+extern int dadf5_(int_4 *ido, int_4 *l1, r_8 *cc, r_8 *ch, r_8 *wa1, r_8 *wa2, r_8 *wa3, r_8 *wa4);
+extern int dadfg_(int_4 *ido, int_4 *ip, int_4 *l1, int_4 *idl1, r_8 *cc, r_8 *c1, r_8 *c2, r_8 *ch, r_8 *ch2, r_8 *wa);
+extern int dfftb_(int_4 *n, r_8 *r__, r_8 *wsave);
+extern int dfftb1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
+extern int dfftf_(int_4 *n, r_8 *r__, r_8 *wsave);
+extern int dfftf1_(int_4 *n, r_8 *c__, r_8 *ch, r_8 *wa, int_8 *ifac);
+extern int dffti_(int_4 *n, r_8 *wsave);
+extern int dffti1_(int_4 *n, r_8 *wa, int_8 *ifac);
+extern int dsinqb_(int_4 *n, r_8 *x, r_8 *wsave);
+extern int dsinqf_(int_4 *n, r_8 *x, r_8 *wsave);
+extern int dsinqi_(int_4 *n, r_8 *wsave);
+extern int dsint_(int_4 *n, r_8 *x, r_8 *wsave);
+extern int dsint1_(int_4 *n, r_8 *war, r_8 *was, r_8 *xh, r_8 *x, int_8 *ifac);
+extern int dsinti_(int_4 *n, r_8 *wsave);
 
 /* Rerunning f2c -P may change prototypes or declarations. */
Index: trunk/SophyaLib/NTools/hbook.h
===================================================================
--- trunk/SophyaLib/NTools/hbook.h	(revision 753)
+++ 	(revision )
@@ -1,83 +1,0 @@
-/* link to hbook     */
-/*      CMV  94      */
-
-#ifndef HBOOK_H_SEEN
-#define HBOOK_H_SEEN
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-void hbandx_(int_4 *,float *,float *,float *);
-void hbandy_(int_4 *,float *,float *,float *);
-
-void hbarx_(int_4 *);
-void hbary_(int_4 *);
-
-void hbfun1_(int_4 *,char *,int_4 *,float *,float *,float fun(float *),int_4);
-void hbfun2_(int_4 *,char *,int_4 *,float *,float *,int_4 *,float *,float *
-            ,float fun(float *,float *),int_4);
-void hbigbi_(int_4 *,int_4 *);
-void hbook1_(int_4 *,char *,int_4 *,float *,float *,float *,int_4);
-void hbook2_(int_4 *,char *,int_4 *,float *,float *
-            ,int_4 *,float *,float *,float *,int_4);
-void hbpro_(int_4 *,float *);
-void hbprof_(int_4 *,char *,int_4 *,float *,float *
-            ,float *,float *,char *,int_4,int_4);
-void hbprox_(int_4 *,float *);
-void hbproy_(int_4 *,float *);
-void hbslix_(int_4 *,int_4 *,float *);
-void hbsliy_(int_4 *,int_4 *,float *);
-void hcdir_(char *,char *,int_4,int_4);
-void hdelet_(int_4 *);
-void hfill_(int_4 *,float *,float *,float *);
-void hfithn_(int_4 *,char *,char *,int_4 *,float *
-            ,float *,float *,float *,float *,float *,int_4,int_4);
-void hfn_(int_4 *,float *);
-void hfunc_(int_4 *,float fun(float *));
-void hgive_(int_4 *,char *,int_4 *,float *,float *
-                          ,int_4 *,float *,float *,int_4 *,int_4 *);
-void hgn_(int_4 *,int_4 *,int_4 *,float *,int_4 *);
-void hgnf_(int_4 *,int_4 *,float *,int_4 *);
-void hgnpar_(int_4 *,char *,int_4);
-float hi_(int_4 *,int_4 *);
-void hidopt_(int_4 *,char *,int_4);
-float hie_(int_4 *,int_4 *);
-float hif_(int_4 *,int_4 *);
-float hij_(int_4 *,int_4 *,int_4 *);
-void hijxy_(int_4 *,int_4 *,int_4 *,float *,float *);
-void hix_(int_4 *,int_4 *,float *);
-void hldir_(char *,char *,int_4,int_4);
-void hmdir_(char *,char *,int_4,int_4);
-float hmax_(int_4 *);
-void hmaxim_(int_4 *,float *);
-float hmin_(int_4 *);
-void hminim_(int_4 *,float *);
-void hnorma_(int_4 *,float *);
-void hnoent_(int_4 *,int_4 *);
-void hpak_(int_4 *,float *);
-void hpake_(int_4 *,float *);
-void hprint_(int_4 *);
-void hrend_(char *,int_4);
-void hrin_(int_4 *,int_4 *,int_4 *);
-float hrndm1_(int_4 *);
-void hrndm2_(int_4 *,float *,float *);
-void hropen_(int_4 *,char *,char *,char *,int_4 *,int_4 *,int_4,int_4,int_4);
-void hrout_(int_4 *,int_4 *,char *,int_4);
-void hscale_(int_4 *,float *);
-float hstati_(int_4 *,int_4 *,char *,int_4 *,int_4);
-float hsum_(int_4 *);
-void hunpak_(int_4 *,float *,char *,int_4 *,int_4);
-void hunpke_(int_4 *,float *,char *,int_4 *,int_4);
-float hx_(int_4 *,float *);
-float hxe_(int_4 *,float *);
-float hxi_(int_4 *,float *,int_4 *);
-float hxyij_(int_4 *,float *,float *,int_4 *,int_4 *);
-float hxy_(int_4 *,float *,float *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
Index: trunk/SophyaLib/NTools/hisprof.cc
===================================================================
--- trunk/SophyaLib/NTools/hisprof.cc	(revision 753)
+++ 	(revision )
@@ -1,372 +1,0 @@
-#include "machdefs.h"
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include "hisprof.h"
-#include "perrors.h"
-
-//++
-// Class	HProf
-// Lib	Outils++ 
-// include	hisprof.h
-//
-//	Classe de profil d'histogrammes.
-//--
-
-//++
-// Titre	Constructeurs
-//--
-
-/********* Methode *********/
-//++
-HProf::HProf()
-//
-//	Constructeur par defaut.
-//--
-: Histo()
-, SumY(NULL), SumY2(NULL), SumW(NULL), Ok(false), YMin(1.), YMax(-1.), Opt(0)
-{
- END_CONSTRUCTOR
-}
-
-/********* Methode *********/
-//++
-HProf::HProf(float xMin, float xMax, int nBin, float yMin, float yMax)
-//
-//	Constructeur. Histogramme de profil de ``nBin'' bins entre ``xMin''
-//	et ``xMax'' avec coupure d'acceptance sur y entre ``yMin'' et ``yMax''.
-//	Si yMin>=yMax alors pas de coupure d'acceptance sur y.
-//	Par defaut l'erreur du profil represente la dispersion dans le bin,
-//	SetErrOpt(1) permet de demander de calculer l'erreur sur la moyenne.
-//--
-: Histo(xMin,xMax,nBin)
-, SumY(new double[nBin]), SumY2(new double[nBin]), SumW(new double[nBin])
-, Ok(false), YMin(yMin), YMax(yMax), Opt(0)
-{
-  Histo::Errors();
-  Zero();
-  END_CONSTRUCTOR
-}
-
-/********* Methode *********/
-//++
-HProf::HProf(const HProf& H)
-//
-//	Constructeur par copie.
-//--
-: Histo(H)
-, SumY(new double[H.bins]), SumY2(new double[H.bins]), SumW(new double[H.bins])
-, Ok(H.Ok), YMin(H.YMin), YMax(H.YMax), Opt(H.Opt)
-{
-  memcpy(SumY,  H.SumY,  bins*sizeof(double));
-  memcpy(SumY2, H.SumY2, bins*sizeof(double));
-  memcpy(SumW,  H.SumW,  bins*sizeof(double));
-  END_CONSTRUCTOR
-}
-
-/********* Methode *********/
-void HProf::Delete()
-{
-  if( SumY  != NULL ) { delete[] SumY;  SumY = NULL;}
-  if( SumY2 != NULL ) { delete[] SumY2; SumY2 = NULL;}
-  if( SumW  != NULL ) { delete[] SumW;  SumW = NULL;}
-  Ok = false;
-}
-
-/********* Methode *********/
-HProf::~HProf()
-{
-Delete();
-}
-
-//++
-// Titre	Methodes
-//--
-
-/********* Methode *********/
-//++
-void HProf::Zero()
-//
-//	Remise a zero
-//--
-{
-  memset(SumY,  0, bins*sizeof(double));
-  memset(SumY2, 0, bins*sizeof(double));
-  memset(SumW,  0, bins*sizeof(double));
-  Ok = false;
-  Histo::Zero();
-}
-
-/********* Methode *********/
-//++
-void HProf::SetErrOpt(bool spread)
-//
-//	Pour changer l'option de calcul de l'erreur du profile.
-//	Si ``spread'' = true alors l'erreur represente la dispersion
-//	des donnees dans le bin, si = false elle represente l'erreur
-//	sur la moyenne du bin.
-//| - Pour le bin (j):
-//| H(j) = sum(y), E(j) = sum(y^2), L(j) = sum(w)
-//| ->  s(j) = sqrt(E(j)/L(j) - (H(j)/L(j))^2)  dispersion
-//| ->  e(j) = s(j)/sqrt(L(j)) erreur sur la moyenne
-//| spread=true:  opt=0 : dispersion des donnees dans le bin = s(j)
-//| spread=false: opt=1 : erreur sur la moyenne du bin = e(j)
-//--
-{
-int opt = (spread) ? 0 : 1;
-if(opt!=Opt) {Opt=opt; Ok=false;}
-}
-
-/********* Methode *********/
-//++
-void HProf::UpdateHisto() const
-//
-//	Pour mettre a jour l'histogramme de profil.
-//	Il est important d'appeler cette methode si on veut
-//	utiliser les methodes de la classe Histo qui ne sont
-//	pas redefinies dans la classe HProf.
-//	En effet, pour des raisons de precision la classe
-//	HProf travaille avec des tableaux en double precision
-//	et seulement au moment ou l'on a besoin de l'histogramme
-//	ce dernier est rempli avec les valeurs demandees (moyenne
-//	et dispersion/erreur sur la moyenne).
-//--
-{
-
-float m,e2;
-for(int i=0;i<bins;i++) {
-  if(SumW[i]<=0.) {
-    m = e2 = 0.;
-  } else {
-    m  = SumY[i]/SumW[i];
-    e2 = SumY2[i]/SumW[i] - m*m;
-    if(Opt) e2 /= SumW[i];
-  }
-  data[i] = m;
-  err2[i] = e2;
-}
-// Attention, a cause de "WriteSelf const" UpdateHisto doit etre "const".
-// Comme on veut modifier Ok, on est oblige de faire cette entourloupe:
-HProf *buff = (HProf *) this;
-buff->Ok = true;
-}
-
-/********* Methode *********/
-//++
-void HProf::Add(float x, float y, float w)
-//
-//	Addition au contenu de l'histo pour abscisse x de la valeur y et poids w
-//--
-{
-  if(YMax>YMin && (y<YMin || YMax<y)) return;
-  int numBin = FindBin(x);
-  if (numBin<0) under += w;
-  else if (numBin>=bins) over += w;
-  else {
-    Ok = false;
-    SumY[numBin]  += y;
-    SumY2[numBin] += y*y;
-    SumW[numBin]  += w;
-    nHist += w;
-    nEntries++;
-  }
-}
-
-/********* Methode *********/
-//++
-void HProf::AddBin(int numBin, float y, float w)
-//
-//	Addition au contenu de l'histo bin numBin de la valeur y poids w
-//--
-{
-  if(YMax>YMin && (y<YMin || YMax<y)) return;
-  if (numBin<0) under += w;
-  else if (numBin>=bins) over += w;
-  else {
-    Ok = false;
-    SumY[numBin]  += y;
-    SumY2[numBin] += y*y;
-    SumW[numBin]  += w;
-    nHist += w;
-    nEntries++;
-  }
-}
-
-/********* Methode *********/
-//++
-HProf& HProf::operator = (const HProf& h)
-//
-//--
-{
-if(this == &h) return *this;
-if( h.bins > bins ) Delete();
-Histo *hthis = (Histo *) this;
-*hthis = (Histo) h;
-if(!SumY)  SumY  = new double[bins];
-if(!SumY2) SumY2 = new double[bins];
-if(!SumW)  SumW  = new double[bins];
-memcpy(SumY,  h.SumY,  bins*sizeof(double));
-memcpy(SumY2, h.SumY2, bins*sizeof(double));
-memcpy(SumW,  h.SumW,  bins*sizeof(double));
-Ok = h.Ok;
-YMin = h.YMin;
-YMax = h.YMax;
-Opt = h.Opt;
-
-return *this;
-}
-
-/********* Methode *********/
-//++
-HProf& HProf::operator += (const HProf& a)
-//
-//	Attention dans cette addition il n'y a pas de gestion
-//	des YMin et YMax. L'addition est faite meme si les limites
-//	en Y de ``a'' sont differentes de celles de ``this''.
-//--
-{
-if(bins!=a.bins) THROW(sizeMismatchErr);
-Histo *hthis = (Histo *) this;
-*hthis += (Histo) a;
-for(int i=0;i<bins;i++) {
-  SumY[i]  += a.SumY[i];
-  SumY2[i] += a.SumY2[i];
-  SumW[i]  += a.SumW[i];
-}
-Ok = false;
-
-return *this;
-}
-
-/********* Methode *********/
-//++
-HProf operator + (const HProf& a, const HProf& b)
-//
-//	Meme commentaire que pour l'operateur +=
-//--
-{
-if (b.NBins()!=a.NBins()) THROW(sizeMismatchErr);
-HProf c(a);
-return (c += b);
-}
-
-// Rappel des inlines functions pour commentaires
-//++
-//   inline Histo GetHisto()
-//	Retourne l'histogramme de profil.
-//--
-//++
-// inline void GetMean(Vector& v)
-//	Retourne le contenu de la moyenne dans le vecteur v
-//--
-//++
-// inline void GetError2(Vector& v)
-//	Retourne le contenu au carre de la dispersion/erreur dans le vecteur v
-//--
-//++
-// inline float operator()(int i) const
-//	Retourne le contenu du bin i
-//--
-//++
-// inline float Error2(int i) const
-//	Retourne le carre de la dispersion/erreur du bin i
-//--
-//++
-// inline float Error(int i) const
-//	Retourne la dispersion/erreur du bin i
-//--
-//++
-// inline int Fit(GeneralFit& gfit)
-//	Fit du profile par ``gfit''.
-//--
-//++
-// inline Histo* FitResidus(GeneralFit& gfit)
-//	Retourne l'Histogramme des residus par ``gfit''.
-//--
-//++
-// inline Histo* FitFunction(GeneralFit& gfit)
-//	Retourne l'Histogramme de la fonction fittee par ``gfit''.
-//--
-//++
-// inline void Print(int dyn,float hmin,float hmax,int pflag,int il,int ih)
-//	Print, voir detail dans Histo::Print
-//--
-
-
-///////////////////////////////////////////////////////////
-// --------------------------------------------------------
-//   Les objets delegues pour la gestion de persistance 
-// --------------------------------------------------------
-///////////////////////////////////////////////////////////
-
-
-void ObjFileIO<HProf>::ReadSelf(PInPersist& is)
-{
-char strg[256];
-
-if(dobj==NULL) dobj=new HProf;
-  else         dobj->Delete();
-
-// Lecture entete
-is.GetLine(strg,255);
-
-// Ecriture des valeurs
-is.Get(dobj->bins);
-is.Get(dobj->YMin);
-is.Get(dobj->YMax);
-is.Get(dobj->Opt);
-dobj->Ok = true;
-
-// Ecriture des donnees propres a l'histogramme de profil.
-is.GetLine(strg,255);
-dobj->SumY  = new double[dobj->bins];
-dobj->SumY2 = new double[dobj->bins];
-dobj->SumW  = new double[dobj->bins];
-is.Get(dobj->SumY,  dobj->bins);
-is.Get(dobj->SumY2, dobj->bins);
-is.Get(dobj->SumW,  dobj->bins);
-
-// Ecriture de l'histogramme
-is >> (Histo&)(*dobj);
-return;
-}
-
-void ObjFileIO<HProf>::WriteSelf(POutPersist& os) const
-{
-if (dobj == NULL)   return;
-char strg[256];
-
-dobj->UpdateHisto();
-
-// Ecriture entete pour identifier facilement
-sprintf(strg,"HProf: YMin=%f  YMax=%f  Opt=%1d",dobj->YMin,dobj->YMax,dobj->Opt);
-os.PutLine(strg);
-
-// Ecriture des valeurs
-os.Put(dobj->bins);
-os.Put(dobj->YMin);
-os.Put(dobj->YMax);
-os.Put(dobj->Opt);
-
-// Ecriture des donnees propres a l'histogramme de profil.
-sprintf(strg,"HProf: SumY SumY2 SumW");
-os.PutLine(strg);
-os.Put(dobj->SumY,  dobj->bins);
-os.Put(dobj->SumY2, dobj->bins);
-os.Put(dobj->SumW,  dobj->bins);
-
-// Ecriture de l'histogramme
-// FIO_Histo fio_h((Histo&)*dobj);
-// fio_h.Write(os);
-os << (Histo&)(*dobj);
-
-return;
-}
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template ObjFileIO<HProf>
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class ObjFileIO<HProf>;
-#endif
Index: trunk/SophyaLib/NTools/hisprof.h
===================================================================
--- trunk/SophyaLib/NTools/hisprof.h	(revision 753)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#ifndef HISPROF_SEEN
-#define HISPROF_SEEN
-
-#include <stdio.h>
-#include "peida.h"
-#include "tvector.h"
-#include "ppersist.h"
-#include "histos.h"
-
-namespace SOPHYA {
-
-class HProf : public Histo {
-  friend class ObjFileIO<HProf>;
-public:
-
-  // CREATOR / DESTRUCTOR
-  HProf();
-  HProf(float xMin, float xMax, int nBin=100, float yMin=1., float yMax=-1.);
-  HProf(const HProf& H);
-  virtual ~HProf();
-
-  // UPDATING or SETTING
-  void   Zero();
-  void   UpdateHisto() const;
-  void   SetErrOpt(bool spread = true);
-  void   Add(float x, float y, float w = 1.);
-  void   AddBin(int numBin, float y, float w = 1.);
-  
-  // Acces a l information
-  inline Histo GetHisto() {if(!Ok) UpdateHisto(); return (Histo) *this;}
-  inline void GetMean(Vector& v) {if(!Ok) UpdateHisto(); Histo::GetValue(v);}
-  inline void GetError2(Vector& v) {if(!Ok) UpdateHisto(); Histo::GetError2(v);}
-  inline float operator()(int i) const {if(!Ok) UpdateHisto(); return data[i];}
-  inline float Error2(int i) const {if(!Ok) UpdateHisto(); return (float) err2[i];}
-  inline float Error(int i) const
-         {if(!Ok) UpdateHisto(); return err2[i]>0. ? (float) sqrt(err2[i]) : 0.f;}
-
-  // Operators
-  HProf& operator = (const HProf& h);
-  HProf& operator += (const HProf& a);
-  friend HProf operator + (const HProf& a, const HProf& b);
-
-  // Fit
-  inline int    Fit(GeneralFit& gfit)
-         {if(!Ok) UpdateHisto(); return Histo::Fit(gfit,0);}
-  inline Histo  FitResidus(GeneralFit& gfit)
-         {if(!Ok) UpdateHisto(); return Histo::FitResidus(gfit);}
-  inline Histo  FitFunction(GeneralFit& gfit)
-         {if(!Ok) UpdateHisto(); return Histo::FitFunction(gfit);}
-
-  // Print
-  inline void Print(int dyn=100,float hmin=1.,float hmax=-1.,int pflag=0,int il=1,int ih=-1)
-                           {if(!Ok) UpdateHisto(); Histo::Print(dyn,hmin,hmax,pflag,il,ih);}
-
-protected:
-  void Delete();
-
-  double*        SumY;
-  double*        SumY2;
-  double*        SumW;
-  bool           Ok;
-  float          YMin;
-  float          YMax;
-  uint_2         Opt;
-};
-
-
-inline POutPersist& operator << (POutPersist& os, HProf & obj)
-{ ObjFileIO<HProf> fio(&obj);  fio.Write(os);  return(os); }
-inline PInPersist& operator >> (PInPersist& is, HProf & obj)
-{ ObjFileIO<HProf> fio(&obj);  fio.Read(is);  return(is); }
-// Classe pour la gestion de persistance
-// ObjFileIO<HProf>
-
-
-} // Fin du namespace
-
-#endif // HISPROF_SEEN
Index: trunk/SophyaLib/NTools/histos.cc
===================================================================
--- trunk/SophyaLib/NTools/histos.cc	(revision 753)
+++ 	(revision )
@@ -1,1827 +1,0 @@
-//
-// $Id: histos.cc,v 1.7 1999-12-10 16:55:51 ansari Exp $
-//
-
-#include "machdefs.h"
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include "histos.h"
-#include "perrors.h"
-#include "poly.h"
-#include "strutil.h"
-#include "generalfit.h"
-
-//++
-// Class	Histo
-// Lib	Outils++ 
-// include	histos.h
-//
-//	Classe d'histogrammes 1D
-//--
-
-//++
-// Titre	Constructeurs
-//--
-
-/********* Methode *********/
-//++
-Histo::Histo()
-//
-//--
-: data(NULL), err2(NULL),
-  under(0), over(0), nHist(0), nEntries(0),
-  bins(0), min(0), max(0),
-  binWidth(0)
-{
- END_CONSTRUCTOR
-}
-
-/********* Methode *********/
-//++
-Histo::Histo(float xMin, float xMax, int nBin)
-//
-//--
-: data(new float[nBin]), err2(NULL),
-  under(0), over(0), nHist(0), nEntries(0),
-  bins(nBin), min(xMin), max(xMax),
-  binWidth((max - min)/nBin)
-{
-  Zero();
-  END_CONSTRUCTOR
-}
-
-/********* Methode *********/
-//++
-Histo::Histo(const Histo& H)
-//
-//--
-: data(new float[H.bins]), err2(NULL),
-  under(H.under), over(H.over), nHist(H.nHist), nEntries(H.nEntries),
-  bins(H.bins), min(H.min), max(H.max),
-  binWidth(H.binWidth)
-{
-  memcpy(data, H.data, bins*sizeof(float));
-  if( H.err2 != NULL ) {
-    err2 = new double[bins];
-    memcpy(err2, H.err2, bins*sizeof(double));
-  }
-  END_CONSTRUCTOR
-}
-
-/********* Methode *********/
-void Histo::Delete()
-{
-  if( data != NULL ) { delete[] data; data = NULL;}
-  if( err2 != NULL ) { delete[] err2; err2 = NULL;}
-  under = over = min = max = binWidth= 0.;
-  nHist = 0.;
-  nEntries = bins = 0;
-}
-
-/********* Methode *********/
-Histo::~Histo()
-{
-Delete();
-}
-
-//++
-// Titre	Methodes
-//--
-
-/********* Methode *********/
-//++
-void Histo::Zero()
-//
-//	Remise a zero
-//--
-{
-  memset(data, 0, bins*sizeof(float));
-  under = over = 0;
-  nHist = 0;
-  nEntries = 0;
-  if( err2 != NULL ) memset(err2, 0, bins*sizeof(double));
-}
-
-/********* Methode *********/
-//++
-void Histo::Errors()
-//
-//	Pour avoir le calcul des erreurs
-//--
-{
- if( bins > 0 ) {
-   if(err2==NULL) err2 = new double[bins];
-   memset(err2, 0, bins*sizeof(double));
- }
-}
-
-/********* Methode *********/
-//++
-Histo& Histo::operator = (const Histo& h)
-//
-//--
-{
-  if(this == &h) return *this;
-  if( h.bins > bins ) Delete();
-  if(!data) data = new float[h.bins];
-  if( !h.err2 && err2 ) { delete [] err2; err2=NULL;}
-  if( h.err2 && !err2 ) err2 = new double[h.bins];
-
-  under = h.under;
-  over = h.over;
-  nHist = h.nHist;
-  nEntries = h.nEntries;
-  bins = h.bins;
-  min = h.min;
-  max = h.max;
-  binWidth = h.binWidth;
-  
-  memcpy(data, h.data, bins*sizeof(float));
-  if(err2) memcpy(err2, h.err2, bins*sizeof(double));
-
-  return *this;
-}
-
-/********* Methode *********/
-//++
-Histo& Histo::operator *= (double b)
-//
-//--
-{
-double b2 = b*b;
-for(int i=0;i<bins;i++) {
-  data[i] *= b;
-  if(err2) err2[i] *= b2;
-}
-under *= b;
-over *= b;
-nHist *= b;
-
-return *this;
-}
-
-//++
-Histo& Histo::operator /= (double b)
-//
-//--
-{
-if (b==0.) THROW(inconsistentErr);
-double b2 = b*b;
-for(int i=0;i<bins;i++) {
-  data[i] /= b;
-  if(err2) err2[i] /= b2;
-}
-under /= b;
-over /= b;
-nHist /= b;
-
-return *this;
-}
-
-//++
-Histo& Histo::operator += (double b)
-//
-//--
-{
-for(int i=0;i<bins;i++) data[i] += b;
-under += b;
-over += b;
-nHist += bins*b;
-
-return *this;
-}
-
-//++
-Histo& Histo::operator -= (double b)
-//
-//--
-{
-for(int i=0;i<bins;i++) data[i] -= b;
-under -= b;
-over -= b;
-nHist -= bins*b;
-
-return *this;
-}
-
-/********* Methode *********/
-//++
-Histo operator * (const Histo& a, double b)
-//
-//--
-{
-  Histo result(a);
-  return (result *= b);
-}
-
-//++
-Histo operator * (double b, const Histo& a)
-//
-//--
-{
-  Histo result(a);
-  return (result *= b);
-}
-
-//++
-Histo operator / (const Histo& a, double b)
-//
-//--
-{
-  Histo result(a);
-  return (result /= b);
-}
-
-//++
-Histo operator + (const Histo& a, double b)
-//
-//--
-{
-  Histo result(a);
-  return (result += b);
-}
-
-//++
-Histo operator + (double b, const Histo& a)
-//
-//--
-{
-  Histo result(a);
-  return (result += b);
-}
-
-//++
-Histo operator - (const Histo& a, double b)
-//
-//--
-{
-  Histo result(a);
-  return (result -= b);
-}
-
-//++
-Histo operator - (double b, const Histo& a)
-//
-//--
-{
-  Histo result(a);
-  result *= -1.;
-  return (result += b);
-}
-
-/********* Methode *********/
-//++
-Histo& Histo::operator += (const Histo& a)
-//
-//--
-{
-if(bins!=a.bins) THROW(sizeMismatchErr);
-for(int i=0;i<bins;i++) {
-  data[i] += a(i);
-  if(err2 && a.err2) err2[i] += a.Error2(i);
-    else err2[i] = 0.;
-}
-under += a.under;
-over += a.over;
-nHist += a.nHist;
-nEntries += a.nEntries;
-
-return *this;
-}
-
-//++
-Histo& Histo::operator -= (const Histo& a)
-//
-//--
-{
-if(bins!=a.bins) THROW(sizeMismatchErr);
-for(int i=0;i<bins;i++) {
-  data[i] -= a(i);
-  if(err2 && a.err2) err2[i] += a.Error2(i);
-    else err2[i] = 0.;
-}
-under -= a.under;
-over -= a.over;
-nHist -= a.nHist;
-nEntries += a.nEntries;
-
-return *this;
-}
-
-//++
-Histo& Histo::operator *= (const Histo& a)
-//
-//--
-{
-if(bins!=a.bins) THROW(sizeMismatchErr);
-nHist = 0.;
-for(int i=0;i<bins;i++) {
-  if(err2 && a.err2)
-      err2[i] = a(i)*a(i)*err2[i] + data[i]*data[i]*a.Error2(i);
-    else err2[i] = 0.;
-  data[i] *= a(i);
-  nHist += data[i];
-}
-under *= a.under;
-over *= a.over;
-nEntries += a.nEntries;
-
-return *this;
-}
-
-//++
-Histo& Histo::operator /= (const Histo& a)
-//
-//--
-{
-if(bins!=a.bins) THROW(sizeMismatchErr);
-nHist = 0.;
-for(int i=0;i<bins;i++) {
-  if(a(i)==0.) {
-    data[i]=0.;
-    if(err2) err2[i]=0.;
-    continue;
-  }
-  if(err2 && a.err2)
-      err2[i] = (err2[i] + data[i]/a(i)*data[i]/a(i)*a.Error2(i))
-                /(a(i)*a(i));
-    else err2[i] = 0.;
-  data[i] /= a(i);
-  nHist += data[i];
-}
-if(a.under!=0.) under /= a.under; else under = 0.;
-if(a.over!=0.)  over  /= a.over;  else over  = 0.;
-nEntries += a.nEntries;
-
-return *this;
-}
-
-/********* Methode *********/
-//++
-Histo operator + (const Histo& a, const Histo& b)
-//
-//--
-{
-if (b.NBins()!=a.NBins()) THROW(sizeMismatchErr);
-Histo c(a);
-return (c += b);
-}
-
-//++
-Histo operator - (const Histo& a, const Histo& b)
-//
-//--
-{
-if (b.NBins()!=a.NBins()) THROW(sizeMismatchErr);
-Histo c(a);
-return (c -= b);
-}
-
-//++
-Histo operator * (const Histo& a, const Histo& b)
-//
-//--
-{
-if (b.NBins()!=a.NBins()) THROW(sizeMismatchErr);
-Histo c(a);
-return (c *= b);
-}
-
-//++
-Histo operator / (const Histo& a, const Histo& b)
-//
-//--
-{
-if (b.NBins()!=a.NBins()) THROW(sizeMismatchErr);
-Histo c(a);
-return (c /= b);
-}
-
-/********* Methode *********/
-//++
-void Histo::GetAbsc(Vector &v)
-//
-//	Remplissage d'un tableau avec la valeur des abscisses
-//--
-{
-v.Realloc(bins);
-for(int i=0;i<bins;i++) v(i) = BinLowEdge(i);
-return;
-}
-
-//++
-void Histo::GetValue(Vector &v)
-//
-//	Remplissage d'un tableau avec la valeur du contenu
-//--
-{
-v.Realloc(bins);
-for(int i=0;i<bins;i++) v(i) = data[i];
-return;
-}
-
-//++
-void Histo::GetError2(Vector &v)
-//
-//	Remplissage d'un tableau avec la valeur des erreurs au carre
-//--
-{
-v.Realloc(bins);
-if(!err2) {for(int i=0;i<bins;i++) v(i) = 0.; return;}
-for(int i=0;i<bins;i++) v(i) = err2[i];
-return;
-}
-
-//++
-void Histo::GetError(Vector &v)
-//
-//	Remplissage d'un tableau avec la valeur des erreurs
-//--
-{
-v.Realloc(bins);
-if(!err2) {for(int i=0;i<bins;i++) v(i) = 0.; return;}
-for(int i=0;i<bins;i++) v(i) = Error(i);
-return;
-}
-
-/********* Methode *********/
-//++
-void Histo::PutValue(Vector &v, int ierr)
-//
-//	Remplissage du contenu de l'histo avec les valeurs d'un vecteur
-//--
-{
-if(v.NElts()<bins) THROW(sizeMismatchErr);
-for(int i=0;i<bins;i++) {
-  data[i] = v(i);
-  if(err2&&ierr) err2[i] = fabs(v(i));
-}
-return;
-}
-
-//++
-void Histo::PutValueAdd(Vector &v, int ierr)
-//
-//	Addition du contenu de l'histo avec les valeurs d'un vecteur
-//--
-{
-if(v.NElts()<bins) THROW(sizeMismatchErr);
-for(int i=0;i<bins;i++) {
-  data[i] += v(i);
-  if(err2&&ierr) err2[i] += fabs(v(i));
-}
-return;
-}
-
-//++
-void Histo::PutError2(Vector &v)
-//
-//	Remplissage des erreurs au carre de l'histo avec les valeurs d'un vecteur
-//--
-{
-if(v.NElts()<bins) THROW(sizeMismatchErr);
-if(!err2) Errors();
-for(int i=0;i<bins;i++) err2[i] = v(i);
-return;
-}
-
-//++
-void Histo::PutError2Add(Vector &v)
-//
-//	Addition des erreurs au carre de l'histo avec les valeurs d'un vecteur
-//--
-{
-if(v.NElts()<bins) THROW(sizeMismatchErr);
-if(!err2) Errors();
-for(int i=0;i<bins;i++) if(v(i)>0.) err2[i] += v(i);
-return;
-}
-
-//++
-void Histo::PutError(Vector &v)
-//
-//	Remplissage des erreurs de l'histo avec les valeurs d'un vecteur
-//--
-{
-if(v.NElts()<bins) THROW(sizeMismatchErr);
-if(!err2) Errors();
-for(int i=0;i<bins;i++)
-  if(v(i)>0.) err2[i]=v(i)*v(i); else err2[i]=-v(i)*v(i);
-return;
-}
-
-/********* Methode *********/
-//++
-void Histo::Add(float x, float w)
-//
-//	Addition du contenu de l'histo pour abscisse x poids w
-//--
-{
-  int numBin = FindBin(x);
-  if (numBin<0) under += w;
-  else if (numBin>=bins) over += w;
-  else {
-    data[numBin] += w;
-    if(err2!=NULL) err2[numBin] += w*w;
-    nHist += w;
-    nEntries++;
-  }
-}
-
-/********* Methode *********/
-//++
-void Histo::AddBin(int numBin, float w)
-//
-//	Addition du contenu de l'histo bin numBin poids w
-//--
-{
-  if (numBin<0) under += w;
-  else if (numBin>=bins) over += w;
-  else {
-    data[numBin] += w;
-    if(err2!=NULL) err2[numBin] += w*w;
-    nHist += w;
-    nEntries++;
-  }
-}
-
-/********* Methode *********/
-//++
-void Histo::SetBin(float x, float w)
-//
-//	Remplissage du contenu de l'histo pour abscisse x poids w
-//--
-{
-  int numBin = FindBin(x);
-  SetBin(numBin,w);
-}
-
-/********* Methode *********/
-//++
-void Histo::SetBin(int numBin, float w)
-//
-//	Remplissage du contenu de l'histo pour numBin poids w
-//--
-{
-  if (numBin<0) under = w;
-  else if (numBin>=bins) over = w;
-  else {
-    nHist -= data[numBin];
-    data[numBin] = w;
-    nHist += w;
-  }
-}
-
-/********* Methode *********/
-//++
-void Histo::SetErr2(float x, double e2)
-//
-//	Remplissage des erreurs au carre pour abscisse x
-//--
-{
-  int numBin = FindBin(x);
-  SetErr2(numBin,e2);
-}
-
-/********* Methode *********/
-//++
-void Histo::SetErr2(int numBin, double e2)
-//
-//	Remplissage des erreurs au carre pour numBin poids
-//--
-{
-  if( err2==NULL) return;
-  if ( numBin<0 || numBin>=bins ) return;
-  err2[numBin] = e2;
-}
-
-/********* Methode *********/
-//++
-void Histo::SetErr(float x, float e)
-//
-//	Remplissage des erreurs pour abscisse x
-//--
-{
-SetErr2(x, (double) e*e);
-}
-
-/********* Methode *********/
-//++
-void Histo::SetErr(int numBin, float e)
-//
-//	Remplissage des erreurs pour numBin
-//--
-{
-SetErr2(numBin, (double) e*e);
-}
-
-/********* Methode *********/
-//++
-int Histo::IMax() const
-//
-//	Numero du bin ayant le contenu maximum
-//--
-{
-  int imx=0;
-  if(bins==1) return imx;
-  float mx=data[0];
-  for (int i=1; i<bins; i++)
-    if (data[i]>mx) {imx = i; mx=data[i];}
-  return imx;
-}
-
-/********* Methode *********/
-//++
-int Histo::IMin() const
-//
-//	Numero du bin ayant le contenu minimum
-//--
-{
-  int imx=0;
-  if(bins==1) return imx;
-  float mx=data[0];
-  for (int i=1; i<bins; i++)
-    if (data[i]<mx) {imx = i; mx=data[i];}
-  return imx;
-}
-
-/********* Methode *********/
-//++
-float Histo::VMax() const
-//
-//	Valeur le contenu maximum
-//--
-{
-  float mx=data[0];
-  if(bins==1) return mx;
-  for (int i=1;i<bins;i++) if(data[i]>mx) mx=data[i];
-  return mx;
-}
-
-/********* Methode *********/
-//++
-float Histo::VMin() const
-//
-//	Valeur le contenu minimum
-//--
-{
-  float mx=data[0];
-  if(bins==1) return mx;
-  for (int i=1;i<bins;i++) if(data[i]<mx) mx=data[i];
-  return mx;
-}
-
-/********* Methode *********/
-//++
-float Histo::Mean() const
-//
-//	Valeur moyenne
-//--
-{
-  double n = 0;
-  double sx = 0;
-  for (int i=0; i<bins; i++) {
-    double v = (data[i]>=0.) ? data[i] : -data[i];
-    n += v;
-    sx += BinCenter(i)*v;
-  }
-  if(n>0.) return sx/n; else return min;
-}
-
-/********* Methode *********/
-//++
-float Histo::Sigma() const
-//
-//	Valeur du sigma
-//--
-{
-  double n = 0;
-  double sx = 0;
-  double sx2= 0;
-  for (int i=0; i<bins; i++) {
-    double v = (data[i]>=0.) ? data[i] : -data[i];
-    n += v;
-    sx += BinCenter(i)*v;
-    sx2+= BinCenter(i)*BinCenter(i)*v;
-  }
-  // attention a l'erreur d'arrondi si un seul bin rempli!!
-  if( n == 0 ) return 0.;
-  sx2 = sx2/n - (sx/n)*(sx/n);
-  if( sx2>0. ) return sqrt( sx2 );
-      else return 0.;
-}
-
-/********* Methode *********/
-//++
-float Histo::MeanLH(int il,int ih) const
-//
-//	Valeur de la moyenne calculee entre les bin il et ih
-//--
-{
-  if( ih < il ) { il = 0; ih = bins-1; }
-  if( il < 0 ) il = 0;
-  if( ih >= bins ) ih = bins-1;
-  double n = 0;
-  double sx = 0;
-  for (int i=il; i<=ih; i++) {
-    double v = (data[i]>=0.) ? data[i] : -data[i];
-    n += v;
-    sx += BinCenter(i)*v;
-  }
-  if(n>0.) return sx/n; else return BinLowEdge(il);
-}
-
-/********* Methode *********/
-//++
-float Histo::SigmaLH(int il,int ih) const
-//
-//	Valeur de la moyenne calculee entre les bin il et ih
-//--
-{
-  if( ih < il ) { il = 0; ih = bins - 1; }
-  if( il < 0 ) il = 0;
-  if( ih >= bins ) ih = bins - 1;
-  double n = 0;
-  double sx = 0;
-  double sx2= 0;
-  for (int i=il; i<=ih; i++) {
-    double v = (data[i]>=0.) ? data[i] : -data[i];
-    n += v;
-    sx += BinCenter(i)*v;
-    sx2+= BinCenter(i)*BinCenter(i)*v;
-  }
-  if( n == 0 ) return 0.;
-  sx2 = sx2/n - (sx/n)*(sx/n);
-  if( sx2>0. ) return sqrt( sx2 );
-      else return 0.;
-}
-
-/********* Methode *********/
-//++
-float Histo::Mean(float x0, float dx) const
-//
-//	Valeur de la moyenne calculee entre x0-dx et x0+dx
-//--
-{
-  double sdata = 0;
-  double sx = 0;
-  int iMin = FindBin(x0-dx);
-  if (iMin<0) iMin = 0;
-  int iMax = FindBin(x0+dx);
-  if (iMax>bins) iMax=bins;
-  for (int i=iMin; i<iMax; i++) {
-    double v = (data[i]>=0.) ? data[i] : -data[i];
-    sx += BinCenter(i)*v;
-    sdata += v;
-  }
-  if(sdata>0.) return sx/sdata; else return min;
-}
-
-/********* Methode *********/
-//++
-float Histo::Sigma(float x0, float dx) const
-//
-//	Valeur du sigma calcule entre x0-dx et x0+dx
-//--
-{
-  double sx = 0;
-  double sx2= 0;
-  double sdata = 0;
-  int iMin = FindBin(x0-dx);
-  if (iMin<0) iMin = 0;
-  int iMax = FindBin(x0+dx);
-  if (iMax>bins) iMax=bins;
-  for (int i=iMin; i<iMax; i++) {
-    double v = (data[i]>=0.) ? data[i] : -data[i];
-    sx += BinCenter(i)*v;
-    sx2+= BinCenter(i)*BinCenter(i)*v;
-    sdata += v;
-  }
-  if(sdata>0.) return sqrt( sx2/sdata - (sx/sdata)*(sx/sdata) );
-          else return 0.;
-}
-
-/********* Methode *********/
-//++
-float Histo::CleanedMean(float& sigma) const
-//
-//	Valeur de la moyenne et du sigma nettoyes
-//--
-{
-  if (!nHist) return 0;
-  // on fait ca de facon bete, on pourra raffiner apres...
-  float x0 = Mean();
-  float s  = Sigma()+binWidth;
-  
-  for (int i=0; i<3; i++) {
-    float xx0 = Mean(x0,5*s);
-    s  = Sigma(x0,5*s)+binWidth;
-    x0 = xx0;
-  }
-  sigma = s;
-  return x0;
-}
-
-/********* Methode *********/
-//++
-float Histo::CleanedMean() const
-//
-//	Valeur de la moyenne nettoyee
-//--
-{
-  if (!nHist) return 0;
-  float s=0;
-  return CleanedMean(s);
-}
-
-/********* Methode *********/
-//++
-int Histo::BinNonNul() const
-//
-//	Retourne le nombre de bins non-nul
-//--
-{
-int non=0;
-for (int i=0;i<bins;i++) if( data[i] != 0. ) non++;
-return non;
-}
-
-/********* Methode *********/
-//++
-int Histo::ErrNonNul() const
-//
-//	Retourne le nombre de bins ayant une erreur non-nulle
-//--
-{
-if(err2==NULL) return -1;
-int non=0;
-for (int i=0;i<bins;i++) if( err2[i] != 0. ) non++;
-return non;
-}
-
-/********* Methode *********/
-//++
-int Histo::BinPercent(float per) const
-//
-//	Renvoie le numero de bin tel que il y ait "per" pourcent entrees
-//	entre le bin 0 et ce bin (y compris le contenu de ce bin).
-//--
-{
-double n = nHist*per;
-double s = 0.;
-int i;
-for(i=0; i<bins; i++ ) {
-  s += data[i];
-  if( s >= n ) break;
-}
-if( i == bins ) i = bins-1;
-return i;
-}
-
-/********* Methode *********/
-//++
-int Histo::BinPercent(float x,float per,int& imin,int& imax)
-//
-//	Renvoie les numeros de bins imin,imax (0=<i<bins) tels que:
-//|    notons I = bin contenant l'abscisse x
-//|           N1 = nombre d'entrees entre bin 0 et I compris
-//|           N2 = nombre d'entrees entre bin I et bins-1 compris
-//|    imin = bin tel que nombre d'entrees entre imin et I = N1 * per
-//|    imax = bin tel que nombre d'entrees entre I et imax = N2 * per
-//|  Return: <0 si echec
-//|          min(I-imin,imax-I) si ok
-//--
-{
-imin = imax = -1;
-if( per <= 0. ) return -1;
-
-int I = FindBin(x);
-if( I<0 || I>=bins ) return -2;
-
-double N1 = 0.; for(int i=0; i<=I;   i++) N1 += data[i]; N1 *= per;
-double N2 = 0.; {for(int i=I; i<bins; i++) N2 += data[i]; N2 *= per;}
-
-double n = 0.;
-for(imin=I; imin>=0; imin--)   { n += data[imin]; if(n>=N1) break; }
-if( imin<0 ) imin = 0;
-// cout<<"I="<<I<<" imin="<<imin<<" n="<<n<<" N1="<<N1<<endl;
-
-n = 0.;
-for(imax=I; imax<bins; imax++) { n += data[imax]; if(n>=N2) break; }
-if( imax>=bins ) imax = bins-1;
-// cout<<"I="<<I<<" imax="<<imax<<" n="<<n<<" N2="<<N2<<endl;
-
-return ( imax-I > I-imin ) ? I-imin : imax-I ;
-}
-
-/********* Methode *********/
-//++
-int Histo::BinPercent(float x,float per,float& xmin,float& xmax)
-//
-//	Idem precedent mais renvoie xmin et xmax
-//--
-{
-xmin = xmax = 0.;
-int imin,imax;
-int rc = BinPercent(x,per,imin,imax);
-if( rc >= 0 ) { xmin = BinLowEdge(imin); xmax = BinHighEdge(imax); }
-return rc;
-}
-
-/********* Methode *********/
-//++
-void Histo::HInteg(float norm)
-//
-//	Remplace l'histogramme par son integrale normalise a norm:
-//	si norm <= 0 : pas de normalisation, integration seule
-//--
-{
-if(bins>1)
-  for(int i=1; i<bins; i++) {
-    data[i] += data[i-1];
-    if(err2!=NULL) err2[i] += err2[i-1];
-  }
-if( norm <= 0. ) return;
-norm /= data[bins-1];
-for(int i=0; i<bins; i++) {
-  data[i] *= norm;
-  if(err2!=NULL) err2[i] *= norm*norm;
-}
-}
-
-/********* Methode *********/
-//++
-void Histo::HDeriv()
-//
-//	Remplace l'histogramme par sa derivee
-//--
-{
-if( bins <= 1 ) return;
-float *temp = new float[bins];
-memcpy(temp, data, bins*sizeof(float));
-if(bins>=3) for(int i=1; i<bins-1; i++)
-              temp[i] = (data[i+1]-data[i-1])/(2.*binWidth);
-temp[0] = (data[1]-data[0])/binWidth;
-temp[bins-1] = (data[bins-1]-data[bins-2])/binWidth;
-memcpy(data, temp, bins*sizeof(float));
-delete [] temp;
-}
-
-/********* Methode *********/
-//++
-void Histo::HRebin(int nbinew)
-//
-//	Pour rebinner l'histogramme sur nbinew bins
-//--
-{
-  if( nbinew <= 0 ) return;
-
-  // memoraisation de l'histogramme original
-  Histo H(*this);
-
-  // Le nombre de bins est il plus grand ??
-  if( nbinew > bins ) {
-    delete [] data; data = NULL;
-    data = new float[nbinew];
-    if( err2 != NULL ) {
-      delete [] err2; err2 = NULL;
-      err2 = new double[nbinew];
-    }
-  }
-
-  // remise en forme de this
-  bins = nbinew;
-  this->Zero();
-  binWidth = (max-min)/bins;
-  // On recopie les parametres qui n'ont pas changes
-  under = H.under;
-  over  = H.over;
-
-
-  // Remplissage
-  for(int i=0;i<bins;i++) {
-    float xmi = BinLowEdge(i);
-    float xma = BinHighEdge(i);
-    int imi =  H.FindBin(xmi);
-    if( imi < 0 ) imi = 0;
-    int ima =  H.FindBin(xma);
-    if( ima >= H.bins ) ima = H.bins-1;
-    double w = 0.;
-    if( ima == imi ) {
-      w = H(imi) * binWidth/H.binWidth;
-    } else {
-      w += H(imi) * (H.BinHighEdge(imi)-xmi)/H.binWidth;
-      w += H(ima) * (xma -H.BinLowEdge(ima))/H.binWidth;
-      if( ima > imi+1 )
-          for(int ii=imi+1;ii<ima;ii++) w += H(ii);
-    }
-    AddBin(i,(float) w);
-  }
-
-}
-
-/********* Methode *********/
-//++
-int Histo::MaxiLocal(float& maxi,int& imax,float& maxn,int& imaxn)
-//
-//	Retourne le nombre de maxima locaux, la valeur du maximum (maxi)
-//	et sa position (imax), ainsi que la valeur du second maximum
-//	local (maxn) et sa position (imaxn).
-//	Attention: si un maximum a la meme valeur sur plusieurs bins
-//	consecutifs, le bin le plus a droite est pris.
-//--
-{
-int nml = 0;
-imax = imaxn = -1;
-maxi = maxn = -1.f;
-
-bool up = true;
-bool down = false;
-for(int i=0;i<bins;i++) {
-  if( !up ) if( data[i] > data[i-1] ) up = true;
-  if( up && !down ) {
-    if( i == bins-1 ) down=true;
-      else if( data[i] > data[i+1] ) down=true;
-  }
-
-  if( up && down ) {
-    nml++;
-    up = down = false;
-    if( imax < 0 ) {
-      imax = i; maxi = data[i];
-    } else if( data[i] >= maxi ) {
-      imaxn = imax; maxn = maxi;
-      imax = i; maxi = data[i];
-    } else {
-      if( imaxn < 0 || data[i] >= maxn ) { imaxn = i; maxn = data[i]; }
-    }
-  }
-
-}
-return nml;
-}
-
-/********* Methode *********/
-//++
-float Histo::FitMax(int degree, float frac, int debug) const
-//
-//	Fit de la position du maximum de l'histo par un polynome
-//	de degre `degree' a `frac' pourcent du maximum.
-//	L'histo est suppose etre remplit de valeurs positives
-//--
-{
-  if (degree < 2 || degree > 3) degree = 3;
-  if (frac <= 0. || frac >= 1.) frac = 0.5;
-
-  if (debug > 1)
-    cout<<"Histo::FitMax : Nb Entrees histo ="<<NEntries()<<endl;
-
-  if (NEntries() < 1) THROW(inconsistentErr);
-
-  int iMax = IMax();
-  float hmax = (*this)(iMax);
-  float xCenter = BinCenter(iMax);
-
-  if(debug>1)
-    cout<<"Max histo i="<<iMax<<" x="<<xCenter<<" v="<<hmax<<endl;
-
-  /* find limits at frac*hmax */
-
-  float limit = frac*hmax;
-
-  volatile int iLow = iMax;
-  while (iLow>0 && (*this)(iLow)>limit) iLow--;
-
-  volatile int iHigh = iMax;
-  while (iHigh<NBins()-1 && (*this)(iHigh)>limit) iHigh++;
-
-  int nLowHigh;
-  for(;;) {
-    nLowHigh = 0;
-    for (int i=iLow; i<=iHigh; i++) if((*this)(i)>0) {
-      if(!err2) nLowHigh++;
-        else if(Error2(i)>0.) nLowHigh++;
-    }
-    if (debug > 1) cout <<"Limites histo "<<iLow<<" - "<<iHigh
-                        <<" ("<<nLowHigh<<" non nuls)"<<endl;
-    if( nLowHigh >= degree+1 ) break;
-    iLow--;  iHigh++;
-    if(iLow<0 && iHigh>=NBins()) {
-      if (debug>1)
-        cout<<"Mode histogramme = "<<xCenter
-            <<"   BinCenter("<<iMax<<")"<<endl;
-      return xCenter;
-    }
-    if(iLow  < 0       ) iLow  = 0;
-    if(iHigh >= NBins()) iHigh = NBins()-1;
-  }
-
-  Vector xFit(nLowHigh);
-  Vector yFit(nLowHigh);
-  Vector e2Fit(nLowHigh);
-  Vector errcoef(1);
-  int ii = 0;
-  for (int j=iLow; j<=iHigh; j++) {
-    if ((*this)(j)>0) {
-      if(!err2) {
-        xFit(ii) = BinCenter(j)-xCenter;
-        yFit(ii) = (*this)(j);
-        e2Fit(ii) = yFit(ii);
-        ii++;
-      } else if(Error2(j)>0.) {
-        xFit(ii) = BinCenter(j)-xCenter;
-        yFit(ii) = (*this)(j);
-        e2Fit(ii) = Error2(j);
-        ii++;
-      }
-    }
-  }
-  if(debug>4) {
-    int k;
-    for(k=0;k<nLowHigh;k++) cout<<" "<<xFit(k);  cout<<endl;
-    for(k=0;k<nLowHigh;k++) cout<<" "<<yFit(k);  cout<<endl;
-    for(k=0;k<nLowHigh;k++) cout<<" "<<e2Fit(k); cout<<endl;
-  }
-  if( ii != nLowHigh ) THROW(inconsistentErr);
-  Poly pol(degree);
-  TRY {
-    pol.Fit(xFit, yFit, e2Fit, degree, errcoef);
-    if (debug>1) cout << "resultat fit = " << pol << endl;
-    pol.Derivate();
-  } CATCHALL {
-    THROW_SAME;
-  } ENDTRY
-
-  int DPolDeg = pol.Degre();
-  float fd = 0.;
-
-  if (DPolDeg == 0) {
-    // on est dans le cas d'un fit de droite
-    if( pol[0] > 0. ) {
-      // on a fitte une droite de pente >0.
-      fd = xFit(nLowHigh-1) + binWidth/2. + xCenter;
-    } else if( pol[0] < 0. ) {
-      // on a fitte une droite de pente <0.
-      fd = xFit(0) - binWidth/2. + xCenter;
-    } else {
-      // on a fitte une droite de pente =0. (creneau)
-      fd = (xFit(0)+xFit(nLowHigh-1))/2. + xCenter;
-    }
-  } else if (DPolDeg == 1) {
-    // on est dans le cas d'un fit de parabole
-    double r=0;
-    if (pol.Root1(r)==0) THROW(inconsistentErr);
-    fd = r + xCenter;
-  } else if (DPolDeg == 2) {
-    // on est dans le cas d'un fit de cubique
-    double r1=0;
-    double r2=0;
-    if (pol.Root2(r1,r2) == 0) THROW(inconsistentErr);
-    pol.Derivate();
-    fd = (pol(r1)<0) ? r1 + xCenter : r2 + xCenter;
-  } else {
-    // on est dans un cas non prevu
-    THROW(inconsistentErr);
-  }
-
-  if(fd>max) fd = max;
-  if(fd<min) fd = min;
-
-  if (debug>1)
-    cout << "Mode histogramme = " << fd
-         << "    (DerPol.degre =" << DPolDeg
-         << " pol.coeff[0] =" << pol[0]
-         << ")" << endl;
-
-  return fd;
-}
-
-
-/********* Methode *********/
-//++
-float Histo::FindWidth(float frac, int debug) const
-//
-//	Calcul de la largeur a frac pourcent du maximum
-//	autour du bin du maximum.
-//	L'histo est suppose etre remplit de valeurs positives
-//--
-{
-  float xmax = BinCenter( IMax() );
-  return FindWidth(xmax,frac,debug);
-}
-
-/********* Methode *********/
-//++
-float Histo::FindWidth(float xmax,float frac, int debug) const
-//
-//	Calcul de la largeur a frac pourcent de la valeur du bin xmax.
-//	L'histo est suppose etre remplit de valeurs positives
-//--
-{
-  if (frac <= 0 || frac >= 1.) frac = 0.5;
-
-  if (debug > 1)
-    cout << "Histo::FindWidth a " << frac
-         << " de xmax= " << xmax
-         << " , ndata= " << NData()
-         << " , nent= " << NEntries()
-         << " , nbin= " << NBins() << endl;
-
-  if (NEntries() < 1) THROW(inconsistentErr);
-  if (NBins() < 3) THROW(inconsistentErr);
-
-  int iMax = FindBin(xmax);
-  if (iMax<0 || iMax>=NBins()) THROW(inconsistentErr);
-  float hmax = data[iMax];
-  float limit = frac*hmax;
-  if (debug > 1)
-    cout << "  Max histo[" << iMax << "] = " << hmax
-         << ", limite " << limit << endl;
-
-  int iLow = iMax;
-  while (iLow>=0 && data[iLow]>limit) iLow--;
-  if( iLow < 0 ) iLow = 0;
-
-  int iHigh = iMax;
-  while (iHigh<NBins() && data[iHigh]>limit) iHigh++;
-  if( iHigh >=NBins() ) iHigh = NBins()-1;
-
-  float xlow   = BinCenter(iLow);
-  float ylow   = data[iLow];
-
-  float xlow1=xlow, ylow1=ylow;
-  if(iLow+1<NBins()) {
-    xlow1  = BinCenter(iLow+1);
-    ylow1  = data[iLow+1];
-  }
-
-  float xhigh  = BinCenter(iHigh);
-  float yhigh  = data[iHigh];
-
-  float xhigh1=xhigh, yhigh1=yhigh;
-  if(iHigh-1>=0) {
-    xhigh1 = BinCenter(iHigh-1);
-    yhigh1 = data[iHigh-1];
-  }
-
-  float xlpred,xhpred,wd;
-
-  if(ylow1>ylow) {
-    xlpred = xlow + (xlow1-xlow)/(ylow1-ylow)*(limit-ylow);
-    if(xlpred < xlow) xlpred = xlow;
-  } else xlpred = xlow;
-
-  if(yhigh1>yhigh) {
-    xhpred = xhigh + (xhigh1-xhigh)/(yhigh1-yhigh)*(limit-yhigh);
-    if(xhpred > xhigh) xhpred = xhigh;
-  } else xhpred = xhigh;
-
-  wd = xhpred - xlpred;
-
-  if (debug > 1) {
-    cout << "Limites histo: " << "  Width " << wd << endl;
-    cout << "  Low: [" << iLow  << "]=" << ylow << " pred-> " << xlpred
-         << " - High: [" << iHigh  << "]=" << yhigh << " pred-> " << xhpred
-         << endl;
-  }
-
-  return wd;
-}
-
-
-/********* Methode *********/
-//++
-int Histo::EstimeMax(float& xm,int SzPav)
-//
-//	Cf suivant mais im est le bin du maximum de l'histo
-//--
-{
-int im = IMax();
-return EstimeMax(im,xm,SzPav);
-}
-
-/********* Methode *********/
-//++
-int Histo::EstimeMax(int& im,float& xm,int SzPav)
-//
-//	Determine l'abscisses du maximum donne par im
-//	en moyennant dans un pave SzPav  autour du maximum
-//|  Return:
-//|     0 = si fit maximum reussi avec SzPav pixels
-//|     1 = si fit maximum reussi avec moins que SzPav pixels
-//|     2 = si fit maximum echoue et renvoit BinCenter()
-//|    -1 = si echec: SzPav <= 0 ou im hors limites
-//--
-{
-xm = 0;
-if( SzPav <= 0 ) return -1;
-if( im < 0 || im >= bins ) return -1;
-
-if( SzPav%2 == 0 ) SzPav++;
-SzPav = (SzPav-1)/2;
-
-int rc = 0;
-double dxm = 0, wx = 0;
-for(int i=im-SzPav;i<=im+SzPav;i++) {
-  if( i<0 || i>= bins ) {rc=1; continue;}
-  dxm += BinCenter(i) * (*this)(i);
-  wx  += (*this)(i);
-}
-
-if( wx > 0. ) {
-  xm = dxm/wx;
-  return rc;
-} else {
-  xm = BinCenter(im);
-  return 2;
-}
-
-}
-
-/********* Methode *********/
-//++
-void Histo::EstimeWidthS(float frac,float& widthG,float& widthD)
-//
-//	Determine la largeur a frac% du maximum a gauche (widthG)
-//	et a droite (widthD)
-//--
-{
-int i;
-widthG = widthD = -1.;
-if( bins<=1 || frac<=0. || frac>=1. ) return;
-
-int imax = 0;
-float maxi = data[0];
-for(i=1;i<bins;i++) if(data[i]>maxi) {imax=i; maxi=data[i];}
-float xmax = BinCenter(imax);
-float maxf = maxi * frac;
-
-// recherche du sigma a gauche
-widthG = 0.;
-for(i=imax;i>=0;i--) if( data[i] <= maxf ) break;
-if(i<0) i=0;
-if(i<imax) {
-  if( data[i+1] != data[i] ) {
-    widthG = BinCenter(i) + binWidth
-           * (maxf-data[i])/(data[i+1]-data[i]);
-    widthG = xmax - widthG;
-  } else widthG = xmax - BinCenter(i);
-}
-
-// recherche du sigma a droite
-widthD = 0.;
-for(i=imax;i<bins;i++) if( data[i] <= maxf ) break;
-if(i>=bins) i=bins-1;
-if(i>imax) {
-  if( data[i] != data[i-1] ) {
-    widthD = BinCenter(i) - binWidth
-           * (maxf-data[i])/(data[i-1]-data[i]);
-    widthD -= xmax;
-  } else widthD = BinCenter(i) - xmax;
-}
-
-}
-
-//////////////////////////////////////////////////////////
-//++
-int  Histo::Fit(GeneralFit& gfit,unsigned short typ_err)
-//
-//	Fit de l'histogramme par ``gfit''.
-//| typ_err = 0 :
-//|    - erreur attachee au bin si elle existe
-//|    - sinon 1
-//| typ_err = 1 :
-//|    - erreur attachee au bin si elle existe
-//|    - sinon max( sqrt(abs(bin) ,1 )
-//| typ_err = 2 :
-//|    - erreur forcee a 1
-//| typ_err = 3 :
-//|    - erreur forcee a max( sqrt(abs(bin) ,1 )
-//| typ_err = 4 :
-//|    - erreur forcee a 1, nulle si bin a zero.
-//| typ_err = 5 :
-//|    - erreur forcee a max( sqrt(abs(bin) ,1 ),
-//|      nulle si bin a zero.
-//--
-{
-if(NBins()<=0) return -1000;
-if(typ_err>5) typ_err=0;
-
-GeneralFitData mydata(1,NBins());
-
-for(int i=0;i<NBins();i++) {
-  double x = (double) BinCenter(i);
-  double f = (double) (*this)(i);
-  double saf = sqrt(fabs((double) f)); if(saf<1.) saf=1.;
-  double e;
-  if(typ_err==0)      {if(HasErrors()) e=Error(i); else e=1.;}
-  else if(typ_err==1) {if(HasErrors()) e=Error(i); else e=saf;}
-  else if(typ_err==2) e=1.;
-  else if(typ_err==3) e=saf;
-  else if(typ_err==4) e=(f==0.)?0.:1.;
-  else if(typ_err==5) e=(f==0.)?0.:saf;
-  mydata.AddData1(x,f,e);
-}
-
-gfit.SetData(&mydata);
-
-return gfit.Fit();
-}
-
-//++
-Histo Histo::FitResidus(GeneralFit& gfit)
-//
-//	Retourne une classe contenant les residus du fit ``gfit''.
-//--
-{
-if(NBins()<=0)
-  throw(SzMismatchError("Histo::FitResidus: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("Histo::FitResidus: NULL pointer\n"));
-Vector par = gfit.GetParm();
-Histo h(*this);
-for(int i=0;i<NBins();i++) {
-  double x = (double) BinCenter(i);
-  h(i) -= (float) f->Value(&x,par.Data());
-}
-return h;
-}
-
-//++
-Histo Histo::FitFunction(GeneralFit& gfit)
-//
-//	Retourne une classe contenant la fonction du fit ``gfit''.
-//--
-{
-if(NBins()<=0)
-  throw(SzMismatchError("Histo::FitFunction: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("Histo::FitFunction: NULL pointer\n"));
-Vector par = gfit.GetParm();
-Histo h(*this);
-for(int i=0;i<NBins();i++) {
-  double x = (double) BinCenter(i);
-  h(i) = (float) f->Value(&x,par.Data());
-}
-return h;
-}
-
-/********* Methode *********/
-//++
-void Histo::PrintF(FILE * fp, int hdyn,float hmin, float hmax,int pflag,
-	      int il, int ih)
-//
-//	Impression de l'histogramme dans le fichier fp
-//|   hdyn = nombre de colonnes pour imprimer les etoiles
-//|       si =0 alors defaut(100),
-//|       si <0 pas de print histo seulement infos
-//|   hmin = minimum de la dynamique
-//|   hmax = maximum de la dynamique
-//|       si hmax<=hmin           : hmin=VMin() hmax=VMax()
-//|       si hmax<=hmin et hmin=0 : hmin=0 hmax=VMax()
-//|       sinon : hmin hmax
-//|   pflag < 0 : on imprime les informations (nbin,min,...) sans l'histogramme
-//|         = 0 : on imprime  "BinCenter(i) data[i]"  (note "... ...")
-//|         bit 0 on : (v=1): numero_bin "... ..."
-//|         bit 1 on : (v=2): "... ..." erreur
-//--
-{
-
- 
- if( il > ih ) { il = 0; ih = bins-1; }
- if( il < 0 ) il = 0;
- if( ih >= bins ) ih = bins-1;
-
- double dhmin = (double) hmin;
- double dhmax = (double) hmax;
- double hb,hbmn,hbmx;
-
- if(hdyn==0) hdyn = 100;
-
- cout << "~Histo::Print  "
-      << " nHist=" << nHist << "  nEntries=" << nEntries
-      << "  under=" << under << "  over=" << over << endl;
- cout << "       bins=" << bins
-      << "  min=" << min << "  max=" << max
-      << "  binWidth=" << binWidth << endl;
- cout << "       mean=" << Mean() << " r.m.s=" << Sigma() << endl;
-
- if(hdyn<0 || pflag<0 ) return;
-
- if(dhmax<=dhmin) { if(hmin != 0.) dhmin = (double) VMin(); else dhmin=0.;
-                  dhmax = (double) VMax(); }
- if(dhmin>dhmax) return;
- if(dhmin==dhmax) {dhmin -= 1.; dhmax += 1.;}
- double wb = (dhmax-dhmin) / (double) hdyn;
-
- // determination de la position de la valeur zero
- int i0 = (int)(-dhmin/wb);
-
- // si le zero est dans la dynamique,
- //  il doit imperativement etre une limite de bin
- if( 0 <= i0 && i0 < hdyn ) {
-   hbmn = dhmin + i0*wb;
-   hbmx = hbmn + wb;
-   if( hbmn != 0. ) {
-     hbmn *= -1.;
-     if( hbmn < hbmx ) {
-       // le zero est + pres du bord negatif du bin
-       dhmin += hbmn;
-       dhmax += hbmn;
-     } else {
-       // le zero est + pres du bord positif du bin
-       dhmin -= hbmx;
-       dhmax -= hbmx;
-     }
-     wb = (dhmax-dhmin) / (double) hdyn;
-     i0 = (int)(-dhmin/wb);
-   }
- }
-
- cout <<"       bin minimum="<<dhmin<<"   bin maximum="<<dhmax
-      <<"   binw="<<wb<< endl;
-
- char* s = new char[hdyn+1];
- s[hdyn] = '\0';
-
- // premiere ligne
- {for(int i=0;i<hdyn;i++) s[i] = '=';}
- if( 0 <= i0 && i0 < hdyn ) s[i0] = '0';
- if(pflag&1) fprintf( fp, "====");
- fprintf( fp, "======================");
- if(pflag&2 && err2!=NULL) fprintf( fp, "===========");
- fprintf( fp, "==%s\n",s);
-
- // histogramme
- {for(int i=il;i<=ih;i++) {
-   for(int k=0;k<hdyn;k++) s[k] = ' ';
-   hb = (*this)(i);
-
-   //choix du bin (hdyn bin entre [dhmin,dhmax[
-   int ii = (int)( (hb-dhmin)/wb );
-   if(ii<0) ii = 0; else if(ii>=hdyn) ii = hdyn-1;
-
-   // limite du bin
-   hbmn = dhmin + ii*wb;
-   hbmx = hbmn + wb;
-
-   // remplissage de s[] en tenant compte des courbes +/-
-   if(i0<0) {
-     // courbe entierement positive
-     for(int k=0;k<=ii;k++) s[k] = 'X';
-   } else if(i0>=hdyn) {
-     // courbe entierement negative
-     for(int k=hdyn-1;k>=ii;k--) s[k] = 'X';
-   } else {
-     // courbe positive et negative
-     s[i0] = '|';
-     if(ii>i0)        for(int k=i0+1;k<=ii;k++) s[k] = 'X';
-       else if(ii<i0) for(int k=ii;k<i0;k++)    s[k] = 'X';
-          else s[ii] = 'X';
-   }
-
-   // valeur a mettre dans le bin le plus haut/bas
-   int ib;
-   if(hb>0.) ib = (int)( 10.*(hb-hbmn)/(hbmx-hbmn) );
-     else if(hb<0.) ib = (int)( 10.*(hbmx-hb)/(hbmx-hbmn) );
-       else ib = -1;
-   if(ib==-1) s[ii] = '|';
-     else if(ib==0) s[ii] = '.';
-       else if(ib>0 && ib<10) s[ii] = (char)((int) '0' + ib);
-
-   // traitement des saturations +/-
-   if( hb < dhmin ) s[0] = '*';
-    else if( hb > dhmax ) s[hdyn-1] = '*';
-
-   if(pflag&1) fprintf( fp, "%3d ",i);
-   fprintf( fp, "%10.4g %10.4g ",BinCenter(i),hb);
-   if(pflag&2 && err2!=NULL) fprintf( fp, "%10.4g ",Error(i));
-   fprintf( fp, "= %s\n",s);
- }}
-
- // derniere ligne
- for(int i=0;i<hdyn;i++) s[i] = '=';
- if( 0 <= i0 && i0 < hdyn ) s[i0] = '0';
- if(pflag&1) fprintf( fp, "====");
- fprintf( fp, "======================");
- if(pflag&2 && err2!=NULL) fprintf( fp, "===========");
- fprintf( fp, "==%s\n",s);
-
- // valeur basse des bins (sur ["ndig-1" digits + signe] =  ndig char (>=3))
- const int ndig = 7;
- char sn[2*ndig+10];
- hb = ( fabs(dhmin) > fabs(dhmax) ) ? fabs(dhmin) : fabs(dhmax);
- int n;
- if( hb > 0. ) n = (int)(log10(hb*1.00000001)); else n = 1;
- double scaledig = pow(10.,(double) ndig-2);
- double expo = scaledig/pow(10.,(double) n);
- // cout <<"n="<<n<<" hb="<<hb<<" scaledig="<<scaledig<<" expo="<<expo<<endl;
- for(int k=0;k<ndig;k++) {
-   for(int i=0;i<hdyn;i++) s[i] = ' ';
-   {for(int i=0;i<hdyn;i++) {
-     n = (int)( (dhmin + i*wb)*expo );
-     for(int j=0;j<2*ndig+10;j++) sn[j] = ' ';
-     sprintf(sn,"%d%c",n,'\0');
-     strip(sn,'B',' ');
-     // cout <<"n="<<n<<" sn=("<<sn<<")  l="<<strlen(sn)<<" k="<<k;
-     if( (int) strlen(sn) > k ) s[i] = sn[k];
-     // cout <<"  s=("<<s<<")"<<endl;
-   }}
-   if(pflag&1) fprintf( fp, "    ");
-   fprintf( fp, "                      ");
-   if(pflag&2 && err2!=NULL) fprintf( fp, "           ");
-   fprintf( fp, "  %s\n",s);
- }
- fprintf( fp, "  (valeurs a multiplier par %.0e)\n",1./expo);
-
- delete[] s;
-}
-
-/********* Methode *********/
-//++
-void Histo::Print(int hdyn,float hmin, float hmax,int pflag,
-	     int il, int ih)
-//
-//	Impression de l'histogramme sur stdout
-//--
-{
- Histo::PrintF(stdout, hdyn, hmin, hmax, pflag, il, ih);
-}
-
-
-// Rappel des inlines functions pour commentaires
-//++
-// inline float          XMin() const
-//	Retourne l'abscisse minimum
-//--
-//++
-// inline float          XMax() const
-//	Retourne l'abscisse maximum
-//--
-//++
-// inline int            NBins() const
-//	Retourne le nombre de bins
-//--
-//++
-// inline float          BinWidth() const
-//	Retourne la largeur du bin
-//--
-//++
-// inline float*         Bins() const
-//	Retourne le pointeur sur le tableaux des contenus
-//--
-//++
-// inline float          operator()(int i) const
-//	Retourne le contenu du bin i
-//--
-//++
-// inline float&         operator()(int i)
-//	Remplit le contenu du bin i
-//--
-//++
-// inline float          Error(int i) const
-//	Retourne l'erreur du bin i
-//--
-//++
-// inline double         Error2(int i) const
-//	Retourne l'erreur au carre du bin i
-//--
-//++
-// inline double&        Error2(int i)
-//	Remplit l'erreur au carre du bin i
-//--
-//++
-// inline float          NData() const
-//	Retourne la somme ponderee
-//--
-//++
-// inline float          NEntries()
-//	Retourne le nombre d'entrees
-//--
-//++
-// inline float          NOver() const
-//	Retourne le nombre d'overflow
-//--
-//++
-// inline float          NUnder() const
-//	Retourne le nombre d'underflow
-//--
-//++
-// inline float          BinLowEdge(int i)  const
-//	Retourne l'abscisse du bord inferieur du bin i
-//--
-//++
-// inline float          BinCenter(int i)   const
-//	Retourne l'abscisse du centre du bin i
-//--
-//++
-// inline float          BinHighEdge(int i) const
-//	Retourne l'abscisse du bord superieur du bin i
-//--
-//++
-// inline int            FindBin(float x) const   
-//	Retourne le numero du bin contenant l'abscisse x
-//--
-
-
-///////////////////////////////////////////////////////////
-// --------------------------------------------------------
-//   Les objets delegues pour la gestion de persistance 
-// --------------------------------------------------------
-///////////////////////////////////////////////////////////
-
-void ObjFileIO<Histo>::ReadSelf(PInPersist& is)
-{
-char strg[256];
-
-if(dobj==NULL) dobj=new Histo;
-  else         dobj->Delete();
-
-// Lecture entete
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-
-// Lecture des valeurs
-is.Get(dobj->bins);
-is.Get(dobj->nEntries);
-int_4 errok;
-is.Get(errok);
-
-is.Get(dobj->binWidth);
-is.Get(dobj->min);
-is.Get(dobj->max);
-is.Get(dobj->under);
-is.Get(dobj->over);
-
-is.Get(dobj->nHist);
-
-// Lecture des donnees Histo 1D
-dobj->data = new float[dobj->bins];
-is.GetLine(strg, 255);
-is.Get(dobj->data, dobj->bins);
-
-// Lecture des erreurs
-if(errok) {
-  is.GetLine(strg, 255);
-  dobj->err2 = new double[dobj->bins];
-  is.Get(dobj->err2, dobj->bins);
-}
-
-return;
-}
-
-void ObjFileIO<Histo>::WriteSelf(POutPersist& os) const
-{
-if (dobj == NULL)   return;
-char strg[256];
-
-// Que faut-il ecrire?
-int_4 errok = (dobj->err2) ? 1 : 0;
-
-// Ecriture entete pour identifier facilement
-sprintf(strg,"bins=%6d  NEnt=%15d  errok=%1d",dobj->bins,dobj->nEntries,errok);
-os.PutLine(strg);
-sprintf(strg,"binw=%g  min=%g max=%g",dobj->binWidth,dobj->min,dobj->max);
-os.PutLine(strg);
-sprintf(strg, "under=%g over=%g nHist=%g",dobj->under,dobj->over,dobj->nHist);
-os.PutLine(strg);
-
-// Ecriture des valeurs
-os.Put(dobj->bins);
-os.Put(dobj->nEntries);
-os.Put(errok);
-
-os.Put(dobj->binWidth);
-os.Put(dobj->min);
-os.Put(dobj->max);
-os.Put(dobj->under);
-os.Put(dobj->over);
-
-os.Put(dobj->nHist);
-
-// Ecriture des donnees Histo 1D
-sprintf(strg,"Histo: Tableau des donnees %d",dobj->bins);
-os.PutLine(strg);
-os.Put(dobj->data, dobj->bins);
-
-// Ecriture des erreurs
-if(errok) {
-  sprintf(strg,"Histo: Tableau des erreurs %d",dobj->bins);
-  os.PutLine(strg);
-  os.Put(dobj->err2, dobj->bins);
-}
-
-return;
-}
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template ObjFileIO<Histo>
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class ObjFileIO<Histo>;
-#endif
Index: trunk/SophyaLib/NTools/histos.h
===================================================================
--- trunk/SophyaLib/NTools/histos.h	(revision 753)
+++ 	(revision )
@@ -1,172 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-//
-// $Id: histos.h,v 1.6 1999-11-05 13:08:29 ansari Exp $
-//
-
-#ifndef HISTOS_SEEN
-#define HISTOS_SEEN
-
-#include "objfio.h"
-#include <iostream.h>
-#include <stdio.h>
-#include "peida.h"
-#include "tvector.h"
-#include "ppersist.h"
-#include "anydataobj.h"
-
-namespace SOPHYA {
-
-class GeneralFit;
-
-class Histo : public AnyDataObj {
-  friend class ObjFileIO<Histo>;
-public:
-
-  // CREATOR / DESTRUCTOR
-  Histo();
-  Histo(float xMin, float xMax, int nBin=100);
-  Histo(const Histo& H);
-  virtual        ~Histo();
-
-  // OPTIONS
-  void   Errors();
-
-  // UPDATING or SETTING
-  void   Zero();
-  void   Add(float x, float w = 1.);
-  void   AddBin(int numBin, float w = 1.);
-  void   SetBin(float x, float w = 1.);
-  void   SetBin(int numBin, float w = 1.);
-  void   SetErr2(float x, double e2);
-  void   SetErr2(int numBin, double e2);
-  void   SetErr(float x, float e);
-  void   SetErr(int numBin, float e);
-
-  // Operators
-  Histo& operator = (const Histo& h);
-  Histo& operator *= (double b);
-  Histo& operator /= (double b);
-  Histo& operator += (double b);
-  Histo& operator -= (double b);
-  friend Histo operator * (const Histo& a, double b);
-  friend Histo operator * (double b, const Histo& a);
-  friend Histo operator / (const Histo& a, double b);
-  friend Histo operator + (const Histo& a, double b);
-  friend Histo operator + (double b, const Histo& a);
-  friend Histo operator - (const Histo& a, double b);
-  friend Histo operator - (double b, const Histo& a);
-  Histo& operator += (const Histo& a);
-  Histo& operator -= (const Histo& a);
-  Histo& operator *= (const Histo& a);
-  Histo& operator /= (const Histo& a);
-  friend Histo operator + (const Histo& a, const Histo& b);
-  friend Histo operator - (const Histo& a, const Histo& b);
-  friend Histo operator * (const Histo& a, const Histo& b);
-  friend Histo operator / (const Histo& a, const Histo& b);
-
-  // get/put dans/depuis un vector
-  void GetAbsc(Vector& v);
-  void GetValue(Vector& v);
-  void GetError2(Vector& v);
-  void GetError(Vector& v);
-  void PutValue(Vector& v, int ierr=0);
-  void PutValueAdd(Vector &v, int ierr=0);
-  void PutError2(Vector& v);
-  void PutError2Add(Vector& v);
-  void PutError(Vector& v);
-
-  // INLINES
-  inline float          XMin() const             {return min;}
-  inline float          XMax() const             {return max;}
-  inline int_4          NBins() const            {return bins;}
-  inline float          BinWidth() const         {return binWidth;}
-  inline float*         Bins() const             {return data;}
-  inline float          operator()(int i) const  {return data[i];}
-  inline float&         operator()(int i)        {return data[i];}
-  inline bool           HasErrors() { if(err2) return true; else return false;}
-  inline float          Error(int i) const
-                          {if(err2) {if(err2[i]>0.) return sqrt(err2[i]); else return 0.;}
-                           else return 0.;}
-  inline double         Error2(int i) const
-                          {if(err2) return err2[i]; else return 0.;}
-  inline double&        Error2(int i) {return err2[i];}
-  inline float          NData() const            {return (float) nHist;}
-  inline float          NEntries() const         {return nEntries;}
-  inline float          NOver() const            {return over;}
-  inline float          NUnder() const           {return under;}
-
-  inline float          BinLowEdge(int i)  const {return min + i*binWidth;}
-  inline float          BinCenter(int i)   const {return min + (i+0.5)*binWidth;}
-  inline float          BinHighEdge(int i) const {return min + (i+1)*binWidth;} 
-  inline int_4          FindBin(float x) const   
-                            {return (int_4) floorf((x - min) / binWidth);}
-
-  // Info, statistique et calculs sur les histogrammes
-  int            BinNonNul() const;
-  int            ErrNonNul() const;
-  int            IMax() const;
-  int            IMin() const;
-  float          VMax() const;
-  float          VMin() const;
-  float          Mean() const;
-  float          Sigma() const;
-  float          MeanLH(int il,int ih) const;
-  float          SigmaLH(int il,int ih) const;
-  float          Mean(float x0, float dx) const;
-  float          Sigma(float x0, float dx) const;
-  float          CleanedMean() const;
-  float          CleanedMean(float& sigma) const;
-  int            BinPercent(float per) const;
-  int            BinPercent(float x,float per,int& imin,int& imax);
-  int            BinPercent(float x,float per,float& xmin,float& xmax);
-  void           HInteg(float norm = 0.);
-  void           HDeriv();
-  void           HRebin(int nbinew);
-
-  int            MaxiLocal(float& maxi,int& imax,float& maxn,int& imaxn);
-  float          FitMax(int degree=2, float frac=0.5f, int debug=0) const;
-  float          FindWidth(float xmax,float frac=0.5f, int debug=0) const;
-  float          FindWidth(float frac=0.5f, int debug=0) const;
-  int            EstimeMax(float& xm,int SzPav = 3);
-  int            EstimeMax(int& im,float& xm,int SzPav = 3);
-  void           EstimeWidthS(float frac,float& widthG,float& widthD);
-
-  // Fit
-  int    Fit(GeneralFit& gfit,unsigned short typ_err=0);
-  Histo  FitResidus(GeneralFit& gfit);
-  Histo  FitFunction(GeneralFit& gfit);
-
-  // Print et Display ASCII
-  void           PrintF(FILE * fp, int dyn = 100, float hmin = 1., float hmax = -1.,
-			int pflag = 0, int il = 1, int ih = -1);
-  void           Print(int dyn = 100, float hmin = 1., float hmax = -1.,
-			int pflag = 0, int il = 1, int ih = -1);
-
-protected:
-  void Delete();
-
-  float*         data;		 
-  double*        err2;		 
-  float          under;
-  float          over;
-  double         nHist;
-  int_4          nEntries;
-  int_4          bins;
-  float          min;
-  float          max;
-  float          binWidth;
-};
-
-
-inline POutPersist& operator << (POutPersist& os, Histo & obj)
-{ ObjFileIO<Histo> fio(&obj);  fio.Write(os);  return(os); }
-inline PInPersist& operator >> (PInPersist& is, Histo & obj)
-{ ObjFileIO<Histo> fio(&obj);  fio.Read(is);  return(is); }
-
-// Classe pour la gestion de persistance
-// ObjFileIO<Histo>
-
-
-} // Fin du namespace
-
-#endif // HISTOS_SEEN
Index: trunk/SophyaLib/NTools/histos2.cc
===================================================================
--- trunk/SophyaLib/NTools/histos2.cc	(revision 753)
+++ 	(revision )
@@ -1,2038 +1,0 @@
-//
-//    cmv 05/08/96
-//
-
-#include "machdefs.h"
-
-#include <string.h>
-#include <new.h>
-#include <stdlib.h>
-#include <stdio.h>
-#ifndef __mac__
-#include <values.h>
-#endif
-
-#include "histos2.h"
-#include "generalfit.h"
-
-//++
-// Class	Histo2D
-// Lib	Outils++ 
-// include	histos2.h
-//
-//	Classe d'histogrammes 2D
-//--
-
-///////////////////////////////////////////////////////////////////
-//++
-// Titre	Constructeurs
-//--
-
-//++
-Histo2D::Histo2D(float xMin, float xMax, int nxBin
-                ,float yMin, float yMax, int nyBin)
-//
-//	Createur d'un histogramme 2D ayant nxBin,nyBin bins
-//	entre xMin,xMax et yMin,yMax.
-//--
-      : data(new float[nxBin*nyBin]), err2(NULL)
-      , nHist(0), nEntries(0)
-      , nx(nxBin), ny(nyBin), nxy(nxBin*nyBin)
-      , xmin(xMin), xmax(xMax), ymin(yMin), ymax(yMax)
-      , wbinx((xMax - xMin)/nxBin), wbiny((yMax - yMin)/nyBin)
-      , hprojx(NULL), hprojy(NULL)
-{
-ASSERT(nxBin>0 && nyBin>0 && xMin<xMax && yMin<yMax);
-for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
-Zero();
-b_s.H = NULL;
-END_CONSTRUCTOR
-}
-
-//++
-Histo2D::Histo2D(const Histo2D& h)
-//
-//	Constructeur par copie.
-//--
-{
-int i,j;
-data = new float[h.nxy];
-memcpy(data, h.data, h.nxy*sizeof(float));
-
-err2 = NULL;
-if(h.err2) {
-  err2 = new double[h.nxy];
-  memcpy(err2, h.err2, h.nxy*sizeof(double));
-}
-
-nHist = h.nHist; nEntries = h.nEntries;
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j]=h.over[i][j];
-nx = h.nx;  ny = h.ny;  nxy = h.nxy;
-xmin = h.xmin; xmax = h.xmax; ymin = h.ymin; ymax = h.ymax;
-wbinx = h.wbinx; wbiny = h.wbiny;
-b_s.H = NULL;
-
-hprojx = hprojy = NULL;
-if(h.hprojx) {
-  SetProjX();
-  *hprojx = *(h.hprojx);
-}
-if(h.hprojy) {
-  SetProjY();
-  *hprojy = *(h.hprojy); 
-}
-
-int nb;
-float min,max;
-nb = h.NSliX();
-if(nb>0) {
-  SetSliX(nb);
-  for(i=0; i<NSliX();i++) *HSliX(i) = *(h.HSliX(i));
-}
-nb = h.NSliY();
-if(nb>0) {
-  SetSliY(nb);
-  for(i=0; i<NSliY();i++) *HSliY(i) = *(h.HSliY(i));
-}
-
-nb = h.NBandX();
-if(nb>0) {
-  for(i=0; i<nb;i++) {
-    h.GetBandX(i,min,max);
-    SetBandX(min,max);
-    *HBandX(i) = *(h.HBandX(i));
-  }
-  for(i=0; i<NBandX();i++) *HBandX(i) = *(h.HBandX(i));
-}
-nb = h.NBandY();
-if(nb>0) {
-  for(i=0; i<nb;i++) {
-    h.GetBandY(i,min,max);
-    SetBandY(min,max);
-    *HBandY(i) = *(h.HBandY(i));
-  }
-  for(i=0; i<NBandY();i++) *HBandY(i) = *(h.HBandY(i));
-}
-
-END_CONSTRUCTOR
-}
-
-//++
-Histo2D::Histo2D()
-//
-//	Constructeur par defaut.
-//--
-      : data(NULL), err2(NULL)
-      , nHist(0), nEntries(0)
-      , nx(0), ny(0), nxy(0)
-      , xmin(0), xmax(0), ymin(0), ymax(0)
-      , wbinx(0), wbiny(0)
-      , hprojx(NULL), hprojy(NULL)
-{
-for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
-b_s.H = NULL;
-END_CONSTRUCTOR
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::Delete()
-//
-//	Desallocation de la place de l'histogramme (fct privee).
-//--
-{
-  if( data != NULL ) { delete[] data; data = NULL;}
-
-  if( err2 != NULL ) { delete[] err2; err2 = NULL;}
-
-  DelProj();
-
-  DelBandX();
-  DelBandY();
-
-  DelSliX();
-  DelSliY();
-
-  nHist = 0;
-  nEntries = 0;
-  nx = 0; ny = 0; nxy = 0;
-  xmin = 0; xmax = 0; ymin = 0; ymax = 0;
-  wbinx = 0; wbiny = 0;
-  for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
-  b_s.H = NULL;
-}
-
-//++
-Histo2D::~Histo2D()
-//
-//	Destructeur.
-//--
-{
-Delete();
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-// Titre	Methodes generales
-//--
-
-//++
-void Histo2D::Zero()
-//
-//	Remise a zero du contenu, des erreurs et des valeurs.
-//--
-{
-  nHist = nEntries = 0;
-  for(int i=0;i<3;i++) for(int j=0;j<3;j++) over[i][j]=0.;
-  memset(data, 0, nxy*sizeof(float));
-  memset(over, 0, 9*sizeof(float));
-
-  if( err2 != NULL ) memset(err2, 0, nxy*sizeof(double));
-
-  ZeroProj();
-
-  ZeroBandX();
-  ZeroBandY();
-
-  ZeroSliX();
-  ZeroSliY();
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::Errors()
-//
-//	Pour avoir le calcul des erreurs.
-//--
-{
- if( nxy > 0 ) {
-   if(err2==NULL) err2 = new double[nxy];
-   memset(err2, 0, nxy*sizeof(double));
- }
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-Histo2D& Histo2D::operator = (const Histo2D& h)
-//
-//--
-{
-  int i,j,nb;
-  float min,max;
-
-  if(this == &h) return *this;
-  if( h.nxy > nxy ) Delete();
-  if(!data) data = new float[h.nxy];
-  if( !h.err2 && err2 ) { delete [] err2; err2=NULL;}
-  if( h.err2 && !err2 ) err2 = new double[h.nxy];
-
-  for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] = h.over[i][j];
-  nHist = h.nHist;
-  nEntries = h.nEntries;
-  nx = h.nx;  ny = h.ny;  nxy = h.nxy;
-  xmin = h.xmin; xmax = h.xmax; wbinx = h.wbinx;
-  ymin = h.ymin; ymax = h.ymax; wbiny = h.wbiny;
-  
-  memcpy(data, h.data, nxy*sizeof(float));
-  if(err2) memcpy(err2, h.err2, nxy*sizeof(double));
-
-  DelProjX();
-  if(h.hprojx) {
-    SetProjX();
-    *hprojx = *(h.hprojx);
-  }
-  DelProjY();
-  if(h.hprojy) {
-    SetProjY();
-    *hprojy = *(h.hprojy);
-  }
-
-  DelSliX();
-  nb = h.NSliX();
-  if(nb>0) {
-    SetSliX(nb);
-    for(i=0; i<NSliX();i++) *HSliX(i) = *(h.HSliX(i));
-  }
-  DelSliY();
-  nb = h.NSliY();
-  if(nb>0) {
-    SetSliY(nb);
-    for(i=0; i<NSliY();i++) *HSliY(i) = *(h.HSliY(i));
-  }
-
-  DelBandX();
-  nb = h.NBandX();
-  if(nb>0) {
-    for(i=0; i<nb;i++) {
-      h.GetBandX(i,min,max);
-      SetBandX(min,max);
-      *HBandX(i) = *(h.HBandX(i));
-    }
-    for(i=0; i<NBandX();i++) *HBandX(i) = *(h.HBandX(i));
-  }
-  DelBandY();
-  nb = h.NBandY();
-  if(nb>0) {
-    for(i=0; i<nb;i++) {
-      h.GetBandY(i,min,max);
-      SetBandY(min,max);
-      *HBandY(i) = *(h.HBandY(i));
-    }
-    for(i=0; i<NBandY();i++) *HBandY(i) = *(h.HBandY(i));
-  }
-
-  return *this;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-Histo2D& Histo2D::operator *= (double b)
-//
-//--
-{
-int i,j;
-double b2 = b*b;
-for(i=0;i<nxy;i++) {
-  data[i] *= b;
-  if(err2) err2[i] *= b2;
-}
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] *= b;
-nHist *= b;
-
-if(hprojx) *hprojx *= b;
-if(hprojy) *hprojy *= b;
-if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) *= b;
-if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) *= b;
-if(NBandX()>0) for(i=0; i<NBandX();i++) *HBandX(i) *= b;
-if(NBandY()>0) for(i=0; i<NBandY();i++) *HBandY(i) *= b;
-
-return *this;
-}
-
-//++
-Histo2D& Histo2D::operator /= (double b)
-//
-//--
-{
-int i,j;
-if (b==0.) THROW(inconsistentErr);
-double b2 = b*b;
-for(i=0;i<nxy;i++) {
-  data[i] /= b;
-  if(err2) err2[i] /= b2;
-}
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] /= b;
-nHist /= b;
-
-if(hprojx) *hprojx /= b;
-if(hprojy) *hprojy /= b;
-if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) /= b;
-if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) /= b;
-if(NBandX()>0) for(i=0; i<NBandX();i++) *HBandX(i) /= b;
-if(NBandY()>0) for(i=0; i<NBandY();i++) *HBandY(i) /= b;
-
-return *this;
-}
-
-//++
-Histo2D& Histo2D::operator += (double b)
-//
-//--
-{
-int i,j;
-float min,max;
-for(i=0;i<nxy;i++) data[i] += b;
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] += b;
-nHist += nxy*b;
-
-if(hprojx) *hprojx += b*ny;
-if(hprojy) *hprojy += b*nx;
-if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) += b*ny/NSliX();
-if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) += b*nx/NSliY();
-if(NBandX()>0) for(i=0; i<NBandX();i++) {
-  GetBandX(i,min,max);
-  *HBandX(i) += b*(max-min)/(ymax-ymin)*ny;
-}
-if(NBandY()>0) for(i=0; i<NBandY();i++) {
-  GetBandY(i,min,max);
-  *HBandY(i) += b*(max-min)/(xmax-xmin)*nx;
-}
-
-return *this;
-}
-
-//++
-Histo2D& Histo2D::operator -= (double b)
-//
-//--
-{
-int i,j;
-float min,max;
-for(i=0;i<nxy;i++) data[i] -= b;
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] -= b;
-nHist -= nxy*b;
-
-if(hprojx) *hprojx -= b*ny;
-if(hprojy) *hprojy -= b*nx;
-if(NSliX()>0) for(i=0; i<NSliX();i++) *HSliX(i) -= b*ny/NSliX();
-if(NSliY()>0) for(i=0; i<NSliY();i++) *HSliY(i) -= b*nx/NSliY();
-if(NBandX()>0) for(i=0; i<NBandX();i++) {
-  GetBandX(i,min,max);
-  *HBandX(i) -= b*(max-min)/(ymax-ymin)*ny;
-}
-if(NBandY()>0) for(i=0; i<NBandY();i++) {
-  GetBandY(i,min,max);
-  *HBandY(i) -= b*(max-min)/(xmax-xmin)*nx;
-}
-
-return *this;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-Histo2D operator * (const Histo2D& a, double b)
-//
-//--
-{
-  Histo2D result(a);
-  return (result *= b);
-}
-
-//++
-Histo2D operator * (double b, const Histo2D& a)
-//
-//--
-{
-  Histo2D result(a);
-  return (result *= b);
-}
-
-//++
-Histo2D operator / (const Histo2D& a, double b)
-//
-//--
-{
-  Histo2D result(a);
-  return (result /= b);
-}
-
-//++
-Histo2D operator + (const Histo2D& a, double b)
-//
-//--
-{
-  Histo2D result(a);
-  return (result += b);
-}
-
-//++
-Histo2D operator + (double b, const Histo2D& a)
-//
-//--
-{
-  Histo2D result(a);
-  return (result += b);
-}
-
-//++
-Histo2D operator - (const Histo2D& a, double b)
-//
-//--
-{
-  Histo2D result(a);
-  return (result -= b);
-}
-
-//++
-Histo2D operator - (double b, const Histo2D& a)
-//
-//--
-{
-  Histo2D result(a);
-  result *= -1.;
-  return (result += b);
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-Histo2D& Histo2D::operator += (const Histo2D& a)
-//
-//--
-{
-int i,j;
-if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
-for(i=0;i<nxy;i++) {
-  data[i] += a.data[i];
-  if(err2 && a.err2) err2[i] += a.err2[i];
-}
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] += a.over[i][j];
-nHist += a.nHist;
-nEntries += a.nEntries;
-
-if(hprojx && a.hprojx) *hprojx += *(a.hprojx);
-if(hprojy && a.hprojy) *hprojy += *(a.hprojy);
-ZeroSliX();  ZeroSliY();
-ZeroBandX(); ZeroBandY();
-
-return *this;
-}
-
-//++
-Histo2D& Histo2D::operator -= (const Histo2D& a)
-//
-//--
-{
-int i,j;
-if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
-for(i=0;i<nxy;i++) {
-  data[i] -= a.data[i];
-  if(err2 && a.err2) err2[i] += a.err2[i];
-}
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] += a.over[i][j];
-nHist -= a.nHist;
-nEntries += a.nEntries;
-
-if(hprojx && a.hprojx) *hprojx -= *(a.hprojx);
-if(hprojy && a.hprojy) *hprojy -= *(a.hprojy);
-ZeroSliX();  ZeroSliY();
-ZeroBandX(); ZeroBandY();
-
-return *this;
-}
-
-//++
-Histo2D& Histo2D::operator *= (const Histo2D& a)
-//
-//--
-{
-int i,j;
-if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
-nHist = 0.;
-for(i=0;i<nxy;i++) {
-  if(err2 && a.err2)
-      err2[i] = a.data[i]*a.data[i]*err2[i] + data[i]*data[i]*a.err2[i];
-  data[i] *= a.data[i];
-  nHist += data[i];
-}
-for(i=0;i<3;i++) for(j=0;j<3;j++) over[i][j] *= a.over[i][j];
-nEntries += a.nEntries;
-
-if(hprojx && a.hprojx) *hprojx *= *(a.hprojx);
-if(hprojy && a.hprojy) *hprojy *= *(a.hprojy);
-ZeroSliX();  ZeroSliY();
-ZeroBandX(); ZeroBandY();
-
-return *this;
-}
-
-//++
-Histo2D& Histo2D::operator /= (const Histo2D& a)
-//
-//--
-{
-int i,j;
-if(nx!=a.nx || ny!=a.ny) THROW(sizeMismatchErr);
-nHist = 0.;
-for(i=0;i<nxy;i++) {
-  if(a.data[i]==0.) {
-    data[i]=0.;
-    if(err2) err2[i]=0.;
-    continue;
-  }
-  if(err2 && a.err2)
-      err2[i] = (err2[i] + data[i]/a.data[i]*data[i]/a.data[i]*a.err2[i])
-                /(a.data[i]*a.data[i]);
-  data[i] /= a.data[i];
-  nHist += data[i];
-}
-for(i=0;i<3;i++) for(j=0;j<3;j++) 
-  if(a.over[i][j]!=0.) over[i][j] *= a.over[i][j]; else over[i][j] = 0.;
-nEntries += a.nEntries;
-
-if(hprojx && a.hprojx) *hprojx /= *(a.hprojx);
-if(hprojy && a.hprojy) *hprojy /= *(a.hprojy);
-ZeroSliX();  ZeroSliY();
-ZeroBandX(); ZeroBandY();
-
-return *this;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-Histo2D operator + (const Histo2D& a, const Histo2D& b)
-//
-//--
-{
-if (b.NBinX()!=a.NBinX() || b.NBinY()!=a.NBinY()) THROW(sizeMismatchErr);
-Histo2D c(a);
-return (c += b);
-}
-
-//++
-Histo2D operator - (const Histo2D& a, const Histo2D& b)
-//
-//--
-{
-if (b.NBinX()!=a.NBinX() || b.NBinY()!=a.NBinY()) THROW(sizeMismatchErr);
-Histo2D c(a);
-return (c -= b);
-}
-
-//++
-Histo2D operator * (const Histo2D& a, const Histo2D& b)
-//
-//--
-{
-if (b.NBinX()!=a.NBinX() || b.NBinY()!=a.NBinY()) THROW(sizeMismatchErr);
-Histo2D c(a);
-return (c *= b);
-}
-
-//++
-Histo2D operator / (const Histo2D& a, const Histo2D& b)
-//
-//--
-{
-if (b.NBinX()!=a.NBinX() || b.NBinY()!=a.NBinY()) THROW(sizeMismatchErr);
-Histo2D c(a);
-return (c /= b);
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::GetXCoor(Vector &v)
-//
-//	Remplissage d'un tableau avec les valeurs des abscisses.
-//--
-{
-float x,y;
-v.Realloc(nx);
-for(int i=0;i<nx;i++) {BinLowEdge(i,0,x,y); v(i) = x;}
-return;
-}
-
-//++
-void Histo2D::GetYCoor(Vector &v)
-//
-//	Remplissage d'un tableau avec les valeurs des ordonnees.
-//--
-{
-float x,y;
-v.Realloc(ny);
-for(int i=0;i<ny;i++) {BinLowEdge(0,i,x,y); v(i) = y;}
-return;
-}
-
-//++
-//| Remarque sur les indices:
-//|  H(i,j)   -> i  = coord x (0<i<nx),     j  = coord y (0<j<ny)
-//|  v(ii,jj) -> ii = ligne (0<i<NRows()),  jj = colonne (0<i<NCol())
-//|  On fait une correspondance directe i<->ii et j<->jj
-//|  ce qui, en representation classique des histos2D et des matrices
-//|  entraine une inversion x<->y cad une symetrie / diagonale principale
-//|  H(0,...)  represente ^         mais v(0,...) represente
-//|                       |x.......               |xxxxxxxx|
-//|                       |x.......               |........|
-//|                       |x.......               |........|
-//|                       |x.......               |........|
-//|                       |x.......               |........|
-//|                       --------->
-//|                       colonne no 1            ligne no 1
-//--
-
-//++
-void Histo2D::GetValue(Matrix &v)
-//
-//	Remplissage d'un tableau avec les valeurs du contenu.
-//--
-{
-v.Realloc(nx,ny);
-for(int i=0;i<nx;i++)
-  for(int j=0;j<ny;j++) v(i,j) = (*this)(i,j);
-return;
-}
-
-//++
-void Histo2D::GetError2(Matrix &v)
-//
-//	Remplissage d'un tableau avec les valeurs du carre des erreurs.
-//--
-{
-int i,j;
-v.Realloc(nx,ny);
-if(!err2)
-  {for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = 0.; return;}
-for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = Error2(i,j);
-return;
-}
-
-//++
-void Histo2D::GetError(Matrix &v)
-//
-//	Remplissage d'un tableau avec les valeurs des erreurs.
-//--
-{
-int i,j;
-v.Realloc(nx,ny);
-if(!err2)
-  {for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = 0.; return;}
-for(i=0;i<nx;i++) for(j=0;j<ny;j++) v(i,j) = Error(i,j);
-return;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::PutValue(Matrix &v, int ierr)
-//
-//	Remplissage du contenu de l'histo avec les valeurs d'un tableau.
-//--
-{
-int i,j;
-if(v.NRows()!=nx || v.NCol()!=ny) THROW(sizeMismatchErr);
-for(i=0;i<nx;i++) for(j=0;j<ny;j++) {
-  (*this)(i,j) = v(i,j);
-  if(err2 && ierr) Error2(i,j) = fabs(v(i,j));
-}
-return;
-}
-
-//++
-void Histo2D::PutValueAdd(Matrix &v, int ierr)
-//
-//	Addition du contenu de l'histo avec les valeurs d'un tableau.
-//--
-{
-int i,j;
-if(v.NRows()!=nx || v.NCol()!=ny) THROW(sizeMismatchErr);
-for(i=0;i<nx;i++) for(j=0;j<ny;j++) {
-  (*this)(i,j) += v(i,j);
-  if(err2 && ierr) Error2(i,j) += fabs(v(i,j));
-}
-return;
-}
-
-//++
-void Histo2D::PutError2(Matrix &v)
-//
-//	Remplissage des erreurs au carre de l'histo
-//	avec les valeurs d'un tableau.
-//--
-{
-int i,j;
-if(v.NRows()!=nx || v.NCol()!=ny) THROW(sizeMismatchErr);
-if(!err2) Errors();
-for(i=0;i<nx;i++) for(j=0;j<ny;j++) Error2(i,j) = v(i,j);
-return;
-}
-
-//++
-void Histo2D::PutError2Add(Matrix &v)
-//
-//	Addition des erreurs au carre de l'histo
-//	avec les valeurs d'un tableau.
-//--
-{
-int i,j;
-if(v.NRows()!=nx || v.NCol()!=ny) THROW(sizeMismatchErr);
-if(!err2) Errors();
-for(i=0;i<nx;i++) for(j=0;j<ny;j++)
-          if(v(i,j)>0.) Error2(i,j) += v(i,j);
-return;
-}
-
-//++
-void Histo2D::PutError(Matrix &v)
-//
-//	Remplissage des erreurs de l'histo avec les valeurs d'un tableau.
-//--
-{
-int i,j;
-if(v.NRows()!=nx || v.NCol()!=ny) THROW(sizeMismatchErr);
-if(!err2) Errors();
-for(i=0;i<nx;i++) for(j=0;j<ny;j++)
-  if(v(i,j)>0.) Error2(i,j)=v(i,j)*v(i,j); else Error2(i,j)= -v(i,j)*v(i,j);
-return;
-}
-
-///////////////////////////////////////////////////////////////////
-/********* Methode *********/
-//++
-void Histo2D::Add(float x, float y, float w)
-//
-//	Addition du contenu de l'histo pour x,y poids w.
-//--
-{
-list<bande_slice>::iterator it;
-int i,j;
-FindBin(x,y,i,j);
-
-if( hprojx != NULL ) hprojx->Add(x,w);
-if( hprojy != NULL ) hprojy->Add(y,w);
-
-if(lbandx.size()>0)
-  for( it = lbandx.begin(); it != lbandx.end(); it++)
-    if( (*it).min <= y && y < (*it).max ) (*it).H->Add(x,w);
-
-if(lbandy.size()>0)
-  for( it = lbandy.begin(); it != lbandy.end(); it++)
-    if( (*it).min <= x && x < (*it).max ) (*it).H->Add(y,w);
-
-if(lslix.size()>0)
-  for( it = lslix.begin(); it != lslix.end(); it++)
-    if( (*it).min <= y && y < (*it).max ) (*it).H->Add(x,w);
-
-if(lsliy.size()>0)
-  for( it = lsliy.begin(); it != lsliy.end(); it++)
-    if( (*it).min <= x && x < (*it).max ) (*it).H->Add(y,w);
-
-if( i<0 || i>=nx || j<0 || j>=ny ) {
-  if(i<0) i=0; else if(i>=nx) i=2; else i=1;
-  if(j<0) j=0; else if(j>=ny) j=2; else j=1;
-  over[i][j] += w;
-  over[1][1] += w;
-  return;
-}
-
-data[j*nx+i] += w;
-if(err2!=NULL) err2[j*nx+i] += w*w;
-nHist += w;
-nEntries++;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::IJMax(int& imax,int& jmax,int il,int ih,int jl,int jh)
-//
-//	Recherche du bin du maximum dans le pave [il,ih][jl,jh].
-//--
-{
-if( il > ih ) { il = 0; ih = nx-1; }
-if( jl > jh ) { jl = 0; jh = ny-1; }
-if( il < 0 ) il = 0;
-if( jl < 0 ) jl = 0;
-if( ih >= nx ) ih = nx-1;
-if( jh >= ny ) jh = ny-1;
-
-imax = jmax = 0;
-if(nxy==1) return;
-
-float mx=(*this)(il,jl);
-for (int i=il; i<=ih; i++)
-   for (int j=jl; j<=jh; j++)
-      if ((*this)(i,j)>mx) {imax = i; jmax = j; mx=(*this)(i,j);}
-}
-
-//++
-void Histo2D::IJMin(int& imax,int& jmax,int il,int ih,int jl,int jh)
-//
-//	Recherche du bin du minimum dans le pave [il,ih][jl,jh].
-//--
-{
-if( il > ih ) { il = 0; ih = nx-1; }
-if( jl > jh ) { jl = 0; jh = ny-1; }
-if( il < 0 ) il = 0;
-if( jl < 0 ) jl = 0;
-if( ih >= nx ) ih = nx-1;
-if( jh >= ny ) jh = ny-1;
-
-imax = jmax = 0;
-if(nxy==1) return;
-
-float mx=(*this)(il,jl);
-for (int i=il; i<=ih; i++)
-   for (int j=jl; j<=jh; j++)
-      if ((*this)(i,j)<mx) {imax = i; jmax = j; mx=(*this)(i,j);}
-}
-
-
-//++
-float Histo2D::VMax(int il,int ih,int jl,int jh) const
-//
-//	Recherche du maximum dans le pave [il,ih][jl,jh].
-//--
-{
-if( il > ih ) { il = 0; ih = nx-1; }
-if( jl > jh ) { jl = 0; jh = ny-1; }
-if( il < 0 ) il = 0;
-if( jl < 0 ) jl = 0;
-if( ih >= nx ) ih = nx-1;
-if( jh >= ny ) jh = ny-1;
-
-float mx=(*this)(il,jl);
-if(nxy==1) return mx;
-for (int i=il; i<=ih; i++)
-   for (int j=jl; j<=jh; j++)
-      if ((*this)(i,j)>mx) mx=(*this)(i,j);
-return mx;
-}
-
-//++
-float Histo2D::VMin(int il,int ih,int jl,int jh) const
-//
-//	Recherche du minimum dans le pave [il,ih][jl,jh].
-//--
-{
-if( il > ih ) { il = 0; ih = nx-1; }
-if( jl > jh ) { jl = 0; jh = ny-1; }
-if( il < 0 ) il = 0;
-if( jl < 0 ) jl = 0;
-if( ih >= nx ) ih = nx-1;
-if( jh >= ny ) jh = ny-1;
-
-float mx=(*this)(il,jl);
-if(nxy==1) return mx;
-for (int i=il; i<=ih; i++)
-   for (int j=jl; j<=jh; j++)
-      if ((*this)(i,j)<mx) mx=(*this)(i,j);
-return mx;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-float Histo2D::NOver(int i,int j) const
-//
-//	Renvoie les under.overflow dans les 8 quadrants.
-//|  over[3][3]:        20 | 21 | 22
-//|                        |    |
-//|                    --------------
-//|                        |    |
-//|                     10 | 11 | 12        11 = all overflow+underflow
-//|                        |    |
-//|                    --------------
-//|                        |    |
-//|                     00 | 01 | 02
-//--
-{
-if( i < 0 || i>=3 || j < 0 || j>=3 ) return over[1][1];
-return over[i][j];
-}
-
-
-///////////////////////////////////////////////////////////////////
-//++
-int Histo2D::BinNonNul() const
-//
-//	Retourne le nombre de bins non-nuls.
-//--
-{
-int non=0;
-for (int i=0;i<nxy;i++) if( data[i] != 0. ) non++;
-return non;
-}
-
-//++
-int Histo2D::ErrNonNul() const
-//
-//	Retourne le nombre de bins avec erreurs non-nulles.
-//--
-{
-if(err2==NULL) return -1;
-int non=0;
-for (int i=0;i<nxy;i++) if( err2[i] != 0. ) non++;
-return non;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-int Histo2D::EstimeMax(float& xm,float& ym,int SzPav
-                      ,int il,int ih,int jl,int jh)
-//
-//	Idem EstimeMax(int...) mais retourne x,y.
-//--
-{
-int im,jm;
-IJMax(im,jm,il,ih,jl,jh);
-return EstimeMax(im,jm,xm,ym,SzPav);
-}
-
-//++
-int Histo2D::EstimeMax(int im,int jm,float& xm,float& ym,int SzPav)
-//
-//	Determine les abscisses et ordonnees du maximum donne par im,jm
-//	en moyennant dans un pave SzPav x SzPav autour du maximum.
-//|  Return:
-//|    0 = si fit maximum reussi avec SzPav pixels
-//|    1 = si fit maximum reussi avec moins que SzPav pixels
-//|                                dans au moins 1 direction
-//|    2 = si fit maximum echoue et renvoit BinCenter()
-//|   -1 = si echec: SzPav <= 0 ou im,jm hors limites
-//--
-{
-xm = ym = 0;
-if( SzPav <= 0 ) return -1;
-if( im < 0 || im >= nx ) return -1;
-if( jm < 0 || jm >= ny ) return -1;
-
-if( SzPav%2 == 0 ) SzPav++;
-SzPav = (SzPav-1)/2;
-
-int rc = 0;
-double dxm = 0, dym = 0, wx = 0;
-for(int i=im-SzPav;i<=im+SzPav;i++) {
-  if( i<0 || i>= nx ) {rc=1; continue;}
-  for(int j=jm-SzPav;j<=jm+SzPav;j++) {
-    if( j<0 || j>= ny ) {rc=1; continue;}
-    float x,y;
-    BinCenter(i,j,x,y);
-    dxm += x * (*this)(i,j);
-    dym += y * (*this)(i,j);
-    wx  += (*this)(i,j);
-  }
-}
-
-if( wx > 0. ) {
-  xm = dxm/wx;
-  ym = dym/wx;
-  return rc;
-} else {
-  BinCenter(im,jm,xm,ym);
-  return 2;
-}
-
-}
-
-//++
-int Histo2D::FindMax(int& im,int& jm,int SzPav,float Dz
-                    ,int il,int ih,int jl,int jh)
-//
-//	Pour trouver le maximum de l'histogramme en tenant compte
-//	des fluctuations.
-//| Methode:
-//| 1-/ On recherche le bin maximum MAX de l'histogramme
-//| 2-/ On considere que tous les pixels compris entre [MAX-Dz,MAX]
-//|     peuvent etre des pixels maxima.
-//| 3-/ On identifie le bin maximum en choissisant le pixel du 2-/
-//|     tel que la somme des pixels dans un pave SzPav x SzPav soit maximale.
-//| INPUT:
-//|  SzPav = taille du pave pour departager
-//|  Dz    = tolerance pour identifier tous les pixels "maximum"
-//| OUTPUT:
-//|  im,jm = pixel maximum trouve
-//| RETURN:
-//|   <0 =  Echec
-//|   >0 =  nombre de pixels possibles pour le maximum
-//--
-{
-if( il > ih ) { il = 0; ih = nx-1; }
-if( jl > jh ) { jl = 0; jh = ny-1; }
-if( il < 0 ) il = 0;
-if( jl < 0 ) jl = 0;
-if( ih >= nx ) ih = nx-1;
-if( jh >= ny ) jh = ny-1;
-if( SzPav < 0 ) SzPav = 0;
-  else { if( SzPav%2 == 0 ) SzPav++; SzPav = (SzPav-1)/2;}
-if( Dz < 0 ) Dz = 0.;
-float max = VMax(il,ih,jl,jh) - Dz;
-int nmax = 0;
-float sumx = -MAXFLOAT;
-for(int i=il;i<=ih;i++) for(int j=jl;j<=jh;j++) {
-  if( (*this)(i,j) < max) continue;
-  nmax++;
-  float sum = 0.;
-  for(int ii=i-SzPav;ii<=i+SzPav;ii++) {
-    if( ii<0 || ii >= nx ) continue;
-    for(int jj=j-SzPav;jj<=j+SzPav;jj++) {
-      if( jj<0 || jj >= ny ) continue;
-      sum += (*this)(ii,jj);
-    }
-  }
-  if( sum > sumx ) { im = i; jm = j; sumx = sum;}
-}
-if( nmax <= 0 ) { IJMax(im,jm,il,ih,jl,jh); return 1;}
-return nmax;
-}
-
-//////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////
-//++
-int  Histo2D::Fit(GeneralFit& gfit,unsigned short typ_err)
-//
-//	Fit de l'histogramme par ``gfit''.
-//| typ_err = 0 :
-//|    - erreur attachee au bin si elle existe
-//|    - sinon 1
-//| typ_err = 1 :
-//|    - erreur attachee au bin si elle existe
-//|    - sinon max( sqrt(abs(bin) ,1 )
-//| typ_err = 2 :
-//|    - erreur forcee a 1
-//| typ_err = 3 :
-//|    - erreur forcee a max( sqrt(abs(bin) ,1 )
-//| typ_err = 4 :
-//|    - erreur forcee a 1, nulle si bin a zero.
-//| typ_err = 5 :
-//|    - erreur forcee a max( sqrt(abs(bin) ,1 ),
-//|      nulle si bin a zero.
-//--
-{
-if(NBinX()*NBinY()<=0) return -1000;
-if(typ_err>5) typ_err=0;
-
-GeneralFitData mydata(2,NBinX()*NBinY());
-
-for(int i=0;i<NBinX();i++) for(int j=0;j<NBinY();j++) {
-  float x,y;
-  BinCenter(i,j,x,y);
-  double f = (double) (*this)(i,j);
-  double saf = sqrt(fabs(f)); if(saf<1.) saf=1.;
-  double e;
-  if(typ_err==0)      {if(HasErrors()) e=Error(i,j); else e=1.;}
-  else if(typ_err==1) {if(HasErrors()) e=Error(i,j); else e=saf;}
-  else if(typ_err==2) e=1.;
-  else if(typ_err==3) e=saf;
-  else if(typ_err==4) e=(f==0.)?0.:1.;
-  else if(typ_err==5) e=(f==0.)?0.:saf;
-  mydata.AddData2((double) x,(double) y,f,e);
-}
-
-gfit.SetData(&mydata);
-
-return gfit.Fit();
-}
-
-//++
-Histo2D Histo2D::FitResidus(GeneralFit& gfit)
-//
-//	Retourne une classe contenant les residus du fit ``gfit''.
-//--
-{
-if(NBinX()<=0 || NBinY()<=0)
-  throw(SzMismatchError("Histo2D::FitResidus: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("Histo2D::FitResidus: NULL pointer\n"));
-Vector par = gfit.GetParm();
-Histo2D h2(*this);
-for(int i=0;i<NBinX();i++) for(int j=0;j<NBinY();j++) {
-  float xc,yc;
-  BinCenter(i,j,xc,yc);
-  double x[2] = {(double)xc,(double)yc};
-  h2(i,j) -= (float) f->Value(x,par.Data());
-}
-return h2;
-}
-
-//++
-Histo2D Histo2D::FitFunction(GeneralFit& gfit)
-//
-//	Retourne une classe contenant la fonction du fit ``gfit''.
-//--
-{
-if(NBinX()<=0 || NBinY()<=0)
-  throw(SzMismatchError("Histo2D::FitFunction: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("Histo2D::FitFunction: NULL pointer\n"));
-Vector par = gfit.GetParm();
-Histo2D h2(*this);
-for(int i=0;i<NBinX();i++) for(int j=0;j<NBinY();j++) {
-  float xc,yc;
-  BinCenter(i,j,xc,yc);
-  double x[2] = {(double)xc,(double)yc};
-  h2(i,j) = (float) f->Value(x,par.Data());
-}
-return h2;
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::PrintStatus()
-//
-//	Impression des informations sur l'histogramme.
-//--
-{
-printf("~Histo::Print    nHist=%g nEntries=%d\n",nHist,nEntries);
-printf("over: [ %g %g %g // %g %g %g  // %g %g %g ]\n"
-      ,over[2][0],over[2][1],over[2][2]
-      ,over[1][0],over[1][1],over[1][2]
-      ,over[0][0],over[0][1],over[0][2]);
-printf("  nx=%d xmin=%g xmax=%g binx=%g  ",nx,xmin,xmax,wbinx);
-printf("  ny=%d ymin=%g ymax=%g biny=%g\n",ny,ymin,ymax,wbiny);
-}
-
-///////////////////////////////////////////////////////////////////
-//++
-void Histo2D::Print(float min,float max
-                   ,int il,int ih,int jl,int jh)
-//
-//	Impression de l'histogramme sur stdout entre [il,ih] et [jl,jh].
-//--
-{
-int ns = 35;
-// numero d'index:  00000000001111111111222222222233333
-//                  01234567890123456789012345678901234
-// valeur entiere:  00000000001111111111222222222233333
-//                  12345678901234567890123456789012345
-const char *s =    "+23456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-if( il > ih ) { il = 0; ih = nx-1; }
-if( jl > jh ) { jl = 0; jh = ny-1; }
-if( il < 0 ) il = 0;
-if( jl < 0 ) jl = 0;
-if( ih >= nx ) ih = nx-1;
-if( jh >= ny ) jh = ny-1;
-
-PrintStatus();
-
-if( il != 0 || ih != nx-1 || jl != 0 || jh != ny-1 ) {
-  float xl,xh,yl,yh;
-  BinLowEdge(il,jl,xl,yl);
-  BinHighEdge(ih,jh,xh,yh);
-  printf("  impression");
-  printf("  en X: %d=[%d,%d] xmin=%g xmax=%g  "
-        ,ih-il+1,il,ih,xl,xh);
-  printf("  en Y: %d=[%d,%d] ymin=%g ymax=%g\n"
-        ,jh-jl+1,jl,jh,yl,yh);
-}
-
-if(min >= max) { if(min != 0.) min = VMin(il,ih,jl,jh); else min=0.;
-                 max = VMax(il,ih,jl,jh); }
-if(min>max) return;
-if(min==max) {min -= 1.; max += 1.;}
-printf("   min=%g max=%g\n",min,max);
-
-// imprime numero de bin en colonne
-printf("\n");
-if( nx-1 >= 100 ) {
-  printf("     ");
-  for(int i=il;i<=ih;i++) printf("%1d",(int) (i%1000)/100);
-  printf("\n");
-}
-if( nx-1 >= 10 ) {
-  printf("     ");
-  for(int i=il;i<=ih;i++) printf("%1d",(int) (i%100)/10);
-  printf("\n");
-}
-printf("     ");
-for(int i=il;i<=ih;i++) printf("%1d",i%10);
-printf("\n");
-printf("     "); {for(int i=il;i<=ih;i++) printf("-"); printf("\n");}
-
-// imprime histogramme
-for(int j=jh;j>=jl;j--) {
-  printf("%3d: ",j);
-  for(int i=il;i<=ih;i++) {
-    int h;
-    if( 1<=max-min && max-min<=35 ) h = (int)( (*this)(i,j) - min ) - 1;
-      else h = (int)( ((*this)(i,j)-min)/(max-min) * ns ) - 1;
-    char c;
-    if(h<0 && (*this)(i,j)>min) c = '.';
-      else if(h<0) c = ' ';
-        else if(h>=ns) c = '*';
-          else c = s[h];
-    printf("%c",c);
-  }
-  printf("\n");
-}
-
-// imprime numero de bin en colonne
-printf("     "); {for(int i=il;i<=ih;i++) printf("-"); printf("\n");}
-if( nx-1 >= 100 ) {
-  printf("     ");
-  for(int i=il;i<=ih;i++) printf("%1d",(int) (i%1000)/100);
-  printf("\n");
-}
-if( nx-1 >= 10 ) {
-  printf("     ");
-  for(int i=il;i<=ih;i++) printf("%1d",(int) (i%100)/10);
-  printf("\n");
-}
-printf("     ");
-{for(int i=il;i<=ih;i++) printf("%1d",i%10);}
-printf("\n");
-
-}
-
-// Rappel des inline functions pour commentaires
-//++
-// inline float   XMin()
-//	Retourne l'abscisse minimum.
-//--
-//++
-// inline float   XMax()
-//	Retourne l'abscisse maximum.
-//--
-//++
-// inline float   YMin()
-//	Retourne l'ordonnee minimum.
-//--
-//++
-// inline float   YMax()
-//	Retourne l'ordonnee maximum.
-//--
-//++
-// inline int     NBinX()
-//	Retourne le nombre de bins selon X.
-//--
-//++
-// inline int     NBinY()
-//	Retourne le nombre de bins selon Y.
-//--
-//++
-// inline float   WBinX()
-//	Retourne la largeur du bin selon X.
-//--
-//++
-// inline float   WBinY()
-//	Retourne la largeur du bin selon Y.
-//--
-//++
-// inline float*  Bins() const
-//	Retourne le pointeur sur le tableaux des contenus.
-//--
-//++
-// inline float   operator()(int i,int j) const
-//	Retourne le contenu du bin i,j.
-//--
-//++
-// inline float&  operator()(int i,int j)
-//	Remplit le contenu du bin i,j.
-//--
-//++
-// inline float   Error(int i,int j)  const
-//	Retourne l'erreur du bin i,j.
-//--
-//++
-// inline double  Error2(int i,int j) const
-//	Retourne l'erreur au carre du bin i,j.
-//--
-//++
-// inline double& Error2(int i,int j)
-//	Remplit l'erreur au carre du bin i,j.
-//--
-//++
-// inline float   NData() const
-//	Retourne la somme ponderee.
-//--
-//++
-// inline int     NEntries() const
-//	Retourne le nombre d'entrees.
-//--
-//++
-// inline void BinLowEdge(int i,int j,float& x,float& y)
-//	Retourne l'abscisse et l'ordonnee du coin inferieur du bin i,j.
-//--
-//++
-// inline void BinCenter(int i,int j,float& x,float& y)
-//	Retourne l'abscisse et l'ordonnee du centre du bin i,j.
-//--
-//++
-// inline void BinHighEdge(int i,int j,float& x,float& y)
-//	Retourne l'abscisse et l'ordonnee du coin superieur du bin i,j.
-//--
-//++
-// inline void FindBin(float x,float y,int& i,int& j)
-//	Retourne les numeros du bin contenant l'abscisse et l'ordonnee x,y.
-//--
-
-///////////////////////////////////////////////////////////////////
-//++
-// Titre	Methodes pour gerer les projections
-//--
-
-//++
-void Histo2D::SetProjX()
-//
-//	Pour creer la projection X.
-//--
-{
-if( hprojx != NULL ) DelProjX();
-hprojx = new Histo(xmin,xmax,nx);
-if( err2 != NULL && hprojx != NULL ) hprojx->Errors();
-}
-
-//++
-void Histo2D::SetProjY()
-//
-//	Pour creer la projection Y.
-//--
-{
-if( hprojy != NULL ) DelProjY();
-hprojy = new Histo(ymin,ymax,ny);
-if( err2 != NULL && hprojy != NULL  ) hprojy->Errors();
-}
-
-//++
-void Histo2D::SetProj()
-//
-//	Pour creer les projections X et Y.
-//--
-{
-SetProjX();
-SetProjY();
-}
-
-//++
-void Histo2D::ShowProj()
-//
-//	Informations sur les projections.
-//--
-{
-if( hprojx != NULL ) cout << ">>>> Projection X set : "<< hprojx <<endl;
-  else cout << ">>>> NO Projection X set"<<endl;
-if( hprojy != NULL ) cout << ">>>> Projection Y set : "<< hprojy <<endl;
-  else cout << ">>>> NO Projection Y set"<<endl;
-}
-
-//++
-void Histo2D::DelProjX()
-//
-//	Destruction de l'histogramme de la projection selon X.
-//--
-{
-if( hprojx == NULL ) return;
-delete hprojx;
-hprojx = NULL;
-}
-
-//++
-void Histo2D::DelProjY()
-//
-//	Destruction de l'histogramme de la projection selon X.
-//--
-{
-if( hprojy == NULL ) return;
-delete hprojy;
-hprojy = NULL;
-}
-
-//++
-void Histo2D::DelProj()
-//
-//	Destruction des histogrammes des projections selon X et Y.
-//--
-{
-DelProjX();
-DelProjY();
-}
-
-//++
-void Histo2D::ZeroProjX()
-//
-//	Remise a zero de la projection selon X.
-//--
-{
-if( hprojx == NULL ) return;
-hprojx->Zero();
-}
-
-//++
-void Histo2D::ZeroProjY()
-//
-//	Remise a zero de la projection selon Y.
-//--
-{
-if( hprojy == NULL ) return;
-hprojy->Zero();
-}
-
-//++
-void Histo2D::ZeroProj()
-//
-//	Remise a zero des projections selon X et Y.
-//--
-{
-ZeroProjX();
-ZeroProjY();
-}
-
-// Rappel des inline functions pour commentaires
-//++
-// inline Histo*  HProjX()
-//	Retourne le pointeur sur l'histo 1D de la projection selon X.
-//--
-//++
-// inline Histo*  HProjY()
-//	Retourne le pointeur sur l'histo 1D de la projection selon Y.
-//--
-
-///////////////////////////////////////////////////////////////////
-//++
-// Titre	Methodes pour gerer les bandes
-//--
-
-//++
-int Histo2D::SetBandX(float ybmin,float ybmax)
-//
-//	Pour creer une bande en X entre ybmin et ybmax.
-//--
-{
-b_s.num = lbandx.size();
-b_s.min = ybmin;
-b_s.max = ybmax;
-b_s.H = new Histo(xmin,xmax,nx);
-lbandx.push_back(b_s);
-b_s.H = NULL;
-return lbandx.size()-1;
-}
-
-//++
-int Histo2D::SetBandY(float xbmin,float xbmax)
-//
-//	Pour creer une bande en Y entre xbmin et xbmax.
-//--
-{
-b_s.num = lbandy.size();
-b_s.min = xbmin;
-b_s.max = xbmax;
-b_s.H = new Histo(ymin,ymax,ny);
-lbandy.push_back(b_s);
-b_s.H = NULL;
-return lbandy.size()-1;
-}
-
-//++
-void Histo2D::DelBandX()
-//
-//	Destruction des histogrammes des bandes selon X.
-//--
-{
-if( lbandx.size() <= 0 ) return;
-for(list<bande_slice>::iterator i = lbandx.begin(); i != lbandx.end(); i++)
-       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
-lbandx.erase(lbandx.begin(),lbandx.end());
-}
-
-//++
-void Histo2D::DelBandY()
-//
-//	Destruction des histogrammes des bandes selon Y.
-//--
-{
-if( lbandy.size() <= 0 ) return;
-for(list<bande_slice>::iterator i = lbandy.begin(); i != lbandy.end(); i++)
-       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
-lbandy.erase(lbandy.begin(),lbandy.end());
-}
-
-//++
-void Histo2D::ZeroBandX()
-//
-//	Remise a zero des bandes selon X.
-//--
-{
-if( lbandx.size() <= 0 ) return;
-list<bande_slice>::iterator i;
-for(i = lbandx.begin(); i != lbandx.end(); i++)
-              (*i).H->Zero();
-}
-
-//++
-void Histo2D::ZeroBandY()
-//
-//	Remise a zero des bandes selon Y.
-//--
-{
-if( lbandy.size() <= 0 ) return;
-list<bande_slice>::iterator i;
-for(i = lbandy.begin(); i != lbandy.end(); i++)
-              (*i).H->Zero();
-}
-
-//++
-Histo* Histo2D::HBandX(int n) const
-//
-//	Retourne un pointeur sur la bande numero `n' selon X.
-//--
-{
-if( lbandx.size() <= 0 || n < 0 || n >= (int) lbandx.size() ) return NULL;
-for(list<bande_slice>::const_iterator i = lbandx.begin(); i != lbandx.end(); i++)
-              if( (*i).num == n ) return (*i).H;
-return NULL;
-}
-
-//++
-Histo* Histo2D::HBandY(int n) const
-//
-//	Retourne un pointeur sur la bande numero `n' selon Y.
-//--
-{
-if( lbandy.size() <= 0 || n < 0 || n >= (int) lbandy.size() ) return NULL;
-for(list<bande_slice>::const_iterator i = lbandy.begin(); i != lbandy.end(); i++)
-              if( (*i).num == n ) return (*i).H;
-return NULL;
-}
-
-//++
-void Histo2D::GetBandX(int n,float& ybmin,float& ybmax) const
-//
-//	Retourne les limites de la bande numero `n' selon X.
-//--
-{
-ybmin = 0.; ybmax = 0.;
-if( lbandx.size() <= 0 || n < 0 || n >= (int) lbandx.size() ) return;
-for(list<bande_slice>::const_iterator i = lbandx.begin(); i != lbandx.end(); i++)
-  if( (*i).num == n ) { ybmin = (*i).min; ybmax = (*i).max; return;}
-return;
-}
-
-//++
-void Histo2D::GetBandY(int n,float& xbmin,float& xbmax) const
-//
-//	Retourne les limites de la bande numero `n' selon Y.
-//--
-{
-xbmin = 0.; xbmax = 0.;
-if( lbandy.size() <= 0 || n < 0 || n >= (int) lbandy.size() ) return;
-for(list<bande_slice>::const_iterator i = lbandy.begin(); i != lbandy.end(); i++)
-  if( (*i).num == n ) { xbmin = (*i).min; xbmax = (*i).max; return;}
-return;
-}
-
-//++
-void Histo2D::ShowBand(int lp)
-//
-//	Informations sur les bandes.
-//--
-{
-  cout << ">>>> Nombre de bande X : " << lbandx.size() << endl;
-if( lp>0 && lbandx.size()>0 ) {
-  list<bande_slice>::iterator i;
-  for(i = lbandx.begin(); i != lbandx.end(); i++) {
-    cout<<"  "<<(*i).num<<" de ymin="<<(*i).min<<" a ymax="<<(*i).max;
-    if(lp>1) cout << "   H=" << (*i).H;
-    cout << endl;
-  }
-}
-
-cout << ">>>> Nombre de bande Y : " << lbandy.size() << endl;
-if( lp>0 && lbandy.size()>0 ) {
-  list<bande_slice>::iterator i;
-  for(i = lbandy.begin(); i != lbandy.end(); i++) {
-    cout<<"  "<<(*i).num<<" de xmin="<<(*i).min<<" a xmax="<<(*i).max;
-    if(lp>1) cout << "   H=" << (*i).H;
-    cout << endl;
-  }
-}
-}
-
-// Rappel des inline functions pour commentaires
-//++
-// inline int     NBandX()
-//	Retourne le nombre de bandes selon X
-//--
-//++
-// inline int     NBandY()
-//	Retourne le nombre de bandes selon Y
-//--
-
-///////////////////////////////////////////////////////////////////
-//++
-// Titre	Methodes pour gerer les bandes equidistantes
-//--
-
-//++
-int Histo2D::SetSliX(int nsli)
-//
-//	Pour creer `nsli' bandes equidistantes selon X.
-//--
-{
-if( nsli <= 0 ) return -1;
-if( nsli >  ny ) nsli = ny;
-if( lslix.size() > 0 ) DelSliX();
-float w = (ymax-ymin)/nsli;
-
-for(int i=0; i<nsli; i++ ) {
-  b_s.num = i;
-  b_s.min = ymin + i*w;
-  b_s.max = b_s.min + w;
-  b_s.H = new Histo(xmin,xmax,nx);
-  lslix.push_back(b_s);
-  b_s.H = NULL;
-}
-return (int) lslix.size();
-}
-
-//++
-int Histo2D::SetSliY(int nsli)
-//
-//	Pour creer `nsli' bandes equidistantes selon Y.
-//--
-{
-if( nsli <= 0 ) return -1;
-if( nsli >  nx ) nsli = nx;
-if( lsliy.size() > 0 ) DelSliY();
-float w = (xmax-xmin)/nsli;
-
-for(int i=0; i<nsli; i++ ) {
-  b_s.num = i;
-  b_s.min = xmin + i*w;
-  b_s.max = b_s.min + w;
-  b_s.H = new Histo(ymin,ymax,ny);
-  lsliy.push_back(b_s);
-  b_s.H = NULL;
-}
-return (int) lsliy.size();
-}
-
-//++
-void Histo2D::DelSliX()
-//
-//	Destruction des bandes equidistantes selon X.
-//--
-{
-if( lslix.size() <= 0 ) return;
-for(list<bande_slice>::iterator i = lslix.begin(); i != lslix.end(); i++)
-       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
-lslix.erase(lslix.begin(),lslix.end());
-}
-
-//++
-void Histo2D::DelSliY()
-//
-//	Destruction des bandes equidistantes selon Y.
-//--
-{
-if( lsliy.size() <= 0 ) return;
-for(list<bande_slice>::iterator i = lsliy.begin(); i != lsliy.end(); i++)
-       if( (*i).H != NULL ) {delete (*i).H; (*i).H=NULL;}
-lsliy.erase(lsliy.begin(),lsliy.end());
-}
-
-//++
-void Histo2D::ZeroSliX()
-//
-//	Remise a zero des bandes equidistantes selon X.
-//--
-{
-if( lslix.size() <= 0 ) return;
-list<bande_slice>::iterator i;
-for(i = lslix.begin(); i != lslix.end(); i++)
-              (*i).H->Zero();
-}
-
-//++
-void Histo2D::ZeroSliY()
-//
-//	Remise a zero des bandes equidistantes selon Y.
-//--
-{
-if( lsliy.size() <= 0 ) return;
-list<bande_slice>::iterator i;
-for(i = lsliy.begin(); i != lsliy.end(); i++)
-              (*i).H->Zero();
-}
-
-//++
-Histo* Histo2D::HSliX(int n) const
-//
-//	Retourne un pointeur sur la bande equidistante numero `n'
-//	selon X.
-//--
-{
-if( lslix.size() <= 0 || n < 0 || n >= (int) lslix.size() ) return NULL;
-for(list<bande_slice>::const_iterator i = lslix.begin(); i != lslix.end(); i++)
-              if( (*i).num == n ) return (*i).H;
-return NULL;
-}
-
-//++
-Histo* Histo2D::HSliY(int n) const
-//
-//	Retourne un pointeur sur la bande equidistante numero `n'
-//	selon Y.
-//--
-{
-if( lsliy.size() <= 0 || n < 0 || n >= (int) lsliy.size() ) return NULL;
-for(list<bande_slice>::const_iterator i = lsliy.begin(); i != lsliy.end(); i++)
-              if( (*i).num == n ) return (*i).H;
-return NULL;
-}
-
-//++
-void Histo2D::ShowSli(int lp)
-//
-//	Informations sur les bandes equidistantes.
-//--
-{
-list<bande_slice>::iterator i;
-cout << ">>>> Nombre de slice X : " << lslix.size() << endl;
-if( lp>0 && lslix.size() > 0 )
-  for(i = lslix.begin(); i != lslix.end(); i++) {
-    cout<<"  "<<(*i).num<<" de ymin="<<(*i).min<<" a ymax="<<(*i).max;
-    if(lp>1) cout << "   H=" << (*i).H;
-    cout << endl;
-  }
-
-cout << ">>>> Nombre de slice Y : " << lsliy.size() << endl;
-if( lp>0 && lsliy.size()>0 )
-  for(i = lsliy.begin(); i != lsliy.end(); i++) {
-    cout<<"  "<<(*i).num<<" de xmin="<<(*i).min<<" a xmax="<<(*i).max;
-    if(lp>1) cout << "   H=" << (*i).H;
-    cout << endl;
-  }
-}
-
-// Rappel des inline functions pour commentaires
-//++
-// inline int     NSliX()
-//	Retourne le nombre de slices selon X
-//--
-//++
-// inline int     NSliY()
-//	Retourne le nombre de slices selon Y
-//--
-
-
-///////////////////////////////////////////////////////////
-// --------------------------------------------------------
-//   Les objets delegues pour la gestion de persistance 
-// --------------------------------------------------------
-///////////////////////////////////////////////////////////
-
-
-void  ObjFileIO<Histo2D>::ReadSelf(PInPersist& is)
-{
-char strg[256];
-
-if(dobj==NULL) dobj=new Histo2D;
-  else         dobj->Delete();
-
-float min,max;
-int_4 errok, projx, projy, nslix, nsliy, nbanx, nbany;
-
-// Lecture entete
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-is.GetLine(strg, 255);
-
-// Lecture variables de definitions
-is.Get(dobj->nx);
-is.Get(dobj->ny);
-is.Get(dobj->nxy);
-is.Get(errok);
-is.Get(dobj->nEntries);
-is.Get(dobj->nHist);
-
-is.Get(dobj->xmin);
-is.Get(dobj->xmax);
-is.Get(dobj->ymin);
-is.Get(dobj->ymax);
-is.Get(dobj->wbinx);
-is.Get(dobj->wbiny);
-
-is.Get(&(dobj->over[0][0]),9);
-
-is.Get(projx);
-is.Get(projy);
-is.Get(nslix);
-is.Get(nsliy);
-is.Get(nbanx);
-is.Get(nbany);
-
-// Lecture histo2D
-dobj->data = new float[dobj->nxy];
-is.GetLine(strg, 255);
-{for(int j=0;j<dobj->ny;j++) is.Get(dobj->data+j*dobj->nx,dobj->nx);}
-
-// Lecture erreurs
-if(errok) {
-  is.GetLine(strg, 255);
-  dobj->err2 = new double[dobj->nxy];
-  for(int j=0;j<dobj->ny;j++) is.Get(dobj->err2+j*dobj->nx,dobj->nx);
-}
-
-// Lecture des projections
-if(projx) {
-  is.GetLine(strg, 255);
-  dobj->SetProjX();
-  ObjFileIO<Histo> fio_h(dobj->hprojx);
-  fio_h.Read(is);
-}
-if(projy) {
-  is.GetLine(strg, 255);
-  dobj->SetProjY();
-  ObjFileIO<Histo> fio_h(dobj->hprojy);
-  fio_h.Read(is);
-}
-
-// Lecture des slices
-if(nslix>0) {
-  is.GetLine(strg, 255);
-  dobj->SetSliX(nslix);
-  ASSERT (nslix==dobj->NSliX());
-  for(int j=0;j<dobj->NSliX();j++)
-    {ObjFileIO<Histo> fio_h(dobj->HSliX(j)); fio_h.Read(is);}
-}
-if(nsliy>0) {
-  is.GetLine(strg, 255);
-  dobj->SetSliY(nsliy);
-  ASSERT (nsliy==dobj->NSliY());
-  for(int j=0;j<dobj->NSliY();j++)
-    {ObjFileIO<Histo> fio_h(dobj->HSliY(j)); fio_h.Read(is);}
-}
-
-// Lecture des bandes
-if( nbanx>0 ) {
-  is.GetLine(strg, 255);
-  {for(int j=0; j<nbanx; j++) {
-    is.Get(min); is.Get(max);
-    dobj->SetBandX(min,max);
-  }}
-  ASSERT (nbanx==dobj->NBandX());
-  {for(int j=0; j<dobj->NBandX(); j++) {
-    ObjFileIO<Histo> fio_h(dobj->HBandX(j));
-    fio_h.Read(is);
-  }}
-}
-if( nbany>0 ) {
-  is.GetLine(strg, 255);
-  {for(int j=0; j<nbany; j++) {
-    is.Get(min); is.Get(max);
-    dobj->SetBandY(min,max);
-  }}
-  ASSERT (nbany==dobj->NBandY());
-  {for(int j=0; j<dobj->NBandY(); j++) {
-    ObjFileIO<Histo> fio_h(dobj->HBandY(j));
-    fio_h.Read(is);
-  }}
-}
-
-return;
-}
-
-void ObjFileIO<Histo2D>::WriteSelf(POutPersist& os) const
-{
-if (dobj == NULL)   return;
-char strg[256];
-
-// Que faut-il ecrire?
-int_4 errok = (dobj->err2) ? 1 : 0;
-int_4 projx = (dobj->hprojx) ? 1 : 0;
-int_4 projy = (dobj->hprojy) ? 1 : 0;
-int_4 nslix = dobj->NSliX();
-int_4 nsliy = dobj->NSliY();
-int_4 nbanx = dobj->NBandX();
-int_4 nbany = dobj->NBandY();
-
-// Ecriture entete pour identifier facilement
-sprintf(strg,"nx=%d  ny=%d  nxy=%d errok=%1d"
-       ,dobj->nx,dobj->ny,dobj->nxy,errok);
-os.PutLine(strg);
-sprintf(strg,"nHist=%g nEntries=%d",dobj->nHist,dobj->nEntries);
-os.PutLine(strg);
-sprintf(strg,"wbinx=%g wbiny=%g",dobj->wbinx,dobj->wbiny);
-os.PutLine(strg);
-sprintf(strg,"xmin=%g xmax=%g ymin=%g ymax=%g"
-       ,dobj->xmin,dobj->xmax,dobj->ymin,dobj->ymax);
-os.PutLine(strg);
-sprintf(strg,"projx/y=%d %d nbandx/y=%d %d nbslix/y=%d %d"
-       ,projx,projy,nbanx,nbany,nslix,nsliy);
-os.PutLine(strg);
-sprintf(strg,"over %g %g %g %g %g %g %g %g %g"
-       ,dobj->over[0][0],dobj->over[0][1],dobj->over[0][2]
-       ,dobj->over[1][0],dobj->over[1][1],dobj->over[1][2]
-       ,dobj->over[2][0],dobj->over[2][1],dobj->over[2][2]);
-os.PutLine(strg);
-
-// Ecriture variables de definitions
-os.Put(dobj->nx);
-os.Put(dobj->ny);
-os.Put(dobj->nxy);
-os.Put(errok);
-os.Put(dobj->nEntries);
-os.Put(dobj->nHist);
-
-os.Put(dobj->xmin);
-os.Put(dobj->xmax);
-os.Put(dobj->ymin);
-os.Put(dobj->ymax);
-os.Put(dobj->wbinx);
-os.Put(dobj->wbiny);
-
-os.Put(&(dobj->over[0][0]),9);
-
-os.Put(projx);
-os.Put(projy);
-os.Put(nslix);
-os.Put(nsliy);
-os.Put(nbanx);
-os.Put(nbany);
-
-// Ecriture histo2D
-sprintf(strg,"Histo2D: Tableau des donnees %d = %d * %d"
-       ,dobj->nxy,dobj->nx,dobj->ny);
-os.PutLine(strg);
-{for(int j=0;j<dobj->ny;j++) os.Put(dobj->data+j*dobj->nx,dobj->nx);}
-
-// Ecriture erreurs
-if(errok) {
-  sprintf(strg,"Histo2D: Tableau des erreurs %d = %d * %d"
-         ,dobj->nxy,dobj->nx,dobj->ny);
-  os.PutLine(strg);
-  for(int j=0;j<dobj->ny;j++) os.Put(dobj->err2+j*dobj->nx,dobj->nx);
-}
-
-// Ecriture des projections
-if(projx) {
-  sprintf(strg,"Histo2D: Projection X");
-  os.PutLine(strg);
-  ObjFileIO<Histo> fio_h(dobj->hprojx); fio_h.Write(os);
-}
-if(projy) {
-  sprintf(strg,"Histo2D: Projection Y");
-  os.PutLine(strg);
-  ObjFileIO<Histo> fio_h(dobj->hprojy); fio_h.Write(os);
-}
-
-// Ecriture des slices
-if(nslix>0) {
-  sprintf(strg,"Histo2D: Slices X %d",nslix);
-  os.PutLine(strg);
-  for(int j=0;j<nslix;j++) {
-    Histo* h = dobj->HSliX(j);
-    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
-  }
-}
-if(nsliy>0) {
-  sprintf(strg,"Histo2D: Slices Y %d",nsliy);
-  os.PutLine(strg);
-  for(int j=0;j<nsliy;j++) {
-    Histo* h = dobj->HSliY(j);
-    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
-  }
-}
-
-// Ecriture des bandes
-if( nbanx>0 ) {
-  sprintf(strg,"Histo2D: Bandes X %d",nbanx);
-  os.PutLine(strg);
-  list<Histo2D::bande_slice>::const_iterator it;
-  for(it = dobj->lbandx.begin(); it != dobj->lbandx.end(); it++) {
-    float min = (*it).min; float max = (*it).max;
-    os.Put(min); os.Put(max);
-  }
-  for(it = dobj->lbandx.begin(); it != dobj->lbandx.end(); it++) {
-    Histo* h = (*it).H;
-    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
-  }
-}
-if( nbany>0 ) {
-  sprintf(strg,"Histo2D: Bandes Y %d",nbany);
-  os.PutLine(strg);
-  list<Histo2D::bande_slice>::const_iterator it;
-  for(it = dobj->lbandy.begin(); it != dobj->lbandy.end(); it++) {
-    float min = (*it).min; float max = (*it).max;
-    os.Put(min); os.Put(max);
-  }
-  for(it = dobj->lbandy.begin(); it != dobj->lbandy.end(); it++) {
-    Histo* h = (*it).H;
-    ObjFileIO<Histo> fio_h(h); fio_h.Write(os);
-  }
-}
-
-return;
-}
-
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template ObjFileIO<Histo2D>
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class ObjFileIO<Histo2D>;
-#endif
Index: trunk/SophyaLib/NTools/histos2.h
===================================================================
--- trunk/SophyaLib/NTools/histos2.h	(revision 753)
+++ 	(revision )
@@ -1,229 +1,0 @@
-//
-// histogrammes 2D     cmv 2/8/96
-//
-
-#ifndef HISTOS2_SEEN
-#define HISTOS2_SEEN
-
-#include "machdefs.h"
-#include <string>
-
-#include <list>
-#if defined(__KCC__)
-#include <list.h>
-#endif
-
-#include "peida.h"
-#include "utils.h"
-#include "histos.h"
-
-namespace SOPHYA {
-
-class GeneralFit;
-
-class Histo2D : public AnyDataObj {
-  friend class ObjFileIO<Histo2D>;
-public:
-
-  // CREATOR / DESTRUCTOR
-  Histo2D(float xMin, float xMax, int nxBin
-         ,float yMin, float yMax, int nyBin);
-  Histo2D(const Histo2D& h);
-  Histo2D();
-  virtual  ~Histo2D();
-
-  // OPTIONS
-  void   Errors();  
-  
-  // UPDATING
-  void   Zero();
-  void   Add(float x, float y, float w = 1.);
-
-  // Operators
-  Histo2D& operator = (const Histo2D& h);
-  Histo2D& operator *= (double b);
-  Histo2D& operator /= (double b);
-  Histo2D& operator += (double b);
-  Histo2D& operator -= (double b);
-  friend Histo2D operator * (const Histo2D& a, double b);
-  friend Histo2D operator * (double b, const Histo2D& a);
-  friend Histo2D operator / (const Histo2D& a, double b);
-  friend Histo2D operator + (const Histo2D& a, double b);
-  friend Histo2D operator + (double b, const Histo2D& a);
-  friend Histo2D operator - (const Histo2D& a, double b);
-  friend Histo2D operator - (double b, const Histo2D& a);
-  Histo2D& operator += (const Histo2D& a);
-  Histo2D& operator -= (const Histo2D& a);
-  Histo2D& operator *= (const Histo2D& a);
-  Histo2D& operator /= (const Histo2D& a);
-  friend Histo2D operator + (const Histo2D& a, const Histo2D& b);
-  friend Histo2D operator - (const Histo2D& a, const Histo2D& b);
-  friend Histo2D operator * (const Histo2D& a, const Histo2D& b);
-  friend Histo2D operator / (const Histo2D& a, const Histo2D& b);
-
-  // get/put dans/depuis une matrice / vector
-  void GetXCoor(Vector& v);
-  void GetValue(Matrix &v);
-  void GetYCoor(Vector& v);
-  void GetError2(Matrix& v);
-  void GetError(Matrix& v);
-  void PutValue(Matrix& v, int ierr=0);
-  void PutValueAdd(Matrix& v, int ierr=0);
-  void PutError2(Matrix& v);
-  void PutError2Add(Matrix& v);
-  void PutError(Matrix& v);
-
-  // INLINES
-  inline float   XMin() const {return xmin;}
-  inline float   XMax() const {return xmax;}
-  inline float   YMin() const {return ymin;}
-  inline float   YMax() const {return ymax;}
-  inline int_4   NBinX() const {return nx;}
-  inline int_4   NBinY() const {return ny;}
-  inline float   WBinX() const {return wbinx;}
-  inline float   WBinY() const {return wbiny;}
-  inline float*  Bins() const  {return data;}
-  inline float   operator()(int i,int j) const {return data[j*nx+i];}
-  inline float&  operator()(int i,int j)       {return data[j*nx+i];}
-  inline bool    HasErrors() { if(err2) return true; else return false;}
-  inline float   Error(int i,int j)  const
-                   {if(err2)
-                      {if(err2[j*nx+i]>0.) return sqrt(err2[j*nx+i]); else return 0.;}
-                    else return 0.;}
-  inline double  Error2(int i,int j) const
-                   {if(err2) return err2[j*nx+i]; else return 0.;}
-  inline double& Error2(int i,int j) {return err2[j*nx+i];}
-  inline float   NData() const    {return (float) nHist;}
-  inline int_4   NEntries() const {return nEntries;}
-  inline void BinLowEdge(int i,int j,float& x,float& y)
-                 {x = xmin + i*wbinx; y = ymin + j*wbiny;}
-  inline void BinCenter(int i,int j,float& x,float& y)
-                 {x = xmin + (i+0.5)*wbinx; y = ymin + (j+0.5)*wbiny;}
-  inline void BinHighEdge(int i,int j,float& x,float& y)
-                 {x = xmin + (i+1)*wbinx; y = ymin + (j+1)*wbiny;}
-  inline void FindBin(float x,float y,int& i,int& j)
-    { i = (int) floorf((x - xmin)/wbinx); j = (int) floorf((y - ymin)/wbiny);}
-
-  // Info, statistique et calculs sur les histogrammes
-  float   NOver(int i=-1,int j=-1) const;
-  int     BinNonNul() const;
-  int     ErrNonNul() const;
-  void    IJMax(int& imax,int& jmax,int il=1,int ih= -1,int jl=1,int jh= -1);
-  void    IJMin(int& imax,int& jmax,int il=1,int ih= -1,int jl=1,int jh= -1);
-  float   VMax(int il=1,int ih= -1,int jl=1,int jh= -1) const;
-  float   VMin(int il=1,int ih= -1,int jl=1,int jh= -1) const;
-  int     EstimeMax(float& xm,float& ym,int SzPav = 3
-                   ,int il=1,int ih= -1,int jl=1,int jh= -1);
-  int     EstimeMax(int im,int jm,float& xm,float& ym,int SzPav = 3);
-  int     FindMax(int& im,int& jm,int SzPav = 3,float Dz = 0.
-                 ,int il=1,int ih= -1,int jl=1,int jh= -1);
-
-  // Fit
-  int      Fit(GeneralFit& gfit,unsigned short typ_err=0);
-  Histo2D  FitResidus(GeneralFit& gfit);
-  Histo2D  FitFunction(GeneralFit& gfit);
-
-  // Print et Display ASCII
-  void    PrintStatus();
-  void    Print(float min=1.,float max=-1.
-               ,int il=1,int ih= -1,int jl=1,int jh= -1);
-
-  // PROJECTIONS
-  void           SetProjX();
-  void           SetProjY();
-  void           SetProj();
-  void           DelProjX();
-  void           DelProjY();
-  void           DelProj();
-  void           ZeroProjX();
-  void           ZeroProjY();
-  void           ZeroProj();
-  inline Histo*  HProjX() const {return hprojx;}
-  inline Histo*  HProjY() const {return hprojy;}
-  void           ShowProj();
-
-  // BANDES
-  inline int     NBandX() const {return lbandx.size();}
-  inline int     NBandY() const {return lbandy.size();}
-  int            SetBandX(float ybmin,float ybmax);
-  int            SetBandY(float xbmin,float xbmax);
-  void           DelBandX();
-  void           DelBandY();
-  void           ZeroBandX();
-  void           ZeroBandY();
-  Histo*         HBandX(int n) const;
-  Histo*         HBandY(int n) const;
-  void           GetBandX(int n,float& ybmin,float& ybmax) const;
-  void           GetBandY(int n,float& xbmin,float& xbmax) const;
-  void           ShowBand(int lp = 0);
-
-  // SLICES
-  inline int     NSliX() const {return lslix.size();}
-  inline int     NSliY() const {return lsliy.size();}
-  int            SetSliX(int nsli);
-  int            SetSliY(int nsli);
-  void           DelSliX();
-  void           DelSliY();
-  void           ZeroSliX();
-  void           ZeroSliY();
-  Histo*         HSliX(int n) const;
-  Histo*         HSliY(int n) const;
-  void           ShowSli(int lp = 0);
-
-#ifndef __DECCXX
-protected:
-#endif
-  struct bande_slice {
-    int num;
-    float min, max;
-    Histo* H;
-    STRUCTCOMP(bande_slice)
-  };
-#ifdef __DECCXX
-protected:
-#endif
-
-  void Delete();
-
-  float*         data;
-  double*        err2;
-
-  float          over[3][3];
-  double         nHist;
-  int_4          nEntries;
-
-  int_4          nx,ny,nxy;
-  float          xmin;
-  float          xmax;
-  float          ymin;
-  float          ymax;
-  float          wbinx;
-  float          wbiny;
-
-  bande_slice    b_s;
-
-  Histo*         hprojx;
-  Histo*         hprojy;
-
-  list<bande_slice>  lbandx;
-  list<bande_slice>  lbandy;
-  
-  list<bande_slice>  lslix;
-  list<bande_slice>  lsliy;
-
-};
-
-/////////////////////////////////////////////////////////////////////////
-// Classe pour la gestion de persistance
-
-inline POutPersist& operator << (POutPersist& os, Histo2D & obj)
-{ ObjFileIO<Histo2D> fio(&obj);  fio.Write(os);  return(os); }
-inline PInPersist& operator >> (PInPersist& is, Histo2D & obj)
-{ ObjFileIO<Histo2D> fio(&obj);  fio.Read(is);  return(is); }
-
-// Classe pour la gestion de persistance
-// ObjFileIO<Histo2D>
-
-} // Fin du namespace
-
-#endif // HISTOS2_SEEN
Index: trunk/SophyaLib/NTools/matrix.cc
===================================================================
--- trunk/SophyaLib/NTools/matrix.cc	(revision 753)
+++ 	(revision )
@@ -1,1028 +1,0 @@
-// $Id: matrix.cc,v 1.6 1999-10-25 10:36:09 ansari Exp $
-
-#include "machdefs.h"
-#include <string.h>
-#include <iostream.h>
-#include <iomanip.h>
-#include <values.h>
-#include "peida.h"
-#include "matrix.h"
-#include "cvector.h"
-#include "generalfit.h"
-#include "tmatrix.h"
-
-// Sous Linux, LN_MAXDOUBLE LN_MINDOUBLE ne semblent pas etre definies
-//   Reza 11/02/99
-#ifndef M_LN2
-#define M_LN2 0.69314718055994530942
-#endif
-#ifndef LN_MINDOUBLE
-#define LN_MINDOUBLE  (M_LN2 * (DMINEXP - 1))
-#endif
-#ifndef LN_MAXDOUBLE
-#define LN_MAXDOUBLE  (M_LN2 * DMAXEXP)
-#endif
-
-
-//++
-// Class	OMatrix
-// Lib	Outils++
-// include	matrix.h
-//
-//	Classe générale de matrice, calculs matriciels et algèbre linéaire.
-//--
-
-//++
-// Titre	Constructeurs
-//--
-
-//++
-OMatrix::OMatrix()
-//
-//	Construit une matrice 1x1 (pour ppersist).
-//--
-: nr(1), nc(1), ndata(1), nalloc(1), data(new double[1]), FromTmatrix(false)
-{
-  // if (r<=0 || c<=0) THROW(rangeCheckErr);
-  memset(data, 0, nalloc*sizeof(double));
-  END_CONSTRUCTOR
-}
-
-//++
-OMatrix::OMatrix(int r, int c)
-//
-//	Construit une matrice de r lignes et c colonnes.
-//--
-: nr(r), nc(c), ndata(r*c), nalloc(r*c), data(new double[r*c]), FromTmatrix(false)
-{
-  // if (r<=0 || c<=0) THROW(rangeCheckErr);
-  memset(data, 0, nalloc*sizeof(double));
-  END_CONSTRUCTOR
-}
-
-//++
-OMatrix::OMatrix(int r, int c, double* values)
-//
-//	Construit une matrice de r lignes et c colonnes. On fournit
-//	le tableau des valeurs : pas d'allocation.
-//--
-: nr(r), nc(c), ndata(r*c), nalloc(0), data(values), FromTmatrix(false)
-{
-  END_CONSTRUCTOR
-}
-
-//++
-OMatrix::OMatrix(const OMatrix& a)
-//
-//	Constructeur par copie.
-//--
-: nr(a.nr), nc(a.nc), ndata(a.nr*a.nc), nalloc(a.nr*a.nc),
-  data(new double[a.nr*a.nc]), FromTmatrix(false)
-{
-  memcpy(data, a.data, nalloc * sizeof(double));
-  END_CONSTRUCTOR
-}
-
-//++
-OMatrix::OMatrix(const TMatrix<r_8>& a)
-//
-//	Constructeur par copie a partir d'une TMatrix<r_8>.
-//	Attention, les donnees sont partagees.
-//--
-: nr(a.NRows()), nc(a.NCols()), ndata(a.NRows()*a.NCols())
-, nalloc(a.NRows()*a.NCols())
-, data(const_cast<r_8 *>(a.Data()))
-, FromTmatrix(true)
-{
-  END_CONSTRUCTOR
-}
-
-
-OMatrix::~OMatrix()
-{
-  DBASSERT(ndata == nr*nc);
-  if (nalloc && !FromTmatrix) delete[] data;
-}
-
-//++
-// Titre	Méthodes
-//--
-
-
-//++
-void OMatrix::Zero()
-//
-//	Remise à zero de tous les éléments
-//--
-{
-  DBASSERT(ndata == nr*nc);
-  for (int i=0; i<ndata; i++) data[i] = 0;
-}
-
-//++
-void OMatrix::Realloc(int r, int c, bool force)
-//
-//	Change la taille de la matrice. Réallocation physique seulement si
-//	pas assez de place, ou forcée si force=true.
-//--
-{
-  DBASSERT(ndata == nr*nc);
-  if (!nalloc) THROW(allocationErr);
-  int ncop = ndata;                      // ancien elements
-  ndata = r*c;
-  if (ndata < ncop) ncop = ndata;
-  nr = r;
-  nc = c;
-  if (nalloc < ndata || force) {
-    double* p = new double[ndata];
-    memcpy(p,data,ncop * sizeof(double));
-    delete[] data;
-    data = p;
-    nalloc = ndata;
-  } else if (nalloc != ndata)                 // Sans doute facultatif, mais plus
-    memset(data+ndata, 0, (nalloc-ndata)*sizeof(double));  //propre
-}
-
-//++
-OMatrix& OMatrix::operator = (const OMatrix& a)
-//
-//	Opérateur d'affectation.
-//--
-{
-  if (this == &a) return *this;
-  Realloc(a.nr, a.nc);
-  memcpy(data, a.data, ndata * sizeof(double));
-  return *this;
-}
-
-
-//++
-OMatrix& OMatrix::operator = (double x)
-//
-//	Opérateur d'affectation depuis scalaire : identité * scalaire.
-//--
-{
-  if (nr != nc) THROW(sizeMismatchErr);
-  for (int r=0; r<nr; r++)
-    for (int c=0; c<nc; c++)
-      (*this)(r,c) = (r==c) ? x : 0.0;
-  return *this;
-}
-
-//++
-// r_8& [const]         operator()(int r, int c) [const]
-//	Accès aux éléments
-//--
-
-//++
-ostream& operator << (ostream& s, const OMatrix& a)
-//
-//	Impression
-//--
-{
-  for (int r=0; r<a.nr; r++) {
-    s << "| ";
-    for (int c=0; c<a.nc; c++)
-      s << setw(6) << a(r,c) << " ";
-    s << "|\n";
-    }
-  return s;
-}
-
-// ****************** MATRIX / SCALAR ******************************
-
-
-//++
-OMatrix& OMatrix::operator *= (double b)
-//
-//--
-{
-  double* p    = data;
-  double* pEnd = data + ndata;
-
-  while (p < pEnd)
-    *p++ *= b;
-
-  return *this;
-}
-
-//++
-OMatrix& OMatrix::operator += (double b)
-//
-//--
-{
-  double* p    = data;
-  double* pEnd = data + ndata;
-
-  while (p < pEnd)
-    *p++ += b;
-
-  return *this;
-}
-
-//++
-OMatrix& OMatrix::operator -= (double b)
-//
-//--
-{
-  double* p    = data;
-  double* pEnd = data + ndata;
-
-  while (p < pEnd)
-    *p++ -= b;
-
-  return *this;
-}
-
-//++
-OMatrix& OMatrix::operator /= (double b)
-//
-//--
-{
-  ASSERT( b != 0. );
-  double* p    = data;
-  double* pEnd = data + ndata;
-
-  while (p < pEnd)
-    *p++ /= b;
-
-  return *this;
-}
-
-//++
-OMatrix operator * (const OMatrix& a, double b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result *= b);
-}
-
-//++
-OMatrix operator * (double b, const OMatrix& a)
-//
-//--
-{
-  OMatrix result(a);
-  return (result *= b);
-}
-
-//++
-OMatrix operator + (const OMatrix& a, double b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result += b);
-}
-
-//++
-OMatrix operator + (double b, const OMatrix& a)
-//
-//--
-{
-  OMatrix result(a);
-  return (result += b);
-}
-
-//++
-OMatrix operator - (const OMatrix& a, double b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result -= b);
-}
-
-//++
-OMatrix operator - (double b, const OMatrix& a)
-//
-//--
-{
-  OMatrix result(a);
-  result *= -1;
-  return (result += b);
-}
-
-//++
-OMatrix operator / (const OMatrix& a, double b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result /= b);
-}
-
-//++
-OMatrix operator * (const OMatrix& a, int b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result *= b);
-}
-
-//++
-OMatrix operator * (int b, const OMatrix& a)
-//
-//--
-{
-  OMatrix result(a);
-  return (result *= b);
-}
-
-//++
-OMatrix operator + (const OMatrix& a, int b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result += b);
-}
-
-//++
-OMatrix operator + (int b, const OMatrix& a)
-//
-//--
-{
-  OMatrix result(a);
-  return (result += b);
-}
-
-//++
-OMatrix operator - (const OMatrix& a, int b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result -= b);
-}
-
-//++
-OMatrix operator - (int b, const OMatrix& a)
-//
-//--
-{
-  OMatrix result(a);
-  result *= -1;
-  return (result += b);
-}
-
-//++
-OMatrix operator / (const OMatrix& a, int b)
-//
-//--
-{
-  OMatrix result(a);
-  return (result /= b);
-}
-
-
-// **************** MATRIX / MATRIX ***********************88
-
-//++
-OMatrix& OMatrix::operator += (const OMatrix& a)
-//
-//--
-{
-  if (nc!=a.nc || nr!=a.nr) THROW(sizeMismatchErr);
-
-  double* p    = data;
-  double* pEnd = data + ndata;
-  double* q    = a.data;
-
-  while (p < pEnd)
-    *p++ += *q++;
-
-  return *this;
-}
-
-//++
-OMatrix& OMatrix::operator -= (const OMatrix& a)
-//
-//--
-{
-  if (nc!=a.nc || nr!=a.nr) THROW(sizeMismatchErr);
-
-  double* p    = data;
-  double* pEnd = data + ndata;
-  double* q    = a.data;
-
-  while (p < pEnd)
-    *p++ -= *q++;
-
-  return *this;
-}
-
-
-//++
-OMatrix& OMatrix::operator *= (const OMatrix& a)
-//
-//--
-{
-  if (nc != a.nc || nr != a.nr || nc != nr) THROW(sizeMismatchErr);
-
-  double* oldRow = new double[nr];
-  double* orEnd = oldRow + nc;
-  double* orp;
-  double* trp;
-
-  for (double* tr = data; tr < data+ndata; tr += nc) {
-    for (orp = oldRow, trp = tr;
-         orp < orEnd;)
-      *orp++ = *trp++;
-
-    double* ac;
-    double* acp;
-
-    for (trp = tr, ac = a.data; ac< a.data+nr; ac++, trp++) {
-      double sum = 0;
-      for (orp = oldRow, acp = ac; acp < ac+ndata; acp += nr, orp++)
-        sum += *orp * *acp;
-      *trp = sum;
-    }
-  }
-  delete[] oldRow;
-  return *this;
-}
-
-//++
-OMatrix operator + (const OMatrix& a, const OMatrix& b)
-//
-//--
-{
-  if (b.nc != a.nc || b.nr != a.nr) THROW(sizeMismatchErr);
-
-  OMatrix c(a);
-  return (c += b);
-}
-
-//++
-OMatrix operator - (const OMatrix& a, const OMatrix& b)
-//
-//--
-{
-  if (b.nc != a.nc || b.nr != a.nr) THROW(sizeMismatchErr);
-
-  OMatrix c(a);
-  return (c -= b);
-}
-
-#if 0
-
-OMatrix operator * (const OMatrix& a, const OMatrix& b)
-{
-  if (a.nc != b.nr) THROW(sizeMismatchErr);
-
-  OMatrix c(a.nr, b.nc);
-
-  double* pc = c.data;
-
-  double* pa = a.data;
-
-  double* pb = b.data;
-
-  for (int rc = 0; rc < c.nr; rc++) {
-    for (int cc = 0; cc < c.nc; cc++) {      // boucle sur c
-      double sum = 0;
-      for (int ca = 0; ca < a.nc; ca++) {     // boucle sur a & b
-        sum += *pa * *pb;
-        pa++;
-        pb += b.nc;
-      }
-      *pc++ = sum;
-      pa -= a.nc;                           // retour meme ligne
-      pb -= b.ndata - 1;                    // haut de la colonne suiv
-    }
-                                            // ligne suivante c
-    pb = b.data;                            // en revient en b(1,1)
-    pa += a.nc;                             // debut ligne suivante
-  }
-
-  return c;
-}
-#endif
-
-//++
-OMatrix operator * (const OMatrix& a, const OMatrix& b)
-//
-//--
-{
-  if (a.nc != b.nr) THROW(sizeMismatchErr);
-
-  OMatrix c(a.nr, b.nc);
-
-  for (int rc = 0; rc < c.nr; rc++)
-    for (int cc = 0; cc < c.nc; cc++) {      // boucle sur c
-      double sum = 0;
-      for (int ca = 0; ca < a.nc; ca++)     // boucle sur a & b
-        sum += a(rc,ca) * b(ca,cc);
-      c(rc,cc) = sum;
-    }
-
-  return c;
-
-}
-
-
-//++
-OMatrix OMatrix::Transpose() const
-//
-//	Retourne la transposée.
-//--
-#if HAS_NAMED_RETURN
-return a(nc,nr)
-#endif
-{
-#if !HAS_NAMED_RETURN
-OMatrix a(nc,nr);
-#endif
-  for (int i=0; i<nr; i++)
-    for (int j=0; j<nc; j++)
-      a(j,i) = (*this)(i,j);
-#if !HAS_NAMED_RETURN
-return a;
-#endif
-}
-
-
-//++
-OMatrix OMatrix::Inverse() const
-//
-//	Retourne la matrice inverse.
-//
-//	*Exception* : singMatxErr si la matrice est singulière.
-//--
-#if HAS_NAMED_RETURN
-return b(nr,nc)
-#endif
-{
-#if !HAS_NAMED_RETURN
-OMatrix b(nc,nr);
-#endif
-  OMatrix a(*this);
-  b = 1.0;
-  if (fabs(OMatrix::GausPiv(a,b)) < 1.e-50) THROW(singMatxErr);
-#if !HAS_NAMED_RETURN
-return b;
-#endif
-}
-
-
-void OMatrix::WriteSelf(POutPersist& s) const
-{
-  ASSERT(ndata == nr*nc);
-  s << nr << nc;
-  s.PutR8s(data, ndata);
-}
-
-void OMatrix::ReadSelf(PInPersist& s)
-{
-  int_4 r,c;
-  s >> r >> c;
-  Realloc(r,c);
-  ASSERT(ndata == nr*nc);
-  s.GetR8s(data, ndata);
-}
-
-
-OMatrixRC::OMatrixRC()
-: matrix(0), data(0), index(0), step(0)
-{}
-
-OMatrixRC::OMatrixRC(OMatrix& m, RCKind rckind, int ind)
-: matrix(&m), data(Org(m,rckind,ind)),
-  index(ind), step(Step(m,rckind)), kind(rckind)
-{
-  if (kind == matrixDiag & m.nc != m.nr) THROW(sizeMismatchErr);
-}
-
-
-int OMatrixRC::Next()
-{
-  if (!matrix) return -1;             // Failure ?
-  if (kind == matrixDiag) return -1;  // Failure ?
-  index++;
-  if (kind == matrixRow) {
-    if (index > matrix->nr) {
-      index = matrix->nr;
-      return -1;
-    }
-    data += matrix->nc;
-  } else {
-    if (index > matrix->nc) {
-      index = matrix->nc;
-      return -1;
-    }
-    data++;
-  }
-  return index;
-}
-
-
-int OMatrixRC::Prev()
-{
-  if (!matrix) return -1;             // Failure ?
-  if (kind == matrixDiag) return -1;  // Failure ?
-  index--;
-  if (index < 0) {
-    index = 0;
-    return -1;
-  }
-  if (kind == matrixRow)
-    data -= matrix->nc;
-  else
-    data--;
-  return index;
-}
-
-
-int OMatrixRC::SetCol(int c)
-{
-  if (!matrix) return -1;             // Failure ?
-  if (c<0 || c>matrix->nc) return -1;
-  kind = matrixCol;
-  index = c;
-  step = Step(*matrix, matrixCol);
-  data = Org(*matrix, matrixCol, c);
-  return c;
-}
-
-
-int OMatrixRC::SetRow(int r)
-{
-  if (!matrix) return -1;             // Failure ?
-  if (r<0 || r>matrix->nr) return -1;
-  kind = matrixRow;
-  index = r;
-  step = Step(*matrix, matrixRow);
-  data = Org(*matrix, matrixRow, r);
-  return r;
-}
-
-
-int OMatrixRC::SetDiag()
-{
-  if (!matrix) return -1;             // Failure ?
-  if (matrix->nc != matrix->nr) THROW(sizeMismatchErr);
-  kind = matrixDiag;
-  index = 0;
-  step = Step(*matrix, matrixDiag);
-  data = Org(*matrix, matrixDiag);
-  return 0;
-}
-
-
-OMatrixRC& OMatrixRC::operator = (const OMatrixRC& rc)
-{
-  matrix = rc.matrix;
-  data   = rc.data;
-  index  = rc.index;
-  step   = rc.step;
-  kind   = rc.kind;
-  return *this;
-}
-
-//OMatrixRC::operator OVector() const
-OVector OMatrixRC::GetVect() const
-#if HAS_NAMED_RETURN
-return v(NElts())
-#endif
-{
-#if !HAS_NAMED_RETURN
-  OVector v(NElts());
-#endif
-  int n = NElts();
-  for (int i=0; i<n; i++)
-    v(i) = (*this)(i);
-#if !HAS_NAMED_RETURN
-  return v;
-#endif
-}
-
-
-OMatrixRC& OMatrixRC::operator += (const OMatrixRC& rc)
-{
-  int n = NElts();
-  if ( n != rc.NElts() ) THROW(sizeMismatchErr);
-  if ( kind != rc.kind ) THROW(sizeMismatchErr);
-
-  for (int i=0; i<n; i++)
-    (*this)(i) += rc(i);
-
-  return *this;
-}
-
-
-
-OMatrixRC& OMatrixRC::operator -= (const OMatrixRC& rc)
-{
-  int n = NElts();
-  if ( n != rc.NElts() ) THROW(sizeMismatchErr);
-  if ( kind != rc.kind ) THROW(sizeMismatchErr);
-
-  for (int i=0; i<n; i++)
-    (*this)(i) -= rc(i);
-
-  return *this;
-}
-
-
-OMatrixRC& OMatrixRC::operator *= (double x)
-{
-  int n = NElts();
-
-  for (int i=0; i<n; i++)
-    (*this)(i) *= x;
-
-  return *this;
-}
-
-
-OMatrixRC& OMatrixRC::operator /= (double x)
-{
-  int n = NElts();
-
-  for (int i=0; i<n; i++)
-    (*this)(i) /= x;
-
-  return *this;
-}
-
-
-OMatrixRC& OMatrixRC::operator -= (double x)
-{
-  int n = NElts();
-
-  for (int i=0; i<n; i++)
-    (*this)(i) -= x;
-
-  return *this;
-}
-
-
-OMatrixRC& OMatrixRC::operator += (double x)
-{
-  int n = NElts();
-
-  for (int i=0; i<n; i++)
-    (*this)(i) += x;
-
-  return *this;
-
-}
-
-
-double operator * (const OMatrixRC& a, const OMatrixRC& b)
-{
-  int n = a.NElts();
-  if ( n != b.NElts() ) THROW(sizeMismatchErr);
-  if ( a.kind != b.kind ) THROW(sizeMismatchErr);
-  double sum = 0;
-  for (int i=0; i<n; i++)
-    sum += a(i)*b(i);
-  return sum;
-}
-
-
-OMatrixRC& OMatrixRC::LinComb(double a, double b, const OMatrixRC& rc, int first)
-{
-  int n = NElts();
-  if ( n != rc.NElts() ) THROW(sizeMismatchErr);
-  if ( kind != rc.kind ) THROW(sizeMismatchErr);
-
-  for (int i=first; i<n; i++)
-    (*this)(i) = (*this)(i)*a + rc(i)*b;
-
-  return *this;
-}
-
-
-OMatrixRC& OMatrixRC::LinComb(double b, const OMatrixRC& rc, int first)
-{
-  int n = NElts();
-  if ( n != rc.NElts() ) THROW(sizeMismatchErr);
-  if ( kind != rc.kind ) THROW(sizeMismatchErr);
-
-  for (int i=first; i<n; i++)
-    (*this)(i) += rc(i)*b;
-
-  return *this;
-}
-
-
-
-OMatrixRC OMatrix::Row(int r) const
-#if HAS_NAMED_RETURN
-return rc((OMatrix&)*this, matrixRow, r)
-#endif
-{
-#if !HAS_NAMED_RETURN
-        OMatrixRC rc((OMatrix&)*this, matrixRow, r);
-        return rc;
-#endif
-}
-
-
-OMatrixRC OMatrix::Col(int c) const
-#if HAS_NAMED_RETURN
-return rc((OMatrix&)*this, matrixCol, c)
-#endif
-{
-#if !HAS_NAMED_RETURN
-        OMatrixRC rc((OMatrix&)*this, matrixCol, c);
-        return rc;
-#endif
-}
-
-
-OMatrixRC OMatrix::Diag() const
-#if HAS_NAMED_RETURN
-return rc((OMatrix&)*this, matrixDiag)
-#endif
-{
-#if !HAS_NAMED_RETURN
-        OMatrixRC rc((OMatrix&)*this, matrixDiag);
-        return rc;
-#endif
-}
-
-
-int OMatrixRC::IMaxAbs(int first)
-{
-  int n=NElts();
-  if (first>n) THROW(rangeCheckErr);
-  int imax=first;
-  double vmax = fabs((*this)(first));
-  double v;
-  for (int i=first+1; i<n; i++)
-    if ((v=fabs((*this)(i))) > vmax) {
-      vmax = v;
-      imax = i;
-    }
-  return imax;
-}
-
-
-void OMatrixRC::Swap(OMatrixRC& rc1, OMatrixRC& rc2)
-{
-  int n=rc1.NElts();
-  if (n != rc2.NElts()) THROW(sizeMismatchErr);
-  if (rc1.kind != rc2.kind) THROW(sizeMismatchErr);
-  if (rc1.data == rc2.data) return; // C'est le meme
-  for (int i=0; i<n; i++)
-    {double tmp = rc1(i); rc1(i) = rc2(i); rc2(i) = tmp;}
-}
-
-
-
-double OMatrix::GausPiv(OMatrix& a, OMatrix& b)
-{
-  int n = a.NRows();
-  if ( n != b.NRows()) THROW(sizeMismatchErr);
-
-  // On fait une normalisation un peu brutale...
-  double vmin=MAXDOUBLE;
-  double vmax=0;
-  for (int iii=0; iii<a.NRows(); iii++)
-    for (int jjj=0; jjj<a.NCol(); jjj++) {
-      if (fabs(a(iii,jjj)) > vmax) vmax = fabs(a(iii,jjj));
-      if (fabs(a(iii,jjj)) < vmin && fabs(a(iii,jjj))>0) vmin = fabs(a(iii,jjj));
-    }
-  double nrm = sqrt(vmin*vmax);
-  if (nrm > 1.e5 || nrm < 1.e-5) {
-    a /= nrm;
-    b /= nrm;
-    //cout << "normalisation matrice " << nrm << endl;
-  } else 
-    nrm=1;
-
-  double det = 1.0;
-  if (nrm != 1) {
-    double ld = a.NRows() * log(nrm);
-    if (ld <= LN_MINDOUBLE || ld >= LN_MAXDOUBLE) {
-     // cerr << "OMatrix warning, overflow for det" << endl;
-    } else {
-      det = exp(ld);
-    }
-  }
-
-  OMatrixRC pivRowa(a,matrixRow);
-  OMatrixRC pivRowb(b,matrixRow);
-
-  for (int k=0; k<n-1; k++) {
-    int iPiv = a.Col(k).IMaxAbs(k);
-    if (iPiv != k) {
-      OMatrixRC aIPiv(a.Row(iPiv));
-      OMatrixRC aK(a.Row(k));
-      OMatrixRC::Swap(aIPiv,aK);
-      OMatrixRC bIPiv(b.Row(iPiv));
-      OMatrixRC bK(b.Row(k));
-      OMatrixRC::Swap(bIPiv,bK);
-    }
-    double pivot = a(k,k);
-    if (fabs(pivot) < 1.e-50) return 0.0;
-    //det *= pivot;
-    pivRowa.SetRow(k); // to avoid constructors
-    pivRowb.SetRow(k);
-    for (int i=k+1; i<n; i++) {
-      double r = -a(i,k)/pivot;
-      a.Row(i).LinComb(r, pivRowa); // + rapide que -= r * pivRowa
-      b.Row(i).LinComb(r, pivRowb);
-    }
-  }
-  det *= a(n-1, n-1);
-
-  // on remonte
-
-  for (int kk=n-1; kk>0; kk--) {
-    double pivot = a(kk,kk);
-    if (fabs(pivot) <= 1.e-50) return 0.0;
-    pivRowa.SetRow(kk); // to avoid constructors
-    pivRowb.SetRow(kk);
-    for (int jj=0; jj<kk; jj++) {
-      double r = -a(jj,kk)/pivot;
-      a.Row(jj).LinComb(r, pivRowa);
-      b.Row(jj).LinComb(r, pivRowb);
-    }
-  }
-
- 
-  for (int l=0; l<n; l++) {
-    if (fabs(a(l,l)) <= 1.e-50) return 0.0;
-    b.Row(l) /= a(l,l);
-  }
-
-  return det;
-}
-
-//++
-double OMatrix::Norm1()
-//
-//	Norme 1 : somme des valeurs absolues.
-//--
-{
-  double s = 0;
-  for (int k = 0; k < nr*nc; k++)
-    s += fabs(data[k]);
-  return s;
-}
-
-//++
-double OMatrix::Norm2()
-//
-//	Norme 2, euclidienne.
-//--
-{
-  double s = 0;
-  for (int k = 0; k < nr*nc; k++)
-    s += data[k] * data[k];
-  return sqrt(s);
-}
-
-//////////////////////////////////////////////////////////
-//++
-OMatrix OMatrix::FitResidus(GeneralFit& gfit
-               ,double xorg,double yorg,double dx,double dy)
-//
-//	Retourne une classe contenant les residus du fit ``gfit''.
-//	Les coordonnees de l'element (i,j) sont :
-//	(i,j) -> x = xorg + j*dx , y = yorg + i*dy
-//--
-{
-if(NCol()<=0||NRows()<=0)
-  throw(SzMismatchError("OMatrix::FitResidus: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("OMatrix::FitResidus: NULL pointer\n"));
-OVector par = gfit.GetParm();
-OMatrix m(*this);
-for(int i=0;i<NRows();i++) for(int j=0;j<NCol();j++) {
-  double x[2] = {xorg+j*dx,yorg+i*dy};
-  m(i,j) -= f->Value(x,par.Data());
-}
-return m;
-}
-
-//++
-OMatrix OMatrix::FitFunction(GeneralFit& gfit
-               ,double xorg,double yorg,double dx,double dy)
-//
-//	Retourne une classe contenant la fonction du fit ``gfit''.
-//	Les coordonnees de l'element (i,j) sont :
-//	(i,j) -> x = xorg + j*dx , y = yorg + i*dy
-//--
-{
-if(NCol()<=0||NRows()<=0)
-  throw(SzMismatchError("OMatrix::FitFunction: size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("OMatrix::FitFunction: NULL pointer\n"));
-OVector par = gfit.GetParm();
-OMatrix m(*this);
-for(int i=0;i<NRows();i++) for(int j=0;j<NCol();j++) {
-  double x[2] = {xorg+j*dx,yorg+i*dy};
-  m(i,j) = f->Value(x,par.Data());
-}
-return m;
-}
Index: trunk/SophyaLib/NTools/matrix.h
===================================================================
--- trunk/SophyaLib/NTools/matrix.h	(revision 753)
+++ 	(revision )
@@ -1,302 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// Eric Aubourg, Septembre 94
-#ifndef MATRIX_SEEN
-#define MATRIX_SEEN
-
-#define RGCHECK
-
-#include <stdio.h>
-#include <iostream.h>
-#include "peida.h"
-#include "anydataobj.h"
-#include "ppersist.h"
-
-namespace SOPHYA {
-  class GeneralFit;
-  template <class T> class TMatrix;
-}
-// <summary> Operations matricielles </summary>
-// Operations matricielles, algebre lineaire...
-class OMatrix : public PPersist, public AnyDataObj {
-  friend class OVector;
-  friend class OMatrixRC;
-  friend class TMatrix<r_8>;
-public:
-  OMatrix();
-  // Constructeur, matrice a zero
-  OMatrix(int r, int c);
-  // Constructeur avec des valeurs. Pas d'allocation, juste pointe.
-  OMatrix(int r, int c, double* values);
-  // Constructeur par copie
-  OMatrix(const OMatrix& a);
-  // Constructeur par copie a partir d'une TMatrix<r_8>
-  OMatrix(const TMatrix<r_8>& a);
-  // Destructeur
-  virtual ~OMatrix();
-
-  // Construction automatique pour PPF
-  // <group>
-  enum {classId = ClassId_Matrix};
-  int_4                 ClassId() const         { return classId; }
-  static PPersist*      Create() {return new OMatrix(1,1);}
-  // </group>
-
-  // Remise a zero de tous les elements
-  void Zero();
-  // Change la taille de la matrice. Reallocation physique seulement si
-  // pas assez de place, ou forcee si force=true
-  void Realloc(int r, int c, bool force=false);
-
-  // Operateur d'affectation
-  OMatrix& operator = (const OMatrix& a);
-  // Affectation depuis scalaire : identite * scalaire
-  OMatrix& operator = (double x);
-
-  // Impression
-  friend ostream& operator << (ostream& s, const OMatrix& a);
-
-  // Acces aux elements
-  // <group>
-  r_8&          operator()(int r, int c);
-  r_8 const&    operator()(int r, int c) const;
-  // </group>
-
-  // Acces au tableau des elements
-  // <group>
-  inline r_8* Data() {return data;}
-  inline const r_8* Data() const {return data;}
-  // </group>
-  // Norme 1 : somme des valeurs absolues
-  double  Norm1();
-  // Norme 2, euclidienne
-  double  Norm2();
-  
-  // Operations matricielles avec scalaire, allocation d'une nouvelle matrice
-  // <group>
-  friend OMatrix operator * (const OMatrix& a, double b);
-  friend OMatrix operator * (double b, const OMatrix& a);
-  friend OMatrix operator + (const OMatrix& a, double b);
-  friend OMatrix operator + (double b, const OMatrix& a);
-  friend OMatrix operator - (const OMatrix& a, double b);
-  friend OMatrix operator - (double b, const OMatrix& a);
-  friend OMatrix operator / (const OMatrix& a, double b);
-  // </group>
-
-  // Operations matricielles avec scalaires entiers, pour eviter l'appel
-  // du constructeur de vecteur a partir d'un entier...
-  // sinon v*2 = v * OVector(2), BUG !
-  // <group>
-  friend OMatrix operator * (const OMatrix& a, int b);
-  friend OMatrix operator * (int b, const OMatrix& a);
-  friend OMatrix operator + (const OMatrix& a, int b);
-  friend OMatrix operator + (int b, const OMatrix& a);
-  friend OMatrix operator - (const OMatrix& a, int b);
-  friend OMatrix operator - (int b, const OMatrix& a);
-  friend OMatrix operator / (const OMatrix& a, int b);
-  // </group>
-
-  // Operations matricielles "en place", avec scalaire
-  // <group>
-  OMatrix& operator *= (double b);
-  OMatrix& operator += (double b);
-  OMatrix& operator -= (double b);
-  OMatrix& operator /= (double b);
-  // </group>
-
-  // Operations matricielles
-  // <group>
-  friend OMatrix operator * (const OMatrix& a, const OMatrix& b);
-  friend OMatrix operator + (const OMatrix& a, const OMatrix& b);
-  friend OMatrix operator - (const OMatrix& a, const OMatrix& b);
-
-  OMatrix& operator *= (const OMatrix& a);
-  OMatrix& operator += (const OMatrix& b);
-  OMatrix& operator -= (const OMatrix& b);
-  // </group>
-
-  // Matrice transposee
-  OMatrix Transpose() const;
-  // Matrice inverse
-  // <thrown> singMatxErr </thrown>
-  OMatrix Inverse() const;
-
-  // Nombre de lignes
-  inline int NRows() const {return nr;}
-  // Nombre de colonnes
-  inline int NCol()  const {return nc;}
-
-  // Entrees-sorties PPF
-  // <group>
-  void ReadSelf(PInPersist&);
-  void WriteSelf(POutPersist&) const;
-  // </group>
-
-  // Acces aux rangees et colonnes
-  // <group>
-  OMatrixRC Row(int r) const;
-  OMatrixRC Col(int c) const;
-  OMatrixRC Diag() const;
-  // </group>
-  /* Versions const ? Alors il faut constructeur const pour OMatrixRC,    */
-  /* mais OMatrixRC contient un OMatrix* qui detruit const....             */
-  /* mais en eux-meme, ils ne modifient pas la matrice. Ils permettent   */
-  /* de le faire...                                                      */
-
-  // Pivot de Gauss : diagonalise la matrice A, en effectuant les memes
-  // operations sur la matrice B
-  static double GausPiv(OMatrix& A, OMatrix& B);
-
-  // Residus et fonction fittees.
-  OMatrix FitResidus(GeneralFit& gfit
-            ,double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
-  OMatrix FitFunction(GeneralFit& gfit
-            ,double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
-
-protected:
-  int_4 nr;
-  int_4 nc;
-  int ndata;
-  int nalloc;
-  r_8* data;
-  bool FromTmatrix;
-};
-
-
-inline r_8& OMatrix::operator()(int r, int c)
-{
-#ifdef RGCHECK
-  if (r<0 || r>=nr || c<0 || c>=nc) THROW(rangeCheckErr);
-#endif
-  return(data[r*nc + c]);
-}
-
-
-inline r_8 const& OMatrix::operator()(int r, int c) const
-{
-#ifdef RGCHECK
-  if (r<0 || r>=nr || c<0 || c>=nc) THROW(rangeCheckErr);
-#endif
-  return(data[r*nc + c]);
-}
-
-enum RCKind {matrixRow=0, matrixCol=1, matrixDiag=2};
-
-
-// <summary> Acces aux lignes et colonnes des matrices </summary>
-// Permet d'acceder a une ligne ou colonne d'une matrice, en place, comme
-// avec un vecteur.
-class OMatrixRC EXC_AWARE {
-friend class OVector;
-friend class OMatrix;
-public:
-  OMatrixRC();
-
-  virtual ~OMatrixRC() {}
-
-  int Next();
-  int Prev();
-  int SetCol(int c);
-  int SetRow(int r);
-  int SetDiag();
-
-  static int Step(const OMatrix& m, RCKind rckind);
-  static double* Org(const OMatrix&, RCKind rckind, int ind=0);
-
-  int NElts() const;
-  r_8& operator()(int i);
-  r_8  operator()(int i) const;
-
-  OMatrixRC& operator = (const OMatrixRC& rc);
-  //operator OVector() const;
-  OVector GetVect() const;
-
-  OMatrixRC& operator += (const OMatrixRC& rc);
-  OMatrixRC& operator -= (const OMatrixRC& rc);
-
-  OMatrixRC& operator *= (double x);
-  OMatrixRC& operator /= (double x);
-  OMatrixRC& operator -= (double x);
-  OMatrixRC& operator += (double x);
-
-  friend double operator * (const OMatrixRC& a, const OMatrixRC& b);
-
-  OMatrixRC& LinComb(double a, double b, const OMatrixRC& rc, int first=0);
-  OMatrixRC& LinComb(double b, const OMatrixRC& rc, int first=0);
-
-  int IMaxAbs(int first=0);
-
-  static void Swap(OMatrixRC& rc1, OMatrixRC& rc2);
-  // comme c'est symetrique, soit c'est static OMatrixRC, soit static OMatrix,
-  // soit OMatrix avec verification qu'on parle bien de la meme...
-
-protected:
-  OMatrixRC(OMatrix& m, RCKind kind, int index=0);
-  OMatrix* matrix;
-  r_8*    data;
-  int     index;
-  int     step;
-  RCKind  kind;
-};
-
-
-inline int OMatrixRC::Step(const OMatrix& m, RCKind rckind)
-{
-  switch (rckind)
-    {
-    case matrixRow  :
-      return 1;
-    case matrixCol  :
-      return m.nc;
-    case matrixDiag :
-      return m.nc+1;
-    }
-  return -1;
-}
-
-
-inline double* OMatrixRC::Org(const OMatrix& m, RCKind rckind, int index)
-{
-  switch (rckind)
-    {
-    case matrixRow :
-      return m.data + index * m.nc;
-    case matrixCol :
-      return m.data + index;
-    case matrixDiag :
-      return m.data;
-    }
-  return (double*) -1;
-}
-
-
-inline int OMatrixRC::NElts() const
-{
-  if (!matrix) return -1;             // Failure ?
-  switch (kind)
-    {
-    case matrixRow :
-      return matrix->nc;
-    case matrixCol :
-      return matrix->nr;
-    case matrixDiag :
-      return matrix->nc;
-    }
-  return -1;
-}
-
-
-
-inline  double& OMatrixRC::operator()(int i)
-{
-  return data[i*step];
-}
-
-
-inline  double OMatrixRC::operator()(int i) const
-{
-  return data[i*step];
-}
-
-
-#endif /* MATRIX_SEEN */
-
Index: trunk/SophyaLib/NTools/nbmath.h
===================================================================
--- trunk/SophyaLib/NTools/nbmath.h	(revision 753)
+++ trunk/SophyaLib/NTools/nbmath.h	(revision 756)
@@ -5,4 +5,5 @@
 
 #include "machdefs.h"
+#include "smathconst.h"
 
 #ifdef __cplusplus
@@ -10,43 +11,4 @@
 #endif
 
-/* EA conflit entre les diverses copies de nbmath.h, nbconst.h... A nettoyer... */
-#undef  Pi   
-#undef  Pis2
-#undef  DeuxPi 
-#undef  SPi   
-#undef  S2Pi   
-#undef  Rac2   
-#undef  Log2   
-#undef  LnPi   
-#undef  LgPi   
-#undef  Ln10   
-#undef  DftoDm 
-#undef  Hln2pi 
-#undef  JourSec 
-#undef  AnSec  
-
-#undef  GRAND  
-#undef  GRAND2 
-#undef  IGRAND 
-
-#define  Pi     (double) ( 3.14159265358979310e+00)  /* c'est Pi */
-#define  Pis2   (double) (1.57079632679489655)       /* c'est Pi/2 */
-#define  DeuxPi (double) ( 6.28318530717958620e+00)  /* c'est 2*Pi */
-#define  SPi    (double) ( 1.77245385090551590e+00)  /* c'est sqrt(Pi) */
-#define  S2Pi   (double) ( 2.50662827463100020e+00)  /* c'est sqrt(2*Pi) */
-#define  Rac2   (double) ( 1.41421356237309510e+00)  /* c'est sqrt(2) */
-#define  Log2   (double) ( 3.01029995663981200e-01)  /* c'est log10(2) */
-#define  LnPi   (double) ( 1.14472988584940020e+00)  /* c'est ln(Pi) */
-#define  LgPi   (double) ( 4.97149872694133850e-01)  /* c'est log10(Pi) */
-#define  Ln10   (double) ( 2.30258509299404590e+00)  /* c'est ln(10) */
-#define  DftoDm (double) ( 1.08573620475812940e+00)  /* c'est 2.5/ln(10) */
-#define  Hln2pi (double) ( 9.18938533204672670e-01)  /* c'est Ln(2*pi)/2 */
-
-#define  JourSec (float) (86400.000000) /* nombre de secondes dans 24H */
-#define  AnSec  (int) (31557600) /* nombre de secondes dans 365.25 jours */
-
-#define  GRAND  (float)  (1.e+35)
-#define  GRAND2 (double) (1.e+35)
-#define  IGRAND (int_4) (2147483647)
 
 /* pour le fit 1-dim */
Index: trunk/SophyaLib/NTools/ntuple.cc
===================================================================
--- trunk/SophyaLib/NTools/ntuple.cc	(revision 753)
+++ 	(revision )
@@ -1,611 +1,0 @@
-#include <stdio.h>
-#include <string.h>
-
-#include "strutil.h"
-#include "perrors.h"
-#include "ntuple.h"
-
-
-#define BADVAL -1.e19
-#define LENNAME 8
-#define LENNAME1  (LENNAME+1)
-
-//++
-// Class	NTuple
-// Lib	Outils++ 
-// include	ntuple.h
-//
-//	Classe de ntuples
-//--
-//++
-// Links        Parents
-// PPersist
-// NTupleInterface
-//--
-
-/* --Methode-- */
-//++
-NTuple::NTuple()
-//
-//	Createur par defaut
-//--
-{
-mNVar = mNEnt = mBlk = mNBlk = 0;
-mVar = NULL;
-mVarD = NULL;
-mNames = NULL;
-mInfo = NULL;
-}
-
-
-//++
-NTuple::NTuple(int nvar, char** noms, int blk)
-//
-//	Createur d'un ntuple de `nvar' variables dont les
-//	noms sont dans le tableau de cahines de caracteres `noms'
-//	avec `blk' d'evenements par blocks.
-//--
-{
-mNVar = mNEnt = mBlk = mNBlk = 0;
-mVar = NULL;
-mVarD = NULL;
-mNames = NULL;
-mInfo = NULL;
-if (nvar <= 0)  THROW(sizeMismatchErr); 
-mNVar = nvar;
-mVar = new r_4[nvar];
-mVarD = new r_8[nvar];
-if (blk < 10) blk = 10;
-mBlk = blk;
-// On prend des noms de LENNAME char pour le moment
-mNames = new char[nvar*LENNAME1];
-r_4* pt = new r_4[nvar*blk];
-mNBlk = 1;
-mPtr.push_back(pt);
-int i;
-for(i=0; i<nvar; i++)
-  { strncpy(mNames+i*LENNAME1, noms[i], LENNAME);  
-  mNames[i*LENNAME1+LENNAME] = '\0'; }
-return;
-}
-
-//                                       cmv 8/10/99
-//++
-NTuple::NTuple(const NTuple& NT)
-//
-//	Createur par copie (clone).
-//--
-: mNVar(0), mNEnt(0), mBlk(0), mNBlk(0)
-, mVar(NULL), mVarD(NULL), mNames(NULL), mInfo(NULL)
-{
-if(NT.mNVar<=0) return; // cas ou NT est cree par defaut
-mNVar = NT.mNVar;
-mBlk = NT.mBlk;
-mVar = new r_4[NT.mNVar];
-mVarD = new r_8[NT.mNVar];
-mNames = new char[NT.mNVar*LENNAME1];
-
-int i;
-r_4* pt = new r_4[mNVar*mBlk];
-mNBlk = 1; mPtr.push_back(pt);
-
-for(i=0;i<mNVar;i++) strcpy(mNames+i*LENNAME1,NT.NomIndex(i)); 
-
-if(NT.mInfo!=NULL) {mInfo = new DVList; *mInfo = *(NT.mInfo);}
-
-if(NT.mNEnt<=0) return;
-for(i=0;i<NT.mNEnt;i++) {r_4* x=NT.GetVec(i,NULL); Fill(x);}
-
-return;
-}
-
-/* --Methode-- */
-//++
-NTuple::NTuple(char *flnm)
-//
-//	Createur lecture fichier ppersist.
-//--
-{
-mNVar = mNEnt = mBlk = mNBlk = 0;
-mVar = NULL;
-mVarD = NULL;
-mNames = NULL;
-mInfo = NULL;
-PInPersist s(flnm);
-ObjFileIO<NTuple> fiont(this);
-fiont.Read(s);
-}
-
-/* --Methode-- */
-NTuple::~NTuple()
-{
-Clean();
-}
-
-/* --Methode-- */
-void NTuple::Clean()
-{
-if (mVar) delete[] mVar;
-if (mVarD) delete[] mVarD;
-if (mNames)  delete[] mNames;
-if (mInfo) delete mInfo;
-int i;
-if(mNBlk>0) for(i=0; i<mNBlk; i++)  delete[] mPtr[i];
-mPtr.erase(mPtr.begin(), mPtr.end());
-mNVar = mNEnt = mBlk = mNBlk = 0;
-mVar = NULL;
-mVarD = NULL;
-mNames = NULL;
-mInfo = NULL;
-return;
-}
-
-/* --Methode--        cmv 08/10/99 */
-//++
-NTuple& NTuple::operator = (const NTuple& NT)
-//
-//	Operateur egal (clone).
-//--
-{
-if(this == &NT) return *this;
-Clean();
-if(NT.mNVar<=0) return *this; // cas ou NT est cree par defaut
-mNVar = NT.mNVar;
-mBlk = NT.mBlk;
-mVar = new r_4[NT.mNVar];
-mVarD = new r_8[NT.mNVar];
-mNames = new char[NT.mNVar*LENNAME1];
-
-int i;
-r_4* pt = new r_4[mNVar*mBlk];
-mNBlk = 1; mPtr.push_back(pt);
-
-for(i=0;i<mNVar;i++) strcpy(mNames+i*LENNAME1,NT.NomIndex(i)); 
-
-if(NT.mInfo!=NULL) {mInfo = new DVList; *mInfo = *(NT.mInfo);}
-
-if(NT.mNEnt<=0) return *this;
-for(i=0;i<NT.mNEnt;i++) {r_4* x=NT.GetVec(i,NULL); Fill(x);}
-
-// En fait il faudrait un createur par copie qui partage les donnees
-// quand l'objet est temporaire... trop complique A FAIRE !  cmv.
-return *this;
-}
-
-/* --Methode-- */
-//++
-void  NTuple::Fill(r_4* x)
-//
-//	Remplit le ntuple avec le tableau cd reels `x'.
-//--
-{
-int numb = mNEnt/mBlk;
-if (numb >= mNBlk) {
-  r_4* pt = new r_4[mNVar*mBlk];
-  mNBlk++;
-  mPtr.push_back(pt);
-}
-int offb = mNEnt-numb*mBlk;
-memcpy((mPtr[numb]+offb*mNVar), x, mNVar*sizeof(r_4));
-mNEnt++;
-return;
-}
-
-
-/* --Methode-- */
-//++
-float NTuple::GetVal(int n, int k)  const
-//
-//	Retourne la valeur de la variable `k' de l'evenement `n'.
-//--
-{
-if (n >= mNEnt)   return(BADVAL);
-if ( (k < 0) || (k >= mNVar) )    return(BADVAL);
-int numb = n/mBlk;
-int offb = n-numb*mBlk;
-return(*(mPtr[numb]+offb*mNVar+k));
-}
-
-
-/* --Methode-- */
-//++
-int NTuple::IndexNom(const char* nom)  const
-//
-//	Retourne le numero de la variable de nom `nom'.
-//--
-{
-int i;
-for(i=0; i<mNVar; i++)  
-  if ( strcmp(nom, mNames+i*LENNAME1) == 0)  return(i);
-return(-1);
-}
-
-
-static char nomretour[2*LENNAME1];
-/* --Methode-- */
-//++
-char* NTuple::NomIndex(int k)  const
-//
-//	Retourne le nom de la variable numero 'k'
-//--
-{
-nomretour[0] = '\0';
-if ((k >= 0) && (k < mNVar))  strcpy(nomretour, mNames+k*LENNAME1);
-return(nomretour);
-}
-
-  
-/* --Methode-- */
-//++
-r_4* NTuple::GetVec(int n, r_4* ret)   const
-//
-//	Retourne l'evenement `n' dans le vecteur `ret'.
-//--
-{
-int i;
-if (ret == NULL)   ret = mVar;
-if (n >= mNEnt) {
-  for(i=0; i<mNVar; i++)   ret[i] = BADVAL;
-  return(ret);
-}
-  
-int numb = n/mBlk;
-int offb = n-numb*mBlk;
-memcpy(ret, (mPtr[numb]+offb*mNVar), mNVar*sizeof(r_4));
-return(ret);
-}
-
-/* --Methode-- */
-//++
-r_8* NTuple::GetVecD(int n, r_8* ret)   const
-//
-//	Retourne l'evenement `n' dans le vecteur `ret'.
-//--
-{
-int i;
-if (ret == NULL)   ret = mVarD;
-float *  fr = GetVec(n);
-for(i=0; i<mNVar; i++)   ret[i] = fr[i];
-return(ret);
-}
-
-
-
-/* --Methode-- */
-//++
-DVList&  NTuple::Info()
-//
-//	Renvoie une référence sur l'objet DVList Associé
-//--
-{
-if (mInfo == NULL)  mInfo = new DVList;
-return(*mInfo);
-}
-
-/* --Methode-- */
-//++
-void  NTuple::Print(int num, int nmax)  const
-//
-//	Imprime `nmax' evenements a partir du numero `num'.
-//--
-{
-int i,j;
-
-printf("Num     ");
-for(i=0; i<mNVar; i++)  printf("%8s ", mNames+i*LENNAME1);
-putchar('\n');
-
-if (nmax <= 0)  nmax = 1;
-if (num < 0)  num = 0;
-nmax += num;
-if (nmax > mNEnt) nmax = mNEnt;
-for(i=num; i<nmax; i++) {
-  GetVec(i, NULL); 
-  printf("%6d  ", i);  
-  for(j=0; j<mNVar; j++)  printf("%8g ", (float)mVar[j]);
-  putchar('\n');
-}
-return;
-}
-
-/* --Methode-- */
-//++
-void  NTuple::Show(ostream& os)  const
-//
-//	Imprime l'information generale sur le ntuple.
-//--
-{
-os << "NTuple: NVar= " << mNVar << " NEnt=" << mNEnt  
-   << " (Blk Sz,Nb= " << mBlk << " ," << mNBlk << ")\n";
-os << "            Variables       Min      Max       \n";
-int i;
-double min, max;
-char buff[128];
-for(i=0; i<mNVar; i++) {
-  GetMinMax(i, min, max);
-  sprintf(buff, "%3d  %16s  %10lg  %10lg \n", i, mNames+i*LENNAME1, min, max);
-  os << (string)buff ;
-  }
-os << endl;
-}
-
-
-/* --Methode-- */
-//++
-int  NTuple::FillFromASCIIFile(string const& fn, float defval)
-//
-//	Remplit le ntuple a partir d'un fichier ASCII.
-//	Renvoie le nombre de lignes ajoutees.
-//--
-{
-if (NbColumns() < 1)  { 
-  cout << "NTuple::FillFromASCIIFile() Ntuple has " << NbColumns() << " columns" << endl;
-  return(-1);
-  }
-FILE * fip = fopen(fn.c_str(), "r");
-if (fip == NULL) {
-  cout << "NTuple::FillFromASCIIFile() Error opening file " << fn << endl;
-  return(-2);
-  }
-
-char lineb[4096];
-char *line;
-char buff[64];
-char* ccp;
-int i,j,l,kk;
-int postab, posb;
-float* xv = new float[NbColumns()];
-
-int nlread = 0;
-int nvar = NbColumns();
-// On boucle sur toutes les lignes
-while (fgets(lineb,4096,fip) != NULL) {
-  lineb[4095] = '\0';
-  j = 0; line = lineb;
-//  On enleve les espaces et tab de debut 
-  while ( (line[j] != '\0') && ((line[j] == ' ') || (line[j] == '\t')) )  j++;
-  line = lineb+j; 
-// Il faut que le premier caractere non-espace soit un digit, ou + ou - ou .
-  if (!( isdigit(line[0]) || (line[0] == '+') || (line[0] == '-') || (line[0] == '.') ))  continue;
-  ccp = line;
-  for(kk=0; kk<nvar; kk++)  xv[kk] = defval;
-  for(kk=0; kk<nvar; kk++) {
-// Les mots sont separes par des espaces ou des tab
-    postab = posc(ccp, '\t' );
-    posb = posc(ccp, ' ' );
-    if (postab >= 0) { 
-       if (posb < 0) posb = postab;
-       else if (postab < posb)  posb = postab; 
-       } 
-    if (posb >= 0)  ccp[posb] = '\0';
-    if ( isdigit(line[0]) || (line[0] == '+') || (line[0] == '-') || (line[0] == '.') ) 
-      xv[kk] = atof(ccp);
-    if (posb < 0)  break;
-    ccp += posb+1;   j = 0;
-    while ( (ccp[j] != '\0') && ((ccp[j] == ' ') || (ccp[j] == '\t')) )  j++;
-    ccp += j;
-    }
-  Fill(xv);
-  nlread++;
-  }
-
-delete[] xv;
-cout << "NTuple::FillFromASCIIFile( " << fn << ") " << nlread << " fill from file " << endl;
-return(nlread);
-}
-
-
-// ------- Implementation de  l interface NTuple  ---------
-
-/* --Methode-- */
-uint_4 NTuple::NbLines() const
-{
-return(NEntry());
-}
-/* --Methode-- */
-uint_4 NTuple::NbColumns() const
-{
-return(NVar());
-}
-
-/* --Methode-- */
-r_8 * NTuple::GetLineD(int n) const
-{
-return(GetVecD(n));
-}
-
-/* --Methode-- */
-r_8 NTuple::GetCell(int n, int k) const
-{
-return(GetVal(n, k));
-}
-
-/* --Methode-- */
-r_8 NTuple::GetCell(int n, string const & nom) const
-{
-return(GetVal(n, nom.c_str()));
-}
-
-/* --Methode-- */
-//++
-void  NTuple::GetMinMax(int k, double& min, double& max)  const
-//
-//	Retourne le minimum et le maximum de la variable `k'.
-//--
-{
-min = 9.e19; max = -9.e19;
-if ( (k < 0) || (k >= mNVar) )    return;
-int jb,ib,i;
-double x;
-i=0;
-for(jb=0; jb< mNBlk; jb++)
-  for(ib=0; ib< mBlk; ib++) {
-    if (i >= mNEnt)  break;
-    i++;
-    x = *(mPtr[jb]+ib*mNVar+k);
-    if(i==1) {min = x; max = x;}
-    if (x < min)  min = x;
-    if (x > max)  max = x;
-  }
-return;
-}
-
-/* --Methode-- */
-void NTuple::GetMinMax(string const & nom, double& min, double& max)   const
-{
-GetMinMax(IndexNom(nom.c_str()), min, max);
-}
-
-/* --Methode-- */
-int NTuple::ColumnIndex(string const & nom)  const
-{
-return(IndexNom(nom.c_str()));
-}
-
-/* --Methode-- */
-string NTuple::ColumnName(int k) const
-{
-return(NomIndex(k));
-}
-
-/* --Methode-- */
-//++
-string NTuple::VarList_C(const char* nomx)  const
-//
-//	Retourne une chaine de caracteres avec la declaration des noms de 
-//	variables. si "nomx!=NULL" , des instructions d'affectation
-//	a partir d'un tableau "nomx[i]" sont ajoutees. 
-//--
-{
-string rets="";
-int i;
-for(i=0; i<mNVar; i++) {
-  if ( (i%5 == 0) && (i > 0) )  rets += ";";  
-  if (i%5 == 0)   rets += "\ndouble "; 
-  else rets += ",";
-  rets += mNames+i*LENNAME1;
-  }
-rets += "; \n";
-if (nomx) { 
-  char buff[256];
-  for(i=0; i<mNVar; i++) {
-    sprintf(buff,"%s=%s[%d]; ",  mNames+i*LENNAME1, nomx, i);
-    rets += buff;
-    if ( (i%3 == 0) && (i > 0) )  rets += "\n"; 
-    }
-  }
-
-return(rets);
-}
-
-
-/* --Methode-- */
-//++
-string NTuple::LineHeaderToString() const 
-//	Retourne une chaine de caracteres avec la liste des noms de  
-//	variables, utilisables pour une impression
-//--
-{
-char buff[32];
-string rets=" Num    ";
-for(int i=0; i<mNVar; i++) {
-  sprintf(buff, "%8s ", mNames+i*LENNAME1);
-  rets += buff;
-  }
-rets += '\n';
-return(rets);
-}
-
-/* --Methode-- */
-//++
-string NTuple::LineToString(int n) const
-//	Retourne une chaine de caracteres avec le contenu de la ligne "n"
-//	utilisable pour une impression
-//--
-{
-char buff[32];
-double* val;
-val = GetLineD(n);
-sprintf(buff,"%6d: ",n);  
-string rets=buff;
-int i;
-for(i=0; i<mNVar; i++) {
-  sprintf(buff, "%8.3g ", val[i]);
-  rets += buff;
-  }
-rets += '\n';
-return(rets);
-}
-
-
-/* --Methode-- */
-//++
-void   ObjFileIO<NTuple>::WriteSelf(POutPersist& s)  const
-//
-//	Ecriture ppersist du ntuple.
-//--
-{
-char strg[256];
-if (dobj->mInfo)  sprintf(strg, "NVar=%6d  NEnt=%9d  BlkSz=%6d NBlk=%6d  HasInfo", 
-                          (int)dobj->mNVar, (int)dobj->mNEnt, (int)dobj->mBlk, (int)dobj->mNBlk);
-else sprintf(strg, "NVar=%6d  NEnt=%9d  BlkSz=%6d NBlk=%6d ", 
-                   (int)dobj->mNVar, (int)dobj->mNEnt, (int)dobj->mBlk, (int)dobj->mNBlk);
-s.PutLine(strg);
-s.PutI4(dobj->mNVar);
-s.PutBytes(dobj->mNames, dobj->mNVar*LENNAME1);
-s.PutI4(dobj->mNEnt);
-s.PutI4(dobj->mBlk);
-s.PutI4(dobj->mNBlk);
-if (dobj->mInfo)  s << (*(dobj->mInfo));
-int jb;
-for(jb=0; jb<dobj->mNBlk; jb++)
-  s.PutR4s(dobj->mPtr[jb], dobj->mNVar*dobj->mBlk); 
-return;
-}
-
-/* --Methode-- */
-//++
-void  ObjFileIO<NTuple>::ReadSelf(PInPersist& s)
-//
-//	Lecture ppersist du ntuple.
-//--
-{
-
-dobj->Clean();
-
-char strg[256];
-s.GetLine(strg, 255);
-// Pour savoir s'il y avait un DVList Info associe
-bool hadinfo = false;
-if (strncmp(strg+strlen(strg)-7, "HasInfo", 7) == 0)  hadinfo = true;
-
-s.GetI4(dobj->mNVar);
-dobj->mNames = new char[dobj->mNVar*LENNAME1];
-dobj->mVar = new r_4[dobj->mNVar];
-dobj->mVarD = new r_8[dobj->mNVar];
-s.GetBytes(dobj->mNames, dobj->mNVar*LENNAME1);
-s.GetI4(dobj->mNEnt);
-s.GetI4(dobj->mBlk);
-s.GetI4(dobj->mNBlk);
-
-if (hadinfo) {    // Lecture eventuelle du DVList Info
-  if (dobj->mInfo == NULL)  dobj->mInfo = new DVList;
-  s >> (*(dobj->mInfo));
-  }
-
-int jb; 
-for(jb=0; jb<dobj->mNBlk; jb++) {
-  r_4* pt = new r_4[dobj->mNVar*dobj->mBlk];
-  dobj->mPtr.push_back(pt);
-  s.GetR4s(dobj->mPtr[jb], dobj->mNVar*dobj->mBlk); 
-}
-
-}
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template ObjFileIO<NTuple>
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class ObjFileIO<NTuple>;
-#endif
Index: trunk/SophyaLib/NTools/ntuple.h
===================================================================
--- trunk/SophyaLib/NTools/ntuple.h	(revision 753)
+++ 	(revision )
@@ -1,109 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// Class NTuple
-//  CMV+Reza     Juillet 97
-//  CEA-DAPNIA      LAL-IN2P3/CNRS
-
-#ifndef NTUPLE_H_SEEN
-#define NTUPLE_H_SEEN
-
-#include "objfio.h"
-
-#include <iostream.h>
-#include <string>
-#include <vector>
-
-#include "ntupintf.h"
-#include "ppersist.h"
-#include "dvlist.h"
-
-namespace SOPHYA {
-
-class NTuple : public AnyDataObj , public NTupleInterface {
-public:
-//  enum {classId = ClassId_NTuple };
-
-  		    NTuple(int nvar, char** noms, int blk=512);
-		    NTuple();
-                    NTuple(const NTuple& NT);
-		    NTuple(char* flnm);
-  virtual           ~NTuple();
-
-  NTuple&           operator = (const NTuple& NT);
- 
-  void              Fill(r_4* x);
-
-  inline int_4      NEntry() const  { return(mNEnt); }  
-  inline int_4      NVar() const { return(mNVar); }  
-  inline int_4      BLock() const { return(mBlk); }  
-// $CHECK$ Reza 21/10/99 Pourquoi faire BLock() ?
-
-  float             GetVal(int n, int k)   const;
-  inline float	    GetVal(int n, const char* nom) const 
-                            { return(GetVal(n, IndexNom(nom)) ); }
-  int               IndexNom(const char* nom)  const ;
-  char*             NomIndex(int k) const;
-
-  r_4*	            GetVec(int n, r_4* ret=NULL)  const ;
-  r_8*	            GetVecD(int n, r_8* ret=NULL)  const ;
-
-// Impression, I/O
-  void              Print(int num, int nmax=1)  const ;
-  void              Show(ostream& os) const;
-  inline void       Show() const { Show(cout); }
-
-  DVList&           Info();
-
-// Remplissage depuis fichier ASCII 
-  int		    FillFromASCIIFile(string const& fn, float defval=0.);
-
-
-// Declaration de l interface NTuple
-  virtual uint_4        NbLines() const ;
-  virtual uint_4        NbColumns() const ;
-  virtual r_8 *         GetLineD(int n) const ;
-  virtual r_8		GetCell(int n, int k) const ;
-  virtual r_8		GetCell(int n, string const & nom) const ;
-  virtual void		GetMinMax(int k, double& min, double& max)   const ; 
-  virtual void		GetMinMax(string const & nom, double& min, double& max)   const ; 
-  virtual int           ColumnIndex(string const & nom)  const ;
-  virtual string        ColumnName(int k) const;
-  virtual string	VarList_C(const char* nomx=NULL) const ;
-  virtual string        LineHeaderToString() const;
-  virtual string        LineToString(int n) const;  
-
-//  Pour la gestion de persistance
-  friend class ObjFileIO<NTuple> ;
-
-private:
-  void  Clean();
-
-  int_4 mNVar, mNEnt, mBlk, mNBlk;
-  r_4* mVar;
-  r_8* mVarD;
-  char* mNames;
-
-  vector<r_4*> mPtr;
-
-  DVList* mInfo;        // Infos (variables) attachees au NTuple
-  
-};
-
-inline ostream& operator << (ostream& s, NTuple const & nt)
-  {  nt.Show(s);  return(s);  }
-
-inline POutPersist& operator << (POutPersist& os, NTuple & obj)
-{ ObjFileIO<NTuple> fio(&obj);  fio.Write(os);  return(os); }
-inline PInPersist& operator >> (PInPersist& is, NTuple & obj)
-{ ObjFileIO<NTuple> fio(&obj);  fio.Read(is);  return(is); }
-
-// Classe pour la gestion de persistance
-// ObjFileIO<NTuple>
-
-#ifdef __MWERKS__
-__MSL_FIX_ITERATORS__(r_4*);
-#endif
-
-} // namespace SOPHYA
-
-#endif
-  
Index: trunk/SophyaLib/NTools/objfitter.cc
===================================================================
--- trunk/SophyaLib/NTools/objfitter.cc	(revision 756)
+++ trunk/SophyaLib/NTools/objfitter.cc	(revision 756)
@@ -0,0 +1,189 @@
+#include "objfitter.h"
+
+TMatrix<r_4>
+ObjectFitter::FitResidus(TMatrix<r_4> const & mtx, GeneralFit& gfit,
+			 double xorg, double yorg, double dx, double dy)
+{
+  return( ArrayFitter<r_4>::FitResidus(mtx, gfit, xorg, yorg, dx, dy) );
+}
+
+TMatrix<r_8>
+ObjectFitter::FitResidus(TMatrix<r_8> const & mtx, GeneralFit& gfit,
+			 double xorg, double yorg, double dx, double dy)
+{
+  return( ArrayFitter<r_8>::FitResidus(mtx, gfit, xorg, yorg, dx, dy) );
+}
+
+TMatrix<r_4>
+ObjectFitter::FitFunction(TMatrix<r_4> const & mtx, GeneralFit& gfit,
+			 double xorg, double yorg, double dx, double dy)
+{
+  return( ArrayFitter<r_4>::FitFunction(mtx, gfit, xorg, yorg, dx, dy) );
+}
+
+TMatrix<r_8>
+ObjectFitter::FitFunction(TMatrix<r_8> const & mtx, GeneralFit& gfit,
+			 double xorg, double yorg, double dx, double dy)
+{
+  return( ArrayFitter<r_8>::FitFunction(mtx, gfit, xorg, yorg, dx, dy) );
+}
+
+TVector<r_4>
+ObjectFitter::FitResidus(TVector<r_4> const & vec, GeneralFit& gfit,
+			       double xorg, double dx)
+{  
+  return( ArrayFitter<r_4>::FitResidus(vec, gfit, xorg, dx) );
+}
+
+TVector<r_8>
+ObjectFitter::FitResidus(TVector<r_8> const & vec, GeneralFit& gfit,
+			       double xorg, double dx)
+{  
+  return( ArrayFitter<r_8>::FitResidus(vec, gfit, xorg, dx) );
+}
+
+TVector<r_4>
+ObjectFitter::FitFunction(TVector<r_4> const & vec, GeneralFit& gfit,
+			       double xorg, double dx)
+{  
+  return( ArrayFitter<r_4>::FitFunction(vec, gfit, xorg, dx) );
+}
+
+TVector<r_8>
+ObjectFitter::FitFunction(TVector<r_8> const & vec, GeneralFit& gfit,
+			       double xorg, double dx)
+{  
+  return( ArrayFitter<r_8>::FitFunction(vec, gfit, xorg, dx) );
+}
+
+
+// ---------------------------------------------------------------------------
+
+template <class T>
+TMatrix<T> 
+ArrayFitter<T>::FitResidus(TMatrix<T> const & mtx, GeneralFit& gfit,
+			 double xorg=0.,double yorg=0.,double dx=1.,double dy=1.)
+// Retourne une classe contenant les residus du fit ``gfit''.
+// On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
+// Les coordonnees de l'element (i,j) sont :
+//    (i,j) -> x = xorg+j*dx , y = yorg+i*dy
+{
+if(mtx.NCols()<=0||mtx.NRows()<=0)
+  throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) size mismatch\n"));
+GeneralFunction* f = gfit.GetFunction();
+if(f==NULL)
+  throw(NullPtrError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit==NULL\n"));
+int npar =  gfit.GetNPar();
+if(npar==0)
+  throw(SzMismatchError("ArrayFitter::FitResidus(TMatrix<T>...) GeneraFit 0 parametre\n"));
+double* par = new double[npar];
+{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
+TMatrix<T> m(mtx);
+m.SetTemp(true);
+for(uint_4 i=0;i<mtx.NRows();i++) for(uint_4 j=0;j<mtx.NCols();j++) {
+  double x[2] = {xorg+j*dx,yorg+i*dy};
+  m(i,j) -= f->Value(x,par);
+}
+delete [] par;
+return m;
+}
+
+
+template <class T>
+TMatrix<T> 
+ArrayFitter<T>::FitFunction(TMatrix<T> const & mtx, GeneralFit& gfit,
+			  double xorg=0.,double yorg=0.,double dx=1.,double dy=1.)
+
+// Retourne une classe contenant la fonction du fit ``gfit''.
+// On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
+// Les coordonnees de l'element (i,j) sont :
+//    (i,j) -> x = xorg + j*dx , y = yorg + i*dy
+
+{
+if(mtx.NCols()<=0||mtx.NRows()<=0)
+  throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) size mismatch\n"));
+GeneralFunction* f = gfit.GetFunction();
+if(f==NULL)
+  throw(NullPtrError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit==NULL\n"));
+int npar =  gfit.GetNPar();
+if(npar==0)
+  throw(SzMismatchError("ArrayFitter::FitFunction(TMatrix<T>...) GeneraFit 0 parametre\n"));
+double* par = new double[npar];
+{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
+TMatrix<T> m(mtx.NRows(), mtx.NCols());
+m.SetTemp(true);
+for(uint_4 i=0;i<mtx.NRows();i++) for(uint_4 j=0;j<mtx.NCols();j++) {
+  double x[2] = {xorg+j*dx,yorg+i*dy};
+  m(i,j) = f->Value(x,par);
+}
+delete [] par;
+return m;
+
+}
+
+template <class T>
+TVector<T> 
+ArrayFitter<T>::FitResidus(TVector<T> const & vec, GeneralFit& gfit,
+			 double xorg=0.,double dx=1.)
+// Retourne une classe contenant les residus du fit ``gfit''.
+// La coordonnee de l'element (i) est -> x = xorg + i*dx
+{
+if(vec.NElts()<=0)
+  throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...)  size mismatch\n"));
+GeneralFunction* f = gfit.GetFunction();
+if(f==NULL)
+  throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
+int npar =  gfit.GetNPar();
+if(npar==0)
+  throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
+double* par = new double[npar];
+{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
+TVector<T> v(vec);
+v.SetTemp(true);
+for(uint_4 i=0;i<vec.NElts();i++) {
+  double x = xorg+i*dx;
+  v(i) -= f->Value(&x,par);
+}
+delete [] par;
+return v;
+}
+
+template <class T>
+TVector<T> 
+ArrayFitter<T>::FitFunction(TVector<T> const & vec, GeneralFit& gfit,
+			  double xorg=0.,double dx=1.)
+// Retourne une classe contenant les residus du fit ``gfit''.
+// La coordonnee de l'element (i) est -> x = xorg + i*dx
+{
+if(vec.NElts()<=0)
+  throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...)  size mismatch\n"));
+GeneralFunction* f = gfit.GetFunction();
+if(f==NULL)
+  throw(NullPtrError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit==NULL\n"));
+int npar =  gfit.GetNPar();
+if(npar==0)
+  throw(SzMismatchError("ArrayFitter::FitResidus(TVector<T>...) GeneraFit 0 parametre\n"));
+double* par = new double[npar];
+{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
+TVector<T> v(vec.NElts());
+v.SetTemp(true);
+for(uint_4 i=0;i<vec.NElts();i++) {
+  double x = xorg+i*dx;
+  v(i) = f->Value(&x,par);
+}
+delete [] par;
+return v;
+}
+
+
+///////////////////////////////////////////////////////////////
+#ifdef __CXX_PRAGMA_TEMPLATES__
+#pragma define_template ArrayFitter<r_4>
+#pragma define_template ArrayFitter<r_8>
+#endif
+
+#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
+template class ArrayFitter<r_4>;
+template class ArrayFitter<r_8>;
+#endif
+
Index: trunk/SophyaLib/NTools/objfitter.h
===================================================================
--- trunk/SophyaLib/NTools/objfitter.h	(revision 756)
+++ trunk/SophyaLib/NTools/objfitter.h	(revision 756)
@@ -0,0 +1,62 @@
+// This may look like C code, but it is really -*- C++ -*-
+//
+// Methode d'ajustement non-lineaire sur des objets 
+//                                   R. Ansari    02/2000
+
+#ifndef OBJFITTER_SEEN
+#define OBJFITTER_SEEN
+
+#include "machdefs.h"
+
+#include "tmatrix.h"
+#include "tvector.h"
+#include "generalfit.h"
+
+
+namespace SOPHYA {
+
+class  ObjectFitter {
+public:
+  // Residus et fonction fittees sur matrix
+  static TMatrix<r_4> FitResidus(TMatrix<r_4> const & mtx, GeneralFit& gfit,
+			       double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
+  static TMatrix<r_8> FitResidus(TMatrix<r_8> const & mtx, GeneralFit& gfit,
+			       double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
+  static TMatrix<r_4> FitFunction(TMatrix<r_4> const & mtx, GeneralFit& gfit,
+			       double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
+  static TMatrix<r_8> FitFunction(TMatrix<r_8> const & mtx, GeneralFit& gfit,
+			       double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
+  // Residus et fonction fittees sur vecteurs
+  static TVector<r_4> FitResidus(TVector<r_4> const & vec, GeneralFit& gfit,
+			       double xorg=0.,double dx=1.);
+  static TVector<r_8> FitResidus(TVector<r_8> const & vec, GeneralFit& gfit,
+			       double xorg=0.,double dx=1.);
+  static TVector<r_4> FitFunction(TVector<r_4> const & vec, GeneralFit& gfit,
+				double xorg=0.,double dx=1.);
+  static TVector<r_8> FitFunction(TVector<r_8> const & vec, GeneralFit& gfit,
+				double xorg=0.,double dx=1.);
+};
+
+//  Classe template pour ajustement sur tableaux (Vecteurs, Matrices)
+template <class T>
+class  ArrayFitter {
+public:
+
+  // Residus et fonction fittees sur matrix
+  static TMatrix<T> FitResidus(TMatrix<T> const & mtx, GeneralFit& gfit,
+			       double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
+  static TMatrix<T> FitFunction(TMatrix<T> const & mtx, GeneralFit& gfit,
+				double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
+
+  // Residus et fonction fittees sur vecteurs
+  static TVector<T> FitResidus(TVector<T> const & vec, GeneralFit& gfit,
+			       double xorg=0.,double dx=1.);
+  static TVector<T> FitFunction(TVector<T> const & vec, GeneralFit& gfit,
+				double xorg=0.,double dx=1.);
+  
+};
+
+}  // Fin du namespace
+
+
+#endif   // ARRFITTER_SEEN
Index: trunk/SophyaLib/NTools/outilsinit.cc
===================================================================
--- trunk/SophyaLib/NTools/outilsinit.cc	(revision 753)
+++ 	(revision )
@@ -1,102 +1,0 @@
-// Classe d'initialisation du module Outils++ 
-#include <unistd.h>
-
-#include "outilsinit.h"
-
-#include "matrix.h"
-#include "cvector.h"
-#include "poly.h"
-#include "dvlist.h"
-#include "histos.h"
-#include "histos2.h"
-#include "hisprof.h"
-#include "ntuple.h"
-#include "xntuple.h"
-#include "generaldata.h"
-#include "tmatrix.h"
-#include "tvector.h"
-
-#include "cimage.h"
-
-#include "tabmath.h"
-#include "dates.h"
-#include "datime.h"
-
-int PeidaOutilsInitiator::FgInit = 0;
-
-PeidaOutilsInitiator::PeidaOutilsInitiator()
-  : PeidaInitiator()
-{
-  FgInit++;
-  if (FgInit > 1)  return;
-
-//   Enregistrement des classes PPersist du modules Outils++
-  
-  PPRegister(OMatrix);
-  PPRegister(OVector);
-  PPRegister(ObjFileIO<Poly>);
-  PPRegister(ObjFileIO<Poly2>);
-  PPRegister(ObjFileIO<DVList>);
-  PPRegister(ObjFileIO<Histo>);
-  PPRegister(ObjFileIO<Histo2D>);
-  PPRegister(ObjFileIO<HProf>);
-
-  PPRegister(ObjFileIO<NTuple>);
-  PPRegister(ObjFileIO<XNTuple>);
-  PPRegister(ObjFileIO<GeneralFitData>);
-
-  PPRegister(FIO_TMatrix<uint_1>);
-  PPRegister(FIO_TMatrix<uint_2>);
-  PPRegister(FIO_TMatrix<int_2>);
-  PPRegister(FIO_TMatrix<int_4>);
-  PPRegister(FIO_TMatrix<int_8>);
-  PPRegister(FIO_TMatrix<uint_8>);
-  PPRegister(FIO_TMatrix<r_4>);
-  PPRegister(FIO_TMatrix<r_8>);
-  PPRegister(FIO_TMatrix< complex<r_4> >);
-  PPRegister(FIO_TMatrix< complex<r_8> >);
-
-  PPRegister(FIO_TVector<uint_1>);
-  PPRegister(FIO_TVector<uint_2>);
-  PPRegister(FIO_TVector<int_2>);
-  PPRegister(FIO_TVector<int_4>);
-  PPRegister(FIO_TVector<int_8>);
-  PPRegister(FIO_TVector<uint_8>);
-  PPRegister(FIO_TVector<r_4>);
-  PPRegister(FIO_TVector<r_8>);
-  PPRegister(FIO_TVector< complex<r_4> >);
-  PPRegister(FIO_TVector< complex<r_8> >);
-
-
-  PPRegister(RzImage);
-  PPRegister(ImageU2);
-  PPRegister(ImageI2);
-  PPRegister(ImageI4);
-  PPRegister(ImageR4);
-
-  //PPersistMgr::RegisterClass(OMatrix::classId,  OMatrix::Create);
-
-  int pnice;
-  char* snice = getenv("PEIDANICE");
-  if (!snice) pnice=8;
-  else pnice = atoi(snice);
-  nice(pnice);
-
-//  TSidSetupLaSilla();    Old-Eros
-
-  gTimeZone = new TimeZone;
-
-  ptabFExp = new TabFExp;
-
-}
-
-PeidaOutilsInitiator::~PeidaOutilsInitiator()
-{
-  FgInit--;
-}
-
-
-// On met un objet initiator en statique, pour les loaders qui savent 
-// appeler le constructeur des objets statiques   Reza 08/98
-static PeidaOutilsInitiator poutilsinit;
-
Index: trunk/SophyaLib/NTools/outilsinit.h
===================================================================
--- trunk/SophyaLib/NTools/outilsinit.h	(revision 753)
+++ 	(revision )
@@ -1,23 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// Classe d'initialiseur du module Outils++
-
-#ifndef OUTILSINIT_H_SEEN
-#define OUTILSINIT_H_SEEN
-
-
-// Classe d''initialisation pour les modules de PEIDA++
-#include "peidainit.h"
-
-class PeidaOutilsInitiator : public PeidaInitiator {
-private:
-  static int FgInit;
-public:
-  			PeidaOutilsInitiator();
-  virtual		~PeidaOutilsInitiator();
-};
-
-#undef PeidaInit
-#define PeidaInit() PeidaOutilsInitiator peidaoutilsinitiator
-
-#endif
-
Index: trunk/SophyaLib/NTools/rzimage.h
===================================================================
--- trunk/SophyaLib/NTools/rzimage.h	(revision 753)
+++ trunk/SophyaLib/NTools/rzimage.h	(revision 756)
@@ -103,4 +103,7 @@
   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 
Index: trunk/SophyaLib/NTools/strutil.c
===================================================================
--- trunk/SophyaLib/NTools/strutil.c	(revision 753)
+++ 	(revision )
@@ -1,534 +1,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include "strutil.h"
-
-/* 
-++ 
-  Module	Strutil (C)
-  Lib	LibsUtil
-  include	strutil.h
-
-	Groupe de fonction de gestion et manipulation
-	des chaines de caracteres.
---
-*/
-
-/*
-++
-  char* itoc(int in, char* s, int nDigits)
-	conversion entier-chaine de caracteres
---
-*/
-/*
-++
-  ctoi(const char* cst, int *ipt)
-	convertit une chaine de caractere en entier
---
-*/
-/*
-++
-  ctol(const char* cst, long int *lpt)
-	convertit une chaine de caractere en entier long
---
-*/
-/*
-++
-  ctof(const char* cst, double *fpt)
-	convertit une chaine de caractere en flottant
---
-*/
-/*
-++
-  posc(const char* cst, char sec)
-	trouve la position d'un caractere dans une chaine
-	(premier charactere rencontre)
---
-*/
-/*
-++
-  poslc(const char* cst, char sec)
-	trouve la position d'un caractere dans une chaine
-	(dernier charactere rencontre)
---
-*/
-/*
-++
-  strip(char cst[], char opt, char bc)
-	permet d'enlever les blancs au debut ou a la fin d'une
-	chaine de caractere
---
-*/
-/*
-++
-  padstr(spo,lpa,bc)
-	Cette  fonction  rajoute  des blancs a la fin de la chaine `spo'
-	pour amener la longueur de la chaine a `lpa'. Les caracteres
-	rajoutes a la fin sont `bc'. La fonction retourne le nombre de
-	blancs (caracteres bc)  rajoutes a la fin.
---
-*/
-/*
-++
-  tomaj(char *cbuff)
-	Changement en majuscule d'une chaine de caracteres
---
-*/
-/*
-++
-  tomin(char *cbuff)
-	Changement en minuscule d'une chaine de caracteres
---
-*/
-/*
-++
-  efface(char *cbuff,int lbuff,char c)
-	Remplace un caractere avec des blancs
---
-*/
-/*
-++
-  csh_parse(const char* x, const char* yp)
-	Compare la chaine de caracteres `x' avec la chaine `yp'
-	comprenant des regles de substitution type c-shell
-	(asterisque et point d'interrogation).
---
-*/
-/*
-  DecArgList()
-	Decoder une liste du type a,b,c-d,e,f-g,h...
-*/
- 
-
-/*            Fonction  itoc()    */
-char* itoc(int in, char* s, int nDigits)
-{
-  int i,j,n;
-  n=abs(in);
-  for(i=0;i<nDigits;i++)
-    s[i]=' ';
-  s[nDigits-1]='\0';
-  j=nDigits-2;
-  for (i=j; i>=0; i--)
-   {
-    int x = n % 10;
-    n /= 10;
-    s[i] = '0' + x;
-    if(n==0) break;
-   }
-  if(in < 0 )
-   {
-    s[i-1]='-';
-   } 
- return (s);
- }
- 
-/*            Fonction  ctoi()    */
-int ctoi(const char* cst, int *ipt)
-{
-int i,j,k,l,ls,isgn;
-ls = strlen(cst)-1;
-if (ls < 0)  return (-1);
-j = -1;
-isgn = l = 1;
-k = 0;
-if(cst[0] == '-')
-  {
-  j = 0;
-  isgn = -1;
-  }
-if(cst[0] == '+') j = 0;
-for(i=ls;i>j;i--)
-  {
-  if(isdigit(cst[i]) == 0)  return (-1);
-  k += (cst[i] - '0')*l;
-  l *= 10;
-  }
-*ipt = k*isgn;
-return (1);
-}
-/*                                                       */
-/*            Fonction  ctol()    */
-int ctol(const char* cst, long int *lpt)
-{
-int i,j,ls,isgn;
-long k,l;
-ls = strlen(cst)-1;
-if (ls < 0)  return (-1);
-j = -1;
-isgn = l = 1;
-k = 0;
-if(cst[0] == '-')
-  {
-  j = 0;
-  isgn = -1;
-  }
-if(cst[0] == '+') j = 0;
-for(i=ls;i>j;i--)
-  {
-  if(isdigit(cst[i]) == 0)  return (-1);
-  k += (cst[i] - '0')*l;
-  l *= 10;
-  }
-*lpt = k*isgn;
-return (1);
-}
-/*              Fonction  ctof()           */
-int ctof(const char* cst, double *fpt)
-{
-int i,jb,pv,ls,isgn;
-double v1,v2;
-ls = strlen(cst);
-if (ls < 0)  return (-1);
-jb = -1;
-isgn = 1;
-v1 = 0.;
-v2 = 1.;
-if (cst[0] == '-')
-  {
-  jb = 0;
-  isgn = -1;
-  }
-if (cst[0] == '+')  jb = 0;
-if ((pv=posc(cst,'.')) != -1)
-  {
-  v2 = 0.1;
-  for(i=pv+1;i<ls;i++)
-    {
-    if(isdigit(cst[i]) == 0)  return (-1);
-    v1 += (cst[i]-'0')*v2;
-    v2 /= 10.;
-    }
-  ls = pv;
-  v2 = 1.;
-  }
-for(i=ls-1;i>jb;i--)
-  {
-  if(isdigit(cst[i]) == 0)  return (-1);
-  v1 += (cst[i]-'0')*v2;
-  v2 *= 10.;
-  }
-*fpt = (isgn == 1)? v1 : -v1;
-return (1);
-}
-/*           Fonction  posc()        */
-int posc(const char* cst, char sec)
-{
-int i,ls;
-ls = strlen(cst);
-for(i=0;i<ls;i++)
-  {
-  if (cst[i] == sec)  return(i);
-  }
-return (-1);
-}
-
-/*           Fonction  poslc()        */
-int poslc(const char* cst, char sec)
-{
-int i,ls;
-ls = strlen(cst);
-for(i=ls-1;i>=0;i--)
-  {
-  if (cst[i] == sec)  return(i);
-  }
-return (-1);
-}
-
-/*                Fonction   strip()             */
-int strip(char cst[], char opt, char bc)
-{
-int i,j,ls;
-ls = strlen(cst);
-if (opt == 'L' || opt == 'B')
-  {
-  i = 0;
-  while(cst[i] == bc) i++;
-  if (i != 0)
-    {
-    for(j=i;j<ls;j++)  cst[j-i] = cst[j];
-    ls -= i;
-    cst[ls] = '\0';
-    }
-  }
-if ((opt == 'T' || opt == 'B') && ls > 0)
-  {
-  i = ls-1;
-  while(cst[i] == bc)  i--;
-  cst[i+1] = '\0';
-  }
-return (0);
-}
-
-/*                Fonction   padstr(spo,lpa,bc)                      */
-/*    Cette  fonction  rajoute  des blancs a la fin de la chaine spo */
-/*   pour amener la longueur de la chaine a lpa. les caracteres      */
-/*   rajoutes a la fin sont bc. La fonction retourne le nombre de    */ 
-/*   blancs (caracteres bc)  rajoutes a la fin.                      */
-
-int padstr(char spo[], int lpa, int bc)
-{
-int li,i;
-li = strlen(spo);
-for(i=li;i<lpa;i++)  spo[i] = bc;
-spo[lpa] = '\0';
-return(lpa-li);
-}
-
-/* Eric L. 11-03-94 */
-/* quelques fonctions utiles */
-
-void tomaj(char *cbuff)
-{
-register int i,l;
-
-l=strlen(cbuff);
-for(i=0; i< l;i++)
-  cbuff[i]=(char) toupper( (int) cbuff[i]);
-}
-
-void tomin(char *cbuff)
-{
-register int i,l;
-
-l=strlen(cbuff);
-for(i=0; i< l;i++)
-  cbuff[i]=(char) tolower( (int) cbuff[i]);
-}
-
-void efface(char *cbuff,int lbuff,char c)
-{
-register int i;
-
-for(i=0; i< lbuff;i++)
-  if(cbuff[i] == c)  cbuff[i] = ' ';
-}
-
-char* rep_char(const char *cbuff,char cin,char crep)
-{
-register int i,l;
-char* buff;
-buff=(char*) cbuff;
-l=strlen(buff);
-for(i=0; i< l;i++)
-  if(buff[i] == cin) buff[i] = crep;
-return(buff);
-}
-
-/* Eric L. 23-03-96 */
-
-int csh_parse(const char* x, const char* yp)
-{
- int i,lenx,lenyp;
- int ix,iyp;
- int faux;
- char cx, cyp;
- 
- lenx=strlen(x);
- lenyp=strlen(yp);
- if(!lenx || !lenyp) return(0);
- faux=0;
- ix=0;iyp=0;
- while(ix < lenx && iyp < lenyp)
-  {
-   cx=x[ix];
-   cyp=yp[iyp];
-   if(cx == cyp) 
-    {
-     ix++; 
-     iyp++;
-    }
-   else
-    switch(cyp)
-     {
-       case '?':
-        ix++;
-        iyp++;
-        break;
-       case '*':
-        while((cyp=='*' || cyp=='?') && (iyp < lenyp))
-         {
-          iyp++;
-          if(iyp < lenyp) cyp=yp[iyp];
-         }
-        if(iyp < lenyp)
-         {
-          faux=1;
-          for(i = ix; i < lenx ; i++)
-           {
-            cx=x[i];
-            if(cx == cyp)
-             {
-              faux=0;
-              break;
-             }
-           }
-          ix=i+1;
-          if(ix < lenx) cx=x[ix];
-          iyp++; 
-          if(iyp < lenyp) cyp=yp[iyp];
-         }    
-        break;
-       default:
-        faux=1;
-     }
-    if(faux) return(0);
-  }
- 
- for( i= iyp; i < lenyp ; i++)
-  {
-   cyp=yp[i];
-   if( cyp != '*' && cyp != '?') return(0);
-  }
- 
- if(cyp == '*') return(1);
- if((lenx-ix) == 1 && ( cyp == '?' || cx==cyp)) return(1);
- for( i= ix; i < lenx ; i++)
-  {
-   cx=x[i];
-   if( cx != cyp)  return(0);
-  }
- return(1);
-}
- 
-/*-------------------------------------------------------------------*/
-
-/*
-++
-  int DecArgList(char *listin, int *Vec, int nVec)
-	Pour decoder une liste de numeros a,b,c-d,e,f-g,h...
-	avec a,b... entiers
-| Vec est rempli jusqu'a concurrence de nVec elts.
-|     Si Vec==NULL ou nVec<=0 le tableau n'est pas rempli
-|         et seul le nombre d'elements est compte
-| Return: nombre d'elements rempli
---
-*/
-/*                            (cmv 7/8/97)      */
-int DecArgList(char *listin, int *Vec, int nVec)
-{
-int i,k, num, min, max;
-char *list = NULL, *listfin, *s;
-
-if(strlen(listin) <= 0) return(0);
-list = (char *) malloc(strlen(listin)+1);
-if(list==NULL) return(0);
-strcpy(list,listin); strip(list,'B',' ');
-if( (k=strlen(list)) <= 0 ) {free(list); return(0);}
-for(i=0; i<k; i++) if(list[i] == ',') list[i] = ' ';
-listfin = list + k; *listfin = '\0';
-
-s = list; num = 0; k = 0;
-while(s < listfin) {
-  if ( (k=posc(s,' ')) < 0)  k = strlen(s);
-  s[k] = '\0'; strip(s,'B',' ');
-  sscanf(s,"%d-%d",&min,&max);
-  max = min - 1;
-  sscanf(s,"%d-%d",&min,&max);
-  if(max<min) max = min;
-  for(i=min; i<=max; i++) {
-    if( Vec!=NULL && nVec>0 ) {
-      if( num >= nVec )
-        {printf("DecArgList_Erreur: pas assez de place dans le vecteur (%d)\n"
-               ,nVec); free(list); return(num);}
-      Vec[num] = i;
-    }
-    num++;
-  }
-  s = s+k+1;
-}
-
-free(list);
-return(num);
-}
- 
-/*-------------------------------------------------------------------*/
-
-/*
-++
-  char *ExtName(char *cout,char *cin,char t)
-	Pour separer les composantes d'un nom de fichier de type unix.
-| cout   = chaine en sortie
-| cin    = chaine en entree
-| t      = type de racine a extraire
-| Return = *cout
-| - Remarque: pas de verification de longeur de la chaine cout!
-| - Exemple: /home/toto.cc  /home/ /home/.cc  .cc  toto.cc
-|    t='d' : /home          /home  /home      ""   ""
-|    t='n' : toto.cc        ""     .cc        .cc  toto.cc
-|    t='r' : toto           ""     ""         ""   toto
-|    t='t' : cc             ""     cc         cc   cc
---
-*/
-/*                            (cmv 24/4/98)      */
-char *ExtName(char *cout,char *cin,char t)
-{
-int is=-1,ip=-1,i,j;
-int len = strlen(cin);
-/* cas ou le nom se termine par un / qui n'est pas au debut*/
-if(len>1) if(cin[len-1]=='/') len--;
-
-for(i=0;i<len;i++) {
-  if(cin[i]=='/') is=i;         /* position du dernier / */
-  if(cin[i]=='.' && ip<0) ip=i; /* position du 1er point */
-  cout[i]=cin[i];
-}
-cout[len]='\0';
-
-/* mauvais nom de fichier */
-if(is>=0&&ip>=0&&ip<=is) {cout[0]='\0'; return cout;}
-
-/* traitement des differents cas */
-switch(t) {
-  case 'd':
-    if(is==0) {                    /* cas /... */
-      if(ip<0) ip=len-1;             /* cas /home */
-      else ip=0;                     /* cas /toto.c */
-    } else if(is<0) {              /* cas toto.c */
-      is=ip=-1;
-    } else {                       /* cas /home/.../... */
-      ip=is-1; is=0;
-    }
-    break;
-  case 'n':
-    if(is==0) {                        /* cas /... */
-      if(ip<0) ip=is=-1;                 /* cas /home */
-      else {is=1; ip=len-1;}             /* cas /toto.c */
-    } else if(is>0) {                  /* cas /home/toto.c */
-      is++; ip=len-1;
-    } else {                           /* cas toto.c */
-      is=0; ip=len-1;
-    }
-    break;
-  case 'r':
-    if(is==0) {                          /* cas /... */
-      if(ip<0) ip=is=-1;                   /* cas /home */
-      else if(ip==1) is=ip=-1;             /* cas /.c */
-      else {is=1; ip--;}                   /* cas /toto.c */
-    } else if(is>0) {                    /* cas /home/... */
-      if(ip<0) {is++;ip=len-1;}            /* cas /home/toto */
-      else if(ip==is+1) is=ip=-1;          /* cas /home/.c */
-      else {is++; ip--;}                   /* cas /home/toto.c */
-    } else if(is<0) {                    /* cas toto.c */
-      if(ip<0) {is=0;ip=len-1;}            /* cas toto */
-      else if(ip==0) is=ip=-1;             /* cas .c */
-      else {is=0; ip--;}                   /* cas toto.c */
-    }
-    break;
-  case 't':
-    if(ip<0) is=ip=-1;             /* cas sans '.' dans le nom */
-    else {is=ip+1,ip=len-1;}       /* cas blablabla.c */
-    break;
-  default:
-    cout[0]='\0';
-    return cout;
-    break;
-}
-
-j=0;
-if(is>=0&&ip>=is) for(i=is,j=0;i<=ip;i++,j++) cout[j]=cin[i];
-cout[j]='\0';
-/* printf("........ is=%d ip=%d :%s:\n",is,ip,cout); */
-return cout;
-}
Index: trunk/SophyaLib/NTools/strutil.h
===================================================================
--- trunk/SophyaLib/NTools/strutil.h	(revision 753)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/*                                                                          */
-/*   Ce fichier contient quelques fonctions de manipulation de caracteres   */
-/*   et autres bricoles utiles                                              */
-/*     # char* itoc() : conversion entier-chaine de caracteres              */ 
-/*     # ctoi()   : convertit une chaine de caractere en entier             */
-/*     # ctol()   : convertit une chaine de caractere en entier long        */
-/*     # ctof()   : convertit une chaine de caractere en flottant           */
-/*     # posc()    : trouve la position d'un caractere dans une chaine      */
-/*     # strip()  : permet d'enlever les blancs au debut ou a la fin d'une  */
-/*                  chaine de caractere                                     */ 
-/*     # padstr() : permet d'ajouter des caracteres a la fin d'une chaine   */
-/*                  de caracteres pour amener la longueur de cette chaine   */
-/*                  a une valeur donnee.                                    */
-/*     # tomaj()  : Changement en majuscule d'une chaine de caracteres      */
-/*     # efface() : Remplace un caractere avec des blancs                   */
-/*     # rep_char() : Remplace un caractere par un autre                    */ 
-/*                                                                          */
-/* Derniere modif: csh_parse, E. Lesquoy, le 23-03-96                       */
-/* DecArgList: Decoder une liste du type a,b,c-d,e,f-g,h...(cmv 7/8/97)     */
-/* ExtName: eclatement des nom de fichiers unix (cmv 24/4/98)               */
-
-#ifndef STRUTIL_H_SEEN
-#define STRUTIL_H_SEEN
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*    Manipulation de chaines de caracteres     */
-/*                    Reza - 92/93              */
-char* itoc(int in, char* s,int nDigits);
-int ctoi(const char* cst, int *ipt);
-int ctol(const char* cst, long int *lpt);
-int ctof(const char* cst, double *fpt);
-/* retour ctox : 1: OK, -1 erreur */
-int posc(const char* cst, char sec);
-int poslc(const char* cst, char sec);
-int strip(char* cst, char opt, char bc);
-int padstr(char* spo, int lpa, int bc);
-
-/* Eric L. 11-03-94 */
-void tomaj(char *cbuff);
-void tomin(char *cbuff);
-void efface(char *cbuff,int lbuff,char c);
-/* Attention rep_char(const char *cbuff ...) c'est declare const cbuff, mais ca modifie cbuff - Reza 2/09/98  */
-char* rep_char(const char *cbuff,char cin,char crep);  
-/* Eric L. 23-03-96 */
-int csh_parse(const char* x, const char* yp);
-/* cmv 7/8/97 */
-int DecArgList(char *listin, int *Vec, int nVec);
-char *ExtName(char *cin,char *cout,char t);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
Index: trunk/SophyaLib/NTools/tmatrix.cc
===================================================================
--- trunk/SophyaLib/NTools/tmatrix.cc	(revision 753)
+++ 	(revision )
@@ -1,682 +1,0 @@
-// $Id: tmatrix.cc,v 1.13 2000-02-06 15:05:43 ansari Exp $
-//                         C.Magneville          04/99
-#include "machdefs.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <iostream.h>
-#include <values.h>
-#include <complex>
-#include "pexceptions.h"
-#include "tmatrix.h"
-#include "objfio.h"
-
-////////////////////////////////////////////////////////////////
-//**** Createur, Destructeur
-
-template <class T>
-TMatrix<T>::TMatrix()
-// Constructeur par defaut.
-: mNr(0), mNc(0), mNDBlock()
-{
-}
-
-template <class T>
-TMatrix<T>::TMatrix(uint_4 r,uint_4 c)
-// Construit une matrice de r lignes et c colonnes.
-: mNr(r), mNc(c), mNDBlock(r*c)
-{
-}
-
-template <class T>
-TMatrix<T>::TMatrix(uint_4 r,uint_4 c,T* values,Bridge* br)
-// Construit une matrice de r lignes et c colonnes. On fournit
-// le tableau des valeurs et eventuellement un Bridge.
-: mNr(r), mNc(c), mNDBlock(r*c,values,br)
-{
-}
-
-template <class T>
-TMatrix<T>::TMatrix(const TMatrix<T>& a)
-// Constructeur par copie (partage si "a" temporaire).
-: mNr(a.mNr), mNc(a.mNc), mNDBlock(a.mNDBlock)
-{
-}
-
-template <class T>
-TMatrix<T>::TMatrix(const TMatrix<T>& a,bool share)
-// Constructeur par copie avec possibilite de forcer le partage ou non.
-: mNr(a.mNr), mNc(a.mNc), mNDBlock(a.mNDBlock,share)
-{
-}
-
-template <class T>
-TMatrix<T>::~TMatrix()
-// Destructeur
-{
-}
-
-////////////////////////////////////////////////////////////////
-// Operations matricielles
-template <class T>
-TMatrix<T> TMatrix<T>::Transpose(void) const
-// Transposition
-{
-TMatrix<T> a; a.Clone(*this); a.SetTemp(true);
-a.mNr = mNc; a.mNc = mNr;
-{for(uint_4 i=0; i<mNr; i++)
-  for(uint_4 j=0; j<mNc; j++) {
-    a(j,i) = (*this)(i,j);
-}}
-return a;
-}
-
-////////////////////////////////////////////////////////////////
-//**** Impression
-
-template <class T>
-void TMatrix<T>::Print(ostream& os,int lp
-                 ,uint_4 i0,uint_4 ni,uint_4 j0,uint_4 nj) const
-// Impression de la sous-matrice (i:i+ni-1,i:j+nj-1)
-{
-os<<"TMatrix::Print("<<mNr<<","<<mNc<<")"<<endl;
-if(lp>0)
-  {os<<"       this="<<this<<endl; mNDBlock.Print(0,0);}
-if(mNr==0 || mNc==0) return;
-if(i0>=mNr || j0>=mNc || ni==0 || nj==0) return;
-uint_4 i1 = i0+ni; if(i1>mNr) i1 = mNr;
-uint_4 j1 = j0+nj; if(j1>mNc) j1 = mNc;
-for(uint_4 i=i0;i<i1;i++) {
-  for(uint_4 j=j0;j<j1;j++) cout<<" "<<(*this)(i,j);
-  cout<<endl;
-}
-}
-
-////////////////////////////////////////////////////////////////
-//**** Surcharge de *= (INPLACE): TMatrix *= TMatrix;
-
-template <class T>
-TMatrix<T>& TMatrix<T>::operator *= (const TMatrix<T>& a)
-// A = A*B  -> A(n,m) = A(n,m)*B(m,m)
-{
-uint_4 ndata = mNr*mNc;
-if(ndata==0 || mNc!=a.mNr || a.mNr!=a.mNc)
-  throw(SzMismatchError("TMatrix::operator*=A size mismatch"));
-// A(i,j) = Sum(k) A(i,k)*B(k,j) ... il faut sauver la ligne "i" de A
-// Vecteur oi   : vecteur ou est sauve la ligne i de la matrice *this
-//                oi,oe = pointeur de debut et de fin du vecteur temporaire
-//                oij   = pointeur parcourant le vecteur oi
-// Matrice *this: i     = pointeur du debut de la ligne i
-//                ij    = pointeur parcourant la ligne i
-// Matrice a    : aj    = pointeur de debut de la colonne j
-//                aji   = pointeur parcourant la colonne j
-T* oi = new T[mNc]; T* oe = oi+mNc;
-for(T *i=Data(); i<Data()+ndata; i+=mNc) {
-  {for(T *oij=oi,*ij=i; oij<oe;) *oij++ = *ij++;}
-  {for(T *ij=i,*aj=const_cast<T *>(a.Data()); aj<a.Data()+a.mNc; ij++,aj++) {
-    T sum = 0;
-    for(T *oij=oi,*aji=aj; oij<oe; oij++,aji+=a.mNc) sum += *oij * *aji;
-    *ij = sum;
-  }}
-}
-delete [] oi;
-return *this;
-}
-
-////////////////////////////////////////////////////////////////
-//**** Pour surcharge d'operateurs C = A (+,-,*,/) B
-
-template <class T> TMatrix<T> TMatrix<T>::Add(const TMatrix<T>& b) const
-{
-if(mNr!=b.mNr || mNc!=b.mNc)
-    throw(SzMismatchError("TMatrix operator C=A+B size mismatch\n"));
-TMatrix<T> result; result.SetTemp(true); result.mNr=mNr; result.mNc=mNc;
-result.mNDBlock = mNDBlock+b.mNDBlock;
-return result;
-}
-
-template <class T> TMatrix<T> TMatrix<T>::Sub(const TMatrix<T>& b) const
-{
-if(mNr!=b.mNr || mNc!=b.mNc)
-    throw(SzMismatchError("TMatrix operator C=A-B size mismatch\n"));
-TMatrix<T> result; result.SetTemp(true); result.mNr=mNr; result.mNc=mNc;
-result.mNDBlock = mNDBlock-b.mNDBlock;
-return result;
-}
-
-template <class T> TMatrix<T> TMatrix<T>::Mul(const TMatrix<T>& b) const
-// C = A(this)*B : Cij = Aik Bkj (allocation forcee dans tous les cas)
-{
-if(mNr==0 || mNc==0 || b.mNc==0 || mNc!=b.mNr)
-  throw(SzMismatchError("TMatrix operator C=A*B size mismatch\n"));
-TMatrix<T> r; r.SetTemp(true); r.ReSize(mNr,b.mNc);
-T *ai,*aik,*bj,*bkj,*ri,*rij;
-for(ri=const_cast<T *>(r.Data()),ai=const_cast<T *>(Data());
-    ri<r.Data()+r.mNr*r.mNc;ri+=r.mNc,ai+=mNc) {
-  for(rij=ri,bj=const_cast<T *>(b.Data());rij<ri+r.mNc;rij++,bj++) {
-    *rij = 0;
-    for(aik=ai,bkj=bj;aik<ai+mNc;aik++,bkj+=b.mNc) *rij += *aik * *bkj;
-  }
-}
-return r;
-}
-
-////////////////////////////////////////////////////////////////
-//**** Pour gestion des lignes et des colonnes
-
-template <class T> TMatrixRC<T> TMatrix<T>::Row(uint_4 r) const
-{
-TMatrixRC<T> rc((TMatrix<T>&)*this, TmatrixRow, r);
-return rc;
-}
-
-template <class T> TMatrixRC<T> TMatrix<T>::Col(uint_4 c) const
-{
-TMatrixRC<T> rc((TMatrix<T>&)*this, TmatrixCol, c);
-return rc;
-}
-
-template <class T> TMatrixRC<T> TMatrix<T>::Diag() const
-{
-TMatrixRC<T> rc((TMatrix<T>&)*this, TmatrixDiag);
-return rc;
-}
-
-////////////////////////////////////////////////////////////////
-//**** Pour inversion
-#ifndef M_LN2
-#define M_LN2 0.69314718055994530942
-#endif
-#ifndef LN_MINDOUBLE
-#define LN_MINDOUBLE  (M_LN2 * (DMINEXP - 1))
-#endif
-#ifndef LN_MAXDOUBLE
-#define LN_MAXDOUBLE  (M_LN2 * DMAXEXP)
-#endif
-
-r_8 TMatrix<r_8>::GausPiv(TMatrix<r_8>& a, TMatrix<r_8>& b)
-// Pivot de Gauss
-// * Attention: egcs impose que cette fonction soit mise dans le .cc
-//              avant ::Inverse() (car Inverse() l'utilise)
-// {TMatrix A(a); TMatrix B(b); return (r_8) TMatrix::GausPiv(A,B);}
-{
-uint_4 n = a.NRows();
-if(n!=b.NRows())
-  throw(SzMismatchError("TMatrix::GausPiv size mismatch\n"));
-// On fait une normalisation un peu brutale...
-double vmin=MAXDOUBLE;
-double vmax=0;
-for(uint_4 iii=0; iii<a.NRows(); iii++)
-  for(uint_4 jjj=0; jjj<a.NCols(); jjj++) {
-    double v = TMatrixRC<r_8>::Abs_Value(a(iii,jjj));
-    if(v>vmax) vmax = v;
-    if(v<vmin && v>0) vmin = v;
-}
-double nrm = sqrt(vmin*vmax);
-if(nrm > 1.e5 || nrm < 1.e-5) {
-  a /= nrm;
-  b /= nrm;
-  //cout << "normalisation matrice " << nrm << endl;
-} else nrm=1;
-
-double det = 1.0;
-if(nrm != 1) {
-  double ld = a.NRows() * log(nrm);
-  if (ld <= LN_MINDOUBLE || ld >= LN_MAXDOUBLE) {
-   // cerr << "TMatrix warning, overflow for det" << endl;
-  } else {
-    det = exp(ld);
-  }
-}
-
-TMatrixRC<r_8> pivRowa(a,TmatrixRow);
-TMatrixRC<r_8> pivRowb(b,TmatrixRow);
-
-for(uint_4 k=0; k<n-1; k++) {
-  uint_4 iPiv = a.Col(k).IMaxAbs(k);
-  if(iPiv != k) {
-    TMatrixRC<r_8> aIPiv(a.Row(iPiv));
-    TMatrixRC<r_8> aK(a.Row(k));
-    TMatrixRC<r_8>::Swap(aIPiv,aK);
-    TMatrixRC<r_8> bIPiv(b.Row(iPiv));
-    TMatrixRC<r_8> bK(b.Row(k));
-    TMatrixRC<r_8>::Swap(bIPiv,bK);
-  }
-  double pivot = a(k,k);
-  if (fabs(pivot) < 1.e-50) return 0.0;
-  //det *= pivot;
-  pivRowa.SetRow(k); // to avoid constructors
-  pivRowb.SetRow(k);
-  for (uint_4 i=k+1; i<n; i++) {
-    double r = -a(i,k)/pivot;
-    a.Row(i).LinComb(r, pivRowa); // + rapide que -= r * pivRowa
-    b.Row(i).LinComb(r, pivRowb);
-  }
-}
-det *= a(n-1, n-1);
-
-// on remonte
-for(uint_4 kk=n-1; kk>0; kk--) {
-  double pivot = a(kk,kk);
-  if (fabs(pivot) <= 1.e-50) return 0.0;
-  pivRowa.SetRow(kk); // to avoid constructors
-  pivRowb.SetRow(kk);
-  for(uint_4 jj=0; jj<kk; jj++) {
-    double r = -a(jj,kk)/pivot;
-    a.Row(jj).LinComb(r, pivRowa);
-    b.Row(jj).LinComb(r, pivRowb);
-  }
-}
-
-for(uint_4 l=0; l<n; l++) {
-  if (fabs(a(l,l)) <= 1.e-50) return 0.0;
-  b.Row(l) /= a(l,l);
-}
-
-return det;
-}
-
-TMatrix<r_8> TMatrix<r_8>::Inverse() const
-// Inversion
-{
-TMatrix<r_8> b(mNc,mNr); TMatrix<r_8> a(*this); b = 1.;
-if(fabs(TMatrix<r_8>::GausPiv(a,b)) < 1.e-50)
-  throw(MathExc("TMatrix Inverse() Singular OMatrix"));
-return b;
-}
-
-#include "generalfit.h"
-//////////////////////////////////////////////////////////
-//**** Residus des fits
-TMatrix<r_8> TMatrix<r_8>::FitResidus(GeneralFit& gfit
-            ,double xorg,double yorg,double dx,double dy)
-// Retourne une classe contenant les residus du fit ``gfit''.
-// On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
-// Les coordonnees de l'element (i,j) sont :
-//    (i,j) -> x = xorg+j*dx , y = yorg+i*dy
-{
-if(NCols()<=0||NRows()<=0)
-  throw(SzMismatchError("TMatrix::FitResidus size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("TMatrix::FitResidus GeneraFit==NULL\n"));
-int npar =  gfit.GetNPar();
-if(npar==0)
-  throw(SzMismatchError("TMatrix::FitResidus GeneraFit 0 parametre\n"));
-double* par = new double[npar];
-{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
-TMatrix<r_8> m(*this);
-for(uint_4 i=0;i<NRows();i++) for(uint_4 j=0;j<NCols();j++) {
-  double x[2] = {xorg+j*dx,yorg+i*dy};
-  m(i,j) -= f->Value(x,par);
-}
-delete [] par;
-return m;
-}
-
-TMatrix<r_8> TMatrix<r_8>::FitFunction(GeneralFit& gfit
-            ,double xorg,double yorg,double dx,double dy)
-// Retourne une classe contenant la fonction du fit ``gfit''.
-// On suppose que x=j (colonnes) et y=i (lignes) pour m(i,j).
-// Les coordonnees de l'element (i,j) sont :
-//    (i,j) -> x = xorg + j*dx , y = yorg + i*dy
-{
-if(NCols()<=0||NRows()<=0)
-  throw(SzMismatchError("TMatrix::FitFunction size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("TMatrix::FitFunction GeneraFit==NULL\n"));
-int npar =  gfit.GetNPar();
-if(npar==0)
-  throw(SzMismatchError("TMatrix::FitFunction GeneraFit 0 parametre\n"));
-double* par = new double[npar];
-{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
-TMatrix<r_8> m(*this);
-for(uint_4 i=0;i<NRows();i++) for(uint_4 j=0;j<NCols();j++) {
-  double x[2] = {xorg+j*dx,yorg+i*dy};
-  m(i,j) = f->Value(x,par);
-}
-delete [] par;
-return m;
-}
-
-///////////////////////////////////////////////////////////
-// --------------------------------------------------------
-//   Les objets delegues pour la gestion de persistance 
-// --------------------------------------------------------
-///////////////////////////////////////////////////////////
-
-template <class T>
-FIO_TMatrix<T>::FIO_TMatrix()
-{
-dobj=new TMatrix<T>;
-ownobj=true;
-}
-
-template <class T>
-FIO_TMatrix<T>::FIO_TMatrix(string const & filename) 
-{
-dobj=new TMatrix<T>;
-ownobj=true; 
-Read(filename);
-}
-
-template <class T>
-FIO_TMatrix<T>::FIO_TMatrix(const TMatrix<T> & obj) 
-{ 
-dobj = new TMatrix<T>(obj);
-ownobj=true; 
-}
-
-template <class T>
-FIO_TMatrix<T>::FIO_TMatrix(TMatrix<T> * obj) 
-{ 
-dobj = obj;
-ownobj=false; 
-}
-
-template <class T>
-FIO_TMatrix<T>::~FIO_TMatrix()
-{
-if (ownobj && dobj) delete dobj;
-}
-
-template <class T>
-AnyDataObj* FIO_TMatrix<T>::DataObj()
-{
-return(dobj);
-}
-
-template <class T>
-void FIO_TMatrix<T>::ReadSelf(PInPersist& is)
-{
-// On lit les 3 premiers uint_4
-//  0: Numero de version,  1 : NRows,  2 : NCol
-uint_4 itab[3];
-is.Get(itab,3);
-if (dobj == NULL) dobj = new TMatrix<T>(itab[1],itab[2]);
-else dobj->ReSize(itab[1],itab[2]);
-// On lit le NDataBlock
-FIO_NDataBlock<T> fio_nd(&dobj->DataBlock());
-fio_nd.Read(is);
-}
-
-template <class T>
-void FIO_TMatrix<T>::WriteSelf(POutPersist& os) const
-{
-if (dobj == NULL)   return;
-//  On ecrit 3 uint_4 .... 
-//  0: Numero de version,  1 : NRows,  2 : NCol
-uint_4 itab[3];
- itab[0] = 1;  // Numero de version a 1
-itab[1] = dobj->NRows();
-itab[2] = dobj->NCols();
-os.Put(itab,3);
-// On ecrit le NDataBlock
-FIO_NDataBlock<T> fio_nd(&dobj->DataBlock());
-fio_nd.Write(os);
-}
-
-////////////////////////////////////////////////////////////////
-// -------------------------------------------------------------
-//   La classe de gestion des lignes et colonnes d'une matrice
-// -------------------------------------------------------------
-////////////////////////////////////////////////////////////////
-#include "tvector.h"
-
-template <class T> TMatrixRC<T>::TMatrixRC()
-: matrix(NULL), data(NULL), index(0), step(0)
-{}
-
-template <class T> TMatrixRC<T>::TMatrixRC(TMatrix<T>& m,TRCKind rckind,uint_4 ind)
-: matrix(&m), data(Org(m,rckind,ind)),
-  index(ind), step(Step(m,rckind)), kind(rckind)
-{
-if (kind == TmatrixDiag && m.mNc != m.mNr)
-  throw(SzMismatchError("TMatrixRC::TMatrixRC(...,TmatrixDiag,...) size mismatch\n"));
-}
-
-template <class T> int_4 TMatrixRC<T>::Next()
-{
-if (!matrix || kind==TmatrixDiag) return -1;
-index++;
-if(kind == TmatrixRow) {
-  if(index > (int_4)matrix->mNr) {index = (int_4)matrix->mNr; return -1;}
-  data += matrix->mNc;
-} else {
-  if (index > (int_4)matrix->mNc) {index = (int_4)matrix->mNc; return -1;}
-  data++;
-}
-return index;
-}
-
-template <class T> int_4 TMatrixRC<T>::Prev()
-{
-if (!matrix || kind == TmatrixDiag) return -1;
-index--;
-if(index < 0) {index = 0; return -1;}
-if(kind == TmatrixRow) data -= matrix->mNc;
-else data--;
-return index;
-}
-
-template <class T> int_4 TMatrixRC<T>::SetCol(int_4 c)
-{
-if(!matrix) return -1;
-if(c<0 || c>(int_4)matrix->mNc) return -1;
-kind = TmatrixCol;
-index = c;
-step = Step(*matrix, TmatrixCol);
-data = Org(*matrix, TmatrixCol, c);
-return c;
-}
-
-template <class T> int_4 TMatrixRC<T>::SetRow(int_4 r)
-{
-if(!matrix) return -1;
-if(r<0 && r>(int_4)matrix->mNr) return -1;
-kind = TmatrixRow;
-index = r;
-step = Step(*matrix, TmatrixRow);
-data = Org(*matrix, TmatrixRow, r);
-return r;
-}
-
-template <class T> int_4 TMatrixRC<T>::SetDiag()
-{
-if (!matrix) return -1;
-if (matrix->mNc != matrix->mNr)
-  throw(SzMismatchError("TMatrixRC::SetDiag size mismatch\n"));
-kind = TmatrixDiag;
-index = 0;
-step = Step(*matrix, TmatrixDiag);
-data = Org(*matrix, TmatrixDiag);
-return 0;
-}
-
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator = (const TMatrixRC<T>& rc)
-{
-matrix = rc.matrix;
-data   = rc.data;
-index  = rc.index;
-step   = rc.step;
-kind   = rc.kind;
-return *this;
-}
-
-template <class T> TVector<T> TMatrixRC<T>::GetVect() const
-{
-TVector<T> v(NElts());
-for (uint_4 i=0; i<NElts(); i++) v(i) = (*this)(i);
-return v;
-}
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator += (const TMatrixRC<T>& rc)
-{
-if ( NElts() != rc.NElts() )
-  throw(SzMismatchError("TMatrixRC::operator+= size mismatch\n"));
-if ( kind != rc.kind )
-  throw(SzMismatchError("TMatrixRC::operator+= type mismatch\n"));
-for (uint_4 i=0; i<NElts(); i++) (*this)(i) += rc(i);
-return *this;
-}
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator -= (const TMatrixRC<T>& rc)
-{
-if( NElts() != rc.NElts() )
-  throw(SzMismatchError("TMatrixRC::operator-= size mismatch\n"));
-if( kind != rc.kind )
-  throw(SzMismatchError("TMatrixRC::operator-= type mismatch\n"));
-for(uint_4 i=0; i<NElts(); i++) (*this)(i) -= rc(i);
-return *this;
-}
-
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator *= (T x)
-{
-for(uint_4 i=0; i<NElts(); i++) (*this)(i) *= x;
-return *this;
-}
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator /= (T x)
-{
-for(uint_4 i=0; i<NElts(); i++) (*this)(i) /= x;
-return *this;
-}
-
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator -= (T x)
-{
-for(uint_4 i=0; i<NElts(); i++) (*this)(i) -= x;
-return *this;
-}
-
-template <class T> TMatrixRC<T>& TMatrixRC<T>::operator += (T x)
-{
-for(uint_4 i=0; i<NElts(); i++) (*this)(i) += x;
-return *this;
-}
-
-template <class T>
-TMatrixRC<T>& TMatrixRC<T>::LinComb(T a, T b, const TMatrixRC<T>& rc, uint_4 first)
-{
-if ( NElts() != rc.NElts() )
-  throw(SzMismatchError("TMatrixRC::LinComb size mismatch\n"));
-if ( kind != rc.kind )
-  throw(SzMismatchError("TMatrixRC::LinComb type mismatch\n"));
-for(uint_4 i=first; i<NElts(); i++) (*this)(i) = (*this)(i)*a + rc(i)*b;
-return *this;
-}
-
-template <class T>
-TMatrixRC<T>& TMatrixRC<T>::LinComb(T b, const TMatrixRC<T>& rc, uint_4 first)
-{
-if ( NElts() != rc.NElts() )
-  throw(SzMismatchError("TMatrixRC::LinComb size mismatch\n"));
-if ( kind != rc.kind )
-  throw(SzMismatchError("TMatrixRC::LinComb type mismatch\n"));
-for(uint_4 i=first; i<NElts(); i++) (*this)(i) += rc(i)*b;
-return *this;
-}
-
-template <class T> uint_4 TMatrixRC<T>::IMaxAbs(uint_4 first)
-{
-if (first>NElts())
-  throw(SzMismatchError("TMatrixRC::IMaxAbs size mismatch\n"));
-uint_4 imax = first;
-double vmax = Abs_Value((*this)(first));
-for(uint_4 i=first+1; i<NElts(); i++) {
-  double v = Abs_Value((*this)(i));
-  if(v > vmax) {vmax = v; imax = i;}
-}
-return imax;
-}
-
-template <class T>
-void TMatrixRC<T>::Swap(TMatrixRC<T>& rc1, TMatrixRC<T>& rc2)
-{
-if(rc1.NElts() != rc2.NElts())
-  throw(SzMismatchError("TMatrixRC::Swap size mismatch\n"));
-if(rc1.kind != rc2.kind)
-  throw(SzMismatchError("TMatrixRC::Swap type mismatch\n"));
-if(rc1.data == rc2.data) return;
-for(uint_4 i=0; i<rc1.NElts(); i++)
-  {T tmp = rc1(i); rc1(i) = rc2(i); rc2(i) = tmp;}
-}
-
-///////////////////////////////////////////////////////////////
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template TMatrix<uint_1>
-#pragma define_template TMatrix<uint_2>
-#pragma define_template TMatrix<int_2>
-#pragma define_template TMatrix<int_4>
-#pragma define_template TMatrix<int_8>
-#pragma define_template TMatrix<uint_4>
-#pragma define_template TMatrix<uint_8>
-#pragma define_template TMatrix<r_4>
-#pragma define_template TMatrix<r_8>
-#pragma define_template TMatrix< complex<r_4> > 
-#pragma define_template TMatrix< complex<r_8> > 
-// Instances des delegues FileIO (PPersist)
-#pragma define_template FIO_TMatrix<uint_1>
-#pragma define_template FIO_TMatrix<uint_2>
-#pragma define_template FIO_TMatrix<int_2>
-#pragma define_template FIO_TMatrix<int_4>
-#pragma define_template FIO_TMatrix<int_8>
-#pragma define_template FIO_TMatrix<uint_4>
-#pragma define_template FIO_TMatrix<uint_8>
-#pragma define_template FIO_TMatrix<r_8>
-#pragma define_template FIO_TMatrix<r_4>
-#pragma define_template FIO_TMatrix< complex<r_4> >
-#pragma define_template FIO_TMatrix< complex<r_8> >
-// Instances gestion lignes/colonnes
-#pragma define_template TMatrixRC<uint_1>
-#pragma define_template TMatrixRC<uint_2>
-#pragma define_template TMatrixRC<int_2>
-#pragma define_template TMatrixRC<int_4>
-#pragma define_template TMatrixRC<int_8>
-#pragma define_template TMatrixRC<uint_4>
-#pragma define_template TMatrixRC<uint_8>
-#pragma define_template TMatrixRC<r_4>
-#pragma define_template TMatrixRC<r_8>
-#pragma define_template TMatrixRC< complex<r_4> > 
-#pragma define_template TMatrixRC< complex<r_8> >
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class TMatrix<uint_1>;
-template class TMatrix<uint_2>;
-template class TMatrix<int_2>;
-template class TMatrix<int_4>;
-template class TMatrix<int_8>;
-template class TMatrix<uint_4>;
-template class TMatrix<uint_8>;
-template class TMatrix<r_4>;
-template class TMatrix<r_8>;
-template class TMatrix< complex<r_4> >;
-template class TMatrix< complex<r_8> >;
-// Instances des delegues FileIO (PPersist)
-template class FIO_TMatrix<uint_1>;
-template class FIO_TMatrix<uint_2>;
-template class FIO_TMatrix<int_2>;
-template class FIO_TMatrix<int_4>;
-template class FIO_TMatrix<int_8>;
-template class FIO_TMatrix<uint_4>;
-template class FIO_TMatrix<uint_8>;
-template class FIO_TMatrix<r_8>;
-template class FIO_TMatrix<r_4>;
-template class FIO_TMatrix< complex<r_4> >;
-template class FIO_TMatrix< complex<r_8> >;
-// Instances gestion lignes/colonnes
-template class TMatrixRC<uint_1>;
-template class TMatrixRC<uint_2>;
-template class TMatrixRC<int_2>;
-template class TMatrixRC<int_4>;
-template class TMatrixRC<int_8>;
-template class TMatrixRC<uint_4>;
-template class TMatrixRC<uint_8>;
-template class TMatrixRC<r_4>;
-template class TMatrixRC<r_8>;
-template class TMatrixRC< complex<r_4> >;
-template class TMatrixRC< complex<r_8> >;
-#endif
Index: trunk/SophyaLib/NTools/tmatrix.h
===================================================================
--- trunk/SophyaLib/NTools/tmatrix.h	(revision 753)
+++ 	(revision )
@@ -1,323 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-//                         C.Magneville          04/99
-#ifndef TMatrix_SEEN
-#define TMatrix_SEEN
-
-#include "machdefs.h"
-#include <stdio.h>
-#include <iostream.h>
-#include <complex>
-#include "ppersist.h"
-#include "anydataobj.h"
-#include "ndatablock.h"
-
-namespace SOPHYA {
-
-class GeneralFit;
-template <class T> class TVector;
-template <class T> class TMatrixRC;
-
-template <class T>
-class TMatrix : public AnyDataObj {
-  friend class TMatrixRC<T>;
-  friend class TVector<T>;
-public:
-
-  // Creation / destruction 
-  TMatrix();
-  TMatrix(uint_4 r,uint_4 c);
-  TMatrix(uint_4 r,uint_4 c,T* values,Bridge* br=NULL);
-  TMatrix(const TMatrix<T>& a);
-  TMatrix(const TMatrix<T>& a,bool share);
-  virtual ~TMatrix();
-
-  // Temporaire?
-  inline bool IsTemp(void) const {return mNDBlock.IsTemp();}
-  inline void SetTemp(bool temp=false) const {mNDBlock.SetTemp(temp);}
-
-  // Gestion taille/Remplissage
-  inline void Clone(const TMatrix<T>& a)  // Clone: copie des donnees de "a"
-              {mNDBlock.Clone(a.mNDBlock); mNr = a.mNr; mNc = a.mNc;}
-  inline void Reset(T v=0) {mNDBlock.Reset(v);}
-  inline void ReSize(uint_4 r,uint_4 c)  // Reallocation de place
-       {if(r==0||c==0) throw(SzMismatchError("TMatrix::ReSize r ou c==0\n"));
-        mNDBlock.ReSize(r*c); mNr = r; mNc = c;}
-  inline void Realloc(uint_4 r,uint_4 c,bool force=false)
-       {if(r==0||c==0) throw(SzMismatchError("TMatrix::Realloc r ou c==0\n"));
-        mNDBlock.Realloc(r*c,force); mNr = r; mNc = c;}
-
-  // Informations pointeur/data
-  inline uint_4 NRows() const {return mNr;}
-  inline uint_4 NCols() const {return mNc;}
-  inline uint_4 NCol() const {return mNc;} // back-compat Peida
-  inline T const& operator()(uint_4 r,uint_4 c) const
-                            {return *(mNDBlock.Begin()+r*mNc+c);}
-  inline T&       operator()(uint_4 r,uint_4 c)
-                            {return *(mNDBlock.Begin()+r*mNc+c);}
-  inline T const& operator[](uint_4 ip) const
-                            {return *(mNDBlock.Begin()+ip);}
-  inline T&       operator[](uint_4 ip)
-                            {return *(mNDBlock.Begin()+ip);}
-  inline       T* Data()       {return mNDBlock.Begin();}
-  inline const T* Data() const {return mNDBlock.Begin();}
-  inline       NDataBlock<T>& DataBlock()       {return mNDBlock;}
-  inline const NDataBlock<T>& DataBlock() const {return mNDBlock;}
-
-  // Operations matricielles
-  TMatrix<T> Transpose(void) const;
-
-  // Operateur d'affectation
-  // A = x (matrice diagonale x*Identite)
-  inline TMatrix<T>& operator = (T x)
-    {if(mNr!=mNc || mNr==0) throw(SzMismatchError("TMatrix::operator= mNc!=mNr ou ==0\n"));
-     for(uint_4 r=0;r<mNr;r++) for(uint_4 c=0;c<mNc;c++) (*this)(r,c)=(r==c)?x:(T)0;
-     return *this;}
-  // A = B : partage les donnees si "a" est temporaire, clone sinon.
-  inline TMatrix<T>& operator = (const TMatrix<T>& a)
-                {if(this == &a) return *this; CloneOrShare(a); return *this;}
-
-  // Impression
-  void Print(ostream& os,int lp=0,uint_4 i0=0,uint_4 ni=10,uint_4 j0=0,uint_4 nj=10) const;
-  inline void Print(int lp=0,uint_4 i0=0,uint_4 ni=10,uint_4 j0=0,uint_4 nj=10) const
-              {Print(cout,lp,i0,ni,j0,nj);}
-
-  // Surcharge d'operateurs INPLACE: A (+=,-=,*=,/=) (T) x
-  inline TMatrix<T>& operator += (T b) {mNDBlock += b; return *this;}
-  inline TMatrix<T>& operator -= (T b) {mNDBlock -= b; return *this;}
-  inline TMatrix<T>& operator *= (T b) {mNDBlock *= b; return *this;}
-  inline TMatrix<T>& operator /= (T b) {mNDBlock /= b; return *this;}
-
-  // Surcharge d'operateurs INPLACE: A (+=,-=,*=,/=) B
-  inline TMatrix<T>& operator += (const TMatrix<T>& a)
-              {if(mNr==0 || mNc==0 || mNr!=a.mNr || mNc!=a.mNc)
-                  throw(SzMismatchError("TMatrix::operator+=A size mismatch"));
-               mNDBlock += a.mNDBlock; return *this;}
-  inline TMatrix<T>& operator -= (const TMatrix<T>& a)
-              {if(mNr==0 || mNc==0 || mNr!=a.mNr || mNc!=a.mNc)
-                  throw(SzMismatchError("TMatrix::operator-=A size mismatch"));
-               mNDBlock -= a.mNDBlock; return *this;}
-  TMatrix<T>& operator *= (const TMatrix<T>& a);
-
-  // Pour surcharge d'operateurs C = A (+,-,*) B
-  TMatrix<T> Add(const TMatrix<T>& b) const;
-  TMatrix<T> Sub(const TMatrix<T>& b) const;
-  TMatrix<T> Mul(const TMatrix<T>& b) const;
-
-  // Pivot de Gauss : diagonalise la matrice A, en effectuant les memes
-  // operations sur la matrice B
-  TMatrix<T> Inverse() const;
-  static T GausPiv(TMatrix<T>& A, TMatrix<T>& B);
-
-  // Residus et fonction fittees.
-  TMatrix<T> FitResidus(GeneralFit& gfit
-            ,double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
-  TMatrix<T> FitFunction(GeneralFit& gfit
-            ,double xorg=0.,double yorg=0.,double dx=1.,double dy=1.);
-
-  // Acces aux rangees et colonnes
-  TMatrixRC<T> Row(uint_4 r) const;
-  TMatrixRC<T> Col(uint_4 c) const;
-  TMatrixRC<T> Diag() const;
-
-protected:
-  // partage les donnees si "a" temporaire, clone sinon.
-  inline void CloneOrShare(const TMatrix<T>& a)
-              {mNDBlock.CloneOrShare(a.mNDBlock); mNr=a.mNr; mNc=a.mNc;}
-  // Share: partage les donnees de "a"
-  inline void Share(const TMatrix<T>& a)
-              {mNDBlock.Share(a.mNDBlock); mNr=a.mNr; mNc=a.mNc;}
-
-  uint_4 mNr,mNc;
-  NDataBlock<T> mNDBlock;
-};
-
-////////////////////////////////////////////////////////////////
-// Impression
-
-template <class T>
-inline ostream& operator << (ostream& os, const TMatrix<T>& a)
-                            {a.Print(os); return(os);}
-
-////////////////////////////////////////////////////////////////
-// Surcharge d'operateurs A (+,-,*,/) (T) x
-
-template <class T> inline TMatrix<T> operator + (const TMatrix<T>& a, T b)
-    {TMatrix<T> result(a); result.SetTemp(true); result += b; return result;}
-
-template <class T> inline TMatrix<T> operator + (T b,const TMatrix<T>& a)
-    {TMatrix<T> result(a); result.SetTemp(true); result += b; return result;}
-
-template <class T> inline TMatrix<T> operator - (const TMatrix<T>& a, T b)
-    {TMatrix<T> result(a); result.SetTemp(true); result -= b; return result;}
-
-template <class T> inline TMatrix<T> operator - (T b,const TMatrix<T>& a)
-    {TMatrix<T> result(a); result.SetTemp(true);
-     result.DataBlock() = b-result.DataBlock(); return result;}
-
-template <class T> inline TMatrix<T> operator * (const TMatrix<T>& a, T b)
-    {TMatrix<T> result(a); result.SetTemp(true); result *= b; return result;}
-
-template <class T> inline TMatrix<T> operator * (T b,const TMatrix<T>& a)
-    {TMatrix<T> result(a); result.SetTemp(true); result *= b; return result;}
-
-template <class T> inline TMatrix<T> operator / (const TMatrix<T>& a, T b)
-    {TMatrix<T> result(a); result.SetTemp(true); result /= b; return result;}
-
-////////////////////////////////////////////////////////////////
-// Surcharge d'operateurs C = A (+,-,*,/) B
-
-template <class T>
-inline TMatrix<T> operator + (const TMatrix<T>& a,const TMatrix<T>& b)
-                  {return a.Add(b);}
-
-template <class T>
-inline TMatrix<T> operator - (const TMatrix<T>& a,const TMatrix<T>& b)
-                  {return a.Sub(b);}
-
-template <class T>
-inline TMatrix<T> operator * (const TMatrix<T>& a,const TMatrix<T>& b)
-                  {return a.Mul(b);}
-
-////////////////////////////////////////////////////////////////
-// Typedef pour simplifier et compatibilite Peida
-typedef TMatrix<r_8> Matrix;
-
-/////////////////////////////////////////////////////////////////////////
-// Classe pour la gestion de persistance
-template <class T>
-class FIO_TMatrix : public  PPersist  {
-public:
-  FIO_TMatrix();
-  FIO_TMatrix(string const & filename); 
-  FIO_TMatrix(const TMatrix<T> & obj);
-  FIO_TMatrix(TMatrix<T> * obj);
-  virtual ~FIO_TMatrix();
-  virtual AnyDataObj* DataObj();
-  inline operator TMatrix<T>() { return(*dobj); }
-protected :
-  virtual void ReadSelf(PInPersist&);           
-  virtual void WriteSelf(POutPersist&) const;  
-  TMatrix<T> * dobj;
-  bool ownobj;
-};
-
-template <class T>
-inline POutPersist& operator << (POutPersist& os, TMatrix<T> & obj)
-{ FIO_TMatrix<T> fio(&obj);  fio.Write(os);  return(os); }
-template <class T>
-inline PInPersist& operator >> (PInPersist& is, TMatrix<T> & obj)
-{ FIO_TMatrix<T> fio(&obj);  fio.Read(is);  return(is); }
-
-/////////////////////////////////////////////////////////////////////////
-// Classe de lignes/colonnes de matrices
-enum TRCKind {TmatrixRow=0, TmatrixCol=1, TmatrixDiag=2};
-template <class T>
-class TMatrixRC {
-  friend class TVector<T>;
-  friend class TMatrix<T>;
-public:
-  TMatrixRC();
-
-  virtual ~TMatrixRC() {}
-
-  int_4 Next();
-  int_4 Prev();
-  int_4 SetCol(int_4 c);
-  int_4 SetRow(int_4 r);
-  int_4 SetDiag();
-
-  static uint_4 Step(const TMatrix<T>& m, TRCKind rckind);
-  static T* Org(const TMatrix<T>&, TRCKind rckind, uint_4 ind=0);
-
-  TRCKind Kind() const { return kind; }
-  uint_4 NElts() const;
-  T& operator()(uint_4 i);
-  T  operator()(uint_4 i) const;
-
-  TMatrixRC<T>& operator = (const TMatrixRC<T>& rc);
-  TVector<T> GetVect() const;
-
-  TMatrixRC<T>& operator += (const TMatrixRC<T>& rc);
-  TMatrixRC<T>& operator -= (const TMatrixRC<T>& rc);
-
-  TMatrixRC<T>& operator *= (T x);
-  TMatrixRC<T>& operator /= (T x);
-  TMatrixRC<T>& operator -= (T x);
-  TMatrixRC<T>& operator += (T x);
-
-  TMatrixRC<T>& LinComb(T a, T b, const TMatrixRC& rc, uint_4 first=0);
-  TMatrixRC<T>& LinComb(T b, const TMatrixRC<T>& rc, uint_4 first=0);
-
-  uint_4 IMaxAbs(uint_4 first=0);
-
-  static void Swap(TMatrixRC<T>& rc1, TMatrixRC<T>& rc2);
-
-protected:
-  TMatrixRC(TMatrix<T>& m, TRCKind kind, uint_4 index=0);
-  TMatrix<T>* matrix;
-  inline static double Abs_Value(uint_1 v) {return (double) v;}
-  inline static double Abs_Value(uint_2 v) {return (double) v;}
-  inline static double Abs_Value(int_2 v)  {return (v>0)? (double) v: (double) -v;}
-  inline static double Abs_Value(int_4 v)  {return (v>0)? (double) v: (double) -v;}
-  inline static double Abs_Value(int_8 v)  {return (v>0)? (double) v: (double) -v;}
-  inline static double Abs_Value(uint_4 v) {return (double) v;}
-  inline static double Abs_Value(uint_8 v) {return (double) v;}
-  inline static double Abs_Value(r_4 v)    {return (double) fabsf(v);}
-  inline static double Abs_Value(r_8 v)    {return fabs(v);}
-  inline static double Abs_Value(complex<float> v)
-                {return sqrt(v.real()*v.real()+v.imag()*v.imag());}
-  inline static double Abs_Value(complex<double> v)
-                {return sqrt(v.real()*v.real()+v.imag()*v.imag());}
-
-  T*          data;
-  int_4       index;
-  uint_4      step;
-  TRCKind     kind;
-};
-
-
-template <class T>
-inline T operator * (const TMatrixRC<T>& a, const TMatrixRC<T>& b)
-  {
-  if ( a.NElts() != b.NElts() )
-    throw(SzMismatchError("TMatrixRC::operator * size mismatch\n"));
-  if ( a.Kind() != b.Kind() )
-    throw(SzMismatchError("TMatrixRC::operator * type mismatch\n"));
-  T sum = 0;
-  for(uint_4 i=0; i<a.NElts(); i++) sum += a(i)*b(i);
-  return sum;
-  }
-
-template <class T>
-inline uint_4 TMatrixRC<T>::Step(const TMatrix<T>& m, TRCKind rckind)
-  { switch (rckind) { case TmatrixRow  : return 1;
-                      case TmatrixCol  : return m.mNc;
-                      case TmatrixDiag : return m.mNc+1; }
-    return 0; }
-
-template <class T>
-inline T* TMatrixRC<T>::Org(const TMatrix<T>& m, TRCKind rckind, uint_4 index)
-  { switch (rckind) { case TmatrixRow  : return const_cast<T *>(m.Data()) + index * m.mNc;
-                      case TmatrixCol  : return const_cast<T *>(m.Data()) + index;
-                      case TmatrixDiag : return const_cast<T *>(m.Data()); }
-    return NULL; }
-
-template <class T> inline uint_4 TMatrixRC<T>::NElts() const
-  { if (!matrix) return 0;
-    switch (kind) { case TmatrixRow  : return matrix->mNc;
-                    case TmatrixCol  : return matrix->mNr;
-                    case TmatrixDiag : return matrix->mNc; }
-    return 0; }
-
-template <class T>
-inline T& TMatrixRC<T>::operator()(uint_4 i) {return data[i*step];}
-template <class T>
-inline T  TMatrixRC<T>::operator()(uint_4 i) const {return data[i*step];}
-
-////////////////////////////////////////////////////////////////
-// Typedef pour simplifier et compatibilite Peida
-typedef TMatrixRC<r_8> MatrixRC;
-
-} // Fin du namespace
-
-#endif
Index: trunk/SophyaLib/NTools/tvector.cc
===================================================================
--- trunk/SophyaLib/NTools/tvector.cc	(revision 753)
+++ 	(revision )
@@ -1,227 +1,0 @@
-// $Id: tvector.cc,v 1.6 2000-02-06 15:05:43 ansari Exp $
-//                         C.Magneville          04/99
-#include "machdefs.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <iostream.h>
-#include <complex>
-#include "pexceptions.h"
-#include "tvector.h"
-#include "objfio.h"
-
-template <class T>
-TVector<T>::TVector(uint_4 n)
-// Constructeur d'un vecteur de "n" elements
-: TMatrix<T>(n,1)
-{
-}
-
-template <class T>
-TVector<T>::TVector(uint_4 n, T* values,Bridge* br)
-// Construit un vecteur de n elements. On fournit
-// le tableau des valeurs et eventuellement un Bridge.
-: TMatrix<T>(n,1,values,br)
-{
-}
-
-template <class T>
-TVector<T>::TVector(const TVector<T>& v)
-// Constructeur par copie (partage si "v" temporaire).
-: TMatrix<T>(v)
-{
-}
-
-template <class T>
-TVector<T>::TVector(const TVector<T>& v,bool share)
-// Constructeur par copie avec possibilite de forcer le partage ou non.
-: TMatrix<T>(v,share)
-{
-}
-
-template <class T>
-TVector<T>::TVector(const TMatrix<T>& a)
-// Constructeur a partir d'une matrice "a" de dimension (n,1)
-: TMatrix<T>(a)
-{
-if(a.NCols() != 1)
-  throw(SzMismatchError("TVector(const TMatrix<T>& a) size mismatch, ncol!=1"));
-}
-
-#include "generalfit.h"
-//////////////////////////////////////////////////////////
-//**** Residus des fits
-TVector<r_8> TVector<r_8>::FitResidus(GeneralFit& gfit,double xorg,double dx)
-// Retourne une classe contenant les residus du fit ``gfit''.
-// La coordonnee de l'element (i) est -> x = xorg + i*dx
-{
-if(NElts()<=0)
-  throw(SzMismatchError("TVector::FitResidus size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("TVector::FitResidus GeneraFit==NULL\n"));
-int npar =  gfit.GetNPar();
-if(npar==0)
-  throw(SzMismatchError("TVector::FitResidus GeneraFit 0 parametre\n"));
-double* par = new double[npar];
-{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
-TVector<r_8> v(*this);
-for(uint_4 i=0;i<NElts();i++) {
-  double x = xorg+i*dx;
-  v(i) -= f->Value(&x,par);
-}
-delete [] par;
-return v;
-}
-
-TVector<r_8> TVector<r_8>::FitFunction(GeneralFit& gfit,double xorg,double dx)
-// Retourne une classe contenant la fonction du fit ``gfit''.
-// La coordonnee de l'element (i) est -> x = xorg + i*dx
-{
-if(NElts()<=0)
-  throw(SzMismatchError("TVector::FitFunction size mismatch\n"));
-GeneralFunction* f = gfit.GetFunction();
-if(f==NULL)
-  throw(NullPtrError("TVector::FitFunction GeneraFit==NULL\n"));
-int npar =  gfit.GetNPar();
-if(npar==0)
-  throw(SzMismatchError("TVector::FitFunction GeneraFit 0 parametre\n"));
-double* par = new double[npar];
-{for(int i=0;i<npar;i++) par[i] = gfit.GetParm(i);}
-TVector<r_8> v(*this);
-for(uint_4 i=0;i<NElts();i++) {
-  double x = xorg+i*dx;
-  v(i) = f->Value(&x,par);
-}
-delete [] par;
-return v;
-}
-
-///////////////////////////////////////////////////////////
-// --------------------------------------------------------
-//   Les objets delegues pour la gestion de persistance 
-// --------------------------------------------------------
-///////////////////////////////////////////////////////////
-
-template <class T>
-FIO_TVector<T>::FIO_TVector()
-{
-dobj=new TVector<T>;
-ownobj=true;
-}
-
-template <class T>
-FIO_TVector<T>::FIO_TVector(string const & filename) 
-{
-dobj=new TVector<T>;
-ownobj=true; 
-Read(filename);
-}
-
-template <class T>
-FIO_TVector<T>::FIO_TVector(const TVector<T> & obj) 
-{ 
-dobj = new TVector<T>(obj);
-ownobj=true; 
-}
-
-template <class T>
-FIO_TVector<T>::FIO_TVector(TVector<T> * obj) 
-{ 
-dobj = obj;
-ownobj=false; 
-}
-
-template <class T>
-FIO_TVector<T>::~FIO_TVector()
-{
-if (ownobj && dobj) delete dobj;
-}
-
-template <class T>
-AnyDataObj* FIO_TVector<T>::DataObj()
-{
-return(dobj);
-}
-
-template <class T>
-void FIO_TVector<T>::ReadSelf(PInPersist& is)
-{
-// On lit les 3 premiers uint_4
-//  0: Numero de version,  1 : NRows=NElts,  2 : NCol=1
-uint_4 itab[3];
-is.Get(itab,3);
-if (dobj == NULL) dobj = new TVector<T>(itab[1]);
-else dobj->ReSize(itab[1]);
-// On lit le NDataBlock
-FIO_NDataBlock<T> fio_nd(&dobj->DataBlock());
-fio_nd.Read(is);
-}
-
-template <class T>
-void FIO_TVector<T>::WriteSelf(POutPersist& os) const
-{
-if (dobj == NULL)   return;
-//  On ecrit 3 uint_4 .... 
-//  0: Numero de version,  1 : NRows=NElts,  2 : NCol=1
-uint_4 itab[3];
- itab[0] = 1;  // Numero de version a 1
-itab[1] = dobj->NElts();
-itab[2] = 1;
-os.Put(itab,3);
-// On ecrit le NDataBlock
-FIO_NDataBlock<T> fio_nd(&dobj->DataBlock());
-fio_nd.Write(os);
-}
-
-///////////////////////////////////////////////////////////////
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template TVector<uint_1>
-#pragma define_template TVector<uint_2>
-#pragma define_template TVector<int_2>
-#pragma define_template TVector<int_4>
-#pragma define_template TVector<int_8>
-#pragma define_template TVector<uint_4>
-#pragma define_template TVector<uint_8>
-#pragma define_template TVector<r_4>
-#pragma define_template TVector<r_8>
-#pragma define_template TVector< complex<r_4> > 
-#pragma define_template TVector< complex<r_8> > 
-// Instances des delegues FileIO (PPersist)
-#pragma define_template FIO_TVector<uint_1>
-#pragma define_template FIO_TVector<uint_2>
-#pragma define_template FIO_TVector<int_2>
-#pragma define_template FIO_TVector<int_4>
-#pragma define_template FIO_TVector<int_8>
-#pragma define_template FIO_TVector<uint_4>
-#pragma define_template FIO_TVector<uint_8>
-#pragma define_template FIO_TVector<r_8>
-#pragma define_template FIO_TVector<r_4>
-#pragma define_template FIO_TVector< complex<r_4> >
-#pragma define_template FIO_TVector< complex<r_8> >
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class TVector<uint_1>;
-template class TVector<uint_2>;
-template class TVector<int_2>;
-template class TVector<int_4>;
-template class TVector<int_8>;
-template class TVector<uint_4>;
-template class TVector<uint_8>;
-template class TVector<r_4>;
-template class TVector<r_8>;
-template class TVector< complex<r_4> >;
-template class TVector< complex<r_8> >;
-// Instances des delegues FileIO (PPersist)
-template class FIO_TVector<uint_1>;
-template class FIO_TVector<uint_2>;
-template class FIO_TVector<int_2>;
-template class FIO_TVector<int_4>;
-template class FIO_TVector<int_8>;
-template class FIO_TVector<uint_4>;
-template class FIO_TVector<uint_8>;
-template class FIO_TVector<r_8>;
-template class FIO_TVector<r_4>;
-template class FIO_TVector< complex<r_4> >;
-template class FIO_TVector< complex<r_8> >;
-#endif
Index: trunk/SophyaLib/NTools/tvector.h
===================================================================
--- trunk/SophyaLib/NTools/tvector.h	(revision 753)
+++ 	(revision )
@@ -1,111 +1,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-//                         C.Magneville          05/99
-#ifndef TVector_SEEN
-#define TVector_SEEN
-
-#include "tmatrix.h"
-
-namespace SOPHYA {
-
-class GeneralFit;
-
-template <class T>
-class TVector : public TMatrix<T> {
-public:
-
-  // Creation / destruction 
-  TVector(uint_4 n=1);
-  TVector(uint_4 n, T* values,Bridge* br=NULL);
-  TVector(const TVector<T>& v);
-  TVector(const TVector<T>& v,bool share);
-  TVector(const TMatrix<T>& a);
-
-  // Gestion taille/Remplissage
-  inline void ReSize(uint_4 n) {TMatrix<T>::ReSize(n,1);} // Reallocation de place
-  inline void Realloc(uint_4 n,bool force=false) {TMatrix<T>::Realloc(n,1,force);}
-
-  // Informations pointeur/data
-  inline uint_4 NElts() const {return NRows();}
-  
-  // Acces aux elements
-  inline T& operator()(uint_4 n) {return (*this)[n];}
-  inline T const& operator()(uint_4 n) const {return (*this)[n];}
-  inline T& Element(uint_4 n) {return (*this)[n];}
-  inline T const& Element(uint_4 n) const {return (*this)[n];}
-
-  // Operateur d'affectation
-  inline TVector& operator = (const TVector& v)
-                  {TMatrix<T>::operator =(v); return *this;}
-  inline TVector& operator = (T x)
-                  {for(uint_4 i=0;i<NRows();i++) (*this)(i)=x; return *this;}
-
-  // Residus et fonction fittees.
-  TVector<T> FitResidus(GeneralFit& gfit,double xorg=0.,double dx=1.);
-  TVector<T> FitFunction(GeneralFit& gfit,double xorg=0.,double dx=1.);
-
-};
-
-// produit scalaire, matrice*vecteur
-template <class T>
-inline T operator* (const TVector<T>& v1, const TVector<T>& v2)
-  {if(v1.NRows() != v2.NRows())
-     throw(SzMismatchError("TVector::operator*(TVector& v1,TVector v2) size mismatch"));
-   T *p = const_cast<T *>(v1.Data()), *pEnd = p+v1.NElts(),
-     *q = const_cast<T *>(v2.Data()), r = 0;
-   while (p<pEnd) r += *p++ * *q++;
-   return r;}
-
-template <class T>
-inline TVector<T> operator* (const TMatrix<T>& a, const TVector<T>& b)
-   {return TVector<T>(a * ((TMatrix<T> const&)(b)));}
-
-// Resolution du systeme A*C = B
-inline r_8 LinSolveInPlace(TMatrix<r_8>& a, TVector<r_8>& b)
-{
-if(a.NCols() != b.NRows() || a.NCols() != a.NRows())
-  throw(SzMismatchError("LinSolveInPlace(TMatrix<r_8>,TVector<r_8>) size mismatch"));
-return TMatrix<r_8>::GausPiv(a,b);
-}
-
-// Resolution du systeme A*C = B, avec C retourne dans B
-inline r_8 LinSolve(const TMatrix<r_8>& a, const TVector<r_8>& b, TVector<r_8>& c)
-{ 
-if(a.NCols() != b.NRows() || a.NCols() != a.NRows())
-  throw(SzMismatchError("LinSolve(TMatrix<r_8>,TVector<r_8>) size mismatch"));
-c = b;
-TMatrix<r_8> a1(a);
-return TMatrix<r_8>::GausPiv(a1,c);
-}
-
-// Typedef pour simplifier et compatibilite Peida
-typedef TVector<r_8> Vector;
-
-/////////////////////////////////////////////////////////////////////////
-// Classe pour la gestion de persistance
-template <class T>
-class FIO_TVector : public  PPersist  {
-public:
-  FIO_TVector();
-  FIO_TVector(string const & filename); 
-  FIO_TVector(const TVector<T> & obj);
-  FIO_TVector(TVector<T> * obj);
-  virtual ~FIO_TVector();
-  virtual AnyDataObj* DataObj();
-  inline operator TVector<T>() { return(*dobj); }
-protected :
-  virtual void ReadSelf(PInPersist&);           
-  virtual void WriteSelf(POutPersist&) const;  
-  TVector<T> * dobj;
-  bool ownobj;
-};
-
-template <class T>
-inline POutPersist& operator << (POutPersist& os, TVector<T> & obj)
-{ FIO_TVector<T> fio(&obj);  fio.Write(os);  return(os); }
-template <class T>
-inline PInPersist& operator >> (PInPersist& is, TVector<T> & obj)
-{ FIO_TVector<T> fio(&obj);  fio.Read(is);  return(is); }
-
-} // Fin du namespace
-
-#endif
Index: trunk/SophyaLib/NTools/xntuple.cc
===================================================================
--- trunk/SophyaLib/NTools/xntuple.cc	(revision 753)
+++ 	(revision )
@@ -1,932 +1,0 @@
-// -*- C++ -*- 
-// 
-// xntuple.cc 
-// N. Regnault   -      98-99 
-// Extended NTuples 
-// 
-#include <string.h>
-#include "ppersist.h"
-#include "perrors.h"
-#include "xntuple.h"
-
-#define LENNAME 31 
-#define MAXLEN 128
-#define BADVAL -1.e19
-
-//++
-// Class	XNTuple
-// Lib		Outils++ 
-// include	xntuple.h
-//
-//	Classe de ntuples
-//--
-//++
-// Links	Parents
-// PPersist
-// NTupleInterface
-//--
-//++
-// Links	Voir aussi
-// NTuple
-//--
-
-
-char* XNTuple::glob_swp = NULL ; 
-long int  XNTuple::NbNT = 0 ; 
-
-
-NTBlk::NTBlk(int ndvar, int nfvar, int nivar, int nsvar, int strsz, int sz) 
-    : sw(0), // pas swappe 
-      swoff(-1), 
-      ddata(NULL), fdata(NULL), 
-      idata(NULL), sdata(NULL)
-{
-    if(ndvar) ddata = new double[ndvar*sz] ; 
-    if(nfvar) fdata = new float[nfvar*sz] ; 
-    if(nivar) idata = new int_4[nivar*sz] ; 
-    if(nsvar) sdata = new char[nsvar*(strsz+1)*sz] ; 
-}
-
-NTBlk::~NTBlk()
-{
-    free() ; 
-}
-
-void NTBlk::free() 
-{
-    if(ddata) delete[] ddata ; ddata = NULL ; 
-    if(fdata) delete[] fdata ; fdata = NULL ; 
-    if(idata) delete[] idata ; idata = NULL ; 
-    if(sdata) delete[] sdata ; sdata = NULL ; 
-}
-
-// 
-// relit bloc ds fichier swap 
-// (seulement si bloc n'est plus en memoire) 
-// 
-void XNTuple::read_blk(NTBlk* blk) const 
-{
-    // deja en memoire ? 
-    if( !blk->sw ) return ;  
-    
-    blk->free() ; 
-    
-    // On va --> blk 
-    fseek(swf, blk->swoff, SEEK_SET) ; 
-    
-    if(mD) { 
-	blk->ddata = new double[mD*mBlkSz] ; 
-	fread(blk->ddata, sizeof(double), mD*mBlkSz, swf) ; 
-    }
-    if(mF) { 
-	blk->fdata = new float[mF*mBlkSz] ; 
-	fread(blk->fdata, sizeof(float), mF*mBlkSz, swf) ; 
-    }
-    if(mI) { 
-	blk->idata = new int_4[mI*mBlkSz] ; 
-	fread(blk->idata, sizeof(int), mI*mBlkSz, swf) ; 
-    }
-    if(mS) { 
-	blk->sdata = new char[mS*(mStrSz+1)*mBlkSz] ; 
-	fread(blk->sdata, sizeof(char), mS*mBlkSz*(mStrSz+1), swf) ; 
-    }
-}
-
-// 
-// swappe le bloc present en memoire 
-// depuis le + longtemps 
-// 
-void XNTuple::swap() const 
-{
-    // fichier de swap ouvert ? 
-    if(!swf) { 
-	swf_name = new char[swp.length()+64] ; 
-	strncpy(swf_name, swp.c_str(), swp.length()+1) ; 
-	strcat(swf_name, "NTupleXXXXXX") ; 
-	//	swf_name = strdup("NTupleXXXXXX") ; 
-	mktemp(swf_name) ; 
-	swf = fopen(swf_name, "w+") ; 
-	if(!swf) THROW(fileErr) ; 
-    }
-    
-    // bloc a swapper 
-    NTBlk* blk = sw.front() ; 
-    
-    // bloc dans fichiers de swap ? 
-    //    if( blk->swoff > 0 ) 
-    write_blk(blk) ; 
-    blk->free() ; 
-    
-    blk->sw = 1 ; // on marque le bloc swappe 
-    sw.pop_front() ; // on le vire de la liste de swap 
-    mNSwBlk++ ; 
-}
-
-
-// 
-// unswap() 
-// 
-void XNTuple::get_blk(int i) const 
-{
-    if(i<0 || i>=mNBlk) return ; 
-    read_blk(ptr[i]) ; 
-    ptr[i]->sw = 0 ; 
-    sw.push_back(ptr[i]) ; 
-    mNSwBlk-- ; 
-}
-
-
-// 
-// ecrit le bloc en bout de fichier 
-// (seulement si swoff < 0 ) 
-// 
-void XNTuple::write_blk(NTBlk* blk) const 
-{
-    // deja swappe ? 
-    if( blk->swoff >= 0 ) return ; 
-    fseek(swf, (off_t)0, SEEK_END) ; 
-    // position debut du bloc 
-    blk->swoff = ftell(swf) ; 
-    if(blk->ddata) fwrite(blk->ddata, sizeof(double), mD*mBlkSz, swf) ; 
-    if(blk->fdata) fwrite(blk->fdata, sizeof(float),  mF*mBlkSz, swf) ; 
-    if(blk->idata) fwrite(blk->idata, sizeof(int),    mI*mBlkSz, swf) ; 
-    if(blk->sdata) fwrite(blk->sdata, sizeof(char),   mS*mBlkSz*(mStrSz+1), swf) ; 
-}
-
-
-void  XNTuple::add_blk() 
-{
-    // l'ancien bloc en ecriture peut maintenant 
-    // etre swappe (s'il existe) 
-    if(mBlk>=0) sw.push_back(ptr[mBlk]) ; 
-    
-    // si pas de place, on swappe 
-    if( mNBlk+1 >= mMaxBlk ) swap() ; 
-    
-    // nouveau bloc 
-    NTBlk* tmp = new NTBlk(mD, mF, mI, mS, mStrSz, mBlkSz) ; 
-    ptr.push_back(tmp) ; 
-    
-    //    mNBlk++ ; 
-    //    mOff = 0 ; 
-    //    mBlk++ ; 
-}
-
-
-XNTuple::XNTuple()
-    : mNEnt(0), mNBlk(0), mNSwBlk(0), 
-      mBlkSz(0), mBlk(-1), mOff(0), 
-      mMaxBlk(0), mStrSz(0), 
-      mD(0), mF(0), mI(0), mS(0), 
-      mVarD(NULL), mMin(NULL), mMax(NULL), 
-      mNVars(0), mNames(NULL), 
-  swf(NULL), swf_name(NULL), mInfo(NULL)
-{
-    if(!glob_swp) SetSwapPath("/tmp/") ; 
-    swp = glob_swp ; 
-    NbNT++ ; 
-}
-
-//++
-// Titre	Constructeurs
-//--
-//++
-// XNTuple(int ndvar, int nfvar, int nivar, int nsvar, char** vnames, -
-//	   int blk=512, int maxblk=100, int strsz=30)
-//	Constructeur - Création d'un XNTuple de "ndvar" variables de type "double", -
-//                      "nfvar" de type "float", "nivar" de type "int" et "nsvar" de type -
-//                      "char*". 
-//|            * "blk"    = taille blocs de données (en nombre d'entrées) 
-//|            * "maxblk" = nombre max de blocs présents en mémoire (non swappés) 
-//|            * "strsz"  = taille des données de type char* 
-// XNTuple(XNTuple const& nt)
-//	Constructeur de copie.
-// XNTuple(string const& flnm)
-//	Constructeur - lecture à partir d'un fichier PPersist.
-//--
-
-XNTuple::XNTuple(int ndvar, int nfvar, int nivar, int nsvar, 
-		   char** vnames, 
-		   int blk, int maxblk, int strsz)
-    : mNEnt(0), mNBlk(0), mNSwBlk(0), 
-      mBlkSz(blk), mBlk(-1), mOff(0), 
-      mMaxBlk(maxblk), mStrSz(strsz), 
-      mD(ndvar), mF(nfvar), mI(nivar), mS(nsvar), 
-      mVarD(NULL), mMin(NULL), mMax(NULL), 
-      mNVars(ndvar+nfvar+nivar+nsvar), mNames(NULL), 
-      swf(NULL), swf_name(NULL), mInfo(NULL)
-{
-    if(!glob_swp) SetSwapPath("/tmp/") ; 
-    swp = glob_swp ; 
-    
-    mVarD = new r_8[mNVars] ; 
-    mMin  = new r_8[mD+mF+mI] ; 
-    int i;
-    for(i = 0 ; i < (mD+mF+mI) ; i++) mMin[i] =  9E19 ; 
-    mMax  = new r_8[mD+mF+mI] ; 
-    for(i = 0 ; i < (mD+mF+mI) ; i++) mMax[i] = -9E19 ; 
-    
-    if(mNVars) mNames = new char[mNVars*(LENNAME+1)] ; 
-    memset(mNames, 0, mNVars*(LENNAME+1));
-    for(i = 0 ; i < mNVars ; i++)
-      strncpy(mNames+i*(LENNAME+1), vnames[i], LENNAME);
-
-    NbNT++ ; 
-}
-
-
-
-XNTuple::XNTuple(string const& flnm) 
-    : mNEnt(0), mNBlk(0), mNSwBlk(0), 
-      mBlkSz(0), mBlk(-1), mOff(0), 
-      mMaxBlk(0), mStrSz(0), 
-      mD(0), mF(0), mI(0), mS(0), 
-      mVarD(NULL), mMin(NULL), mMax(NULL), 
-      mNVars(0), mNames(NULL), 
-      swf(NULL), swf_name(NULL), mInfo(NULL)
-{
-    if(!glob_swp) SetSwapPath("/tmp/") ; 
-    swp = glob_swp ; 
-    
-    PInPersist s(flnm);
-    ObjFileIO<XNTuple> fiont(this);
-    fiont.Read(s);
-    NbNT++ ; 
-}
-
-
-XNTuple::XNTuple(XNTuple const& nt) 
-    : mNEnt(0), mNBlk(0), mNSwBlk(0), 
-      mBlkSz(0), mBlk(-1), mOff(0), 
-      mMaxBlk(0), mStrSz(0), 
-      mD(0), mF(0), mI(0), mS(0), 
-      mVarD(NULL), mMin(NULL), mMax(NULL), 
-      mNVars(0), mNames(NULL), 
-      swf(NULL), swf_name(NULL), mInfo(NULL) 
-{
-    if(!glob_swp) SetSwapPath("/tmp/") ; 
-    swp = glob_swp ; 
-    Copy(nt) ; 
-    NbNT++ ; 
-}
-
-
-
-XNTuple::~XNTuple()
-{
-    clean() ; 
-    NbNT-- ; 
-    if(NbNT==0) delete[] glob_swp ; 
-}
-
-
-
-void XNTuple::clean()
-{
-    // On libere tous les blocs 
-    for(int i = 0 ; i < mNBlk ; i++) 
-	if(!ptr[i]->sw) delete ptr[i] ; 
-    ptr.erase(ptr.begin(), ptr.end()) ; 
-    sw.erase(sw.begin(), sw.end()) ; 
-    
-    // on ferme le fichier de swap 
-    if(swf) fclose(swf) ; swf = NULL ; 
-    remove(swf_name) ; 
-    delete swf_name ; swf_name = NULL ; 
-    
-    // tout le monde remis a 0 
-    mNEnt   = 0 ;     mNBlk   = 0 ; 
-    mNSwBlk = 0 ;     mBlkSz  = 0 ;  
-    mBlk    = -1 ;    mOff    = 0 ; 
-    mMaxBlk = 0 ;     mStrSz  = 0 ; 
-    mD      = 0 ;     mF      = 0 ; 
-    mI      = 0 ;     mS      = 0 ; 
-    mNVars  = 0 ; 
-    
-    
-    if(mVarD) { delete[] mVarD ; mVarD = NULL ; } 
-    if(mMin)  { delete[] mMin  ; mMin  = NULL ; } 
-    if(mMax)  { delete[] mMax  ; mMax  = NULL ; } 
-
-    if(mNames) {delete[] mNames ; mNames = NULL ; }
-    if (mInfo) delete mInfo;
-
-}
-
-
-//++
-// Titre	Méthodes
-//--
-//++
-//  void Fill(double* d_data, float* f_data, int* i_data, char** s_data) 
-//	Remplissage d'une ligne dans le NTuple
-//  void Show(ostream& os) const 
-//	Impression de la liste des variables avec min-max sur le flot "oß
-//  void Show() const 
-//	Identique à "Show(cout)"
-//  XNTuple&   operator = (XNTuple const& nt) 
-//	Opérateur égal (=) , copie "nt" dans le premier NTuple
-//--
-void XNTuple::Fill(double* d_data, float* f_data, int* i_data, char** s_data) 
-{
-    // place disponible dans bloc courant ? 
-    if( mOff==mBlkSz || mOff==0 ) {
-	add_blk() ; mOff = 0 ; mNBlk++ ; mBlk++ ; 
-    }
-    
-    if( mD && !ptr[mBlk]->ddata || 
-	mF && !ptr[mBlk]->fdata || 
-	mI && !ptr[mBlk]->idata || 
-	mS && !ptr[mBlk]->sdata )
-	THROW(parmErr) ; 
-    
-    double x ; 
-    // copie variables et update mMin, mMax 
-    if(mD) {
-	memcpy(ptr[mBlk]->ddata+mOff*mD, d_data, mD*sizeof(double)) ; 
-	for(int i = 0 ; i < mD ; i++) {
-	    x = d_data[i] ; 
-	    if(x<mMin[i]) mMin[i] = x ; 
-	    if(x>mMax[i]) mMax[i] = x ; 
-	}
-    }
-    
-    if(mF) {
-	memcpy(ptr[mBlk]->fdata+mOff*mF, f_data, mF*sizeof(float)) ; 
-	for(int i = 0 ; i < mF ; i++) {
-	    x = f_data[i] ; 
-	    if(x<mMin[i+mD]) mMin[i+mD] = x ; 
-	    if(x>mMax[i+mD]) mMax[i+mD] = x ; 
-	}
-    }
-
-    if(mI) {
-	memcpy(ptr[mBlk]->idata+mOff*mI, i_data, mI*sizeof(int)) ; 
-	for(int i = 0 ; i < mI ; i++) {
-	    x = i_data[i] ; 
-	    if(x<mMin[i+mD+mF]) mMin[i+mD+mF] = x ; 
-	    if(x>mMax[i+mD+mF]) mMax[i+mD+mF] = x ; 
-	}
-    }
-    for(int i = 0 ; i < mS ; i++) 
-	memcpy(ptr[mBlk]->sdata+(mOff*mS+i)*(mStrSz+1), 
-	       s_data[i], (strlen(s_data[i])+1)*sizeof(char)) ; 
-    mOff++ ; 
-    mNEnt++ ; 
-}
-
-// 
-// A quel index correspond mon nom ? 
-// 
-int XNTuple::IndexNom(char const* nom) const 
-{
-    int i ; 
-    for(i = 0 ; i < (mD+mF+mI+mS) ; i++)
-	if( !strncmp( mNames+i*(LENNAME+1), nom, LENNAME+1) ) 
-	    return i ; 
-    return -1 ; 
-}
-
-string XNTuple::NomIndex(int k) const 
-{
-    if( k<0 || k>=mNVars ) return "" ; 
-    return mNames + k*(LENNAME+1) ; 
-}
-
-
-// 
-// 
-// 
-double XNTuple::GetDVal(int i, int k) const 
-{
-    if( i<0 || i>=mNEnt || k<0 || k>=mD ) 
-	THROW(rangeCheckErr) ; 
-    
-    // Bloc ? 
-    int blk = (int)(i/mBlkSz) ; 
-    int off = i%mBlkSz ; 
-    
-    // bloc swappe ? 
-    if( ptr[blk]->sw ) { get_blk(blk) ; swap() ; } 
-    return ptr[blk]->ddata[off*mD+k] ; 
-}
-
-// 
-// 
-// 
-float XNTuple::GetFVal(int i, int k) const 
-{
-    if( i<0 || i>=mNEnt || k<mD || k>=(mD+mF) ) 
-	THROW(rangeCheckErr) ; 
-    k -= mD ; 
-    
-    // Bloc ? 
-    int blk = (int)(i/mBlkSz) ; 
-    int off = i%mBlkSz ; 
-    
-    // bloc swappe ? 
-    if( ptr[blk]->sw ) { get_blk(blk) ; swap() ; } 
-    return ptr[blk]->fdata[off*mF+k] ; 
-}
-
-// 
-// 
-// 
-int XNTuple::GetIVal(int i, int k) const 
-{
-    if( i<0 || i>=mNEnt || k<(mD+mF) || k>=(mD+mF+mI) )
-	THROW(rangeCheckErr) ; 
-    k -= (mD+mF) ; 
-
-    // Bloc ? 
-    int blk = (int)(i/mBlkSz) ; 
-    int off = i%mBlkSz ; 
-    
-    // bloc swappe ? 
-    if( ptr[blk]->sw ) { get_blk(blk) ; swap() ; } 
-
-    return ptr[blk]->idata[off*mI+k] ; 
-}
-
-// 
-// 
-// 
-string  XNTuple::GetSVal(int i, int k) const 
-{
-    if( i<0 || i>=mNEnt || k<(mD+mF+mI) || k>=(mD+mF+mI+mS) )
-	THROW(rangeCheckErr) ; 
-    k -= (mD+mF+mI) ; 
-    
-    // Bloc ? 
-    int blk = (int)(i/mBlkSz) ; 
-    int off = i%mBlkSz ; 
-    
-    // bloc swappe ? 
-    if( ptr[blk]->sw ) { get_blk(blk) ; swap() ; } 
-    
-    // copie de la chaine 
-    // string ret = strdup(ptr[blk]->sdata + (off*mS+k)*(mStrSz+1)) ; // $CHECK$ EA fuite de memoire
-       // attention, strdup fait un malloc et on ne fait jamais de free...
-       // a quoi sert ce strdup ?????????
-    string ret = ptr[blk]->sdata + (off*mS+k)*(mStrSz+1) ; 
-    //    return ptr[blk]->sdata[k] ; 
-    return ret ; 
-}
-
-
-// 
-// Copie bloc a bloc, avec meme parametres 
-//  
-void XNTuple::Copy(XNTuple const& nt) 
-{
-    clean() ; 
-    // Parametres 
-    mNEnt = nt.mNEnt ; 
-    mBlkSz = nt.mBlkSz ; 
-    mOff = nt.mOff ; 
-    mMaxBlk = nt.mMaxBlk ; 
-    mStrSz = nt.mStrSz ; 
-    mD = nt.mD ; 
-    mF = nt.mF ; 
-    mI = nt.mI ; 
-    mS = nt.mS ; 
-    mNVars = nt.mNVars ; 
-    
-    // noms 
-    if(mNVars) {
-	mNames = new char[mNVars*(LENNAME+1)] ; 
-        mVarD = new double[mNVars];
-	memcpy(mNames, nt.mNames, mNVars*(LENNAME+1)*sizeof(char)) ; 
-    }
-    // MinMax 
-    if(nt.mMin) { 
-	mMin = new double[(mD+mF+mI)] ; 
-	memcpy(mMin, nt.mMin, (mD+mF+mI)*sizeof(double)) ; 
-    }
-    if(nt.mMax) { 
-	mMax = new double[(mD+mF+mI)] ; 
-	memcpy(mMax, nt.mMax, (mD+mF+mI)*sizeof(double)) ; 
-    }
-    
-    //dup blocs 
-    mNBlk = 0 ; 
-    mBlk  = -1 ; 
-    for(int i = 0 ; i < nt.mNBlk ; i++) {
-	add_blk() ; mBlk++ ; mNBlk++ ; 
-	// si nt.ptr[i] swappe, on le relit 
-	if(nt.ptr[i]->sw) nt.read_blk(nt.ptr[i]) ; 
-	if(mD) 
-	    memcpy(ptr[i]->ddata, nt.ptr[i]->ddata, mD*mBlkSz*sizeof(double)) ; 
-	if(mF)
-	    memcpy(ptr[i]->fdata, nt.ptr[i]->fdata, mF*mBlkSz*sizeof(float)) ; 
-	if(mI)
-	    memcpy(ptr[i]->idata, nt.ptr[i]->idata, mF*mBlkSz*sizeof(int)) ; 
-	if(mS)
-	    memcpy(ptr[i]->sdata, nt.ptr[i]->sdata, mS*mBlkSz*sizeof(char)*(mStrSz+1)) ; 
-	if(nt.ptr[i]->sw) nt.ptr[i]->free() ; 
-    }
-
-    // DVList Info block 
-    if(nt.mInfo!=NULL) {mInfo = new DVList; *mInfo = *(nt.mInfo);}
-
-}
-
-//++
-// DVList& Info()
-//	Renvoie une référence sur l'objet DVList Associé
-//--
-
-DVList&  XNTuple::Info()
-{
-  if (mInfo == NULL)  mInfo = new DVList;
-  return(*mInfo);
-}
-
-void XNTuple::Print(int num, int nmax) const 
-{
-    printf("XNTuple::Print() : \n") ; 
-    printf("  Entrees = %d, Blocs  = %d, Bloc Size = %d\n", 
-	   mNEnt, mNBlk, mBlkSz) ; 
-    int i,j;
-    printf("  D_Vars  = %d : ", mD) ; 
-    for(i = 0 ; i < mD ; i++) 
-	printf("%s ", NomIndex(i).c_str() ) ; 
-    printf("\n") ; 
-    
-    printf("  F_Vars  = %d : ", mF) ; 
-    for(i = 0 ; i < mF ; i++) 
-	printf("%s ", NomIndex(i+mD).c_str() ) ; 
-    printf("\n") ; 
-    
-    printf("  I_Vars  = %d : ", mI) ; 
-    for(i = 0 ; i < mI ; i++) 
-	printf("%s ", NomIndex(i+mD+mF).c_str() ) ; 
-    printf("\n") ; 
-    
-    printf("  S_Vars  = %d : ", mS) ; 
-    for(i = 0 ; i < mS ; i++) 
-	printf("%s ", NomIndex(i+mD+mF+mI).c_str() ) ; 
-    printf("\n") ; 
-    
-    for(i = num ; i < num+nmax ; i++) {
-	for(j = 0 ; j < mD ; j++) printf("%f ", GetDVal(i,j)) ; 
-	printf(" -- ") ; 
-	for(j = 0 ; j < mF ; j++) printf("%f ", GetFVal(i,j+mD)) ; 
-	printf(" -- ") ; 
-	for(j = 0 ; j < mI ; j++) printf("%d ", GetIVal(i,j+mD+mF)) ; 
-	printf(" -- ") ; 
-	for(j = 0 ; j < mS ; j++) printf("%s ", GetSVal(i,j+mD+mF+mI).c_str()) ; 
-	printf("\n") ; 
-    }
-}
-
-
-void   XNTuple::Show(ostream& os) const 
-{
-    os << "XNTuple: NVar= " << mNVars << " NEnt= " << mNEnt 
-       << " (BlkSz,NBlk= " << mBlkSz << ", " << mNBlk << ")" 
-       << " (mNSwBlk= " << mNSwBlk << ")" << endl ; 
-    os << "(Sw File= " ; if(swf_name) os << swf_name ; os << ")" << endl ; 
-    
-    char* buff = new char[80] ; 
-    sprintf(buff, "Variables   :  Type         Min         Max  \n") ; 
-    os << buff ; 
-    
-    double min, max ;
-    int i; 
-    for(i = 0 ; i < mD ; i++) {
-	GetMinMax(i, min, max) ; 
-	sprintf(buff, "  %-10s:   D    %12.6g   %12.6g \n", 
-		NomIndex(i).c_str(), min, max) ; 
-	os << buff ; 
-    }
-    for(i = 0 ; i < mF ; i++) {
-	GetMinMax(i+mD, min, max) ; 
-	sprintf(buff, "  %-10s:   F    %12.6g   %12.6g \n", 
-		NomIndex(i+mD).c_str(), min, max) ; 
-	os << buff ; 
-    }
-    for(i = 0 ; i < mI ; i++) {
-	GetMinMax(i+mD+mF, min, max) ; 
-	sprintf(buff, "  %-10s:   I    %12.6g   %12.6g \n", 
-		NomIndex(i+mD+mF).c_str(), min, max) ; 
-	os << buff ; 
-    }
-    for(i = 0 ; i < mS ; i++) {
-	sprintf(buff, "  %-10s:   S      -----        ----- \n", 
-		NomIndex(i+mD+mF+mI).c_str()) ; 
-	os << buff ; 
-    }
-    delete[] buff ; 
-}
-
-int    XNTuple::FillFromASCIIFile(string const& fn, double ddval,  float dfval,
-                                        int dival, const char * dsval)
-//	Remplit le ntuple a partir d'un fichier ASCII.
-//	Renvoie le nombre de lignes ajoutees.
-{
-// a faire
-return(0);
-}
-
-
-void  XNTuple::SetSwapPath(char* p) 
-{
-    if(!glob_swp) glob_swp = new char[MAXLEN+1] ; 
-    strncpy(glob_swp, p, MAXLEN) ; 
-}
-
-// 
-// 
-// Interface NTuple 
-// 
-// 
-uint_4 XNTuple::NbLines() const
-{
-    return(NEntry());
-}
-
-uint_4 XNTuple::NbColumns() const
-{
-    return(NVar());
-}
-
-r_8* XNTuple::GetLineD(int n) const 
-{
-    // memcpy() impossible
-    // il faut faire des GetVal 
-    int i;
-    for(i = 0 ; i < mD ; i++) 
-	mVarD[i] = GetDVal(n, i) ; 
-    for(i = 0 ; i < mF ; i++) 
-	mVarD[i+mD] = (double)GetFVal(n, i+mD) ; 
-    for(i = 0 ; i < mI ; i++) 
-	mVarD[i+mD+mF] = (double)GetIVal(n, i+mD+mF) ; 
-    for(i = 0 ; i < mS ; i++) 
-	mVarD[i+mD+mF+mI] = atof(GetSVal(n, i+mD+mF+mI).c_str()) ; 
-    return mVarD ; 
-}
-
-
-r_8  XNTuple::GetCell(int n, int k) const 
-{
-    if( k<0 || k>=(mD+mF+mI+mS) ) return BADVAL ; 
-    if(k<mD) return GetDVal(n,k) ; 
-    if(k<(mF+mD)) return GetFVal(n,k) ; 
-    if(k<(mF+mD+mI)) return GetIVal(n,k) ; 
-    if(k<(mD+mF+mI+mS)) return atof(GetSVal(n,k).c_str()) ; 
-    return BADVAL ; 
-}
-
-
-r_8  XNTuple::GetCell(int n, string const& nom) const 
-{
-    int k = IndexNom(nom.c_str()) ; 
-    if(k<0) return BADVAL ; 
-    if(k<mD) return GetDVal(n,k) ; 
-    if(k<(mF+mD)) return GetFVal(n,k) ; 
-    if(k<(mF+mD+mI)) return GetIVal(n,k) ; 
-    if(k<(mD+mF+mI+mS)) return atof(GetSVal(n,k).c_str()) ; 
-    return BADVAL ; 
-}
-
-string   XNTuple::GetCelltoString(int n, int k) const
-{
-    char buff[32];
-    if(k<0) return (""); 
-    else if(k<mD) 
-      { sprintf(buff, "%g", GetDVal(n,k)); return(buff) ; } 
-    else if(k<(mF+mD)) 
-      { sprintf(buff, "%g", (double)GetFVal(n,k)); return(buff) ; } 
-    else if(k<(mF+mD+mI)) 
-      { sprintf(buff, "%d", GetIVal(n,k)); return(buff) ; } 
-    else if(k<(mD+mF+mI+mS)) 
-      return(GetSVal(n,k).c_str()) ; 
-    return("");
-}
-
-void XNTuple::GetMinMax(int k, double& min, double& max)  const
-{
-    min = 9E19 ; max = -9E19 ; 
-    // variables string non traitees 
-    if( k<0 || k>=(mD+mF+mI) ) return ; 
-    
-    min = mMin[k] ; 
-    max = mMax[k] ; 
-    return ; 
-}
-
-
-void XNTuple::GetMinMax(string const & nom, double& min, double& max)   const
-{
-    GetMinMax(IndexNom(nom.c_str()), min, max) ; 
-}
-
-
-int XNTuple::ColumnIndex(string const& nom) const 
-{
-    return IndexNom(nom.c_str()) ; 
-}
-
-
-string XNTuple::ColumnName(int k) const 
-{
-    return NomIndex(k) ; 
-}
-
-
-string XNTuple::VarList_C(const char* nomx) const 
-{
-    string rets = "" ; 
-    rets += "/* double type variables */ \n";
-    // variables double 
-    int i;
-    for(i = 0 ; i < mD ; i++) {
-	if( i>0 && (i%5)==0 ) rets += ";" ; 
-	if( (i%5)==0 ) rets+="\ndouble " ; 
-	else rets += ", " ; 
-	rets += NomIndex(i) ; 
-    }
-    if(mD) rets += ";" ; 
-    
-    // variables float 
-    rets += "/* float type variables */ \n";
-    for(i = 0 ; i < mF ; i++) {
-	if( i>0 && (i%5)==0 ) rets += ";" ; 
-	if( (i%5)==0 ) rets+="\ndouble " ; 
-	else rets += ", " ; 
-	rets += NomIndex(i+mD) ; 
-    }
-    if(mF) rets += ";" ; 
-    
-    // variables int 
-    rets += "/* int type variables */ \n";
-    for(i = 0 ; i < mI ; i++) {
-	if( i>0 && (i%5)==0 ) rets += ";" ; 
-	if( (i%5)==0 ) rets+="\ndouble " ; 
-	else rets += ", " ; 
-	rets += NomIndex(i+mD+mF) ; 
-    }
-    if(mI) rets += ";" ; 
-    
-    // variables string
-    rets += "/* string type variables */ \n"; 
-    for(i = 0 ; i < mS ; i++) {
-	if( i>0 && (i%5)==0 ) rets += ";" ; 
-	if( (i%5)==0 ) rets+="\ndouble " ; 
-	else rets += ", " ; 
-	rets += NomIndex(i+mD+mF+mI) ; 
-    }
-    rets += "; \n" ; 
-
-    if(nomx) {
-	char buff[256] ; 
-	for(i = 0 ; i < mNVars ; i++) {
-	    sprintf(buff, "%s=%s[%d]; ", NomIndex(i).c_str(), nomx, i) ; 
-	    rets+=buff ; 
-	    if( (i%3 == 0) && (i>0) ) rets += "\n" ; 
-	}
-    }
-    return rets ; 
-}
-
-
-string XNTuple::LineHeaderToString() const 
-{
-    char buff[32];
-    string rets=" Num    ";
-    for(int i=0; i<mNVars; i++) {
-	sprintf(buff, "%8s ", NomIndex(i).c_str() );
-	rets += buff;
-    }
-    rets += '\n';
-    return(rets);
-
-}
-
-
-string XNTuple::LineToString(int n) const 
-{
-    char buff[32];
-    double* val;
-    val = GetLineD(n);
-    sprintf(buff,"%6d: ",n); 
-    string rets=buff;
-    int i;
-    for(i=0; i<(mD+mF+mI); i++) {
-	sprintf(buff, "%8.3g ", val[i]);
-	rets += buff;
-    }
-    
-    for(i = mD+mF+mI ; i < mNVars ; i++) {
-	sprintf(buff, "%8s ", GetSVal(n,i).c_str() ) ; 
-	rets += buff ; 
-    }
-    
-    rets += '\n';
-    return(rets);
-}
-
-
-void   ObjFileIO<XNTuple>::WriteSelf(POutPersist& ppout) const 
-{
-  if (dobj == NULL)   return;
-//  On ecrit 3 uint_4 .... 
-//  0: Numero de version,  1 : non nul -> has info,  2 : reserve
-  uint_4 itab[3];
-  itab[0] = 1;  // Numero de version a 1
-  itab[1] = itab[2] = 0;
-  if (dobj->mInfo)  itab[1] = 1;
-  ppout.Put(itab,3);
-  if (dobj->mInfo)  if (dobj->mInfo)  ppout << (*(dobj->mInfo));
-
-  // variables internes 
-  ppout.PutI4(dobj->mNEnt) ; 
-  ppout.PutI4(dobj->mNBlk) ; 
-  ppout.PutI4(dobj->mBlkSz) ; 
-  ppout.PutI4(dobj->mBlk) ; 
-  ppout.PutI4(dobj->mOff) ; 
-  ppout.PutI4(dobj->mMaxBlk) ; 
-  ppout.PutI4(dobj->mStrSz) ; 
-  ppout.PutI4(dobj->mD) ; 
-  ppout.PutI4(dobj->mF) ; 
-  ppout.PutI4(dobj->mI) ; 
-  ppout.PutI4(dobj->mS) ; 
-  ppout.PutI4(dobj->mNVars) ; 
-    
-  // Noms 
-  ppout.PutBytes(dobj->mNames, dobj->mNVars*(LENNAME+1)) ; 
-
-  // MinMax 
-  ppout.PutR8s(dobj->mMin, (dobj->mD+dobj->mF+dobj->mI)) ; 
-  ppout.PutR8s(dobj->mMax, (dobj->mD+dobj->mF+dobj->mI)) ; 
-    
-  // Ecriture blocs N'ecrire que si datas existent 
-  for(int i = 0 ; i < dobj->mNBlk ; i++) {
-    // si bloc swappe, on le relit en douce ... 
-    if( dobj->ptr[i]->sw )  dobj->read_blk(dobj->ptr[i]) ; 
-    ppout.PutR8s(dobj->ptr[i]->ddata, dobj->mD*dobj->mBlkSz) ; 
-    ppout.PutR4s(dobj->ptr[i]->fdata, dobj->mF*dobj->mBlkSz) ; 
-    ppout.PutI4s(dobj->ptr[i]->idata, dobj->mI*dobj->mBlkSz) ; 
-    ppout.PutBytes(dobj->ptr[i]->sdata, dobj->mS*dobj->mBlkSz*(dobj->mStrSz+1)) ; 
-    if(dobj->ptr[i]->sw) dobj->ptr[i]->free() ; 
-    }
-}
-
-
-void   ObjFileIO<XNTuple>::ReadSelf(PInPersist& ppin) 
-{
-  if (dobj == NULL) dobj = new XNTuple;
-  else    dobj->clean() ; 
-//  On lit 3 uint_4 .... 
-//  0: Numero de version,  1 : non nul -> has info,  2 : reserve
-  uint_4 itab[3];
-  ppin.Get(itab,3);
-  if (itab[1] != 0) { // Lecture eventuelle du DVList Info
-    if (dobj->mInfo == NULL)  dobj->mInfo = new DVList;
-    ppin >> (*(dobj->mInfo));
-  }
-
-  ppin.GetI4(dobj->mNEnt) ; 
-  ppin.GetI4(dobj->mNBlk) ; 
-  ppin.GetI4(dobj->mBlkSz) ; 
-  ppin.GetI4(dobj->mBlk) ; 
-  ppin.GetI4(dobj->mOff) ; 
-  ppin.GetI4(dobj->mMaxBlk) ; 
-  ppin.GetI4(dobj->mStrSz) ; 
-  ppin.GetI4(dobj->mD) ; 
-  ppin.GetI4(dobj->mF) ; 
-  ppin.GetI4(dobj->mI) ; 
-  ppin.GetI4(dobj->mS) ; 
-  ppin.GetI4(dobj->mNVars) ; 
-    
-  // Noms 
-  dobj->mNames = new char[dobj->mNVars*(LENNAME+1)] ;
-  dobj->mVarD = new double[dobj->mNVars]; 
-  ppin.GetBytes(dobj->mNames, dobj->mNVars*(LENNAME+1)) ; 
-
-  // MinMax 
-  dobj->mMin = new r_8[dobj->mD+dobj->mF+dobj->mI] ; 
-  ppin.GetR8s(dobj->mMin, dobj->mD+dobj->mF+dobj->mI) ; 
-  dobj->mMax = new r_8[dobj->mD+dobj->mF+dobj->mI] ; 
-  ppin.GetR8s(dobj->mMax, dobj->mD+dobj->mF+dobj->mI) ; 
-    
-  // lecture Blocs 
-  int nblk = dobj->mNBlk ; 
-  dobj->mBlk = -1 ; dobj->mNBlk = 0 ; 
-  for(int i = 0 ; i < nblk ; i++) {
-    dobj->add_blk() ; dobj->mBlk++ ; dobj->mNBlk++ ; 
-    ppin.GetR8s(dobj->ptr[i]->ddata, dobj->mD*dobj->mBlkSz) ; 
-    ppin.GetR4s(dobj->ptr[i]->fdata, dobj->mF*dobj->mBlkSz) ; 
-    ppin.GetI4s(dobj->ptr[i]->idata, dobj->mI*dobj->mBlkSz) ; 
-    ppin.GetBytes(dobj->ptr[i]->sdata, dobj->mS*dobj->mBlkSz*(dobj->mStrSz+1)) ; 
-  } 
-}
-
-#ifdef __CXX_PRAGMA_TEMPLATES__
-#pragma define_template ObjFileIO<XNTuple>
-#endif
-
-#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
-template class ObjFileIO<XNTuple>;
-#endif
Index: trunk/SophyaLib/NTools/xntuple.h
===================================================================
--- trunk/SophyaLib/NTools/xntuple.h	(revision 753)
+++ 	(revision )
@@ -1,165 +1,0 @@
-// -*- C++ -*- 
-// 
-// XNTuple 
-// 
-// N. Regnault 03/98 
-//             07/99 (NTupleInterface)
-// 
-// 
-#ifndef XNTUPLE_H_SEEN
-#define XNTUPLE_H_SEEN
-
-#include "objfio.h"
-
-#include <string.h>
-#include <vector>
-#include <list>
-#include <map>
-
-#include "ntupintf.h"
-#include "ppersist.h"
-#include "dvlist.h"
-
-namespace SOPHYA {
-// 
-// Bloc de donnees 
-// 
-struct NTBlk
-{
-    NTBlk(int ndvar, int nfvar, int nivar, int nsvar, int strsz, int sz) ; 
-    ~NTBlk() ; 
-    
-    void free() ;     // ne libere que les zones de donnees 
-
-    int      sw ;     // swappe ? 
-    long int swoff ;  // offset dans fichier de swap 
-    float*   fdata ;  
-    double*  ddata ;  
-    int_4*   idata ;  
-    char*    sdata ;  
-} ; 
-
-
-class XNTuple : public AnyDataObj , public NTupleInterface {
-public:
-  //    enum {classId = ClassId_XNTuple };
-
-    XNTuple() ; 
-    XNTuple(int ndvar, int nfvar, int nivar, int nsvar, 
-	    char** vnames, 
-	    int blk=512, int maxblk=100, int strsz=30) ; 
-    XNTuple(XNTuple const& nt) ; 
-    XNTuple(string const & flnm); 
-    virtual           ~XNTuple();
-    
-    void              Fill(double* d_data, float* f_data, int* i_data, char** sdata);
-    
-    inline int_4      NEntry() const { return mNEnt ; } 
-    inline int_4      NDVar() const  { return mD ; } 
-    inline int_4      NFVar() const  { return mF ; } 
-    inline int_4      NIVar() const  { return mI ; } 
-    inline int_4      NSVar() const  { return mS ; } 
-    inline int_4      NVar() const   { return mNVars ; } 
-    int               IndexNom(char const* nom) const ; 
-    string            NomIndex(int k) const ; 
-    
-    double            GetDVal(int i, int k) const ; 
-    float             GetFVal(int i, int k) const ; 
-    int               GetIVal(int i, int k) const ; 
-    string            GetSVal(int i, int k) const ; 
-    //    MuTyV             GetVal(char const* nom) ; 
-    
-    void              Copy(XNTuple const& nt) ; 
-    inline XNTuple&   operator=(XNTuple const& nt) { Copy(nt) ; return *this ; } 
-    
-    void              Print(int num, int nmax=1) const ;
-    void              Show(ostream& os) const ; 
-    inline void       Show() const { Show(cout) ; } 
-
-    DVList&           Info() ; 
-
-// Remplissage depuis fichier ASCII 
-   int		      FillFromASCIIFile(string const& fn, double ddfval=0., float dfval=0.,
-                                        int dival=0, const char * dsval="");
-        
-    static  void      SetSwapPath(char* p) ; 
-    string&           SwapPath() { return swp ; } 
-    
-// Declaration de l interface NTuple
-    virtual uint_4    NbLines() const ;
-    virtual uint_4    NbColumns() const ;
-    virtual r_8 *     GetLineD(int n) const ;
-    virtual r_8	      GetCell(int n, int k) const ;
-    virtual r_8	      GetCell(int n, string const & nom) const ;
-    virtual string    GetCelltoString(int n, int k) const ;
-    virtual void      GetMinMax(int k, double& min, double& max)   const ; 
-    virtual void      GetMinMax(string const & nom, double& min, double& max)   const ; 
-    virtual int       ColumnIndex(string const & nom)  const ;
-    virtual string    ColumnName(int k) const;
-    virtual string    VarList_C(const char* nomx=NULL) const ;
-    virtual string    LineHeaderToString() const;
-    virtual string    LineToString(int n) const;  
-
-//  Pour la gestion de persistance
-    friend class ObjFileIO<XNTuple> ;
-   
-private:
-    void    clean();    // remet tout a zero 
-    void    swap() const ;    // swappe le + ancien blk en memoire 
-    void    read_blk(NTBlk*) const ;  // relit le bloc 
-    void    write_blk(NTBlk*) const ; // ecrit un bloc 
-    void    get_blk(int i) const ;  // == unswap() 
-    void    add_blk() ; // ajout d'un nouveau bloc 
-    
-    int_4   mNEnt ;   // nb total d'entrees 
-    int_4   mNBlk ;   // nb total de blocs 
-    mutable int_4   mNSwBlk ; // nb blocs swappes 
-    int_4   mBlkSz ;  // taille bloc 
-    int_4   mBlk ;    // bloc courant en ecriture 
-    int_4   mOff ;    // offset dans bloc en ecriture ; pointe sur le premiere case vide 
-    int_4   mMaxBlk ; // nb max de blocs autorises en memoire 
-    int_4   mStrSz ;  // taille des variables char** 
-    int_4   mNVars ;  // mD + mF + mI + mS 
-    int_4   mD, mF, mI, mS ; // nb variables de chaque type 
-    
-    r_8* mVarD, *mMin, *mMax ; 
-    
-    // 
-    // Noms + Prefix --> indiquer le type 
-    // 
-    //    char* mDNames, *mFNames, *mINames, *mSNames ; 
-    char* mNames ; 
-    //    typedef less<string> SCmp ; 
-    //    map<string,int,SCmp> mNames ; 
-    
-    // Donnees 
-    mutable vector<NTBlk*> ptr ; 
-    mutable list<NTBlk*> sw ; // liste --> swap() 
-
-    mutable FILE* swf ; // fichier --> swap 
-    mutable char* swf_name ; 
-    string  swp ; // swap_path 
-
-    DVList* mInfo;        // Infos (variables) attachees au NTuple
-
-    static  char*  glob_swp ; // swap_path global 
-    static  long int NbNT ; 
-}; 
-
-
-inline ostream& operator << (ostream& s, XNTuple const & nt)
-  {  nt.Show(s);  return(s);  }
-
-inline POutPersist& operator << (POutPersist& os, XNTuple & obj)
-{ ObjFileIO<XNTuple> fio(&obj);  fio.Write(os);  return(os); }
-inline PInPersist& operator >> (PInPersist& is, XNTuple & obj)
-{ ObjFileIO<XNTuple> fio(&obj);  fio.Read(is);  return(is); }
-
-// Classe pour la gestion de persistance
-// ObjFileIO<XNTuple>
-
-
-} // namespace SOPHYA
-
-#endif
-
