]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - SHUTTLE/AliShuttle.cxx
Switch on QA, as it seems it is not run by default anymore
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttle.cxx
index 01105fba76b7885c06c79943338087b9f8180804..d6db2a5d0781adbe60e4970b91cb212edd1e8085 100644 (file)
@@ -57,6 +57,7 @@
 #include <TFile.h>
 #include <TGrid.h>
 #include <TGridResult.h>
+#include <TMap.h>
 
 #include <TMonaLisaWriter.h>
 
@@ -615,8 +616,8 @@ Bool_t AliShuttle::StoreRunMetadataFile(const char* localFile, const char* gridF
                                lhcPeriod.Data()));
        }
                
-       TString target = Form("%s/GRP/RunMetadata/alice/data/%d/%s/%09d/raw/%s", 
-                               localBaseFolder.Data(), GetCurrentYear(), 
+       TString target = Form("%s/GRP/RunMetadata%s%d/%s/%09d/raw/%s", 
+                               localBaseFolder.Data(), fConfig->GetAlienPath(), GetCurrentYear(), 
                                lhcPeriod.Data(), GetCurrentRun(), gridFileName);
                                        
        return CopyFileLocally(localFile, target);
@@ -735,10 +736,10 @@ Bool_t AliShuttle::CopyFilesToGrid(const char* type)
                        lhcPeriod.Append(Form("_%s", partition.Data()));
                }
                
-               dir = Form("%s/GRP/RunMetadata/alice/data/%d/%s/%09d/raw", 
-                               localBaseFolder.Data(), GetCurrentYear(), 
+               dir = Form("%s/GRP/RunMetadata%s%d/%s/%09d/raw", 
+                               localBaseFolder.Data(), fConfig->GetAlienPath(), GetCurrentYear(), 
                                lhcPeriod.Data(), GetCurrentRun());
-               alienDir = dir(dir.Index("/alice/data/"), dir.Length());
+               alienDir = dir(dir.Index(fConfig->GetAlienPath()), dir.Length());
                
                begin = "";
        }
@@ -981,7 +982,7 @@ Bool_t AliShuttle::WriteShuttleStatus(AliShuttleStatus* status)
                return kFALSE;
        }
        
-       SendMLInfo();
+       SendMLDetInfo();
 
        return kTRUE;
 }
@@ -1017,11 +1018,11 @@ void AliShuttle::UpdateShuttleStatus(AliShuttleStatus::Status newStatus, Bool_t
 
        AliCDBManager::Instance()->GetStorage(fgkLocalCDB)->Put(fStatusEntry);
 
-       SendMLInfo();
+       SendMLDetInfo();
 }
 
 //______________________________________________________________________________________________
-void AliShuttle::SendMLInfo()
+void AliShuttle::SendMLDetInfo()
 {
        //
        // sends ML information about the current status of the current detector being processed
@@ -1030,7 +1031,7 @@ void AliShuttle::SendMLInfo()
        AliShuttleStatus* status = dynamic_cast<AliShuttleStatus*> (fStatusEntry->GetObject());
        
        if (!status){
-               Log("SHUTTLE", "SendMLInfo - UNEXPECTED: status could not be read from current CDB entry");
+               Log("SHUTTLE", "SendMLDetInfo - UNEXPECTED: status could not be read from current CDB entry");
                return;
        }
        
@@ -1179,6 +1180,31 @@ Bool_t AliShuttle::ContinueProcessing()
        return cont;
 }
 
