Index: /trunk/AddOn/TAcq/branap.cc
===================================================================
--- /trunk/AddOn/TAcq/branap.cc	(revision 3978)
+++ /trunk/AddOn/TAcq/branap.cc	(revision 3979)
@@ -45,4 +45,7 @@
 
   gainfile_="";
+
+  proctimeduration_=9.e9;
+  fgtimeselect_=false;
 }
 
@@ -137,4 +140,13 @@
       ka++;
     }    
+    //-tmproc hh:mm:ss,nseconds
+    else if (strcmp(arg[ka],"-tmproc")==0) {
+      int ah=0,am=0;
+      double as=0, als=0;
+      sscanf(arg[ka+1],"%d:%d:%lg,%lg",&ah,&am,&as,&als);
+      fgtimeselect_=true;  proctimeduration_=als;  
+      proctimestart_.SetHour(ah,am,as); 
+      ka+=2;
+    }
     else if (strcmp(arg[ka],"-gain")==0) {
       gainfile_=arg[ka+1];
@@ -190,5 +202,5 @@
        << "                 [-singlechan] [-twochan] [-fftdata] [-rawdata] \n"
        << "                 [-freqfilter] [-gain filename] [-varcut min,max] [-nband nband,first,last] \n"
-       << "                 [-filldt] [-tspwin wsz,extsz,nfiles] \n" 
+       << "                 [-tmproc hh:mm:ss,nseconds] [-filldt] [-tspwin wsz,extsz,nfiles] \n" 
        << "         -in Imin,Imax,Istep InPath FiberList [InPath2 FiberList2 InPath3 FiberList3 ...] \n" << endl; 
   if (fgshort) {
@@ -218,4 +230,5 @@
        << " -varcut min,max : min-max cut on variance \n" 
        << " -nband nband,first,last: numbers of freq. bands and first and last bands used for cuts \n"
+       << " -tmproc hh:mm:ss,nseconds : processing time window definition \n"
        << " -filldt : force data table filling \n"
        << " -freqfilter : force median filtering on the frequencies \n"
@@ -238,7 +251,14 @@
   bool fgdatafft_in_fits=false;
   bool fgsinglechan_in_fits=false;
-  int rc = DecodeMiniFitsHeader(flnm,paqsize_, npaqinfile_,fgdatafft_in_fits, fgsinglechan_in_fits); 
+  SOPHYA::TimeStamp tmstart;
+  int rc = DecodeMiniFitsHeader(flnm,paqsize_, npaqinfile_,fgdatafft_in_fits, fgsinglechan_in_fits,tmstart); 
   if (!fgforcesingleortwochan_) fgsinglechannel_=fgsinglechan_in_fits;
   if (!fgforceraworfft_) fgdatafft_=fgdatafft_in_fits;
+  if (fgtimeselect_) {
+    int year,month,day; 
+    tmstart.GetDate(year,month,day);
+    proctimestart_.SetDate(year,month,day);
+    proctimeend_.Set(proctimestart_.ToDays()+proctimeduration_/86400.);
+  }
   return rc;
 }
@@ -252,4 +272,8 @@
   cout << " IMin= " << imin_ << " IMax= " << imax_ << " IStep= " << istep_ 
        << ((rdsamefc_)?" SameFrameCounter read mode":" AllOKPaquets read mode ") << endl;
+  if (fgtimeselect_) {
+     cout << " Processing time window, StartTime=" << proctimestart_ << " duration= " << proctimeduration_ 
+	      << " EndTime=" << proctimeend_ << endl;
+  }
   cout << " OutPath= " << outpath_ << (fgfitsout_?" force FITS output":" PPF output") << endl;
   cout << " Action=" << action_ << "  NMean=" << nmean_ << " NBloc=" << nbloc_ << endl;
@@ -274,5 +298,5 @@
 /* --Fonction-- */
 int BRAnaParam::DecodeMiniFitsHeader(const char* filename, uint_4& paqsz, uint_4& npaq, 
-                                     bool& fgdatafft, bool& fgsinglechannel) 
+                                     bool& fgdatafft, bool& fgsinglechannel, SOPHYA::TimeStamp& tmstart) 
 {
   cout << " DecodeMiniFitsHeader - Opening file: " << filename << endl;
@@ -285,4 +309,8 @@
   if (acqmode.substr(0,3)=="fft") fgdatafft=true;
   if (acqmode.find("1c") < acqmode.length()) fgsinglechannel=true;
+  string fkvs=mff.GetKeyValue("DATEOBS");
+  if (fkvs.length()>0)  tmstart.Set(fkvs);
+  fkvs=mff.GetKeyValue("TMSTART");
+  if (fkvs.length()>0) tmstart.Set(fkvs);
   return 0;
 }
