ROOT logo
#ifndef __CINT__
#include <Riostream.h>
#include <TGrid.h>
#include <TGridResult.h>
#endif
void RsnGridPlugin(TString analysisMode) {

   Bool_t valid = kTRUE;
   TString dsConfig = AliAnalysisManager::GetGlobalStr("rsnTrainDSConfig",valid);
   Int_t globalTrainID = AliAnalysisManager::GetGlobalInt("rsnGlobalTrainID",valid);

   Int_t numRuns = AliAnalysisManager::GetGlobalInt("rsnGridNumRuns",valid);
   Int_t numRunsSkip = AliAnalysisManager::GetGlobalInt("rsnGridNumRunsSkip",valid);

   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   if (!mgr) {
      Printf("Error[RsnGridPlugin] mgr is null !!!");
      return;
   }

   AliAnalysisAlien *plugin = (AliAnalysisAlien *) mgr->GetGridHandler();
   if (!plugin) {
      Printf("Error[RsnGridPlugin] : plugin is null !!!");
      return;
   }

   // getting latest train id
   TString rsnTrainName = gSystem->BaseName(dsConfig.Data());
   rsnTrainName.ReplaceAll(".txt","");
   rsnTrainName.Append(TString::Format("/%03d/%d_%d",globalTrainID,numRunsSkip,numRuns).Data());

   if (!gGrid) TGrid::Connect("alien://");
   if (!gGrid) return;
   TGridResult *r = gGrid->Query(TString::Format("%s/RsnTrain/%s",gGrid->GetHomeDirectory(),rsnTrainName.Data()).Data(),"*/analysis.root");
   Int_t idRsnTrain = 0;
   if (r) {
      TString s = r->GetKey(r->GetSize()-1,"lfn");
      s.ReplaceAll("/analysis.root","");
      s = gSystem->BaseName(s);
      if (!s.IsNull()) idRsnTrain = s.Atoi();
      if (!analysisMode.CompareTo("full")) idRsnTrain++;
   }
   rsnTrainName.Append(Form("/%03d",idRsnTrain));

   TString rsnTrainWkDir = TString::Format("RsnTrain/%s",rsnTrainName.Data()).Data();
   Info("RsnGridPlugin()",TString::Format("RSN Train directory : %s%s",gGrid->GetHomeDirectory(),rsnTrainWkDir.Data()).Data());

   plugin->SetGridWorkingDir(rsnTrainWkDir.Data());
   plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output

   plugin->SetAPIVersion("V1.1x");

   TString rootver = AliAnalysisManager::GetGlobalStr("rsnLegoTrainROOTversion",valid);
   plugin->SetROOTVersion(rootver.Data());

   TString alirootVersion = AliAnalysisManager::GetGlobalStr("rsnLegoTrainAliROOTversion",valid);
   if (alirootVersion.IsNull()) {
      if (gSystem->Getenv("ALICE_ROOT")) alirootVersion = gSystem->GetFromPipe("aliroot --version | awk '{print $3}'");
   }
   plugin->SetAliROOTVersion(alirootVersion.Data());

   plugin->SetExecutableCommand("aliroot -b -q");

   plugin->SetAnalysisMacro("RsnTrain.C");
   plugin->SetMasterResubmitThreshold(90);
   plugin->SetTTL(84600);
   plugin->SetInputFormat("xml-single");
   plugin->SetJDLName("RsnTrain.jdl");
   plugin->SetPrice(1);
   plugin->SetSplitMode("se");
   plugin->SetNtestFiles(2);
   plugin->SetMergeViaJDL();
   plugin->SetOverwriteMode(kFALSE);
   //    plugin->SetKeepLogs(kTRUE);

   RsnSetData(plugin,dsConfig,numRuns,numRunsSkip,1000);

   plugin->SetSplitMaxInputFileNumber(25);

   //   Fatal("RsnDataSet","No dataset found !!!");
}

