Index: trunk/SophyaLib/NTools/perandom.cc
===================================================================
--- trunk/SophyaLib/NTools/perandom.cc	(revision 2870)
+++ trunk/SophyaLib/NTools/perandom.cc	(revision 3075)
@@ -6,25 +6,24 @@
 #include <iostream>
 
+
 ////////////////////////////////////////////////////////////////////////////
-//++
-// Class	FunRan
-// Lib  Outils++ 
-// include	perandom.h
-//
-//	Tirage aleatoire sur un histogramme 1D.
-//--
-
-//++
+/*!
+  \class SOPHYA::FunRan
+  \ingroup NTools
+  Classe for generating random variables from 1D function
+*/
+
+
+/********* Methode *********/
+/*! Createur. f is a probability density function (PDF).
+ Le tirage aleatoire est fait sur un histogramme
+ Histo(xMin,xMax,nBin) (voir convention dans Histo).
+ Chaque bin de l'histogramme contient la valeur de la PDF
+ au centre du bin.
+ Les valeurs retournees sont les valeurs du centre des bins.
+ Si binw est la largeur du bin, les valeurs retournees
+ vont de xmin+binw/2 a xmax-binw/2.
+*/
 FunRan::FunRan(FunRan::Func f, r_8 xMin, r_8 xMax, int_4 nBin)
-//
-//	Createur. f is a probability density function (PDF).
-// Le tirage aleatoire est fait sur un histogramme
-// Histo(xMin,xMax,nBin) (voir convention dans Histo).
-// Chaque bin de l'histogramme contient la valeur de la PDF
-// au centre du bin.
-// Les valeurs retournees sont les valeurs du centre des bins.
-// Si binw est la largeur du bin, les valeurs retournees
-// vont de xmin+binw/2 a xmax-binw/2.
-//--
 : Histo(xMin,xMax,nBin)
 {
@@ -42,11 +41,10 @@
 }
 
-//++
+/********* Methode *********/
+/*! Createur. tab is a probability density function.
+The return random values will be between 0 and nBin-1.
+See FunRan::FunRan(FunRan::Func...) for further comments.
+*/
 FunRan::FunRan(r_8 *tab, int_4 nBin)
-//
-//	Createur. tab is a probability density function
-// The return random values will be between 0 and nBin-1
-// See FunRan::FunRan(FunRan::Func...) for further comments.
-//--
 : Histo(-0.5,nBin-0.5,nBin)
 {
@@ -63,12 +61,11 @@
 }
 
-//++
+/********* Methode *********/
+/*! Createur. tab is a probability density function
+The content of tab is identified has the content of
+an Histogram define by Histo(xMin,xMax,nBin).
+See FunRan::FunRan(FunRan::Func...) for further comments.
+*/
 FunRan::FunRan(r_8 *tab, int_4 nBin, r_8 xMin, r_8 xMax)
-//
-//	Createur. tab is a probability density function
-// The content of tab is identified has the content of
-// an Histogram define by Histo(xMin,xMax,nBin).
-// See FunRan::FunRan(FunRan::Func...) for further comments.
-//--
 : Histo(xMin,xMax,nBin)
 {
@@ -85,10 +82,10 @@
 }
 
-//++
-//	Createur.
-// If pdf=true, h is a probability density fonction.
-// If pdf=false, h is a distribution function (not necessarly normalized to 1).
-// See FunRan::FunRan(FunRan::Func...) for further comments.
-//--
+/********* Methode *********/
+/*! Createur.
+If pdf=true, h is a probability density fonction.
+If pdf=false, h is a distribution function (not necessarly normalized to 1).
+See FunRan::FunRan(FunRan::Func...) for further comments.
+*/
 FunRan::FunRan(Histo &h, bool pdf)
 : Histo(h)
@@ -107,11 +104,10 @@
 }
 
-//++
+/********* Methode *********/
+/*! Tirage avec retour du numero de bin entre 0 et mBins-1.
+It returns the first bin whose content is greater or equal
+to the random uniform number (in [0,1])
+*/
 int_4 FunRan::BinRandom()