Index: /trunk/AddOn/TAcq/branap.h
===================================================================
--- /trunk/AddOn/TAcq/branap.h	(revision 3978)
+++ /trunk/AddOn/TAcq/branap.h	(revision 3979)
@@ -13,4 +13,6 @@
 #include <iostream>
 
+#include "timestamp.h"
+
 class BRAnaParam {  
 public:
@@ -26,5 +28,5 @@
 
   static int DecodeMiniFitsHeader(const char* filename, uint_4& paqsz, uint_4& npaq, 
-                                  bool& fgdatafft, bool& fgsinglechannel);
+                                  bool& fgdatafft, bool& fgsinglechannel, SOPHYA::TimeStamp& tmstart);
 
   vector<string> dirlist_;
@@ -61,4 +63,10 @@
 
   string gainfile_;     // nom du fichier de gain (reponse spectrale)
+
+  // definition fenetre en temps pour le traitement des paquets 
+  SOPHYA::TimeStamp proctimestart_; //  temps de debut de la fenetre
+  SOPHYA::TimeStamp proctimeend_; //  temps de debut de la fenetre
+  double proctimeduration_;  // duree en secondes de la fenetre 
+  bool fgtimeselect_;  // vrai -> selection des paquets dans la fenetre en temps  
 };
 
Index: /trunk/AddOn/TAcq/brbaseproc.cc
===================================================================
--- /trunk/AddOn/TAcq/brbaseproc.cc	(revision 3978)
+++ /trunk/AddOn/TAcq/brbaseproc.cc	(revision 3979)
@@ -96,59 +96,71 @@
     cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run() - Starting " << " NFibers=" 
 	 << memgr_.NbFibres() << endl;	
+    if (fgproctimewin_) cout << " BRBaseProcessor...TimeWindow Start=" << tmstart_ << " End=" << tmend_ << endl;
 
     size_t paqsz=memgr_.PaqSize();
     size_t procpaqsz=memgr_.ProcPaqSize();
