80 rfName(""), frFile(NULL), fOption(""), srIndex(0),
81 verbose(false), frRetryTime(60), xstart(0.), xstop(0.) {
89 frtree_List(NULL), chName(
""),
frName(
"Frame"), rfName(
""),
90 frFile(NULL), fOption(
""), srIndex(0), verbose(false), frRetryTime(60), xstart(0.), xstop(0.) {
96 open(ioFile, chName, option, onDisk, label, mode);
106 if(rfName!=
"") gSystem->Exec(
TString(
"rm "+rfName).Data());
127 cout <<
"CWB::frame::operator(<<) : Not allowed in READ mode" << endl;
132 cout <<
"CWB::frame::operator(<<) : channel not defined";
137 cout <<
"CWB::frame::operator(<<) : frame name not defined" << endl;
168 cout <<
"CWB::frame::writeFrame : output frame file close" << endl;
172 cout <<
"CWB::frame::writeFrame : input rate must be > 0" << endl;
176 cout <<
"CWB::frame::writeFrame : input size must be > 0" << endl;
185 frFrame->GTimeS = x.
start();
188 cout <<
"Size (sec) " << x.
size()/x.
rate() << endl;
191 cout <<
"CWB::frame::writeFrame : Cannot create FrProcData" << endl;
194 proc->timeOffset = 0;
195 proc->tRange = frFrame->dt;
198 for (
int i=0;
i<(
int)proc->data->nData;
i++) proc->data->dataD[
i] = x[
i];
200 int err=FrameWrite(frFrame,frFile);
202 cout <<
"CWB::frame::writeFrame : Error writing frame" << endl;
240 if(rfName!=
"") gSystem->Exec(
TString(
"rm "+rfName).Data());
250 int rnID =
int(gRandom->Rndm(13)*1.e9);
251 UserGroup_t*
uinfo = gSystem->GetUserInfo();
254 gSystem->Exec(
TString(
"mkdir -p /dev/shm/")+uname);
256 sprintf(fName,
"/dev/shm/%s/cwbframe_%d.root",uname.Data(),
rnID);
262 if((fOption!=
"READ")&&(fOption!=
"WRITE")) fOption=
"READ";
264 if(fOption==
"READ")
nfiles = frl2FrTree(ioFile, rfName, label, mode);
265 if(fOption==
"WRITE") {
266 if(!fNameCheck(ioFile))
exit(1);
269 cout <<
"CWB::frame::frame : Error opening file " << ioFile.Data() << endl;
283 if(frtree_List!=NULL) frtree_List->Reset();
285 if (frFile!=NULL) FrFileOEnd(frFile);
307 if(fOption!=
"READ") {
308 cout <<
"CWB::frame::frl2FrTree : allowed only in READ mode" << endl;
313 if(rfName.Sizeof()>1) ofile=
new TFile(rfName.Data(),
"RECREATE");
315 TTree* frtree =
new TTree(
"frl",
"frl");
320 char atlas_path[1024];
321 frtree->Branch(
"gps",&gps,
"gps/D");
322 frtree->Branch(
"length",&length,
"length/D");
323 frtree->Branch(
"start",&start,
"start/D");
324 frtree->Branch(
"stop",&stop,
"stop/D");
325 frtree->Branch(
"path",atlas_path,
"path/C");
327 if(rfName.Sizeof()>1) frtree->SetDirectory(ofile);
328 else frtree->SetDirectory(0);
331 sprintf(ifile_name,
"%s",iFile.Data());
332 cout <<
"CWB::frame::frl2FrTree - " << ifile_name << endl;
340 if( (in=fopen(ifile_name,
"r"))!=NULL ) {
341 while(fgets(s,512,in) != NULL) {
346 line.ReplaceAll(
"framefile=",
"");
347 line.ReplaceAll(
"file://localhost",
"");
348 line.ReplaceAll(
"gsiftp://ldr.aei.uni-hannover.de:15000",
"");
350 if (line.Contains(label)) {
353 TObjString* sline = (TObjString*)token0->At(0);
357 sprintf(atlas_path,
"%s",path.Data());
361 TObjString* path_tok1 = (TObjString*)token1->At(token1->GetEntries()-1);
364 TObjArray* token2 =
TString(path_tok1->GetString()).Tokenize(
TString(
"-"));
365 TObjString* gps_tok = (TObjString*)token2->At(token2->GetEntries()-2);
366 TString sgps = gps_tok->GetString().Data();
370 TObjString* length_tok = (TObjString*)token2->At(token2->GetEntries()-1);
371 TString slength = length_tok->GetString().Data();
372 slength.ReplaceAll(label,
"");
374 length = slength.Atof();
381 if(token1->GetEntries()<3) {
382 cout <<
"CWB::frame::frl2FrTree : bad format " << ifile_name << endl;
386 TObjString* gps_tok = (TObjString*)token1->At(1);
387 TString sgps = gps_tok->GetString().Data();
391 TObjString* length_tok = (TObjString*)token1->At(2);
392 TString slength = length_tok->GetString().Data();
394 length = slength.Atof();
405 if(xstart && stop<xstart)
continue;
406 if(xstop && start>xstop)
continue;
416 cout <<
"CWB::frame::frl2FrTree : Error opening file " << ifile_name << endl;
424 if(frtree_List!=NULL)
delete frtree_List;
425 frtree_List = (TTree*)frtree->CloneTree();
444 if(fOption!=
"READ") {
445 cout <<
"CWB::frame::sortFrTree : allowed only in READ mode" << endl;
448 TFile
f(iFile.Data());
450 Int_t
nentries = (Int_t)tree->GetEntries();
451 tree->Draw(
"gps",
"",
"goff");
453 TMath::Sort(nentries,tree->GetV1(),
index,
false);
455 TFile
f2(rfName.Data(),
"recreate");
456 TTree *
tsorted = (TTree*)tree->CloneTree(0);
459 tree->GetEntry(index[
i]);
477 if(fOption!=
"READ") {
478 cout <<
"CWB::frame::sortFrTree : allowed only in READ mode" << endl;
481 Int_t
nentries = (Int_t)frtree_List->GetEntries();
482 frtree_List->Draw(
"gps",
"",
"goff");
483 double*
gps = frtree_List->GetV1();
485 TMath::Sort(nentries,gps,index,
false);
488 TTree *sorted_frtree_List = (TTree*)frtree_List->CloneTree(0);
492 if(gps[j]==pgps)
continue;
494 frtree_List->GetEntry(j);
495 sorted_frtree_List->Fill();
501 frtree_List = (TTree*)sorted_frtree_List->CloneTree();
502 delete sorted_frtree_List;
521 frf = getFrList(rfName, istart, istop, segEdge);
523 frf = getFrList(istart, istop, segEdge, NULL);
542 if(fOption!=
"READ") {
543 cout <<
"CWB::frame::getFrList : allowed only in READ mode" << endl;
549 TFile *
ifile = TFile::Open(rfName.Data());
550 if (ifile==NULL) {cout <<
"No " << rfName.Data() <<
" file !!!" << endl;
exit(1);}
552 if (itree==NULL) {cout <<
"No ffl tree name match !!!" << endl;
exit(1);}
553 frf=getFrList(istart, istop, segEdge, itree);
572 if(fOption!=
"READ") {
573 cout <<
"CWB::frame::getFrList : allowed only in READ mode" << endl;
580 TTree*
itree=frtree_List;
581 if(itree==NULL) {cout <<
"CWB::frame::getFrList - Error : No tree defined !!!" << endl;
exit(1);}
583 int size = itree->GetEntries();
589 itree->SetBranchAddress(
"gps",&gps);
590 itree->SetBranchAddress(
"length",&length);
591 itree->SetBranchAddress(
"path",path);
593 double start = istart!=0 ? istart : 0;
594 double stop = istop!=0 ? istop : 2000000000;
596 sprintf(cut,
"(gps>=%f && gps<=%f)", start,stop);
598 itree->SetEstimate(size);
599 itree->Draw(
"Entry$",cut,
"goff");
600 int isel = itree->GetSelectedRows();
601 double*
entry = itree->GetV1();
603 for (
int i=0;
i<isel;
i++) {
608 frf.
file.push_back(path);
609 frlist.push_back(frf);
629 if(fOption!=
"READ") {
630 cout <<
"CWB::frame::getFrList : allowed only in READ mode" << endl;
636 if(itree==NULL) itree=frtree_List;
637 if(itree==NULL) {cout <<
"CWB::frame::getFrList - Error : No tree defined !!!" << endl;
exit(1);}
639 int size = itree->GetEntries();
645 itree->SetBranchAddress(
"gps",&gps);
646 itree->SetBranchAddress(
"length",&length);
647 itree->SetBranchAddress(
"path",path);
652 sprintf(cut,
"((%f>=gps && %f<=gps+length) || (%f>=gps && %f<=gps+length) || (%f<=gps && %f>=gps+length))",
653 start,start,stop,stop,start,stop);
655 itree->SetEstimate(size);
656 itree->Draw(
"Entry$",cut,
"goff");
657 int isel = itree->GetSelectedRows();
658 double*
entry = itree->GetV1();
664 cout <<
"CWB::frame::getFrList - Error : No files matched in the range "
665 << start <<
":" << stop <<
" !!!" << endl << endl;
666 sprintf(cut,
"gps>=%f && gps<=%f",start-500,stop+500);
667 cout <<
"Dump frame segments available in the input list in the range : " << cut << endl << endl;
668 itree->SetScanField(0);
669 itree->Scan(
"Entry$:gps:length",cut,
"goff");
673 itree->GetEntry(entry[0]);
676 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
677 cout <<
"start buffer (" << start <<
") < begin gps frame (" << gps <<
")" << endl;
678 cout <<
"check input frame list" << endl << endl;
681 if (stop > gps+length) {
683 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
684 cout <<
"stop buffer (" << stop <<
") > end gps frame (" << gps+length <<
")" << endl;
685 cout <<
"check input frame list" << endl << endl;
690 itree->GetEntry(entry[0]);
693 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
694 cout <<
"start buffer (" << start <<
") < begin gps frame (" << gps <<
")" << endl;
695 cout <<
"check input frame list" << endl << endl;
698 itree->GetEntry(entry[isel-1]);
699 if (stop > gps+length) {
701 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
702 cout <<
"stop buffer (" << stop <<
") > end gps frame (" << gps+length <<
")" << endl;
703 cout <<
"check input frame list" << endl << endl;
707 itree->GetEntry(entry[0]);
709 for(
int i=1;
i<isel;
i++) {
710 itree->GetEntry(entry[
i]);
712 cout <<
"CWB::frame::getFrList - Error : " <<
" Requested frames are not contiguous !!!" << endl;
713 cout <<
"start : " << gps <<
" is != from the end of the previous segment " << stop0 << endl;
720 itree->GetEntry(entry[isel-1]);
731 for (
int i=0;
i<isel;
i++) {
732 itree->GetEntry(entry[
i]);
733 frf.
file.push_back(path);
749 if(fOption!=
"READ") {
750 cout <<
"CWB::frame::getFrRange : allowed only in READ mode" << endl;
756 if(itree==NULL) itree=frtree_List;
757 if(itree==NULL) {cout <<
"CWB::frame::getFrRange - No tree defined !!!" << endl;
exit(1);}
759 int size = itree->GetEntries();
763 itree->SetBranchAddress(
"gps",&gps);
764 itree->SetBranchAddress(
"length",&length);
766 double min=4000000000.;
771 if(max<gps+length) max=gps+
length;
795 if(getOption()!=
"READ") {
796 cout <<
"CWB::frame::readFrame : allowed only in READ mode" << endl;
799 if(getChName()==
"") {
800 cout <<
"CWB::frame::readFrame : channel not defined" << endl;
830 if(fOption!=
"READ") {
831 cout <<
"CWB::frame::readFrames : allowed only in READ mode" << endl;
836 char *buffer=
new char[buffersize];
838 double rf_start, rf_stop;
846 FILE *framelist=fopen(filename,
"r");
848 fgets(buffer,buffersize,framelist);
849 nframes=(
int)atoi(buffer);
852 fprintf(stderr,
"nframes=%d\n",nframes);
856 fgets(buffer,buffersize,framelist);
857 frlen=(double)atof(buffer);
858 fgets(buffer,buffersize,framelist);
859 rf_start=(double)atof(buffer);
860 fgets(buffer,buffersize,framelist);
861 rf_stop=(double)atof(buffer);
862 fgets(buffer,buffersize,framelist);
863 rf_rate=(double)atof(buffer);
866 fprintf(stdout,
"-------------\n");
867 fprintf(stdout,
"filename=%s channel=%s nframes=%d frlen=%f start=%f stop=%f rate=%f \n",
868 filename, channel, nframes, frlen, rf_start, rf_stop, rf_rate);
874 for(
int i=0;
i<nframes;
i++) {
875 fgets(buffer,buffersize,framelist);
876 if(verbose)
fprintf(stdout,
"framefile=%s\n",buffer);
882 readFrames(frf, channel, w);
901 if(fOption!=
"READ") {
902 cout <<
"CWB::frame::readFrames : allowed only in READ mode" << endl;
909 double rf_start, rf_stop, fstart, fend;
913 unsigned int wcounter=0;
917 nframes=frf.
file.size();
923 bool bigFrame =
false;
925 if(verbose) cout <<
"CWB::frame::readFrames - bigFrame !!! : " << frlen << endl;
930 for(
int i=0;
i<nframes;
i++) {
932 if(verbose)
fprintf(stdout,
"CWB::frame::readFrames - framefile=%s channel=%s\n",frf.
file[
i].Data(),channel);
937 while(ifile==NULL&&ntry<3) {
939 if(ifile!=NULL || frRetryTime==0)
break;
941 cout <<
"CWB::frame::readFrames - Failed to read file - "
942 <<
"retry after " << ntry*frRetryTime <<
" sec ..."
943 <<
"\t[" << ntry <<
"/3]" << endl;
944 if(ifile==NULL) gSystem->Sleep(1000*ntry*frRetryTime);
948 fprintf(stderr,
"CWB::frame::readFrames - Cannot read file %s\n",frf.
file[
i].Data());
956 fprintf(stderr,
"CWB::frame::readFrames - Cannot read file %s, error=%d\n",frf.
file[
i].Data(),ifile->error);
962 fstart=(double)FrFileITStart(ifile);
963 fend=(double)FrFileITEnd(ifile);
966 if(fend0!=0 && fstart!=fend0) {
967 cout <<
"CWB::frame::readFrames - Error : " <<
" Requested frames are not contiguous !!!" << endl;
968 cout <<
"start : " << fstart <<
" is != from the end of the previous segment " << fend0 << endl;
975 if (fstart<rf_start) fstart=rf_start;
976 if (fend>rf_stop) fend=rf_stop;
979 if(verbose) cout <<
"frlen : " << frlen << endl;
980 if (frlen<=0)
continue;
984 v=FrFileIGetV(ifile,channel, fstart, frlen);
987 if (bigFrame&&(v!=NULL)) {
988 double time_offset = fstart-v->GTime;
989 if (time_offset!=0) {
990 fprintf(stdout,
"CWB::frame::readFrames - BigFrame Check Mismatch : v->GTime=%.8f != fstart=%.8f \n",v->GTime,fstart);
992 v=FrFileIGetV(ifile,channel, fstart+time_offset, frlen);
997 fprintf(stderr,
"CWB::frame::readFrames - FrFileIGetV failed: channel %s not present\n",channel);
1000 if((v->type!=FR_VECT_4R && v->type!=FR_VECT_8R)&&
1001 (v->type!=FR_VECT_2S && v->type!=FR_VECT_4S && v->type!=FR_VECT_8S)&&
1002 (v->type!=FR_VECT_2U && v->type!=FR_VECT_4U && v->type!=FR_VECT_8U)) {
1003 fprintf(stderr,
"CWB::frame::readFrames - Wrong vector type %d\n",v->type);fflush(stderr);
1008 w.
resize(
int((rf_stop-rf_start)*rf_rate));
1012 long samples=long(frlen*rf_rate);
1015 fprintf(stdout,
"CWB::frame::readFrames - samples=%ld v->nDim=%d v->nData=%ld v->type=%d 8R=%d v->GTime=%.8f v->localtime=%d rate=%.1f step=%.8f\n",
1016 samples,(
int)v->nDim,v->nData,v->type,FR_VECT_8R,v->GTime, v->localTime, rf_rate, rf_step);
1017 for(
long j=0;
j<v->nDim;
j++) {
1018 fprintf(stdout,
"v->nx[%ld]=%ld v->dx[%ld]=%.8f v->startX[%ld]=%.8f\n",
1019 j,v->nx[
j],
j,v->dx[
j],
j,v->startX[
j]);
1024 if (bigFrame&&(v->GTime!=fstart)) {
fprintf(stdout,
"CWB::frame::readFrames - Error : v->GTime=%.8f != fstart=%.8f \n",v->GTime,fstart);
exit(1);}
1026 for(
long j=0;
j<samples;
j++) {
1027 rf_time=fstart+
j*rf_step;
1028 if(rf_time>=rf_start && rf_time<rf_stop) {
1029 if(wcounter<w.
size()) {
1030 if(v->type==FR_VECT_2S) w.
data[wcounter]=double(v->dataS[
j]);
1031 if(v->type==FR_VECT_4S) w.
data[wcounter]=double(v->dataI[
j]);
1032 if(v->type==FR_VECT_8S) w.
data[wcounter]=double(v->dataL[
j]);
1033 if(v->type==FR_VECT_4R) w.
data[wcounter]=double(v->dataF[
j]);
1034 if(v->type==FR_VECT_8R) w.
data[wcounter]=v->dataD[
j];
1035 if(v->type==FR_VECT_2U) w.
data[wcounter]=double(v->dataUS[
j]);
1036 if(v->type==FR_VECT_4U) w.
data[wcounter]=double(v->dataUI[
j]);
1037 if(v->type==FR_VECT_8U) w.
data[wcounter]=double(v->dataUL[
j]);
1040 fprintf(stderr,
"w overflow\n");
1049 if(verbose)
fprintf(stdout,
"CWB::frame::readFrames - wcounter=%d w.size()=%d\n",(
int)wcounter,(
int)w.
size());
1051 if(w.
rate()!=(1<<srIndex)) {
1054 fprintf(stdout,
"--------------------------------\n");
1056 fprintf(stdout,
"--------------------------------\n");
1086 if(fOption!=
"READ") {
1087 cout <<
"CWB::frame::dumpFrList : allowed only in READ mode" << endl;
1091 char ofile_name[1024];
1092 sprintf(ofile_name,
"%s",ofName.Data());
1093 cout << ofile_name << endl;
1096 if (!out.good()) {cout <<
"Error Opening File : " << ofName.Data() << endl;
exit(1);}
1099 out << frf.
file.size() << endl;
1100 out << frf.
length << endl;
1101 out << frf.
start << endl;
1102 out << frf.
stop << endl;
1103 out <<
int(sRate) << endl;
1122 TObjArray* token0 = fName.Tokenize(
TString(
"."));
1123 TObjString* body_tok = (TObjString*)token0->At(0);
1124 TString body = body_tok->GetString().Data();
1128 if(token->GetEntries()<2) {
1129 cout <<
"CWB::frame::fNameCheck : File Name Format Error - " << fName.Data() << endl;
1130 cout <<
"GPS & LENGTH must be integers : xxxx-GPS-LENGTH.yyy" << endl;
1133 TObjString* gps_tok = (TObjString*)token->At(token->GetEntries()-2);
1134 TString sgps = gps_tok->GetString().Data();
1136 TObjString* length_tok = (TObjString*)token->At(token->GetEntries()-1);
1137 TString slength = length_tok->GetString().Data();
1139 if((slength.IsDigit()) && (sgps.IsDigit()))
return true;
1141 cout <<
"CWB::frame::fNameCheck : File Name Format Error - " << fName.Data() << endl;
1142 cout <<
"GPS & LENGTH must be integers : xxxx-GPS-LENGTH.yyy" << endl;
virtual size_t size() const
fprintf(stdout,"start=%f duration=%f rate=%f\n", x.start(), x.size()/x.rate(), x.rate())
double min(double x, double y)
virtual void rate(double r)
wavearray< double > & operator>>(CWB::frame &fr, wavearray< double > &x)
cout<< "skymap size : "<< L<< endl;for(int l=0;l< L;l++) sm.set(l, l);sm > const_cast< char * >("skymap.dat")
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
CWB::frame fr(FRLIST_NAME)
void writeFrame(wavearray< double > x, TString frName, TString chName)
int dumpFrList(frfile frf, TString ofName, double sRate=16384.)
virtual void start(double s)
int frl2FrTree(TString iFile, TString rfName="", TString label=".gwf", unsigned int mode=0)
void Resample(const wavearray< DataType_t > &, double, int=6)
bool fNameCheck(TString fName)
virtual void stop(double s)
void readFrames(char *filename, char *channel, wavearray< double > &w)
sprintf(tfres,"(1/%g)x(%g) (sec)x(Hz)", 2 *df, df)
frfile getFrList(int istart, int istop, int segEdge)
cout<< fr.getNfiles()<< endl;std::vector< frfile > frlist
void open(TString ioFile, TString chName="", Option_t *option="", bool onDisk=false, TString label=".gwf", unsigned int mode=0)
virtual void resize(unsigned int)