+//______________________________________________________________________________________________
+Bool_t AliShuttle::TouchFile()
+{
+ //
+ // touching a file on the grid if run has been DONE
+ //
+
+ if (!gGrid)
+ {
+ Log("SHUTTLE",Form("No TGrid connection estabilished!"));
+ Log("SHUTTLE",Form("Could not touch file for run %i",GetCurrentRun()));
+ return kFALSE;
+ }
+
+ TString dir;
+ dir.Form("%s%d/SHUTTLE_DONE", fConfig->GetAlienPath(), GetCurrentYear());
+ // checking whether directory for touch command exists
+ TString commandLs;
+ commandLs.Form("ls %s",dir.Data());
+ TGridResult *resultLs = dynamic_cast<TGridResult*>(gGrid->Command(commandLs));
+ if (!resultLs){
+ Log("SHUTTLE",Form("No result for %s command, returning without touching",commandLs.Data()));
+ return kFALSE;
+ }
+ TMap *mapLs = dynamic_cast<TMap*>(resultLs->At(0));
+ if (!mapLs){
+ Log("SHUTTLE",Form("No map for %s command, returning without touching",commandLs.Data()));
+ delete resultLs;
+ resultLs = 0x0;
+ return kFALSE;
+ }
+ TObjString *valueLsPath = dynamic_cast<TObjString*>(mapLs->GetValue("path"));
+ if (!valueLsPath || (valueLsPath->GetString()).CompareTo(dir)!=1){
+ Log("SHUTTLE",Form("No directory %s found, creating it",dir.Data()));
+
+ // creating the directory
+
+ Bool_t boolMkdir = gGrid->Mkdir(dir.Data());
+ if (!boolMkdir) {
+ Log("SHUTTLE",Form("Impossible to create dir %s in alien catalogue for run %i!",dir.Data(),GetCurrentRun()));
+ delete resultLs;
+ resultLs = 0x0;
+ return kFALSE;
+ }
+ Log("SHUTTLE",Form("Directory %s successfully created in alien catalogue for run %i",dir.Data(),GetCurrentRun()));
+ }
+ else {
+ Log("SHUTTLE",Form("Directory %s correctly found for run %i",dir.Data(),GetCurrentRun()));
+ }
+
+ delete resultLs;
+ resultLs = 0x0;
+
+ TString command;
+ command.Form("touch %s/%i", dir.Data(), GetCurrentRun());
+ Log("SHUTTLE", Form("Creating entry in file catalog: %s", command.Data()));
+ TGridResult *resultTouch = dynamic_cast<TGridResult*>(gGrid->Command(command));
+ if (!resultTouch){
+ Log("SHUTTLE",Form("No result for touching command, returning without touching for run %i",GetCurrentRun()));
+ return kFALSE;
+ }
+ TMap *mapTouch = dynamic_cast<TMap*>(resultTouch->At(0));
+ if (!mapTouch){
+ Log("SHUTTLE",Form("No map for touching command, returning without touching for run %i",GetCurrentRun()));
+ delete resultTouch;
+ resultTouch = 0x0;
+ return kFALSE;
+ }
+ TObjString *valueTouch = dynamic_cast<TObjString*>(mapTouch->GetValue("__result__"));
+ if (!valueTouch){
+ Log("SHUTTLE",Form("No value for \"__result__\" key set in the map for touching command, returning without touching for run %i",GetCurrentRun()));
+ delete resultTouch;
+ resultTouch = 0x0;
+ return kFALSE;
+ }
+ if (valueTouch->GetString()!="1"){
+ Log("SHUTTLE",Form("Failing the touching command, returning without touching for run %i",GetCurrentRun()));
+ delete resultTouch;
+ resultTouch = 0x0;
+ return kFALSE;
+ }
+ delete resultTouch;
+ resultTouch = 0x0;
+ Log("SHUTTLE", "Sucessfully touched the file");
+ return kTRUE;
+}
+//______________________________________________________________________________________________
+UInt_t AliShuttle::GetStartTimeDCSQuery()
+{
+ // Return Start Time for the DCS query
+ //
+ // The call is delegated to AliShuttleInterface
+
+ return GetCurrentStartTime()-fConfig->GetDCSQueryOffset();
+}
+//______________________________________________________________________________________________
+UInt_t AliShuttle::GetEndTimeDCSQuery()
+{
+ // Return End Time for the DCS query
+ //
+ // The call is delegated to AliShuttleInterface
+
+ return GetCurrentEndTime()+fConfig->GetDCSQueryOffset();
+}
+//______________________________________________________________________________________________
+void AliShuttle::SendMLFromDet(const char* value)
+{
+ //
+ // Sending an information coming from the current detector to ML
+ //
+
+ TMonaLisaText mlText(Form("%s_RunCondition", fCurrentDetector.Data()), value);
+
+ TList mlList;
+ mlList.Add(&mlText);
+
+ TString mlID;
+ mlID.Form("%d", GetCurrentRun());
+ fMonaLisa->SendParameters(&mlList, mlID);
+
+ return;
+}
+//______________________________________________________________________________________________
+TString* AliShuttle::GetLTUConfig(const char* det)
+{
+ //
+ // Getting ltuFineDelay1, ltuFineDelay2, ltuBCDelay for detector det from logbook_detectors table in logbook
+ //
+
+ if (!Connect(4))
+ return 0;
+
+ TString sqlQuery;
+ sqlQuery.Form("select LTUFineDelay1, LTUFineDelay2, LTUBCDelayAdd from logbook_detectors WHERE run_number = %d and detector = \"%s\";", GetCurrentRun(),det);
+
+ TSQLResult* result = fServer[4]->Query(sqlQuery);
+ if (!result){
+ Log("SHUTTLE","ERROR: No result found for the LTU configuration query");
+ return 0x0;
+ }
+ if (result->GetRowCount() == 0){
+ Log("SHUTTLE",Form("ERROR: LTU configuration not found in logbook_detectors for detector %s, returning null pointer",det));
+ delete result;
+ return 0x0;
+ }
+ if (result->GetFieldCount() != 3){
+ Log("SHUTTLE",Form("ERROR: not all the required fields are there for the LTU configuration for detector %s (only %d found), returning a null pointer",det, result->GetFieldCount()));
+ delete result;
+ return 0x0;
+ }
+ TSQLRow* row = result->Next();
+ if (!row){
+ Printf("ERROR: Could not receive logbook_detectors data, returning null pointer");
+ delete result;
+ return 0x0;
+ }
+ TString* ltuConfigString = new TString[3];
+
+ ltuConfigString[0] = row->GetField(0);
+ ltuConfigString[1] = row->GetField(1);
+ ltuConfigString[2] = row->GetField(2);
+
+ return ltuConfigString;
+
+}