+//______________________________________________________________________________________________
+void AliShuttle::SendMLRunInfo(const char* status)
+{
+       // 
+       // Send information about this run to ML
+       
+       TMonaLisaText  mlStatus("SHUTTLE_status", status);
+       TString runType(fLogbookEntry->GetRunType());
+       if (strlen(fLogbookEntry->GetRunParameter("log")) > 0){
+
+               runType += "(";
+               runType += fLogbookEntry->GetRunParameter("log");
+               runType += ")";
+       }
+       TMonaLisaText  mlRunType("SHUTTLE_runtype", runType);
+
+       TList mlList;
+       mlList.Add(&mlStatus);
+       mlList.Add(&mlRunType);
+
+       TString mlID;
+       mlID.Form("%d", GetCurrentRun());
+       fMonaLisa->SendParameters(&mlList, mlID);       
+}
+
 //______________________________________________________________________________________________
 Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
 {
@@ -1196,26 +1222,10 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
        Log("SHUTTLE", Form("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^* run %d: START ^*^*^*^*^*^*^*^*^*^*^*^*",
                                        GetCurrentRun()));
 
-       // Send the information to ML
        CountOpenRuns();
        
-       TMonaLisaText  mlStatus("SHUTTLE_status", "Processing");
-       TString runType(entry->GetRunType());
-       if (strlen(entry->GetRunParameter("log")) > 0){
-
-               runType += "(";
-               runType += entry->GetRunParameter("log");
-               runType += ")";
-       }
-       TMonaLisaText  mlRunType("SHUTTLE_runtype", runType);
-
-       TList mlList;
-       mlList.Add(&mlStatus);
-       mlList.Add(&mlRunType);
-
-       TString mlID;
-       mlID.Form("%d", GetCurrentRun());
-       fMonaLisa->SendParameters(&mlList, mlID);
+       // Send the information to ML
+       SendMLRunInfo("Processing");
 
        if (fLogbookEntry->IsDone())
        {
@@ -1271,13 +1281,12 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                return 0; 
        }       
        
-       if (fgkMainCDB.Length() == 0)
-               fgkMainCDB = Form("alien://folder=/alice/data/%d/%s/OCDB?user=alidaq?cacheFold=/tmp/OCDBCache", 
-                                       GetCurrentYear(), lhcPeriod.Data());
+       // build cdb paths (repeat each time, LHCperiod might have changed)
+       fgkMainCDB.Form("alien://folder=%s%d/%s/OCDB?user=alidaq?cacheFold=/tmp/OCDBCache", 
+                                       fConfig->GetAlienPath(), GetCurrentYear(), lhcPeriod.Data());
        
-       if (fgkMainRefStorage.Length() == 0)
-               fgkMainRefStorage = Form("alien://folder=/alice/data/%d/%s/Reference?user=alidaq?cacheFold=/tmp/OCDBCache", 
-                                       GetCurrentYear(), lhcPeriod.Data());
+       fgkMainRefStorage.Form("alien://folder=%s%d/%s/Reference?user=alidaq?cacheFold=/tmp/OCDBCache", 
+                                       fConfig->GetAlienPath(), GetCurrentYear(), lhcPeriod.Data());
        
        // Loop on detectors in the configuration
        TIter iter(fConfig->GetDetectors());
@@ -1339,7 +1348,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
 
                                        kill(pid, 9);
 
-                                       UpdateShuttleStatus(AliShuttleStatus::kPPTimeOut);
+                                       UpdateShuttleStatus(AliShuttleStatus::kPPTimeOut);
                                        hasError = kTRUE;
 
                                        gSystem->Sleep(1000);
@@ -1418,8 +1427,8 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                }
                else if (pid == 0)
                {
-                       // client
-                       Log("SHUTTLE", Form("Process - In client process of %d - %s", GetCurrentRun(),
+                       // child
+                       Log("SHUTTLE", Form("Process - In child process of %d - %s", GetCurrentRun(),
                                aDetector->GetName()));
 
                        Log("SHUTTLE", Form("Process - Redirecting output to %s log",fCurrentDetector.Data()));
@@ -1461,7 +1470,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                        }
                        
                        Int_t success = ProcessCurrentDetector();
-                       
+
                        gSystem->ChangeDirectory(wd.Data());
                                                
                        if (success == 1) // Preprocessor finished successfully!
@@ -1541,10 +1550,7 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                                        fFirstUnprocessed[iDet] = kFALSE;
                                }
                        }
