Index: /trunk/AddOn/TAcq/acqparam_exemple.d
===================================================================
--- /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 3674)
+++ /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 3674)
@@ -0,0 +1,41 @@
+#################################################################
+#   ------------ Soft BAORadio --------------
+#   ------ Exemple de datacard pour les parametres d'acquisition
+#            Octobre/novembre 2009
+#################################################################
+#   Liste des fibres  - @fibres I[,J,K...]
+#  Par defaut  @fibres 1
+@fibres 1,2
+#  Nom du Repertoire pour les fichiers d'acquisition 
+#  Par defaut  @outpathname TstAcq
+@outpathname ZB
+#  Identification de la source observee
+#  Par defaut: rien 
+@skysource ngc0000
+#   Taille des paquets (en bytes provenant de la carte ADC) 
+#  Par defaut  @paqsize 16424 
+@paqsize 8192
+#   Taille des DMA en kb (=1024 bytes) 
+#  Par defaut @dmasizekb 32
+@dmasizekb 32
+#   Nombre total (maximum) de fichiers fits produits (/fibre)
+#  Par defaut  @nbfiles 1
+@nbfiles 3
+#   Nombre de blocs (ou zones) MemMgr dans un fichier fits
+#  Par defaut  @nblocperfile 10
+@nblocperfile 10
+#   Mode d'acquisition   
+#  Par defaut  @acqmode std
+#   Modes standard:  [std=raw data] [fft2c=fft 2 canaux] 
+#   Autres modes:  [nof=std,NoFitsFile] pattern,patnof,fft2cnof ...]
+@acqmode std
+#  Parametres MemmoryManager    @memmgr  NZones,NPaqPerZone 
+#  Par defaut  @memmgr  4,128
+@memmgr  4,128
+#  Parametres traitement au vol optionnnel (monitoring)
+#  @monitor  NMaxBlocProc  
+#  Par defaut  @monitor 0
+@monitor 0
+#  Reduction des tailles de paquets si cle present
+#  @reducpaqsz ReducedSize Offset 
+reducpaqsz 1024 0 
Index: /trunk/AddOn/TAcq/brpaqu.cc
===================================================================
--- /trunk/AddOn/TAcq/brpaqu.cc	(revision 3673)
+++ /trunk/AddOn/TAcq/brpaqu.cc	(revision 3674)
@@ -226,5 +226,5 @@
     szcmx = pq.DataSize()-offset;
     if (szcmx<szc) szc=szcmx;
-    memcpy(Data1(), pq.Data1(), szc);
+    memcpy(Data1(), pq.Data1()+offset, szc);
     if (ract==BR_OneChanReducK0)   *(Data1C()) = *(pq.Data1C());  // On garde le continu et le nyquist   
     SetPaqLen(szc/4);  
@@ -235,6 +235,6 @@
     szcmx = pq.DataSize()/2-offset;
     if (szcmx<szc) szc=szcmx;
