Index: trunk/AddOn/TAcq/branap.cc
===================================================================
--- trunk/AddOn/TAcq/branap.cc	(revision 3717)
+++ trunk/AddOn/TAcq/branap.cc	(revision 3724)
@@ -26,4 +26,5 @@
   npaqinzone_=npaqz;
   prtlevel_=0;
+  nthreads_=1;
 }
 
@@ -70,4 +71,8 @@
       ka+=2;
     }
+    else if (strcmp(arg[ka],"-nthr")==0) {
+      nthreads_=atoi(arg[ka+1]);
+      ka+=2;
+    }
     else if (strcmp(arg[ka],"-in")==0) {
       if ((narg-ka)<4)  {
@@ -108,5 +113,6 @@
   cout << " --- BRAnaParam : Reading/Processing BAORadio FITS files parameters " << endl;
   cout << " Usage:  prgname [-act ACT] [-out OutPath] [-nmean NMean] [-zones NZones,nPaqinZone] \n" 
-       << "                 [-nbloc NBloc] [-freq NumFreqMin,NumFreqMax,NBinFreq] [-prtlev lev] \n" 
+       << "                 [-nbloc NBloc] [-freq NumFreqMin,NumFreqMax,NBinFreq] \n" 
+       << "                 [-prtlev lev] [-nthr n] \n" 
        << "         -in Imin,Imax,Istep InPath FiberList [InPath2 FiberList2 InPath3 FiberList3 ...] \n" << endl; 
   if (fgshort) {
@@ -123,4 +129,5 @@
        << " -freq NumFreqMin,NumFreqMax,NBinFreq : Frequency zone and number of bins \n" 
        << " -prtlev lev : Print level (0,1,2...) \n" 
+       << " -nthr n : number of threads for parallel execution (default=1) \n" 
        << " -in : input files/directory definition : \n"
        << "       Imin,Imax,Istep: fits files signalII.fits Imin<=II<=Imax Istep=increment \n" 
Index: trunk/AddOn/TAcq/branap.h
===================================================================
--- trunk/AddOn/TAcq/branap.h	(revision 3717)
+++ trunk/AddOn/TAcq/branap.h	(revision 3724)
@@ -38,4 +38,5 @@
   uint_4 npaqinfile_;    // nombre de paquets dans un fichier p
   int prtlevel_;
+  uint_4 nthreads_;  // Nb de threads pour l'execution parallele 
 };
 
Index: trunk/AddOn/TAcq/brproc.cc
===================================================================
--- trunk/AddOn/TAcq/brproc.cc	(revision 3717)
+++ trunk/AddOn/TAcq/brproc.cc	(revision 3724)
@@ -32,7 +32,7 @@
 /* --Methode-- */
 BRVisibilityCalculator::BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean, 
-					       uint_4 freq1, uint_4 freq2, uint_4 nbfreq)
-  : BRBaseProcessor(memgr), outpath_(outpath), nmean_(nmean), numfreq1_(freq1), numfreq2_(freq2), nbinfreq_(nbfreq),
-    vpdata_(2*memgr.NbFibres())
+					       uint_4 freq1, uint_4 freq2, uint_4 nbfreq, size_t nthr)
+  : BRBaseProcessor(memgr), paralex_(*this, nthr), nparthr_(nthr), outpath_(outpath), nmean_(nmean), 
+    numfreq1_(freq1), numfreq2_(freq2), nbinfreq_(nbfreq), vpdata_(2*memgr.NbFibres())
     // , dtfos_(outpath+"visdt.fits", Fits_Create), visdt_(dtfos_, 1024, true);
 
@@ -100,4 +100,16 @@
   }
   delete[] xnt_;
+}
+
+/* --Methode-- */
+void BRVisibilityCalculator::run()
+{
+  if (nparthr_ > 1) {
+    paralex_.SetParallelTask(*this);
+    cout << " BRVisibilityCalculator::run()/Info : starting ParallelExecutor with nThreads=" 
+	 << paralex_.nThreads() << " ... " << endl;
+    paralex_.start();
+  }
+  return BRBaseProcessor::run();
 }
 
@@ -152,4 +164,36 @@
     moyfc_=moytt_=0.;
   }
