Index: /trunk/AddOn/TAcq/acqparam_exemple.d
===================================================================
--- /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 3914)
+++ /trunk/AddOn/TAcq/acqparam_exemple.d	(revision 3915)
@@ -110,8 +110,17 @@
 #  Defaut : visicalc 1024  1 1 
 visicalc 5000  2 1 
+## Choix des visibilites (Numero de paires de canaux) a calculer 
+#  @visipairs FirstPair NbPairs [OddEvenOnly]
+#  Par defaut @visipairs 0 999999999   ( calcul de tout )
+#  Exemples pour 4 canaux ( 2 fibres) 
+#  @visipairs 0 8  : calcul des 8 premieres visibilites (1,1) (1,2) (1,3) (1,4)  (2,2) (2,3) (2,4)  (3,3)
+#  @visipairs 2 6  : (1,3) (1,4) (2,2) (2,3) (2,4)  (3,3)
+#  @visipairs 1 8  : (1,2) (1,3) (1,4) (2,2) (2,3) (2,4) (3,3) (3,4)
+#  @visipairs 1 8  : (1,2) (1,4) (2,2) (2,3) (3,3) (3,4)
+visipairs 0 999999999
 ##  Binning en frequence lors du calcul (parametre en numero des frequences)
-#  @visicfreq freqmin freqmax nbinfreq 
-#  Defaut: visicfreq 0 0 0   (aucun binning, toutes les frequences) 
-visicfreq 0 0 0
+#  @visifreq freqmin freqmax nbinfreq 
+#  Defaut: visifreq 0 0 0   (aucun binning, toutes les frequences) 
+visifreq 0 0 0
 ########################
 #  Taux de perte de paquets en simulation / nombre maxi de paquets generes (Sans carte PCIExpress) 
Index: /trunk/AddOn/TAcq/brparam.cc
===================================================================
--- /trunk/AddOn/TAcq/brparam.cc	(revision 3914)
+++ /trunk/AddOn/TAcq/brparam.cc	(revision 3915)
@@ -205,4 +205,7 @@
   nbcalgrpVisiC=1;
   nthrVisiC=1;
+  firstpairVisiC=0;  
+  nbpairsVisiC=999999999;
+  fgpimpVisiC=false;
   freqminVisiC=freqmaxVisiC=0;
   nbinfreqVisiC=1;  
@@ -280,4 +283,15 @@
   stepProc=p.stepProc;
   nmaxProc=p.nmaxProc;
+
+  fgdoVisiC=p.fgdoVisiC;           
+  nmeanVisiC=p.nmeanVisiC;         
+  nbcalgrpVisiC=p.nbcalgrpVisiC;     
+  nthrVisiC=p.nthrVisiC;         
+  firstpairVisiC=p.firstpairVisiC;
+  nbpairsVisiC=p.nbpairsVisiC;  
+  fgpimpVisiC=p.fgpimpVisiC;
+  freqminVisiC=p.freqminVisiC;
+  freqmaxVisiC=p.freqmaxVisiC;
+  nbinfreqVisiC=p.nbinfreqVisiC; 
 
   monothr=p.monothr;
@@ -363,8 +377,13 @@
     nthrVisiC=conf.IParam("visicalc",2,1);
   }
