]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/RsnGridPlugin.C
9108bc42a94e11747e2687f401af9dabaf942da0
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / RsnGridPlugin.C
1 #ifndef __CINT__
2 #include <Riostream.h>
3 #include <TGrid.h>
4 #include <TGridResult.h>
5 #endif
6 void RsnGridPlugin() {
7
8    Bool_t valid = kTRUE;
9    TString dsConfig = AliAnalysisManager::GetGlobalStr("rsnTrainDSConfig",valid);
10
11    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
12    if (!mgr) { Printf("Error[RsnGridPlugin] mgr is null !!!"); return; }
13
14    AliAnalysisAlien *plugin = (AliAnalysisAlien *) mgr->GetGridHandler();
15    if (!plugin) { Printf("Error[RsnGridPlugin] : plugin is null !!!"); return; }
16
17    // getting latest train id
18    TString rsnTrainName = gSystem->BaseName(dsConfig.Data());
19    rsnTrainName.ReplaceAll(".txt","");
20
21    if (!gGrid) TGrid::Connect("alien://");
22    if (!gGrid) return;
23    TGridResult *r = gGrid->Query(Form("%s/RsnTrain/%s",gGrid->GetHomeDirectory(),rsnTrainName.Data()),"*/analysis.root");
24    TString s = r->GetKey(r->GetSize()-1,"lfn");
25    s.ReplaceAll("/analysis.root","");
26    s = gSystem->BaseName(s);
27    Int_t idRsnTrain = s.Atoi()+1;
28    rsnTrainName.Append(Form("/%03d",idRsnTrain));
29
30    TString rsnTrainWkDir = Form("RsnTrain/%s",rsnTrainName.Data());
31    Info("RsnGridPlugin()",Form("RSN Train directory : %s%s",gGrid->GetHomeDirectory(),rsnTrainWkDir.Data()));
32
33    plugin->SetGridWorkingDir(rsnTrainWkDir.Data());
34    plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
35
36    plugin->SetAPIVersion("V1.1x");
37    
38    TString rootver = AliAnalysisManager::GetGlobalStr("rsnLegoTrainROOTversion",valid);
39    plugin->SetROOTVersion(rootver.Data());
40
41    TString alirootVersion = AliAnalysisManager::GetGlobalStr("rsnLegoTrainAliROOTversion",valid);
42    if (alirootVersion.IsNull()) {
43       if (gSystem->Getenv("ALICE_ROOT")) alirootVersion = gSystem->GetFromPipe("aliroot --version | awk '{print $3}'");
44    }
45    plugin->SetAliROOTVersion(alirootVersion.Data());
46
47    plugin->SetExecutableCommand("aliroot -b -q");
48
49    plugin->SetAnalysisMacro("RsnTrain.C");
50    plugin->SetMasterResubmitThreshold(90);
51    plugin->SetTTL(84600);
52    plugin->SetInputFormat("xml-single");
53    plugin->SetJDLName("RsnTrain.jdl");
54    plugin->SetPrice(1);
55    plugin->SetSplitMode("se");
56    plugin->SetNtestFiles(2);
57    plugin->SetMergeViaJDL();
58    plugin->SetOverwriteMode(kFALSE);
59    //    plugin->SetKeepLogs(kTRUE);
60
61    RsnSetData(plugin,dsConfig,1000);
62
63    plugin->SetSplitMaxInputFileNumber(50);
64
65    //   Fatal("RsnDataSet","No dataset found !!!");
66 }
67
68 void RsnSetData(AliAnalysisAlien *plugin,TString dsConf,Int_t maxRunsPerMaster = 1000) {
69
70    Bool_t dsFound = kTRUE;
71    Int_t nRunsPerMaster = 0;
72
73    Bool_t valid = kTRUE;
74    TString legoTrainPath = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
75
76    if (gSystem->AccessPathName(dsConf.Data())) dsConf.Prepend(Form("%s/",legoTrainPath.Data()));
77    dsConf = gSystem->ExpandPathName(dsConf.Data());
78
79    if (dsConf.Contains(".txt")) {
80       ifstream in;
81       in.open(dsConf.Data());
82       if (!in.is_open()) Fatal("RsnSetData",Form("File %s was not found !!!",dsConf.Data()));
83       Printf("DS config file : %s",dsConf.Data());
84       TString line;
85       Bool_t isRun = kFALSE;
86       while (in.good())
87       {
88          in >> line;
89          if (line.IsNull()) continue;
90          if (line.Contains("BASE")) {
91             GetParameterFromConfig(line);
92             plugin->SetGridDataDir(line.Data());
93             Printf("BASE -> %s",line.Data());
94             continue;
95          }
96          if (line.Contains("PREFIX")) {
97             GetParameterFromConfig(line);
98             plugin->SetRunPrefix(line.Data());
99             Printf("PREFIX -> %s",line.Data());
100             continue;
101          }
102          if (line.Contains("DATA_PATTERN")) {
103             GetParameterFromConfig(line);
104             plugin->SetDataPattern(line.Data());
105             Printf("DATA_PATTERN -> %s",line.Data());
106             continue;
107          }
108          if (!line.CompareTo("RUNS")) {
109             isRun = kTRUE;
110             in >> line;
111          }
112          if (isRun) {
113             //            Printf("Adding RUN : %s",line.Data());
114             plugin->AddRunNumber(line.Data());
115             nRunsPerMaster++;
116          }
117       }
118    } else {
119       plugin->SetGridDataDir("");
120       plugin->SetDataPattern("");
121       Fatal("RsnDataSet","No dataset found !!!");
122    }
123
124    if (nRunsPerMaster > maxRunsPerMaster) nRunsPerMaster = maxRunsPerMaster;
125    plugin->SetNrunsPerMaster(nRunsPerMaster);
126
127 }
128
129 void GetParameterFromConfig(TString &str,TString token="="){
130    TObjArray *array = str.Tokenize(token.Data());
131    TObjString *strObj = (TObjString *)array->At(1);
132    if (strObj) str = strObj->GetString();
133    else str = "";
134 }