9 #include "KVDataAnalyser.h"
10 #include "KVDataAnalysisTask.h"
11 #include "KVDataSetManager.h"
13 #include "TObjString.h"
14 #include "TObjArray.h"
15 #include "Riostream.h"
16 #include "KVBatchSystemManager.h"
17 #include "TPluginManager.h"
18 #include "TSystemDirectory.h"
21 #include "THashList.h"
44 fUserClassIsOK = kFALSE;
48 fChoseRunMode = kFALSE;
49 fWorkDirInit = fWorkDirEnd = 0;
52 fProofMode = EProofMode::None;
56 fUseBaseClassSubmitTask = kFALSE;
64 KVDataAnalyser::~KVDataAnalyser()
67 SafeDelete(fWorkDirInit);
68 SafeDelete(fWorkDirEnd);
69 if (gDataAnalyser ==
this)gDataAnalyser =
nullptr;
82 fUserClassIsOK = kFALSE;
84 fUserClassOptions =
"";
86 fBatchSystem =
nullptr;
87 fChoseRunMode = kFALSE;
89 fProofMode = EProofMode::None;
109 if (CheckTaskVariables()) {
110 if (fBatchSystem && !BatchMode()) {
112 fBatchSystem->SubmitTask(
this);
114 if (BatchMode() && fBatchSystem && !fParent) fBatchSystem->Print(
"log");
115 if (!RunningInLaunchDirectory() && fParent) {
119 ScanWorkingDirectory(&fWorkDirInit);
121 if (!PreSubmitCheck())
return;
131 if (fUseBaseClassSubmitTask)
136 if (!RunningInLaunchDirectory() && fParent) {
140 ScanWorkingDirectory(&fWorkDirEnd);
143 CopyAnalysisResultsToLaunchDirectory();
145 if (BatchMode() && fBatchSystem && !fParent) {
150 AssignAndDelete(ff, gSystem->ConcatFileName(gSystem->Getenv(
"HOME"), Form(
".%s", GetBatchName())));
152 AssignAndDelete(ff, gSystem->ConcatFileName(gSystem->Getenv(
"HOME"), Form(
".%s.bak", GetBatchName())));
154 AssignAndDelete(ff, gSystem->ConcatFileName(gSystem->Getenv(
"HOME"), Form(
"%s.status", GetBatchName())));
156 AssignAndDelete(ff, gSystem->ConcatFileName(gSystem->Getenv(
"HOME"), Form(
"%s.status.bak", GetBatchName())));
179 if (NeedToChooseWhatToDo())
181 else if (NeedToChooseWhatToAnalyse())
182 ChooseWhatToAnalyse();
205 if (BatchMode()) ReadBatchEnvFile(Form(
".%s", GetBatchName()));
209 if (fTask->WithUserClass() && fUserClass != ClassName()) {
211 if (fUserClass ==
"") {
212 if (BatchMode())
return kFALSE;
216 if (!CheckIfUserClassIsValid(fUserClassAlternativeBaseClass)) {
217 cout <<
"============> Warning <=============" << endl;
218 cout << GetUserClass() <<
" is not a valid " << fTask->GetUserBaseClass() << endl;
219 cout <<
"Analysis aborted." << endl;
220 cout <<
"====================================" << endl;
226 if (nbEventToRead < 0) {
227 ChooseNbEventToRead();
239 if (NeedToChooseWhatToDo()) {
243 if (NeedToChooseWhatToAnalyse()) {
287 TString tmp = incDirs;
288 TString curIncDir = gSystem->GetIncludePath();
289 TObjArray* oa = tmp.Tokenize(
" ");
293 while ((st = (TObjString*)next())) {
294 TString
id = st->GetString();
296 fIncludes +=
id.Data();
298 if (!curIncDir.Contains(
id.Data())) {
299 cout <<
"Include path \"" <<
id.Data() <<
"\" added." << endl;
301 gSystem->AddIncludePath(
id.Data());
325 KVString slib = gSystem->GetLibraries(
"",
"D");
332 Bool_t loaded = kFALSE;
334 while (!slib.
End() && !loaded) {
337 Info(
"SetUserLibraries",
"%s already load",
id.Data());
343 Info(
"SetUserLibraries",
"Library \"%s\"added.",
id.Data());
344 gSystem->Load(
id.Data());
346 fLibraries +=
id.Data();
362 SetNbEventToRead(-1);
363 while (nbEventToRead < 0) {
364 cout <<
"Give the number of events to read [<RET>=all]:" << endl;
366 ntr.ReadToDelim(cin);
367 if (ntr.IsDigit() || !ntr.Length()) {
369 nbEventToRead = (Long64_t) ntr.Atoi();
375 Data() <<
"\" is not a number. Please retry." << endl;
412 while (!fUserClass.Length()) {
413 cout <<
"Give the name of the analysis class derived from " << fTask->GetUserBaseClass() <<
":" << endl;
414 fUserClass.ReadLine(cin);
415 fUserClassIsOK = kFALSE;
472 TObject* o = GetInstanceOfUserClass(alternative_base_class);
506 static TString aclic;
507 if (gEnv->GetValue(
"KVDataAnalyser.UserClass.ForceRecompile", kFALSE)) aclic =
"++";
509 if (gEnv->GetValue(
"KVDataAnalyser.UserClass.Debug", kFALSE)) aclic +=
"g";
510 else if (gEnv->GetValue(
"KVDataAnalyser.UserClass.Optimise", kFALSE)) aclic +=
"O";
520 fBatchSystem =
nullptr;
559 if (!fTask->CheckUserBaseClassIsLoaded())
return 0x0;
562 TPluginHandler* ph = gROOT->GetPluginManager()->FindHandler(fTask->GetUserBaseClass(), fUserClass.Data());
567 TClass* cl = gROOT->GetClass(fUserClass.Data());
570 if (DoUserClassFilesExist()) {
573 cmd.Form(
".L %s%s", fUserClassImp.Data(), GetACliCMode());
574 gROOT->ProcessLine(cmd.Data());
576 cl = gROOT->GetClass(fUserClass.Data());
579 Info(
"GetInstanceOfUserClass",
"Class %s is unknown and no source files available",
585 Info(
"GetInstanceOfUserClass",
"Compilation of class %s failed. Correct the mistakes and try again",
589 if (!cl->GetBaseClass(fTask->GetUserBaseClass())) {
591 if (alternative_base_class ==
"") {
592 Info(
"GetInstanceOfUserClass",
"Class %s does not inherit from correct base class (%s), or compilation of class %s failed. Correct the mistakes and try again",
593 fUserClass.Data(), fTask->GetUserBaseClass(), fUserClass.Data());
597 bool got_good_base =
false;
598 TString good_base =
"";
599 alternative_base_class.
Begin(
",");
600 while (!alternative_base_class.
End()) {
601 good_base = alternative_base_class.
Next(kTRUE);
602 if (cl->GetBaseClass(good_base)) {
603 got_good_base =
true;
608 Info(
"GetInstanceOfUserClass",
"Class %s inherits from alternative base class %s: OK!",
609 fUserClass.Data(), good_base.Data());
611 Info(
"GetInstanceOfUserClass",
"Class %s does not inherit from task-defined base class (%s) or any provided alternative base classes (%s), or compilation of class %s failed. Correct the mistakes and try again",
612 fUserClass.Data(), fTask->GetUserBaseClass(), alternative_base_class.Data(), fUserClass.Data());
618 return (TObject*)cl->New();
620 Info(
"GetInstanceOfUserClass",
"Found plugin handler for class %s",
625 Info(
"GetInstanceOfUserClass",
"KVBase::LoadPlugin failed for %s", fUserClass.Data());
628 TObject* obj = (TObject*)ph->ExecPlugin(0);
631 if (obj->InheritsFrom(fTask->GetUserBaseClass()))
return obj;
632 Info(
"GetInstanceOfUserClass",
"%s does not inherit from %s", fUserClass.Data(), fTask->GetUserBaseClass());
635 Info(
"GetInstanceOfUserClass",
"constructor not OK for %s", fUserClass.Data());
658 fUserClassIsOK = CheckIfUserClassIsValid();
660 fUserClassIsOK = kTRUE;
680 OpenBatchInfoFile(Form(
".%s", jobname.Data()));
682 fBatchEnv->SetValue(
"BatchSystem", fBatchSystem->GetName());
683 fBatchSystem->WriteBatchEnvFile(GetBatchInfoFile());
685 fBatchEnv->SetValue(
"AnalysisTask", fTask->GetType());
687 if (fTask->WithUserClass()) {
688 fBatchEnv->SetValue(
"UserClass", GetUserClass());
689 if (fUserClassImp ==
"" || fUserClassDec ==
"") {
690 if (!DoUserClassFilesExist()) {
691 Warning(
"WriteBatchEnvFile",
"Source files for user class %s do not exist. Job will not work.",
695 fBatchEnv->SetValue(
"UserClassOptions", fUserClassOptions);
696 fBatchEnv->SetValue(
"UserClassImp", fUserClassImp);
697 fBatchEnv->SetValue(
"UserClassDec", fUserClassDec);
700 if (fUserClassOptions !=
"") fBatchEnv->SetValue(
"UserClassOptions", fUserClassOptions);
702 fBatchEnv->SetValue(
"NbToRead", (Double_t)nbEventToRead);
703 fBatchEnv->SetValue(
"LaunchDirectory", gSystem->WorkingDirectory());
704 if (fIncludes.Length()) {
705 fBatchEnv->SetValue(
"UserIncludes", fIncludes.Data());
707 if (fLibraries.Length()) {
708 fBatchEnv->SetValue(
"UserLibraries", fLibraries.Data());
711 if (save) fBatchEnv->SaveLevel(kEnvUser);
730 OpenBatchInfoFile(filename);
732 if (!GetAnalysisTask()) {
736 KVString val = fBatchEnv->GetValue(
"AnalysisTask",
"");
737 SetAnalysisTask(
nullptr);
739 if (!gDataSetManager) {
741 gDataSetManager->
Init();
745 Error(
"ReadBatchEnvFile",
"Name of analysis task not given");
748 if (!GetAnalysisTask()) {
749 Error(
"ReadBatchEnvFile",
"Analysis task \"%s\"not found for dataset %s",
750 val.Data(), gDataSet->GetName());
755 nbEventToRead = (Long64_t)fBatchEnv->GetValue(
"NbToRead", -1);
756 SetUserIncludes(fBatchEnv->GetValue(
"UserIncludes",
""));
757 SetUserLibraries(fBatchEnv->GetValue(
"UserLibraries",
""));
760 if (strcmp(fBatchEnv->GetValue(
"BatchSystem",
""),
"")) {
761 fBatchSystem = gBatchSystemManager->
GetBatchSystem(fBatchEnv->GetValue(
"BatchSystem",
""));
764 fBatchSystem->SetAnalyser(
this);
768 if (fTask->WithUserClass()) {
769 fUserClass = fBatchEnv->GetValue(
"UserClass",
"");
770 if (fUserClass ==
"") {
771 Error(
"ReadBatchEnvFile",
"Name of user class not given");
775 fUserClassOptions = fBatchEnv->GetValue(
"UserClassOptions",
"");
776 fUserClassImp = fBatchEnv->GetValue(
"UserClassImp",
"");
777 if (fUserClassImp ==
"") {
778 Error(
"ReadBatchEnvFile",
"Name of user class implementation file not given");
781 fUserClassDec = fBatchEnv->GetValue(
"UserClassDec",
"");
782 if (fUserClass ==
"") {
783 Error(
"ReadBatchEnvFile",
"Name of user class header file not given");
786 fUserClassAlternativeBaseClass = fBatchEnv->GetValue(
"UserClassAlternativeBaseClass",
"");
790 if (!RunningInLaunchDirectory()) {
791 TString launchDir = fBatchEnv->GetValue(
"LaunchDirectory", gSystem->WorkingDirectory());
792 TString path_src, path_trg;
794 AssignAndDelete(path_src, gSystem->ConcatFileName(launchDir.Data(), fUserClassImp.Data()));
795 AssignAndDelete(path_trg, gSystem->ConcatFileName(gSystem->WorkingDirectory(), fUserClassImp.Data()));
796 gSystem->CopyFile(path_src.Data(), path_trg.Data());
798 AssignAndDelete(path_src, gSystem->ConcatFileName(launchDir.Data(), fUserClassDec.Data()));
799 AssignAndDelete(path_trg, gSystem->ConcatFileName(gSystem->WorkingDirectory(), fUserClassDec.Data()));
800 gSystem->CopyFile(path_src.Data(), path_trg.Data());
804 fUserClassOptions = fBatchEnv->GetValue(
"UserClassOptions",
"");
823 if (!BatchMode() || !fBatchEnv)
return kTRUE;
824 TString launchDir = fBatchEnv->GetValue(
"LaunchDirectory", gSystem->WorkingDirectory());
825 return (launchDir == gSystem->WorkingDirectory());
857 KVString task_data_analyser = fTask->GetDataAnalyser();
858 Info(
"SubmitTask",
"fTask->GetDataAnalyser()=%s", task_data_analyser.Data());
859 unique_ptr<KVDataAnalyser> the_analyser;
860 if (task_data_analyser ==
"UserClass") {
864 the_analyser.reset(GetAnalyser(fTask->GetDataAnalyser()));
866 if (!the_analyser.get())
867 Fatal(
"SubmitTask",
"the_analyser is 0x0, go to crash");
869 set_up_analyser_for_task(the_analyser.get());
871 if (fTask->WithUserClass()) {
872 the_analyser->SetUserClass(GetUserClass(), kFALSE);
873 the_analyser->SetUserClassOptions(fUserClassOptions);
874 }
else if (strcmp(fTask->GetUserBaseClass(),
"")) the_analyser->SetUserClass(fTask->GetUserBaseClass(), kFALSE);
879 the_analyser->CheckTaskVariables();
880 if (!fChoseRunMode) ChooseRunningMode();
882 the_analyser->SetBatchMode(BatchMode());
883 the_analyser->SetBatchName(GetBatchName());
884 the_analyser->SetBatchSystem(fBatchSystem);
885 the_analyser->SetProofMode(GetProofMode());
888 gDataAnalyser = the_analyser.get();
912 KVString stDate = now.AsSQLString();
913 stDate.ReplaceAll(
" ",
"-");
914 tmp.ReplaceAll(
"$Date", stDate.Data());
915 if (fUserClass.Length()) tmp.ReplaceAll(
"$UserClass", fUserClass.Data());
916 else if (fTask) tmp.ReplaceAll(
"$UserClass", fTask->GetDataAnalyser());
917 tmp.ReplaceAll(
"$User", gSystem->GetUserInfo()->fUser.Data());
927 static TString keywords =
"Will be expanded: $Date, $User, $UserClass";
945 if (!BatchMode() || !fBatchEnv)
return gSystem->WorkingDirectory();
946 return fBatchEnv->GetValue(
"LaunchDirectory", gSystem->WorkingDirectory());
967 AssignAndDelete(fullpath, gSystem->ConcatFileName(GetLaunchDirectory(), f.Data()));
980 if (!BatchMode() || !fBatchEnv)
return "";
982 static TString filename =
"";
984 statfile.Form(
"%s.status", gBatchSystem->
GetJobName());
986 TString launchDir = GetLaunchDirectory();
987 AssignAndDelete(filename, gSystem->ConcatFileName(launchDir.Data(), statfile.Data()));
1000 if (!BatchMode() || !fBatchEnv)
return;
1002 TEnv stats(GetBatchStatusFileName());
1003 stats.SetValue(
"TotalEvents", totev);
1004 stats.SetValue(
"EventsRead", evread);
1005 disk.Remove(TString::kTrailing,
'\t');
1006 disk.Remove(TString::kTrailing,
' ');
1007 disk.Remove(TString::kTrailing,
'\t');
1008 stats.SetValue(
"DiskUsed", disk.Data());
1009 stats.SaveLevel(kEnvLocal);
1021 if (!BatchMode() || !fBatchEnv)
return;
1022 TString stats = GetBatchStatusFileName();
1023 gSystem->Unlink(stats);
1025 gSystem->Unlink(stats);
1038 return (!(nevents % fTask->GetStatusUpdateInterval()) && nevents);
1050 cout <<
" +++ " << nevents <<
" events processed +++ " << endl;
1052 if (gSystem->GetProcInfo(&pid) == 0) {
1053 cout <<
" ------------- Process infos -------------" << endl;
1054 printf(
" CpuSys = %f s. CpuUser = %f s. ResMem = %f MB VirtMem = %f MB\n",
1055 pid.fCpuSys, pid.fCpuUser, pid.fMemResident / 1024.,
1056 pid.fMemVirtual / 1024.);
1074 fChoseRunMode = kTRUE;
1077 cout << endl <<
"Run in Interactive or Batch mode (I or B) ? : ";
1079 }
while (tmp !=
"i" && tmp !=
"I" && tmp !=
"b" && tmp !=
"B");
1086 cout << endl <<
"Choose the batch system to use : " << endl;
1087 gBatchSystemManager->
Print();
1089 cout <<
"(enter a number) : " << endl;
1091 }
while (!tmp.IsDigit());
1093 fBatchSystem->
Clear();
1107 if (*ls)
delete(*ls);
1108 TSystemDirectory dir(
"LocDir", gSystem->WorkingDirectory());
1109 (*ls) = dir.GetListOfFiles();
1126 if (!fWorkDirInit || !fWorkDirEnd)
return;
1127 TString launchDir = fBatchEnv->GetValue(
"LaunchDirectory", gSystem->WorkingDirectory());
1128 TIter next_new_file(fWorkDirEnd);
1130 while ((file = next_new_file())) {
1131 if (!fWorkDirInit->FindObject(file->GetName())) {
1133 fname.Form(
"%s", file->GetName());
1136 if (!(fname.BeginsWith(
"KVParticleCondition_") || fname.EndsWith(
".so") || fname.EndsWith(
".d") || fname.EndsWith(
".pcm") || fname.EndsWith(
".bak"))) {
1137 TString path_src, path_trg;
1138 AssignAndDelete(path_trg, gSystem->ConcatFileName(launchDir.Data(), file->GetName()));
1139 AssignAndDelete(path_src, gSystem->ConcatFileName(gSystem->WorkingDirectory(),
1141 Info(
"CopyAnalysisResultsToLaunchDirectory",
"Copying analysis results file :\n%s ---> %s",
1142 path_src.Data(), path_trg.Data());
1144 if (gSystem->CopyFile(path_src.Data(), path_trg.Data(), kTRUE) == 0) {
1145 Info(
"CopyAnalysisResultsToLaunchDirectory",
"File copied correctly");
1147 Info(
"CopyAnalysisResultsToLaunchDirectory",
" **** ERROR copying file !!! ");
1168 tt->GetUserInfo()->Add(
new TEnv());
1169 TEnv* kvenv = (TEnv*)tt->GetUserInfo()->FindObject(
"TEnv");
1172 THashList* hh = gEnv->GetTable();
1174 for (Int_t kk = 0; kk < hh->GetEntries(); kk += 1) {
1175 tamp.Form(
"%s", hh->At(kk)->GetName());
1176 if (tamp.BeginsWith(
"Plugin.")) {}
1177 else kvenv->SetValue(hh->At(kk)->GetName(), ((TEnvRec*)hh->At(kk))->GetValue(), kEnvUser);
1185 #ifdef WITH_BZR_INFOS
1186 kvenv->SetValue(
"KVBase::bzrRevisionId()", KVBase::bzrRevisionId(), kEnvUser);
1187 kvenv->SetValue(
"KVBase::bzrRevisionDate()", KVBase::bzrRevisionDate(), kEnvUser);
1188 kvenv->SetValue(
"KVBase::bzrBranchNick()", KVBase::bzrBranchNick(), kEnvUser);
1189 kvenv->SetValue(
"KVBase::bzrRevisionNumber()", KVBase::bzrRevisionNumber());
1190 kvenv->SetValue(
"KVBase::bzrIsBranchClean()", KVBase::bzrIsBranchClean());
1192 #ifdef WITH_GIT_INFOS
1197 kvenv->SetValue(
"gROOT->GetVersion()", gROOT->GetVersion(), kEnvUser);
1199 kvenv->SetValue(
"gSystem->GetBuildArch()", gSystem->GetBuildArch(), kEnvUser);
1200 kvenv->SetValue(
"gSystem->GetBuildCompiler()", gSystem->GetBuildCompiler(), kEnvUser);
1201 kvenv->SetValue(
"gSystem->GetBuildCompilerVersion()", gSystem->GetBuildCompilerVersion(), kEnvUser);
1202 kvenv->SetValue(
"gSystem->GetBuildNode()", gSystem->GetBuildNode(), kEnvUser);
1203 kvenv->SetValue(
"gSystem->GetBuildDir()", gSystem->GetBuildDir(), kEnvUser);
1205 kvenv->SetValue(
"gSystem->GetUserInfo()->fUser", gSystem->GetUserInfo()->fUser, kEnvUser);
1206 kvenv->SetValue(
"gSystem->HostName()", gSystem->HostName(), kEnvUser);
1209 THashList* hh = fBatchEnv->GetTable();
1210 for (Int_t kk = 0; kk < hh->GetEntries(); kk += 1) {
1211 tamp.Form(
"%s", hh->At(kk)->GetName());
1212 if (!strcmp(kvenv->GetValue(hh->At(kk)->GetName(),
"rien"),
"rien"))
1213 kvenv->SetValue(hh->At(kk)->GetName(), ((TEnvRec*)hh->At(kk))->GetValue(), kEnvUser);
1241 ::Warning(
"KVDataAnalyser::RunAnalyser",
"No plugin %s found for KVDataAnalyser",
1286 jdl->
SetValue(
"AnalysisTask", fTask->GetType());
1287 jdl->
SetValue(
"PROOFMode", GetProofMode());
static Bool_t FindClassSourceFiles(const Char_t *class_name, KVString &imp_file, KVString &dec_file, const Char_t *dir_name=".")
static const Char_t * GetKVBuildDate()
Returns KaliVeda build date.
static const Char_t * gitCommit()
Returns last git commit of sources.
static const Char_t * GetKVBuildUser()
Returns username of person who performed build.
static const Char_t * gitBranch()
Returns git branch of sources.
static const Char_t * GetKVSourceDir()
Returns top-level directory of source tree used for build.
static void PrintSplashScreen()
Prints welcome message and infos on version etc.
static TPluginHandler * LoadPlugin(const Char_t *base, const Char_t *uri="0")
static const Char_t * GetKVVersion()
Returns KaliVeda version string.
Handles list of all available batch systems for processing non-interactive data analysis tasks.
void Print(Option_t *opt="") const
KVBatchSystem * GetBatchSystem(const Char_t *name)
Get batch system by name.
virtual const Char_t * GetJobName() const
virtual void ReadBatchEnvFile(TEnv *)
virtual void Clear(Option_t *opt="")
Manager class which sets up and runs data analysis tasks.
const Char_t * GetACliCMode()
void DoStatusUpdate(Long64_t nevents) const
Print infos on events treated, disk usage, memory usage.
virtual TString ExpandAutoBatchName(const Char_t *format) const
void SetParent(KVDataAnalyser *da)
virtual void PostRunReset()
virtual void Run()
Check all task variables, then run analyser.
virtual void AddJobDescriptionList(TList *)
virtual void WriteBatchEnvFile(const TString &, Bool_t sav=kTRUE)
void ChooseNbEventToRead()
Ask user to set number of events to read.
Bool_t RunningInLaunchDirectory()
void SetUserLibraries(const Char_t *libs=0)
void SetUserClass(const Char_t *kvs, Bool_t check=kTRUE)
virtual Bool_t CheckIfUserClassIsValid(const KVString &alternative_base_class="")
TString GetPathToFileInLaunchDirectory(const TString &) const
void WriteBatchInfo(TTree *)
virtual void RunMenus()
Run data analyser in menu-driven mode.
virtual Bool_t CheckTaskVariables()
Bool_t DoUserClassFilesExist()
const Char_t * GetLaunchDirectory() const
void SetAnalysisTask(KVDataAnalysisTask *at)
virtual const Char_t * GetRecognisedAutoBatchNameKeywords() const
virtual void set_up_analyser_for_task(KVDataAnalyser *the_analyser)
virtual Bool_t CheckStatusUpdateInterval(Long64_t nevents) const
virtual Bool_t CheckWhatToAnalyseAndHow()
virtual void SubmitTask()
const Char_t * GetBatchStatusFileName() const
Returns full path to file used to store status of running batch jobs.
virtual void ChooseWhatToAnalyse()
TO IMPLEMENT ?
KVDataAnalyser()
Default constructor.
static Bool_t fCleanAbort
flag to force abort of processing
static KVDataAnalyser * GetAnalyser(const Char_t *plugin)
static Bool_t IsRunningBatchAnalysis()
static void RunAnalyser(const Char_t *plugin="")
void ScanWorkingDirectory(TList **)
void ChooseUserClass()
Choose the user's analysis class.
void CopyAnalysisResultsToLaunchDirectory()
virtual Bool_t ReadBatchEnvFile(const TString &)
void DeleteBatchStatusFile() const
Delete batch status file (and backup - '.bak') for batch job.
void SetUserIncludes(const Char_t *incDirs=0)
virtual void ChooseWhatToDo()
TO IMPLEMENT ?
void UpdateBatchStatusFile(Int_t totev, Int_t evread, TString disk) const
Update infos in batch status file.
KVBatchSystem * fBatchSystem
batch system to use for submission of job
TObject * GetInstanceOfUserClass(const KVString &alternative_base_class="")
void SetNbEventToRead(Long64_t nb=0)
Define and manage data analysis tasks.
virtual const Char_t * GetPrereq() const
Manage all datasets contained in a given data repository.
virtual Bool_t Init(KVDataRepository *=0)
KVDataAnalysisTask * GetAnalysisTaskAny(const Char_t *keywords) const
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
void SetValue(const Char_t *name, value_type value)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const