Index: /trunk/AddOn/TAcq/acqparam_exemple.d
===================================================================
--- /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 4011)
+++ /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 4012)
@@ -113,4 +113,7 @@
 #  Defaut : visicalc 1024  1 1 
 visicalc 5000  2 1 
+#### Passage en mode Time Interval 
+# @visitimeint  deltatime_in_seconds
+visitimeint 0.5 
 ## Activation de remplissage du DataTable des visibilites 
 ## @visidtable 
Index: /trunk/AddOn/TAcq/branap.cc
===================================================================
--- /trunk/AddOn/TAcq/branap.cc	(revision 4011)
+++ /trunk/AddOn/TAcq/branap.cc	(revision 4012)
@@ -17,6 +17,4 @@
   outpath_="./";
   fgfitsout_=false;
-  nmean_=nmean;
-  nbloc_=1;
   imin_=imax_=0;
   istep_=1;
@@ -31,4 +29,10 @@
   prtlevel_=0;
   prtmodulo_=50000;
+
+  nmean_=nmean;
+  fgtimeinterval_=false;
+  timeinterval_=1.;
+  nbloc_=1;
+
   nbcalgrp_=1;
   nthreads_=1;
@@ -77,4 +81,8 @@
       nmean_=atoi(arg[ka+1]);
       ka+=2;
+    }
+    else if (strcmp(arg[ka],"-tmint")==0) {
+      timeinterval_=atoi(arg[ka+1]);
+      fgtimeinterval_=true;  ka+=2;
     }
     else if (strcmp(arg[ka],"-nbloc")==0) {
@@ -224,4 +232,5 @@
        << " -fitsout : Force FITS format for output files  \n"
        << " -nmean NMean: Number of packet used for spectra/visibility computation \n"
+       << " -tmint dtime: Time interval definition (instead of nmean) for spectra/visibility computation \n"
        << " -nbloc NBloc: Number of MemMgr blocs in output file\n"
        << " -zones NZones,NbPaqinZone : Number of Zones and number of paquets in one zone (RAcqMemZoneMgr) \n" 
@@ -287,4 +296,6 @@
   cout << " OutPath= " << outpath_ << (fgfitsout_?" force FITS output":" PPF output") << endl;
   cout << " Action=" << action_ << "  NMean=" << nmean_ << " NBloc=" << nbloc_ << endl;
+  cout << ((fgtimeinterval_)?" Time Interval mode for visi/spectra ":" NPaq Interval mode") 
+       << " TimeInterval=" << timeinterval_ << " seconds " << endl;
   cout << " FreqMin= " << freqmin_ << " FreqMax= " << freqmax_ << " NBinFreq= " << nbinfreq_ << endl;
   if (fgdtpaq_) cout<<  " Fill Per Paquet DadaTable "; 
Index: /trunk/AddOn/TAcq/branap.h
===================================================================
--- /trunk/AddOn/TAcq/branap.h	(revision 4011)
+++ /trunk/AddOn/TAcq/branap.h	(revision 4012)
@@ -34,7 +34,5 @@
   string outpath_;
   bool fgfitsout_;   // true -> force fichier sortie format FITS (defaut PPF)
-  uint_4 nmean_;
-  uint_4 nbloc_;
-  uint_4 imin_, imax_, istep_;
+ uint_4 imin_, imax_, istep_;
   bool rdsamefc_;    // read paquets with same frame counter 
   uint_4 freqmin_, freqmax_, nbinfreq_;
@@ -49,4 +47,10 @@
   long int prtmodulo_; 
 
+  uint_4 nmean_;
+  // definition intervalle de temps (au lieu du nombre de paquet pour spectres moyennes/visibilites 
+  bool fgtimeinterval_;  // true : calcul visibilites/spectres moyens par intervalle de temps (au lieu de nmean)
+  double timeinterval_;  // definition de l'intervalle de temps en secondes pour spectres moyens/visibilites 
+  uint_4 nbloc_;
+ 
   uint_4 nbcalgrp_;    // Nb d'objets/threads dans BRVisCalcGroup 
   uint_4 nthreads_;  // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
Index: /trunk/AddOn/TAcq/brparam.cc
===================================================================
--- /trunk/AddOn/TAcq/brparam.cc	(revision 4011)
+++ /trunk/AddOn/TAcq/brparam.cc	(revision 4012)
@@ -204,4 +204,6 @@
   fgdoVisiC=false;
   nmeanVisiC=1024;
+  fgtimeintervalVisiC=false;
+  timeintervalVisiC=1.;
   nbcalgrpVisiC=1;
   nthrVisiC=1;
@@ -290,5 +292,7 @@
 
   fgdoVisiC=p.fgdoVisiC;           
-  nmeanVisiC=p.nmeanVisiC;         
+  nmeanVisiC=p.nmeanVisiC;  
+  fgtimeintervalVisiC=p.fgtimeintervalVisiC;        
+  timeintervalVisiC=p.timeintervalVisiC;
   nbcalgrpVisiC=p.nbcalgrpVisiC;     
   nthrVisiC=p.nthrVisiC;     
@@ -384,4 +388,8 @@
     nbcalgrpVisiC=conf.IParam("visicalc",1,1);
     nthrVisiC=conf.IParam("visicalc",2,1);
+  }
+  if (conf.HasKey("visitimeint")) {
+    fgtimeintervalVisiC=true;
+    timeintervalVisiC=conf.DParam("visitimeint",0,1.);
   }
   if (conf.HasKey("visidtable"))  fgfdtVisiC=true;
