Index: /trunk/Cosmo/RadioBeam/brsrc.h
===================================================================
--- /trunk/Cosmo/RadioBeam/brsrc.h	(revision 3164)
+++ /trunk/Cosmo/RadioBeam/brsrc.h	(revision 3165)
@@ -27,5 +27,5 @@
   // Generation d'une liste de source aleatoirement reparties en freq,angX,angY
   // @ lambda ~ 0.5 m et D = 50 m , limite de diffraction ~ pi/300
-  BRSourceGen(int ns, double maxangXrad=M_PI/3., double maxangYrad=M_PI/500.,
+  BRSourceGen(int ns, double maxangXrad=M_PI/3., double maxangYrad=M_PI/60.,
 	      double minfreq=0.05, double minamp=0.3, double maxamp=1.5);
 
Index: /trunk/Cosmo/RadioBeam/recbeam.pic
===================================================================
--- /trunk/Cosmo/RadioBeam/recbeam.pic	(revision 3164)
+++ /trunk/Cosmo/RadioBeam/recbeam.pic	(revision 3165)
@@ -1,15 +1,12 @@
-### Script piapp pour faire tourner le programme de simulation 
+### Script piapp pour afficher les resultats du programme 
 ### de reconstruction de beam par la technique de double FFT
 ###  Reza , Sep 2006
-#  Le code (2 classes) se trouve dans mbeamcyl.h mbeamcyl.cc
-#  et une classe auxiliaire brsrc.h brsrc.cc 
-#  Classe  MultiBeamCyl et la classe utilitaire BRSourceGen
-# --------------------
+# ------------------------------------------
+
+
 # 0/ Verification, modif des parametres
-#  Modifier si besoin le code dans trecbeam.cc qui instancie
-#  les classes (MultiBeamCyl en particulier) avec le parametres
-#  necessaires (nb de recepteurs, nb d'echantillons ...) 
-#  Avant de faire la simulation et la reconstruction de beam
-
+#  Modifier si besoin le code dans treccyl.cc et faire ensuite make
+csh> make 
+# Le programme se trouve dans Objs/treccyl 
 # 1/ Faire tourner le programme - reconstruction plan X-freq (en dehors de piapp)
 Objs/treccyl X onecyl.ppf
@@ -35,11 +32,18 @@
 
 # 3/ Faire tourner le programme - reconstruction cube X-Y-freq (en dehors de piapp)
-Objs/treccyl XY ncyl.ppf
+Objs/treccyl XY12 n12cyl.ppf
+OU 
+Objs/treccyl XY5 n5cyl.ppf
 
 # 4/ Affichage resultats
 delobjs *
-openppf ncyl.ppf
+openppf n12cyl.ppf
+OU 
+openppf n5cyl.ppf
+
 listobjs
 
+## Pour afficher les plans reconstruits (angX-freq) sur les cylindres 0 , 3 avec les sources
+## ATTENTION, si on change les parametres, la conversion angle->num pixel doit etre adapte
 disp recsrcplane0 'lut=sqrt,0.,0.1 invy grey32 win'
 plot2dw ntsrc sin(angrad)*freq*0.25*256+128 freqred*512*2 amp 1 'nsta same red marker=circle,7'
@@ -47,12 +51,14 @@
 plot2dw ntsrc sin(angrad)*freq*0.25*256+128 freqred*512*2 amp 1 'nsta same red marker=circle,7'
 
+## Pour afficher trois plans (angX-angY) avec les sources, autour des trois frequences des sources 
 zone 1 3
-disp recXYf0 'zoomx2 grey32 lut=sqrt,0.,1'
-plot2dw ntsrc sin(angrad)*freq*0.25*256+128 sin(angyrad)*freq*0.25*21+10  amp fabs(freqred-0.1)<0.01 'nsta same red marker=circle,7'
-disp recXYf1 'zoomx2 grey32 lut=sqrt,0.,1'
-disp recXYf2 'zoomx2 grey32 lut=sqrt,0.,1'
+disp recXYf0 'zoomx2 invy grey32 lut=sqrt,0.,1.5'
+plot2dw ntsrc sin(angrad)*freq*0.25*256+128 600.*angyrad/M_PI+10  amp fabs(freqred-0.1)<0.01 'nsta same red marker=circle,7'
+disp recXYf1 'zoomx2 invy grey32 lut=sqrt,0.,1.5'
+plot2dw ntsrc sin(angrad)*freq*0.25*256+128 600.*angyrad/M_PI+10  amp fabs(freqred-0.27)<0.01 'nsta same red marker=circle,7'
+disp recXYf2 'zoomx2 invy grey32 lut=sqrt,0.,1.5'
+plot2dw ntsrc sin(angrad)*freq*0.25*256+128 600.*angyrad/M_PI+10  amp fabs(freqred-0.38)<0.01 'nsta same red marker=circle,7'
 
-
-
+## On peut aussi extraire une coupe angX-angY de la boite 3D reconstruit
 objaoper recsrcbox slicexy 101
 set cobj /home/slicexy_101
Index: /trunk/Cosmo/RadioBeam/treccyl.cc
===================================================================
--- /trunk/Cosmo/RadioBeam/treccyl.cc	(revision 3164)
+++ /trunk/Cosmo/RadioBeam/treccyl.cc	(revision 3165)
@@ -21,8 +21,16 @@
 #include "mbeamcyl.h"
 
+/* 
+   Projet BAORadio / HSHS
+   Programme de simulation pour reconstruction de lobe radio.
+   programme principal de test
+
+   R. Ansari - LAL      Jan 2007
+
+*/
 
 // Declaration des fonctions de ce fichier
 static int test1cyl(string& ppfname);
-static int testmulticyl(string& ppfname);
+static int testmulticyl(string& ppfname, int ncyl=5);
 
 //-----------------------------------------------------------
@@ -33,4 +41,9 @@
 static double freq0 = 2.;  // frequence de base
 static double da = 0.25;     // pas des antennes le long du cylindre
+// ATTENTION : les parametres suivants sont relies a MR/da
+static double maxangX = M_PI/3.; // angle max en X ( +/- )
+static double maxangY = M_PI/60.; // angle max en Y ( +/- )
+static int nsrcmax = 50;  // Nb total de sources - en un plan
+
 static double snoise = 1.0;  // sigma du bruit 
 static double tjit = 0.05;   // sigma du jitter en temps
@@ -56,18 +69,21 @@
 string ppfname = "treccyl.ppf";
 int act = 1;
+int ncyl = 5; 
 if (narg < 3) {
   cout << "Usage: treccyl act ppfname [PrtLev=0] \n"
-       << "  act= X ou XY  , ppfname=  treccyl.ppf par defaut" << endl;
+       << " -act= X ou XY5 ou XY12  (5 ou 12 cylindres) \n"
+       << " -ppfname=  treccyl.ppf par defaut" << endl;
   return 1;
 }
-if (strcmp(arg[1],"XY") == 0) act = 2;
+if (strcmp(arg[1],"XY5") == 0) { act = 2;  ncyl = 5; }
+else if (strcmp(arg[1],"XY12") == 0) { act = 2;  ncyl = 12; }
 if (narg > 2)  ppfname = arg[2];
 if (narg > 3)  prtlevel = atoi(arg[3]);
 
 int rc = 0;
+cout << ">>>> treccyl : " << arg[1] << " PPFName=" << ppfname << endl;
 try {
-  if (act == 2) rc = testmulticyl(ppfname);
+  if (act == 2) rc = testmulticyl(ppfname, ncyl);
   else rc = test1cyl(ppfname);
-  cout << "treccy/Info - FIN  " << endl;
 }
   catch (PThrowable& exc) {
@@ -85,5 +101,6 @@
   } 
 
- return rc;
+cout << ">>>> treccyl ------- FIN ----------- Rc=" << rc << endl;
+return rc;
 }
 
