98 rfName(""), frFile(NULL), fOption(""), srIndex(-1),
99 verbose(false), frRetryTime(60),
xstart(0.),
xstop(0.) {
107 frtree_List(NULL), chName(
""),
frName(
"Frame"), rfName(
""),
108 frFile(NULL), fOption(
""), srIndex(-1), verbose(false), frRetryTime(60),
xstart(0.),
xstop(0.) {
114 open(ioFile, chName, option, onDisk, label, mode);
145 cout <<
"CWB::frame::operator(<<) : Not allowed in READ mode" << endl;
150 cout <<
"CWB::frame::operator(<<) : channel not defined";
155 cout <<
"CWB::frame::operator(<<) : frame name not defined" << endl;
186 cout <<
"CWB::frame::writeFrame : output frame file close" << endl;
190 cout <<
"CWB::frame::writeFrame : input rate must be > 0" << endl;
194 cout <<
"CWB::frame::writeFrame : input size must be > 0" << endl;
199 FrameH* frFrame = FrameNew(const_cast<char*>(frName.Data()));
203 frFrame->GTimeS = x.
start();
206 cout <<
"Size (sec) " << x.
size()/x.
rate() << endl;
207 FrProcData* proc = FrProcDataNew(frFrame,const_cast<char*>(chName.Data()),x.
rate(),x.
size(),-64);
209 cout <<
"CWB::frame::writeFrame : Cannot create FrProcData" << endl;
212 proc->timeOffset = 0;
213 proc->tRange = frFrame->dt;
216 for (
int i=0;
i<(
int)proc->data->nData;
i++) proc->data->dataD[
i] = x[
i];
218 int err=FrameWrite(frFrame,
frFile);
220 cout <<
"CWB::frame::writeFrame : Error writing frame" << endl;
268 int rnID =
int(gRandom->Rndm(13)*1.e9);
269 UserGroup_t*
uinfo = gSystem->GetUserInfo();
272 gSystem->Exec(
TString(
"mkdir -p /dev/shm/")+uname);
274 sprintf(fName,
"/dev/shm/%s/cwbframe_%d.root",uname.Data(),rnID);
285 frFile = FrFileONew(const_cast<char*>(ioFile.Data()),1);
287 cout <<
"CWB::frame::frame : Error opening file " << ioFile.Data() << endl;
326 cout <<
"CWB::frame::frl2FrTree : allowed only in READ mode" << endl;
331 if(rfName.Sizeof()>1) ofile=
new TFile(rfName.Data(),
"RECREATE");
333 TTree* frtree =
new TTree(
"frl",
"frl");
338 char atlas_path[1024];
339 frtree->Branch(
"gps",&gps,
"gps/D");
340 frtree->Branch(
"length",&length,
"length/D");
341 frtree->Branch(
"start",&start,
"start/D");
342 frtree->Branch(
"stop",&stop,
"stop/D");
343 frtree->Branch(
"path",atlas_path,
"path/C");
345 if(rfName.Sizeof()>1) frtree->SetDirectory(ofile);
346 else frtree->SetDirectory(0);
349 sprintf(ifile_name,
"%s",iFile.Data());
350 cout <<
"CWB::frame::frl2FrTree - " << ifile_name << endl;
358 if( (in=fopen(ifile_name,
"r"))!=NULL ) {
359 while(fgets(s,512,in) != NULL) {
364 line.ReplaceAll(
"framefile=",
"");
365 line.ReplaceAll(
"file://localhost",
"");
366 line.ReplaceAll(
"gsiftp://ldr.aei.uni-hannover.de:15000",
"");
368 if (line.Contains(label)) {
371 TObjString* sline = (TObjString*)token0->At(0);
375 sprintf(atlas_path,
"%s",path.Data());
379 TObjString* path_tok1 = (TObjString*)token1->At(token1->GetEntries()-1);
382 TObjArray* token2 =
TString(path_tok1->GetString()).Tokenize(
TString(
"-"));
383 TObjString* gps_tok = (TObjString*)token2->At(token2->GetEntries()-2);
384 TString sgps = gps_tok->GetString().Data();
388 TObjString* length_tok = (TObjString*)token2->At(token2->GetEntries()-1);
389 TString slength = length_tok->GetString().Data();
390 slength.ReplaceAll(label,
"");
392 length = slength.Atof();
399 if(token1->GetEntries()<3) {
400 cout <<
"CWB::frame::frl2FrTree : bad format " << ifile_name << endl;
404 TObjString* gps_tok = (TObjString*)token1->At(1);
405 TString sgps = gps_tok->GetString().Data();
409 TObjString* length_tok = (TObjString*)token1->At(2);
410 TString slength = length_tok->GetString().Data();
412 length = slength.Atof();
434 cout <<
"CWB::frame::frl2FrTree : Error opening file " << ifile_name << endl;
463 cout <<
"CWB::frame::sortFrTree : allowed only in READ mode" << endl;
466 TFile
f(iFile.Data());
468 Int_t
nentries = (Int_t)tree->GetEntries();
469 tree->Draw(
"gps",
"",
"goff");
471 TMath::Sort(nentries,tree->GetV1(),
index,
false);
473 TFile
f2(rfName.Data(),
"recreate");
474 TTree *
tsorted = (TTree*)tree->CloneTree(0);
477 tree->GetEntry(index[
i]);
496 cout <<
"CWB::frame::sortFrTree : allowed only in READ mode" << endl;
503 TMath::Sort(nentries,gps,index,
false);
506 TTree *sorted_frtree_List = (TTree*)
frtree_List->CloneTree(0);
510 if(gps[j]==pgps)
continue;
513 sorted_frtree_List->Fill();
519 frtree_List = (TTree*)sorted_frtree_List->CloneTree();
520 delete sorted_frtree_List;
541 frf =
getFrList(istart, istop, segEdge, NULL);
561 cout <<
"CWB::frame::getFrList : allowed only in READ mode" << endl;
567 TFile *
ifile = TFile::Open(rfName.Data());
568 if (ifile==NULL) {cout <<
"No " << rfName.Data() <<
" file !!!" << endl;
exit(1);}
570 if (itree==NULL) {cout <<
"No ffl tree name match !!!" << endl;
exit(1);}
571 frf=
getFrList(istart, istop, segEdge, itree);
591 cout <<
"CWB::frame::getFrList : allowed only in READ mode" << endl;
599 if(itree==NULL) {cout <<
"CWB::frame::getFrList - Error : No tree defined !!!" << endl;
exit(1);}
601 int size = itree->GetEntries();
607 itree->SetBranchAddress(
"gps",&gps);
608 itree->SetBranchAddress(
"length",&length);
609 itree->SetBranchAddress(
"path",path);
611 double start = istart!=0 ? istart : 0;
612 double stop = istop!=0 ? istop : 2000000000;
614 sprintf(cut,
"(gps>=%f && gps<=%f)", start,stop);
616 itree->SetEstimate(size);
617 itree->Draw(
"Entry$",cut,
"goff");
618 int isel = itree->GetSelectedRows();
619 double*
entry = itree->GetV1();
621 for (
int i=0;
i<isel;
i++) {
626 frf.
file.push_back(path);
627 frlist.push_back(frf);
648 cout <<
"CWB::frame::getFrList : allowed only in READ mode" << endl;
655 if(itree==NULL) {cout <<
"CWB::frame::getFrList - Error : No tree defined !!!" << endl;
exit(1);}
657 int size = itree->GetEntries();
663 itree->SetBranchAddress(
"gps",&gps);
664 itree->SetBranchAddress(
"length",&length);
665 itree->SetBranchAddress(
"path",path);
670 sprintf(cut,
"((%f>=gps && %f<=gps+length) || (%f>=gps && %f<=gps+length) || (%f<=gps && %f>=gps+length))",
671 start,start,stop,stop,start,stop);
673 itree->SetEstimate(size);
674 itree->Draw(
"Entry$",cut,
"goff");
675 int isel = itree->GetSelectedRows();
676 double*
entry = itree->GetV1();
682 cout <<
"CWB::frame::getFrList - Error : No files matched in the range " 683 << start <<
":" << stop <<
" !!!" << endl << endl;
684 sprintf(cut,
"gps>=%f && gps<=%f",start-500,stop+500);
685 cout <<
"Dump frame segments available in the input list in the range : " << cut << endl << endl;
686 itree->SetScanField(0);
687 itree->Scan(
"Entry$:gps:length",cut,
"goff");
691 itree->GetEntry(entry[0]);
694 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
695 cout <<
"start buffer (" << start <<
") < begin gps frame (" << gps <<
")" << endl;
696 cout <<
"check input frame list" << endl << endl;
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;
708 itree->GetEntry(entry[0]);
711 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
712 cout <<
"start buffer (" << start <<
") < begin gps frame (" << gps <<
")" << endl;
713 cout <<
"check input frame list" << endl << endl;
716 itree->GetEntry(entry[isel-1]);
717 if (stop > gps+length) {
719 cout <<
"CWB::frame::getFrList - Error : " <<
" No files matched !!!" << endl;
720 cout <<
"stop buffer (" << stop <<
") > end gps frame (" << gps+length <<
")" << endl;
721 cout <<
"check input frame list" << endl << endl;
725 itree->GetEntry(entry[0]);
727 for(
int i=1;
i<isel;
i++) {
728 itree->GetEntry(entry[
i]);
730 cout <<
"CWB::frame::getFrList - Error : " <<
" Requested frames are not contiguous !!!" << endl;
731 cout <<
"start : " << gps <<
" is != from the end of the previous segment " << stop0 << endl;
738 itree->GetEntry(entry[isel-1]);
749 for (
int i=0;
i<isel;
i++) {
750 itree->GetEntry(entry[
i]);
751 frf.
file.push_back(path);
768 cout <<
"CWB::frame::getFrRange : allowed only in READ mode" << endl;
775 if(itree==NULL) {cout <<
"CWB::frame::getFrRange - No tree defined !!!" << endl;
exit(1);}
777 int size = itree->GetEntries();
781 itree->SetBranchAddress(
"gps",&gps);
782 itree->SetBranchAddress(
"length",&length);
784 double min=4000000000.;
789 if(max<gps+length) max=gps+
length;
814 cout <<
"CWB::frame::readFrame : allowed only in READ mode" << endl;
818 cout <<
"CWB::frame::readFrame : channel not defined" << endl;
849 cout <<
"CWB::frame::readFrames : allowed only in READ mode" << endl;
854 char *buffer=
new char[buffersize];
856 double rf_start, rf_stop;
864 FILE *framelist=fopen(filename,
"r");
866 fgets(buffer,buffersize,framelist);
867 nframes=(
int)atoi(buffer);
870 fprintf(stderr,
"nframes=%d\n",nframes);
874 fgets(buffer,buffersize,framelist);
875 frlen=(double)atof(buffer);
876 fgets(buffer,buffersize,framelist);
877 rf_start=(double)atof(buffer);
878 fgets(buffer,buffersize,framelist);
879 rf_stop=(double)atof(buffer);
880 fgets(buffer,buffersize,framelist);
881 rf_rate=(double)atof(buffer);
884 fprintf(stdout,
"-------------\n");
885 fprintf(stdout,
"filename=%s channel=%s nframes=%d frlen=%f start=%f stop=%f rate=%f \n",
886 filename, channel, nframes, frlen, rf_start, rf_stop, rf_rate);
892 for(
int i=0;
i<nframes;
i++) {
893 fgets(buffer,buffersize,framelist);
920 cout <<
"CWB::frame::readFrames : allowed only in READ mode" << endl;
927 double rf_start, rf_stop, fstart, fend;
931 unsigned int wcounter=0;
935 nframes=frf.
file.size();
941 bool bigFrame =
false;
943 if(
verbose) cout <<
"CWB::frame::readFrames - bigFrame !!! : " << frlen << endl;
948 for(
int i=0;
i<nframes;
i++) {
950 if(
verbose)
fprintf(stdout,
"CWB::frame::readFrames - framefile=%s channel=%s\n",frf.
file[
i].Data(),channel);
955 while(ifile==NULL&&ntry<3) {
956 ifile=FrFileINew(const_cast<char*>(frf.
file[
i].Data()));
959 cout <<
"CWB::frame::readFrames - Failed to read file - " 960 <<
"retry after " << ntry*
frRetryTime <<
" sec ..." 961 <<
"\t[" << ntry <<
"/3]" << endl;
962 if(ifile==NULL) gSystem->Sleep(1000*ntry*
frRetryTime);
966 fprintf(stderr,
"CWB::frame::readFrames - Cannot read file %s\n",frf.
file[
i].Data());
974 fprintf(stderr,
"CWB::frame::readFrames - Cannot read file %s, error=%d\n",frf.
file[
i].Data(),ifile->error);
980 fstart=(double)FrFileITStart(ifile);
981 fend=(double)FrFileITEnd(ifile);
984 if(fend0!=0 && fstart!=fend0) {
985 cout <<
"CWB::frame::readFrames - Error : " <<
" Requested frames are not contiguous !!!" << endl;
986 cout <<
"start : " << fstart <<
" is != from the end of the previous segment " << fend0 << endl;
993 if (fstart<rf_start) fstart=rf_start;
994 if (fend>rf_stop) fend=rf_stop;
997 if(
verbose) cout <<
"frlen : " << frlen << endl;
998 if (frlen<=0)
continue;
1002 v=FrFileIGetV(ifile,channel, fstart, frlen);
1005 if (bigFrame&&(v!=NULL)) {
1006 double time_offset = fstart-v->GTime;
1007 if (time_offset!=0) {
1008 fprintf(stdout,
"CWB::frame::readFrames - BigFrame Check Mismatch : v->GTime=%.8f != fstart=%.8f \n",v->GTime,fstart);
1010 v=FrFileIGetV(ifile,channel, fstart+time_offset, frlen);
1015 fprintf(stderr,
"CWB::frame::readFrames - FrFileIGetV failed: channel %s not present\n",channel);
1018 if((v->type!=FR_VECT_4R && v->type!=FR_VECT_8R)&&
1019 (v->type!=FR_VECT_2S && v->type!=FR_VECT_4S && v->type!=FR_VECT_8S)&&
1020 (v->type!=FR_VECT_2U && v->type!=FR_VECT_4U && v->type!=FR_VECT_8U)) {
1021 fprintf(stderr,
"CWB::frame::readFrames - Wrong vector type %d\n",v->type);fflush(stderr);
1026 w.
resize(
int((rf_stop-rf_start)*rf_rate));
1030 long samples=long(frlen*rf_rate);
1033 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",
1034 samples,(
int)v->nDim,v->nData,v->type,FR_VECT_8R,v->GTime, v->localTime, rf_rate, rf_step);
1035 for(
long j=0;
j<v->nDim;
j++) {
1036 fprintf(stdout,
"v->nx[%ld]=%ld v->dx[%ld]=%.8f v->startX[%ld]=%.8f\n",
1037 j,v->nx[
j],
j,v->dx[
j],
j,v->startX[
j]);
1042 if (bigFrame&&(v->GTime!=fstart)) {
fprintf(stdout,
"CWB::frame::readFrames - Error : v->GTime=%.8f != fstart=%.8f \n",v->GTime,fstart);
exit(1);}
1044 for(
long j=0;
j<samples;
j++) {
1045 rf_time=fstart+
j*rf_step;
1046 if(rf_time>=rf_start && rf_time<rf_stop) {
1047 if(wcounter<w.
size()) {
1048 if(v->type==FR_VECT_2S) w.
data[wcounter]=double(v->dataS[
j]);
1049 if(v->type==FR_VECT_4S) w.
data[wcounter]=double(v->dataI[
j]);
1050 if(v->type==FR_VECT_8S) w.
data[wcounter]=double(v->dataL[
j]);
1051 if(v->type==FR_VECT_4R) w.
data[wcounter]=double(v->dataF[
j]);
1052 if(v->type==FR_VECT_8R) w.
data[wcounter]=v->dataD[
j];
1053 if(v->type==FR_VECT_2U) w.
data[wcounter]=double(v->dataUS[
j]);
1054 if(v->type==FR_VECT_4U) w.
data[wcounter]=double(v->dataUI[
j]);
1055 if(v->type==FR_VECT_8U) w.
data[wcounter]=double(v->dataUL[
j]);
1058 fprintf(stderr,
"w overflow\n");
1067 if(
verbose)
fprintf(stdout,
"CWB::frame::readFrames - wcounter=%d w.size()=%d\n",(
int)wcounter,(
int)w.
size());
1072 fprintf(stdout,
"--------------------------------\n");
1074 fprintf(stdout,
"--------------------------------\n");
1105 cout <<
"CWB::frame::dumpFrList : allowed only in READ mode" << endl;
1109 char ofile_name[1024];
1110 sprintf(ofile_name,
"%s",ofName.Data());
1111 cout << ofile_name << endl;
1114 if (!out.good()) {cout <<
"Error Opening File : " << ofName.Data() << endl;
exit(1);}
1117 out << frf.
file.size() << endl;
1118 out << frf.
length << endl;
1119 out << frf.
start << endl;
1120 out << frf.
stop << endl;
1121 out <<
int(sRate) << endl;
1140 TObjArray* token0 = fName.Tokenize(
TString(
"."));
1141 TObjString* body_tok = (TObjString*)token0->At(0);
1142 TString body = body_tok->GetString().Data();
1146 if(token->GetEntries()<2) {
1147 cout <<
"CWB::frame::fNameCheck : File Name Format Error - " << fName.Data() << endl;
1148 cout <<
"GPS & LENGTH must be integers : xxxx-GPS-LENGTH.yyy" << endl;
1151 TObjString* gps_tok = (TObjString*)token->At(token->GetEntries()-2);
1152 TString sgps = gps_tok->GetString().Data();
1154 TObjString* length_tok = (TObjString*)token->At(token->GetEntries()-1);
1155 TString slength = length_tok->GetString().Data();
1157 if((slength.IsDigit()) && (sgps.IsDigit()))
return true;
1159 cout <<
"CWB::frame::fNameCheck : File Name Format Error - " << fName.Data() << endl;
1160 cout <<
"GPS & LENGTH must be integers : xxxx-GPS-LENGTH.yyy" << endl;
double min(double x, double y)
virtual void rate(double r)
wavearray< double > & operator>>(CWB::frame &fr, wavearray< double > &x)
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<< "\ layers : "<< nLAYERS<< "\ dF(hz) : "<< dF<< "\ 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)
TString chName
auxiliary tree used to store frame file infos
cout<< "SNR "<< xsnr<< endl;wavearray< double > f
fprintf(stdout,"start=%f duration=%f rate=%f\, x.start(), x.size()/x.rate(), x.rate())
virtual size_t size() const
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)
TString fOption
frame file pointer
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)