70 printf(
"monster::monster : number of resolutions gt NRES_MAX=%d, exit\n",
NRES_MAX);
80 printf(
"monster::monster : mixed WDM set: KWDM=%d, exit\n",this->
KWDM);
87 printf(
"monster::monster : layers not ordered properly, exit\n");
91 struct xtalk tmp[10000];
93 double minOvlp = 1
e-2;
98 for(i=0; i<
nRes; ++
i)
for(j=0; j<=
i; ++
j){
100 printf(
"Processing resolution pair [%d x %d]...\n", layers[i], layers[j]);
104 int last1 = td1A.Last();
107 int last2 = td2A_odd.Last();
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){
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){
129 for(
int n = -maxN;
n<=maxN; ++
n){
133 if(shift - last2> left) left = shift - last2;
135 if(shift + last2<right)right = shift + last2;
136 if(left>right)
continue;
148 float CC[4]; CC[0] = 0, CC[1] = 0, CC[2] = 0, CC[3] = 0;
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];
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];
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;
181 if(nOvlp>10000)
printf(
"ERROR, tmp array too small\n");
184 for(
int n = 0;
n<nOvlp; ++
n)
catalog[i][j][k][
l].data[
n] = tmp[
n];
190 printf(
"total stored xtalk = %d\n", totOvlps);
191 for(
int i=0; i<
nRes; ++
i)
delete wdm[i];
210 printf(
"monster::monster : number of resolutions gt NRES_MAX=%d, exit\n",
NRES_MAX);
222 for(
int i=0;
i<this->
nRes; ++
i){
224 for(
int j=0;
j<=
i; ++
j){
226 for(
int k = 0;
k<=layers[
i]; ++
k)
for(
int l=0;
l<2; ++
l){
231 for(
int kk = 0; kk< oa.size ; ++kk)oa.data[kk] = xoa.
data[kk];
249 printf(
"monster::read : number of resolutions gt NRES_MAX=%d, exit\n",
NRES_MAX);
254 FILE*
f = fopen(fn,
"r");
256 fread(&tmp,
sizeof(
float), 1, f);
260 fread(&tmp,
sizeof(
float), 1, f);
262 fread(&tmp,
sizeof(
float), 1, f);
264 fread(&tmp,
sizeof(
float), 1, f);
266 fread(&tmp,
sizeof(
float), 1, f);
269 else {this->
tag = 0;}
271 for(
int i=0;
i<this->
nRes; ++
i){
272 fread(&tmp,
sizeof(
float), 1, f);
278 for(
int i=0;
i<this->
nRes; ++
i){
280 for(
int j=0;
j<=
i; ++
j){
282 for(
int k = 0;
k<=layers[
i]; ++
k)
for(
int l=0;
l<2; ++
l){
284 fread(&tmp,
sizeof(
float), 1, f);
287 fread(oa.data,
sizeof(
struct xtalk), oa.size, f);
298 FILE*
f = fopen(fn,
"w");
300 fwrite(&aux,
sizeof(
float), 1, f);
302 fwrite(&aux,
sizeof(
float), 1, f);
304 fwrite(&aux,
sizeof(
float), 1, f);
306 fwrite(&aux,
sizeof(
float), 1, f);
308 fwrite(&aux,
sizeof(
float), 1, f);
309 for(
int i=0;
i<this->
nRes; ++
i){
311 fwrite(&aux,
sizeof(
float), 1, f);
314 for(
int i=0;
i<this->
nRes; ++
i)
for(
int j=0;
j<=
i; ++
j)
318 fwrite(&aux,
sizeof(
float), 1, f);
333 for(
int j=0; j<=
i; ++
j){
351 struct xtalk monster::getXTalk(int nLayer1, size_t indx1, int nLayer2, size_t indx2)
358 struct xtalk ret={1, {3.,3.,3.,3.}};
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]);
378 int freq1 = indx1%(
layers[r1]+1);
384 int32_t
index = (int32_t)indx2;
388 struct xtalkArray& vector = catalog[r1][
r2][freq1][odd];
391 ret = vector.
data[
i];
393 float tmp = ret.
CC[1];
394 ret.
CC[1] = ret.
CC[2];
405 float monster::getXTalk(
int nLayer1,
int quad1,
size_t indx1,
int nLayer2,
int quad2,
size_t indx2)
410 if(res.
CC[0]>2)
return 0;
412 if(quad2)
return res.
CC[3];
415 if(quad2)
return res.
CC[1];
428 vector<int>& pIndex = pwc->
cList[
id-1];
436 std::vector<int>().swap(
sizeCC);
441 int V = (
int)pIndex.size();
442 for(
int i=0;
i<V;
i++){
445 cout<<
"monster::netcluster error: NULL pointer"<<endl;
448 if(check && !pixi->
tdAmp.size())
continue;
458 for(
int j = 0; j<V; j++){
461 cout<<
"monster::netcluster error: NULL pointer"<<endl;
464 if(check && !pixj->
tdAmp.size())
continue;
468 if(tmpOvlp.
CC[0]>2)
continue;
470 N = (
i==
j) ? 0 : ++K;
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];
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];
484 float* p8 = (
float*)_mm_malloc(N*8*
sizeof(
float),32);
485 for(
int n = 0;
n<N*8;
n++) p8[
n] = tmp.
data[
n];
int getBaseWave(int m, int n, SymmArray< double > &w)
printf("total live time: non-zero lags = %10.1f \n", liveTot)
std::vector< wavearray< float > > tdAmp
void write(char *filename)
param: file name
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)
std::vector< vector_int > cList
std::vector< int > sizeCC
int getBaseWaveQ(int m, int n, SymmArray< double > &w)
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...
void read(char *filename)
param: file name
xtalkArray(*** catalog)[2]
netpixel * getPixel(size_t n, size_t i)
std::vector< float * > clusterCC
M for each resolution.
double fabs(const Complex &x)