void RsnSetData(AliAnalysisAlien *plugin,TString dsConf,Int_t numRuns = 1000,Int_t numRunsSkip=0,Int_t maxRunsPerMaster = 1000) {

   Bool_t dsFound = kTRUE;
   Int_t nRunsPerMaster = 0;

   Bool_t valid = kTRUE;
   TString legoTrainPath = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);

   if (gSystem->AccessPathName(dsConf.Data())) dsConf.Prepend(Form("%s/",legoTrainPath.Data()));
   dsConf = gSystem->ExpandPathName(dsConf.Data());

   if (dsConf.Contains(".txt")) {
      ifstream in;
      in.open(dsConf.Data());
      if (!in.is_open()) Fatal("RsnSetData",Form("File %s was not found !!!",dsConf.Data()));
      Printf("DS config file : %s",dsConf.Data());
      TString line;
      Bool_t isRun = kFALSE;
      while (in.good())
      {
         in >> line;
         if (line.IsNull()) continue;
         if (line.Contains("BASE")) {
            GetParameterFromConfig(line);
            plugin->SetGridDataDir(line.Data());
            Printf("BASE -> %s",line.Data());
            continue;
         }
         if (line.Contains("PREFIX")) {
            GetParameterFromConfig(line);
            plugin->SetRunPrefix(line.Data());
            Printf("PREFIX -> %s",line.Data());
            continue;
         }
         if (line.Contains("DATA_PATTERN")) {
            GetParameterFromConfig(line);
            plugin->SetDataPattern(line.Data());
            Printf("DATA_PATTERN -> %s",line.Data());
            continue;
         }
         if (!line.CompareTo("RUNS")) {
            isRun = kTRUE;
            in >> line;
         }
         if (isRun) {
            if (numRunsSkip>0) {
               numRunsSkip--;
               continue;
            } else {
               if (nRunsPerMaster < numRuns ) {
                  Printf("Adding RUN : %s",line.Data());
                  plugin->AddRunNumber(line.Data());
                  nRunsPerMaster++;
               } else {
                  break;
               }

            }
         }
      }
   } else {
      plugin->SetGridDataDir("");
      plugin->SetDataPattern("");
      Fatal("RsnDataSet","No dataset found !!!");
   }

   if (nRunsPerMaster > maxRunsPerMaster) nRunsPerMaster = maxRunsPerMaster;
   plugin->SetNrunsPerMaster(nRunsPerMaster);

}

