6 #include "AliOnlineReconstructionUtil.h" 14 #include <TSQLResult.h> 33 ifstream configFile (GetConfigFilePath());
34 if (configFile.is_open())
38 while(configFile.good())
40 getline(configFile,line);
41 from = line.find(
"\"")+1;
42 to = line.find_last_of(
"\"");
43 if(line.find(
"HOST=")==0){
44 fHost=line.substr(from,to-from);
46 else if(line.find(
"PORT=")==0){
47 fPort=line.substr(from,to-from);
49 else if(line.find(
"DATABASE=")==0){
52 else if(line.find(
"USER=")==0){
53 fUID=line.substr(from,to-from);
55 else if(line.find(
"PASS=")==0){
58 else if(line.find(
"TABLE=")==0){
59 fTable=line.substr(from,to-from);
61 else if(line.find(
"STORAGE_PATH=")==0){
66 if(configFile.eof()){configFile.clear();}
69 else{cout <<
"DATABASE -- Unable to open file" <<endl;}
75 cout<<
"Connected"<<endl;
87 ULong64_t triggerMask,
88 ULong64_t triggerMaskNext50)
90 TSQLResult *
res =
fServer->Query(Form(
"select * FROM %s WHERE run_number = %d AND event_number = %d AND permanent = 1;",
fTable.c_str(),
runNumber,eventNumber));
91 TSQLRow *row = res->Next();
93 cout<<
"DATABASE -- insterting:"<<Form(
"REPLACE INTO %s (run_number,event_number,system,multiplicity,permanent,file_path,trigger_mask,trigger_mask_next) VALUES (%d,%d,'%s',%d,0,'%s',%llu,%llu);",
fTable.c_str(),
runNumber,eventNumber,system,multiplicity,filePath,triggerMask,triggerMaskNext50)<<endl;
97 res =
fServer->Query(Form(
"REPLACE INTO %s (run_number,event_number,system,multiplicity,permanent,file_path,trigger_mask,trigger_mask_next) VALUES (%d,%d,'%s',%d,0,'%s',%llu,%llu);",
fTable.c_str(),
runNumber,eventNumber,system,multiplicity,filePath,triggerMask,triggerMaskNext50));
107 res =
fServer->Query(Form(
"UPDATE %s SET permanent = 1 WHERE run_number = %d AND event_number = %d;",
fTable.c_str(),
event.runNumber,
event.eventNumber));
110 cout<<
"DATABASE -- couldn't update permanent flag"<<endl;
116 cout<<
"DATABASE -- permanent flag updated"<<endl;
118 res =
fServer->Query(Form(
"UPDATE %s SET file_path = '%s' WHERE run_number = %d AND event_number = %d;",
fTable.c_str(),Form(
"%s/permEvents.root",
fStoragePath.c_str()), event.runNumber,event.eventNumber));
121 cout<<
"DATABASE -- couldn't update file's path. Unsetting permanent flag"<<endl;
122 res =
fServer->Query(Form(
"UPDATE %s SET permanent = 0 WHERE run_number = %d AND event_number = %d;",
fTable.c_str(),
event.runNumber,
event.eventNumber));
128 cout<<
"DATABASE -- event marked"<<endl;
138 res =
fServer->Query(Form(
"UPDATE %s SET file_path = '%s' WHERE run_number = %d AND event_number = %d;",
fTable.c_str(),newPath,
event.runNumber,
event.eventNumber));
141 cout<<
"DATABASE -- couldn't update file's path"<<endl;
147 cout<<
"DATABASE -- path updated for event:"<<
event.eventNumber<<endl;
156 cout<<
"LIST:"<< list.runNumber[0]<<
"\t"<<list.runNumber[1]<<
"\t"<<list.eventNumber[0]<<
"\t"<<list.eventNumber[1]<<
"\t"<< list.multiplicity[0]<<
"\t"<< list.multiplicity[1]<<
"\t"<<list.marked[0]<<
"\t"<< list.marked[1]<<
"\t"<<list.system[0]<<
"\t"<<list.system[1]<<
"\t"<<list.triggerClass<<endl;
158 ULong64_t triggerMask;
159 ULong64_t triggerMaskNext50;
161 vector<serverListStruct> eventsVector;
163 if(strcmp(list.triggerClass,
"No trigger selection")!=0 && strcmp(list.triggerClass,
"")!=0)
168 settings.ReadFile(AliOnlineReconstructionUtil::GetPathToServerConf(), kEnvUser);
169 const char *cdbPath = settings.GetValue(
"cdb.defaultStorage",
"");
184 for(
int i=0;i<runs.size();i++)
186 if(runs[i] > list.runNumber[0] && runs[i] < list.runNumber[1])
189 cdbEntry = man->
Get(path);
194 triggerMaskNext50 = 0;
196 for (
int j=0;j<trarr.GetEntriesFast();j++)
199 if(strcmp(trgclass->GetName(),list.triggerClass)==0)
201 triggerMask = trgclass->
GetMask();
207 TSQLResult *result = NULL;
209 result =
fServer->Query(Form(
"SELECT * FROM %s WHERE run_number = %d AND event_number >= %d AND event_number <= %d AND multiplicity >= %d AND multiplicity <= %d AND (permanent = %d OR permanent = %d) AND (system = '%s' OR system = '%s') AND ((trigger_mask & %llu) > 0 OR (trigger_mask_next & %llu) > 0) ORDER BY run_number,event_number;",
214 list.multiplicity[0],
215 list.multiplicity[1],
223 cout<<
"Query:"<<Form(
"SELECT * FROM %s WHERE run_number = %d AND event_number >= %d AND event_number <= %d AND multiplicity >= %d AND multiplicity <= %d AND (permanent = %d OR permanent = %d) AND (system = '%s' OR system = '%s') AND ((trigger_mask & %llu) > 0 OR (trigger_mask_next & %llu) > 0) ORDER BY run_number,event_number;",
228 list.multiplicity[0],
229 list.multiplicity[1],
235 triggerMaskNext50)<<endl;
240 while((row = result->Next()))
242 serverListStruct resultList;
244 resultList.runNumber = atoi(row->GetField(0));
245 resultList.eventNumber = atoi(row->GetField(1));
246 strcpy(resultList.system, row->GetField(2));
247 resultList.multiplicity = atoi(row->GetField(3));
248 resultList.marked = atoi(row->GetField(4));
249 strcpy(resultList.triggerClass,list.triggerClass);
251 eventsVector.push_back(resultList);
262 TSQLResult *result = NULL;
264 result =
fServer->Query(Form(
"SELECT * FROM %s WHERE run_number >= %d AND run_number <= %d AND event_number >= %d AND event_number <= %d AND multiplicity >= %d AND multiplicity <= %d AND (permanent = %d OR permanent = %d) AND (system = '%s' OR system = '%s') ORDER BY run_number,event_number;",
270 list.multiplicity[0],
271 list.multiplicity[1],
277 cout<<
"Query:"<<Form(
"SELECT * FROM %s WHERE run_number >= %d AND run_number <= %d AND event_number >= %d AND event_number <= %d AND multiplicity >= %d AND multiplicity <= %d AND (permanent = %d OR permanent = %d) AND (system = '%s' OR system = '%s') ORDER BY run_number,event_number;",
283 list.multiplicity[0],
284 list.multiplicity[1],
288 list.system[1])<<endl;
293 while((row = result->Next()))
295 serverListStruct resultList;
297 resultList.runNumber = atoi(row->GetField(0));
298 resultList.eventNumber = atoi(row->GetField(1));
299 strcpy(resultList.system, row->GetField(2));
300 resultList.multiplicity = atoi(row->GetField(3));
301 resultList.marked = atoi(row->GetField(4));
302 strcpy(resultList.triggerClass,list.triggerClass);
304 eventsVector.push_back(resultList);
316 cout<<
"database - get event:"<<
event.runNumber<<
"\t"<<
event.eventNumber<<endl;
319 cout<<
"DATABASE -- path to file:"<<pathToFile<<endl;
321 if(!strcmp(pathToFile.c_str(),
""))
323 cout<<
"DATABASE -- no such file in database"<<endl;
327 TFile *tmpFile =
new TFile(pathToFile.c_str(),
"read");
330 cout<<
"DATABASE -- couldn't open temp file"<<endl;
333 tmpFile->cd(Form(
"run%d",event.runNumber));
344 cout<<
"DATABASE -- event is corrupted"<<endl;
353 res =
fServer->Query(Form(
"DELETE FROM %s WHERE run_number = %d AND event_number = %d",
fTable.c_str(),
event.runNumber,
event.eventNumber));
359 TSQLResult *
res =
fServer->Query(Form(
"DELETE FROM %s WHERE file_path = \"%s\";",
fTable.c_str(),path.c_str()));
365 TSQLResult *result =
fServer->Query(Form(
"SELECT * FROM %s WHERE run_number = %d AND event_number = %d;",
fTable.c_str(),
event.runNumber,
event.eventNumber));
367 row = result->Next();
370 string path(row->GetField(5));
382 vector<int> resultingVector;
384 TSQLResult *result =
fServer->Query(Form(
"SELECT run_number FROM %s ORDER BY run_number;",
fTable.c_str()));
387 int currentRun,prevRun=-1;
389 while((row=result->Next()))
391 currentRun = atoi(row->GetField(0));
392 if(currentRun!=prevRun)
394 resultingVector.push_back(currentRun);
399 return resultingVector;
404 cout<<
"Database:"<<
event.runNumber<<
"\t"<<
event.eventNumber<<endl;
406 TSQLResult *result =
fServer->Query(Form(
"SELECT * FROM %s ORDER BY run_number,event_number;",
fTable.c_str()));
409 bool isCurrentEvent=
false;
410 struct eventStruct nextEvent;
412 while((row = result->Next()))
416 nextEvent.runNumber = atoi(row->GetField(0));
417 nextEvent.eventNumber = atoi(row->GetField(1));
422 if(atoi(row->GetField(0))==event.runNumber && atoi(row->GetField(1))==event.eventNumber)
435 TSQLResult *result =
fServer->Query(Form(
"SELECT * FROM %s ORDER BY run_number,event_number DESC;",
fTable.c_str()));
438 bool isCurrentEvent=
false;
439 struct eventStruct nextEvent;
441 while((row = result->Next()))
445 nextEvent.runNumber = atoi(row->GetField(0));
446 nextEvent.eventNumber = atoi(row->GetField(1));
451 if(atoi(row->GetField(0))==event.runNumber && atoi(row->GetField(1))==event.eventNumber)
464 TSQLResult *result =
fServer->Query(Form(
"SELECT * FROM %s WHERE permanent = 0 ORDER BY run_number,event_number;",
fTable.c_str()));
467 struct eventStruct oldestEvent(0,0);
469 if((row = result->Next()))
471 oldestEvent.runNumber = atoi(row->GetField(0));
472 oldestEvent.eventNumber = atoi(row->GetField(1));
477 cout<<
"DATABASE -- NO OLDEST EVENT FOUND. Storage may be corrupted."<<endl;
484 TSQLResult *result =
fServer->Query(Form(
"SELECT * FROM %s ORDER BY run_number,event_number;",
fTable.c_str()));
487 struct eventStruct lastEvent(0,0);
489 while((row = result->Next()))
491 lastEvent.runNumber = atoi(row->GetField(0));
492 lastEvent.eventNumber = atoi(row->GetField(1));
495 cout<<
"Last event is:"<<lastEvent.eventNumber<<endl;
502 cout<<
"Database - first"<<endl;
503 TSQLResult *result =
fServer->Query(Form(
"SELECT * FROM %s ORDER BY run_number,event_number DESC;",
fTable.c_str()));
506 struct eventStruct firstEvent(0,0);
508 while((row = result->Next()))
510 firstEvent.runNumber = atoi(row->GetField(0));
511 firstEvent.eventNumber = atoi(row->GetField(1));
514 cout<<
"First event is:"<<firstEvent.eventNumber<<endl;
const TObjArray & GetClasses() const
bool MarkEvent(struct eventStruct event)
ULong64_t GetMask() const
void InsertEvent(int runNumber, int eventNumber, char *system, int multiplicity, char *filePath, ULong64_t triggerMask, ULong64_t triggerMaskNext50)
AliESDEvent * GetFirstEvent()
AliCDBEntry * Get(const AliCDBId &query, Bool_t forceCaching=kFALSE)
AliESDEvent * GetLastEvent()
void RemoveEvent(struct eventStruct event)
std::vector< RunInfo > runs
std::vector< int > GetListOfRuns()
void SetDefaultStorage(const char *dbString)
AliESDEvent * GetNextEvent(struct eventStruct event)
struct eventStruct GetOldestEvent()
bool UpdateEventPath(struct eventStruct event, const char *newPath)
ULong64_t GetMaskNext50() const
std::vector< serverListStruct > GetList(struct listRequestStruct listStruct)
Int_t GetEventNumberInFile() const
AliESDEvent * GetEvent(struct eventStruct event)
static AliCDBManager * Instance(TMap *entryCache=NULL, Int_t run=-1)
std::string GetFilePath(struct eventStruct event)
void RemoveEventsWithPath(std::string path)
AliESDEvent * GetPrevEvent(struct eventStruct event)