Changeset 3938 in Sophya


Ignore:
Timestamp:
Jan 13, 2011, 11:42:21 AM (15 years ago)
Author:
ansari
Message:

modification provisoire pour lecture fichiers visibilites 2010, Reza 13/01/2011

Location:
trunk/AddOn/TAcq
Files:
9 edited

Legend:

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

    r3905 r3938  
    158158       << "    viscktt: compute visibilities and check TimeTag/FrameCounter\n "
    159159       << "    mspec: compute and save mean spectra for each channel \n "
     160       << "    bproc: run BRBaseProcessor for debug/printing (use -prt)  \n "
    160161       << " -out OutPath: Output directory name \n"
    161162       << " -nmean NMean: Number of packet used for spectra/visibility computation \n"
  • trunk/AddOn/TAcq/brbaseproc.cc

    r3909 r3938  
    3939  totprocnpaq_=0;
    4040  setNameId("baseproc",0);
     41  SetPrintLevel();
    4142}
    4243
     
    117118        for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
    118119          vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
    119           vfgok_[fib] = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
     120          vfgok_[fib]=vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
    120121          if (!vfgok_[fib])  fgokallfibers_=false;
    121122          if (procpaqsz>0)    vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz;
     
    167168  //  return 0;
    168169  /*    Exemple de code test  */
    169   if ( totprocnpaq_ % 1000 == 0 ) {
    170     cout << " BRBaseProcessor::Process() " << totprocnpaq_ << " FrameCnt=" ;
     170  if ((prtlev_>0)&&(totprocnpaq_ %prtmodulo_==0))  {
     171    cout << " BRBaseProcessor::Process(totnpaq=" << totprocnpaq_ << ")  ObsTime=" << getObsTime()
     172         << " TimeTag=" << getCurTimeTagSeconds() << " s. FrameCounter="  << getCurFrameCounter() << endl;
     173    if (prtlev_<2) return 0;
     174    cout << " ... FrameCnt[0..." << memgr_.NbFibres()-1 << "]=" ;
    171175    for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)   
    172       cout << curfc_[fib] << "," ;
     176      cout << getCurFrameCounter(fib) << "," ;
    173177    cout << endl;
    174     cout << " TimeTag : " ;
     178    cout << " ... TimeTag[0..." << memgr_.NbFibres()-1 << "]=" ;
    175179    for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)   
    176       cout << vpaq_[fib].TimeTag()/125000000 << "," ;
    177       cout << "   seconds" << endl;
     180      cout << getCurTimeTag(fib) << "," ;
     181    cout << endl;
     182    if (prtlev_<3) return 0;
     183    cout << " ... TimeTagSeconds[0..." << memgr_.NbFibres()-1 << "]=" ;
     184    for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)   
     185      cout << getCurTimeTagSeconds(fib) << "," ;
     186    cout << endl;
    178187  }
    179188  return 0;
  • trunk/AddOn/TAcq/brbaseproc.h

    r3909 r3938  
    3030
    3131  virtual void run();
    32   inline void Stop();
     32
     33  inline void Stop() { stop_ = true; } 
    3334  inline void STOP() { stop_ = true; } 
    3435
     
    3738  inline void setNameId(string nom, int id)
    3839  { bpnom_=nom;   bpid_=id;  }
     40
     41  // get Observation Time ( obtained from MemZoneMgr )
     42  inline SOPHYA::TimeStamp& getObsTime()  { return cts_; }
     43  // Renvoie le numero de frame-counter courant - si fgz=true, soustrait le FC du premier paquet
     44  inline uint_8 getCurFrameCounter(size_t fib=0, bool fgz=true)
     45  { if (fgz) return (curfc_[fib]-fcfirst_[fib]) ;  else return curfc_[fib]; }
     46  // Renvoie le TimeTag courant (unite coups d'horloge) - si fgz=true, soustrait le TT du premier paquet
     47  inline uint_8 getCurTimeTag(size_t fib=0, bool fgz=true)
     48  { if (fgz) return (vpaq_[fib].TimeTag()-ttfirst_[fib]) ;  else return vpaq_[fib].TimeTag(); }
     49  // Renvoie le TimeTag courant converti en secondes  - si fgz=true, soustrait le TT du premier paquet
     50  inline double getCurTimeTagSeconds(size_t fib=0, bool fgz=true)
     51  {
     52    if (fgz) return ((double)(vpaq_[fib].TimeTag()-ttfirst_[fib])/1.25e8) ; 
     53    else return ((double)vpaq_[fib].TimeTag()/1.25e8);
     54  }
     55  //---- niveau d'impression
     56  inline void SetPrintLevel(int lev=0, uint_8 prtmodulo=10)
     57    { prtlev_=lev;   prtmodulo_=prtmodulo;}
    3958
    4059protected:
     
    5372  vector<uint_8> vfgok_;    // Vecteur de flag si paquet OK pour chaque fibre
    5473  vector<uint_8> curfc_;    // Vecteur de numero de FrameCounter pour chaque fibre
    55   vector<uint_8> fcfirst_;  //
    56   vector<uint_8> ttfirst_;
     74  vector<uint_8> fcfirst_;  // numero du FrameCounter pour le premier paquet
     75  vector<uint_8> ttfirst_;  // TimeTag pour le premier paquet
    5776  bool fgokallfibers_;      // true -> paquets for all fibers OK
    58 
     77 
    5978  uint_8 totprocnpaq_;
    6079  SOPHYA::TimeStamp cts_;   // current time stamp, get from MemZoneMgr
     
    6281  string bpnom_;    // nom du processeur
    6382  int bpid_;        // numero d'identificateur
     83
     84  int prtlev_;    // print level
     85  uint_8 prtmodulo_;   // print periodicity (modulo)
    6486};
    6587
  • trunk/AddOn/TAcq/brfitsrd.cc

    r3909 r3938  
    5757    // Extraction de qques parametres utiles depuis les fichiers FITS
    5858    string fkvs;
     59    cpaqdeltatime_=0.;
    5960    if (fib==0) {
    6061      fkvs=mff_[fib].GetKeyValue("DATEOBS");
    61       if (fkvs.length()>0) {
    62         cdateobs_.Set(fkvs);
    63         cout << " BRMultiFitsReader/First file (for fiber 0) DATEOBS=" << fkvs << endl;
    64       }
    65     }
    66     fkvs=mff_[fib].GetKeyValue("DATEOBS");
     62      if (fkvs.length()>0)  cdateobs_.Set(fkvs);
     63      fkvs=mff_[fib].GetKeyValue("TMSTART");
     64      if (fkvs.length()>0) {
     65        ctmstart_.Set(fkvs);
     66        cout << " BRMultiFitsReader/First file (for fiber 0) TMSTART=" << fkvs << endl;
     67        fkvs=mff_[fib].GetKeyValue("TMEND");
     68        SOPHYA::TimeStamp tmend_=ctmstart_;
     69        if (fkvs.length()>0) tmend_.Set(fkvs);
     70        cpaqdeltatime_=((double)(tmend_.DaysPart()-cdateobs_.DaysPart())*86400.+
     71                        (tmend_.SecondsPart()-cdateobs_.SecondsPart()))/(double)mff_[fib].NAxis2();
     72      }
     73    }
     74    fkvs=mff_[fib].GetKeyValue("FIBERNUM");
    6775    memgr_.FiberId(fib) = atoi( fkvs.c_str() );
    6876
     
    222230        string fkvs=mff_[fib].GetKeyValue("DATEOBS");
    223231        if (fkvs.length()>0)  cdateobs_.Set(fkvs);
     232        fkvs=mff_[fib].GetKeyValue("TMSTART");
     233        if (fkvs.length()>0) {
     234          ctmstart_.Set(fkvs);
     235          cout << " BRMultiFitsReader/First file (for fiber 0) TMSTART=" << fkvs << endl;
     236          fkvs=mff_[fib].GetKeyValue("TMEND");
     237          SOPHYA::TimeStamp tmend_=ctmstart_;
     238          if (fkvs.length()>0) tmend_.Set(fkvs);
     239          cpaqdeltatime_=((double)(tmend_.DaysPart()-cdateobs_.DaysPart())*86400.+
     240                          (tmend_.SecondsPart()-cdateobs_.SecondsPart()))/(double)mff_[fib].NAxis2();
     241        }
    224242      }
    225243      vfpos_[fib]=0;
     
    254272  for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
    255273    mmbufib_[fib]=memgr_.GetMemZone(mid_,fib);
     274  // Definition temps pour la zone a remplir
     275  memgr_.GetAuxData(mid_)->FillTime().Set(ctmstart_.ToDays()+cpaqdeltatime_*(double)vfpos_[0]/86400.);
    256276  return false;
    257277}
  • trunk/AddOn/TAcq/brfitsrd.h

    r3909 r3938  
    8080  Byte* mmbufib_[MAXANAFIB];  // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr
    8181
    82   SOPHYA::TimeStamp cdateobs_;    // current time/date read from file
     82  SOPHYA::TimeStamp cdateobs_;    // current file time/date  (from DATEOBS keyword in fits file)
     83  SOPHYA::TimeStamp ctmstart_;    // current time/date read from file (from TMSTART keyword in fits file)
     84  double cpaqdeltatime_;          // current time laps between two paquets in file = (TMEND-TMSTART)/NAXIS2
    8385 
    8486  int prtlev_;         // print level
  • trunk/AddOn/TAcq/brproc.cc

    r3905 r3938  
    7676  ofsdtp_=NULL;
    7777  dtp_=NULL;
    78   string dtfile="!"+outpath_+"/dtspec.fits";
    79   ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
    80   dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true);
    81   char cnom[32];
    82   for(int i=0; i<nchan; i++) {
    83     sprintf(cnom,"variance%d",i);
    84     dtp_->AddFloatColumn(cnom);   
    85   }
    86   /*
    87   for(int i=0; i<nchan; i++) {
    88     sprintf(cnom,"sigma%d",i);
    89     dtp_->AddFloatColumn(cnom);   
    90   }
    91   */
    92   xnt_=new double[nchan*2];
    93 
     78  xnt_=new double[nchan*2];  // CHECK : ATTENTION la taille depend de nombre de colonne du NTuple !
    9479}
    9580
     
    10893    delete dtp_;
    10994    delete ofsdtp_;
    110     delete xnt_;
    111   }
     95  }
     96  if (xnt_)   delete xnt_;
    11297  cout << " ------------------------------------------------------------------------ " << endl;
    11398}
     
    138123
    139124/* --Methode-- */
     125void BRMeanSpecCalculator::DefineDataTable()
     126{
     127  string dtfile="!"+outpath_+"/dtspec.fits";
     128  ofsdtp_ = new FitsInOutFile(dtfile,FitsInOutFile::Fits_Create);
     129  dtp_ = new SwFitsDataTable(*ofsdtp_,1024,true);
     130  char cnom[32];
     131  size_t nchan=(fgsinglechannel_?memgr_.NbFibres():2*memgr_.NbFibres());
     132  for(int i=0; i<nchan; i++) {
     133    sprintf(cnom,"variance%d",i);
     134    dtp_->AddFloatColumn(cnom);   
     135  }
     136  /*
     137  for(int i=0; i<nchan; i++) {
     138    sprintf(cnom,"sigma%d",i);
     139    dtp_->AddFloatColumn(cnom);   
     140  }
     141  */
     142  //  xnt_=new double[nchan*2];  CHECK : faut-il reallouer ?
     143}
     144
     145/* --Methode-- */
    140146void BRMeanSpecCalculator::ReadGainFitsFile(string filename, bool fgapp)
    141147{
     
    212218void BRMeanSpecCalculator::ProcSpecWin(uint_8 numpaqstart, uint_8 numpaqend)
    213219{
    214   //DBG  cout << "BRMeanSpecCalculator::ProcSpecWin()/Debug: numpaqstart=" << numpaqstart
    215   //DBG     << " numpaqend=" << numpaqend << endl;
    216 
     220
     221  if (prtlev_>0)  {
     222    uint_8 modulo =  prtmodulo_/GetSpectraWindowSize();
     223    if (modulo<1) modulo=1;
     224    if (nbtot_specwin_%modulo==0) {
     225      cout << " BRMeanSpecCalculator::ProcSpecWin() num_win=" << nbtot_specwin_ << " numpaqstart=" << numpaqstart
     226           << " numpaqend=" << numpaqend << endl;
     227      cout << " ... ObsTime=" << getObsTime() << " TimeTag=" << getCurTimeTagSeconds() << " s. FrameCounter="
     228           << getCurFrameCounter() << endl;
     229    }
     230  }
     231  nbtot_specwin_++;
     232  return;
    217233  // On appelle la routine de nettoyage qui doit flagger les mauvais paquets
    218234  FlagBadPackets(numpaqstart, numpaqend);
     
    255271      double variance=0.;
    256272      variance=spec_window_(Range(1,Range::lastIndex()), Range(i), Range(kz)).Sum();
    257       xnt_[i]=variance;
     273      //      xnt_[i]=variance;
    258274      clnflg_(i,kz)=0;
    259275      if (variance<varmin_) { clnflg_(i,kz)=1;  nbadpaq_[i]++; }
    260276      else if (variance>varmax_) { clnflg_(i,kz)=2;  nbadpaq_[i]++; }
    261277    }
    262   dtp_->AddRow(xnt_);
     278    if (dtp_)  dtp_->AddRow(xnt_);
    263279  }
    264280  return;
  • trunk/AddOn/TAcq/brproc.h

    r3905 r3938  
    2626
    2727using namespace std;
     28
    2829
    2930 
     
    5152  inline sa_size_t PaqNumToArrayIndex(uint_8 numpaq)  { return numpaq%spec_window_.SizeZ() ; }
    5253
    53 // Pour definir le nombre maximum de fichiers de fenetres de spectres
     54// Pour definir le nombre maximum de fichiers de fenetres de spectres a sauver sur fichiers
    5455  inline void SetMaxNbSepcWinFiles(uint_4 nmax=0)  {  nmaxfiles_specw_=nmax; }
     56
     57// Pour definir le datatable a remplir - pas de DataTable rempli si pas appele
     58  virtual void DefineDataTable();
    5559
    5660  inline void SetVarianceLimits(double vmin=0., double vmax=9.e99)
  • trunk/AddOn/TAcq/specmfib.cc

    r3905 r3938  
    5050    if (rc) return rc;
    5151    par.Print(cout);
    52     if ((par.action_!="cube3d")&&(par.action_!="mspec")) {
    53       cout << " !!! specmfib.cc  BAD action = " << par.action_ << " possible values: mspec,cube3d" << endl;
     52    if ((par.action_!="cube3d")&&(par.action_!="mspec")&&(par.action_!="bproc")) {
     53      cout << " !!! specmfib.cc  BAD action = " << par.action_ << " possible values: mspec,cube3d,bproc" << endl;
    5454      return 5;
    5555    }   
     
    7474    procms.SetVarianceLimits(par.vmin_, par.vmax_);
    7575    if (par.gainfile_.length()>0) procms.ReadGainFitsFile(par.gainfile_);
     76    procms.SetPrintLevel(par.prtlevel_,par.prtmodulo_);
     77    // Il faut appeler procms.DefineDataTable() si on veut remplir le DataTable
    7678
    7779    BRFFTCalculator procfft(mmgr, par.fgsinglechannel_);
     
    8385    FitsCubeWriter wrt(mmgr, par.outpath_, par.nbloc_);
    8486
     87    BRBaseProcessor* bproc_p=NULL;
     88    if (par.action_=="bproc") {
     89       bproc_p = new BRBaseProcessor(mmgr);
     90       bproc_p->SetPrintLevel(par.prtlevel_,par.prtmodulo_);
     91       if (!par.fgdatafft_)  bproc_p->SetMemZAction(MemZA_ProcB);
     92    }
     93
    8594    cout << " specmfib: Starting threads (reader meanSpecCalculator ...) ... " << endl;
    8695    reader.start();
     
    8897    else {  // Calcul spectre moyenne
    8998      if (!par.fgdatafft_)  procfft.start();
    90       procms.start();
     99      if (par.action_=="bproc")  bproc_p->start();
     100      else procms.start();
    91101    }
    92102    usleep(200000);
     
    95105    else {
    96106      if (!par.fgdatafft_)  procfft.join();
    97       procms.join();
     107      if (par.action_=="bproc")  bproc_p->join();
     108      else procms.join();
    98109    }
    99110    mmgr.Print(cout);
     111    if (bproc_p) delete bproc_p;
    100112    cout << resu ;
    101113  }
  • trunk/AddOn/TAcq/svv2mtx.cc

    r3714 r3938  
    173173
    174174  cout << " ---- ProcSVFiles()-Begin - Reading chanum vector" << endl;
    175   TVector< uint_4 > chanum;
     175  /*
     176  TVector< uint_4 > chanum(8*17);
     177  int ku=0;
     178  for(int iu=1; iu<=16; iu++)
     179    for(int ju=iu; ju<=16; ju++)  {
     180      chanum(ku)=iu*1000+ju;  ku++;
     181    }
     182  */
     183  TVector< uint_4 > chanum;     
    176184  {
    177   sprintf(fname, "%s/chanum.ppf",inoutpath.c_str());
     185  sprintf(fname, "%s/chanum_0.ppf",inoutpath.c_str());
    178186  PInPersist pic(fname);
    179   pic >> chanum;
    180   }
    181 
     187  pic >> PPFNameTag("chanpairnum") >> chanum;
     188  }
     189 
    182190  cout << " ---- ProcSVFiles()-Read chanum done " << endl;
    183191  sa_size_t nrows = (imax-imin+1)/istep;
    184192  sa_size_t kr=0;
    185193
     194  sa_size_t mtf_binfreq=25;
     195  sa_size_t mtf_bintime=5;
     196
     197  sa_size_t ncols=1;
     198
    186199  for(int ifile=imin; ifile<=imax; ifile+=istep) {
    187     sprintf(fname, "%s/vismtx%d.ppf",inoutpath.c_str(),ifile);
     200    sprintf(fname, "%s/vismtx_0_%d.ppf",inoutpath.c_str(),ifile);
    188201    cout << " ProcSVFiles[" << ifile << "] opening file " << fname << endl;
    189202    PInPersist pin(fname);
     
    192205
    193206    if (ifile==imin) {
    194       sa_size_t ncols = vismtx.NCols();
     207      ncols = vismtx.NCols();
    195208      cout << " ProcSVFilesVJun09/Info: Output Time-Frequency matrices NRows=NFiles"
    196209           << nrows << " NCols=NFreq=" << ncols << endl;
    197210      for(size_t j=0; j<rowlist.size(); j++)   
    198         vmtf.push_back(TMatrix< complex<r_4> >(nrows, ncols) );
    199     }
     211        vmtf.push_back(TMatrix< complex<r_4> >(ncols/mtf_binfreq+1, nrows/mtf_bintime+1));
     212    }
     213    /*
    200214    for(size_t j=0; j<rowlist.size(); j++)
    201215      vmtf[j].Row(kr) = vismtx.Row(rowlist[j]);
     216    */
     217    for(size_t j=0; j<rowlist.size(); j++)
     218      for(sa_size_t icf=0; icf<ncols; icf++)  {
     219        vmtf[j](icf/mtf_binfreq,kr/mtf_bintime)+=vismtx(rowlist[j],icf);
     220    }
     221    //    cout << " DBG* kr=" << kr << " kr/mtf_bintime=" << kr/mtf_bintime
     222    //     << " ncols/2/mtf_binfreq=" << ncols/2/mtf_binfreq << endl;
    202223    kr++;
     224
    203225     
    204226// Calcul moyenne dans des bandes en frequence
Note: See TracChangeset for help on using the changeset viewer.