Changeset 3640 in Sophya for trunk/AddOn/TAcq/brproc.cc


Ignore:
Timestamp:
May 27, 2009, 5:15:45 PM (16 years ago)
Author:
ansari
Message:

Correction et ameliorations multiples - en particulier mcrd.cc, brproc.cc et brfitsrd.cc, Reza 27/05/2009

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/brproc.cc

    r3635 r3640  
    2626//---------------------------------------------------------------
    2727
    28 BRProcARaw2C::BRProcARaw2C(RAcqMemZoneMgr& mem, string& path, uint_4 nmean, uint_4 step, uint_4 nmax)
     28BRProcARaw2C::BRProcARaw2C(RAcqMemZoneMgr& mem, string& path, uint_4 nmean,
     29                           uint_4 step, uint_4 nmax, bool fgnotrl)
    2930  :  memgr(mem)
    3031{
     
    3435  stop_ = false;       
    3536  path_ = path;
     37  fgnotrl_ = fgnotrl;
    3638}
    3739
     
    5052  setRC(1);     
    5153  try {
    52     Timer tm("BRProcARaw2C");
     54    Timer tm("BRProcARaw2C", false);
    5355    TimeStamp ts;
     56    BRPaqChecker pcheck(~fgnotrl_);  // Verification/comptage des paquets
     57   
     58    size_t totnbytesout = 0;
     59    size_t totnbytesproc = 0;
     60
    5461    cout << " BRProcARaw2C::run() - Starting " << ts << " NMaxMemZones=" << nmax_
    5562         << " NMean=" << nmean_ << " Step=" << step_ << endl;   
     
    6269
    6370// Initialisation pour calcul FFT
    64     TVector< complex<r_4> > cfour;  // composant TF
     71    TVector< complex<r_4> > cfour1;  // composant TF
    6572    uint_4 paqsz = memgr.PaqSize();
    6673    uint_4 procpaqsz = memgr.ProcPaqSize();
     
    6976    vx = (r_4)(0.);
    7077    FFTPackServer ffts;
    71     ffts.FFTForward(vx, cfour);
    72     TVector<r_4> spectreV1, spectreV2;
    73  
    74     spectreV1.ReSize(cfour.Size());
    75     spectreV2.ReSize(cfour.Size());
     78    ffts.FFTForward(vx, cfour1);
     79    TVector< complex<r_4> > cfour2(cfour1.Size());
    7680   
    77     TVector< complex<r_4> > visiV12( cfour.Size() );
     81    TVector<r_4> spectreV1(cfour1.Size());
     82    TVector<r_4> spectreV2(cfour1.Size());
     83    TVector< complex<r_4> > visiV12( cfour1.Size() );
    7884
     85
     86    fftwf_plan plan1 = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(),
     87                          (fftwf_complex*)cfour1.Data(), FFTW_ESTIMATE);
     88    fftwf_plan plan2 = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(),
     89                          (fftwf_complex*)cfour2.Data(), FFTW_ESTIMATE);
    7990
    8091    uint_4 ifile = 0;                           
     
    8596      Byte* buff = memgr.GetMemZone(mid);
    8697      if (buff == NULL) {
    87         cout << " BRProcARaw2C::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
    88         break;         
     98         cout << " BRProcARaw2C::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
     99             break;             
    89100      }
    90101      Byte* procbuff = memgr.GetProcMemZone(mid);
    91102      if (procbuff == NULL) {
    92         cout << " BRProcARaw2C::run()/ERROR memgr.GetProcMemZone(" << mid << ") -> NULL" << endl;
    93         break; 
     103            cout << " BRProcARaw2C::run()/ERROR memgr.GetProcMemZone(" << mid << ") -> NULL" << endl;
     104        break; 
    94105      }
    95       BRPaquet paq0(NULL, buff, paqsz);
     106
    96107      for(uint_4 i=0; i<memgr.NbPaquets(); i+=step_) {
    97         BRPaquet paq(NULL, buff+i*paqsz, paqsz);
    98         Byte min = 255;
    99         Byte max = 0;
    100  
     108            BRPaquet paq(NULL, buff+i*paqsz, paqsz);
     109        if (!pcheck.Check(paq)) continue;   // on ne traite que les paquets OK
     110
    101111// Traitement voie 1       
    102         for(sa_size_t j=0; j<vx.Size(); j++)
    103           vx(j) = (r_4)(*(paq.Data1()+j))-127.5;
    104         fftwf_complex* coeff1 = (fftwf_complex*)(procbuff+i*procpaqsz);
    105         fftwf_plan plan = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(), coeff1, FFTW_ESTIMATE);
    106         fftwf_execute(plan);
    107         //   ffts_.FFTForward(vx, cfour_);
    108         complex<r_4>* zp1 = (complex<r_4>*)(coeff1);
     112            for(sa_size_t j=0; j<vx.Size(); j++)
     113              vx(j) = (r_4)(*(paq.Data1()+j))-127.5;
     114//        fftwf_complex* coeff1 = (fftwf_complex*)(procbuff+i*procpaqsz);
     115            fftwf_execute(plan1);
     116//        complex<r_4>* zp1 = (complex<r_4>*)(coeff1);
     117//        ffts.FFTForward(vx, cfour1);
    109118        for(sa_size_t j=0; j<spectreV1.Size(); j++)
    110           spectreV1(j) += Zmod2(zp1[j]);
    111  
     119          spectreV1(j) += Zmod2(cfour1(j));
     120        memcpy(procbuff+i*procpaqsz, cfour1.Data(), sizeof(complex<r_4>)*cfour1.Size());
    112121// Traitement voie 2       
    113         for(sa_size_t j=0; j<vx.Size(); j++)
    114           vx(j) = (r_4)(*(paq.Data2()+j))-127.5;
    115         fftwf_complex* coeff2 = (fftwf_complex*)(procbuff+i*procpaqsz+procpaqsz/2);
    116         plan = fftwf_plan_dft_r2c_1d(vx.Size(), vx.Data(), coeff2, FFTW_ESTIMATE);
    117         fftwf_execute(plan);
    118         //    ffts_.FFTForward(vx, cfour_);
    119         complex<r_4>* zp2 = (complex<r_4>*)(coeff2);
     122            for(sa_size_t j=0; j<vx.Size(); j++)
     123              vx(j) = (r_4)(*(paq.Data2()+j))-127.5;
     124
     125            fftwf_execute(plan2);
     126
    120127        for(sa_size_t j=0; j<spectreV2.Size(); j++)
    121           spectreV2(j) += Zmod2(zp2[j]);
     128          spectreV2(j) += Zmod2(cfour2(j));  // Zmod2(zp2[j]);
     129        memcpy(procbuff+i*procpaqsz+procpaqsz/2, cfour2.Data(), sizeof(complex<r_4>)*cfour2.Size());
    122130
    123131// Calcul correlation (visibilite V1 * V2)
    124         for(sa_size_t j=0; j<visiV12.Size(); j++) visiV12(j)+=zp1[j]*zp2[j];
     132        for(sa_size_t j=0; j<visiV12.Size(); j++)
     133          visiV12(j)+=cfour1(j)*conj(cfour2(j));
     134//        for(sa_size_t j=0; j<visiV12.Size(); j++) visiV12(j)+=zp1[j]*zp2[j];
     135        nzm++;   
     136        totnbytesproc += paq.DataSize();
     137        totnbytesout += (2*sizeof(complex<r_4>)*cfour1.Size());
    125138
    126         nzm++;
    127       }
    128       if ((nzm >= nmean_) ||(kmz==(nmax_-1))) {
     139      } // Fin de boucle sur les paquets d'une zone
     140      if ((nzm >= nmean_) || ((kmz==(nmax_-1))&&(nzm>1))) {
    129141        spectreV1 /= (r_4)(nzm);
    130142        spectreV2 /= (r_4)(nzm);
     
    135147        spectreV2.Info()["NPaqMoy"] = nzm;
    136148        visiV12.Info()["NPaqMoy"] = nzm;
    137         {
     149            {
    138150        sprintf(fname,"%s_%d.ppf",path_.c_str(),(int)ifile);
    139151        POutPersist po(fname);
     
    141153        po << PPFNameTag("specV2") << spectreV2;
    142154        po << PPFNameTag("visiV12") << visiV12;
    143         }
     155            }
    144156        spectreV1 = (r_4)(0.);
    145157        spectreV2 = (r_4)(0.);
     
    149161//        filog << ts << " :  proc file  " << fname << endl;                   
    150162        cout << " BRProcARaw2C::run() created file  " << fname << endl;
    151       }
     163      }   
    152164     
    153165      memgr.FreeMemZone(mid, MemZS_ProcA);
    154     }
     166    }  // Fin de boucle sur les zones a traiter
     167  cout << " ------------------  BRProcARaw2C::run() END ----------------- " << endl;
     168  ts.SetNow();
     169  tm.SplitQ();
     170  cout << "  TotalProc= " << totnbytesproc/(1024*1024) << " MBytes, rate= "
     171       << (double)(totnbytesproc)/1024./tm.PartialElapsedTimems() << " MB/s"
     172       << " ProcDataOut=" <<  totnbytesout/(1024*1024) << " MB" << endl;   
     173  cout << pcheck;
     174  cout << " BRProcARaw2C::run()/Timing: \n";
     175  tm.Print();
     176  cout << " ---------------------------------------------------------- " << endl;
     177   
    155178  }
    156179  catch (PException& exc) {
Note: See TracChangeset for help on using the changeset viewer.