67 template<class DataType_t>
73 template<
class DataType_t>
78 template<
class DataType_t>
83 template<
class DataType_t>
88 template<
class DataType_t>
93 template<
class DataType_t>
97 if(reset) ResetSparseTable();
101 this->pWavelet->release();
102 delete this->pWavelet;
105 this->pWavelet = pws->
pWavelet->Init();
106 this->pWavelet->allocate(pws->
size(), pws->
data);
109 this->rate(pws->
rate());
110 this->wrate(pws->
wrate());
113 this->edge(pws->
edge());
118 cout <<
"SSeries::Init : Inconsistent index rate " << pws->
rate()
119 <<
" previously setted index rate : " << this->
rate() << endl;
122 if(pws->
maxLayer()!=this->maxLayer()) {
123 cout <<
"SSeries::Init : Inconsistent maxLayer " << pws->
maxLayer()
124 <<
" previously setted maxLayer: " << this->maxLayer() << endl;
127 if(pws->
size()!=this->pWavelet->nWWS) {
128 cout <<
"SSeries::Init : Inconsistent nWWS " << pws->
size()
129 <<
" previously setted nWWS : " << this->pWavelet->nWWS << endl;
133 cout <<
"SSeries::Init : Inconsistent start " << pws->
start()
134 <<
" previously setted start : " << this->
start() << endl;
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;
146 if(this->pWavelet->m_WaveType==
WDMT) {
149 wdm_KWDM = wdm->
KWDM;
151 wdm_rate = this->
rate();
152 wdm_start = this->
start();
153 wdm_nSTS = wdm->
nSTS;
167 template<
class DataType_t>
173 sparseLookup.resize(0);
174 sparseType.ResetAllBits();
175 sparseType.Compact();
176 sparseIndex.resize(0);
177 sparseMap00.resize(0);
178 sparseMap90.resize(0);
184 template<
class DataType_t>
194 CheckWaveletType(
"AddCore");
197 int R =
int(this->wrate()+0.1);
200 cid = pwc->
get((
char*)
"ID",0,
'S',0);
203 for(
int ik=0; ik<
K; ik++) {
205 int id = size_t(cid.
data[ik]+0.1);
207 if(ID &&
id!=ID)
continue;
208 if(pwc->
sCuts[
id-1] == 1)
continue;
210 vector<int>* vint = &(pwc->
cList[
id-1]);
211 int V = vint->size();
214 for(
int l=0;
l<V;
l++) {
216 if(
int(pix->
rate+0.01)!=R)
continue;
217 index = (
int)pix->
data[ifoID].index;
218 core.SetBitNumber(index);
224 template<
class DataType_t>
251 this->layerHalo = lHalo;
252 this->net_Delay = maxTau;
253 if(tHalo>=0) this->time_Halo = tHalo;
257 template<
class DataType_t>
263 CheckWaveletType(
"UpdateSparseTable");
265 if(time_Halo==0 && layerHalo==0)
return;
267 extraHalo =
int(net_Delay*this->wrate())+8;
268 int hSlice = time_Halo+extraHalo;
271 int nLayer = this->maxLayer()+1;
272 int nSlice = this->sizeZero();
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);
289 int csize=cluster.CountBits();
290 sparseLookup.resize(nLayer+1);
291 sparseType.ResetAllBits();sparseType.Compact();
292 sparseIndex.resize(csize);
293 sparseMap00.resize(csize);
294 sparseMap90.resize(csize);
298 for(
short j=0;
j<nLayer;
j++) {
300 for(
int i=0;
i<nSlice;
i++) {
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);
312 sparseLookup[nLayer]=
n;
316 template<
class DataType_t>
321 if(bcore)
return sparseType.CountBits();
322 else return sparseIndex.size();
326 template<
class DataType_t>
329 CheckWaveletType(
"GetSparseIndex");
331 if(!bcore)
return sparseIndex;
335 for(
int i=0;
i<(
int)sparseIndex.size();
i++)
336 if(sparseType.TestBitNumber(
i)) si[isize++]=sparseIndex[
i];
343 template<
class DataType_t>
346 CheckWaveletType(
"GetSTFdata");
351 int nL = 2*layerHalo+1;
352 int nS = 2*time_Halo+1;
353 int nLayer = this->maxLayer()+1;
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;
361 int layer = GetLayer(index);
363 int jb = layer-layerHalo<0 ? 0 : layer-layerHalo;
364 int je = layer+layerHalo>nLayer-1 ? nLayer-1 : layer+layerHalo;
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));
373 for(
int j=jb;
j<=je;
j++) {
374 int start = sparseLookup[
j];
375 int end = sparseLookup[
j+1]-1;
376 int key = index+(
j-layer);
377 int sindex = binarySearch(sparseIndex.data, start, end, key);
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;
388 int jp =
j-layer+layerHalo;
389 memcpy(&pS[jp][-time_Halo], &(sparseMap00.data[ib]),nS*
sizeof(
float));
390 memcpy(&pS[nL+jp][-time_Halo],&(sparseMap90.data[ib]),nS*
sizeof(
float));
396 template<
class DataType_t>
404 CheckWaveletType(
"Expand");
405 int nLayer = this->maxLayer()+1;
406 int nSlice = this->sizeZero();
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]);
424 template<
class DataType_t>
430 CheckWaveletType(
"Clean");
434 for(
int i=0;
i<(
int)sparseIndex.size();
i++)
435 cluster.SetBitNumber(sparseIndex[
i]);
437 for(
int i=0;i<=this->maxIndex();i++)
438 if(!cluster.TestBitNumber(i)) {SetMap00(i,0);SetMap90(i,0);}
442 template<
class DataType_t>
447 int searchPos = (start + end) >> 1;
452 if (array[searchPos] > key)
453 return binarySearch (array, start, searchPos - 1, key);
455 if (array[searchPos] < key)
456 return binarySearch (array, searchPos + 1, end, key);
458 if (array[searchPos] == key)
463 template<
class DataType_t>
465 return binarySearch(array, 0, size - 1, key);
469 template<
class DataType_t>
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);
486 R__b >> wdm_BetaOrder;
489 R__b >> wdm_precision;
492 if(R__v > 1) R__b >> wdm_nSTS;
495 sparseType.ResetAllBits();sparseType.Compact();
496 for(
int i=0;
i<(
int)sparseIndex.size();
i++) {
497 if(sparseIndex[
i]<0) {
502 sparseType.SetBitNumber(
i);
505 core.SetBitNumber(sparseIndex[
i]);
511 for(
int i=0;
i<(
int)sparseIndex.size();
i++) {
512 if(sparseType.TestBitNumber(
i)) {
520 sparseLookup.Streamer(R__b);
521 sparseIndex.Streamer(R__b);
522 sparseMap00.Streamer(R__b);
523 sparseMap90.Streamer(R__b);
528 R__b << wdm_BetaOrder;
531 R__b << wdm_precision;
535 R__b.SetByteCount(R__c, kTRUE);
542 #define CLASS_INSTANTIATION(class_) template class SSeries< class_ >;
virtual size_t size() const
virtual size_t getTDFsize()
virtual void rate(double r)
std::vector< pixel > cluster
virtual void edge(double s)
wavearray< int > GetSparseIndex(bool bcore=true)
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
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...
WDM< double > wdm(nLAYERS, nLAYERS, 6, 10)
std::vector< vector_int > cList
virtual void start(double s)
bool GetSTFdata(int index, SymmArraySSE< float > *pS)
void Init(WSeries< DataType_t > *pws=NULL, bool reset=true)
#define CLASS_INSTANTIATION(class_)
int GetSparseSize(bool bcore=true)
netpixel * getPixel(size_t n, size_t i)
void Expand(bool bcore=true)
void SetHalo(double maxTau=0.042, int lHalo=1, int tHalo=-1)
virtual void stop(double s)
void Forward(int n=-1)
param: wavelet - n is number of steps (-1 means full decomposition)
void AddCore(size_t ifoID, netcluster *pwc, int ID=0)
WaveDWT< DataType_t > * pWavelet
int binarySearch(int array[], int start, int end, int key)