Index: /trunk/AddOn/TAcq/acqparam_exemple.d
===================================================================
--- /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 3882)
+++ /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 3883)
@@ -37,7 +37,9 @@
 #  Par defaut NoMonitoring   @monitor 512 10 0
 @monitor 0  384 4 
+########################
 #  Reduction des tailles de paquets si cle present
 #  @reducpaqsz ReducedSize Offset 
 reducpaqsz 1024 0 
+########################
 #### cartes de controle pour le mode transfert sur Ethernet
 #  Liste des machines cibles pour les envois de paquets 
@@ -49,4 +51,8 @@
 #  @ethrnlink 4
 ethrnlink 4
+#  En mode reception de paquets sur ethernet,  On peut forcer la lecture
+#   de paquets avec meme compteur de paquet (Force SameFrameCounter )
+#  @ethrforcesamefc
+ethrforcesamefc
 ## No de port TCP/IP   
 #  @tcpportid 6912
@@ -68,5 +74,11 @@
 #  Defaut: visicfreq 0 0 0   (aucun binning, toutes les frequences) 
 visicfreq 0 0 0
+########################
 #  Taux de perte de paquets en simulation (Sans carte PCIExpress) 
 #  @nopcilossrate Perte     (0<=Perte<1)
 #  Defaut @nopcilossrate 0. 
+########################
+#   Niveau d'impression 
+#  @prtlev Level CounterModulo 
+prtlev 0 50000 
+prtlev 1 50000 
Index: /trunk/AddOn/TAcq/branap.cc
===================================================================
--- /trunk/AddOn/TAcq/branap.cc	(revision 3882)
+++ /trunk/AddOn/TAcq/branap.cc	(revision 3883)
@@ -20,4 +20,5 @@
   imin_=imax_=0;
   istep_=1;
+  rdsamefc_=true;   // read paquets with same frame counter
   freqmin_=freqmax_=0;
   nbinfreq_=1;  
@@ -27,4 +28,5 @@
   fgdatafft_=false;  fgsinglechannel_=false;
   prtlevel_=0;
+  prtmodulo_=50000;
   nbcalgrp_=1;
   nthreads_=1;
@@ -69,6 +71,6 @@
       ka+=2;
     }