@@ -551,4 +559,6 @@
     os << " Visibility calculation, nbCalGrp=" << nbcalgrpVisiC << " NThr/VisCal=" << nthrVisiC 
        << ((fgfdtVisiC)?" Fill_VisiDTable":" ") << endl;
+    if (fgtimeintervalVisiC) os << " ... VisiCalc TimeIntervalMode : " << timeintervalVisiC << " seconds " << endl;
+    else  os << " ... VisiCalc  NPaq=" << nmeanVisiC  << " IntervalMode " << endl;
     os << " ... VisiCalc FirstPair= " << firstpairVisiC << " NbPairs= " << nbpairsVisiC 
        << ((fgpimpVisiC)?" (Odd-Even visibilities+AutoCorrel only) ":"") << endl;
Index: /trunk/AddOn/TAcq/brparam.h
===================================================================
--- /trunk/AddOn/TAcq/brparam.h	(revision 4011)
+++ /trunk/AddOn/TAcq/brparam.h	(revision 4012)
@@ -206,4 +206,6 @@
   bool fgdoVisiC;           // true -> calcul des visibilites 
   uint_4 nmeanVisiC;        // nombre de paquets moyennes pour les calculs de visibilites 
+  bool fgtimeintervalVisiC;  // true : sauvegarde matrice de visibilites par intervalle de temps
+  double timeintervalVisiC;  // definition de l'intervalle de temps en secondes pour suvegarde de la matrice de visibilites 
   uint_4 nbcalgrpVisiC;     // Nb d'objets/threads dans BRVisCalcGroup 
   uint_4 nthrVisiC;         // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
Index: /trunk/AddOn/TAcq/brviscalc.cc
===================================================================
--- /trunk/AddOn/TAcq/brviscalc.cc	(revision 4011)
+++ /trunk/AddOn/TAcq/brviscalc.cc	(revision 4012)
@@ -28,11 +28,16 @@
 BRVisibilityCalculator::BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean, size_t nthr)
   : BRBaseProcessor(memgr), paralex_(*this, nthr), nparthr_(nthr), 