+
+  if (nparthr_ > 1)  {  // Execution parallele 
+    int rcpex=paralex_.execute();
+    if (rcpex!=0)  cout << " BRVisibilityCalculator::Process() / Error Rc[paralex_.execute()]=" << rcpex << endl;
+  }
+  else {
+    sa_size_t k=0;
+    for(size_t i=0; i<vpdata_.size(); i++) {
+      for(size_t j=i; j<vpdata_.size(); j++) {
+	TVector< complex<r_4> > vis = vismtx_.Row(k);   k++;
+	for(sa_size_t f=1; f<vis.Size(); f++) {
+	  vis(f) += complex<r_4>((r_4)vpdata_[i][f].realB(), (r_4)vpdata_[i][f].imagB()) * 
+	    complex<r_4>((r_4)vpdata_[j][f].realB(), -(r_4)vpdata_[j][f].imagB());
+	}
+      }
+    }
+  }
+  moyfc_ += curfc_[0];
+  moytt_ += (vpaq_[0].TimeTag()-ttfirst_[0]);
+  if (fgcktt_)  CheckTimeTag();
+  totnbpaq_++;
+  return 0;
+}
+
+/* --Methode-- */
+int BRVisibilityCalculator::execute(int tid)
+{
+  sa_size_t fdelt = vismtx_.NCols()/nparthr_;
+  sa_size_t fdeb = tid*fdelt;
+  sa_size_t ffin = (tid+1)*fdelt;
+  if (fdeb<1) fdeb=1;
+  if ((ffin>vismtx_.NCols())||(tid==(nparthr_-1))) ffin=vismtx_.NCols();
   
   sa_size_t k=0;
@@ -157,5 +201,5 @@
     for(size_t j=i; j<vpdata_.size(); j++) {
       TVector< complex<r_4> > vis = vismtx_.Row(k);   k++;
-      for(sa_size_t f=1; f<vis.Size(); f++) {
+      for(sa_size_t f=fdeb; f<ffin; f++) {
 	vis(f) += complex<r_4>((r_4)vpdata_[i][f].realB(), (r_4)vpdata_[i][f].imagB()) * 
 	  complex<r_4>((r_4)vpdata_[j][f].realB(), -(r_4)vpdata_[j][f].imagB());
@@ -163,9 +207,4 @@
     }
   }
-  
-  moyfc_ += curfc_[0];
-  moytt_ += (vpaq_[0].TimeTag()-ttfirst_[0]);
-  if (fgcktt_)  CheckTimeTag();
-  totnbpaq_++;
   return 0;
 }
Index: trunk/AddOn/TAcq/brproc.h
===================================================================
--- trunk/AddOn/TAcq/brproc.h	(revision 3717)
+++ trunk/AddOn/TAcq/brproc.h	(revision 3724)
@@ -14,4 +14,5 @@
 #include "racqumem.h"
 #include "brbaseproc.h"
+#include "parlex.h"
 #include "sopnamsp.h"
 #include "tvector.h"
@@ -25,13 +26,17 @@
 // Classe de traitement - calcul de visibilite pour n fibres 
 //---------------------------------------------------------------------
-class BRVisibilityCalculator : public BRBaseProcessor {
+class BRVisibilityCalculator : public BRBaseProcessor, ParallelTaskInterface {
 public:	
   BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, 
-			 uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
+			 uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1, size_t nthr=1);
   virtual ~BRVisibilityCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
 
+  virtual void run();
   // Pour activer la verification des timetag
   // Creation / sauvegarde d'une matrice de TimeTag / FrameCounter avec NCols=maxnpaq (nb de paquets/trigger)  
   int ActivateTimeTagCheck(uint_8 maxnpaq);
+  
+  // Methode de la classe ParallelTaskInterface 
+  virtual int    execute(int tid);
 
 protected:
@@ -39,4 +44,7 @@
   virtual int FillVisibTable(double fcm, double ttm); 
   virtual int CheckTimeTag(); 
+
+  ParallelExecutor paralex_;  // Pour l'execution en parallele  
+  size_t nparthr_;
 
   uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes 
Index: trunk/AddOn/TAcq/vismfib.cc
===================================================================
--- trunk/AddOn/TAcq/vismfib.cc	(revision 3717)
+++ trunk/AddOn/TAcq/vismfib.cc	(revision 3724)
@@ -62,5 +62,6 @@
     reader.SetPrintLevel(par.prtlevel_);
 
-    BRVisibilityCalculator proc(mmgr, par.outpath_, par.nmean_, par.freqmin_, par.freqmax_, par.nbinfreq_);
+    BRVisibilityCalculator proc(mmgr, par.outpath_, par.nmean_, par.freqmin_, par.freqmax_, 
+				par.nbinfreq_, par.nthreads_);
     if (par.action_ == "viscktt")  proc.ActivateTimeTagCheck(par.TotalNPaquets());
     FitsCubeWriter wrt(mmgr, par.outpath_, par.nbloc_);
