Index: trunk/AddOn/TAcq/brviscalc.cc
===================================================================
--- trunk/AddOn/TAcq/brviscalc.cc	(revision 3911)
+++ 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); 
   }