-    memcpy(Data1(), pq.Data1(), szc);
-    memcpy(Data2(), pq.Data2(), szc);
+    memcpy(Data1(), pq.Data1()+offset, szc);
+    memcpy(Data2(), pq.Data2()+offset, szc);
     if (ract==BR_TwoChanReducK0)  {   // On garde le continu et le nyquist  
       *(Data1C()) = *(pq.Data1C()); 
@@ -552,4 +552,31 @@
   case BR_FFTTwoChanSwap32 :
     rs = "BR_FFTTwoChanSwap32";
+    break;
+  default:
+    rs = "?????";
+    break;
+  }  // Fin switch 
+  return rs;
+}
+
+/* --Methode__ */
+const char* BRPaquet::ReducActionToString(BRPaqReducAction rac)
+{
+  const char * rs="";
+  switch ( rac ) {
+  case BR_CopyRA :  
+    rs = "BR_CopyRA";
+    break;
+  case BR_OneChanReduc : 
+    rs = "BR_OneChanReduc";
+    break;
+  case BR_TwoChanReduc : 
+    rs = "BR_TwoChanReduc";
+    break;
+  case BR_OneChanReducK0 : 
+    rs = "BR_OneChanReducK0";
+    break;
+  case BR_TwoChanReducK0 : 
+    rs = "BR_TwoChanReducK0";
     break;
   default:
Index: /trunk/AddOn/TAcq/brpaqu.h
===================================================================
--- /trunk/AddOn/TAcq/brpaqu.h	(revision 3673)
+++ /trunk/AddOn/TAcq/brpaqu.h	(revision 3674)
@@ -193,4 +193,6 @@
   static void ReorderFFTData(SByte* src, SByte* dst, int sz);
   static const char* FmtConvToString(BRDataFmtConv fgconv);
+  static const char* ReducActionToString(BRPaqReducAction rac);
+
 // protected:
   // donnees membres
Index: /trunk/AddOn/TAcq/brparam.cc
===================================================================
--- /trunk/AddOn/TAcq/brparam.cc	(revision 3673)
+++ /trunk/AddOn/TAcq/brparam.cc	(revision 3674)
@@ -63,4 +63,12 @@
 
 /* --Methode-- */
+void BRConfList::SetBaseDirectory(string basedir)
+{
+  basedir_=basedir;
+  size_t len = basedir_.length();
+  if ((len>1)&&(basedir_[len-1]!='/')) basedir_ += '/';
+}
+
+/* --Methode-- */
 void BRConfList::Set(BRConfList const & cf)
 {
@@ -86,5 +94,5 @@
 
 /* --Methode-- */
-BRParList::BRParList(string fibres,unsigned int paqsz ,unsigned int nframeDMA, 
+BRParList::BRParList(string fibres,unsigned int paqsz ,unsigned int dmaszkb, 
 		     int nfiles, string acqmod,int nblocfile,int nmxproc ,
 		     string outpath, uint_4 nzon , uint_4 npaqzon, bool fgcntlc)
@@ -94,5 +102,5 @@
   for (int fib=0; fib<PMAXNBFIBRES;fib++)  FiberNum[fib]=0;
   PaqSize=paqsz;
-  nbFrameDMA=nframeDMA;
+  dmasizekb=dmaszkb;
   NbFiles=nfiles;
   AcqMode=acqmod;
@@ -105,10 +113,14 @@
   savesigfits=true;
   fgnulldev4fits=false;
+
   fg_hard_ctrlc=fgcntlc;
+
   fgreducpsize=false;
+  reducneedcopy=false;
   pqreducmode=BR_CopyRA;
   redpqsize=PaqSize;
   reducoffset=0;
 
+  skysource="";
   monothr=false;
   activate_pattern=false;
@@ -130,5 +142,5 @@
   for (int fib=0; fib<PMAXNBFIBRES;fib++)  FiberNum[fib]=p.FiberNum[fib];
   PaqSize=p.PaqSize;
-  nbFrameDMA=p.nbFrameDMA;
+  dmasizekb=p.dmasizekb;
   NbFiles=p.NbFiles;
   AcqMode=p.AcqMode;
@@ -145,8 +157,11 @@
 
   fgreducpsize=p.fgreducpsize;
+  reducneedcopy=p.reducneedcopy;
   pqreducmode=p.pqreducmode;
   redpqsize=p.redpqsize;
   reducoffset=p.reducoffset;
 
+  skysource=p.skysource;
+
   monothr=p.monothr;
   activate_pattern=p.activate_pattern;
@@ -158,15 +173,21 @@
 {
   DataCards conf(file);
-  FiberListS= conf.SParam("Fibres",0,"1");
-  PaqSize=(unsigned int)conf.IParam("PaqSZ",0,16424);
-  nbFrameDMA =(unsigned int) conf.IParam("nbFrameDma",0,32);
-  NbFiles=conf.IParam("NbFiles",0,1);
-  NBlocPerFile=conf.IParam("NBlocPerFile",0,10);
-  NMaxProc=conf.IParam("NMaxProc",0,0);
-  OutPathName= conf.SParam("OutPathName",0,"TstAcq");
+  FiberListS= conf.SParam("fibres",0,"1");
+  OutPathName= conf.SParam("outpathname",0,"TstAcq");
+  skysource= conf.SParam("skysource",0,"");
+  PaqSize=(uint_4)conf.IParam("paqsize",0,16424);
+  dmasizekb =(uint_4) conf.IParam("dmasizekb",0,32);
+  NbFiles=conf.IParam("nbfiles",0,1);
+  NBlocPerFile=conf.IParam("nblocperfile",0,10);
   AcqMode =conf.SParam("acqmode",0,"std");
-  nZones=(unsigned int)conf.IParam("nZones",0,4);
-  nPaqZone=(uint_4)conf.IParam("nPaqZone",0,128);
-  fg_hard_ctrlc=conf.HasKey("fg_hard_ctrlc");
+  nZones=(uint_4)conf.IParam("memmgr",0,4);
+  nPaqZone=(uint_4)conf.IParam("memmgr",1,128);
+  if (conf.HasKey("reducpaqsz")) {  // reduction des tailles de paquets
+    fgreducpsize=true;
+    redpqsize=(uint_4)conf.IParam("reducpaqsz",0,PaqSize/4);
+    reducoffset=(uint_4)conf.IParam("reducpaqsz",1,0);
+  }
+  NMaxProc=conf.IParam("monitor",0,0);
+  fg_hard_ctrlc=conf.HasKey("hard_ctrlc");
 
   Decode();
@@ -191,11 +212,14 @@
   }
   string acqmode = AcqMode;
-  if (acqmode == "std")  swapall = BR_Copy ;
+  reducneedcopy=false;  pqreducmode=BR_TwoChanReduc;
+  if (acqmode == "std")   swapall = BR_Copy ;  
   if (acqmode == "nosw")   swapall = BR_Copy ;
   if (acqmode == "nof")  { swapall = BR_Copy ; savesigfits = false; }
-  if (acqmode == "fft1c")  swapall = BR_FFTOneChan;
-  if (acqmode == "fft2c")  swapall = BR_FFTTwoChan;
-  if (acqmode == "fft1cnof")  { swapall = BR_FFTOneChan;  savesigfits = false; }
-  if (acqmode == "fft2cnof")  { swapall = BR_FFTTwoChan;  savesigfits = false; }
+  if (acqmode == "fft1c")  { swapall = BR_FFTOneChan; reducneedcopy=true;  pqreducmode=BR_OneChanReducK0; }
+  if (acqmode == "fft2c")  { swapall = BR_FFTTwoChan;  reducneedcopy=true;  pqreducmode=BR_TwoChanReducK0; }
+  if (acqmode == "fft1cnof")  
+    { swapall = BR_FFTOneChan;  savesigfits = false; reducneedcopy=true;  pqreducmode=BR_OneChanReducK0;  }
+  if (acqmode == "fft2cnof")  
+    { swapall = BR_FFTTwoChan;  savesigfits = false; reducneedcopy=true;  pqreducmode=BR_TwoChanReducK0; }
   if (acqmode == "mono")  { monothr = true;   swapall = BR_Copy; }
   if (acqmode == "monodirect")  { monothr = true;  swapall =  BR_CopyHDR;}
@@ -206,8 +230,12 @@
 
   if (acqmode == "swapall")  swapall = BR_SwapAll;
-  if (acqmode == "fft1csw")  swapall = BR_FFTOneChanSwapAll;
-  if (acqmode == "fft2csw")  swapall = BR_FFTTwoChanSwapAll;
-  if (acqmode == "fft1cswnof")  { swapall = BR_FFTOneChanSwapAll;  savesigfits = false; }
-  if (acqmode == "fft2cswnof")  { swapall = BR_FFTTwoChanSwapAll;  savesigfits = false; }
+  if (acqmode == "fft1csw") 
+    { swapall = BR_FFTOneChanSwapAll;  reducneedcopy=true;  pqreducmode=BR_OneChanReducK0; }
+  if (acqmode == "fft2csw") 
+    { swapall = BR_FFTTwoChanSwapAll;  reducneedcopy=true;  pqreducmode=BR_TwoChanReducK0; }
+  if (acqmode == "fft1cswnof")  
+    { swapall = BR_FFTOneChanSwapAll;  savesigfits = false; reducneedcopy=true;  pqreducmode=BR_OneChanReducK0; } 
+  if (acqmode == "fft2cswnof")  
+    { swapall = BR_FFTTwoChanSwapAll;  savesigfits = false; reducneedcopy=true;  pqreducmode=BR_TwoChanReducK0; }
   if ((acqmode == "swh") || (acqmode == "mxs") || (acqmode == "monoswh") )  swapall = BR_SwapHDR;
   if ((acqmode == "swapallnof") || (acqmode == "mxs") )  savesigfits = false;
@@ -217,8 +245,19 @@
   if (acqmode == "swap32")   swapall = BR_Swap32 ;
   if (acqmode == "nof32")   { swapall = BR_Swap32 ; savesigfits = false; }
-  if (acqmode == "fft1c32")  swapall = BR_FFTOneChanSwap32;
-  if (acqmode == "fft2c32")  swapall = BR_FFTTwoChanSwap32;
-  if (acqmode == "fft1cnof32")  { swapall = BR_FFTOneChanSwap32;  savesigfits = false; }
-  if (acqmode == "fft2cnof32")  { swapall = BR_FFTTwoChanSwap32;  savesigfits = false; }
+  if (acqmode == "fft1c32")  
+    { swapall = BR_FFTOneChanSwap32; reducneedcopy=true;  pqreducmode=BR_OneChanReducK0; }
+  if (acqmode == "fft2c32")  
+    { swapall = BR_FFTTwoChanSwap32; reducneedcopy=true;  pqreducmode=BR_TwoChanReducK0; }
+  if (acqmode == "fft1cnof32")  
+    { swapall = BR_FFTOneChanSwap32;  savesigfits = false; reducneedcopy=true;  pqreducmode=BR_OneChanReducK0; }
+  if (acqmode == "fft2cnof32")  
+    { swapall = BR_FFTTwoChanSwap32;  savesigfits = false; reducneedcopy=true;  pqreducmode=BR_TwoChanReducK0; }
+
+  if (fgreducpsize) {
+    if (redpqsize>=PaqSize) fgreducpsize=false;
+    else {
+      if(reducoffset>(PaqSize-redpqsize)/2) reducoffset=(PaqSize-redpqsize)/2;
+    }
+  }
 }
 
@@ -229,12 +268,16 @@
   os << " FiberListS=" << FiberListS ;
   os << " PaqSize=" <<PaqSize;
-  os << " nbFrameDMA=" <<nbFrameDMA << endl;
+  os << " DMA_Size_kb=" <<dmasizekb << endl;
   os << " AcqMode="<<AcqMode;
   os << " Type of acquisition :" << BRPaquet::FmtConvToString( swapall) << endl;
+  os << " SkySource=" << skysource;
   os << " NbFiles="<<NbFiles;
   os << " NBlocPerFile="<<NBlocPerFile;
   os << " OutPathName="<<OutPathName << endl;
   os << " MemMgr: nZones="<<nZones;
-  os << " nPaqZone="<<nPaqZone;
+  os << " nPaqZone="<<nPaqZone<<endl;
+  if (fgreducpsize) {
+    os << " PaquetSize Reduction, ReducedSize=" << redpqsize << " Offset=" << reducoffset << endl;
+  }
   os << " fg_hard_ctrlc=" << ((fg_hard_ctrlc)?"true":"false");
   os << " Save to fits " << ((savesigfits)?"true":"false") << endl;
Index: /trunk/AddOn/TAcq/brparam.h
===================================================================
--- /trunk/AddOn/TAcq/brparam.h	(revision 3673)
+++ /trunk/AddOn/TAcq/brparam.h	(revision 3674)
@@ -60,8 +60,10 @@
   BRConfList(string basedir, vector<ADCBoardDesc> boards);
   BRConfList(BRConfList const & cf);
+
+  void SetBaseDirectory(string basedir);
   void Set(BRConfList const & cf);
   ostream& Print(ostream& os) ;
   void ReadDCFile(string file);
-  inline string& BaseDirectory() { return basedir_; }
+  inline const string& BaseDirectory() const { return basedir_; }
 //.......................................
   string basedir_;
@@ -75,5 +77,5 @@
 class BRParList {
 public: 
-  BRParList (string fibres="1", unsigned int szframe= 16424, unsigned int nframeDMA = 32, 
+  BRParList (string fibres="1", unsigned int szframe= 16424, unsigned int dmaszkb = 32, 
 	     int nfiles=1, string acqmode="fft2c", int nblocfile=10,  
 	     int nmaxpr = 0, string outpath="TstAcq", 
@@ -89,7 +91,7 @@
   inline int NFibers() { return NbFibers; } 
   // Taille des operations DMA (en octets) 
-  inline uint_4 DMASizeBytes() { return nbFrameDMA*1024; }
+  inline uint_4 DMASizeBytes() { return dmasizekb*1024; }
   // Taille des operations DMA (en KB=1024 bytes) 
-  inline uint_4 DMASizeKB() { return nbFrameDMA; }
+  inline uint_4 DMASizeKB() { return dmasizekb; }
   // Taille des paquets recus sur PCIExpress 
   inline uint_4 RecvPaquetSize() { return PaqSize; }
@@ -106,4 +108,7 @@
   inline uint_4 MaxNbBlocs() { return NbFiles*NBlocPerFile; }
 
+  // Identification source ciel 
+  inline string& SkySource() { return skysource; }
+
   //..........................................
   void Decode();
@@ -116,6 +121,6 @@
   string OutPathName;  // directory de base
   string ProcPathName; 
-  unsigned int PaqSize ; // taille des paquets ou sizeFrame 
-  unsigned int nbFrameDMA ; // taille du dma en multiple de 2 (2 a 56)
+  uint_4 PaqSize ; // taille des paquets ou sizeFrame 
+  uint_4 dmasizekb ; // taille du dma en multiple de 2 (2 a 56)
   int NbFiles; // nombre de fichier produits
   int NBlocPerFile; // nombre de bloc par fichier
@@ -134,8 +139,11 @@
   // ---- Pour gerer la reduction des tailles de paquets 
   bool fgreducpsize;   // true -> reduction taille des paquets 
+  bool reducneedcopy;   // true -> besoin de copie intermediaire pour la reduction de taille de paquets
   BRPaqReducAction pqreducmode; 
   uint_4 redpqsize; 
   uint_4 reducoffset; 
 
+  // Identification source observee dans le ciel
+  string skysource;
   // Pour des tests de performances ou sans carte ADC (pattern) 
   bool monothr ;           // pour les test mono thread 
@@ -200,4 +208,7 @@
   inline uint_4 MaxNbBlocs() { return param_->MaxNbBlocs(); }
 
+  // Identification source ciel 
+  inline string& SkySource() { return param_->SkySource(); }
+
   // repertoire d'acquisition 
   inline string OutputDirectory() { return (config_->BaseDirectory()+param_->OutPathName); }
Index: /trunk/AddOn/TAcq/mfacq.cc
===================================================================
--- /trunk/AddOn/TAcq/mfacq.cc	(revision 3673)
+++ /trunk/AddOn/TAcq/mfacq.cc	(revision 3674)
@@ -45,15 +45,16 @@
   }
   
- 
+  string pardcfile=arg[1];
+#ifndef NOPCIECARD  
+  string basedir="/Raid";
+#else 
+  string basedir="./";
+#endif 
+  if (narg>2)  basedir=arg[2];
   try {
     // Creation/initialisation parametres Acq
     BRAcqConfig acpar;
     acpar.ReadParamFile(arg[1]);
-#ifndef NOPCIECARD  
-    BRConfList conf("/Raid"); 
-#else
-    BRConfList conf("./"); 
-#endif
-    acpar.Set(conf);
+    acpar.GetConfig().SetBaseDirectory(basedir); 
     // Creation des repertoires 
     if (acpar.CreateOutputDirectories()!=0)  return 9;
@@ -97,8 +98,9 @@
 {
   if (fgshort) {
-    cout << " Usage: mfacq DataCardFile \n" << endl;
-    cout << "parameter in DataCard :Fibres PaquetSize NFrameDMA NFiles NBlocPerFile \n"
-         << "                 NMaxProc DataDirPath acqmode nZones nPaqZones fg_hard_ctrlc" << endl;
-    cout << "   type mfacq -h for detailed usage " << endl;
+    cout << " Usage: mfacq DataCardFile [BaseDirectory] \n" << endl;
+    cout << "   Parameters in DataCard : \n"
+	 << "       fibres outpathname skysource paqsize dmasizekb nbfiles \n" 
+	 << "       nblocperfile acqmode memmgr monitor reducpaqsz "<< endl;
+    cout << "   BaseDirectory (default= /Raid ) " << endl;
     return;
   }
@@ -119,5 +121,5 @@
   cout << " mfacq[1]/Info: Creating RAcqMemZoneMgr for" << acpar.NbFibers << " fibers , nZones=" 
        << acpar.nZones << " NbPaquet/Zone=" << acpar.nPaqZone 
-       << " mmgrPaqSize=" << acpar.MMgrPaquetSize() << endl;
+       << " MmgrPaqSize=" << acpar.MMgrPaquetSize() << endl;
   RAcqMemZoneMgr mmgr(acpar.nZones, bpar.NFibers(), acpar.nPaqZone, acpar.MMgrPaquetSize());
   pMmgr=&mmgr;  
Index: /trunk/AddOn/TAcq/racqurw.cc
===================================================================
--- /trunk/AddOn/TAcq/racqurw.cc	(revision 3673)
+++ /trunk/AddOn/TAcq/racqurw.cc	(revision 3674)
@@ -21,4 +21,8 @@
 #include "datatable.h" // Pour sauver les entetes de paquet 
 #include <sys/time.h>  // pour gettimeofday
+
+// Si on veut que MultiDataSaver cree des fichiers avec le numero des FrameCounters...
+// define DEBUGPAQHDR  
+
 //-------------------------------------------------------
 // Classe thread de lecture PCI-Express
@@ -494,5 +498,6 @@
   
   cout << " PCIEMultiReader::run() - Starting , NMaxMemZones=" << nmax_ 
-       << " memgr.NbPaquets()=" << memgr.NbPaquets() << "Paqsize " << packSize_<< endl;	
+       << " memgr.NbPaquets()=" << memgr.NbPaquets() << "Paqsize " << packSize_
+       << "  " << BRPaquet::FmtConvToString(swapall_) << endl;	
   setRC(1);	
 
@@ -507,4 +512,5 @@
   Byte* Datas[MAXNBFIB];
   Byte* tampon[MAXNBFIB] ; 
+  Byte* predtampon=NULL;  // tampon de recopie pour la reduction des tailles de paquets 
   Byte* nextpaq=NULL;
   uint_4 off_acheval=0;
@@ -518,5 +524,13 @@
     tampon[i]=   new Byte[paqsz];
   }
- 
+  bool fgredpaq=par_.fgreducpsize;
+  if (fgredpaq) {
+    cout << " PCIEMultiReader::run() - PaquetSizeReduction - RedSize=" << par_.redpqsize 
+	 << " Offset=" << par_.reducoffset << " " << ((par_.reducneedcopy)?"NeedCopy":"NOCopy") 
+	 << "  " << BRPaquet::ReducActionToString(par_.pqreducmode) << endl;
+    predtampon = new Byte[paqsz];
+  }
+  
+#ifdef DEBUGPAQHDR  
   ofstream header[MAXNBFIB];
   for(uint_4 fib=0; fib<nbDma_; fib++) {
@@ -525,5 +539,5 @@
     header[fib].open(hfnm);
   }
-   
+#endif   
   uint_4 npaqfait[MAXNBFIB] ;
   for (int i=0;i< (int)nbDma_ ;i++) npaqfait[i]=0;
@@ -571,6 +585,15 @@
 	  }
 	  // CHECK  S'il faut faire une reduction de taille de paquet
-	  if (par_.fgreducpsize) { // reduction taille de paquet
-	    
+	  if (fgredpaq) { // reduction taille de paquet
+	    if (par_.reducneedcopy) {
+	      BRPaquet paqc1(tampon[fib], predtampon, paqsz, swapall_);
+	      BRPaquet paqc2(nextpaq, par_.redpqsize);
+	      paqc2.CopyFrom(paqc1, par_.pqreducmode, par_.reducoffset);
+	    }
+	    else {
+	      BRPaquet paqc1(tampon[fib], paqsz);
+	      BRPaquet paqc2(nextpaq, par_.redpqsize);
+	      paqc2.CopyFrom(paqc1, par_.pqreducmode, par_.reducoffset);
+	    }
 	  }
 	  else  { 
@@ -581,5 +604,7 @@
 	  if (fib==nbDma_-1) npaqfaitg++;  // Ne pas oublier le compteur de paquets faits 
 	  pcheck[fib].Check(paq);   // Verification du paquet / FrameCounter 
-	  header[fib] << dec << paq.FrameCounter()<< endl; ;
+#ifdef DEBUGPAQHDR  
+	  header[fib] << dec << paq.FrameCounter()<< endl; 
+#endif
 	}
       }
@@ -607,6 +632,15 @@
 	}
 	// CHECK  S'il faut faire une reduction de taille de paquet
-	if (par_.fgreducpsize) { // reduction taille de paquet
-	  
+	if (fgredpaq) { // reduction taille de paquet
+	  if (par_.reducneedcopy) {
+	    BRPaquet paqc1(Datas[fib]+curoff, predtampon, paqsz, swapall_);
+	    BRPaquet paqc2(nextpaq, par_.redpqsize);
+	    paqc2.CopyFrom(paqc1, par_.pqreducmode, par_.reducoffset);
+	  }
+	  else {
+	    BRPaquet paqc1(Datas[fib]+curoff, paqsz);
+	    BRPaquet paqc2(nextpaq, par_.redpqsize);
+	    paqc2.CopyFrom(paqc1, par_.pqreducmode, par_.reducoffset);
+	  }
 	}
 	else { 
@@ -617,5 +651,7 @@
 	if (fib==nbDma_-1) npaqfaitg++;  // Ne pas oublier le compteur de paquets faits 
 	pcheck[fib].Check(paq);   // Verification du paquet / FrameCounter 
-	header[fib] << dec << paq.FrameCounter()<< endl; ;
+#ifdef DEBUGPAQHDR  
+	header[fib] << dec << paq.FrameCounter()<< endl; 
+#endif
       }
       curoff += paqsz;  // On avance l'index dans le buffer du DMA
@@ -647,6 +683,10 @@
   // //// Nettoyage final
   MZoneManage(true);
+  for (int i=0;i< (int)nbDma_ ;i++) delete[] tampon[i]; 
+  if ((fgredpaq)&&predtampon) delete[] predtampon;
+#ifdef DEBUGPAQHDR  
   for(uint_4 fib=0; fib<nbDma_; fib++)  header[fib].close();
-  for (int i=0;i< (int)nbDma_ ;i++) delete[] tampon[i]; 
+#endif
+
   //DBG  cout << " fin thread ========================" <<endl;  
   return;
@@ -743,4 +783,5 @@
     uint_4 paqsz = memgr.PaqSize();
     cout << " ============================ MultiDataSaver::run() PaqSize " << paqsz <<endl;
+    bool fgfirstfctt=false;
     bool fgnulldev = bpar.GetFileDevNull(); 
     if (fgnulldev) { 
@@ -772,7 +813,5 @@
         // Sans TRAILER de paquet mff.setDTypeNaxis(MF_Byte, paq0.DataSize()+paq0.HeaderSize(), npaqperfile); 
 	}
-	// Ajout mots-cle additionnels a tous les fichiers FITS
-	AddFitsKW(mff,bpar);
-	fnum++;
+	fnum++;   fgfirstfctt=true;
       }
       else sprintf(fname,"MemDataBloc[%d]-NoDataFile",(int)fnum++);
@@ -797,5 +836,10 @@
 	  for(uint_4 i=0; i<memgr.NbPaquets(); i++) {  // boucle sur les paquets 
 	    BRPaquet paq(NULL, buff+i*paqsz, paqsz);
-	    pcheck[fib].Check(paq);   // Verification du paquet / FrameCounter 
+	    bool cpaqok=pcheck[fib].Check(paq);   // Verification du paquet / FrameCounter 
+	    if (cpaqok && fgfirstfctt) {
+	      framecnt_first_[fib] = pcheck[fib].LastFrameNum();
+	      timetag_first_[fib] = paq.TimeTag();
+	      fgfirstfctt=false;
+	    }
 	    if (savesig_)
 	      header[fib] << hex << paq.HDRMarker() << " " << paq.TRLMarker() << " " 
@@ -821,10 +865,15 @@
         cout  << "    Fib " << fib << " -> " << fname << " Stat:" << pcsum << endl;
       }
-      if (savesig_)
+      if (savesig_)  {
+	// Ajout mots-cle additionnels a tous les fichiers FITS
+	for(uint_4 fib=0; fib<memgr.NbFibres(); fib++)
+	  framecnt_last_[fib] = pcheck[fib].LastFrameNum(); 
+
+	AddFitsKW(mff,bpar);
 	for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) {
           header[fib].close();
           mff[fib].Close();	  
 	}
-    
+      }
      
     }  // Fin de boucle sur les fichiers 
@@ -861,4 +910,7 @@
   TimeStamp ts;
   string cdtu=ts.ToString();
+  string& skysrc=acpar.SkySource();
+  bool hassrc=false;
+  if (skysrc.length()>0)  hassrc=true;
   for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) {
     mff[fib].AddKeyS("DATE", cdtu.c_str(), " File Creation time(YYYY-MM-DDThh:mm:ss UT) ");	  
@@ -866,4 +918,9 @@
     mff[fib].AddKeyD("ACQVER", acpar.AcqVersion(), " BAORadio Acq Software version ") ;
     mff[fib].AddKeyS("ACQCONF", acpar.GetParams().AcqMode, " BAORadio Acq run  mode" );
+    if (hassrc) 
+      mff[fib].AddKeyS("SKYSOURC", skysrc, " Source identification" );
+    mff[fib].AddKeyI("FCFIRST", framecnt_first_[fib], " First valid frame counter in file") ;
+    mff[fib].AddKeyI("FCLAST", framecnt_last_[fib], " Last valid frame counter in file") ;
+    mff[fib].AddKeyI("TTFIRST", timetag_first_[fib], " First valid timetag in file") ;
   }
   return 0;
Index: /trunk/AddOn/TAcq/racqurw.h
===================================================================
--- /trunk/AddOn/TAcq/racqurw.h	(revision 3673)
+++ /trunk/AddOn/TAcq/racqurw.h	(revision 3674)
@@ -177,4 +177,8 @@
   bool savesig_; // Si false, pas d'ecriture des fichiers FITS du signal 
   bool stop_;  
+  uint_8 framecnt_first_[MAXNBFIB];  // Numero de framecounter first  
+  uint_8 framecnt_last_[MAXNBFIB];   // Numero de framecounter last  
+  uint_8 timetag_first_[MAXNBFIB];  // TimeTag first  
+  
 };
 
