//--------------------------------------------------------------------- //--------------------------------------------------------------------- //--------------------------------------------------------------------- int main(int argc, char *argv[]) { extern char *optarg; int optInd = 0; char optChar = 0; static struct option optLong[] = { { "database" , 1 , 0 , 'D' }, { "path" , 1 , 0 , 'p' }, { "time" , 1 , 0 , 't' }, { "expiration" , 1 , 0 , 'x' }, { "flavor" , 1 , 0 , 'F' }, { "file" , 1 , 0 , 'f' }, { "get" , 0 , (int *)&action , GetDB }, { "read" , 0 , (int *)&action , GetDB }, { "set" , 0 , (int *)&action , SetDB }, { "write" , 0 , (int *)&action , SetDB }, { "tree" , 0 , (int *)&action , PrintTree }, { "history" , 0 , (int *)&action , PrintHistory }, { "config" , 0 , (int *)&action , PrintConfig }, { "comment" , 1 , 0 , 'c' }, { "verbose" , 0 , &verboseMode , true}, { "quiet" , 0 , &verboseMode , false}, { "dataonly" , 0 , &dataOnlyMode , true}, { "debug" , 0 , &debugMode , true}, { "help" , 0 , 0 , 'h' }, { 0, 0, 0, 0} }; // cout << indexFromString("05TB01" ) << endl; // cout << indexFromString("P05TB01") << endl; // cout << indexFromString("05P1" ,kEEmcMaxSect*kEEmcMaxBox) << endl; // cout << indexFromString("E05TB",kEEmcMaxSect*kEEmcMaxBox) << endl; // cout << indexFromString("12TB13" ) << endl; // cout << indexFromString("V12TB13") << endl; // cout << indexFromString("13TG" ,kEEmcMaxSect*kEEmcMaxBox) << endl; // cout << indexFromString("A13TG" ,kEEmcMaxSect*kEEmcMaxBox) << endl; // exit(0); // arguments and init argv0 = strrchr(argv[0],'/'); argv0 = ( argv0 == NULL ) ? argv[0] : ++argv0 ; while((optChar = getopt_long(argc,argv,"D:p:t:x:F:f:c:grswTHCdvqh",optLong,&optInd)) != EOF) { switch(optChar) { case 0 : break; case 'D' : dbName = optarg; break; case 'p' : dbPath = optarg; break; case 't' : dbTime = optarg; break; case 'x' : dbExpTime = optarg; break; case 'F' : dbFlavor = optarg; break; case 'f' : dbFile = optarg; break; case 'r' : // same as g case 'g' : action = GetDB; break; case 'w' : // same as s case 's' : action = SetDB; break; case 'T' : action = PrintTree; break; case 'H' : action = PrintHistory; break; case 'C' : action = PrintConfig; break; case 'c' : dbComment = optarg; break; case 'd' : dataOnlyMode= true; break; case 'v' : verboseMode = true; break; case 'q' : quietMode = true; break; case 'h' : usage(); return(0); break; default : usage("unknown option"); break; }; } if(!dbPath && action!=PrintConfig ) usage("database path missing"); // StDbManager *mgr = StDbManager::Instance(); StDbConfigNode *dbNode = NULL; StDbTable *dbTab = NULL; char *node = NULL; FILE *file = NULL; mgr->setVerbose(verboseMode); mgr->setQuiet(quietMode); // sanity check if( ! mgr->findDefaultServer() ) { fprintf(stderr,"cannot find the default DB server\n"); return(-1); } if(dbFile) { file = fopen(dbFile,(action==SetDB) ? "r" : "w"); if(!file) { fprintf(stderr,"%s: fopen '%s' failed, %s\n",argv0,dbFile,strerror(errno)); return(-1); } } else { file = (action==SetDB) ? stdin : stdout; } switch(action) { case PrintTree: node = node=strsep(&dbPath,"/"); if(node) { dbNode = mgr->initConfig(dbName,node); if(dbNode) { if(verboseMode || !quietMode) fprintf (file,"DATABASE TREE:\n"); fprintf (file,"%s/\n",node); if(printTree(file,dbNode)<=0) { fprintf (stderr,"config %s is empty\n",node); } } } return 0; break; case PrintConfig: if(verboseMode || !quietMode) fprintf(file,"DATABASE VERSIONS:\n"); printConfig(file,mgr); return 0; default: break; } // parse database path char *preNode=""; while( (node=strsep(&dbPath,"/")) != NULL ) { StDbConfigNode *tn = (dbNode==NULL) ? mgr->initConfig(dbName,node) : dbNode->findConfigNode(node); if(!tn) break; // assume the last token is a db table dbNode = tn; printf("found database node: %s\n",node); preNode=node; } if(!node) usage("invalid path"); dbTab = dbNode->findTable(node); if(!dbTab) { fprintf(stderr,"%s: table %s not found\n",argv0,node); return (-1); } dprintf("found table: %s\n",node); int nrows=dbTab->GetNRows(); int ndata=0; EEmcDbIOBase *dbIO = getDbIO(preNode,node,nrows); if(dbIO==NULL) return(-1); char keyLine[EEmcDbMaxDbPathLen]; //char keyFile[EEmcDbMaxKeyLength]; char keyBase[EEmcDbMaxKeyLength]; time_t tUnix = getTimeStamp(dbTimeFormat,dbTime); time_t tExpUnix = (dbExpTime!=NULL) ? getTimeStamp(dbTimeFormat,dbExpTime) : 0; dbTab->setFlavor(dbFlavor); switch(action) { case PrintHistory: printHistory(file,mgr,dbTab,dbIO); return 0; break; case SetDB: fgets (keyLine,EEmcDbMaxDbPathLen-1,file); sprintf(keyBase,EEmcDbKeyFormat,dbNode->printName(),node); printf("AAA=%s=\n",keyBase); if(strstr(keyLine,keyBase)==0 && strcmp(keyLine,keyToEverything) ) { fprintf(stderr,"signature mismatch: data file key '%s', required '%s'\n", keyLine,keyBase); return (-1); } dbIO->setComment(dbComment); ndata = dbIO->read(file); if(ndata<=0) { fprintf(stderr,"%s: reading file %s failed\n",argv0,dbFile); return(-1); } if(nrows>1) { dbTab->SetTable(dbIO->getData(),ndata, dbIO->getIndices()); } else { dbTab->SetTable(dbIO->getData(),ndata); } if(tExpUnix>0) { dbTab->setEndStoreTime(tExpUnix); fprintf(stderr,"%s: setting end time %ld\n",argv0,tExpUnix); } //mgr->setStoreTime(getTimeStamp(dbTimeFormat,dbTime)); mgr->setStoreTime(tUnix); if(! mgr->storeDbTable(dbTab) ) { fprintf(stderr,"%s: storing table %s failed\n",argv0,node); return(-1); } break; case GetDB: mgr ->setRequestTime(tUnix); if( ! mgr->fetchDbTable(dbTab) ) { fprintf(stderr,"%s: problem with fetch for time stamp %ld / %s",argv0,tUnix,ctime(&tUnix)); fprintf(stderr," There is no record for this table over the time period :\n"); fprintf(stderr," BeginDate = %s\t",dbTab->getBeginDateTime()); fprintf(stderr," EndDate = %s\n",dbTab->getEndDateTime()); fprintf(stderr," BeginTimeUnix = %d\t",dbTab->getBeginTime()); fprintf(stderr," EndTimeUnix = %d\n",dbTab->getEndTime()); return(-1); } if(! dbTab->GetTable() ) { fprintf(stderr,"no data found in table %s\n",node); return(-1); } dbIO->setData(dbTab->GetTable()); if(verboseMode || !quietMode) fprintf(stderr,"BNL Time Stamp Range from: %s to: %s \n", fmtSqlTime(dbTab->getBeginDateTime()),fmtSqlTime(dbTab->getEndDateTime())); if(!dataOnlyMode) { fprintf(file,EEmcDbKeyFormat,dbNode->printName(),node); fprintf(file,"\n"); } ndata = dbIO->write(file); dbComment = dbIO->getComment(); if(verboseMode || !quietMode) fprintf(stderr,"COMMENT: %s\n",dbComment); break; default: break; } if(ndata>0) { dprintf("database access successful %d\n",ndata); } else { fprintf(stderr,"%s: table %s access failed\n",argv0,node); } fclose(file); return 0; }
void readtofTrgWindow(const char* time = "2011-01-01 00:00:00") { const Int_t NTRAY = 120; const Int_t NVPDTRAY = 2; const Int_t NMAX = 120; const Int_t NMTD = 2; //-- load dBase and Table definition libraries gSystem->Load("St_base"); gSystem->Load("StChain"); gSystem->Load("StUtilities"); gSystem->Load("St_Tables.so"); gSystem->Load("StDbLib.so"); gSystem->Load("libStDb_Tables.so"); //-- get the singleton manager StDbManager* dbManager = StDbManager::Instance(); //-- connect to the db & get an empty container StDbConfigNode* configNode = dbManager->initConfig("Calibrations_tof"); string ZReadTime = time; dbManager->setRequestTime(ZReadTime.c_str()); //-- add table to the container with descriptor given by Database StDbTable* tofTrgWindow = configNode->addDbTable("tofTrgWindow"); dbManager->fetchDbTable(tofTrgWindow); cout << "version : " << tofTrgWindow->getVersion() <<endl; //cout << tofTrgWindow->getTableName()<<endl; cout << "begin data/time : "<< tofTrgWindow->getBeginDateTime() <<endl; cout << "end data/time : " << tofTrgWindow->getEndDateTime() <<endl; tofTrgWindow_st* trg = static_cast<tofTrgWindow_st*>(tofTrgWindow->GetTable()); if (!trg) { cout << " Oops ... no pointer to table. Exiting" << endl; erturn; } Int_t nRows = tofTrgWindow->GetNRows(); cout << " NRows = " << nRows << endl; if(nRows!=(NTRAY+NVPDTRAY+NMTD)) { cout << " NRows doesn't match !!! " << endl; } //unsigned short cutlow[NTRAY+NVPDTRAY]; //unsigned short cuthi[NTRAY+NVPDTRAY]; //for (int i=0;i<NTRAY+NVPDTRAY){ // cutlo[i]=0; // cuthi[i]=0; //} cout << "read out from database ..." << endl; ofstream outData; outData.open("TrgWindow_read.dat"); for (int i=0;i<NTRAY+NVPDTRAY+NMTD;i++){ cout << i << " " << trg[i].trgWindow_Min << " "<< trg[i].trgWindow_Max << endl; outData << i << " " << trg[i].trgWindow_Min << " "<< trg[i].trgWindow_Max << endl; } outData.close(); }