-    outpath_(outpath), nmean_(nmean), nbcalc_(1), calcid_(0), 
+    outpath_(outpath), nbcalc_(1), calcid_(0), 
     vpdata_(2*memgr.NbFibres()), vpdatar_(2*memgr.NbFibres())
     // , dtfos_(outpath+"visdt.fits", Fits_Create), visdt_(dtfos_, 1024, true);
 {  
   SetFFTData();
+  SetNPaqIntervalMode(nmean);
   DefineRank(1,0);
   SetPPFOutput();
+
+  npaqcumul_=0;
+  moyfc_=moytt_=0.;
+  first_fc_=first_tt_=0;
 
   uint_4 maxnpairs = (2*memgr_.NbFibres()+1)*memgr_.NbFibres();
@@ -57,10 +62,7 @@
   if (nmean_ < 1)  nmean_=1;
 
-  cout << " BRVisibilityCalculator::/Info  nmean=" << nmean_ << endl;
-
   totnbpaq_=0;
   numfile_=0;
   nb_flop_=0.;
-  moyfc_=moytt_=0.;
 
   fgallfibok=NULL;
@@ -272,5 +274,10 @@
        << "]::run() - Starting " << " NFibers=" << memgr_.NbFibres() 
        << " NChan=" << 2*memgr_.NbFibres() << " NPairs=" << nbpairs_ << " First:" << pairst_ << endl;	
-  
+
+  if (fgnpaq_time) 
+    cout << " BRVisibilityCalculator::run()/Info  NPaq=" << nmean_ << " Interval mode for visibility mtrix save" << endl;
+  else 
+    cout << " BRVisibilityCalculator::run()/Info  Time Tnterval (dt=" << dtimemean_ << ") for visibility mtrix save" << endl;
+
   if (nparthr_ < 2)  return BRBaseProcessor::run();
   // Execution multithread parallele
@@ -324,37 +331,10 @@
       }
 
-      if (totnbpaq_%nmean_ == 0) {
-	if (totnbpaq_ > 0) {
-	  moyfc_/=nmean_;
-	  moytt_/=nmean_;
-	  UpdateVisMtxInfo();    // add/update keywords in the Info DVList 
-	  // ATTENTION : Matrice visibilites non moyennee 
-	  char nfile[48];
-	  if (nbcalc_==1) 
-	    sprintf(nfile,"vismtx%d.%s",numfile_,OutFileExtension());
-	  else 
-	    sprintf(nfile,"vismtx_%d_%d.%s",(int)calcid_,numfile_,OutFileExtension());
-	  string flnm=outpath_+nfile;
-	  if (fgfitsout_) {  // Ecriture au format FITS
-	    FitsInOutFile fo(flnm, FitsInOutFile::Fits_Create);
-	    TArray<r_4> arvismtx = ArrCastC2R(vismtx_);
-	    arvismtx.Info()=vismtx_.Info();
-	    fo << arvismtx;
-	  }
-	  else {  // Format PPF 
-	    POutPersist po(flnm);
-	    po << vismtx_;
-	  }
-	  if ((prtlev_>0)&&(numfile_%prtmodulo_==0)) {
-	    cout << numfile_ << "-BRVisCalc[" << calcid_ << "/" << nbcalc_ << "]::run() NPaqProc="
-		 << totnbpaq_ << " TotMegaFLOP=" << (uint_8)TotNbMegaFLOP() << " -> VisibMtx in " << flnm << endl;
-	  }
-	  if (fgvisdt_) FillVisibTable(moyfc_, moytt_);
-	  numfile_++;
-	}
-	vismtx_ = complex<r_4>((r_4)0.,(r_4)0.);
-	moyfc_=moytt_=0.;
-	//	first_tmstamp_.SetNow();  // Current date and time 
-	first_tmstamp_=cts_;  // Current date and time 
+      if ( CheckInterval4VisMtxSave() ) {
+	if ((prtlev_>0)&&(numfile_%prtmodulo_==0)) {
+	  cout << numfile_ << "-BRVisCalc[" << calcid_ << "/" << nbcalc_ << "]::run() NPaqProc="
+	       << totnbpaq_ << " TotMegaFLOP=" << (uint_8)TotNbMegaFLOP() << " -> VisibMtx FileNum=" << numfile_ << endl;
+	}
+	SaveVisibilityMatrix();
       }
 
@@ -378,8 +358,9 @@
 	  moytt_ += (vpaq_[0].TimeTag()-ttfirst_[0]);
 	  if ((fgcktt_)&&(calcid_==0))  CheckTimeTag();
-	  if (totnbpaq_%nmean_ == 0) {
+	  if (npaqcumul_==0) {
 	    first_fc_=curfc_[0];
-	    first_tt_= (vpaq_[0].TimeTag()-ttfirst_[0]);
+	    first_tt_= vpaq_[0].TimeTag();
 	  }
+	  npaqcumul_++;
 	  totnbpaq_++;
 	}
@@ -431,39 +412,10 @@
   }
   
