Changeset 1467 in Sophya


Ignore:
Timestamp:
Apr 12, 2001, 3:14:22 PM (24 years ago)
Author:
ansari
Message:

Debug de SimpleDeglitcher, ajout de SimpleFanOut , Reza 12/4/2001

Location:
trunk/ArchTOIPipe
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ArchTOIPipe/Kernel/fitstoiwtr.cc

    r1464 r1467  
    7979      cout << " Column[" << j+1 << "] -Flag- Name=" << coln[ck] << endl;
    8080      ck++;
    81       coltypes[j+2] = "1J";
     81      coltypes[j+2] = "1I";
    8282      colunits[j+2] = "Int_8Flag";
    8383    }
     
    102102
    103103  double* tabdata = new double[ndata];
    104   long* tabflag = new long[ndata]; // ? pas int_8 ?? $CHECK$ - Reza
     104  int* tabflag = new int[ndata]; // ? pas int_8 ?? $CHECK$ - Reza
    105105  bool* tabck = new bool[ndata];
    106106  int i;
     
    133133        if (outFlags) {
    134134          fits_write_col_dbl(fptr, 2*i+2, fitsLine, 1, 1, tabdata+i, &fstatus);
    135           fits_write_col_lng(fptr, 2*i+3, fitsLine, 1, 1, tabflag+i, &fstatus);
     135          fits_write_col_int(fptr, 2*i+3, fitsLine, 1, 1, tabflag+i, &fstatus);
    136136        } else {
    137137          fits_write_col_dbl(fptr, i+2, fitsLine, 1, 1, tabdata+i, &fstatus);
  • trunk/ArchTOIPipe/ProcWSophya/simtoipr.cc

    r1464 r1467  
    8787  try {
    8888    Timer tm("SimpleDeglitcher::run()");
     89    Vector vin(wsize);
     90
     91    int wrec = maxpoints*2;
     92    Vector vrec(wrec);
     93
     94    TVector<int_8> vfg(wsize);
     95    int wsz2 = wsize/2;
    8996    // Le debut
    90     Vector vin(wsize);
    91     TVector<int_8> vfg(wsize);
    9297    int k;
    93     for(k=0; k<wsize; k++)
     98    for(k=0; k<wsz2; k++)
    9499      getData(0, k+snb, vin(k), vfg(k));
    95100
    96     double s = vin.Sum();
    97     double mean = s/wsize;
    98     for(k=0; k<wsize; k++) {
    99       if ( (vin(k) < range_min) || (vin(k) > range_max) ) {
    100         vin(k) = mean;
    101         vfg(k) |= 2;
    102         out_range_nscount++;
    103       }
    104     }
    105     s = vin.Sum();
    106     mean = s/wsize;
    107 
    108     double s2 = vin.SumX2();
    109     double sigma = sqrt(s2/wsize-mean*mean);
     101    int nokdebut = 0.;
     102    double s = 0.;   
     103    double mean = 0.;
     104    double s2 = 0.;
     105    double sigma = 0.;
     106    for(k=0; k<wsz2; k++) {
     107      if ( vfg(k) != 0) continue;
     108      if ( (vin(k) < range_min) || (vin(k) > range_max) ) continue;
     109      s += vin(k);
     110      s2 += vin(k)*vin(k);
     111      nokdebut++;
     112    }
     113    if (nokdebut > 0) {
     114      mean = s/nokdebut;
     115      if (nokdebut > 1)  sigma = sqrt(s2/nokdebut-mean*mean);
     116    }
     117    for(k=wsz2; k<wsize; k++) {
     118      vin(k) = mean;
     119      vfg(k) = 0;
     120    }
     121
     122    for(k=0; k<wrec; k++) {
     123      if ( (vin(k) < range_min) || (vin(k) > range_max) ) vrec(k)=mean;
     124      else vrec(k)=vin(k);   
     125    }
     126
     127    bool fgokdebut = false;
     128
    110129    int kgl = -1;
    111130    int ii,lastput;
    112131    bool fgglitch = false;
    113132    double valcur,valsub,valadd;
     133    double lastvalok = mean;
    114134    uint_8 fgcur;
    115 
     135    bool fgokcur=false;
    116136    // Boucle sur les sampleNum
    117137
    118     for(k=0;k<=sne-snb;k++) {
     138    int knext;
     139    int kfin = sne-snb;
     140    for(k=0;k<=kfin;k++) {
    119141      totnscount++;
    120142//       if (k%10000 == 0) cout << " DBG: K=" << k << endl;
     143      knext = k+wsz2;
    121144      // Calcul mean-sigma
    122       if (k>=wsize)  {
    123         valsub = vin(k%wsize);
    124         getData(0, k+snb, vin(k%wsize), vfg(k%wsize));
    125         valadd = vin(k%wsize);
    126         if ( (valadd < range_min) || (valadd > range_max) )
     145      if (knext<=kfin)  {
     146        valsub = vin(knext%wsize);
     147        getData(0, knext+snb, vin(knext%wsize), vfg(knext%wsize));
     148        valadd = vin(knext%wsize);
     149        if ( (valadd < range_min) || (valadd > range_max) ) {
    127150          valadd = mean;
    128         s += (valadd-valsub);
    129         s2 += (valadd*valadd-valsub*valsub);
    130         mean = s/wsize;
    131         sigma = sqrt(s2/wsize-mean*mean);
    132       }
     151          fgokcur = false;
     152        }
     153        else fgokcur = true;
     154        if ( (valsub < range_min) || (valsub > range_max) )
     155          valsub = mean;
     156        if (!fgokdebut && fgokcur) {
     157          s += valadd;
     158          s2 += valadd*valadd;
     159          nokdebut++;
     160          mean = s/nokdebut;
     161          if (nokdebut > 1)  sigma = sqrt(s2/nokdebut-mean*mean);
     162          if (nokdebut >= wsize)  {
     163            fgokdebut = true;
     164            cout << " SimpleDeglitcher::DebugInfo -  nokdebut=" << nokdebut
     165                 << " k=" << k << " knext=" << knext
     166                 << "\n ...DebugInfo mean=" << mean
     167                 << " sigma=" << sigma << " s=" << s << " s2=" << s2 << endl;
     168          }
     169        }
     170        else {
     171          s += (valadd-valsub);
     172          s2 += (valadd*valadd-valsub*valsub);
     173          mean = s/wsize;
     174          sigma = sqrt(s2/wsize-mean*mean);
     175        }
     176      }
     177
    133178
    134179      //  On gere les sorties Mean et Sigma
     
    140185        putData(3, k+snb, vin(k%wsize), vfg(k%wsize));
    141186
    142       valcur = vin(k%wsize);
    143187      if ( (valcur < range_min) || (valcur > range_max) ) {
    144188        vin(k%wsize) = valcur = mean;
     
    146190        out_range_nscount++;
    147191      }
     192      valcur = vin(k%wsize);
     193      fgcur = vfg(k%wsize);
    148194       
    149195      if (!fgout)   continue;  // Pas de sortie out (deglitche)
     
    158204//            }
    159205
    160       if (valcur < mean+nsig*sigma) {  // inferieur au seuil
     206      double curnsig = nsig;
     207      if (fgglitch)  curnsig /= 2.;
     208       
     209      if (valcur < mean+curnsig*sigma) {  // inferieur au seuil
    161210        if (fgglitch) { 
    162211          if (k-kgl < maxpoints) {   // On vient de detecter un glitch
    163212            glcount++;
     213            double recval = vrec.Sum()/wrec;
    164214            for(ii=kgl; ii<k; ii++) {
    165               putData(0, ii+snb, mean, vfg(ii%wsize)|5);
     215              putData(0, ii+snb, recval, vfg(ii%wsize)|5);
    166216              glnscount++;
    167217            }
     
    178228        lastput = snb+k;
    179229        kgl = -1;  fgglitch = false;
     230        vrec(k%wrec) = lastvalok = valcur;
    180231      }
    181232      else {  // Superieur au seuil
     
    186237            lastput = snb+k;
    187238            fgglitch = false; 
     239            vrec(k%wrec) = lastvalok = valcur;     
    188240          }
    189241        }
     
    196248            lastput = snb+k;
    197249          }
     250          vrec(k%wrec) = lastvalok;         
    198251        }
    199252      }
     
    257310  totnscount = 0;
    258311  coef = new double[wsz];
     312  for(int k=0; k<wsz; k++) coef[k] = 0.;
    259313  switch (fk) {
    260314    case UserFilter :
    261315      throw ParmError("SimpleFilter: Error in filter Kind (UserFilter)!");
    262       break;
     316      //      break;
    263317    case MeanFilter :
    264318      for(int kk=0; kk<wsz; kk++)
     
    271325    case GaussFilter :
    272326      for(int kk=-(wsz/2); kk<=(wsz/2); kk++)
    273         coef[kk] = a*exp((double)(kk*kk)/(s*s));
     327        coef[kk+(wsz/2)] = a*exp(-(double)(kk*kk)/(s*s));
    274328      break;
    275329    case DiffFilter :
     
    280334    default :
    281335      throw ParmError("SimpleFilter: Error in filter Kind (UnknownFilter)!");
    282       break;
     336      //      break;
    283337  }
    284338}
     
    371425    for(k=0;k<=sne-snb;k++) {
    372426      double sortie = 0;
    373       for(int ii=0; ii<wsize; ii++) {
    374         sortie += vin(ii)*coef[(ii+wsz2)%wsize];
     427      for(int ii=-wsz2; ii<=wsz2; ii++) {
     428        sortie += vin((ii+k+wsize)%wsize)*coef[ii+wsz2];
    375429      }
    376430      putData(0,k+snb,sortie,vfg(k%wsize));
     
    510564
    511565
    512 
     566// ---------------------------------------------------------------
     567// -------------------- Classe SimpleFanOut -----------------------
     568// ---------------------------------------------------------------
     569
     570SimpleFanOut::SimpleFanOut(int nbinput, int mfanout)
     571{
     572  if (nbinput < 1)
     573    throw ParmError("SimpleFanOut::SimpleFanOut() NbInput < 1 !");
     574  if (mfanout < 1)
     575    throw ParmError("SimpleFanOut::SimpleFanOut() M_FanOut < 1 !");
     576
     577  nb_input = nbinput;
     578  m_fanout = mfanout;
     579  totnscount = 0;
     580}
     581
     582SimpleFanOut::~SimpleFanOut()
     583{
     584}
     585
     586
     587void SimpleFanOut::PrintStatus(ostream & os)
     588{
     589  os << "\n ------------------------------------------------------ \n"
     590     << " SimpleFanOut::PrintStatus() - NbInput=" << NbInput()
     591     << " M_FanOut=" << MFanOut() << endl;
     592  TOIProcessor::PrintStatus(os);
     593  os << endl;
     594  os << " ProcessedSampleCount=" << ProcessedSampleCount() << endl;
     595  os << " ------------------------------------------------------ " << endl;
     596}
     597
     598void SimpleFanOut::init() {
     599  cout << "SimpleFanOut::init NbInput=" << nb_input << endl;
     600  char buff[64];
     601  for(int k=0; k<nb_input; k++) {
     602    sprintf(buff,"in%d", k);
     603    declareInput(buff);
     604    for(int j=0; j<m_fanout; j++) {
     605      sprintf(buff,"out%d_%d", k, j);
     606      declareOutput(buff);
     607    }
     608  }
     609
     610  name = "SimpleFanOut";
     611  //  upExtra = 1;
     612}
     613
     614void SimpleFanOut::run() {
     615  //  TOIManager* mgr = TOIManager::getManager();
     616  int snb = getMinIn();
     617  int sne = getMaxIn();
     618
     619  TVector<int_4> in_index(nb_input);
     620  TMatrix<int_4> out_index(nb_input, m_fanout);
     621  in_index = -1;
     622  out_index = -1;
     623  int nbconin = 0;
     624  bool fggin = false;
     625  char buff[64];
     626  for(int ki=0;ki<nb_input;ki++) {
     627    sprintf(buff,"in%d", ki);
     628    int idx = getInputTOIIndex(buff);
     629    if (!checkInputTOIIndex(idx)) continue;
     630    nbconin++;
     631    in_index(ki) = idx;
     632    bool fgout = false;
     633    for(int jo=0; jo<m_fanout; jo++) {
     634      sprintf(buff,"out%d_%d", ki, jo);
     635      int odx = getOutputTOIIndex(buff);
     636      if (checkOutputTOIIndex(odx)) {
     637        out_index(ki, jo) = odx;
     638        fgout = true;
     639      }
     640    }
     641    if (!fgout) {
     642      string msg_err =
     643        "SimpleFanOut::run() - No connected Output for Input TOI ("
     644        + getInName(ki) + ") !";
     645      cerr << msg_err << endl;
     646      throw ParmError(msg_err);
     647    }
     648  }
     649  if (nbconin == 0) {
     650    cerr << " SimpleFanOut::run() - No Input TOI connected! "
     651         << endl;
     652    throw ParmError("SimpleFanOut::run() No Inout TOI connected!");
     653  }
     654
     655  /*
     656  for(int ki=0;ki<nb_input;ki++) {
     657    cout << " SimpleFanOut::run() In(" << ki << ") Index=" << in_index(ki)
     658         << " Name=" << getInName(in_index(ki)) << endl;
     659    for(int jo=0; jo<m_fanout; jo++)
     660      cout << " .... Out(" << ki << "," << jo << ") Index=" << out_index(ki, jo)
     661           << " Name=" << getOutName(out_index(ki, jo)) << endl;
     662  }
     663  */
     664  cout << " SimpleFanOut::run() SNRange=" << snb << " - " << sne << endl;
     665 
     666
     667  try {
     668    Timer tm("SimpleFanOut::run()");
     669    double valin = 0.;
     670    int_8 fgin = 0;
     671    for(int k=snb;k<=sne;k++) {
     672      for(int i=0;i<nb_input;i++) {
     673        if (in_index(i) < 0) continue;
     674        valin = 0;
     675        fgin = 0;
     676        getData(in_index(i), k, valin, fgin);
     677        for(int j=0; j<m_fanout; j++) {
     678          if (out_index(i, j) < 0)  continue;
     679          putData(out_index(i, j), k, valin, fgin);
     680        }
     681      }
     682      totnscount++;
     683    }  // Boucle sur les num-sample
     684    cout << " SimpleFanOut::run() - End of processing "
     685         << " ProcessedSampleCount=" << ProcessedSampleCount() << endl;
     686  }  // Bloc try
     687
     688  catch (PException & exc) {
     689    cerr << "SimpleFanOut: Catched Exception " << (string)typeid(exc).name()
     690         << "\n .... Msg= " << exc.Msg() << endl;
     691  }                                                                             
     692}
     693
     694
     695
  • trunk/ArchTOIPipe/ProcWSophya/simtoipr.h

    r1454 r1467  
    115115
    116116
     117//  Classe SimpleFanOut
     118//  Transforme recopie chaque entree sur M lignes de sortie
     119
     120class SimpleFanOut : public TOIProcessor {
     121public:
     122                SimpleFanOut(int nbinput, int mfanout);
     123                ~SimpleFanOut();
     124
     125  inline int    NbInput() const { return nb_input; }
     126  inline int    MFanOut() const { return m_fanout; }
     127  inline int_8  ProcessedSampleCount() const { return totnscount; }
     128
     129  virtual void  PrintStatus(ostream & os) ; // const plus tard
     130
     131  virtual void  init(); 
     132  virtual void  run();
     133
     134protected:
     135  int nb_input;
     136  int m_fanout;
     137  int_8 totnscount;   // Nombre total d'echantillon processe
     138};
     139
    117140#endif
  • trunk/ArchTOIPipe/TestPipes/simtst.cc

    r1462 r1467  
    2222  }
    2323  else {
    24     cout << "\n Usage : simtst [-sproc] [-rwtoi] [-dbg] [-start snb] [-end sne] \n"
    25          << "         [-w1 sz] [-w2 sz] inFitsName outFitsName ppfFileName \n"
    26          << "   -sproc : Run RzSimpleTOIProc (default RzTOIProc) \n"
    27          << "   -rwtoi : Use Regular Window TOI (default TOISeqBuffered) \n"
     24    cout << "\n Usage : simtst [-dbg] [-start snb] [-end sne] \n"
     25         << "         [-wtoi sz] [-w2 sz] inFitsName outFitsName ppfFileName \n"
    2826         << "   -dbg : sets TOISeqBuffered debug level to 1 \n"
    2927         << "   -start snb : sets the start sample num \n"
     
    3129         << "   -range min,max : sets the acceptable range for intoi \n"
    3230         << "              default= -16000,16000\n"
    33          << "   -intoi toiName : select input TOI name (def boloMuV_11)\n"
    34          << "   -w1 sz : sets main data window size (def= 8192)\n"
    35          << "   -w2 sz : sets secondary window size (def= 512) \n"
     31         << "   -intoi toiName : select input TOI name (def boloMuV_27)\n"
     32         << "   -wtoi sz : sets TOISeqBuff buffer size (def= 8192)\n"
     33         << "   -wdegli sz : sets deglitcher window size (def= 512) \n"
    3634         << endl;
    3735    exit(0);
     
    4543  cout << "simtst starting - Decoding arguments " << " narg=" << narg << endl;
    4644
    47   bool fgsimple = false;
    48   bool fgrwtoi = false;
    4945  bool fgdbg = false;
    5046  int w1 = 8192;
    51   int w2 = 256;
     47  int w2 = 512;
    5248  int nmax = 10;
    5349  int istart = 104121000+w1*5;
     
    5854  string outfile;
    5955  string ppffile;
    60   string intoi = "boloMuV_11";
     56  string intoi = "boloMuV_27";
    6157
    6258  if (narg < 4) Usage(true);
     
    7268      iend = atoi(arg[ia+1]); ia++;
    7369    }   
    74     else if (strcmp(arg[ia],"-w1") == 0) {
     70    else if (strcmp(arg[ia],"-wtoi") == 0) {
    7571      if (ia == narg-1) Usage(true); 
    7672      w1 = atoi(arg[ia+1]); ia++;
    7773    }   
    78     else if (strcmp(arg[ia],"-w2") == 0) {
     74    else if (strcmp(arg[ia],"-wdegli") == 0) {
    7975      if (ia == narg-1) Usage(true); 
    8076      w2 = atoi(arg[ia+1]); ia++;
     
    8985      intoi = arg[ia+1]; ia++;
    9086    }   
    91     else if (strcmp(arg[ia],"-sproc") == 0)  fgsimple = true;
    92     else if (strcmp(arg[ia],"-rwtoi") == 0)  fgrwtoi = true;
    9387    else if (strcmp(arg[ia],"-dbg") == 0)  fgdbg = true;
    9488
     
    131125    TOISeqBuffered * toiin = new TOISeqBuffered("f2in", w1);
    132126    if (fgdbg) toiin->setDebugLevel(1);
    133     TOISeqBuffered * toiout = new TOISeqBuffered("out", w1);
    134     if (fgdbg) toiout->setDebugLevel(1);
     127    TOISeqBuffered * toidegli = new TOISeqBuffered("degli", w1);
     128    if (fgdbg) toidegli->setDebugLevel(1);
    135129    TOISeqBuffered * toimean = new TOISeqBuffered("mean", w1);
    136130    if (fgdbg) toimean->setDebugLevel(1);
     
    161155    degl.SetRange(range_min, range_max);
    162156    degl.addInput("in", toiin);
    163     degl.addOutput("out", toiout);
     157    degl.addOutput("out", toidegli);
    164158    degl.addOutput("mean", toimean);
    165159    degl.addOutput("sigma", toisig);
    166160    degl.addOutput("incopie", toiincopie);
    167  
    168     /*   
    169     cout << " Creating a GaussianFilter SimplFilterObject " << endl;
    170     SimpleFilter filt(..)
    171     TOISeqBuffered * toiincopie = new TOISeqBuffered("incopie", w1);
    172     if (fgdbg) toiincopie->setDebugLevel(1);
    173     */
    174 
     161   
     162    cout << " Creating a FanOut SimpleFanOut Object " << endl;
     163    SimpleFanOut fanout(2,2);
     164    TOISeqBuffered * toidegli0 = new TOISeqBuffered("degli0", w1);
     165    if (fgdbg) toidegli0->setDebugLevel(1);
     166    TOISeqBuffered * toidegli1 = new TOISeqBuffered("degli1", w1);
     167
     168    TOISeqBuffered * toimean0 = new TOISeqBuffered("mean0", w1);
     169    if (fgdbg) toimean0->setDebugLevel(1);
     170    TOISeqBuffered * toimean1 = new TOISeqBuffered("mean1", w1);
     171    if (fgdbg) toimean1->setDebugLevel(1);
     172   
     173    fanout.addInput("in0", toidegli);
     174    fanout.addOutput("out0_0", toidegli0);
     175    fanout.addOutput("out0_1", toidegli1);
     176    fanout.addInput("in1", toimean);
     177    fanout.addOutput("out1_0", toimean0);
     178    fanout.addOutput("out1_1", toimean1);
     179
     180    cout << " Creating an Adder SimpleAdder Object " << endl;
     181    SimpleAdder adder(2);
     182    adder.addInput("in0", toidegli0);
     183    adder.addInput("in1", toimean0);
     184    adder.SetGain(0, 1.);
     185    adder.SetGain(1, -1.);
     186    TOISeqBuffered * toideglioff = new TOISeqBuffered("deglioff", w1);
     187    if (fgdbg) toideglioff->setDebugLevel(1);
     188    adder.addOutput("out", toideglioff);
     189
     190    cout << " Creating a GaussianFilter SimpleFilter Object " << endl;
     191    SimpleFilter filt(8, SimpleFilter::GaussFilter, 1., 2.);
     192
     193    filt.addInput("in", toideglioff);
     194    TOISeqBuffered * toiout = new TOISeqBuffered("out", w1);
     195    if (fgdbg) toiout->setDebugLevel(1);
     196    TOISeqBuffered * toideglioffcopie = new TOISeqBuffered("deglioffcopie", w1);
     197    if (fgdbg) toideglioffcopie->setDebugLevel(1);
     198    filt.addOutput("out", toiout);
     199    filt.addOutput("incopie", toideglioffcopie);
     200   
     201
     202    cout << " Connecting to output (FitsWriter) " << endl;
     203   
    175204    w.setOutFlags(true);
    176205    w.addInput("in", toiincopie);
    177     w.addInput("degli", toiout);
    178     w.addInput("mean", toimean);
     206    w.addInput("out", toiout);
     207    w.addInput("degli", toidegli1);
     208    w.addInput("deglioff", toideglioffcopie);
     209    w.addInput("mean", toimean1);
    179210    w.addInput("sigma", toisig);
    180211
    181212    cout << " ------ FITSReaderTOI::PrintStatus() : ----- " << endl;
    182213    r.PrintStatus(cout); 
     214    cout << " ------ FanOut::PrintStatus() : ----- " << endl;
     215    fanout.PrintStatus(cout); 
     216    cout << " ------ Adder::PrintStatus() : ----- " << endl;
     217    adder.PrintStatus(cout); 
     218    cout << " ------ Filter::PrintStatus() : ----- " << endl;
     219    filt.PrintStatus(cout); 
    183220    cout << "----- FITSWriterTOI::PrintStatus() : ----- " << endl;
    184221    w.PrintStatus(cout); 
     
    187224    r.start();
    188225    degl.start();
     226    fanout.start();
     227    adder.start();
     228    filt.start();
    189229    w.start();
    190230
    191     /*   
     231    /*
    192232    for(int jj=0; jj<3; jj++) {
    193233      cout << *toiin;
     234      cout << *toimean;
     235      cout << *toimean1;
    194236      cout << *toiout;
    195237      sleep(1);
    196238    }
     239   
    197240    */
    198241
     
    205248    //    w.PrintStatus(cout); 
    206249
     250    cout << " ------ toiin, toidegli and toiout Status information ------- " << endl;
     251    cout << *toiin;
     252    cout << *toidegli;
     253    cout << *toiout;
     254
    207255    cout << degl;
    208     cout << " ------ toiin and toiout Status information ------- " << endl;
    209     cout << *toiin;
    210     cout << *toiout;
     256    cout << filt;
     257    cout << adder;
     258
    211259  }
    212260  catch (PThrowable & exc) {
Note: See TracChangeset for help on using the changeset viewer.