Int_t iAODanalysis = 1; // Analysis on input AOD's
Int_t iAODhandler = 1; // Analysis produces an AOD or dAOD's
Int_t iESDfilter = 0; // ESD to AOD filter (barrel + muon tracks)
+Int_t iPhysicsSelection = 1; // ESD to AOD filter (barrel + muon tracks)
Bool_t kUseKinefilter = kFALSE; // use Kinematics filter
Bool_t kUseMuonfilter = kFALSE; // use Kinematics filter
TString kCommonOutputFileName = "PWG4_JetTasksOutput.root";
//== grid plugin setup variables
Bool_t kPluginUse = kTRUE; // do not change
Bool_t kPluginUseProductionMode = kFALSE; // use the plugin in production mode
-TString kPluginRootVersion = "v5-25-04-1"; // *CHANGE ME IF MORE RECENT IN GRID*
-TString kPluginAliRootVersion = "v4-18-14-AN"; // *CHANGE ME IF MORE RECENT IN GRID*
+TString kPluginRootVersion = "v5-25-04-3"; // *CHANGE ME IF MORE RECENT IN GRID*
+TString kPluginAliRootVersion = "v4-18-14-AN-1"; // *CHANGE ME IF MORE RECENT IN GRID*
// TString kPluginExecutableCommand = "root -b -q";
TString kPluginExecutableCommand = "source /Users/kleinb/setup_32bit_aliroot_trunk_clean_root_trunk.sh; alienroot -b -q ";
// == grid plugin input and output variables
TString kGridOutputStorages = "ALICE::NIHAM::File,ALICE::CNAF::SE,ALICE::FZK::SE,ALICE::GSI::SE,ALICE::Legnaro::SE"; // Make replicas on the storages
// == grid process variables
Int_t kGridRunsPerMaster = 100; // Number of runs per master job
-Int_t kGridFilesPerJob = 200; // Maximum number of files per job (gives size of AOD)
+Int_t kGridFilesPerJob = 100; // Maximum number of files per job (gives size of AOD)
//==============================================================================
// ### Local Steering variables
// Temporaries.
TString anaPars = "";
TString anaLibs = "";
+TString anaLibsExtra = "";
TString anaSources = "";
// Function signatures
class AliAnalysisAlien;
if (kSaveTrain)WriteConfig();
// Check compatibility of selected modules
CheckModuleFlags(smode);
+ // gROOT->ProcessLine(".trace");
printf("==================================================================\n");
printf("=========== RUNNING ANALYSIS TRAIN %s IN %s MODE ==========\n", kTrainName.Data(),smode.Data());
printf("= Configuring analysis train for: =\n");
if (iAODanalysis) printf("= AOD analysis =\n");
else printf("= ESD analysis =\n");
+ if (iPhysicsSelection) printf("= Physics selection =\n");
if (iESDfilter) printf("= ESD filter =\n");
if (iJETAN) printf("= Jet analysis =\n");
printf("==================================================================\n");
}
// Make the analysis manager and connect event handlers
- AliAnalysisManager *mgr = new AliAnalysisManager("Analysis Train", "Production train");
+ AliAnalysisManager *mgr = new AliAnalysisManager("PWG4Train", "pwg4 mini train");
if (kCommonOutputFileName.Length()>0)mgr->SetCommonFileName(kCommonOutputFileName.Data());
if (kProofSaveToAlien) mgr->SetSpecialOutputLocation(kProofOutdir);
if (!strcmp(plugin_mode, "test")) mgr->SetNSysInfo(1);
// is done in this macro, but in future these containers will be connected
// from each task configuration macro.
+ if(iPhysicsSelection && !iAODanalysis){
+ gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskPhysicsSelection.C");
+ AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
+ if(kIsMC)physSelTask->GetPhysicsSelection()->SetAnalyzeMC();
+ physSelTask->GetPhysicsSelection()->AddBackgroundIdentification(new AliBackgroundSelection());
+ }
+
if (iESDfilter && !iAODanalysis) {
// ESD filter task configuration.
gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskESDFilter.C");
if (mgr->InitAnalysis()) {
mgr->PrintStatus();
// if (kSaveTrain || strlen(config_file)) gSystem->ChangeDirectory(kTrainName);
- if (!strcmp(plugin_mode, "submit")&&smode=="GRID"){
+ if (!strcmp(plugin_mode,"submit")&&smode=="GRID"){
TString alien_workdir = gGrid->GetHomeDirectory();
if (iAODanalysis) alien_workdir += "analysisAOD";
else alien_workdir += "analysisESD";
AliAnalysisAlien *gridhandler = (AliAnalysisAlien*)mgr->GetGridHandler();
- printf("=== Registering jdl in the work directory alien://%s/%s, should be done by the manager! ===\n",
+ printf("=== AnalysisTrainPWG4Jets:: Registering jdl in the work directory alien://%s/%s, should be done by the manager! ===\n",
alien_workdir.Data(),gridhandler->GetGridOutputDir());
TFile::Cp(Form("file:%s.jdl",kTrainName.Data()), Form("alien://%s/%s/%s.jdl",alien_workdir.Data(),
gridhandler->GetGridOutputDir(),kTrainName.Data()));
StartAnalysis(smode, chain);
if (!strcmp(plugin_mode, "offline")&&smode=="GRID"){
- // Offline mode path files
- // PatchJDL();
- PatchAnalysisMacro();
- }
+ // Offline mode path files
+ // PatchJDL();
+ PatchAnalysisMacro();
+ }
- if (kSaveTrain && smode=="GRID") {
- AliAnalysisAlien *gridhandler = (AliAnalysisAlien*)mgr->GetGridHandler();
- TString alien_workdir = gGrid->GetHomeDirectory();
- if (iAODanalysis) alien_workdir += "analysisAOD";
+ if (kSaveTrain && smode=="GRID") {
+ AliAnalysisAlien *gridhandler = (AliAnalysisAlien*)mgr->GetGridHandler();
+ TString alien_workdir = gGrid->GetHomeDirectory();
+ if (iAODanalysis) alien_workdir += "analysisAOD";
else alien_workdir += "analysisESD";
- // kGridOutdir = gridhandler->GetGridOutputDir();
- printf("=== Registering ConfigTrain.C in the work directory <%s> ===\n",
+ // kGridOutdir = gridhandler->GetGridOutputDir();
+ printf("=== Registering ConfigTrain.C in the work directory <%s> ===\n",
alien_workdir.Data());
- if (AliAnalysisAlien::FileExists(Form("%s/%sConfig.C", alien_workdir.Data(), kTrainName.Data())))
- gGrid->Rm(Form("%s/%sConfig.C", alien_workdir.Data(), kTrainName.Data()));
- if (strcmp(plugin_mode, "test"))
- TFile::Cp(Form("file:%sConfig.C",kTrainName.Data()), Form("alien://%s/%sConfig.C", alien_workdir.Data(), kTrainName.Data()));
- }
-}
+ if (AliAnalysisAlien::FileExists(Form("%s/%sConfig.C", alien_workdir.Data(), kTrainName.Data())))
+ gGrid->Rm(Form("%s/%sConfig.C", alien_workdir.Data(), kTrainName.Data()));
+ if (strcmp(plugin_mode, "test"))
+ TFile::Cp(Form("file:%sConfig.C",kTrainName.Data()), Form("alien://%s/%sConfig.C", alien_workdir.Data(), kTrainName.Data()));
+ }
+ }
}
//______________________________________________________________________________
if (!strcmp(mode, "GRID")) imode = 2;
-
+ if (kUseCPAR) {
+ kPluginAliRootVersion = ""; // NO aliroot if we use CPAR
+ }
if (imode==1) {
if (!kUsePAR) {
if (iESDfilter)
::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "ESD filter disabled in analysis on AOD's");
iESDfilter = 0;
+ if (iPhysicsSelection)
+ ::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "Physics Selection disabled in analysis on AOD's");
+ iPhysicsSelection = 0;
if (!iAODhandler) {
if (iJETAN)
::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "JETAN disabled in analysis on AOD's without AOD handler");
if (!kUseTR) {
// ::Info("AnalysisTrainPWG4Jets.C::CheckModuleFlags", "iPWG2evchar disabled if not reading track references");
}
- if (iJETAN) iESDfilter=1;
+ if (iJETAN){
+ iESDfilter=1;
+ }
if (!iESDfilter){
kUseKinefilter = kFALSE;
kUseMuonfilter = kFALSE;
if (!LoadLibrary("PWG3base", mode, kTRUE) ||
!LoadLibrary("PWG3muon", mode, kTRUE)) return kFALSE;
}
+ if(iPhysicsSelection){
+ // if (!LoadLibrary("PWG0base", mode, kTRUE) ||!LoadLibrary("PWG0dep", mode, kTRUE)) return kFALSE;
+ }
// JETAN
if (iJETAN||iDIJETAN) {
if (!strcmp(mode, "PROOF")){
// gProof->Exec("gSystem->Load\(\"/afs/cern.ch/user/d/dperrino/public/libsiscone.so\"\)", kTRUE);
gProof->Exec("gSystem->Load\(\"/afs/cern.ch/user/d/dperrino/public/libSISConePlugin.so\"\)", kTRUE);
}
- if (!LoadLibrary("libCGAL.so", mode, kTRUE)) return kFALSE;
- if (!LoadLibrary("libfastjet.so", mode, kTRUE)) return kFALSE;
- if (!LoadLibrary("libsiscone.so", mode, kTRUE)) return kFALSE;
- if (!LoadLibrary("libSISConePlugin.so", mode, kTRUE)) return kFALSE;
if (!LoadLibrary("JETAN", mode, kTRUE)) return kFALSE;
+ if(!kUsePAR){
+ if (!LoadLibrary("CGAL", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("fastjet", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("siscone", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("SISConePlugin", mode, kTRUE)) return kFALSE;
+ }
+ else{
+ // par files plus FASTJET needs some extra work... need to change
+ // the loading sequence in the auto generated .C file
+ if (!LoadLibrary("libCGAL.so", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("libfastjet.so", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("libsiscone.so", mode, kTRUE)) return kFALSE;
+ if (!LoadLibrary("libSISConePlugin.so", mode, kTRUE)) return kFALSE;
+ }
if (!LoadLibrary("FASTJETAN", mode, kTRUE)) return kFALSE;
}
if(iPWG4JetTasks){
return kFALSE;
}
if (rec) anaLibs += Form("%s.so ",mod.Data());
+ if (rec) anaLibsExtra += Form("%s.so ",mod.Data());
return kTRUE;
}
// Check if the library is already loaded
plugin->SetNtestFiles(2);
// plugin->SetPreferedSE("ALICE::NIHAM::File");
// Set versions of used packages
- plugin->SetAPIVersion("V1.0x");
+ plugin->SetAPIVersion("V1.1x");
+ // plugin->SetAPIVersion("V1.0x");
+// plugin->SetAPIVersion("V2.4");
plugin->SetROOTVersion(kPluginRootVersion);
plugin->SetAliROOTVersion(kPluginAliRootVersion);
// Declare input data to be processed.
ifstream in1;
in1.open(kGridLocalRunList.Data());
int iRun;
- while(in1>>iRun){
- Printf("AnalysisTrainPWG4Jets Adding run number from File %s", Form(kGridRunPattern.Data(),iRun));
- plugin->AddRunNumber(Form(kGridRunPattern.Data(),iRun));
+ char c;
+ char cLine[250];
+ while(!in1.eof()){
+ c = in1.get();
+ if ( (c >= '0') && (c <= '9') )
+ {
+ in1.putback (c);
+ in1>>iRun;
+ Printf("AnalysisTrainPWG4Jets Adding run number from File %s", Form(kGridRunPattern.Data(),iRun));
+ plugin->AddRunNumber(Form(kGridRunPattern.Data(),iRun));
+ }
+ else
+ {
+ in1.putback (c);
+ in1.getline(cLine,250);
+ Printf("AnalysisTrainPWG4Jets Skipping run number from File %s", cLine);
+ }
}
}
// set extra libs before par file compilation
anaLibs += kGridExtraFiles;
anaLibs = anaLibs.Strip();
- Printf("%s",anaLibs.Data());
- if (anaLibs.Length()) plugin->SetAdditionalLibs(anaLibs.Data());
+ Printf("anaLibs %s",anaLibs.Data());
+ Printf("anaLibsExtra %s",anaLibsExtra.Data());
+
+ if (anaLibs.Length()) plugin->SetAdditionalLibs(anaLibs.Data());
+ if (anaLibsExtra.Length()) plugin->SetAdditionalRootLibs(anaLibsExtra.Data());
TString ana_sources = "";
TString ana_add = "";
if (!(strcmp(filename, "default"))) {
if (!mgr->GetOutputEventHandler()) continue;
filename = mgr->GetOutputEventHandler()->GetOutputFileName();
- if (listaods.Length()) listaods += ",";
+ if (listaods.Length()) listaods += " ";
listaods += filename;
- if(kIsMC){
- listaods += ",";
- listaods += "pyxsec_hists.root";
- }
} else {
- if(!listhists->Contains(filename)){
- if (listhists.Length()) listhists += ",";
+ if(!listhists.Contains(filename)){
+ if (listhists.Length()) listhists += " ";
listhists += filename;
}
}
}
if(kUseSysInfo>0){
- if (listhists.Length()) listhists += ",";
+ if (listhists.Length()) listhists += " ";
listhists += "syswatch.root";
}
+ if(kIsMC){
+ if (listaods.Length()) listaods += " ";
+ listaods += "pyxsec_hists.root";
+ }
+
+
if (mgr->GetExtraFiles().Length()) {
- if (listaods.Length()) listaods += ",";
+ if (listaods.Length()) listaods += " ";
listaods += mgr->GetExtraFiles();
- listaods.ReplaceAll(" ", ",");
}
// if we do not fill the aod we do not need to store it
- if(!kFillAOD)listaods="";
+ kGridMergeExclude = listaods;
+
+ if(!kFillAOD){
+ listaods="";
+ plugin->SetDefaultOutputs(kFALSE);
+ plugin->SetOutputFiles(listhists.Data());
+ }
+
+ listaods.ReplaceAll(" ", ",");
+ listhists.ReplaceAll(" ", ",");
if (listhists.Length()) listhists = Form("hist_archive.zip:%s@%s", listhists.Data(), kGridOutputStorages.Data());;
if (listaods.Length()) listaods = Form("aod_archive.zip:%s@%s", listaods.Data(), kGridOutputStorages.Data());;
::Fatal("AnalysisTrainPWG4Jets", "No task output !");
}
- kGridMergeExclude = listaods;
+
TString outputArchive = "log_archive.zip:stdout,stderr@ALICE::CERN::SE";
if(kUseSysInfo>0)outputArchive = "log_archive.zip:stdout,stderr,syswatch.log@ALICE::CERN::SE";
Int_t index;
index = st.Index("gSystem->Load(\"libPhysics\");");
index += strlen("gSystem->Load(\"libPhysics\");");
- if(iJETAN){
+ if(iJETAN&&kUsePAR){
TObjArray *arr;
TObjString *objstr;
arr = anaLibs.Tokenize(" ");
TString add = "";
add += "\n\n // added by CKB \n";
while ((objstr=(TObjString*)next())){
+ if(objstr->GetString().Contains("PWG3"))continue;
if(objstr->GetString().EndsWith(".so"))add += Form("gSystem->Load(\"%s\");\n",objstr->GetString().Data());
}
delete arr;
add += "// BKC \n\n";
st.Insert(index,add.Data());
}
+
+ if(kUseDebug){
+ st.Insert(index,"\n gROOT->ProcessLine(\".trace\"); // CKB \n");
+ }
+
ofstream out;
out.open(Form("%s.C", kTrainName.Data()));
if (out.bad()) {