fPackages(0),
fModules(0),
fProofParam(),
- fDropToShell(true)
+ fDropToShell(true),
+ fGridJobIDs(""),
+ fGridStages("")
{
// Dummy ctor.
SetDefaults();
fPackages(0),
fModules(0),
fProofParam(),
- fDropToShell(true)
+ fDropToShell(true),
+ fGridJobIDs(""),
+ fGridStages("")
{
// Default ctor.
SetDefaults();
fPackages(0),
fModules(0),
fProofParam(),
- fDropToShell(other.fDropToShell)
+ fDropToShell(other.fDropToShell),
+ fGridJobIDs(other.fGridJobIDs),
+ fGridStages(other.fGridStages)
{
// Copy ctor.
fGridJDL = (TGridJDL*)gROOT->ProcessLine("new TAlienJDL()");
fProofProcessOpt = other.fProofProcessOpt;
fMergeDirName = other.fMergeDirName;
fDropToShell = other.fDropToShell;
+ fGridJobIDs = other.fGridJobIDs;
+ fGridStages = other.fGridStages;
if (other.fInputFiles) {
fInputFiles = new TObjArray();
TIter next(other.fInputFiles);
// Check if this is the last stage to be done.
Bool_t laststage = (nfiles<nperchunk);
if (fMaxMergeStages && stage>=fMaxMergeStages) laststage = kTRUE;
+ Int_t jobId = 0;
if (laststage) {
printf("### Submiting final merging stage %d\n", stage);
TString finalJDL = jdl;
finalJDL.ReplaceAll(".jdl", "_final.jdl");
TString query = Form("submit %s %s %d", finalJDL.Data(), aliendir, stage);
- Int_t jobId = SubmitSingleJob(query);
- if (!jobId) return kFALSE;
+ jobId = SubmitSingleJob(query);
} else {
printf("### Submiting merging stage %d\n", stage);
TString query = Form("submit %s %s %d", jdl, aliendir, stage);
- Int_t jobId = SubmitSingleJob(query);
- if (!jobId) return kFALSE;
+ jobId = SubmitSingleJob(query);
}
+ if (!jobId) return kFALSE;
+
+ if (!fGridJobIDs.IsNull()) fGridJobIDs.Append(" ");
+ fGridJobIDs.Append(Form("%d", jobId));
+ if (!fGridStages.IsNull()) fGridStages.Append(" ");
+ fGridStages.Append(Form("%s_merge_stage%d",
+ laststage ? "final" : "partial", stage));
+
return kTRUE;
}
::Error("SubmitSingleJob", "Your query %s could not be submitted", query);
return 0;
}
- printf(" Job id: %s\n", jobId.Data());
- return atoi(jobId);
+ Int_t ijobId = jobId.Atoi();
+ printf(" Job id: '%s' (%d)\n", jobId.Data(), ijobId);
+ return ijobId;
}
//______________________________________________________________________________
gGrid->Cd(fGridOutputDir);
TGridResult *res;
TString jobID = "";
+ fGridJobIDs = "";
+ fGridStages = "";
if (!fRunNumbers.Length() && !fRunRange[0]) {
// Submit a given xml or a set of runs
res = gGrid->Command(Form("submit %s", fJDLName.Data()));
\n_______________________________________________________________________",
fJDLName.Data(), cjobId);
jobID = cjobId;
+ if (jobID.Atoi()) {
+ if (!fGridJobIDs.IsNull()) fGridJobIDs.Append(" ");
+ fGridJobIDs.Append(jobID);
+ if (!fGridStages.IsNull()) fGridStages.Append(" ");
+ fGridStages.Append("full");
+ }
}
delete res;
} else {
} else {
// Submit for a range of enumeration of runs.
if (!Submit()) return kFALSE;
+ jobID = fGridJobIDs;
}
if (fDropToShell) {
\n##### Your JDL %s submitted (%d to go). \nTHE JOB ID IS: %s \
\n_______________________________________________________________________",
fJDLName.Data(), nmasterjobs-fNsubmitted-1, cjobId1.Data());
+ if (!fGridJobIDs.IsNull()) fGridJobIDs.Append(" ");
+ fGridJobIDs.Append(cjobId1);
+ if (!fGridStages.IsNull()) fGridStages.Append(" ");
+ fGridStages.Append("full");
jobID += cjobId1;
jobID += " ";
lastmaster = cjobId1.Atoi();
// .txt file containing the list of files to be chained in test mode
virtual void SetFileForTestMode(const char *filename) {fFileForTestMode = filename;}
virtual TChain *GetChainForTestMode(const char *treeName) const;
-
+ virtual const TString& GetGridJobIDs() const { return fGridJobIDs; }
+ virtual const TString& GetGridStages() const { return fGridStages; }
protected:
void CdWork();
Bool_t CheckInputData();
TObjArray *fModules; // List of AliAnalysisTaskCfg modules
TMap fProofParam; // Key-value pairs for proof mode
Bool_t fDropToShell; // If true, execute aliensh on start
-
- ClassDef(AliAnalysisAlien, 21) // Class providing some AliEn utilities
+ TString fGridJobIDs; // List of last committed jobs
+ TString fGridStages; // List of last committed jobs
+
+ ClassDef(AliAnalysisAlien, 22) // Class providing some AliEn utilities
};
#endif
if (!taskunicor) ::Warning("AnalysisTrainNew", "AliAnalysisTaskUnicor cannot run for this train conditions - EXCLUDED");
}
- // FMD
+ // Forward Multiplicity
AliAnalysisManager::SetCommonFileName("forward.root");
if (iPWG2forward) {
- gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis/AddTaskFMD.C");
- AliFMDAnalysisTaskSE *taskfmd = AddTaskFMD();
- if (!taskfmd) ::Warning("AnalysisTrainNew", "AliFMDAnalysisTaskSE cannot run for this train conditions - EXCLUDED");
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskForwardMult.C");
+ gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/AddTaskCentralMult.C");
+ Bool_t mc = false;
+ UShort_t sys = 0; // 0: get from data, 1: pp, 2: AA
+ UShort_t sNN = 0; // 0: get from data, otherwise center of mass
+ // energy (per nucleon pair)
+ Short_t fld = 0; // 0: get from data, otherwise L3 field in kG
+ AliAnalysisTask *taskForward = AddTaskForwardMult(mc, sys, sNN, fld);
+ if (!taskForward)
+ ::Warning("AnalysisTrainNew", "AliForwardMultiplicityTask cannot run for this train conditions - EXCLUDED");
+ AliAnalysisTask *taskCentral = AddTaskCentralMult(mc, sys, sNN, fld);
+ if (!taskCentral)
+ ::Warning("AnalysisTrainNew", "AliCentralMultiplicityTask cannot run for this train conditions - EXCLUDED");
}
AliAnalysisManager::SetCommonFileName("PWG2histograms.root");
}
// PWG2 FORWARD
if (iPWG2forward) {
- if (!LoadLibrary("PWG2forward", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("PWG2forward2", mode, kTRUE)) return kFALSE;
}
// PWG3 Vertexing HF
if (iPWG3vertexing || iPWG3d2h) {