-    else if (strcmp(arg[ka],"-prtlev")==0) {
-      prtlevel_=atoi(arg[ka+1]);
+    else if (strcmp(arg[ka],"-prt")==0) {
+      sscanf(arg[ka+1],"%d,%ld",&prtlevel_,&prtmodulo_);
       ka+=2;
     }
@@ -80,4 +82,8 @@
       nbcalgrp_=atoi(arg[ka+1]);
       ka+=2;
+    }
+    else if (strcmp(arg[ka],"-nosfc")==0) {
+      rdsamefc_=false;
+      ka++;
     }
     else if (strcmp(arg[ka],"-in")==0) {
@@ -120,5 +126,5 @@
   cout << " Usage:  prgname [-act ACT] [-out OutPath] [-nmean NMean] [-zones NZones,nPaqinZone] \n" 
        << "                 [-nbloc NBloc] [-freq NumFreqMin,NumFreqMax,NBinFreq] \n" 
-       << "                 [-prtlev lev] [-nvcal n] [-nthr n] \n" 
+       << "                 [-prt lev,modulo] [-nvcal n] [-nthr n] [-nosfc] \n" 
        << "         -in Imin,Imax,Istep InPath FiberList [InPath2 FiberList2 InPath3 FiberList3 ...] \n" << endl; 
   if (fgshort) {
@@ -135,7 +141,8 @@
        << " -zones NZones,NbPaqinZone : Number of Zones and number of paquets in one zone \n" 
        << " -freq NumFreqMin,NumFreqMax,NBinFreq : Frequency zone and number of bins \n" 
-       << " -prtlev lev : Print level (0,1,2...) \n" 
+       << " -prt lev,modulo : Print level (0,1,2...) and print counter modulo (10000, 50000 ...) \n" 
        << " -nvcal n : number of BRVisibilityCalculator objects running in parallel in BRVisCalcGroup  (default=1) \n" 
        << " -nthr n : number of threads for parallel execution in BRVisibilityCalculator (default=1) \n" 
+       << " -nosfc : Don't force reading with SAME FrameCounter \n" 
        << " -in : input files/directory definition : \n"
        << "       Imin,Imax,Istep: fits files signalII.fits Imin<=II<=Imax Istep=increment \n" 
@@ -160,10 +167,11 @@
   for(size_t k=0; k< dirlist_.size(); k++) 
     cout << k+1 << " :  " << dirlist_[k] << endl;
-  cout << " IMin= " << imin_ << " IMax= " << imax_ << " IStep= " << istep_ << endl;
+  cout << " IMin= " << imin_ << " IMax= " << imax_ << " IStep= " << istep_ 
+       << ((rdsamefc_)?" SameFrameCounter read mode":" AllOKPaquets read mode ") << endl;
   cout << " OutPath= " << outpath_ << endl;
   cout << " Action=" << action_ << "  NMean=" << nmean_ << " NBloc=" << nbloc_ << endl;
   cout << " FreqMin= " << freqmin_ << " FreqMax= " << freqmax_ << " NBinFreq= " << nbinfreq_ << endl;
   cout << " PaqSize=" << paqsize_ << "  -  NZones=" << nzones_ << " NPaqZone=" << npaqinzone_ 
-       << " PrtLevel=" << prtlevel_ << endl;
+       << " PrtLevel=" << prtlevel_ << " PrtCntModulo=" <<  prtmodulo_ << endl;
   cout << " AcqMode: " << ((fgdatafft_)?" Data_FFT " : " Data_Raw " ) 
        << ((fgsinglechannel_)?" SingleChannel " : " TwoChannels " ) << endl;
Index: /trunk/AddOn/TAcq/branap.h
===================================================================
--- /trunk/AddOn/TAcq/branap.h	(revision 3882)
+++ /trunk/AddOn/TAcq/branap.h	(revision 3883)
@@ -34,4 +34,5 @@
   uint_4 nbloc_;
   uint_4 imin_, imax_, istep_;
+  bool rdsamefc_;    // read paquets with same frame counter 
   uint_4 freqmin_, freqmax_, nbinfreq_;
   uint_4 paqsize_; 
@@ -41,4 +42,5 @@
   bool fgsinglechannel_; // true -> un seul canal par fibre (par defaut=2 canaux/fibres)
   int prtlevel_;
+  long int prtmodulo_; 
   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/brfitsrd.cc
===================================================================
--- /trunk/AddOn/TAcq/brfitsrd.cc	(revision 3882)
+++ /trunk/AddOn/TAcq/brfitsrd.cc	(revision 3883)
@@ -78,4 +78,5 @@
 	 << " signalII.fits IMin=" << imin_ << " IMax=" << imax_ << " IStep=" << istep_ << endl;
 
+    uint_8  prtcnt=0;
     Byte* nextpaq=NULL;
     bool fgok=true;
@@ -95,17 +96,23 @@
       }
       if (ReadNextAllFibers()) { fgok=false;  break; }
+      prtcnt++;
+      if ((prtlev_>0)&&(prtcnt%prtmodulo_==0))  {
+	  cout << "BRMultiFitsReader: NbPaqMFRead=" << prtcnt << " NSameFC=" 
+	       << totsamefc_ << " / NPaqFib0Read=" << totnpqrd_[0] 
+	       << " FracSameFC=" << 100*totsamefc_/totnpqrd_[0] << " %" <<  endl;
+      }
     }
 
     MoveToNextTarget();  // Pour faire traiter le dernier paquet si plein 
     MZoneManage(true);   // Nettoyage final 
-    usleep(50000);       // Attente de traitement du dernier paquet
-    memgr_.Stop();        // Arret 
 
     cout << " ------------------  BRMultiFitsReader::run() END ----------------- " << endl;
     ts.SetNow();
     tm.SplitQ();
