Changeset 1484 in Sophya
- Timestamp:
- Apr 30, 2001, 5:20:03 PM (24 years ago)
- Location:
- trunk/ArchTOIPipe
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ArchTOIPipe/Kernel/toiseqbuff.cc
r1464 r1484 11 11 12 12 TOISeqBuffered::TOISeqBuffered(int wsz) { 13 data = NULL; 14 flags = NULL; 13 15 AllocBuffer(wsz); 16 setName("toiseqbuff"); 14 17 } 15 18 16 19 TOISeqBuffered::TOISeqBuffered(string nm, int wsz) { 20 data = NULL; 21 flags = NULL; 17 22 AllocBuffer(wsz); 18 23 setName(nm); … … 29 34 wsize = wsz; 30 35 buffsize = 2*wsz; 36 if (data) delete[] data; 37 if (flags) delete[] flags; 31 38 data = new double[buffsize]; 32 39 flags = new int_8[buffsize]; … … 43 50 void TOISeqBuffered::PrintStatus(ostream & os) const 44 51 { 45 os << "---TOISeqBuffered::PrintStatus() - Name=" << getName() << endl; 52 os << "---TOISeqBuffered::PrintStatus() - Name=" << getName() 53 << "\n WindowSize= " << wsize << " BufferSize= " << buffsize << endl; 46 54 os << "Index: FirstIn= " << getFirstIn() << " LastIn= " << getLastIn() 47 55 << " Total= " << getLastIn()-getFirstIn()+1 << endl; … … 72 80 73 81 void TOISeqBuffered::doWontNeedBefore(int i) { 74 next_out = i; 82 // $CHECK$ Reza 30/4/2001 - Je ne sais pas a quoi ca sert ! 83 // next_out = i; $CHECK$ Reza 30/4/2001 75 84 } 76 85 -
trunk/ArchTOIPipe/Kernel/toiseqbuff.h
r1464 r1484 5 5 #include "toi.h" 6 6 7 // ------------------- TOISeqBuffered --------------------------- 7 8 // Classe de TOI avec buffer, et echantillonnage regulier. 8 9 // Pour le moment au moins, 9 10 // il faut que les providers fassent arriver les donnees par samplenum croissant. 11 // --------------------------------------------------------------- 12 10 13 class TOISeqBuffered : public TOIRegular { 11 14 public: … … 13 16 TOISeqBuffered(string nm, int wsz=8192); 14 17 virtual ~TOISeqBuffered(); 18 19 20 inline void SetBufferSize(int wsz) // ATTENTION - Ne doit pas etre appele 21 { AllocBuffer(wsz); } // apres le demarrage des threads 15 22 16 23 virtual void PrintStatus(ostream & os) const; -
trunk/ArchTOIPipe/ProcWSophya/simtoipr.cc
r1483 r1484 162 162 uint_8 fgcur; 163 163 bool fgokcur=false; 164 165 int sx_refresh_count = 0; 166 int sx_refresh_count_max = 16*wsize; 167 164 168 // Boucle sur les sampleNum 165 166 169 int knext; 167 170 int kfin = sne-snb; … … 199 202 } 200 203 else { 201 s += (valadd-valsub); 202 s2 += (valadd*valadd-valsub*valsub); 204 if (sx_refresh_count >= sx_refresh_count_max) { 205 // On recalcule la somme 206 s = vas.Sum(); 207 s2 = vas.SumX2(); 208 sx_refresh_count = 0; 209 } 210 else { 211 s += (valadd-valsub); 212 s2 += (valadd*valadd-valsub*valsub); 213 sx_refresh_count++; 214 } 203 215 mean = s/wsize; 204 216 sigma = sqrt(s2/wsize-mean*mean); … … 616 628 throw ParmError("SimpleFourierFilter::SimpleFourierFilter() WSize<16 !"); 617 629 KeepSpectra("spectra.ppf", 0); 630 ComputeMeanSpectra(false); 631 totnscount = 0; 632 totnbblock = 0; 618 633 } 619 634 … … 629 644 << WSize() << endl; 630 645 TOIProcessor::PrintStatus(os); 631 os << " Coeff= " << ffcoef << endl; 632 os << " ProcessedSampleCount=" << ProcessedSampleCount() << endl; 646 os << " Coeff (Size= " << ffcoef.Size() << "): " << endl; 647 for(int i=0; i<16; i++) { 648 os << ffcoef(i) << " " ; 649 if (i == 7) os << endl; 650 } 651 os << " .... " << endl; 652 os << " ProcessedSampleCount=" << ProcessedSampleCount() 653 << " NbFFTBlocks= " << totnbblock << endl; 633 654 os << " ------------------------------------------------------ " << endl; 634 655 } … … 657 678 throw ParmError("SimpleFourierFilter::run() Input TOI (in) not connected!"); 658 679 } 659 if (!fgout) { 660 cerr << " SimpleFourierFilter::run() - No Output TOI connected! " 661 << endl; 662 throw ParmError("SimpleFourierFilter::run() No output TOI connected!"); 663 } 680 681 // ---- On peut utiliser cette classe pour calculer un spectre de Fourier ---- 682 // if (!fgout) { 683 // cerr << " SimpleFourierFilter::run() - No Output TOI connected! " 684 // << endl; 685 // throw ParmError("SimpleFourierFilter::run() No output TOI connected!"); 686 // } 664 687 665 688 cout << " SimpleFourierFilter::run() SNRange=" << snb << " - " << sne << endl; … … 673 696 TVector<int_8> vfg(wsize); 674 697 TVector< complex<r_8> > vfft, vfftmean; 698 Vector meanpowerspectra; 675 699 TVector< complex<r_8> > zcoef(ffcoef.Size()); 676 700 zcoef = ffcoef; … … 684 708 int k,i,klast; 685 709 int nks = 0; 686 int nblk = 0;687 710 klast = snb-1; 711 totnbblock = 0; 688 712 // Boucle sur les sampleNum 689 713 // 1er partie, on traite par paquets de wsize … … 692 716 getData(0, k+i, vin(i), vfg(i)); 693 717 ffts.FFTForward(vin, vfft); 694 if (nblk == 0) vfftmean = vfft; 695 else vfftmean += vfft; 696 nblk++; 718 if (c_meanspectra) { // Compute mean-spectra 719 if (totnbblock == 0) { 720 vfftmean = vfft; 721 meanpowerspectra.ReSize(vfft.Size()); 722 for(i=0; i<meanpowerspectra.Size(); i++) 723 meanpowerspectra(i) = sqrt(vfft(i).real()*vfft(i).real() + 724 vfft(i).imag()*vfft(i).imag() ); 725 } 726 else { 727 vfftmean += vfft; 728 for(i=0; i<meanpowerspectra.Size(); i++) 729 meanpowerspectra(i) += sqrt(vfft(i).real()*vfft(i).real() + 730 vfft(i).imag()*vfft(i).imag() ); 731 } 732 } 733 totnbblock++; 697 734 if (nks < nb_keep) { 698 735 TVector< complex<r_8> > vfftcopie; 699 736 vfftcopie = vfft; 700 string nomvfft = "spectra" + MuTyV(nks);737 string nomvfft = "spectra" + (string)MuTyV(nks); 701 738 pout.PutObject(vfftcopie, nomvfft); 702 739 nks++; 703 740 } 704 vfft.MulElt(zcoef); 705 ffts.FFTBackward(vfft, vout); 706 for(i=0; i<wsize; i++) 707 putData(0,k+i,vout(i),vfg(i)); 708 if (fgincopie) 709 for(i=0; i<wsize; i++) 741 if (fgout) { 742 vfft.MulElt(zcoef); 743 ffts.FFTBackward(vfft, vout); 744 } 745 for(i=0; i<wsize; i++) { 746 if (fgout) 747 putData(0,k+i,vout(i),vfg(i)); 748 if (fgincopie) 710 749 putData(1, k+i, vin(i), vfg(i)); 750 } 711 751 klast+=wsize; 712 752 totnscount+=wsize; … … 720 760 for(k=klast+1; k<=sne; k++) { 721 761 getData(0, k, inval, inflg); 722 putData(0, k, inval, inflg);762 if (fgout) putData(0, k, inval, inflg); 723 763 if (fgincopie) 724 764 putData(1, k, inval, inflg); … … 726 766 } 727 767 728 729 vfftmean /= complex<r_8>((r_8)nblk, 0.); 730 pout.PutObject(vfftmean, "meanspectra"); 731 732 cout << " SimpleFourierFilter::run() - End of processing " << endl; 768 if (c_meanspectra) { 769 vfftmean /= complex<r_8>((r_8)totnbblock, 0.); 770 pout.PutObject(vfftmean, "meanspectra"); 771 meanpowerspectra /= (r_8)totnbblock; 772 pout.PutObject(vfftmean, "meanpowerspectra"); 773 } 774 pout.PutObject(ffcoef, "fourierfilter"); 775 776 cout << " SimpleFourierFilter::run() - End of processing " 777 << " NbFFTBlocks= " << totnbblock << endl; 733 778 } // Bloc try 734 779 -
trunk/ArchTOIPipe/ProcWSophya/simtoipr.h
r1483 r1484 160 160 inline void KeepSpectra(string outname, int nb) 161 161 { outppfname = outname; nb_keep = nb; } 162 inline void ComputeMeanSpectra(bool fg) 163 { c_meanspectra = fg; } 162 164 protected: 163 165 int_8 totnscount; // Nombre total d'echantillon processe 166 int_8 totnbblock; // Nombre total de blocs pour FFT 164 167 int wsize; // Taille de fenetre de travail 165 168 Vector ffcoef; // Coefficients du filtre 169 bool c_meanspectra; 166 170 int nb_keep; 167 171 string outppfname; -
trunk/ArchTOIPipe/SMakefile
r1464 r1484 17 17 $(AOBJ)tstrztoi.o $(AOBJ)rztoi.o \ 18 18 $(AOBJ)fits2ascii.o $(AOBJ)tstmap2toi.o $(AOBJ)tsttoi2map.o 19 EXELIST := $(AOBJ)s imtst $(AOBJ)tstrztoi $(AOBJ)fits2asc $(AOBJ)tsttoi \19 EXELIST := $(AOBJ)sfftc $(AOBJ)simtst $(AOBJ)tstrztoi $(AOBJ)fits2asc $(AOBJ)tsttoi \ 20 20 $(AOBJ)tsttoi2 $(AOBJ)fits2ascii $(AOBJ)tstmap2toi $(AOBJ)tsttoi2map 21 21 … … 41 41 $(AOBJ)tstrztoi: $(AOBJ)tstrztoi.o $(AOBJ)rztoi.o $(LIBOLIST) 42 42 $(LINK.cc) -o $@ $^ $(LIBS) 43 $(AOBJ)simtst: $(AOBJ)simtst.o $(AOBJ)simtoipr.o $(LIBOLIST) 43 $(AOBJ)sfftc: $(AOBJ)sfftc.o $(LIBOLIST) 44 $(LINK.cc) -o $@ $^ $(LIBS) 45 $(AOBJ)simtst: $(AOBJ)simtst.o $(LIBOLIST) 44 46 $(LINK.cc) -o $@ $^ $(LIBS) 45 47 $(AOBJ)fits2asc: $(AOBJ)fits2asc.o $(LIBOLIST) … … 56 58 $(LINK.cc) -o $@ $^ $(LIBS) 57 59 60 $(AOBJ)simtst.o: simtst.cc $(INCLIST) 61 $(AOBJ)sfftc.o: sfftc.cc $(INCLIST) 58 62 $(AOBJ)tstrztoi.o: tstrztoi.cc rztoi.h $(INCLIST) 59 63 $(AOBJ)rztoi.o: rztoi.cc rztoi.h $(INCLIST) … … 63 67 $(AOBJ)fits2ascii.o: fits2ascii.cc $(INCLIST) 64 68 $(AOBJ)tstmap2toi.o: tstmap2toi.cc $(INCLIST) 65 $(AOBJ)tsttoi2 toi.o: tsttoi2map.cc $(INCLIST)69 $(AOBJ)tsttoi2map.o: tsttoi2map.cc $(INCLIST) 66 70 67 71 $(AOBJ)asciitoiwtr.o: asciitoiwtr.cc asciitoiwtr.h toi.h config.h conf.h \ -
trunk/ArchTOIPipe/TestPipes/simtst.cc
r1483 r1484 2 2 3 3 ---------------- Exemple d'appel --------------------- 4 csh> simtst -start 104385384 -end 104399964 -range -500,500 5 -intoi boloMuV_26 -wtoi 8192 -wdegli 1024 inputbolo.fits degli.fits xx.ppf 4 csh> simtst -start 104385384 -end 104399964 -range -500,500 \ 5 -intoi boloMuV_26 -wtoi 8192 -wdegli 1024 \ 6 inputbolo.fits filt.fits xx.ppf 7 # Avec Filtre de Fourier 8 csh> simtst -start 104385384 -end 104399964 -range -500,500 \ 9 -intoi boloMuV_26 -wtoi 8192 -wdegli 1024 \ 10 -wfft 4096 -keepfft 5 -killfreq 15,4,2.5 \ 11 inputbolo.fits filtfft.fits spectre.ppf 12 # Autre exemple b545k02 13 cool> ./simtst -start 104389122 -end 104649122 -range -1000.,1000. -intoi boloMu 14 V_23 -wtoi 8192 -wdegli 1024 -wfft 4096 -keepfft 5 -killfreq 15,4,2.5 Cmv/b545k02 15 2_16.00_16.49.fits b545.fits b545.ppf 16 6 17 */ 7 18 … … 28 39 cout << endl; 29 40 if (fgerr) { 30 cout << " simtst : Argument Error ! tstrztoi-h for usage " << endl;41 cout << " simtst : Argument Error ! simtst -h for usage " << endl; 31 42 exit(1); 32 43 } 33 44 else { 34 cout << "\n Usage : simtst [-dbg] [-start snb] [-end sne] \n" 35 << " [-wtoi sz] [-wdegli sz] [-wfft sz] [-keepfft n] \n" 45 cout << "\n Usage : simtst [-intoi toiname] [-start snb] [-end sne] \n" 46 << " [-dbg] [-wtoi sz] [-wdegli sz] [-range min,max] \n" 47 <<" [-wfft sz] [-keepfft n] [-killfreq bf,nharm,sigf \n" 36 48 << " inFitsName outFitsName outPPFName \n" 37 49 << " -dbg : sets TOISeqBuffered debug level to 1 \n" … … 45 57 << " -wfft sz : Activate Fourier filter and sets its width \n" 46 58 << " -keepfft n : Keeps n spectra (if Fourier filter activated) \n" 59 << " -killfreq bf,nharm,sigf : kills nharm frequency, basefreq=bf \n" 60 " with a gaussian with width=sigf \n" 47 61 << endl; 48 62 exit(0); … … 72 86 string intoi = "boloMuV_27"; 73 87 bool fg_f_filt = false; 88 bool fg_killfreq = false; 89 int bf_killfreq = 1; 90 int nharm_killfreq = 1; 91 double sigf_killfreq = 1.; 74 92 75 93 if (narg < 4) Usage(true); … … 103 121 keepfft = atoi(arg[ia+1]); ia++; 104 122 } 123 else if (strcmp(arg[ia],"-killfreq") == 0) { 124 if (ia == narg-1) Usage(true); 125 sscanf(arg[ia+1],"%d,%d,%lf",&bf_killfreq, &nharm_killfreq, &sigf_killfreq); 126 fg_killfreq = true; 127 ia++; 128 } 105 129 else if (strcmp(arg[ia],"-range") == 0) { 106 130 if (ia == narg-1) Usage(true); … … 127 151 InitTim(); 128 152 129 cout << ">>>> tstrztoi: Infile= " << infile << " outFile="153 cout << ">>>> simtst: Infile= " << infile << " outFile=" 130 154 << outfile << endl; 131 155 cout << ">>>> Window Size WTOI= " << wtoi << " WDEGLI= " << wdegli … … 150 174 151 175 int w1 = wtoi; 152 int w2 = (fg_f_filt) ? 2*wfft+w1 : w1;176 int w2 = (fg_f_filt) ? wfft+w1 : w1; 153 177 154 178 // char * colname[5] = {"MJD", "UTC","boloMuV_11","magnFlux","pivot"}; … … 234 258 filt.addOutput("incopie", toideglioffcopie); 235 259 236 Vector fcoef(wfft/2); 237 fcoef = RegularSequence(1., -2./wfft); 260 Vector fcoef(wfft/2+1); 261 // fcoef = RegularSequence(1., -2./wfft); 262 fcoef = 1.; 263 for(int kfk=0; kfk<nharm_killfreq; kfk++) { 264 double cfreq = bf_killfreq*(kfk+1); 265 double xfreq = 0.; 266 for(int kfj=cfreq-3.*sigf_killfreq; kfj<= cfreq+3.*sigf_killfreq; kfj++) { 267 if ( (kfj < 0) || (kfj >= fcoef.Size() ) ) continue; 268 xfreq = (cfreq-kfj)/sigf_killfreq; 269 fcoef(kfj) -= exp(-xfreq*xfreq); 270 } 271 } 238 272 cout << " Creating Fourier Filter ... " << endl; 239 273 SimpleFourierFilter sfft(fcoef); 240 274 sfft.KeepSpectra(outppfname, keepfft); 275 sfft.ComputeMeanSpectra(true); 241 276 TOISeqBuffered * toifft = NULL; 242 277 TOISeqBuffered * toifiltcopie = NULL; … … 259 294 w.addInput("fftout", toifft); 260 295 } 261 else w.addInput(" out", toiout);296 else w.addInput("filtout", toiout); 262 297 w.addInput("degli", toidegli1); 263 298 w.addInput("deglioff", toideglioffcopie);
Note:
See TracChangeset
for help on using the changeset viewer.