-  if (totnbpaq_%nmean_ == 0) {
-    if (totnbpaq_ > 0) {
-      moyfc_/=nmean_;
-      moytt_/=nmean_;
-      UpdateVisMtxInfo();    // add/update keywords in the Info DVList 
-      // ATTENTION : Matrice visibilites non moyennee 
-      char nfile[48];
-      if (nbcalc_==1) 
-	sprintf(nfile,"vismtx%d.%s",numfile_,OutFileExtension());
-      else 
-	sprintf(nfile,"vismtx_%d_%d.%s",(int)calcid_,numfile_,OutFileExtension());
-      string flnm=outpath_+nfile;
-      if (fgfitsout_) {  // Ecriture au format FITS
-	FitsInOutFile fo(flnm, FitsInOutFile::Fits_Create);
-	TArray<r_4> arvismtx = ArrCastC2R(vismtx_);
-	arvismtx.Info()=vismtx_.Info();
-	fo << arvismtx;
-      }
-      else {  // Format PPF 
-	POutPersist po(flnm);
-	po << vismtx_;
-      }
-      if ((prtlev_>0)&&(numfile_%prtmodulo_==0)) {
-	cout << numfile_ << "-BRVisCalc[" << calcid_ << "/" << nbcalc_ << "]::Process() NPaqProc="
-	     << totnbpaq_ << " TotMegaFLOP=" << (uint_8)TotNbMegaFLOP() << " -> VisibMtx in " << flnm << endl;
-      }
-      if (fgvisdt_) FillVisibTable(moyfc_, moytt_);
-      numfile_++;
-    }
-    vismtx_ = complex<r_4>((r_4)0.,(r_4)0.);
-    moyfc_=moytt_=0.;
-    first_fc_=curfc_[0];
-    first_tt_= (vpaq_[0].TimeTag()-ttfirst_[0]);
-    // first_tmstamp_.SetNow();  // Current date and time 
-    first_tmstamp_=cts_;  // Current date and time 
+  if ( CheckInterval4VisMtxSave() ) {
+    if ((prtlev_>0)&&(numfile_%prtmodulo_==0)) {
+      cout << numfile_ << "-BRVisCalc[" << calcid_ << "/" << nbcalc_ << "]::Process() NPaqProc="
+	   << totnbpaq_ << " TotMegaFLOP=" << (uint_8)TotNbMegaFLOP() << " -> VisibMtx FileNum= " << numfile_ << endl;
+    }
+    SaveVisibilityMatrix();
   }
 
@@ -494,4 +446,5 @@
   }
 
+  npaqcumul_++;
   moyfc_ += curfc_[0];
   moytt_ += (vpaq_[0].TimeTag()-ttfirst_[0]);
@@ -499,4 +452,41 @@
   totnbpaq_++;
   return 0;