void GetParameterFromConfig(TString &str,TString token="=") {
   TObjArray *array = str.Tokenize(token.Data());
   TObjString *strObj = (TObjString *)array->At(1);
   if (strObj) str = strObj->GetString();
   else str = "";
}

 RsnGridPlugin.C:1
 RsnGridPlugin.C:2
 RsnGridPlugin.C:3
 RsnGridPlugin.C:4
 RsnGridPlugin.C:5
 RsnGridPlugin.C:6
 RsnGridPlugin.C:7
 RsnGridPlugin.C:8
 RsnGridPlugin.C:9
 RsnGridPlugin.C:10
 RsnGridPlugin.C:11
 RsnGridPlugin.C:12
 RsnGridPlugin.C:13
 RsnGridPlugin.C:14
 RsnGridPlugin.C:15
 RsnGridPlugin.C:16
 RsnGridPlugin.C:17
 RsnGridPlugin.C:18
 RsnGridPlugin.C:19
 RsnGridPlugin.C:20
 RsnGridPlugin.C:21
 RsnGridPlugin.C:22
 RsnGridPlugin.C:23
 RsnGridPlugin.C:24
 RsnGridPlugin.C:25
 RsnGridPlugin.C:26
 RsnGridPlugin.C:27
 RsnGridPlugin.C:28
 RsnGridPlugin.C:29
 RsnGridPlugin.C:30
 RsnGridPlugin.C:31
 RsnGridPlugin.C:32
 RsnGridPlugin.C:33
 RsnGridPlugin.C:34
 RsnGridPlugin.C:35
 RsnGridPlugin.C:36
 RsnGridPlugin.C:37
 RsnGridPlugin.C:38
 RsnGridPlugin.C:39
 RsnGridPlugin.C:40
 RsnGridPlugin.C:41
 RsnGridPlugin.C:42
 RsnGridPlugin.C:43
 RsnGridPlugin.C:44
 RsnGridPlugin.C:45
 RsnGridPlugin.C:46
 RsnGridPlugin.C:47
 RsnGridPlugin.C:48
 RsnGridPlugin.C:49
 RsnGridPlugin.C:50
 RsnGridPlugin.C:51
 RsnGridPlugin.C:52
 RsnGridPlugin.C:53
 RsnGridPlugin.C:54
 RsnGridPlugin.C:55
 RsnGridPlugin.C:56
 RsnGridPlugin.C:57
 RsnGridPlugin.C:58
 RsnGridPlugin.C:59
 RsnGridPlugin.C:60
 RsnGridPlugin.C:61
 RsnGridPlugin.C:62
 RsnGridPlugin.C:63
 RsnGridPlugin.C:64
 RsnGridPlugin.C:65
 RsnGridPlugin.C:66
 RsnGridPlugin.C:67
 RsnGridPlugin.C:68
 RsnGridPlugin.C:69
 RsnGridPlugin.C:70
 RsnGridPlugin.C:71
 RsnGridPlugin.C:72
 RsnGridPlugin.C:73
 RsnGridPlugin.C:74
 RsnGridPlugin.C:75
 RsnGridPlugin.C:76
 RsnGridPlugin.C:77
 RsnGridPlugin.C:78
 RsnGridPlugin.C:79
 RsnGridPlugin.C:80
 RsnGridPlugin.C:81
 RsnGridPlugin.C:82
 RsnGridPlugin.C:83
 RsnGridPlugin.C:84
 RsnGridPlugin.C:85
 RsnGridPlugin.C:86
 RsnGridPlugin.C:87
 RsnGridPlugin.C:88
 RsnGridPlugin.C:89
 RsnGridPlugin.C:90
 RsnGridPlugin.C:91
 RsnGridPlugin.C:92
 RsnGridPlugin.C:93
 RsnGridPlugin.C:94
 RsnGridPlugin.C:95
 RsnGridPlugin.C:96
 RsnGridPlugin.C:97
 RsnGridPlugin.C:98
 RsnGridPlugin.C:99
 RsnGridPlugin.C:100
 RsnGridPlugin.C:101
 RsnGridPlugin.C:102
 RsnGridPlugin.C:103
 RsnGridPlugin.C:104
 RsnGridPlugin.C:105
 RsnGridPlugin.C:106
 RsnGridPlugin.C:107
 RsnGridPlugin.C:108
 RsnGridPlugin.C:109
 RsnGridPlugin.C:110
 RsnGridPlugin.C:111
 RsnGridPlugin.C:112
 RsnGridPlugin.C:113
 RsnGridPlugin.C:114
 RsnGridPlugin.C:115
 RsnGridPlugin.C:116
 RsnGridPlugin.C:117
 RsnGridPlugin.C:118
 RsnGridPlugin.C:119
 RsnGridPlugin.C:120
 RsnGridPlugin.C:121
 RsnGridPlugin.C:122
 RsnGridPlugin.C:123
 RsnGridPlugin.C:124
 RsnGridPlugin.C:125
 RsnGridPlugin.C:126
 RsnGridPlugin.C:127
 RsnGridPlugin.C:128
 RsnGridPlugin.C:129
 RsnGridPlugin.C:130
 RsnGridPlugin.C:131
 RsnGridPlugin.C:132
 RsnGridPlugin.C:133
 RsnGridPlugin.C:134
 RsnGridPlugin.C:135
 RsnGridPlugin.C:136
 RsnGridPlugin.C:137
 RsnGridPlugin.C:138
 RsnGridPlugin.C:139
 RsnGridPlugin.C:140
 RsnGridPlugin.C:141
 RsnGridPlugin.C:142
 RsnGridPlugin.C:143
 RsnGridPlugin.C:144
 RsnGridPlugin.C:145
 RsnGridPlugin.C:146
 RsnGridPlugin.C:147
 RsnGridPlugin.C:148
 RsnGridPlugin.C:149
 RsnGridPlugin.C:150
 RsnGridPlugin.C:151
 RsnGridPlugin.C:152
 RsnGridPlugin.C:153
 RsnGridPlugin.C:154
 RsnGridPlugin.C:155
 RsnGridPlugin.C:156
 RsnGridPlugin.C:157
 RsnGridPlugin.C:158
 RsnGridPlugin.C:159
 RsnGridPlugin.C:160
 RsnGridPlugin.C:161