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