source: Sophya/trunk/ArchTOIPipe/ProcWSophya/rztoi.cc@ 1442

Last change on this file since 1442 was 1442, checked in by ansari, 25 years ago

Ajout de processeurs simples - Deglitcher + Filtre, + programme test - Reza 15/3/2001

File size: 5.5 KB
RevLine 
[1437]1#include "rztoi.h"
2#include "toimanager.h"
3#include "pexceptions.h"
4#include "fftpserver.h"
[1442]5#include "ctimer.h"
[1437]6
7RzTOIProc::RzTOIProc(int w1, int w2, int nmax)
8{
9 cout << "RzTOIProc::RzTOIProc() Width= " << w1 << "," << w2 << " NMax=" << nmax;
10 _width1 = w1;
11 _width2 = w2;
12 _nmax = nmax;
13}
14
15void RzTOIProc::init() {
16 cout << "RzTOIProc::init" << endl;
[1442]17 declareInput("in");
18 declareOutput("out");
[1437]19 name = "rzproc";
20 upExtra = 1;
21}
22
23void RzTOIProc::run() {
24 // TOIManager* mgr = TOIManager::getManager();
25 int snb = getMinIn();
26 int sne = getMaxIn();
27
28 int istart, iend;
29 int ilast;
30 ilast = istart = snb;
31 iend = sne;
32 int ii, jj;
33
34 try {
[1442]35 Timer tm("RzTOIProc::run()");
[1437]36
37 FFTPackServer ffts;
38
39 bool fgppf = false;
40 int nkv = 0;
[1438]41 // int nkvmx = 8;
42#define nkvmx 8
[1437]43 Vector vkin[nkvmx];
44 Vector vkout[nkvmx];
45 TVector< complex<r_8> > vkfft[nkvmx];
46 if (outppf.length() > 0) fgppf = true;
47
[1439]48 Vector vin, vout, vsave(_width2);
[1437]49 TVector< complex<r_8> > vfft;
[1439]50 double vlast = 0.;
[1437]51
52 for (int k=0; k<_nmax; k++) {
[1439]53 // istart = snb + k*_width1;
54 istart = snb + k*_width1 - k*_width2;
[1437]55 iend = istart +_width1;
[1439]56 cout << "---RzTOIProc::run() - Processing bloc k= " << k
[1437]57 << " istart= " << istart << " iend= " << iend << endl;
58 if (iend > sne) {
59 cout << " RzTOIProc::run() - iend > getMaxIn() -> break " << endl;
60 break;
61 }
62 // Vector vin = getData(0, istart, iend);
63 vin.ReSize(_width1);
[1439]64 if (k == 0) {
65 jj = 0;
66 for(ii=istart; ii<iend; ii++)
67 vin(jj++) = getData(0, ii);
68 }
69 else {
70 vin(Range(0,-1,_width2)) = vsave;
71 jj = _width2;
72 for(ii=istart+_width2; ii<iend; ii++)
73 vin(jj++) = getData(0, ii);
74 }
[1437]75
[1439]76 vsave = vin(Range(_width1-_width2, -1,_width2));
77 cout << "> End of getData() for bloc " << k << endl;
78
[1437]79 vout.ReSize(vin.Size());
[1439]80 // cout << " DBG : Bloc[" << k << "] FirstSN=" << istart
81 // << " LastSN= " << istart+vout.Size()-_width2-1 << endl;
[1437]82 for(int i=0; i<vout.Size()-_width2; i++) {
83 vout(i) = vin(Range(i,-1,_width2)).Sum()/(r_8)_width2;
84 putData(0, i+istart, vout(i));
85 vlast = vout(i);
86 }
87
88 for(int i=vout.Size()-_width2; i<vout.Size(); i++) {
89 vout(i) = vlast;
[1439]90 // putData(0, i+istart, vout(i));
[1437]91 }
92
[1439]93 cout << ">> End of putData() for bloc[" << k << "] FirstSN="
94 << istart << " LastSN= " << istart+vout.Size()-_width2-1
95 << " Mean vout= " << vout.Sum()/vout.Size() << endl;
[1437]96
97 vin -= vout;
98
99 TVector< complex<r_8> > vfft;
100 ffts.FFTForward(vin, vfft);
101 ilast = iend;
102 /*
103 if (fgppf) {
104 string nom;
105 nom = "in" + (string)MuTyV(k);
106 ppo->PutObject(vin, nom);
107 nom = "out" + (string)MuTyV(k);
108 ppo->PutObject(vout, nom);
109 nom = "fft" + (string)MuTyV(k);
110 ppo->PutObject(vfft, nom);
111 }
112 */
113 if (fgppf && (nkv < nkvmx) ) {
114 vkin[nkv] = vin;
115 vkout[nkv] = vout;
116 vkfft[nkv] = vfft;
117 nkv++;
118 }
[1442]119
120 tm.Split("End of bloc");
[1437]121 }
122
123 if (fgppf) {
124 cout << " Writing to Out PPF ... " << endl;
125 POutPersist ppo(outppf);
126 for(int kkk=0; kkk<nkv; kkk++) {
127 string nom;
128 nom = "in" + (string)MuTyV(kkk);
129 ppo.PutObject(vkin[kkk], nom);
130 nom = "out" + (string)MuTyV(kkk);
131 ppo.PutObject(vkout[kkk], nom);
132 nom = "fft" + (string)MuTyV(kkk);
133 ppo.PutObject(vkfft[kkk], nom);
134 }
135 }
136
[1439]137 cout << " Filling with flag!=0 : putData(0, ii, flag) ii: "
[1437]138 << iend << " .. " << sne << endl;
[1439]139 for(ii=iend-_width2; ii<iend; ii++) {
140 putData(0, ii, vlast, 1);
141 }
142
[1437]143 double xxx;
144 for(ii=iend; ii<sne; ii++) {
145 if ((ii-iend)%1000 == 0)
146 cout << " RzTOIProc::run() - Processing sample ii= " << ii
147 << endl;
148 xxx=getData(0,ii);
[1439]149 putData(0,ii,xxx,2);
[1437]150 }
151
152 }
153 catch (PException & e) {
[1442]154 cout << "RzTOIProc: Catched exception " << (string)typeid(e).name()
155 << "\n Msg= " << e.Msg() << endl;
[1437]156 }
157}
158
159
160
[1442]161RzSimpleTOIProc::RzSimpleTOIProc(int wsz, double fact)
[1437]162{
[1442]163 if (wsz < 4) wsz = 4;
[1437]164 cout << "RzSimpleTOIProc::RzSimpleTOIProc() factor= " << fact
[1442]165 << " WSize=" << wsz << endl;
[1437]166 _fact = fact;
[1442]167 _wsz = wsz;
[1437]168}
169
170void RzSimpleTOIProc::init() {
171 cout << "RzSimpleTOIProc::init" << endl;
[1442]172 declareInput("in");
173 declareOutput("out");
[1437]174 name = "rzsimpleproc";
175 upExtra = 1;
176}
177
178void RzSimpleTOIProc::run() {
179 // TOIManager* mgr = TOIManager::getManager();
180 int snb = getMinIn();
181 int sne = getMaxIn();
182
[1442]183 int nstot = sne-snb;
184 int nbloc = nstot/_wsz;
185 cout << " RzSimpleTOIProc::run(): snb=" << snb << " sne="
186 << sne << " NBloc=" << nbloc << endl;
[1437]187
188 double val;
[1442]189 int snlast = snb;
190 int istart,ii,kb;
[1437]191 try {
[1442]192 Timer tm("RzSimpleTOIProc::run()");
193 Vector vin(_wsz);
194 for (kb=0; kb<nbloc; kb++) {
195 istart = kb*_wsz+snb;
196 if (kb%2 == 0) { // On parcourt a l'envers
197 cout << " ... Processing bloc[" << kb << "] (Reverse) SampleNum="
198 << istart+_wsz << " ->" << istart << endl;
199 for(ii=_wsz-1; ii>=0; ii--)
200 vin(ii) = getData(0, ii+istart);
201 }
202 else { // On parcourt vers l'avant
203 cout << " ... Processing bloc[" << kb << "] SampleNum="
204 << istart << " ->" << istart+_wsz << endl;
205 for(ii=0; ii<_wsz; ii++)
206 vin(ii) = getData(0, ii+istart);
207 }
208 for(ii=0; ii<_wsz; ii++)
209 putData(0, ii+istart, vin(ii)*_fact);
210 snlast = istart+_wsz;
[1437]211 }
[1442]212 cout << " ... Processing remaining Samples - SN="
213 << snlast << " ->" << sne << endl;
214 for(ii=snlast; ii<sne; ii++) {
215 val = getData(0, ii);
216 putData(0, ii, val*_fact);
217 }
218
219
[1437]220 }
221 catch (PException & e) {
[1442]222 cout << "RzSimpleTOIProc exception " << (string)typeid(e).name()
223 << "\n Msg= " << e.Msg() << endl;
[1437]224 }
225}
Note: See TracBrowser for help on using the repository browser.