-                       TMonaLisaText  mlStatusPending("SHUTTLE_status", "Pending");
-                       mlList.Clear();
-                       mlList.Add(&mlStatusPending);
-                       fMonaLisa->SendParameters(&mlList, mlID);
+                       SendMLRunInfo("Pending");
                }
        }
 
@@ -1626,7 +1632,7 @@ Int_t AliShuttle::ProcessCurrentDetector()
                        
                        TMap* aliasMap = 0;
                        TMap* dpMap = 0;
-       
+
                        if (fConfig->GetDCSAliases(fCurrentDetector, iServ)->GetEntries() > 0)
                        {
                                aliasMap = GetValueSet(host, port, 
@@ -1895,121 +1901,51 @@ AliShuttleLogbookEntry* AliShuttle::QueryRunParameters(Int_t run)
        for (Int_t ii = 0; ii < aResult->GetFieldCount(); ii++)
                entry->SetRunParameter(aResult->GetFieldName(ii), aRow->GetField(ii));
 
+       delete aRow;
+       delete aResult;
+       
        UInt_t startTime = entry->GetStartTime();
        UInt_t endTime = entry->GetEndTime();
+       Bool_t ecsSuccess = entry->GetECSSuccess();
+       
+       TString totEventsStr = entry->GetRunParameter("totalEvents");  
+       Int_t totEvents = totEventsStr.Atoi();
+       
+       // runs are accepted if they have ecsSuccess set or more than 1 event
+       if (startTime != 0 && endTime != 0 && endTime > startTime && (totEvents > 1 || ecsSuccess))
+       {
+               if (ecsSuccess == kFALSE)
+                       Log("SHUTTLE", Form("Processing run %d although in status ECS failure, Reason: %s", run, entry->GetRunParameter("eor_reason")));
+               return entry;
+       }
 
-       // the conditions under which runs are marked as done and not processed are not clear currently
-       // for the moment no runs are marked as done
-//     if (!startTime || !endTime || startTime > endTime) 
-//     {
-//             Log("SHUTTLE",
-//                     Form("QueryRunParameters - Invalid parameters for Run %d: startTime = %d, endTime = %d. Skipping!",
-//                             run, startTime, endTime));              
-//             
-//             Log("SHUTTLE", Form("Marking SHUTTLE done for run %d", run));
-//             fLogbookEntry = entry;  
-//             if (!UpdateShuttleLogbook("shuttle_done"))
-//             {
-//                     AliError(Form("Could not update logbook for run %d !", run));
-//             }
-//             fLogbookEntry = 0;
-//                             
-//             delete entry;
-//             delete aRow;
-//             delete aResult;
-//             return 0;
-//     }
-
-//     if (!startTime) 
-//     {
-//             Log("SHUTTLE",
-//                     Form("QueryRunParameters - Invalid parameters for Run %d: " 
-//                             "startTime = %d, endTime = %d. Skipping!",
-//                                     run, startTime, endTime));              
-//             
-//             Log("SHUTTLE", Form("Marking SHUTTLE done for run %d", run));
-//             fLogbookEntry = entry;  
-//             if (!UpdateShuttleLogbook("shuttle_ignored"))
-//             {
-//                     AliError(Form("Could not update logbook for run %d !", run));
-//             }
-//             fLogbookEntry = 0;
-//                             
-//             delete entry;
-//             delete aRow;
-//             delete aResult;
-//             return 0;
-//     }
-       
-       if (startTime && !endTime) 
-       {
-               // TODO Here we don't mark SHUTTLE done, because this may mean 
-               //the run is still ongoing!!            
-               Log("SHUTTLE",
-                       Form("QueryRunParameters - Invalid parameters for Run %d: "
-                            "startTime = %d, endTime = %d. Skipping (Shuttle won't be marked as DONE)!",
-                                       run, startTime, endTime));              
-               
-               //Log("SHUTTLE", Form("Marking SHUTTLE done for run %d", run));
-               //fLogbookEntry = entry;        
-               //if (!UpdateShuttleLogbook("shuttle_done"))
-               //{
-               //      AliError(Form("Could not update logbook for run %d !", run));
-               //}
-               //fLogbookEntry = 0;
+       Bool_t skip = kFALSE;
                                
-               delete entry;
-               delete aRow;
-               delete aResult;
-               return 0;
-       }
-                       
-       if (startTime && endTime && (startTime > endTime)) 
+       if (totEvents <= 1) 
        {
-               Log("SHUTTLE",
-                       Form("QueryRunParameters - Invalid parameters for Run %d: "
-                               "startTime = %d, endTime = %d. Skipping!",
-                                       run, startTime, endTime));              
-               
-               Log("SHUTTLE", Form("Marking SHUTTLE done for run %d", run));
-               fLogbookEntry = entry;  
-               if (!UpdateShuttleLogbook("shuttle_ignored"))
-               {
-                       AliError(Form("Could not update logbook for run %d !", run));
-               }
-               fLogbookEntry = 0;
-                               
-               delete entry;
-               delete aRow;
-               delete aResult;
-               return 0;
+               Log("SHUTTLE", Form("QueryRunParameters - Run %d has 1 event or less - Skipping!", run));
+               skip = kTRUE;
+       } 
+       else
+       {
+               Log("SHUTTLE", Form("QueryRunParameters - Invalid parameters for Run %d: "
+                       "startTime = %d, endTime = %d. Skipping (Shuttle won't be marked as DONE)!",
+                       run, startTime, endTime));
        }
-                       
-       TString totEventsStr = entry->GetRunParameter("totalEvents");  
-       Int_t totEvents = totEventsStr.Atoi();
-       if (totEvents < 1) 
+       
+       if (skip)
        {
-               Log("SHUTTLE",
-                       Form("QueryRunParameters - Run %d has 0 events - Skipping!", run));             
-               
-               Log("SHUTTLE", Form("Marking SHUTTLE done for run %d", run));           
-               fLogbookEntry = entry;  
-               if (!UpdateShuttleLogbook("shuttle_ignored"))
+               Log("SHUTTLE", Form("Marking SHUTTLE skipped for run %d", run));
+               fLogbookEntry = entry;
+               if (!UpdateShuttleLogbook("shuttle_skipped"))
                {
                        AliError(Form("Could not update logbook for run %d !", run));
                }
                fLogbookEntry = 0;
-                               
-               delete entry;
-               delete aRow;
-               delete aResult;
-               return 0;
        }
-
-       delete aRow;
-       delete aResult;
-
-       return entry;
+                       
+       delete entry;
+       return 0;
 }
 
 //______________________________________________________________________________________________
@@ -2663,23 +2599,21 @@ Bool_t AliShuttle::UpdateShuttleLogbook(const char* detector, const char* status
 
        TString detName(detector);
        TString setClause;
-       if (detName == "shuttle_done" || detName == "shuttle_ignored")
+       if (detName == "shuttle_done" || detName == "shuttle_skipped")
        {
                setClause = "set shuttle_done=1";
-
+               
                if (detName == "shuttle_done")
                {
-                       // Send the information to ML
-                       TMonaLisaText  mlStatus("SHUTTLE_status", "Done");
-
-                       TList mlList;
-                       mlList.Add(&mlStatus);
-               
-                       TString mlID;
-                       mlID.Form("%d", GetCurrentRun());
-                       fMonaLisa->SendParameters(&mlList, mlID);
+                       if (TouchFile() != kTRUE)
+                               return kFALSE;
+                       
+                       SendMLRunInfo("Done");
                }
-       } else {
+               else 
+                       SendMLRunInfo("Skipped");
+       } 
+       else {
                TString statusStr(status);
                if(statusStr.Contains("done", TString::kIgnoreCase) ||
                   statusStr.Contains("failed", TString::kIgnoreCase)){
@@ -2791,7 +2725,7 @@ void AliShuttle::Log(const char* detector, const char* message)
                gSystem->FreeDirectory(dir);
        }
 
-       TString toLog = Form("%s (%d): %s - ", TTimeStamp(time(0)).AsString("s"), getpid(), detector);
+       TString toLog = Form("%s UTC (%d): %s - ", TTimeStamp(time(0)).AsString("s"), getpid(), detector);
        if (GetCurrentRun() >= 0) 
                toLog += Form("run %d - ", GetCurrentRun());
        toLog += Form("%s", message);
@@ -2904,9 +2838,9 @@ Bool_t AliShuttle::Collect(Int_t run)
        {
                // query Shuttle logbook for earlier runs, check if some detectors are unprocessed,
                // flag them into fFirstUnprocessed array
-               TString whereClause(Form("where shuttle_done=0 and run < %d", run));
+               TString whereClauseBis(Form("where shuttle_done=0 and run < %d", run));
                TObjArray tmpLogbookEntries;
-               if (!QueryShuttleLogbook(whereClause, tmpLogbookEntries))
+               if (!QueryShuttleLogbook(whereClauseBis, tmpLogbookEntries))
                {
                        Log("SHUTTLE", "Collect - Can't retrieve entries from Shuttle logbook");
                        return kFALSE;
@@ -3074,6 +3008,10 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
                return kTRUE;
        }
 
+       Int_t runMode = (Int_t)fConfig->GetRunMode();
+       TString tmpStr;
+       if (runMode == 0) tmpStr = " Nightly Test:";
+       else tmpStr = " Data Taking:"; 
        void* dir = gSystem->OpenDirectory(GetShuttleLogDir());
        if (dir == NULL)
        {
@@ -3089,22 +3027,31 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
 
        // det experts in to
        TString to="";
-       TIter *iterExperts;
+       TIter *iterExperts = 0;
        if (target == kDCSEMail) {
                iterExperts = new TIter(fConfig->GetAdmins(AliShuttleConfig::kAmanda));
        }
        else if (target == kFXSEMail) {
                iterExperts = new TIter(fConfig->GetAdmins(system));
        }
-       else {
-               iterExperts = new TIter(fConfig->GetResponsibles(fCurrentDetector));
+       if (iterExperts) {
+               TObjString *anExpert=0;
+               while ((anExpert = (TObjString*) iterExperts->Next()))
+               {
+                       to += Form("%s,", anExpert->GetName());
+               }
+               delete iterExperts;
        }
+
+       // add subdetector experts      
+       iterExperts = new TIter(fConfig->GetResponsibles(fCurrentDetector));
        TObjString *anExpert=0;
        while ((anExpert = (TObjString*) iterExperts->Next()))
        {
                to += Form("%s,", anExpert->GetName());
        }
        delete iterExperts;
+       
        if (to.Length() > 0)
          to.Remove(to.Length()-1);
        AliDebug(2, Form("to: %s",to.Data()));
@@ -3145,8 +3092,8 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
        TString body;
 
        if (target == kDCSEMail){
-               subject = Form("Retrieval of data points for %s FAILED in run %d !",
-                               fCurrentDetector.Data(), GetCurrentRun());
+               subject = Form("%s Retrieval of data points for %s FAILED in run %d !",
+                               tmpStr.Data(), fCurrentDetector.Data(), GetCurrentRun());
                AliDebug(2, Form("subject: %s", subject.Data()));
                
                body = Form("Dear DCS experts, \n\n");
@@ -3154,8 +3101,8 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
                             "in run %d!!\n\n", fCurrentDetector.Data(), GetCurrentRun());
        }
        else if (target == kFXSEMail){
-               subject = Form("FXS communication for %s FAILED in run %d !",
-                               fCurrentDetector.Data(), GetCurrentRun());
+               subject = Form("%s FXS communication for %s FAILED in run %d !",
+                               tmpStr.Data(), fCurrentDetector.Data(), GetCurrentRun());
                AliDebug(2, Form("subject: %s", subject.Data()));
                TString sys;
                if (system == kDAQ) sys="DAQ";
@@ -3167,8 +3114,8 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
                             "in run %d!!\n\n", fCurrentDetector.Data(), GetCurrentRun());
        }
        else {
-               subject = Form("%s Shuttle preprocessor FAILED in run %d (run type = %s)!",
-                                      fCurrentDetector.Data(), GetCurrentRun(), GetRunType());
+               subject = Form("%s %s Shuttle preprocessor FAILED in run %d (run type = %s)!",
+                                      tmpStr.Data(), fCurrentDetector.Data(), GetCurrentRun(), GetRunType());
                AliDebug(2, Form("subject: %s", subject.Data()));
        
                body = Form("Dear %s expert(s), \n\n", fCurrentDetector.Data());
@@ -3181,9 +3128,9 @@ Bool_t AliShuttle::SendMail(EMailTarget target, Int_t system)
                                fCurrentDetector.Data());
        if (fConfig->GetRunMode() == AliShuttleConfig::kTest)
        {
-               body += Form("\thttp://pcalimonitor.cern.ch:8889/shuttle.jsp?time=168 \n\n");
+               body += Form("\thttp://pcalimonitor.cern.ch/shuttle.jsp?time=24 \n\n");
        } else {
-               body += Form("\thttp://pcalimonitor.cern.ch/shuttle.jsp?instance=PROD&time=168 \n\n");
+               body += Form("\thttp://pcalimonitor.cern.ch/shuttle.jsp?instance=PROD&time=24 \n\n");
        }
        
        
@@ -3263,7 +3210,7 @@ Bool_t AliShuttle::GetHLTStatus()
        }
 
        // TODO implement when HLTMode is inserted in run logbook
-       TString hltMode = fLogbookEntry->GetRunParameter("HLTMode");
+       TString hltMode = fLogbookEntry->GetRunParameter("HLTmode");
        TSubString firstChar = hltMode(0,1);
        AliDebug(2,Form("First char = %s ",firstChar.Data())); 
        if (firstChar == "A") {
@@ -3277,6 +3224,54 @@ Bool_t AliShuttle::GetHLTStatus()
                return kFALSE;
        }
 }
+
+//______________________________________________________________________________________________
+const char* AliShuttle::GetTriggerConfiguration()
+{
+       // Receives the trigger configuration from the DAQ logbook for the current run
+       
+       // check connection, if needed reconnect
+       if (!Connect(3)) 
+               return 0;
+
+       TString sqlQuery;
+       sqlQuery.Form("SELECT configFile FROM logbook_trigger_config WHERE run = %d", GetCurrentRun());
+       TSQLResult* result = fServer[3]->Query(sqlQuery);
+       if (!result)
+       {
+               Log("SHUTTLE", Form("ERROR: Can't execute query <%s>!", sqlQuery.Data()));
+               return 0;
+       }
+       
+       if (result->GetRowCount() == 0)
+       {
+               Log("SHUTTLE", "ERROR: Trigger configuration not found in logbook_trigger_config");
+               delete result;
+               return 0;
+       }
+       
+       TSQLRow* row = result->Next();
+       if (!row)
+       {
+               Log("SHUTTLE", "ERROR: Could not receive logbook_trigger_config data");
+               delete result;
+               return 0;
+       }
+
+       // static, so that pointer remains valid when it is returned to the calling class       
+       static TString triggerConfig(row->GetField(0));
+       
+       delete row;
+       row = 0;
+       
+       delete result;
+       result = 0;
+       
+       Log("SHUTTLE", Form("Found trigger configuration: %s", triggerConfig.Data()));
+       
+       return triggerConfig;
+}
+
 //______________________________________________________________________________________________
 void AliShuttle::SetShuttleTempDir(const char* tmpDir)
 {
@@ -3296,3 +3291,90 @@ void AliShuttle::SetShuttleLogDir(const char* logDir)
 
        fgkShuttleLogDir = gSystem->ExpandPathName(logDir);
 }
+//______________________________________________________________________________________________
+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/%s/SHUTTLE_DONE", fConfig->GetAlienPath(), GetCurrentYear(), GetLHCPeriod());
+       // 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 || (TString)(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; 
+       return kTRUE;
+}
+
+