-    cout << "  END reading : " << ts ;
-    if (rdsamefc_) cout << " NSameFC=" << totsamefc_ << endl;
-    else cout << endl;
+    cout << "BRMultiFitsReader::run():  END reading : " << ts << endl;
+    cout << "... NbPaqMFRead=" << prtcnt << " NSameFC=" 
+	 << totsamefc_ << " / NPaqFib0Read=" << totnpqrd_[0] 
+	 << " FracSameFC=" << 100*totsamefc_/totnpqrd_[0] << " %" << endl;
+
     for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)  {
       int perc=0;
@@ -121,4 +128,7 @@
     cout << " ---------------------------------------------------------- " << endl;
 
+    usleep(50000);       // Attente de traitement du dernier paquet
+    memgr_.Stop();        // Arret 
+
   }  // Fin du bloc try 
   catch (std::exception& exc) {
@@ -142,27 +152,37 @@
     if (ReadNext(fib)) return true;  // probleme 
   }
-  if (!rdsamefc_ || (memgr_.NbFibres()<2))  { 
-    totsamefc_++;  return false;  // c'est OK 
-  }
-  uint_8 cfc=curfc_[0];
-  bool fgsamefc=true;
-  for(size_t fib=1; fib<memgr_.NbFibres(); fib++) {
-    if (curfc_[fib]!=cfc) {
-      fgsamefc=false;
-      if (curfc_[fib] > cfc)  cfc=curfc_[fib]; 
-    }
-  }
-  if (fgsamefc) { 
-    totsamefc_++;  return false;  // c'est OK  , same framecounter
-  }
-  else {  // else !fgsame
-    for(uint_4 fib=0; fib<memgr_.NbFibres(); fib++) {
-      while (curfc_[fib]<cfc) {
-	if (ReadNext(fib)) return true;  // probleme 
-      }
-    }
-  }   // fin de  else !fgsame 
-  totsamefc_++; 
-  return false; // c'est OK
+  if (!rdsamefc_ || (memgr_.NbFibres()<2))  {
+    uint_8 cfc=curfc_[0];
+    bool fgsamefc=true;
+    for(size_t fib=1; fib<memgr_.NbFibres(); fib++) {
+      if (curfc_[fib]!=cfc)   fgsamefc=false;
+    }
+    if (fgsamefc)  totsamefc_++;  
+    return false;  // c'est OK 
+  }
+  //  On va essayer de lire jusqu'a avoir same_frame_counter 
+  bool echec=true;
+  while (echec) {
+    uint_8 cfc=curfc_[0];
+    bool fgsamefc=true;
+    for(size_t fib=1; fib<memgr_.NbFibres(); fib++) {
+      if (curfc_[fib]!=cfc) {
+	fgsamefc=false;
+	if (curfc_[fib] > cfc)  cfc=curfc_[fib]; 
+      }
+    }
+    if (fgsamefc) { 
+      totsamefc_++;  echec=false; return false;  // c'est OK  , same framecounter
+    }
+    else {  // else !fgsame
+      for(uint_4 fib=0; fib<memgr_.NbFibres(); fib++) {
+	while (curfc_[fib]<cfc) {
+	  if (ReadNext(fib)) return true;  // probleme 
+	}
+      }
+    }   // fin de  else !fgsame 
+  }  // fin de while(echec): lecture jusqu'a same_frame_counter 
+
+  return true; // probleme 
 }
 
Index: /trunk/AddOn/TAcq/brfitsrd.h
===================================================================
--- /trunk/AddOn/TAcq/brfitsrd.h	(revision 3882)
+++ /trunk/AddOn/TAcq/brfitsrd.h	(revision 3883)
@@ -36,5 +36,7 @@
   inline void STOP() { stop_ = true; }	
 
-  inline int SetPrintLevel(int lev=0) { prtlev_=lev; return 0;}
+  inline int SetPrintLevel(int lev=0, uint_8 prtmodulo=50000) 
+    { prtlev_=lev;   prtmodulo_=prtmodulo;  return 0; }
+
 protected:
   bool ReadNextAllFibers();      // Renvoie true si probleme 
