Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sseries.cc
Go to the documentation of this file.
1 #include "sseries.hh"
2 
3 ClassImp(SSeries<float>)
4 
5 
6 //______________________________________________________________________________
7 /* Begin_Html
8 <center><h2>SSeries class</h2></center>
9 SSeries is used to store the <font color="red">core+halo</font> pixels contained in the WSeries array<br>
10 The <font color="red">core</font> pixels are pixels selected according to some user criteria, see <a class="funcname" href="#SSeries_float_:AddCore">AddCore</a><br>
11 The <font color="red">halo</font> pixels are auxiliary pixels associated to each core pixel, see <a class="funcname" href="#SSeries_float_:SetHalo">SetHalo</a><br>
12 Note: WAT algorithms use halo pixels to compute the delayed amplitude.<br>
13 <p>
14 
15 <h3><a name="usage">Usage</a></h3>
16 create sseries
17 <pre>
18  <a class="funcname" href="#SSeries_float_:SSeries_float_">SSeries&lt;float&gt;</a> ss;
19 </pre>
20 associate TF map to sparse map
21 <pre>
22  ss.<a class="funcname" href="#SSeries_float_:SetMap">SetMap</a>(&tfmap);
23 </pre>
24 set halo parameters
25 <pre>
26  ss.<a class="funcname" href="#SSeries_float_:SetHalo">SetHalo</a>(network_time_delay);
27 </pre>
28 add core pixels index to sparse map table
29 <pre>
30  ss.<a class="funcname" href="#SSeries_float_:AddCore">AddCore</a>(ifoID,&netcluster);
31 </pre>
32 update sparse map : add TF core+halo pixels to sparse map tables
33 <pre>
34  ss.<a class="funcname" href="#SSeries_float_:UpdateSparseTable">UpdateSparseTable</a>();
35 </pre>
36 resize to 0 the TF map : leave only the sparse map tables
37 <pre>
38  ss.<a class="funcname" href="#SSeries_float_:Shrink">Shrink</a>();
39 </pre>
40 write sparse map to root file
41 <pre>
42  TFile ofile("file.root","RECREATE");
43  ss.Write("sparseMap");
44  ofile.Close();
45 </pre>
46 
47 <p>
48 <h3><a name="example">Example</a></h3>
49 <p>
50 The macro <a href="./tutorials/wat/SSeriesExample.C.html">SSeriesExample.C</a> is an example which shown how to use the SSeries class.<br>
51 The picture below gives the macro output plots.<br>
52 <p>
53 The <font color="red">TF Map : Signal</font> is the WDM transform of a SG100Q9 signal<br>
54 The <font color="red">TF Map : Signal + Noise</font> is the WDM transform of a SG100Q9 signal plus a random white noise<br>
55 The <font color="red">Sparse Map : Core Pixels</font> are the core pixels above the threshold energy 6<br>
56 The <font color="red">Sparse Map : Core+Halo Pixels</font> are the core pixels above the threshold + their associate halo pixels<br>
57 End_Html
58 Begin_Macro
59 SSeriesExample.C
60 End_Macro */
61 
62 
63 using namespace std;
64 
65 //______________________________________________________________________________
66 // destructor
67 template<class DataType_t>
68 SSeries<DataType_t>::~SSeries()
69 {
70 }
71 
72 //______________________________________________________________________________
73 template<class DataType_t>
75 WSeries<DataType_t>() {this->Init();}
76 
77 //______________________________________________________________________________
78 template<class DataType_t>
80 WSeries<DataType_t>(w) {this->Init();}
81 
82 //______________________________________________________________________________
83 template<class DataType_t>
85 WSeries<DataType_t>(w) {this->Init();}
86 
87 //______________________________________________________________________________
88 template<class DataType_t>
90 WSeries<DataType_t>(value, w) {this->Init();}
91 
92 //______________________________________________________________________________
93 template<class DataType_t>
95 
97  if(reset) ResetSparseTable();
98 
99  if(pws && reset) { // initialize from external wavelet
100  if(this->pWavelet) { // delete default wavelet
101  this->pWavelet->release();
102  delete this->pWavelet;
103  }
104 
105  this->pWavelet = pws->pWavelet->Init(); // light-weight wavelet without TD filters
106  this->pWavelet->allocate(pws->size(), pws->data); // attach pws data
107 
108  wdm = (WDM<double>*)pws->pWavelet; // setup WDM pointer
109  this->rate(pws->rate()); // set time-series rate
110  this->wrate(pws->wrate()); // set wavelet rate
111  this->start(pws->start()); // set data start time
112  this->stop(pws->stop()); // set data stop time
113  this->edge(pws->edge()); // set data edge length
114  this->time_Halo = wdm->getTDFsize(); // store half size of TD filter
115  }
116  else if(pws) { // cross-check consistency if input pws
117  if(abs(pws->rate()-this->rate())) {
118  cout << "SSeries::Init : Inconsistent index rate " << pws->rate()
119  << " previously setted index rate : " << this->rate() << endl;
120  exit(1);
121  }
122  if(pws->maxLayer()!=this->maxLayer()) {
123  cout << "SSeries::Init : Inconsistent maxLayer " << pws->maxLayer()
124  << " previously setted maxLayer: " << this->maxLayer() << endl;
125  exit(1);
126  }
127  if(pws->size()!=this->pWavelet->nWWS) {
128  cout << "SSeries::Init : Inconsistent nWWS " << pws->size()
129  << " previously setted nWWS : " << this->pWavelet->nWWS << endl;
130  exit(1);
131  }
132  if(pws->start()!=this->start()) {
133  cout << "SSeries::Init : Inconsistent start " << pws->start()
134  << " previously setted start : " << this->start() << endl;
135  exit(1);
136  }
137  if(pws->pWavelet->getTDFsize() != this->time_Halo) {
138  cout << "SSeries::Init : Inconsistent time_Halo " << pws->pWavelet->getTDFsize()
139  << " previously setted time_Halo : " << this->time_Halo << endl;
140  exit(1);
141  }
142  }
143 
144  wdm = (WDM<double>*) this->pWavelet;
145 
146  if(this->pWavelet->m_WaveType==WDMT) {
147  wdm_BetaOrder = wdm->BetaOrder;
148  wdm_m_Layer = wdm->m_Layer;
149  wdm_KWDM = wdm->KWDM;
150  wdm_precision = wdm->precision;
151  wdm_rate = this->rate();
152  wdm_start = this->start();
153  wdm_nSTS = wdm->nSTS;
154  }
155  else {
156  wdm_BetaOrder = 0;
157  wdm_m_Layer = 0;
158  wdm_KWDM = 0;
159  wdm_precision = 0;
160  wdm_rate = 0;
161  wdm_start = 0;
162  wdm_nSTS = 0;
163  }
164 }
165 
166 //______________________________________________________________________________
167 template<class DataType_t>
169 //
170 // Reset the sparse tables
171 //
172 
173  sparseLookup.resize(0);
174  sparseType.ResetAllBits();
175  sparseType.Compact();
176  sparseIndex.resize(0);
177  sparseMap00.resize(0);
178  sparseMap90.resize(0);
179  core.ResetAllBits();
180  core.Compact();
181 }
182 
183 //______________________________________________________________________________
184 template<class DataType_t>
186 //
187 // Add core pixels of the detector ID=ifoID contained in the pwc netcluster with index ID
188 //
189 // ifoID : detector index
190 // pwc : pointer to netcluster
191 // ID : cluster index - if ID=0 all cluster are selected (default ID=0)
192 //
193 
194  CheckWaveletType("AddCore");
195 
196  int index;
197  int R = int(this->wrate()+0.1);
198 
199  wavearray<double> cid; // buffers for cluster ID
200  cid = pwc->get((char*)"ID",0,'S',0);
201  int K = cid.size();
202 
203  for(int ik=0; ik<K; ik++) { // loop over clusters
204 
205  int id = size_t(cid.data[ik]+0.1);
206 
207  if(ID && id!=ID) continue; // if ID>0 skip id!=ID
208  if(pwc->sCuts[id-1] == 1) continue; // skip rejected clusters
209 
210  vector<int>* vint = &(pwc->cList[id-1]);
211  int V = vint->size();
212  //cout << "CID " << id << " SIZE " << V << endl;
213 
214  for(int l=0; l<V; l++) { // loop over pixels
215  netpixel* pix = pwc->getPixel(id,l);
216  if(int(pix->rate+0.01)!=R) continue; // skip pixel with bad rate
217  index = (int)pix->data[ifoID].index;
218  core.SetBitNumber(index);
219  }
220  }
221 }
222 
223 //______________________________________________________________________________
224 template<class DataType_t>
225 void SSeries<DataType_t>::SetHalo(double maxTau, int lHalo, int tHalo) {
226 //
227 // maxTau : delay time (sec)
228 // is stored in net_Delay
229 // used to compute extraHalo = net_Delay*sparseRate
230 // lHalo : number of layers above and below each core pixel
231 // is stored in layerHalo
232 // the total number of layers in the halo is 2*layerHalo+1
233 // tHalo : number of slice on the right and on the left each core pixel
234 // is stored in timeHalo
235 // the total number of pixels on the time axis is 2*(timeHalo+extraHalo)+1
236 // The default value is -1 : the value is automatically selected from the
237 // associated TF map with WDM::getTDFsize() method.
238 //
239 // For each core pixels (if layerHalo = 1) the following pixels are saved
240 //
241 // core = '.'
242 // extraHalo = '++++++++'
243 // timeHalo = 'xxxx'
244 //
245 // ++++++++xxxx xxxx++++++++
246 // ++++++++xxxx.xxxx++++++++
247 // ++++++++xxxx xxxx++++++++
248 //
249 
250  ResetSparseTable();
251  this->layerHalo = lHalo;
252  this->net_Delay = maxTau;
253  if(tHalo>=0) this->time_Halo = tHalo; // override extraHalo
254 }
255 
256 //______________________________________________________________________________
257 template<class DataType_t>
259 //
260 // Use the core pixels and halo parameters to update the sparse maps with core+halo pixels
261 //
262 
263  CheckWaveletType("UpdateSparseTable");
264 
265  if(time_Halo==0 && layerHalo==0) return;
266 
267  extraHalo = int(net_Delay*this->wrate())+8; // init extra halo : WARNING value 8 ad hoc - to be fixed
268  int hSlice = time_Halo+extraHalo; // halo slices
269 
270  TBits cluster; // core+halo
271  int nLayer = this->maxLayer()+1; // number of WDM layers
272  int nSlice = this->sizeZero(); // number of samples in wavelet layer
273 
274  for(int i=0;i<nSlice;i++) {
275  for(int j=0;j<nLayer;j++) {
276  if(!Core(i,j)) continue;
277  int ib = i-hSlice<0 ? 0 : i-hSlice;
278  int ie = i+hSlice>nSlice-1 ? nSlice-1 : i+hSlice;
279  int jb = j-layerHalo<0 ? 0 : j-layerHalo;
280  int je = j+layerHalo>nLayer-1 ? nLayer-1 : j+layerHalo;
281  for(int ii=ib;ii<=ie;ii++)
282  for(int jj=jb;jj<=je;jj++) {
283  cluster.SetBitNumber(ii*nLayer+jj);
284  }
285  }
286  }
287 
288  // fill sparse tables
289  int csize=cluster.CountBits(); // is the number of non zero pixels
290  sparseLookup.resize(nLayer+1);
291  sparseType.ResetAllBits();sparseType.Compact();
292  sparseIndex.resize(csize);
293  sparseMap00.resize(csize);
294  sparseMap90.resize(csize);
295 
296  // data are sorted respect to index
297  int n=0;
298  for(short j=0;j<nLayer;j++) {
299  sparseLookup[j]=n;
300  for(int i=0;i<nSlice;i++) {
301  int index=i*nLayer+j;
302 
303  if(cluster.TestBitNumber(index)) {
304  if(Core(index)) sparseType.SetBitNumber(n);
305  sparseIndex.data[n] = index;
306  sparseMap00.data[n] = GetMap00(index);
307  sparseMap90.data[n] = GetMap90(index);
308  n++;
309  }
310  }
311  }
312  sparseLookup[nLayer]=n;
313 }
314 
315 //______________________________________________________________________________
316 template<class DataType_t>
318 
319 // CheckWaveletType("GetSparseSize");
320 
321  if(bcore) return sparseType.CountBits(); // return number of core pixels
322  else return sparseIndex.size(); // retun number of total pixels core+halo
323 }
324 
325 //______________________________________________________________________________
326 template<class DataType_t>
328 
329  CheckWaveletType("GetSparseIndex");
330 
331  if(!bcore) return sparseIndex;
332 
333  wavearray<int> si(GetSparseSize());
334  int isize=0;
335  for(int i=0;i<(int)sparseIndex.size();i++)
336  if(sparseType.TestBitNumber(i)) si[isize++]=sparseIndex[i];
337 
338  return si;
339 }
340 
341 
342 //______________________________________________________________________________
343 template<class DataType_t>
345 
346  CheckWaveletType("GetSTFdata");
347 
348  // if(!Core(index)) return false;
349 
350  // check consistency of input vector dimensions
351  int nL = 2*layerHalo+1; // number of layers in halo
352  int nS = 2*time_Halo+1; // number of time samples in halo
353  int nLayer = this->maxLayer()+1; // number of WDM layers
354 
355  if(pS[0].Last()!=time_Halo) {
356  cout << "SSeries<DataType_t>::GetSTFdata : Input Vector Error - wrong slice dimension" << endl;
357  cout << "Input dim : " << 2*pS[0].Last()+1 << " Sparse TF slices : " << nS;
358  exit(1);
359  }
360 
361  int layer = GetLayer(index);
362 
363  int jb = layer-layerHalo<0 ? 0 : layer-layerHalo;
364  int je = layer+layerHalo>nLayer-1 ? nLayer-1 : layer+layerHalo;
365  // set to zero layer outside of TF map
366  for(int j=0;j<nL;j++) {
367  int jp = j+layer-layerHalo;
368  if(jp>=jb && jp<=je) continue;
369  bzero(&pS[j][-time_Halo],nS*sizeof(float));
370  bzero(&pS[nL+j][-time_Halo],nS*sizeof(float));
371  }
372  // fill array with Map00/90
373  for(int j=jb;j<=je;j++) {
374  int start = sparseLookup[j]; // sparse table layer offset
375  int end = sparseLookup[j+1]-1; // sparse table layer+1 offset
376  int key = index+(j-layer);
377  int sindex = binarySearch(sparseIndex.data, start, end, key);
378  if(sindex<0)
379  {cout << "SSeries<DataType_t>::GetSTFdata : index not present in sparse table" << endl;exit(1);}
380  int ib = sindex-time_Halo;
381  int ie = sindex+time_Halo;
382  if((ib<start)||(ie>end)) {
383  cout << "SSeries<DataType_t>::GetSTFdata : Exceed TF map boundaries" << endl;
384  cout << "Check buffer scratch length : " <<
385  "probably it is non sufficient to get the correct number of samples" << endl;
386  exit(1);
387  }
388  int jp = j-layer+layerHalo;
389  memcpy(&pS[jp][-time_Halo], &(sparseMap00.data[ib]),nS*sizeof(float)); // copy Map00
390  memcpy(&pS[nL+jp][-time_Halo],&(sparseMap90.data[ib]),nS*sizeof(float)); // copy Map90
391  }
392  return true;
393 }
394 
395 //______________________________________________________________________________
396 template<class DataType_t>
397 void SSeries<DataType_t>::Expand(bool bcore) {
398 //
399 // rebuild wseries TF map from sparse table
400 //
401 // input - bcore : true -> only core pixels are used
402 //
403 
404  CheckWaveletType("Expand");
405  int nLayer = this->maxLayer()+1; // number of WDM layers
406  int nSlice = this->sizeZero(); // number of samples in wavelet layer
407 
408  wavearray<DataType_t> x(wdm_nSTS);
409  x.rate(wdm_rate);
410  x.start(wdm_start);
411  WDM<DataType_t> wdm = WDM<DataType_t>(wdm_m_Layer, wdm_KWDM, wdm_BetaOrder, wdm_precision);
413 
414  // rebuild TF map
415  for(int i=0;i<(int)sparseIndex.size();i++) {
416  if(bcore && !sparseType.TestBitNumber(i)) continue;
417  int index = sparseIndex[i];
418  SetMap00(index,sparseMap00[i]);
419  SetMap90(index,sparseMap90[i]);
420  }
421 }
422 
423 //______________________________________________________________________________
424 template<class DataType_t>
426 //
427 // set to 0 all TF map pixels which do not belong to core+halo
428 //
429 
430  CheckWaveletType("Clean");
431 
432  TBits cluster; // core+halo
433 
434  for(int i=0;i<(int)sparseIndex.size();i++)
435  cluster.SetBitNumber(sparseIndex[i]);
436 
437  for(int i=0;i<=this->maxIndex();i++)
438  if(!cluster.TestBitNumber(i)) {SetMap00(i,0);SetMap90(i,0);}
439 }
440 
441 //______________________________________________________________________________
442 template<class DataType_t>
443 int SSeries<DataType_t>::binarySearch(int array[], int start, int end, int key) {
444  // Determine the search point.
445  // int searchPos = end + ((start - end) >> 1);
446  // int searchPos = (start + end) / 2;
447  int searchPos = (start + end) >> 1;
448  // If we crossed over our bounds or met in the middle, then it is not here.
449  if (start > end)
450  return -1;
451  // Search the bottom half of the array if the query is smaller.
452  if (array[searchPos] > key)
453  return binarySearch (array, start, searchPos - 1, key);
454  // Search the top half of the array if the query is larger.
455  if (array[searchPos] < key)
456  return binarySearch (array, searchPos + 1, end, key);
457  // If we found it then we are done.
458  if (array[searchPos] == key)
459  return searchPos;
460 }
461 
462 //______________________________________________________________________________
463 template<class DataType_t>
464 int SSeries<DataType_t>::binarySearch(int array[], int size, int key) {
465  return binarySearch(array, 0, size - 1, key);
466 }
467 
468 //______________________________________________________________________________
469 template<class DataType_t>
470 void SSeries<DataType_t>::Streamer(TBuffer &R__b)
471 {
472  // Stream an object of class SSeries<DataType_t>.
473 
474  UInt_t R__s, R__c;
475  if (R__b.IsReading()) {
476  Version_t R__v = R__b.ReadVersion(&R__s, &R__c); if (R__v) { }
478  sparseLookup.Streamer(R__b);
479  sparseIndex.Streamer(R__b);
480  sparseMap00.Streamer(R__b);
481  sparseMap90.Streamer(R__b);
482  //R__b >> nLayer;
483  //R__b >> nSlice;
484  R__b >> layerHalo;
485  R__b >> time_Halo;
486  R__b >> wdm_BetaOrder;
487  R__b >> wdm_m_Layer;
488  R__b >> wdm_KWDM;
489  R__b >> wdm_precision;
490  R__b >> wdm_rate;
491  R__b >> wdm_start;
492  if(R__v > 1) R__b >> wdm_nSTS;
493  // restore sparseIndex & sparseType & core
494  core.ResetAllBits();core.Compact();
495  sparseType.ResetAllBits();sparseType.Compact();
496  for(int i=0;i<(int)sparseIndex.size();i++) {
497  if(sparseIndex[i]<0) {
498  // restore index
499  sparseIndex[i]+=1;
500  sparseIndex[i]*=-1;
501  // restore indexType
502  sparseType.SetBitNumber(i);
503  }
504  // restore core
505  core.SetBitNumber(sparseIndex[i]);
506  }
507  R__b.CheckByteCount(R__s, R__c, SSeries<DataType_t>::IsA());
508  } else {
509  R__c = R__b.WriteVersion(SSeries<DataType_t>::IsA(), kTRUE);
510  // merge sparseIndex & sparseType
511  for(int i=0;i<(int)sparseIndex.size();i++) {
512  if(sparseType.TestBitNumber(i)) {
513  // add 1 to avoid 0 index
514  sparseIndex[i]+=1;
515  // set as negative index the core pixels
516  sparseIndex[i]*=-1;
517  }
518  }
520  sparseLookup.Streamer(R__b);
521  sparseIndex.Streamer(R__b);
522  sparseMap00.Streamer(R__b);
523  sparseMap90.Streamer(R__b);
524  //R__b << nLayer;
525  //R__b << nSlice;
526  R__b << layerHalo;
527  R__b << time_Halo;
528  R__b << wdm_BetaOrder;
529  R__b << wdm_m_Layer;
530  R__b << wdm_KWDM;
531  R__b << wdm_precision;
532  R__b << wdm_rate;
533  R__b << wdm_start;
534  R__b << wdm_nSTS;
535  R__b.SetByteCount(R__c, kTRUE);
536  }
537 }
538 
539 
540 // instantiations
541 
542 #define CLASS_INSTANTIATION(class_) template class SSeries< class_ >;
543 
544 //CLASS_INSTANTIATION(short)
545 //CLASS_INSTANTIATION(int)
546 //CLASS_INSTANTIATION(unsigned int)
547 //CLASS_INSTANTIATION(long)
548 //CLASS_INSTANTIATION(long long)
549 CLASS_INSTANTIATION(float)
550 CLASS_INSTANTIATION(double)
551 
virtual size_t size() const
Definition: wavearray.hh:127
virtual size_t getTDFsize()
Definition: WDM.hh:143
par[0] value
virtual void rate(double r)
Definition: wavearray.hh:123
std::vector< pixel > cluster
Definition: wavepath.hh:43
virtual void edge(double s)
Definition: wavearray.hh:125
int n
Definition: cwb_net.C:10
wavearray< int > GetSparseIndex(bool bcore=true)
Definition: sseries.cc:327
int ID
Definition: TestMDC.C:70
cout<< endl;cout<< "ts size = "<< ts.size()<< " ts rate = "<< ts.rate()<< endl;tf.Forward(ts, wdm);int levels=tf.getLevel();cout<< "tf size = "<< tf.size()<< endl;double dF=tf.resolution();double dT=1./(2 *dF);cout<< "rate(hz) : "<< RATE<< "\t layers : "<< nLAYERS<< "\t dF(hz) : "<< dF<< "\t dT(ms) : "<< dT *1000.<< endl;int itime=TIME_PIXEL_INDEX;int ifreq=FREQ_PIXEL_INDEX;int index=(levels+1)*itime+ifreq;double time=itime *dT;double freq=(ifreq >0)?ifreq *dF:dF/4;cout<< endl;cout<< "PIXEL TIME = "<< time<< " sec "<< endl;cout<< "PIXEL FREQ = "<< freq<< " Hz "<< endl;cout<< endl;wavearray< double > x
std::vector< pixdata > data
Definition: netpixel.hh:104
wavearray< double > get(char *name, size_t index=0, char atype='R', int type=1, bool=true)
param: string with parameter name param: index in the amplitude array, which define detector param: c...
Definition: netcluster.cc:2188
WDM< double > wdm(nLAYERS, nLAYERS, 6, 10)
netpixel pix(nifo)
netcluster * pwc
Definition: cwb_job_obj.C:20
STL namespace.
void UpdateSparseTable()
Definition: sseries.cc:258
Long_t size
std::vector< vector_int > cList
Definition: netcluster.hh:379
virtual void start(double s)
Definition: wavearray.hh:119
int j
Definition: cwb_net.C:10
i drho i
int BetaOrder
Definition: WDM.hh:146
int isize
wavearray< double > w
Definition: Test1.C:27
void wrate(double r)
Definition: wseries.hh:102
void Clean()
Definition: sseries.cc:425
SSeries()
Definition: sseries.cc:74
bool GetSTFdata(int index, SymmArraySSE< float > *pS)
Definition: sseries.cc:344
unsigned long nSTS
Definition: WaveDWT.hh:125
void Init(WSeries< DataType_t > *pws=NULL, bool reset=true)
Definition: sseries.cc:94
i() int(T_cor *100))
void ResetSparseTable()
Definition: sseries.cc:168
#define CLASS_INSTANTIATION(class_)
Definition: sseries.cc:542
Definition: Wavelet.hh:31
int GetSparseSize(bool bcore=true)
Definition: sseries.cc:317
int KWDM
Definition: WDM.hh:148
netpixel * getPixel(size_t n, size_t i)
Definition: netcluster.hh:395
void Expand(bool bcore=true)
Definition: sseries.cc:397
std::vector< int > sCuts
Definition: netcluster.hh:374
wavearray< int > index
void SetHalo(double maxTau=0.042, int lHalo=1, int tHalo=-1)
Definition: sseries.cc:225
virtual void stop(double s)
Definition: wavearray.hh:121
void Forward(int n=-1)
param: wavelet - n is number of steps (-1 means full decomposition)
Definition: wseries.cc:228
int l
Definition: cbc_plots.C:434
void AddCore(size_t ifoID, netcluster *pwc, int ID=0)
Definition: sseries.cc:185
DataType_t * data
Definition: wavearray.hh:301
WaveDWT< DataType_t > * pWavelet
Definition: wseries.hh:438
float rate
Definition: netpixel.hh:95
int m_Layer
Definition: Wavelet.hh:100
int precision
Definition: WDM.hh:147
int maxLayer()
Definition: wseries.hh:121
int binarySearch(int array[], int start, int end, int key)
Definition: sseries.cc:443
exit(0)