+}
+/* --Methode-- */
+void BRVisibilityCalculator::SaveVisibilityMatrix()
+{
+  if (totnbpaq_ > 0) {
+    moyfc_/=npaqcumul_;
+    moytt_/=npaqcumul_;
+    UpdateVisMtxInfo();    // add/update keywords in the Info DVList 
+    // ATTENTION : Matrice visibilites non moyennee 
+    char nfile[48];
+    if (nbcalc_==1) 
+      sprintf(nfile,"vismtx%d.%s",numfile_,OutFileExtension());
+    else 
+      sprintf(nfile,"vismtx_%d_%d.%s",(int)calcid_,numfile_,OutFileExtension());
+    string flnm=outpath_+nfile;
+    if (fgfitsout_) {  // Ecriture au format FITS
+      FitsInOutFile fo(flnm, FitsInOutFile::Fits_Create);
+      TArray<r_4> arvismtx = ArrCastC2R(vismtx_);
+      arvismtx.Info()=vismtx_.Info();
+      fo << arvismtx;
+    }
+    else {  // Format PPF 
+      POutPersist po(flnm);
+      po << vismtx_;
+    }
+    if (fgvisdt_) FillVisibTable(moyfc_, moytt_);
+    numfile_++;
+  }
+  vismtx_ = complex<r_4>((r_4)0.,(r_4)0.);
+  npaqcumul_=0;
+  moyfc_=moytt_=0.;
+  first_fc_=curfc_[0];
+  first_tt_=vpaq_[0].TimeTag();
+  // first_tmstamp_.SetNow();  // Current date and time 
+  first_tmstamp_=cts_;  // Current date and time 
+  
+  return;
 }
 
@@ -512,5 +502,5 @@
   vismtx_.Info().SetComment(ikey,ikdesc);
   ikey="FirstTT";  ikdesc="First TimeTag";
-  vismtx_.Info().SetI(ikey,first_tt_);
+  vismtx_.Info().SetI(ikey,(first_tt_-ttfirst_[0]));
   vismtx_.Info().SetComment(ikey,ikdesc);
   ikey="LastFC";  ikdesc="Last FrameCounter";
@@ -527,5 +517,5 @@
   vismtx_.Info().SetComment(ikey,ikdesc);
   ikey="NPAQSUM";  ikdesc="Number of paquets summed";
-  vismtx_.Info().SetI(ikey,nmean_);
+  vismtx_.Info().SetI(ikey,npaqcumul_);
 }
 
@@ -752,4 +742,16 @@
 }  
 /* --Methode-- */
