Logo Coherent WaveBurst  
Reference Guide
Logo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
monster.cc
Go to the documentation of this file.
1 #include "monster.hh"
2 #include <xmmintrin.h>
3 #include "SymmArray.hh"
4 
5 ClassImp(monster) // used by THtml doc
6 
7 /* Begin_Html
8 <center><h2>monster class</h2></center>
9 
10 <p>In the CWB analysis we use a number of different time-frequency resolutions
11 at the same time, and it is necessary to know the "cross-talk" or "overlap"
12 coefficients between pixels belonging to different resolutions (and even
13 different quadratures)</p>
14 
15 <p>More concretely, for any pixel in given TF map we want to know
16 its representation in other TF maps of interest.</p>
17 
18 <p>The monster class computes these coefficients given a set of WDM
19 transforms defining the resolutions of interests. They are stored in a
20 multidimensional array called 'catalog', and the catalog is usually saved
21 in a file for later use. Few such catalogs are stored in the directory
22 $HOME_WAT_FILTERS/wdmXTalks
23 </p>
24 
25 <p>For practical reasons we store only coefficients with absolute value above a
26 threshold, typically 0.01 and as such the catalog provides a good but approximate
27 representation of a pixel at different resolutions.
28 </p>
29 
30 <h3>Basic test of the catalog</h3>
31 
32 <p>We used white noise and produced two TF maps. Then, using the catalog, we can
33 subtract one from the other (one pixel at a time). Ideally, we should remove the
34 signal after the subtraction, but given that we do not store small coefficients
35 in the catalog, some residual signal remains.</p>
36 
37 <p>The script <a href="tutorials/reviewMonster.C"> implements this basic test.
38 </p>
39 
40 End_Html */
41 
43 { tag = 1; // catalog tag number
44  nRes = 0; // number of resolutions
45  BetaOrder = 2; // beta function order for Meyer
46  precision = 12; // wavelet precision
47  KWDM = 1; // WDM K - parameter K/M
48  layers = 0;
49  catalog = 0;
50  clusterCC.clear();
51 }
52 
53 
54 
55 monster::monster(WDM<double>** wdm0, int nRes)
56 { //
57  // computes catalog for nRes different resolutions
58  // specified by wdm0 (vector of pointers to WDM transforms)
59 
60  int i,j, k;
61  this->tag = 1; // current catalog tag
62  this->nRes = nRes; // number of resolutions
63  this->BetaOrder=wdm0[0]->BetaOrder; // beta function order for Meyer
64  this->precision=wdm0[0]->precision; // wavelet precision
65  this->KWDM = wdm0[0]->KWDM/wdm0[0]->m_Layer; // WDM K - parameter K/M
66 
67  clusterCC.clear();
68 
69  if(nRes>NRES_MAX) {
70  printf("monster::monster : number of resolutions gt NRES_MAX=%d, exit\n",NRES_MAX);
71  exit(1);
72  }
73 
74  layers = new int [nRes];
76 
77  for(i=0;i<nRes; ++i){
78  layers[i] = wdm0[i]->m_Layer;
79  if(layers[i]*this->KWDM != wdm0[i]->KWDM) {
80  printf("monster::monster : mixed WDM set: KWDM=%d, exit\n",this->KWDM);
81  exit(1);
82  }
83  wdm[i] = new WDM<double>(layers[i], wdm0[i]->KWDM, this->BetaOrder, this->precision);
84  }
85 
86  for(i=0;i<nRes-1; ++i)if(layers[i]>layers[i+1]){
87  printf("monster::monster : layers not ordered properly, exit\n");
88  exit(1);
89  }
90 
91  struct xtalk tmp[10000];
92  SymmArray<double> td1A, td1Q, td2A_even, td2Q_even, td2A_odd, td2Q_odd;
93  double minOvlp = 1e-2;
94 
95  int totOvlps = 0;
96  catalog = new (struct xtalkArray (**[NRES_MAX])[2] );
97  for(i=0; i<nRes; ++i) catalog[i] = new (struct xtalkArray (*[NRES_MAX])[2]);
98  for(i=0; i<nRes; ++i)for(j=0; j<=i; ++j){
99  catalog[i][j] = new struct xtalkArray [layers[i]+1][2];
100  printf("Processing resolution pair [%d x %d]...\n", layers[i], layers[j]);
101 
102  // get step and filter "length" for both resolutions
103  int step1 = wdm[i]->getBaseWave(1, 1, td1A);
104  int last1 = td1A.Last();
105 
106  int step2 = wdm[j]->getBaseWave(1, 1, td2A_odd);
107  int last2 = td2A_odd.Last();
108 
109  int maxN = (last1 + last2 + step1 + 1)/step2 + 1;
110  double invli = 1./layers[i];
111  for(k=0; k<=layers[i]; ++k)for(int l=0; l<2; ++l){ // k freq index (r1)
112  wdm[i]->getBaseWave(k ,l, td1A);
113  wdm[i]->getBaseWaveQ(k ,l, td1Q);
114 
115  int nOvlp = 0;
116  double invlj = 1./layers[j];
117  double kfreqmin = (k-1)*invli;
118  double kfreqmax = (k+1)*invli;
119  for(int m = 0; m<=layers[j]; ++m){ // loop onver frequency index (r2)
120  //if((m+1)*invlj < kfreqmin)continue;
121  //if((m-1)*invlj > kfreqmax) break;
122 
123 
124  wdm[j]->getBaseWave(m, 0, td2A_even);
125  wdm[j]->getBaseWave(m, 1, td2A_odd);
126  wdm[j]->getBaseWaveQ(m, 0, td2Q_even);
127  wdm[j]->getBaseWaveQ(m, 1, td2Q_odd);
128 
129  for(int n = -maxN; n<=maxN; ++n){ // loop over time index
130 
131  int shift = n*step2 - l*step1;
132  int left = -last1;
133  if(shift - last2> left) left = shift - last2;
134  int right = last1;
135  if(shift + last2<right)right = shift + last2;
136  if(left>right)continue;
137 
138  SymmArray<double> *ptd2A, *ptd2Q;
139  if(n&1){
140  ptd2A = &td2A_odd;
141  ptd2Q = &td2Q_odd;
142  }
143  else{
144  ptd2A = &td2A_even;
145  ptd2Q = &td2Q_even;
146  }
147 
148  float CC[4]; CC[0] = 0, CC[1] = 0, CC[2] = 0, CC[3] = 0;
149 
150  for(int q=left; q<=right; ++q){
151  CC[0] += td1A[q]*(*ptd2A)[q-shift];
152  CC[2] += td1Q[q]*(*ptd2A)[q-shift];
153  CC[1] += td1A[q]*(*ptd2Q)[q-shift];
154  CC[3] += td1Q[q]*(*ptd2Q)[q-shift];
155  }
156 
157  /*
158  if(m==0)
159  if(n&1) CC[0] = CC[2] = 0;
160  else CC[1] = CC[3] = 0;
161  if(m==layers[j])
162  if((m+n)&1)CC[0] = CC[2] = 0;
163  else CC[1] = CC[3] = 0;
164  */
165 
166  //if(i==j)CC[0] = CC[3] = 0;
167 
168  if( fabs(CC[0])> minOvlp || fabs(CC[1])> minOvlp ||
169  fabs(CC[2])> minOvlp || fabs(CC[3])> minOvlp ){
170  tmp[nOvlp].CC[0] = CC[0];
171  //if(k==0 && l==0 && fabs(CC[0])>minOvlp)
172  // printf("m = %d , n = %d , ovlp = %lf\n", m,n,CC[0]);
173  tmp[nOvlp].CC[1] = CC[1];
174  tmp[nOvlp].CC[2] = CC[2];
175  tmp[nOvlp].CC[3] = CC[3];
176  tmp[nOvlp].index = n*(layers[j]+1) + m;
177  ++nOvlp;
178  }
179  } // end loop over time index (res 2)
180  } // end loop over freq index (res 2)
181  if(nOvlp>10000)printf("ERROR, tmp array too small\n");
182 
183  catalog[i][j][k][l].data = new struct xtalk[nOvlp];
184  for(int n = 0; n<nOvlp; ++n) catalog[i][j][k][l].data[n] = tmp[n];
185  catalog[i][j][k][l].size = nOvlp;
186 
187  totOvlps += nOvlp;
188  } // end double loop over freq index (res 1) and parity
189  } // end double loop over resolution pairs
190  printf("total stored xtalk = %d\n", totOvlps);
191  for(int i=0; i<nRes; ++i) delete wdm[i];
192 }
193 
194 
196 { //
197  // constructor, reads catalog from file
198 
199  this->nRes = 0;
200  read(fn);
201  clusterCC.clear();
202 }
203 
204 
206 { //
207  // copy constructor
208 
209  if(x.nRes>NRES_MAX) {
210  printf("monster::monster : number of resolutions gt NRES_MAX=%d, exit\n",NRES_MAX);
211  exit(1);
212  }
213 
214  this->tag = x.tag; // current catalog tag
215  this->nRes = x.nRes; // number of resolutions
216  this->BetaOrder=x.BetaOrder; // beta function order for Meyer
217  this->precision=x.precision; // wavelet precision
218  this->KWDM = x.KWDM; // WDM K - parameter K/M
219  layers = new int[this->nRes];
220  for(int i=0; i<this->nRes; ++i)layers[i] = x.layers[i];
221  catalog = new (struct xtalkArray (**[NRES_MAX])[2] );
222  for(int i=0; i<this->nRes; ++i){
223  catalog[i] = new (struct xtalkArray (*[NRES_MAX])[2]);
224  for(int j=0; j<=i; ++j){
225  catalog[i][j] = new struct xtalkArray [layers[i]+1][2];
226  for(int k = 0; k<=layers[i]; ++k)for(int l=0; l<2; ++l){
227  xtalkArray& oa = catalog[i][j][k][l];
228  xtalkArray& xoa = x.catalog[i][j][k][l];
229  oa.size = xoa.size;
230  oa.data = new struct xtalk[oa.size];
231  for(int kk = 0; kk< oa.size ; ++kk)oa.data[kk] = xoa.data[kk];
232  }
233  }
234  }
235 }
236 
237 
239 {
240  deallocate();
241 }
242 
243 
244 void monster::read(char* fn)
245 { //
246  // reads catalog from file
247 
248  if(this->nRes>NRES_MAX) {
249  printf("monster::read : number of resolutions gt NRES_MAX=%d, exit\n",NRES_MAX);
250  exit(1);
251  }
252 
253  if(this->nRes) deallocate();
254  FILE*f = fopen(fn, "r");
255  float tmp;
256  fread(&tmp, sizeof(float), 1, f);
257  this->nRes = (int)tmp;
258  if(this->nRes<0) {
259  this->nRes = -(this->nRes);
260  fread(&tmp, sizeof(float), 1, f);
261  this->tag = (int)tmp;
262  fread(&tmp, sizeof(float), 1, f);
263  this->BetaOrder = (int)tmp;
264  fread(&tmp, sizeof(float), 1, f);
265  this->precision = (int)tmp;
266  fread(&tmp, sizeof(float), 1, f);
267  this->KWDM = (int)tmp;
268  }
269  else {this->tag = 0;}
270  layers = new int[this->nRes];
271  for(int i=0; i<this->nRes; ++i){
272  fread(&tmp, sizeof(float), 1, f);
273  printf("layers[%d] = %d\n", i, layers[i] = (int)tmp);
274 
275  }
276 
277  catalog = new (struct xtalkArray (**[NRES_MAX])[2] );
278  for(int i=0; i<this->nRes; ++i){
279  catalog[i] = new (struct xtalkArray (*[NRES_MAX])[2]);
280  for(int j=0; j<=i; ++j){
281  catalog[i][j] = new struct xtalkArray [layers[i]+1][2];
282  for(int k = 0; k<=layers[i]; ++k)for(int l=0; l<2; ++l){
283  xtalkArray& oa = catalog[i][j][k][l];
284  fread(&tmp, sizeof(float), 1, f);
285  oa.size = (int)tmp;
286  oa.data = new struct xtalk[oa.size];
287  fread(oa.data, sizeof(struct xtalk), oa.size, f);
288  }
289  }
290  }
291  fclose(f);
292 }
293 
294 
295 void monster::write(char* fn)
296 { //
297  // writes catalog to file
298  FILE* f = fopen(fn, "w");
299  float aux = this->tag ? -nRes : nRes; // positive/negative - old/new catalog format
300  fwrite(&aux, sizeof(float), 1, f);
301  aux = this->tag;
302  fwrite(&aux, sizeof(float), 1, f);
303  aux = this->BetaOrder;
304  fwrite(&aux, sizeof(float), 1, f);
305  aux = this->precision;
306  fwrite(&aux, sizeof(float), 1, f);
307  aux = this->KWDM;
308  fwrite(&aux, sizeof(float), 1, f);
309  for(int i=0; i<this->nRes; ++i){
310  aux = layers[i];
311  fwrite(&aux, sizeof(float), 1, f);
312  }
313 
314  for(int i=0; i<this->nRes; ++i)for(int j=0; j<=i; ++j)
315  for(int k = 0; k<=layers[i]; ++k)for(int l=0; l<2; ++l){
316  xtalkArray& oa = catalog[i][j][k][l];
317  aux = oa.size;
318  fwrite(&aux, sizeof(float), 1, f);
319  fwrite(oa.data, sizeof(struct xtalk), oa.size, f);
320  }
321  fclose(f);
322 }
323 
324 
326 { //
327  // deallocates memory
328  int J = this->clusterCC.size();
329  for(int j=0; j<J; j++) _mm_free(this->clusterCC[j]);
330  if(nRes==0)return;
331 
332  for(int i=0; i<nRes; ++i){
333  for(int j=0; j<=i; ++j){
334  for(int k=0; k<=layers[i]; ++k){
335  delete [] catalog[i][j][k][0].data;
336  delete [] catalog[i][j][k][1].data;
337  }
338  delete [] catalog[i][j];
339  }
340  delete [] catalog[i];
341  }
342  delete [] catalog;
343  delete [] layers;
344  nRes = 0;
345  layers = 0;
346 }
347 
348 
349 
350 
351 struct xtalk monster::getXTalk(int nLayer1, size_t indx1, int nLayer2, size_t indx2)
352 { //
353  // returns the overlap ("cross-talk") values for two pixels,
354  // and for all possible quadrature pairs.
355  // nLayer identifies the time-frequency map (resolution) of the pixel,
356  // indx specifies the location of the pixel on the TF map
357 
358  struct xtalk ret={1, {3.,3.,3.,3.}};
359 
360  int r1, r2;
361  for(r1 = 0; r1<nRes; ++r1)if(nLayer1 == layers[r1]+1)break;
362  for(r2 = 0; r2<nRes; ++r2)if(nLayer2 == layers[r2]+1)break;
363  if(r1==nRes || r2 == nRes){
364  printf("monster::getXTalk : resolution not found %d %d %d %d %d %d %d\n",nRes,nLayer1,nLayer2,r1,r2,layers[0],layers[6]);
365  exit(1);
366  }
367  bool swap = false;
368  if(r1<r2){
369  int aux = r1;
370  r1 = r2;
371  r2 = aux;
372  size_t aux2 = indx1;
373  indx1 = indx2;
374  indx2 = aux2;
375  swap = true;
376  }
377  int time1 = indx1/(layers[r1]+1);
378  int freq1 = indx1%(layers[r1]+1);
379  //int time2 = indx2/(layers[r2]+1);
380  //int freq2 = indx2%(layers[r2]+1);
381 
382  int odd = time1&1;
383 
384  int32_t index = (int32_t)indx2;
385 
386  index -= (time1-odd)*(layers[r1]/layers[r2])*(layers[r2]+1);
387 
388  struct xtalkArray& vector = catalog[r1][r2][freq1][odd];
389  int i=0;
390  for(; i<vector.size; ++i)if(index == vector.data[i].index){
391  ret = vector.data[i];
392  if(swap){
393  float tmp = ret.CC[1];
394  ret.CC[1] = ret.CC[2];
395  ret.CC[2] = tmp;
396  }
397  break;
398  }
399  //printf("getXTalk: [%d, %d] -> [%d, %d] ; index = %d {%d}:\n",
400  //freq1, time1, freq2, time2, index, vector.size);
401  return ret;
402 }
403 
404 
405 float monster::getXTalk(int nLayer1, int quad1, size_t indx1, int nLayer2, int quad2, size_t indx2)
406 { //
407  // returns the overlap value for two pixels when the quadratures are known ( uses getXTalk function above)
408 
409  struct xtalk res = getXTalk(nLayer1, indx1, nLayer2, indx2);
410  if(res.CC[0]>2)return 0;
411  if(quad1){
412  if(quad2)return res.CC[3];
413  return res.CC[2];
414  }
415  if(quad2)return res.CC[1];
416  return res.CC[0];
417 }
418 
419 
420 std::vector<int> monster::getXTalk(netcluster* pwc, int id, bool check)
421 { //
422  // fill in cluster coupling coefficients into q
423  // pwc - pointer to netcluster object
424  // id - cluster ID
425  // check - true/false - check / do not check TD vectors
426  // returns size of TD array
427 
428  vector<int>& pIndex = pwc->cList[id-1];
429  vector<int> pI;
430 
431  int J = this->clusterCC.size();
432  for(int j = 0; j<J; j++) _mm_free(this->clusterCC[j]);
433  this->clusterCC.clear();
434  std::vector<float*>().swap(clusterCC);
435  this->sizeCC.clear();
436  std::vector<int>().swap(sizeCC);
437 
438  netpixel* pixi;
439  netpixel* pixj;
440 
441  int V = (int)pIndex.size();
442  for(int i=0; i<V; i++){
443  pixi = pwc->getPixel(id,i);
444  if(!pixi) {
445  cout<<"monster::netcluster error: NULL pointer"<<endl;
446  exit(1);
447  }
448  if(check && !pixi->tdAmp.size()) continue; // check loaded pixels
449  pI.push_back(i);
450 
451  int N = 0;
452  int M = 0;
453  int K = 0;
454 
455 // cout<<id<<" "<<i<<" "<<pixi->layers<<" ";
456 
457  wavearray<float> tmp(8*V);
458  for(int j = 0; j<V; j++){
459  pixj = pwc->getPixel(id,j);
460  if(!pixj) {
461  cout<<"monster::netcluster error: NULL pointer"<<endl;
462  exit(1);
463  }
464  if(check && !pixj->tdAmp.size()) continue; // check loaded pixels
465 // if(pixi->layers==pixj->layers && pixi->time!=pixj->time) continue;
466  M++;
467  struct xtalk tmpOvlp = getXTalk(pixi->layers, pixi->time, pixj->layers, pixj->time);
468  if(tmpOvlp.CC[0]>2)continue;
469 
470  N = (i==j) ? 0 : ++K;
471 
472  tmp.data[N*8+0] = float(M-1);
473  tmp.data[N*8+1] = tmpOvlp.CC[0]*tmpOvlp.CC[0]+tmpOvlp.CC[1]*tmpOvlp.CC[1];
474  tmp.data[N*8+2] = tmpOvlp.CC[2]*tmpOvlp.CC[2]+tmpOvlp.CC[3]*tmpOvlp.CC[3];
475  tmp.data[N*8+3] = tmp.data[N*8+1]+tmp.data[N*8+2];
476  tmp.data[N*8+4] = tmpOvlp.CC[0];
477  tmp.data[N*8+5] = tmpOvlp.CC[2];
478  tmp.data[N*8+6] = tmpOvlp.CC[1];
479  tmp.data[N*8+7] = tmpOvlp.CC[3];
480  //cout<<"i="<<i<<" j="<<j<<" M="<<M-1<<" N="<<N<<" "<<tmp.data[N*8+3]<<endl;
481  }
482 
483  N++;
484  float* p8 = (float*)_mm_malloc(N*8*sizeof(float),32); // N x 8 floats aligned array
485  for(int n = 0; n<N*8; n++) p8[n] = tmp.data[n];
486  sizeCC.push_back(N);
487  clusterCC.push_back(p8);
488  }
489  return pI;
490 }
491 
492 
493 /*
494 
495 void monster::PrintSums()
496 { for(int i=0; i<nRes; ++i)for(int j=0; j<=i; ++j)
497  for(int k = 0; k<=layers[i]; ++k)for(int l=0; l<2; ++l){
498  xtalkArray& oa = catalog[i][j][k][l];
499  if(oa.size==0)continue;
500  double res = 0;
501  int cntr=0;
502 
503  for(int m=0; m<oa.size; ++m)res += oa.data[m].CC[0]*oa.data[m].CC[0];
504  printf("%3d x %3d - %3d [%d] : AA = %lf", i,j,k,l,res);
505 
506  res = 0;
507  for(int m=0; m<oa.size; ++m)if(fabs(oa.data[m].CC[1])>0.9999e-2){
508  res += oa.data[m].CC[1]*oa.data[m].CC[1];
509  if(i==j && l == 0 && oa.data[m].index == k)printf("%f\n", oa.data[m].CC[1]);
510  ++cntr;
511  }
512  printf(" AQ = %lf (%d) ", res, cntr);
513 
514  res = 0;
515  for(int m=0; m<oa.size; ++m)res += oa.data[m].CC[2]*oa.data[m].CC[2];
516  printf(" QA = %lf", res);
517 
518  res = 0;
519  for(int m=0; m<oa.size; ++m)res += oa.data[m].CC[3]*oa.data[m].CC[3];
520  printf(" QQ = %lf (nPix = %d) \n", res, oa.size);
521 
522  }
523 }
524 */
525 
526 //template class monster<float> ;
527 //template class monster<double> ;
528 
529  /*
530 #define CLASS_INSTANTIATION(class_) template class monster< class_ >;
531 
532 CLASS_INSTANTIATION(float)
533 CLASS_INSTANTIATION(double)
534 
535 #undef CLASS_INSTANTIATION
536  */
int KWDM
Definition: monster.hh:102
int getBaseWave(int m, int n, SymmArray< double > &w)
Definition: WDM.cc:305
monster()
Definition: monster.cc:42
double aux
Definition: testWDM_5.C:14
tuple f
Definition: cwb_online.py:91
printf("total live time: non-zero lags = %10.1f \n", liveTot)
double time1
std::vector< wavearray< float > > tdAmp
Definition: netpixel.hh:105
void write(char *filename)
param: file name
Definition: monster.cc:295
int n
Definition: cwb_net.C:10
int index
Definition: monster.hh:12
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
WDM< double > wdm(nLAYERS, nLAYERS, 6, 10)
netcluster * pwc
Definition: cwb_job_obj.C:20
int layers
virtual ~monster()
Definition: monster.cc:238
#define M
Definition: UniqSLagsList.C:3
size_t layers
Definition: netpixel.hh:94
int m
Definition: cwb_net.C:10
std::vector< vector_int > cList
Definition: netcluster.hh:379
int j
Definition: cwb_net.C:10
i drho i
int BetaOrder
Definition: WDM.hh:146
#define N
std::vector< int > sizeCC
Definition: monster.hh:105
int getBaseWaveQ(int m, int n, SymmArray< double > &w)
Definition: WDM.cc:356
static double r2
Definition: geodesics.cc:8
Definition: monster.hh:12
xtalk getXTalk(int nLay1, size_t indx1, int nLay2, size_t indx2)
param: numbers of layers identifying the resolution of the first pixel param: TF map index of the fir...
Definition: monster.cc:351
i() int(T_cor *100))
double * tmp
Definition: testWDM_5.C:31
void read(char *filename)
param: file name
Definition: monster.cc:244
double precision
int KWDM
Definition: WDM.hh:148
int k
void deallocate()
Definition: monster.cc:325
size_t time
Definition: netpixel.hh:92
const int NRES_MAX
Definition: wat.hh:5
double e
xtalkArray(*** catalog)[2]
Definition: monster.hh:97
char tag[256]
Definition: cwb_merge.C:74
netpixel * getPixel(size_t n, size_t i)
Definition: netcluster.hh:395
std::vector< float * > clusterCC
M for each resolution.
Definition: monster.hh:104
struct xtalk * data
Definition: monster.hh:14
double fabs(const Complex &x)
Definition: numpy.cc:37
int * layers
Definition: monster.hh:103
int tag
Definition: monster.hh:98
int l
Definition: cbc_plots.C:434
int nRes
Definition: monster.hh:99
int size
Definition: monster.hh:14
float CC[4]
Definition: monster.hh:12
DataType_t * data
Definition: wavearray.hh:301
int BetaOrder
Definition: monster.hh:100
fclose(ftrig)
int m_Layer
Definition: Wavelet.hh:100
double shift[NIFO_MAX]
int precision
Definition: WDM.hh:147
int check
exit(0)
int precision
Definition: monster.hh:101