+
+    double tstartdays = tmstart_.ToDays(); 
+    double tenddays = tmend_.ToDays(); 
+
     bool fgrun=true;
     while (fgrun) {
       if (stop_) break;
       if (memgr_.GetRunState() == MemZR_Stopped) break;
-      int mid = memgr_.FindMemZoneId(mmact_);  // (MemZA_ProcA);
-      //      Byte* buffg = memgr_.GetMemZone(mid);
+      mid_ = memgr_.FindMemZoneId(mmact_);  // (MemZA_ProcA);
+      //      Byte* buffg = memgr_.GetMemZone(mid_);
       //      if (buffg == NULL) {
-      if (mid < 0) {
+      if (mid_ < 0) {
 	cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR FindMemZoneId(" 
-	     << (int)mmact_ << ") ->" << mid << ") -> NULL" << endl;
+	     << (int)mmact_ << ") ->" << mid_ << ") -> NULL" << endl;
 	setRC(7);      fgrun=false;		
 	break;	
       }
-      cts_=memgr_.GetAuxData(mid)->FillTime();   // get associated date/time (DATEOBS)
+      cts_=memgr_.GetAuxData(mid_)->FillTime();   // get associated date/time (DATEOBS)
       for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
-	fbuff_[fib] = memgr_.GetMemZone(mid,fib);
+	fbuff_[fib] = memgr_.GetMemZone(mid_,fib);
 	if (fbuff_[fib] == NULL) { // cela ne devrait pas arriver 
 	  cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR memgr.GetMemZone(" 
-	       << mid << "," << fib << ") -> NULL" << endl;
+	       << mid_ << "," << fib << ") -> NULL" << endl;
 	  setRC(9);	  fgrun=false;		
 	  break;
 	}
-	if ((procpaqsz>0)&&((fprocbuff_[fib]=memgr_.GetProcMemZone(mid,fib))==NULL)) {   // cela ne devrait pas arriver non plus
+	if ((procpaqsz>0)&&((fprocbuff_[fib]=memgr_.GetProcMemZone(mid_,fib))==NULL)) {   // cela ne devrait pas arriver non plus
 	  cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR memgr.GetProcMemZone(" 
-	       << mid << "," << fib << ") -> NULL" << endl;
+	       << mid_ << "," << fib << ") -> NULL" << endl;
 	  setRC(9);	  fgrun=false;		
 	  break;
 	}
       }
-      for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) {   // boucle sur les paquets d'une zone  
-	fgokallfibers_=true;
-	for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
-	  vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
-	  vfgok_[fib]=vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
-	  if (!vfgok_[fib])  fgokallfibers_=false;
-	  if (procpaqsz>0)    vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz;
-	}
-	//--- Traitement 
-	int rcp=0;
-	if (fgokallfibers_)  {
-	  if (totprocnpaq_==0) {
-	    for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)  {
-	      fcfirst_[fib]=curfc_[fib];
-	      ttfirst_[fib]=vpaq_[fib].TimeTag();
+
+      // On ne traite les paquets que si pas de fenetre en temps ou tmstart_ <= FillTime() <= tmend_
+      double ftmdays = memgr_.GetAuxData(mid_)->FillTime().ToDays();
+      if ((!fgproctimewin_) || ( (ftmdays<=tenddays)&&(ftmdays>=tstartdays) ) ) {
+
+	for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) {   // boucle sur les paquets d'une zone  
+	  fgokallfibers_=true;
+	  for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
+	    vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
+	    vfgok_[fib]=vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
+	    if (!vfgok_[fib])  fgokallfibers_=false;
+	    if (procpaqsz>0)    vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz;
+	  }
+	  //--- Traitement 
+	  int rcp=0;
+	  if (fgokallfibers_)  {
+	    if (totprocnpaq_==0) {
+	      for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)  {
+		fcfirst_[fib]=curfc_[fib];
+		ttfirst_[fib]=vpaq_[fib].TimeTag();
+	      }
 	    }
+	    rcp=Process();
+	    totprocnpaq_++;
 	  }
-	  rcp=Process();
-	  totprocnpaq_++;
-	}
-	//	if (rcp != 0)   { fgrun=false; break; }
-      }  // Fin de boucle sur les paquets 
-      memgr_.FreeMemZone(mid, mmsta_);   // (MemZS_ProcA);
+	  //	if (rcp != 0)   { fgrun=false; break; }
+	}  // Fin de boucle sur les paquets
+      }  // Fin de test pour fenetre en temps de traitement des paquets 
+ 
+      memgr_.FreeMemZone(mid_, mmsta_);   // (MemZS_ProcA);
     } // Fin de boucle sur les zones a traiter 
     //------------------------------------
@@ -198,4 +210,8 @@
     for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)   
       cout << getCurTimeTagSeconds(fib) << "," ;
+    if (prtlev_<4) return 0;
+    cout << " ... FileSequenceNumber[0..." << memgr_.NbFibres()-1 << "]=" ;
+    for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)   
+      cout << memgr_.GetAuxData(mid_)->FileSequenceNumber(fib) << ",";
     cout << endl;
   }
Index: /trunk/AddOn/TAcq/brbaseproc.h
===================================================================
--- /trunk/AddOn/TAcq/brbaseproc.h	(revision 3978)
+++ /trunk/AddOn/TAcq/brbaseproc.h	(revision 3979)
@@ -39,4 +39,13 @@
   { bpnom_=nom;   bpid_=id;  }
 
