Changeset 2008 in Sophya


Ignore:
Timestamp:
May 16, 2002, 3:13:00 PM (23 years ago)
Author:
ansari
Message:

Correction bugs estimation offset par ajustement polynomial - Reza 16/5/2002

Location:
trunk/ArchTOIPipe
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ArchTOIPipe/ProcWSophya/simoffset.cc

    r2004 r2008  
    2020  mWSz = (mwsz > 8) ? mwsz : 8;
    2121  nPtFit = (nptfit > degpol+2) ? nptfit : degpol+2;
     22  if (nPtFit%2 == 0) nPtFit++;
    2223  degPol = (degpol > 1)?degpol:1;
    2324  totnscount = 0;
     
    9596    int wsize = mWSz;
    9697
    97     Vector vin(wsize);
     98    int hisblk = nPtFit/2+1;
     99    Vector vinhist(wsize*hisblk);
     100    TVector<uint_8> vfghist(wsize*hisblk);
    98101    Vector voff(wsize);
    99102    Vector vout(wsize);
    100     TVector<uint_8> vfg(wsize);
     103    Vector vinc(wsize);
     104    TVector<uint_8> vfgc(wsize);
     105
    101106   
    102107    // Pour le fit
    103     Vector errCoef(3);
    104    
    105     Vector X(nPtFit);
    106     Vector X0(nPtFit);
    107     Vector Y(nPtFit);
    108     Vector YErr(nPtFit);
     108    Vector errCoef(degPol+1);
     109   
     110    Vector X(nPtFit+1);
     111    Vector X0(nPtFit+1);
     112    Vector Y(nPtFit+1);
     113    Vector YErr(nPtFit+1);
    109114
    110115    // Variables diverses
    111     int k,i,j,klast;
    112     int nks = 0;
     116    int k,kb,j,klast;
    113117    klast = snb-1;
    114118    totnbblock = 0;
     
    124128    double sig = 0.;
    125129    double meanx = 0.;
    126    
     130    double sn_last = 0.;
     131    double y_last = 0.;
     132
    127133    // Boucle sur les sampleNum
    128     // 1er partie, on traite par paquets de wsize
    129 
    130     for(k=snb;k<=sne-wsize+1;k+=wsize) {
     134    // 1ere partie, on traite par paquets de wsize
     135    int nblk = (sne-snb+1)/wsize;
     136    for(kb=0; kb<nblk; kb++) {
     137      k = kb*wsize+snb;
     138      //    for(k=snb;k<=sne-wsize+1;k+=wsize) {
    131139      // Lecture d'un bloc de donnees
     140      Vector vin( vinhist(Range((kb%hisblk)*wsize, 0, wsize) ) );
     141      TVector<uint_8> vfg( vfghist(Range((kb%hisblk)*wsize, 0, wsize) ) );
     142
    132143      getData(0, k, wsize, vin.Data(), vfg.Data());
    133144
     
    144155      }
    145156     
    146       sn0 = (double)(k+wsize/2);
    147157     
    148158      if (!fginiXYdone) {
     
    152162          sig = sig/nok-mean*mean;     
    153163        }
    154         X = RegularSequence(k+wsize*0.5, (double)wsize);
     164        X = RegularSequence((kb+0.5)*wsize, (double)wsize);
    155165        Y = mean;
    156166        YErr = (nok > 0.5) ? sqrt(mean) : 1.;
     
    158168      }
    159169
    160       if (nok > 3.) {
     170      if (nok > 3.5) {
    161171        mean /= nok;
    162172        meanx /= nok;
    163173        sig = sig/nok-mean*mean;
     174        if (sig < 1.e-6*mean) sig = 1.e-6*mean;
    164175        int kk = nbblkok%nPtFit;
    165176        nbblkok++;
     
    169180      }
    170181     
    171       X0 = X;
    172       X0 -= sn0;
    173       if (nbblkok > poly.Degre()+1)
     182      if ((nok>3.5) && (nbblkok >= nPtFit) ) {
     183        // On force le fit a garder une certaine continuite
     184        Y(nPtFit) = y_last;
     185        double smin, smax;
     186        YErr(Range(0,0,nPtFit)).MinMax(smin, smax);
     187        YErr(nPtFit) = smax/10.;
     188        X(nPtFit) = sn_last;
     189        sn0 = (double)(k-nPtFit*wsize*0.5);
     190        X0 = X;
     191        X0 -= sn0;
    174192        poly.Fit(X0,Y,YErr,degPol,errCoef);
     193      }
    175194      else {
    176         poly[0] = mean;
    177         for(int jj=1; jj<=poly.Degre(); jj++) poly[jj] = 0.;
    178       }
    179       /*
    180       if (nbblkok < 8) {
    181         cout << "------ DBG-X " << nbblkok << "," << nok << " degre=" << poly.Degre() << endl;
    182         cout << "DBG-A X0=" << X0 << endl;
    183         cout << "DBG-A Y=" << Y << endl;
    184         cout << "DBG-A YErr=" << YErr << endl;
    185         cout << "DBG-A poly= " << poly << endl;
    186       }
    187       */
    188      
    189       // Calcul des valeurs d'offset en sortie
    190       for(j=0; j<wsize; j++)
    191         voff(j) = poly(k+j-sn0);
    192      
    193       if (fgoffset) putData(0, k, wsize, voff.Data());
    194       if (fgincopie) putData(2, k, wsize, vin.Data(), vfg.Data());
    195       if (fgout) {
    196         vin -= voff;
    197         putData(1, k, wsize, vin.Data(), vfg.Data());
    198       }
    199      
    200       if (fga0) {
    201         vout = poly[0];
    202         putData(3, k, wsize, vout.Data());
    203       }
    204       if (fga1) {
    205         vout = poly[1];
    206         putData(4, k, wsize, vout.Data());
    207       }
    208       if (fga2) {
    209         vout = poly[2];
    210         putData(5, k, wsize, vout.Data());
    211       }
    212       if (fgsn0) {
    213         vout = sn0;
    214         putData(6, k, wsize, vout.Data());
    215       }
    216       if (fgmeany) {
    217         vout = mean;
    218         putData(7, k, wsize, vout.Data());
    219       }
    220       if (fgsigy) {
    221         vout = sig;
    222         putData(8, k, wsize, vout.Data());
    223       }
    224 
    225       if (fgmeanx) {
    226         vout = meanx;
    227         putData(9, k, wsize, vout.Data());
    228       }
    229 
     195        if (nbblkok < 2) {
     196          sn0 = k+1;
     197          poly[0] = mean;
     198          for(int jj=1; jj<=poly.Degre(); jj++) poly[jj] = 0.;
     199        }
     200        else if (nbblkok < nPtFit) {
     201          poly[0] = 0.5*(Y(nbblkok-1)+Y(0));
     202          poly[1] = (Y(nbblkok-1) - Y(0))/(X(nbblkok-1)-X(0));
     203          sn0 =  0.5*(X(nbblkok-1)+X(0));
     204          for(int jj=2; jj<=poly.Degre(); jj++) poly[jj] = 0.;
     205        }
     206        sn_last = sn0;
     207        y_last = poly(sn_last-sn0);
     208      }
    230209      if (ntpoly) {    // Remplissage du XNTuple de controle
    231         char * nomsnt[] = {"sncur", "sn0", "meanx", "meany", "sigy", "a0", "a1", "a2", "ycur"};
    232210        float xnt[10];
    233211        xnt[0] = k;
     
    243221      }
    244222
     223      /*
     224      if (nbblkok < 8) {
     225        cout << "------ DBG-X " << nbblkok << "," << nok << " degre=" << poly.Degre() << endl;
     226        cout << "DBG-A X0=" << X0 << endl;
     227        cout << "DBG-A Y=" << Y << endl;
     228        cout << "DBG-A YErr=" << YErr << endl;
     229        cout << "DBG-A poly= " << poly << endl;
     230      }
     231      */
     232     
     233      if (fgincopie) putData(2, k, wsize, vin.Data(), vfg.Data());
     234
     235      if (kb < nPtFit/2) continue;
     236      Vector vinc;
     237      TVector<uint_8> vfgc;
     238      int kbs = kb-nPtFit/2;
     239      k = kbs*wsize+snb;
     240      if (kb == nblk-1) {
     241        int wszt = wsize*hisblk;
     242        voff.ReSize(wszt);
     243        vout.ReSize(wszt);     
     244        vinc.ReSize(wszt);
     245        vfgc.ReSize(wszt);
     246        int jb = 0;
     247        for(int kbsc=kbs; kbsc<nblk; kbsc++) {
     248          vinc(Range(jb*wsize, 0, wsize)) =
     249               vinhist(Range((kbsc%hisblk)*wsize, 0, wsize) ) ;
     250          vfgc(Range(jb*wsize, 0, wsize)) =
     251               vfghist(Range((kbsc%hisblk)*wsize, 0, wsize) ) ;
     252          jb++;     
     253        }
     254        wsize = wszt;
     255      }
     256      else {
     257        vinc = vinhist(Range((kbs%hisblk)*wsize, 0, wsize) ) ;
     258        vfgc = vfghist(Range((kbs%hisblk)*wsize, 0, wsize) ) ;
     259      }
     260
     261      // Calcul des valeurs d'offset en sortie
     262      for(j=0; j<wsize; j++)
     263        voff(j) = poly(k+j-sn0);
     264      sn_last = k+wsize;
     265      y_last = poly(sn_last-sn0);
     266
     267      if (fgoffset) putData(0, k, wsize, voff.Data());
     268      if (fgout) {
     269        vinc -= voff;
     270        putData(1, k, wsize, vinc.Data(), vfgc.Data());
     271      }
     272     
     273      if (fga0) {
     274        vout = poly[0];
     275        putData(3, k, wsize, vout.Data());
     276      }
     277      if (fga1) {
     278        vout = poly[1];
     279        putData(4, k, wsize, vout.Data());
     280      }
     281      if (fga2) {
     282        vout = poly[2];
     283        putData(5, k, wsize, vout.Data());
     284      }
     285      if (fgsn0) {
     286        vout = sn0;
     287        putData(6, k, wsize, vout.Data());
     288      }
     289      if (fgmeany) {
     290        vout = mean;
     291        putData(7, k, wsize, vout.Data());
     292      }
     293      if (fgsigy) {
     294        vout = sig;
     295        putData(8, k, wsize, vout.Data());
     296      }
     297
     298      if (fgmeanx) {
     299        vout = meanx;
     300        putData(9, k, wsize, vout.Data());
     301      }
     302
    245303      klast+=wsize;
    246304      totnscount+=wsize;
     
    249307    } // Fin boucle sur les samples, par pas de wsize
    250308
    251     // 2eme partie, on traite la fin du bloc d'echantillons si necessaire
     309    // 3eme partie, on traite la fin du bloc d'echantillons si necessaire
    252310    if (klast < sne) {
    253311      wsize = sne-klast;
    254       vin.ReSize(wsize);
     312      Vector vin(wsize);
    255313      voff.ReSize(wsize);
    256314      vout.ReSize(wsize);
    257       vfg.ReSize(wsize);
     315      TVector<uint_8> vfg(wsize);
     316      k = klast+1;
    258317      getData(0, k, wsize, vin.Data(), vfg.Data());
    259318      for(j=0; j<wsize; j++)
  • trunk/ArchTOIPipe/ProcWSophya/simtoipr.cc

    r2007 r2008  
    33//                               Christophe Magneville
    44//                               Reza Ansari
    5 // $Id: simtoipr.cc,v 1.19 2002-05-15 22:44:51 ansari Exp $
     5// $Id: simtoipr.cc,v 1.20 2002-05-16 13:13:00 ansari Exp $
    66
    77#include "config.h"
     
    2525
    2626  totnscount = glnscount = glcount = out_range_nscount = 0;
     27  srcfgcount = srcfgnscount = 0;
    2728  deglitchdone = false;
    2829
     
    7172     << " GlitchSampleCount=" << GlitchSampleCount()
    7273     << "( " << (double)GlitchSampleCount()*100./nst << " % )" << endl;
     74  os << " SrcFgCount= " << SrcFgCount()
     75     << " SrcFgSampleCount=" << SrcFgSampleCount()
     76     << "( " << (double)SrcFgSampleCount()*100./nst << " % )" << endl;
    7377  os << " ------------------------------------------------------ " << endl;
    7478}
     
    280284          else {  // Trop long ou trop court - ce n'est pas un glitch ...
    281285            uint_8 flg_src = 0;
    282             if (k-kgl > maxpoints)  flg_src = FlgToiSource; // Si trop long
     286            if (k-kgl > maxpoints)  {
     287              flg_src = FlgToiSource; // Si trop long
     288              srcfgcount++; srcfgnscount += (k-kgl);
     289            }
    283290            for(ii=kgl; ii<k; ii++)
    284291              putData(0, ii+snb, vin(ii%wsize), vfg(ii%wsize)|flg_src);
     
    296303          if (k-kgl+1 > maxpoints) {  // serie de points > seuil
    297304            for(ii=kgl; ii<=k; ii++)   // -> Donc pas glitch
    298               putData(0, ii+snb, vin(ii%wsize), vfg(ii%wsize));
     305              putData(0, ii+snb, vin(ii%wsize), vfg(ii%wsize)|FlgToiSource);
     306            srcfgcount++; srcfgnscount += (k-kgl+1);
    299307            lastput = snb+k;
    300308            fgglitch = false; 
     
    308316          else { // On est toujours dans une serie > seuil
    309317            putData(0, k+snb, vin(k%wsize), vfg(k%wsize));
     318            srcfgnscount++;
    310319            lastput = snb+k;   lastvalok = valcur;
    311320          }
  • trunk/ArchTOIPipe/ProcWSophya/simtoipr.h

    r2000 r2008  
    55//                               Christophe Magneville
    66//                               Reza Ansari
    7 // $Id: simtoipr.h,v 1.12 2002-05-14 13:06:58 ansari Exp $
     7// $Id: simtoipr.h,v 1.13 2002-05-16 13:13:00 ansari Exp $
    88
    99
     
    6666  inline int_8  GlitchCount() const { return glcount; }
    6767  inline int_8  GlitchSampleCount() const { return glnscount; }
     68  inline int_8  SrcFgCount() const { return srcfgcount; }
     69  inline int_8  SrcFgSampleCount() const { return srcfgnscount; }
    6870  inline int_8  OutOfRangeSampleCount() const { return out_range_nscount; }
    6971 
     
    7476  int_8 glnscount;    // Nombre total de glitch
    7577  int_8 glcount;      // Nombre de glitch detecte
     78  int_8 srcfgnscount;    // Nombre total d'echantillons flagges source
     79  int_8 srcfgcount;      // Nombre de sections flaggees source
    7680  int_8 out_range_nscount;  // Nombre de sample Out Of Range
    7781  bool deglitchdone;  // Deglitch effectue
  • trunk/ArchTOIPipe/TestPipes/simofftst.cc

    r2000 r2008  
    33//                               Christophe Magneville
    44//                               Reza Ansari
    5 // $Id: simofftst.cc,v 1.1 2002-05-14 13:06:58 ansari Exp $
     5// $Id: simofftst.cc,v 1.2 2002-05-16 13:13:00 ansari Exp $
    66
    77/*   Test de processeurs ds simtoipr.cc   - Reza Avril 2001
     
    3737#include "nooppr.h"
    3838#include "timing.h"
    39 #include "sambainit.h"
     39#include "histinit.h"
    4040#include <stdexcept>
    4141
Note: See TracChangeset for help on using the changeset viewer.