+void BRVisCalcGroup::SetNPaqIntervalMode(uint_4 nmean)
+{
+  for(size_t i=0; i<viscalcp_.size(); i++)
+    viscalcp_[i]->SetNPaqIntervalMode(nmean);
+}
+/* --Methode-- */
+void BRVisCalcGroup::SetTimeIntervalMode(double dtime)
+{
+  for(size_t i=0; i<viscalcp_.size(); i++)
+    viscalcp_[i]->SetTimeIntervalMode(dtime);
+}  
+/* --Methode-- */
 void BRVisCalcGroup::SetPrintLevel(int lev, uint_8 prtmodulo)
 {
Index: /trunk/AddOn/TAcq/brviscalc.h
===================================================================
--- /trunk/AddOn/TAcq/brviscalc.h	(revision 4011)
+++ /trunk/AddOn/TAcq/brviscalc.h	(revision 4012)
@@ -67,4 +67,10 @@
   // Pour ecrire les fichiers de sortie au format PPF (defaut) 
   inline void SetPPFOutput() { fgfitsout_=false; }
+  // Pour passer en mode nombre de paquet pour sauvegarde matrices visibilites (defaut)
+  inline void SetNPaqIntervalMode(uint_4 nmean=1000)  
+    { fgnpaq_time=true; nmean_=(nmean>0)?nmean:1000; }
+  // Pour passer en mode intervalle en temps pour sauvegarde matrices visibilites - intervalle de temps en secondes 
+  inline void SetTimeIntervalMode(double dtime=1.)
+    { fgnpaq_time=false; dtimemean_=(dtime>1e-6)?dtime:1.; }
 
   // Methode d'execution standard du thread (on redefinit la methode de BRBaseProcessor)
@@ -84,8 +90,20 @@
   virtual void UpdateChanIds(); 
   virtual int Process(); 
+  virtual void SaveVisibilityMatrix();
   virtual void UpdateVisMtxInfo();
   virtual int FillVisibTable(double fcm, double ttm); 
+  inline  bool CheckInterval4Save();  
   virtual int CheckTimeTag(); 
   inline const char* OutFileExtension() { return ((fgfitsout_)?"fits":"ppf"); } 
+ // return true if npaq or time interval elasped to save visibility matrix 
+  inline  bool CheckInterval4VisMtxSave()  
+  {
+    if (npaqcumul_<1) return false;
+    if (fgnpaq_time) 
+      return ((npaqcumul_>=nmean_)?true:false); 
+    else {
+      return (((vpaq_[0].TimeTag()-first_tt_)/1.25e8>=dtimemean_)?true:false);
+    }
+  }
 
   ParallelExecutor paralex_;  // Pour l'execution en parallele  
@@ -93,8 +111,12 @@
 
   bool fgdataraw_;  // true -> donnees provenant du firmware RAW 
-  uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes 
   string outpath_;  // directory pour fichiers de sortie
   uint_4 nbcalc_, calcid_;  // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet  
 
+  //  Definition du mode (type d'intervalle) pour calcul des moyennes 
+  uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes 
+  double dtimemean_;  // Intervalle en temps pour le calcul des moyennes - exprimes en secondes 
+  bool fgnpaq_time;  // true -> utilisation nmean_ comme nb de paquet/spectre, false -> dtimemean_
+
   uint_4 pairst_, nbpairs_;   // Numero de la premiere paire, nombre de paires ( 1 paire= 1 visibilites)
   bool fgpimp_;    //  true -> calculer uniquement visibilities avec no voie pair-impair  
@@ -107,4 +129,5 @@
   bool* fgallfibok;  
 
+  uint_8 npaqcumul_;     // Nb de paquets cumules/moyennes ds la matrice de visibilite 
   double moyfc_, moytt_;  // moyenne des FrameCounter / TimeTag pour chaque matrice de visibilite
   uint_8 first_fc_,first_tt_;  // Valeurs premier FrameCounter / TimeTag pour chaque matrice de visibilite
@@ -167,4 +190,8 @@
   // configuration avec donnees firmware RAW  
   void SetRawData();  
+  // Pour passer en mode nombre de paquet pour sauvegarde matrices visibilites (defaut)
+  void SetNPaqIntervalMode(uint_4 nmean=1000);
+  // Pour passer en mode intervalle en temps pour sauvegarde matrices visibilites 
+  void SetTimeIntervalMode(double dtime=1.);
 
   void SetPrintLevel(int lev=0, uint_8 prtmodulo=10);
Index: /trunk/AddOn/TAcq/mfacq.cc
===================================================================
--- /trunk/AddOn/TAcq/mfacq.cc	(revision 4011)
+++ /trunk/AddOn/TAcq/mfacq.cc	(revision 4012)
@@ -432,4 +432,5 @@
   VCGThr.SetPrintLevel(acpar.prtlevel_, acpar.prtmodulo2_); 
   if (acpar.fgfitsVisiC) VCGThr.SetFitsOutput();
+  if (acpar.fgtimeintervalVisiC)  VCGThr.SetTimeIntervalMode(acpar.timeintervalVisiC);
 
   cout << "mfacq[3] Creating   EthernetReader thread object     " << endl;
Index: /trunk/AddOn/TAcq/vismfib.cc
===================================================================
--- /trunk/AddOn/TAcq/vismfib.cc	(revision 4011)
+++ /trunk/AddOn/TAcq/vismfib.cc	(revision 4012)
@@ -76,5 +76,5 @@
     if (par.action_ == "viscktt")  procg.ActivateTimeTagCheck(par.TotalNPaquets());
     if (par.fgfitsout_) procg.SetFitsOutput();
-
+    if (par.fgtimeinterval_)  procg.SetTimeIntervalMode(par.timeinterval_);
     BRFFTCalculator procfft(mmgr, par.fgsinglechannel_);
 
