Changeset 1467 in Sophya
- Timestamp:
- Apr 12, 2001, 3:14:22 PM (24 years ago)
- Location:
- trunk/ArchTOIPipe
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ArchTOIPipe/Kernel/fitstoiwtr.cc
r1464 r1467 79 79 cout << " Column[" << j+1 << "] -Flag- Name=" << coln[ck] << endl; 80 80 ck++; 81 coltypes[j+2] = "1 J";81 coltypes[j+2] = "1I"; 82 82 colunits[j+2] = "Int_8Flag"; 83 83 } … … 102 102 103 103 double* tabdata = new double[ndata]; 104 long* tabflag = new long[ndata]; // ? pas int_8 ?? $CHECK$ - Reza104 int* tabflag = new int[ndata]; // ? pas int_8 ?? $CHECK$ - Reza 105 105 bool* tabck = new bool[ndata]; 106 106 int i; … … 133 133 if (outFlags) { 134 134 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); 136 136 } else { 137 137 fits_write_col_dbl(fptr, i+2, fitsLine, 1, 1, tabdata+i, &fstatus); -
trunk/ArchTOIPipe/ProcWSophya/simtoipr.cc
r1464 r1467 87 87 try { 88 88 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; 89 96 // Le debut 90 Vector vin(wsize);91 TVector<int_8> vfg(wsize);92 97 int k; 93 for(k=0; k<ws ize; k++)98 for(k=0; k<wsz2; k++) 94 99 getData(0, k+snb, vin(k), vfg(k)); 95 100 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 110 129 int kgl = -1; 111 130 int ii,lastput; 112 131 bool fgglitch = false; 113 132 double valcur,valsub,valadd; 133 double lastvalok = mean; 114 134 uint_8 fgcur; 115 135 bool fgokcur=false; 116 136 // Boucle sur les sampleNum 117 137 118 for(k=0;k<=sne-snb;k++) { 138 int knext; 139 int kfin = sne-snb; 140 for(k=0;k<=kfin;k++) { 119 141 totnscount++; 120 142 // if (k%10000 == 0) cout << " DBG: K=" << k << endl; 143 knext = k+wsz2; 121 144 // 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) ) { 127 150 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 133 178 134 179 // On gere les sorties Mean et Sigma … … 140 185 putData(3, k+snb, vin(k%wsize), vfg(k%wsize)); 141 186 142 valcur = vin(k%wsize);143 187 if ( (valcur < range_min) || (valcur > range_max) ) { 144 188 vin(k%wsize) = valcur = mean; … … 146 190 out_range_nscount++; 147 191 } 192 valcur = vin(k%wsize); 193 fgcur = vfg(k%wsize); 148 194 149 195 if (!fgout) continue; // Pas de sortie out (deglitche) … … 158 204 // } 159 205 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 161 210 if (fgglitch) { 162 211 if (k-kgl < maxpoints) { // On vient de detecter un glitch 163 212 glcount++; 213 double recval = vrec.Sum()/wrec; 164 214 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); 166 216 glnscount++; 167 217 } … … 178 228 lastput = snb+k; 179 229 kgl = -1; fgglitch = false; 230 vrec(k%wrec) = lastvalok = valcur; 180 231 } 181 232 else { // Superieur au seuil … … 186 237 lastput = snb+k; 187 238 fgglitch = false; 239 vrec(k%wrec) = lastvalok = valcur; 188 240 } 189 241 } … … 196 248 lastput = snb+k; 197 249 } 250 vrec(k%wrec) = lastvalok; 198 251 } 199 252 } … … 257 310 totnscount = 0; 258 311 coef = new double[wsz]; 312 for(int k=0; k<wsz; k++) coef[k] = 0.; 259 313 switch (fk) { 260 314 case UserFilter : 261 315 throw ParmError("SimpleFilter: Error in filter Kind (UserFilter)!"); 262 break;316 // break; 263 317 case MeanFilter : 264 318 for(int kk=0; kk<wsz; kk++) … … 271 325 case GaussFilter : 272 326 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)); 274 328 break; 275 329 case DiffFilter : … … 280 334 default : 281 335 throw ParmError("SimpleFilter: Error in filter Kind (UnknownFilter)!"); 282 break;336 // break; 283 337 } 284 338 } … … 371 425 for(k=0;k<=sne-snb;k++) { 372 426 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]; 375 429 } 376 430 putData(0,k+snb,sortie,vfg(k%wsize)); … … 510 564 511 565 512 566 // --------------------------------------------------------------- 567 // -------------------- Classe SimpleFanOut ----------------------- 568 // --------------------------------------------------------------- 569 570 SimpleFanOut::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 582 SimpleFanOut::~SimpleFanOut() 583 { 584 } 585 586 587 void 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 598 void 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 614 void 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 115 115 116 116 117 // Classe SimpleFanOut 118 // Transforme recopie chaque entree sur M lignes de sortie 119 120 class SimpleFanOut : public TOIProcessor { 121 public: 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 134 protected: 135 int nb_input; 136 int m_fanout; 137 int_8 totnscount; // Nombre total d'echantillon processe 138 }; 139 117 140 #endif -
trunk/ArchTOIPipe/TestPipes/simtst.cc
r1462 r1467 22 22 } 23 23 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" 28 26 << " -dbg : sets TOISeqBuffered debug level to 1 \n" 29 27 << " -start snb : sets the start sample num \n" … … 31 29 << " -range min,max : sets the acceptable range for intoi \n" 32 30 << " default= -16000,16000\n" 33 << " -intoi toiName : select input TOI name (def boloMuV_ 11)\n"34 << " -w 1 sz : sets main data windowsize (def= 8192)\n"35 << " -w 2 sz : sets secondarywindow 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" 36 34 << endl; 37 35 exit(0); … … 45 43 cout << "simtst starting - Decoding arguments " << " narg=" << narg << endl; 46 44 47 bool fgsimple = false;48 bool fgrwtoi = false;49 45 bool fgdbg = false; 50 46 int w1 = 8192; 51 int w2 = 256;47 int w2 = 512; 52 48 int nmax = 10; 53 49 int istart = 104121000+w1*5; … … 58 54 string outfile; 59 55 string ppffile; 60 string intoi = "boloMuV_ 11";56 string intoi = "boloMuV_27"; 61 57 62 58 if (narg < 4) Usage(true); … … 72 68 iend = atoi(arg[ia+1]); ia++; 73 69 } 74 else if (strcmp(arg[ia],"-w 1") == 0) {70 else if (strcmp(arg[ia],"-wtoi") == 0) { 75 71 if (ia == narg-1) Usage(true); 76 72 w1 = atoi(arg[ia+1]); ia++; 77 73 } 78 else if (strcmp(arg[ia],"-w 2") == 0) {74 else if (strcmp(arg[ia],"-wdegli") == 0) { 79 75 if (ia == narg-1) Usage(true); 80 76 w2 = atoi(arg[ia+1]); ia++; … … 89 85 intoi = arg[ia+1]; ia++; 90 86 } 91 else if (strcmp(arg[ia],"-sproc") == 0) fgsimple = true;92 else if (strcmp(arg[ia],"-rwtoi") == 0) fgrwtoi = true;93 87 else if (strcmp(arg[ia],"-dbg") == 0) fgdbg = true; 94 88 … … 131 125 TOISeqBuffered * toiin = new TOISeqBuffered("f2in", w1); 132 126 if (fgdbg) toiin->setDebugLevel(1); 133 TOISeqBuffered * toi out = new TOISeqBuffered("out", w1);134 if (fgdbg) toi out->setDebugLevel(1);127 TOISeqBuffered * toidegli = new TOISeqBuffered("degli", w1); 128 if (fgdbg) toidegli->setDebugLevel(1); 135 129 TOISeqBuffered * toimean = new TOISeqBuffered("mean", w1); 136 130 if (fgdbg) toimean->setDebugLevel(1); … … 161 155 degl.SetRange(range_min, range_max); 162 156 degl.addInput("in", toiin); 163 degl.addOutput("out", toi out);157 degl.addOutput("out", toidegli); 164 158 degl.addOutput("mean", toimean); 165 159 degl.addOutput("sigma", toisig); 166 160 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 175 204 w.setOutFlags(true); 176 205 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); 179 210 w.addInput("sigma", toisig); 180 211 181 212 cout << " ------ FITSReaderTOI::PrintStatus() : ----- " << endl; 182 213 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); 183 220 cout << "----- FITSWriterTOI::PrintStatus() : ----- " << endl; 184 221 w.PrintStatus(cout); … … 187 224 r.start(); 188 225 degl.start(); 226 fanout.start(); 227 adder.start(); 228 filt.start(); 189 229 w.start(); 190 230 191 /* 231 /* 192 232 for(int jj=0; jj<3; jj++) { 193 233 cout << *toiin; 234 cout << *toimean; 235 cout << *toimean1; 194 236 cout << *toiout; 195 237 sleep(1); 196 238 } 239 197 240 */ 198 241 … … 205 248 // w.PrintStatus(cout); 206 249 250 cout << " ------ toiin, toidegli and toiout Status information ------- " << endl; 251 cout << *toiin; 252 cout << *toidegli; 253 cout << *toiout; 254 207 255 cout << degl; 208 cout << " ------ toiin and toiout Status information ------- " << endl;209 cout << *toiin;210 cout << *toiout; 256 cout << filt; 257 cout << adder; 258 211 259 } 212 260 catch (PThrowable & exc) {
Note:
See TracChangeset
for help on using the changeset viewer.