@@ -77,5 +79,6 @@
   Byte* mmbufib_[MAXANAFIB];  // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr 
 
-  int prtlev_;
+  int prtlev_;         // print level 
+  uint_8 prtmodulo_;   // print periodicity (modulo) 
 };
 
Index: /trunk/AddOn/TAcq/brparam.cc
===================================================================
--- /trunk/AddOn/TAcq/brparam.cc	(revision 3882)
+++ /trunk/AddOn/TAcq/brparam.cc	(revision 3883)
@@ -136,4 +136,5 @@
   pci2eth_fgdirect=false;
   ethr_nlink = 0;
+  ethr_forcesamefc_ = false;
 
   skysource="";
@@ -157,4 +158,7 @@
   nopciLossRate=0.;
 
+// niveau d'impression,debug ...
+  prtlevel_=0;
+  prtmodulo_=50000;
   Decode();    // On decode et on complete les parametres 
 }
@@ -203,4 +207,5 @@
   eths_targets=p.eths_targets;
   ethr_nlink=p.ethr_nlink;
+  ethr_forcesamefc_=p.ethr_forcesamefc_;
 
   skysource=p.skysource;
@@ -215,4 +220,8 @@
 
   nopciLossRate=p.nopciLossRate;
+
+  prtlevel_=p.prtlevel_;
+  prtmodulo_=p.prtlevel_;
+
   return;
 }
@@ -245,4 +254,5 @@
   }
   ethr_nlink=conf.IParam("ethrnlink",0,0);   // Nombre de sources de paquets en reception ethernet 
+  if (conf.HasKey("ethrforcesamefc"))   ethr_forcesamefc_=true;   // force SAME FrameCounter   on all links
 
   //  Parametre de controle du monitoring 
@@ -269,4 +279,9 @@
   fg_hard_ctrlc=conf.HasKey("hard_ctrlc");
   if (conf.HasKey("nosavesigfits"))  savesigfits=false;
+  if (conf.HasKey("prtlev"))  {
+    prtlevel_=conf.IParam("prtlev",0,0);
+    prtmodulo_=conf.IParam("prtlev",1,50000);
+  }
+  
   Decode();
 }
@@ -372,5 +387,7 @@
     cout << endl;
   }
-  cout << " TCP-PortId=" << tcpportid << " EthernetRead NbSources (=NbLinks)= " << ethr_nlink << endl;
+  cout << " TCP-PortId=" << tcpportid << " EthernetRead NbSources (=NbLinks)= " << ethr_nlink 
+       << ((ethr_forcesamefc_)?" ForceSameFrameCounter read mode":" AllOKPaquets read mode ") << endl;
+
   if (fgdoProc>0) 
     os << " Monitoring  NMeanProc=" << nmeanProc << " StepProc=" << stepProc << " NMaxProc=" << nmaxProc << endl;
@@ -385,5 +402,6 @@
   os << " monothr y(1)/n(0) " << ((monothr)?"true":"false"); 
   os << " ActivatePattern " << ((activate_pattern)?"true":"false") <<  endl;
-  
+  os << " PrtLevel=" << prtlevel_ << " PrtCntModulo=" <<  prtmodulo_ << endl;
+
   return os;
 }
Index: /trunk/AddOn/TAcq/brparam.h
===================================================================
--- /trunk/AddOn/TAcq/brparam.h	(revision 3882)
+++ /trunk/AddOn/TAcq/brparam.h	(revision 3883)
@@ -165,4 +165,5 @@
   // Cote reception 
   int ethr_nlink;    // Nombre total de source d'envoi (= nb total de fibre de fibre) 
+  bool ethr_forcesamefc_;   // true -> on force receptions de paquets avec SAME FrameCounter sur tous les liens 
 
   // Identification source observee dans le ciel
@@ -188,4 +189,8 @@
 
   double nopciLossRate;   // Utilise avec pour les tests sans carte pciexpress TestPCIWrapperNODMA