-  if (conf.HasKey("visicfreq")) {
-    freqminVisiC=conf.IParam("visicfreq",0,0);
-    freqmaxVisiC=conf.IParam("visicfreq",1,0);
-    nbinfreqVisiC=conf.IParam("visicfreq",2,1);
+  if (conf.HasKey("visipairs")) {
+    firstpairVisiC=conf.IParam("visipairs",0,0);
+    nbpairsVisiC=conf.IParam("visipairs",1,999999999);
+    fgpimpVisiC=(conf.IParam("visipairs",2,0)>0)?true:false;
+  }
+  if (conf.HasKey("visifreq")) {
+    freqminVisiC=conf.IParam("visifreq",0,0);
+    freqmaxVisiC=conf.IParam("visifreq",1,0);
+    nbinfreqVisiC=conf.IParam("visifreq",2,1);
   }
 
@@ -512,4 +531,6 @@
   if (fgdoVisiC) {
     os << " Visibility calculation, nbCalGrp=" << nbcalgrpVisiC << " NThr/VisCal=" << nthrVisiC << endl;
+    os << " ... VisiCalc FirstPair= " << firstpairVisiC << " NbPairs= " << nbpairsVisiC 
+       << ((fgpimpVisiC)?" (Odd-Even visibilities+AutoCorrel only) ":"") << endl;
     os << " ... VisiCalc FrequencyBinning FreqMin= " << freqminVisiC << " FreqMax= " << freqmaxVisiC 
        << " NBinFreq= " << nbinfreqVisiC<< endl;
Index: /trunk/AddOn/TAcq/brparam.h
===================================================================
--- /trunk/AddOn/TAcq/brparam.h	(revision 3914)
+++ /trunk/AddOn/TAcq/brparam.h	(revision 3915)
@@ -207,4 +207,6 @@
   uint_4 nbcalgrpVisiC;     // Nb d'objets/threads dans BRVisCalcGroup 
   uint_4 nthrVisiC;         // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
+  uint_4 firstpairVisiC, nbpairsVisiC;  // Numero premiere visibilites, nombre de visibilites a calculer
+  bool fgpimpVisiC;    // true -> calcul visibilite pair-impair + autocorrel  
   uint_4 freqminVisiC, freqmaxVisiC, nbinfreqVisiC;  // si zone de frequence/rebinning pour visibilites
 
Index: /trunk/AddOn/TAcq/brviscalc.cc
===================================================================
--- /trunk/AddOn/TAcq/brviscalc.cc	(revision 3914)
+++ /trunk/AddOn/TAcq/brviscalc.cc	(revision 3915)
@@ -93,26 +93,32 @@
 
 /* --Methode-- */
-void BRVisibilityCalculator::DefineRank(uint_4 nbc, uint_4 cid)
+void BRVisibilityCalculator::DefineRank(uint_4 nbc, uint_4 cid, uint_4 pair1, uint_4 nbpairs, bool fgpimp)
 {
   if ((nbc>6)||(cid>=nbc)) 
     throw ParmError("BRVisibilityCalculator::DefineRank() NbCalc > 6 !");
+  uint_4 maxnpairs = (2*memgr_.NbFibres()+1)*memgr_.NbFibres();
+  if ((pair1>=maxnpairs)||(nbpairs<1))
+    throw ParmError("BRVisibilityCalculator::DefineRank() (pair1>=maxnpairs)||(nbpairs<1) !");
+  maxnpairs-=pair1;
+  if (maxnpairs>nbpairs) maxnpairs=nbpairs;
+
   nbcalc_=nbc;
   calcid_=cid;
   if (nbcalc_>1) {
-    uint_4 maxnpairs = (2*memgr_.NbFibres()+1)*memgr_.NbFibres();
-    uint_4 npairs=maxnpairs/nbcalc_;
+    uint_4 npairspth=maxnpairs/nbcalc_;  // nb de paires par thread
     if (calcid_==(nbcalc_-1)) 
-      SelectPairs(calcid_*npairs, maxnpairs-calcid_*npairs);
+      SelectPairs(calcid_*npairspth+pair1, maxnpairs-calcid_*npairspth, fgpimp);
     else 
-      SelectPairs(calcid_*npairs, npairs);
+      SelectPairs(calcid_*npairspth+pair1, npairspth, fgpimp);
     MemZaction mmzas[6]={MemZA_ProcA,MemZA_ProcB,MemZA_ProcC,MemZA_ProcD,MemZA_ProcE,MemZA_ProcF};
     SetMemZAction(mmzas[calcid_]);
     setNameId("viscalc_grp", calcid_); 
   }
+  else SelectPairs(pair1,maxnpairs, fgpimp);
   return ;
 }
 
 /* --Methode-- */
-uint_4 BRVisibilityCalculator::SelectPairs(uint_4 pair1, uint_4 nbpairs)
+uint_4 BRVisibilityCalculator::SelectPairs(uint_4 pair1, uint_4 nbpairs, bool fgpimp)
 {
   BRPaquet paq(memgr_.PaqSize());
@@ -121,12 +127,27 @@
   if (pair1 >= maxnpairs)  pair1=maxnpairs-1;
   if (nbpairs > maxnpairs-pair1)  nbpairs=maxnpairs-pair1;
+
   pairst_=pair1;
   nbpairs_=nbpairs;
-  vismtx_.SetSize(nbpairs_, paq.DataSize()/4); 
-
-  chanpairnum_.SetSize(nbpairs_);
-  chanpairs_.SetSize(nbpairs_,2);
-
-  return nbpairs_;
+  fgpimp_=fgpimp;
+
+  uint_4 nbvisicomp=0;
+  sa_size_t kpair=0;  
+  for(size_t i=0; i<vpdata_.size(); i++) {
+    for(size_t j=i; j<vpdata_.size(); j++) {
+      kpair++;
+      if (kpair<(pairst_+1))  continue;
+      if (kpair>=(pairst_+nbpairs_+1))  break;
+      if (fgpimp_&&(i!=j)&&((i+j)%2==0))  continue;  // calcul des visib avec numero pair-impair + autocorrel
+      nbvisicomp++;
+    }
+  }
+
+  vismtx_.SetSize(nbvisicomp, paq.DataSize()/4); 
+
+  chanpairnum_.SetSize(nbvisicomp);
+  chanpairs_.SetSize(nbvisicomp,2);
+
+  return nbvisicomp;
 }
 
@@ -167,4 +188,5 @@
       if (kpair<(pairst_+1))  continue;
       if (kpair>=(pairst_+nbpairs_+1))  break;
+      if (fgpimp_&&(i!=j)&&((i+j)%2==0))  continue;  // calcul des visib avec numero pair-impair + autocorrel
       chanpairnum_(k)=chanids_(i)*CHANPAIRCONVFAC+chanids_(j);
       chanpairs_(k,0)=chanids_(i);  chanpairs_(k,1)=chanids_(j);     k++;
@@ -187,5 +209,5 @@
   cout << "BRVisibilityCalculator[" << calcid_ << "]::UpdateChanIds() Channel Ids/Pairs saved to PPF file " 
        << filename << endl; 
-  cout << " ... ChannelPairs= " ;
+  cout << " ... NbVisib=NbChanPairs=" << chanpairs_.NRows() << " ChannelPairs= " ;
   for(sa_size_t ir=0; ir<chanpairs_.NRows(); ir++) {
     if (ir%10==0)  cout << endl;
@@ -390,4 +412,5 @@
       if (kpair<(pairst_+1))  continue;
       if (kpair>=(pairst_+nbpairs_+1))  break;
+      if (fgpimp_&&(i!=j)&&((i+j)%2==0))  continue;  // calcul des visib avec numero pair-impair + autocorrel
       TVector< complex<r_4> > vis = vismtx_.Row(k);  k++;   
       for(sa_size_t f=1; f<vis.Size(); f++) {
@@ -468,4 +491,5 @@
 	if (kpair<(pairst_+1))  continue;
 	if (kpair>=(pairst_+nbpairs_+1))  break;
+	if (fgpimp_&&(i!=j)&&((i+j)%2==0))  continue;  // calcul des visib avec numero pair-impair + autocorrel
 	TVector< complex<r_4> > vis = vismtx_.Row(k);  k++;  
 	for(sa_size_t f=fdeb; f<ffin; f++) {
@@ -561,5 +585,6 @@
 
 /* --Methode-- */
-BRVisCalcGroup::BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean, size_t nthr)
+BRVisCalcGroup::BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean,
+			       uint_4 pair1, uint_4 nbpairs, bool fgpimp, size_t nthr)
   : tm_(false)
 {
@@ -568,5 +593,5 @@
   for(size_t i=0; i<nbcalc; i++) {
     BRVisibilityCalculator * viscp=new BRVisibilityCalculator(memgr, outpath, nmean, nthr);
-    viscp->DefineRank(nbcalc, i);
+    viscp->DefineRank(nbcalc, i, pair1, nbpairs, fgpimp);
     viscalcp_.push_back(viscp); 
   }
Index: /trunk/AddOn/TAcq/brviscalc.h
===================================================================
--- /trunk/AddOn/TAcq/brviscalc.h	(revision 3914)
+++ /trunk/AddOn/TAcq/brviscalc.h	(revision 3915)
@@ -41,10 +41,12 @@
 
   // Pour definir le rang de l'objet lors d'un traitement avec plusieurs BRVisibilityCalculator en //
-  void DefineRank(uint_4 nbc, uint_4 cid);
+  void DefineRank(uint_4 nbc, uint_4 cid, uint_4 pair1=0, uint_4 nbpairs=999999999, bool fgpimp=false);
 
   // Pour limiter le calcul des visibilites a certaines voies, determine par les numeros de sequences des paires 
   // Exemple pour 2 fibres et 4 voies 
   // kpair=numero sequentiel de la paire: 0->(0,0), 1->(0,1), 2->(0,2), 3->(0,3), 4->(1,1), 5->(1,2) ...
-  uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=99999999);
+  // fgpimp=true : on calcule uniquement les visib avec un numero de voie paire, un numero de voie impair
+  //               fgpimp=true est utile pour le calcul des visib entre deux cylindres (E-W) 
+  uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=999999999, bool fgpimp=false);
   // pour definir le binning en frequence pour la VisibDataTable 
   // par defaut, toutes les frequences avec un pas de 1 
@@ -78,5 +80,7 @@
   uint_4 nbcalc_, calcid_;  // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet  
 
-  uint_4 pairst_, nbpairs_;   // Numero de la premiere paire, nombre de paires 
+  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  
+
   uint_4 jf1_,jf2_,djf_;  // binning en frequence pour la datatable
 
@@ -121,5 +125,6 @@
 class BRVisCalcGroup {
 public:	
-  BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
+  BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000,
+		 uint_4 pair1=0, uint_4 nbpairs=999999999, bool fgpimp=false, size_t nthr=1);
   ~BRVisCalcGroup();
   int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
Index: /trunk/AddOn/TAcq/mfacq.cc
===================================================================
--- /trunk/AddOn/TAcq/mfacq.cc	(revision 3914)
+++ /trunk/AddOn/TAcq/mfacq.cc	(revision 3915)
@@ -426,5 +426,6 @@
   MonitorProc PrThr(mmgr);
   PrThr.SetMemZAction( RAcqMemZoneMgr::Convert_Status2Action( mskmon ) );
-  BRVisCalcGroup VCGThr(acpar.nbcalgrpVisiC, mmgr, bpar.OutputDirectory(), acpar.nmeanVisiC, acpar.nthrVisiC);
+  BRVisCalcGroup VCGThr(acpar.nbcalgrpVisiC, mmgr, bpar.OutputDirectory(), acpar.nmeanVisiC, 
+			acpar.firstpairVisiC, acpar.nbpairsVisiC, acpar.fgpimpVisiC, acpar.nthrVisiC);
   VCGThr.SelectFreqBinning(acpar.freqminVisiC, acpar.freqmaxVisiC, acpar.nbinfreqVisiC);
 