-//
-//	Tirage avec retour du numero de bin entre 0 et mBins-1.
-// It returns the first bin whose content is greater or equal
-// to the random uniform number (in [0,1])
-//--
 {
  // recherche du premier bin plus grand ou egal a z
@@ -121,9 +117,7 @@
 }
 
-//++
+/********* Methode *********/
+/*! Tirage avec retour abscisse du bin non interpole. */
 r_8 FunRan::Random()
-//
-//	Tirage avec retour abscisse du bin non interpole.
-//--
 {
  r_8 z=drand01();
@@ -138,17 +132,13 @@
 
 ////////////////////////////////////////////////////////////////////////////
-//++
-// Class	FunRan2D
-// Lib  Outils++ 
-// include	perandom.h
-//
-//	Tirage aleatoire sur un histogramme 2D.
-//--
-
-//++
+/*!
+  \class SOPHYA::FunRan2D
+  \ingroup NTools
+  Classe for generating random variables from 2D function
+*/
+
+/********* Methode *********/
+/*! Creator for random from a table */
 FunRan2D::FunRan2D(r_8 *tab, int_4 nBinX, int_4 nBinY)
-//
-//	Createur.
-//--
 {
   // Tirage en X, somme sur les Y.
@@ -171,9 +161,7 @@
 }
 
-//++
+/********* Methode *********/
+/*! Creator for random from a table */
 FunRan2D::FunRan2D(r_8 **tab, int_4 nBinX, int_4 nBinY)
-//
-//	Createur.
-//--
 {
   // Tirage en X, somme sur les Y.
@@ -198,4 +186,6 @@
 }
 
+/********* Methode *********/
+/*! Destructor */
 FunRan2D::~FunRan2D()
 {
@@ -208,9 +198,7 @@
 }
 
-//++
+/********* Methode *********/
+/*! Tirage avec retour du numeros de bin. */
 void FunRan2D::BinRandom(int_4& x, int_4& y)
-//
-//	Tirage avec retour du numeros de bin.
-//--
 {
   x = ranX->BinRandom();
@@ -218,10 +206,7 @@
 }
 
-//++
+/********* Methode *********/
+/*! Tirage avec retour abscisse et ordonnee du bin interpole. */
 void FunRan2D::Random(r_8& x, r_8& y)
-//
-//	Tirage avec retour abscisse et ordonnee
-//	du bin interpole.
-//--
 {
   x = ranX->Random();
@@ -229,2 +214,28 @@
   y = ranY[i]->Random();
 }
+
+
+
+/////////////////////////////////////////////////////////////////
+/*
+--- Remarque sur complex< r_8 > ComplexGaussRan(double sig)
+x = r cos(t) tire gaussien: pdf f(x) = 1/(sqrt(2Pi) Sx) exp(-(x-Mx)^2/(2 Sx^2))
+y = r sin(t) tire gaussien: pdf f(y) = 1/(sqrt(2Pi) Sy) exp(-(y-My)^2/(2 Sy^2))
+x,y independants --> pdf f(x,y) = f(x) f(y)
+- On cherche la pdf g(r,t) du module et de la phase
+  (r=sqrt(x^2+y^2,t=atan2(y,x)) --> (x,y): le Jacobien = r
+  g(r,t) = r f(x,y) = r f(x) f(y)
+         = r/(2Pi Sx Sy) exp(-(x-Mx)^2/(2 Sx^2)) exp(-(y-My)^2/(2 Sy^2))
+- Le cas general est complique
+  (cf D.Pelat cours DEA "bruits et signaux" section 4.5)
+- Cas ou "Mx = My = 0" et "Sx = Sy = S"
+  g(r,t) = r/(2Pi S^2) exp(-r^2/(2 S^2))
+  La distribution de "r" est donc:
+    g(r) = Integrate[g(r,t),{t,0,2Pi}]
+         = r/S^2 exp(-r^2/(2 S^2))
+  La distribution de "t" est donc:
+    g(t) = Integrate[g(r,t),{r,0,Infinity}]
+         = 1 / 2Pi  (distribution uniforme sur [0,2Pi[)
+  Les variables aleatoires r,t sont independantes:
+    g(r,t) = g(r) g(t) 
+*/