+
+  // Niveau d'impression/debug ...
+  int prtlevel_;
+  long int prtmodulo_; 
 };
 
Index: /trunk/AddOn/TAcq/mfacq.cc
===================================================================
--- /trunk/AddOn/TAcq/mfacq.cc	(revision 3882)
+++ /trunk/AddOn/TAcq/mfacq.cc	(revision 3883)
@@ -387,5 +387,5 @@
 
   cout << "mfacq[3] Creating   EthernetReader thread object     " << endl;
-  EthernetReader ethrdr(mmgr, bpar.GetParams(), bpar.GetParams().tcpportid, false);
+  EthernetReader ethrdr(mmgr, bpar.GetParams(), bpar.GetParams().tcpportid, acpar.ethr_forcesamefc_);
 
   //  usleep(200);  attente au cas ou ...
Index: /trunk/AddOn/TAcq/racqueth.cc
===================================================================
--- /trunk/AddOn/TAcq/racqueth.cc	(revision 3882)
+++ /trunk/AddOn/TAcq/racqueth.cc	(revision 3883)
@@ -433,17 +433,22 @@
       if (ReadNextAllFibers()) { fgok=false;  break; }
       totnpaqrd_++;
+      if ((prtlev_>0)&&(totnpaqrd_%prtmodulo_==0))  {
+	  cout << "EthernetReader: NbPaq/Link=" << totnpaqrd_ << " NSameFC=" 
+	       << totsamefc_ << " / NPaqFib0Read=" << totnpqrd_[0] 
+	       << " FracSameFC=" << 100*totsamefc_/totnpqrd_[0] << " %" <<  endl;
+      }
     }
 
     MoveToNextTarget();  // Pour faire traiter le dernier paquet si plein 
     MZoneManage(true);   // Nettoyage final 
-    usleep(50000);       // Attente de traitement du dernier paquet
-    memgr_.Stop();        // Arret 
 
     cout << " ------------------  EthernetReader::run() END ----------------- " << endl;
     ts.SetNow();
     tm.SplitQ();
-    cout << "  END reading TotNPaq/Link=" << totnpaqrd_ << " :"  << ts ;
-    if (rdsamefc_) cout << " NSameFC=" << totsamefc_ << endl;
-    else cout << endl;
+    cout << "  END reading TotNPaq/Link=" << totnpaqrd_ << " :"  << ts << endl;
+    cout << "... NbPaq/Link=" << totnpaqrd_ << " NSameFC=" 
+	 << totsamefc_ << " / NPaqLink[0]_Read=" << totnpqrd_[0] 
+	 << " FracSameFC=" << 100*totsamefc_/totnpqrd_[0] << " %" << endl;
+
     for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)  {
       int perc=0;
@@ -459,4 +464,7 @@
     cout << " ---------------------------------------------------------- " << endl;
 
+    usleep(50000);       // Attente de traitement du dernier paquet
+    memgr_.Stop();        // Arret 
+
   }  // Fin du bloc try 
   catch (std::exception& exc) {
@@ -480,27 +488,37 @@
     if (ReadNext(fib)) return true;  // probleme 
   }