@@ -95,5 +112,5 @@
   // BRSourceGen sg;
   int nsrc = 60; 
-  BRSourceGen sg(nsrc);
+  BRSourceGen sg(nsrcmax, maxangX, 0.);
   //  sg.WritePPF(string("brsrc1.ppf"));
 
@@ -119,4 +136,6 @@
   cout << "treccy/test1cyl:  signal vectors OK " << endl;
   PrtTim("test1cyl:[1] ");
+  
+  cout << "--- treccy/test1cyl: Saving to PPF file " << ppfname << endl;
 
   POutPersist po(ppfname);
@@ -145,6 +164,8 @@
 
 //--- Fonction de test : reconstruction cube AngX-AngY-Frequence (multi-cylindre)
-int testmulticyl(string& ppfname)
+int testmulticyl(string& ppfname, int ncyl)
 {
+
+  if ((ncyl != 5) && (ncyl != 12)) ncyl = 5;
 
   // BRSourceGen sg;
@@ -156,16 +177,19 @@
   
   
-  cout << "treccy/testmulticyl: BRSourceGen sg([frq=0.1,0.27,0.38], " << nsf << ")" << endl;
-  BRSourceGen sg(frq, nsf, M_PI/3, M_PI/60);
-  /*
+  cout << "testmulticyl: BRSourceGen sg([frq=0.1,0.27,0.38], " << nsf 
+       << "," << maxangX << "," << maxangY << ")" << endl;
+  BRSourceGen sg(frq, nsf, maxangX, maxangY);
+  
   int is;
-  for(is=0; is<nsf; is++)     sg.angY(is) = 0.;
-  for(is=nsf; is<2*nsf; is++)     sg.angY(is) = M_PI/30.;
-  for(is=2*nsf; is<3*nsf; is++)     sg.angY(is) = -M_PI/30.;
-  */
+  double fay[6] = {-0.7,-0.5,0.,0.,0.5,0.7};
+  for(is=0; is<3*nsf; is++) {
+    int ism = is%nsf;
+    sg.angX(is) = maxangX*(ism-2.5)/3.;
+    sg.angY(is) = maxangY*fay[ism];
+  }
   // sg.WritePPF(string("brsrcm.ppf"));
   // BRSourceGen  sg(string("brsrcm.ppf"));
-  cout << "=== testmulticyl: BRSourceGen NbSrc= " << sg.NbSources() 
-       << " NbRecep=" << MR << " NSamples=" << NE << endl;
+  cout << "=== testmulticyl: NbSrc= " << sg.NbSources() 
+       << " NbRecep=" << MR << " NSamples=" << NE << " NCyl=" << ncyl << endl;
   if (prtlevel > 1)  sg.Print(cout);
   
@@ -179,15 +203,21 @@
   mcyl.SetGains(gmean, gsig, nantgz);
 
-  /*
-  for(int kkc=0; kkc<12; kkc++) 
-    mcyl.AddCylinder(5.*kkc);
-  */
- 
-  mcyl.AddCylinder(0.);
-  mcyl.AddCylinder(5.);
-  mcyl.AddCylinder(15.);
-  mcyl.AddCylinder(35.);
-  mcyl.AddCylinder(65.);
- 
+  if (ncyl == 12) {
+    cout << " --- testmulticyl/ NCyl= " << ncyl << " posY=0 ... " << (ncyl-1)*5. 
+	 << " (EqualSpacing)" << endl;
+    for(int kkc=0; kkc<12; kkc++) {
+      cout << "..." << kkc << " - mcyl.AddCylinder(posY= " << 5.*kkc << " )" << endl;
+      mcyl.AddCylinder(5.*kkc);
+    }
+  }
+  else {
+    cout << " --- testmulticyl/ NCyl= " << ncyl << " posY=0 ... 55 (IrregularSpacing)" << endl;
+    double posyc[5] = {0.,5.,15.,35.,55.};
+    for(int kkc=0; kkc<5; kkc++) {
+      cout << "..." << kkc << " - mcyl.AddCylinder(posY= " << posyc[kkc] << " )" << endl;
+      mcyl.AddCylinder(posyc[kkc]);
+    }
+  }
+
   mcyl.SetSources(sg);
   
@@ -195,6 +225,7 @@
 
   //  mcyl.ReconstructCylinderPlaneS(true);
-  mcyl.ReconstructSourceBox(10, M_PI/600.);
-
+  mcyl.ReconstructSourceBox(10, maxangY/10.);
+
+  cout << "--- treccy/testmulticyl: Saving to PPF file " << ppfname << endl;
   POutPersist po(ppfname);
 