+  // Definition de la fentre en temps des paquets a traiter - par defaut, traitement de tous les paquets 
+  // Process() est alors appele pour les paquets des zones MemZoneMgr
+  // avec TimeStart <= getObsTime() <= TimeEnd 
+  inline void SetProcTimeWindow(SOPHYA::TimeStamp tmstart, SOPHYA::TimeStamp tmend) 
+  {  tmstart_=tmstart; tmend_=tmend; fgproctimewin_=true; }
+  // Annulation de la definition de la fenetre de traitement en temps
+  inline void ClearProcTimeWindow() 
+  {  fgproctimewin_=false; } 
+
   // get Observation Time ( obtained from MemZoneMgr )
   inline SOPHYA::TimeStamp& getObsTime()  { return cts_; }
@@ -65,4 +74,5 @@
   MemZaction mmact_;    // Definition de l'action sur les paquets (defaut=MemZA_ProcA)
   MemZStatus mmsta_;    // Statut associe a mmact_ (defaut=MemZS_ProcA)
+  int mid_;  // Identificateur zone memoire  courant 
   bool stop_;
   vector<Byte*> fbuff_;      // Vecteur de pointeur de zone memoire pour chaque fibre 
@@ -83,4 +93,7 @@
   int bpid_;        // numero d'identificateur 
 
+  SOPHYA::TimeStamp tmstart_, tmend_;  // definition de la fenetre en temps pour appel de Process()
+  bool fgproctimewin_;   // false -> pas de fenetre en temps, Process() appele pour tous les paquets 
+
   int prtlev_;    // print level 
   uint_8 prtmodulo_;   // print periodicity (modulo) 
Index: /trunk/AddOn/TAcq/brfitsrd.cc
===================================================================
--- /trunk/AddOn/TAcq/brfitsrd.cc	(revision 3978)
+++ /trunk/AddOn/TAcq/brfitsrd.cc	(revision 3979)
@@ -275,6 +275,7 @@
   for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
     mmbufib_[fib]=memgr_.GetMemZone(mid_,fib);
-  // Definition temps pour la zone a remplir 
+  // Definition temps pour la zone a remplir et numeros de sequence des fichiers en cours de lecture
   memgr_.GetAuxData(mid_)->FillTime().Set(ctmstart_.ToDays()+cpaqdeltatime_*(double)vfpos_[0]/86400.);
+  memgr_.GetAuxData(mid_)->FileSequenceNumVec()=vfilenum_; 
   return false;
 }
Index: /trunk/AddOn/TAcq/racqumem.cc
===================================================================
--- /trunk/AddOn/TAcq/racqumem.cc	(revision 3978)
+++ /trunk/AddOn/TAcq/racqumem.cc	(revision 3979)
@@ -39,5 +39,5 @@
     memzones.push_back(new Byte[mzsz] );
     states.push_back(st);
-    auxdatap.push_back(new RAcqMZAuxData );
+    auxdatap.push_back( new RAcqMZAuxData((size_t)NbFibres()) );
     if (procmzsz > 0)  procmemzones.push_back(new Byte[procmzsz] );
   }
Index: /trunk/AddOn/TAcq/racqumem.h
===================================================================
--- /trunk/AddOn/TAcq/racqumem.h	(revision 3978)
+++ /trunk/AddOn/TAcq/racqumem.h	(revision 3979)
@@ -71,8 +71,15 @@
 class RAcqMZAuxData {
 public:
-  RAcqMZAuxData() { }
+  RAcqMZAuxData(size_t nbfib) 
+    : fileseqnum_(nbfib) , badseqnum_(-1)   {  }
   inline SOPHYA::TimeStamp& FillTime() { return filltime_; }
-
+  inline std::vector<uint_4>& FileSequenceNumVec() { return fileseqnum_; }
+  uint_4& FileSequenceNumber(size_t i=0) {
+    if (i<fileseqnum_.size())  return fileseqnum_[i];
+    else return badseqnum_;
+  }
   SOPHYA::TimeStamp filltime_;
+  std::vector<uint_4> fileseqnum_;
+  uint_4 badseqnum_;
 };
 