-  if (!rdsamefc_ || (memgr_.NbFibres()<2))  { 
-    totsamefc_++;  return false;  // c'est OK 
-  }
-  uint_8 cfc=curfc_[0];
-  bool fgsamefc=true;
-  for(size_t fib=1; fib<memgr_.NbFibres(); fib++) {
-    if (curfc_[fib]!=cfc) {
-      fgsamefc=false;
-      if (curfc_[fib] > cfc)  cfc=curfc_[fib]; 
-    }
-  }
-  if (fgsamefc) { 
-    totsamefc_++;  return false;  // c'est OK  , same framecounter
-  }
-  else {  // else !fgsame
-    for(uint_4 fib=0; fib<memgr_.NbFibres(); fib++) {
-      while (curfc_[fib]<cfc) {
-	if (ReadNext(fib)) return true;  // probleme 
-      }
-    }
-  }   // fin de  else !fgsame 
-  totsamefc_++; 
-  return false; // c'est OK
+  if (!rdsamefc_ || (memgr_.NbFibres()<2))  {
+    uint_8 cfc=curfc_[0];
+    bool fgsamefc=true;
+    for(size_t fib=1; fib<memgr_.NbFibres(); fib++) {
+      if (curfc_[fib]!=cfc)   fgsamefc=false;
+    }
+    if (fgsamefc)  totsamefc_++;  
+    return false;  // c'est OK 
+  }
+  //  On va essayer de lire jusqu'a avoir same_frame_counter 
+  bool echec=true;
+  while (echec) {
+    uint_8 cfc=curfc_[0];
+    bool fgsamefc=true;
+    for(size_t fib=1; fib<memgr_.NbFibres(); fib++) {
+      if (curfc_[fib]!=cfc) {
+	fgsamefc=false;
+	if (curfc_[fib] > cfc)  cfc=curfc_[fib]; 
+      }
+    }
+    if (fgsamefc) { 
+      totsamefc_++;  echec=false; return false;  // c'est OK  , same framecounter
+    }
+    else {  // else !fgsame
+      for(uint_4 fib=0; fib<memgr_.NbFibres(); fib++) {
+	while (curfc_[fib]<cfc) {
+	  if (ReadNext(fib)) return true;  // probleme 
+	}
+      }
+    }   // fin de  else !fgsame 
+  }  // fin de while(echec): lecture jusqu'a same_frame_counter 
+
+  return true; // probleme 
 }
 
Index: /trunk/AddOn/TAcq/racqueth.h
===================================================================
--- /trunk/AddOn/TAcq/racqueth.h	(revision 3882)
+++ /trunk/AddOn/TAcq/racqueth.h	(revision 3883)
@@ -57,5 +57,6 @@
   inline void STOP() { stop_ = true; }	
 
-  inline int SetPrintLevel(int lev=0) { prtlev_=lev; return 0;}
+  inline int SetPrintLevel(int lev=0, uint_8 prtmodulo=50000) 
+    { prtlev_=lev;   prtmodulo_=prtmodulo;  return 0; }
 
 protected: 
@@ -79,5 +80,6 @@
   bool fgdirectsend_;  //  true -> direct transfer of DMA data to ethernet
 
-  int prtlev_;
+  int prtlev_;    // print level 
+  uint_8 prtmodulo_;   // print periodicity (modulo) 
 };
 
@@ -92,5 +94,6 @@
   inline void STOP() { stop_ = true; }	
 
-  inline int SetPrintLevel(int lev=0) { prtlev_=lev; return 0;}
+  inline int SetPrintLevel(int lev=0, uint_8 prtmodulo=50000) 
+    { prtlev_=lev;   prtmodulo_=prtmodulo;  return 0; }
 
 protected:
@@ -137,5 +140,6 @@
   Byte* mmbufib_[MAXANAFIB];  // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr 
 
-  int prtlev_;
+  int prtlev_;   // print level 
+  uint_8 prtmodulo_;   // print periodicity (modulo) 
 };
 
Index: /trunk/AddOn/TAcq/specmfib.cc
===================================================================
--- /trunk/AddOn/TAcq/specmfib.cc	(revision 3882)
+++ /trunk/AddOn/TAcq/specmfib.cc	(revision 3883)
@@ -68,6 +68,6 @@
       else mmgr.SetFinalizedMask((uint_4)MemZS_ProcB);
     }
-    BRMultiFitsReader reader(mmgr, par.dirlist_, false, par.imin_, par.imax_, par.istep_);
-    reader.SetPrintLevel(par.prtlevel_);
+    BRMultiFitsReader reader(mmgr, par.dirlist_, par.rdsamefc_, par.imin_, par.imax_, par.istep_);
+    reader.SetPrintLevel(par.prtlevel_,par.prtmodulo_);
 
     BRMeanSpecCalculator procms(mmgr, par.outpath_, par.nmean_, par.fgdatafft_, par.fgsinglechannel_);
