Index: /trunk/AddOn/TAcq/brproc.cc
===================================================================
--- /trunk/AddOn/TAcq/brproc.cc	(revision 3651)
+++ /trunk/AddOn/TAcq/brproc.cc	(revision 3652)
@@ -11,4 +11,5 @@
 #include "ntuple.h"
 #include "datatable.h"
+#include "histos.h"
 #include "fioarr.h"
 #include "timestamp.h"
@@ -34,5 +35,5 @@
 /* --Methode-- */
 BRProcARaw2C::BRProcARaw2C(RAcqMemZoneMgr& mem, string& path, uint_4 nmean, 
-                           uint_4 nmax, bool fgnotrl, int card)
+                           uint_4 nmax, bool fghist, bool fgnotrl, int card)
   :  memgr(mem) 
 {
@@ -42,4 +43,5 @@
   path_ = path;	
   fgnotrl_ = fgnotrl;
+  fghist_ = fghist;
   card_ = card;
   if (pmutfftw==NULL) pmutfftw=new ZMutex;  
@@ -90,4 +92,7 @@
     double ms1,ms2,ms12,ms12re,ms12im,ms12phi;
 ----*/
+// Time sample histograms 
+   Histo h1(-0.5, 255.5, 256);
+   Histo h2(-0.5, 255.5, 256);
 // Initialisation pour calcul FFT 
     TVector< complex<r_4> > cfour1;  // composant TF
@@ -152,6 +157,15 @@
         curtt=paq.TimeTag()-firsttt;
 // Traitement voie 1  	    
-  	    for(sa_size_t j=0; j<vx.Size(); j++) 
-  	      vx(j) = (r_4)(*(paq.Data1()+j))-127.5;
+        if (fghist_) {
+          for(sa_size_t j=0; j<vx.Size(); j++) {
+            r_4 vts=(r_4)(*(paq.Data1()+j));
+            h1.Add((r_8)vts);
+  	    vx(j) = vts-127.5;
+          }
+        }
+        else {
+          for(sa_size_t j=0; j<vx.Size(); j++) 
+  	    vx(j) = (r_4)(*(paq.Data1()+j))-127.5;
+        }
 //        fftwf_complex* coeff1 = (fftwf_complex*)(procbuff+i*procpaqsz);
   	    fftwf_execute(plan1); 
@@ -162,7 +176,15 @@
         memcpy(procbuff+i*procpaqsz, cfour1.Data(), sizeof(complex<r_4>)*cfour1.Size());
 // Traitement voie 2  	    
-   	    for(sa_size_t j=0; j<vx.Size(); j++) 
- 	      vx(j) = (r_4)(*(paq.Data2()+j))-127.5;
-
+        if (fghist_) {
+          for(sa_size_t j=0; j<vx.Size(); j++) {
+            r_4 vts=(r_4)(*(paq.Data2()+j));
+            h2.Add((r_8)vts);
+  	    vx(j) = vts-127.5;
+          }
+        }
+        else {
+          for(sa_size_t j=0; j<vx.Size(); j++) 
+  	    vx(j) = (r_4)(*(paq.Data2()+j))-127.5;
+        }
         fftwf_execute(plan2); 
         for(sa_size_t j=0; j<spectreV2.Size(); j++) 
@@ -225,5 +247,5 @@
         spectreV2.Info()["EndTT"] = curtt;
         visiV12.Info()["EndTT"] = curtt;
-	    {
+        {
     	sprintf(fname,"%s_%d.ppf",path_.c_str(),(int)ifile);
         POutPersist po(fname);
@@ -231,7 +253,11 @@
         string tag2="specV2";
         string tag12="visiV12";
+        string tagh1="tshV1";
+        string tagh2="tshV2";
         if (card_==2) {
           tag1 = "specV3";
           tag2 = "specV4";
+          tagh1 = "tshV1";
+          tagh2 = "tshV2";
           tag12="visiV34";
         }
@@ -239,8 +265,16 @@
         po << PPFNameTag(tag2) << spectreV2; 
         po << PPFNameTag(tag12) << visiV12; 
-	    }
+        if (fghist_) {
+          po << PPFNameTag(tagh1) << h1; 
+          po << PPFNameTag(tagh2) << h2; 
+        }
+	}
         spectreV1 = (r_4)(0.);
         spectreV2 = (r_4)(0.);
         visiV12 = complex<r_4>(0., 0.);
+        if (fghist_) {
+          h1.Zero();
+          h2.Zero();
+        }
         nzm = 0;  ifile++; 
 //        ts.SetNow();
Index: /trunk/AddOn/TAcq/brproc.h
===================================================================
--- /trunk/AddOn/TAcq/brproc.h	(revision 3651)
+++ /trunk/AddOn/TAcq/brproc.h	(revision 3652)
@@ -23,8 +23,18 @@
 // Classe thread de traitement avec 2 voies par frame (donnees brutes)
 //---------------------------------------------------------------------
+
+/*-- Arguments du constructeur : 
+  o mem : gestionnaire zones memoires avec contenant les "frames" avec 2 voies/frame
+  o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
+  o nmean : Nombre de frame (paquets) moyennes
+  o nmax : Nombre maxi de frames traites 
+  o fghist = true -> fait aussi l'histo des valeurs des echantillons temps
+  o fgnotrl = true -> fichiers fits / paquets sans trailer 
+  o card : numero de carte , juste pour les impressions 
+*/
 class BRProcARaw2C : public ZThread {
 public:	
   BRProcARaw2C(RAcqMemZoneMgr& mem, string& path, uint_4 nmean=10, 
-               uint_4 nmax=100, bool fgnotrl=false, int card=1);
+               uint_4 nmax=100, bool fgtshist=false, bool fgnotrl=false, int card=1);
   virtual void run(); 
   void Stop();
@@ -36,4 +46,5 @@
   uint_4 nmean_;  // Nombre de blocs pour le calcul des moyennes 
   string path_;  
+  bool fghist_;   // if true, fill and save histogram with time sample values
   bool fgnotrl_;   // if true, don't check packet trailer - when using pre-june fits files
   int card_;   // Numeros de voies 2*card_-1, 2*card_
@@ -43,4 +54,13 @@
 // Classe thread de traitement 2 x 2 voies/frames (Apres BRProcARaw2C)
 //---------------------------------------------------------------------
+/*-- Arguments du constructeur : 
+  o mem1,mem2 : gestionnairea zones memoires avec contenant les donnees des 4 voies (2 voies/frame)
+  o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
+  o nmean : Nombre de frame (paquets) moyennes
+  o nmax : Nombre maxi de frames traites 
+  o fgnotrl = true -> fichiers fits / paquets sans trailer 
+  o card : numero de carte , juste pour les impressions 
+*/
+
 class BRProcBRaw4C : public ZThread {
 public:	
Index: /trunk/AddOn/TAcq/mcrd.cc
===================================================================
--- /trunk/AddOn/TAcq/mcrd.cc	(revision 3651)
+++ /trunk/AddOn/TAcq/mcrd.cc	(revision 3652)
@@ -61,12 +61,16 @@
 static int GPaqSz=16424;
 static double LossRate=0.1;
+
+static bool fg4c=false;  // true -> 4 channels (2 fibers)
+static bool fgrdfits=true;  // false -> Don't read fits files, generate paquets
+static bool fgnotrl=false;   // true -> fichier fits SANS Trailer de frame (< mai 2009)
+static bool fghist=false;   // true -> histo des valeurs des time sample
+
 // ----
 int Usage(bool fgshort=true);
 // Pour traitement (calcul FFT et visibilites (ProcA) 1 fibre, 2 voies RAW)
-int Proc1FRawA(string& outname, string& inpath, int jf1, int jf2, bool fgnotrl=false, 
-               bool fgrdfile=true);
+int Proc1FRawA(string& outname, string& inpath, int jf1, int jf2);
 // Pour traitement (calcul FFT et visibilites (ProcA,ProcB) 2 fibre, 4 voies RAW)
-int Proc2FRawAB(string& outname, string& path1, string& path2, int jf1, int jf2, 
-                bool fgnotrl=false, bool fgrdfile=true);
+int Proc2FRawAB(string& outname, string& path1, string& path2, int jf1, int jf2);
 
 //----------------------------------------------------
@@ -82,10 +86,16 @@
   try {
     string act = arg[1];
-    bool fg4c=false;  // true -> 4 channels (2 fibers)
-    bool fgrdfits=true;  // false -> Don't read fits files, generate paquets
-    bool fgnotrl=false;   // true -> fichier fits SANS Trailer de frame (< mai 2009)
+    fg4c=false;  // true -> 4 channels (2 fibers)
+    fgrdfits=true;  // false -> Don't read fits files, generate paquets
+    fgnotrl=false;   // true -> fichier fits SANS Trailer de frame (< mai 2009)
+    fghist=false;   // true -> histo des valeurs des time sample
     if (act.substr(0,2)=="-4") fg4c=true;
-    if (act.substr(2)=="g")  fgrdfits=false;
-    else if (act.substr(2)=="nt")  fgnotrl=true;
+    if (act.length()>2) {
+      for(size_t ks=2; ks<act.length(); ks++) {
+        if(act[ks]=='g') fgrdfits=false;
+        else if(act[ks]=='n') fgnotrl=true; 
+        else if(act[ks]=='h') fghist=true; 
+      }
+    }
     if (fg4c && (narg<6)) return Usage(true);
 
@@ -107,7 +117,7 @@
     ResourceUsage resu;
     if (fg4c) 
-      rc =  Proc2FRawAB(outname, inpath, inpath2, imin, imax, fgnotrl, fgrdfits); 
+      rc =  Proc2FRawAB(outname, inpath, inpath2, imin, imax); 
     else 
-      rc =  Proc1FRawA(outname, inpath, imin, imax, fgnotrl, fgrdfits); 
+      rc =  Proc1FRawA(outname, inpath, imin, imax); 
     cout << resu ; 
   }
@@ -135,6 +145,5 @@
 
 // Pour traitement (calcul FFT et visibilites (ProcA) 1 fibre, 2 voies RAW)
-int Proc1FRawA(string& outname, string& inpath, int imin, int imax, 
-               bool fgnotrl, bool fgrdfile)
+int Proc1FRawA(string& outname, string& inpath, int imin, int imax)
 {
   vector<string> infiles;
@@ -146,5 +155,5 @@
   uint_4 nmaxz;
   uint_4 paqsz, npaqf;
-  if (fgrdfile) {
+  if (fgrdfits) {
     DecodeMiniFitsHeader(infiles[0],paqsz, npaqf, fgnotrl); 
     nmaxz = infiles.size()*npaqf/NPaqinZone;
@@ -167,9 +176,9 @@
 
   outname += "/Ch12";
-  BRProcARaw2C proc(mmgr, outname, NMean, nmaxz, fgnotrl);
+  BRProcARaw2C proc(mmgr, outname, NMean, nmaxz, fghist, fgnotrl);
 
   cout << " mcrd/Proc1FRawA: Starting threads (reader, proc) ... " << endl;
 
-  if (fgrdfile) reader.start();
+  if (fgrdfits) reader.start();
   else pcird.start();
 
@@ -177,5 +186,5 @@
   sleep(1);
   cout << " mcrd/Proc1FRawA: Waiting for reader thread to finish ... " << endl;
-  if (fgrdfile) reader.join();
+  if (fgrdfits) reader.join();
   else pcird.join();
   cout << " mcrd/Proc1FRawA: Reader finished, waiting for process thread to finish ... " << endl;
@@ -189,6 +198,5 @@
 
 // Pour traitement (calcul FFT et visibilites (ProcA) 1 fibre, 2 voies RAW)
-int Proc2FRawAB(string& outname, string& path1, string& path2, int imin, int imax, 
-               bool fgnotrl, bool fgrdfile)
+int Proc2FRawAB(string& outname, string& path1, string& path2, int imin, int imax) 
 {
   vector<string> infiles1;
@@ -203,5 +211,5 @@
   uint_4 nmaxz;
   uint_4 paqsz, npaqf;
-  if (fgrdfile) {
+  if (fgrdfits) {
     DecodeMiniFitsHeader(infiles1[0],paqsz, npaqf, fgnotrl); 
     nmaxz = infiles1.size()*npaqf/NPaqinZone;
@@ -235,8 +243,8 @@
   string outname1 = outname;
   outname1 += "/Ch12";
-  BRProcARaw2C proc1(mmgr1, outname1, NMean, nmaxz, fgnotrl);
+  BRProcARaw2C proc1(mmgr1, outname1, NMean, nmaxz, fghist, fgnotrl);
   string outname2 = outname;
   outname2 += "/Ch34";
-  BRProcARaw2C proc2(mmgr2, outname2, NMean, nmaxz, fgnotrl,2);
+  BRProcARaw2C proc2(mmgr2, outname2, NMean, nmaxz, fghist, fgnotrl,2);
   string outname12 = outname;
   outname12 += "/Ch1234";
@@ -245,5 +253,5 @@
   cout << " mcrd/Proc2FRawAB: Starting threads (reader1,2, procA1,2, procAB) ... " << endl;
 //  cout << "[1]--- CR to continue ..." << endl;   char ans[32]; gets(ans); 
-  if (fgrdfile) { 
+  if (fgrdfits) { 
     reader1.start();
     reader2.start();
@@ -260,5 +268,5 @@
   sleep(1);
   cout << " mcrd/Proc2FRawAB: Waiting for reader threads to finish ... " << endl;
-  if (fgrdfile) { 
+  if (fgrdfits) { 
     reader1.join();
     reader2.join();
@@ -291,8 +299,10 @@
     return 1;
   }
-  cout << " ACT= -2 , -2g , -2nt -> 1 fiber, 2 raw channel processing (ProcA)\n"
-       << " ACT= -4 , -4g , -4g , -4nt -> 2 fibers, 4 raw channels (ProcA, ProcB)\n"
-       << "   nt (notrl) -> FITS files without frame trailer \n" 
-       << "   g (generate paquets) -> generate paquets instead of reading fits files" <<endl; 
+  cout << " ACT= -2[ghn] -> 1 fiber, 2 raw channel processing (ProcA)\n"
+       << " ACT= -4[ghn] -> 2 fibers, 4 raw channels (ProcA, ProcB)\n"
+       << "   n (notrl) -> FITS files without frame trailer \n" 
+       << "   g (generate paquets) -> generate paquets instead of reading fits files\n"
+       << "   h (time sample histograms) -> compute time sample histograms also \n" 
+       << "   Example: ACT = -2h  1 fiber, 2 raw channels and compute time sample histograms" <<endl; 
   cout << " OutPath : Output directory name " << endl;
   cout << " InPath [InPath2] Imin,Imax: Input fits files directory name(s)\n"
