]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
committing on behalf of Silvia... new macros for HFE analysis on the train (Markus
authorandronic <andronic@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 5 Jan 2011 17:16:37 +0000 (17:16 +0000)
committerandronic <andronic@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 5 Jan 2011 17:16:37 +0000 (17:16 +0000)
Fasel); all macros now relocated in their new directory.

PWG3/hfe/AddTaskHFE.C [deleted file]
PWG3/hfe/macros/AddTaskHFE.C [new file with mode: 0644]
PWG3/hfe/macros/ConfigHFEhm.C [new file with mode: 0644]
PWG3/hfe/macros/ConfigHFEstandard.C [new file with mode: 0644]
PWG3/hfe/macros/ConfigHFEstandard_PbPb.C [new file with mode: 0644]
PWG3/hfe/macros/ConfigHFEtest.C [new file with mode: 0644]
PWG3/hfe/macros/ConfigHFEtrd.C [new file with mode: 0644]
PWG3/hfe/macros/runAlien.C [new file with mode: 0644]
PWG3/hfe/macros/runElectronTask.C [moved from PWG3/hfe/runElectronTask.C with 100% similarity]
PWG3/hfe/macros/testUnfolding.C [moved from PWG3/hfe/testUnfolding.C with 100% similarity]

diff --git a/PWG3/hfe/AddTaskHFE.C b/PWG3/hfe/AddTaskHFE.C
deleted file mode 100644 (file)
index 6942f8a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-AliAnalysisTask *AddTaskHFE(){
-  //get the current analysis manager
-  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-  if (!mgr) {
-    Error("AddTaskHFE", "No analysis manager found.");
-    return NULL;
-  }
-  if (!mgr->GetInputEventHandler()) {
-    ::Error("AddTaskHFE", "This task requires an input event handler");
-    return NULL;
-  }  
-  TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
-  if (type=="AOD"){
-    ::Error("AddTaskHFE", "The tasks exits because AODs are in input");
-    return NULL;
-  }
-  Bool_t MCthere=kTRUE;
-  AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*>(mgr->GetMCtruthEventHandler());
-  if(!mcH){
-    MCthere=kFALSE;
-  }
-
-  //============= Set Task Name ===================
-  //TString taskName=("AliAnalysisTaskHFE.cxx+");
-  //===============================================
-
-  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCuts","HFE Standard Cuts");
-  hfecuts->CreateStandardCuts();
-  hfecuts->SetMinNClustersTPC(110);
-  hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
-  hfecuts->SetCheckITSLayerStatus(kFALSE);
-  hfecuts->SetSigmaToVertex(10);
-  hfecuts->SetQAOn();
-  //hfecuts->SetMinNTrackletsTRD(5);
-
-  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE("HFEanalysis");
-  task->SetESDAnalysis();
-  if (MCthere)
-    task->SetHasMCData(kTRUE);
-  else{
-    task->SetHasMCData(kFALSE);
-    task->SelectCollisionCandidates();
-  }
-
-  task->SetPIDStrategy(6);
-  task->SetHFECuts(hfecuts);
-  if(!MCthere){
-    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "[0]+[1]*TMath::Erf([2]*x+[3])", 0, 20);
-    hBackground->SetParameter(0, 0.2194);
-    hBackground->SetParameter(1, 0.217);
-    hBackground->SetParameter(2, 0.6829);
-    hBackground->SetParameter(3, -2.697);
-    task->SetBackGroundFactorsFunction(hBackground);
-  }
-
-  // kPIDqa needs to be off for flat pT spectra !!!
-  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
-  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
-  //task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
-  //task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
-
-  mgr->AddTask(task);
-
-  //----------------------
-  //create data containers
-  //----------------------
-  //find input container
-  AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
-  TString containerName = mgr->GetCommonFileName();
-  containerName += ":PWG3_hfe";
-  
-  task->ConnectOutput(1, mgr->CreateContainer("HFE_nEvents", TH1I::Class(),
-                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
-  task->ConnectOutput(2, mgr->CreateContainer("HFE_Results", TList::Class(),
-                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
-  task->ConnectOutput(3, mgr->CreateContainer("HFE_QA", TList::Class(),
-                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
-  mgr->ConnectInput  (task,  0, cinput );
-  
-  return task;
-}
diff --git a/PWG3/hfe/macros/AddTaskHFE.C b/PWG3/hfe/macros/AddTaskHFE.C
new file mode 100644 (file)
index 0000000..577e752
--- /dev/null
@@ -0,0 +1,63 @@
+AliAnalysisTask *AddTaskHFE(){
+  //get the current analysis manager
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+  if (!mgr) {
+    Error("AddTaskHFE", "No analysis manager found.");
+    return NULL;
+  }
+  if (!mgr->GetInputEventHandler()) {
+    ::Error("AddTaskHFE", "This task requires an input event handler");
+    return NULL;
+  }  
+  TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
+  if (type=="AOD"){
+    ::Error("AddTaskHFE", "The tasks exits because AODs are in input");
+    return NULL;
+  }
+  Bool_t MCthere=kTRUE;
+  AliMCEventHandler *mcH = dynamic_cast<AliMCEventHandler*>(mgr->GetMCtruthEventHandler());
+  if(!mcH){
+    MCthere=kFALSE;
+  }
+
+  //============= Set Task Name ===================
+  //TString taskName=("AliAnalysisTaskHFE.cxx+");
+  //===============================================
+  
+  gROOT->LoadMacro(Form("%s/PWG3/hfe/macros/ConfigHFEstandard.C", gSystem->Getenv("ALICE_ROOT")));
+  //gROOT->LoadMacro(Form("%s/PWG3/hfe/macros/ConfigHFEtrd.C", gSystem->Getenv("ALICE_ROOT")));
+
+  AliAnalysisTaskHFE *hfetask = ConfigHFEstandard(MCthere);
+  mgr->AddTask(hfetask);
+
+  //----------------------
+  //create data containers
+  //----------------------
+  //find input container
+  AliAnalysisDataContainer *cinput  = mgr->GetCommonInputContainer();
+  TString containerName = mgr->GetCommonFileName();
+  containerName += ":PWG3_hfe";
+  
+  hfetask->ConnectOutput(1, mgr->CreateContainer("HFE_Results", TList::Class(),
+                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
+  hfetask->ConnectOutput(2, mgr->CreateContainer("HFE_QA", TList::Class(),
+                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
+  mgr->ConnectInput  (hfetask,  0, cinput );
+  
+/*
+  AliAnalysisTaskHFE *trdtask = ConfigHFEtrd(MCthere);
+
+  //----------------------
+  //create data containers
+  //----------------------
+  trdtask->ConnectOutput(1, mgr->CreateContainer("HFE_Results", TList::Class(),
+                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
+  trdtask->ConnectOutput(2, mgr->CreateContainer("HFE_QA", TList::Class(),
+                                             AliAnalysisManager::kOutputContainer, containerName.Data()));
+  mgr->ConnectInput  (trdtask,  0, cinput );
+*/
+
+  return hfetask;
+}
diff --git a/PWG3/hfe/macros/ConfigHFEhm.C b/PWG3/hfe/macros/ConfigHFEhm.C
new file mode 100644 (file)
index 0000000..f44acec
--- /dev/null
@@ -0,0 +1,53 @@
+AliAnalysisTaskHFE *ConfigHFEhm(Bool_t useMC){
+  //
+  // HFE standard task configuration
+  //
+
+  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsHM","HFE cuts for High Multiplicity studies");
+  hfecuts->CreateStandardCuts();
+  hfecuts->SetMinNClustersTPC(110);
+  hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
+  hfecuts->SetCheckITSLayerStatus(kFALSE);
+  hfecuts->SetSigmaToVertex(10);
+  hfecuts->SetQAOn();
+  //hfecuts->SetMinNTrackletsTRD(5);
+
+  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE("HFEanalysisHM");
+  task->SetHFECuts(hfecuts);
+
+  // Define Variables
+  AliHFEvarManager *vm = task->GetVarManager();
+  vm->AddVariable("pt");
+  vm->AddVariable("eta");
+  vm->AddVariable("phi");
+  vm->AddVariable("charge");
+  vm->AddVariable("source");
+
+  if(!useMC){
+    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "[0]+[1]*TMath::Erf([2]*x+[3])", 0, 20);
+    hBackground->SetParameter(0, 0.1249);
+    hBackground->SetParameter(1, 0.1239);
+    hBackground->SetParameter(2, 0.8156);
+    hBackground->SetParameter(3, -2.867);
+    task->SetBackGroundFactorsFunction(hBackground);
+  }
+
+  // Define PID
+  AliHFEpid *pid = task->GetPID();
+  pid->AddDetector("TOF", 0);
+  pid->AddDetector("TPC", 1);
+  pid->ConfigureTPCrejection();
+
+  // QA
+  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
+  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);    
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
+
+  printf("*************************************\n");
+  printf("Configuring high multiplicity Task:\n");
+  task->Print();
+  pid->PrintStatus();
+  printf("*************************************\n");
+  return task;
+}
diff --git a/PWG3/hfe/macros/ConfigHFEstandard.C b/PWG3/hfe/macros/ConfigHFEstandard.C
new file mode 100644 (file)
index 0000000..61077bf
--- /dev/null
@@ -0,0 +1,100 @@
+AliAnalysisTaskHFE* ConfigHFEstandard(Bool_t useMC){
+  //
+  // HFE standard task configuration
+  //
+
+  Bool_t kAnalyseTaggedTracks = kTRUE;
+  
+  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCuts","HFE Standard Cuts");
+  hfecuts->CreateStandardCuts();
+  //hfecuts->SetTPCiter1(kTRUE);
+  hfecuts->SetMinNClustersTPC(100);
+  //hfecuts->SetMinNClustersITS(1);
+  hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
+  hfecuts->SetCheckITSLayerStatus(kFALSE);
+  hfecuts->UnsetVertexRequirement();
+  hfecuts->SetVertexRange(10.);
+  //hfecuts->SetSigmaToVertex(10);
+  hfecuts->SetQAOn();
+  //hfecuts->SetMinNTrackletsTRD(5);
+
+  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE("HFEanalysisStandard");
+  printf("task %p\n", task);
+  task->SetHFECuts(hfecuts);
+  task->SetRemovePileUp(kTRUE);
+
+  // Define Variables
+  AliHFEvarManager *vm = task->GetVarManager();
+  vm->AddVariable("pt");
+  vm->AddVariable("eta");
+  vm->AddVariable("phi");
+  vm->AddVariable("charge");
+  vm->AddVariable("source");
+  //vm->AddVariable("centrality");
+
+  if(!useMC){
+    // New background model (LHC10d pass2)
+    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "TMath::Min(0.99, TMath::Max(0., TMath::Exp([0]+[1]*x) + [2]*TMath::Gaus(x,[3],[4])))", 0., 20.);
+    hBackground->SetParameter(0, -7.267);
+    hBackground->SetParameter(1, 1.442);
+    hBackground->SetParameter(2, 0.02579);
+    hBackground->SetParameter(3, 2.066);
+    hBackground->SetParameter(4, 0.3016);
+/*
+    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "[0]+[1]*TMath::Erf([2]*x+[3])", 0, 20);
+    hBackground->SetParameter(0, 8.19639e-02);
+    hBackground->SetParameter(1, 7.66857e-02);
+    hBackground->SetParameter(2, 8.74797e-01);
+    hBackground->SetParameter(3, -2.69972e+00);
+*/
+/*    hBackground->SetParameter(0, 0.1249);
+    hBackground->SetParameter(1, 0.1239);
+    hBackground->SetParameter(2, 0.8156);
+    hBackground->SetParameter(3, -2.867);*/
+    task->SetBackGroundFactorsFunction(hBackground);
+  }
+
+  // Define PID
+  AliHFEpid *pid = task->GetPID();
+  if(useMC) pid->SetHasMCData(kTRUE);
+  pid->AddDetector("TOF", 0);
+  pid->AddDetector("TPC", 1);
+  pid->ConfigureTPCrejection();
+  // Define electron line correction
+  /*TF1 *elelinecorrection = new TF1("elelinecorrection", "[0]*TMath::Exp([1]*x", 0.. 20.);
+  elelinecorrection->SetParameter(0, -1.28330e-01);
+  elelinecorrection->SetParameter(1, -2.53721e-01);
+  AliHFEpidTPC *tpcpid = dynamic_cast<AliHFEpidTPC *>(pid->GetDetPID(AliHFEpid::kTPCpid));
+  tpcpid->SetElectronMeanCorrection(elelinecorrection);*/
+
+  if(kAnalyseTaggedTracks){
+    AliHFEcuts *v0trackCuts = new AliHFEcuts("V0trackCuts", "Track Cuts for tagged track Analysis");
+    v0trackCuts->CreateStandardCuts();
+    v0trackCuts->SetMinNClustersTPC(60);
+    v0trackCuts->SetMinNClustersITS(1);
+    v0trackCuts->SetCutITSpixel(AliHFEextraCuts::kAny);
+    v0trackCuts->SetCheckITSLayerStatus(kFALSE);
+    v0trackCuts->UnsetVertexRequirement();
+    //hfecuts->SetSigmaToVertex(10);
+    v0trackCuts->SetQAOn();
+
+    task->SwitchOnPlugin(AliAnalysisTaskHFE::kTaggedTrackAnalysis);
+    task->SetTaggedTrackCuts(v0trackCuts);
+    task->SetCleanTaggedTrack(kTRUE);
+  }
+
+  // QA
+  printf("task %p\n", task);
+  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
+  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);    
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kDEstep);
+
+  printf("*************************************\n");
+  printf("Configuring standard Task:\n");
+  task->PrintStatus();
+  pid->PrintStatus();
+  printf("*************************************\n"); 
+  return task;
+}
diff --git a/PWG3/hfe/macros/ConfigHFEstandard_PbPb.C b/PWG3/hfe/macros/ConfigHFEstandard_PbPb.C
new file mode 100644 (file)
index 0000000..fb25fbd
--- /dev/null
@@ -0,0 +1,62 @@
+AliAnalysisTaskHFE* ConfigHFEstandard_PbPb(Bool_t useMC){
+  //
+  // HFE standard task configuration
+    //
+
+  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCuts","HFE Standard Cuts");
+  hfecuts->CreateStandardCuts();
+  hfecuts->SetMinNClustersTPC(80);
+  hfecuts->SetMinNClustersITS(3);
+  hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
+  hfecuts->SetCheckITSLayerStatus(kFALSE);
+  hfecuts->UnsetVertexRequirement();
+  hfecuts->SetSigmaToVertex(10);
+  hfecuts->SetQAOn();
+  //hfecuts->SetMinNTrackletsTRD(5);
+
+  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE("HFEanalysisStandard");
+  task->SetHFECuts(hfecuts);
+//  task->SetRemovePileUp(kTRUE);
+
+  // Define Variables
+  AliHFEvarManager *vm = task->GetVarManager();
+  vm->AddVariable("pt");
+  vm->AddVariable("eta");
+  vm->AddVariable("phi");
+  vm->AddVariable("charge");
+  vm->AddVariable("source");
+  vm->AddVariable("centrality");
+
+  if(!useMC){
+    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "[0]+[1]*TMath::Erf([2]*x+[3])", 0, 20);
+    hBackground->SetParameter(0, 8.19639e-02);
+    hBackground->SetParameter(1, 7.66857e-02);
+    hBackground->SetParameter(2, 8.74797e-01);
+    hBackground->SetParameter(3, -2.69972e+00);
+/*    hBackground->SetParameter(0, 0.1249);
+    hBackground->SetParameter(1, 0.1239);
+    hBackground->SetParameter(2, 0.8156);
+    hBackground->SetParameter(3, -2.867);*/
+    task->SetBackGroundFactorsFunction(hBackground);
+  }
+
+  // Define PID
+  AliHFEpid *pid = task->GetPID();
+  if(useMC) pid->SetHasMCData(kTRUE);
+  pid->AddDetector("TOF", 0);
+  pid->AddDetector("TPC", 1);
+  pid->ConfigureTPCrejection();
+
+  // QA
+  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
+  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);    
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
+
+  printf("*************************************\n");
+  printf("Configuring standard Task:\n");
+  task->Print();
+  pid->PrintStatus();
+  printf("*************************************\n"); 
+  return task;
+}
diff --git a/PWG3/hfe/macros/ConfigHFEtest.C b/PWG3/hfe/macros/ConfigHFEtest.C
new file mode 100644 (file)
index 0000000..d541570
--- /dev/null
@@ -0,0 +1,55 @@
+AliAnalysisTaskHFE *ConfigHFEtest(Bool_t useMC){
+  //
+  // HFE standard task configuration
+  //
+
+  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsTest","HFE Standard Cuts with slight variation");
+  hfecuts->CreateStandardCuts();
+  hfecuts->SetMinNClustersTPC(100);
+  hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
+  hfecuts->SetCheckITSLayerStatus(kFALSE);
+  hfecuts->SetSigmaToVertex(10);
+  hfecuts->SetQAOn();
+  //hfecuts->SetMinNTrackletsTRD(5);
+
+  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE("HFEanalysis1");
+  task->SetHFECuts(hfecuts);
+
+  // Define Variables
+  AliHFEvarManager *vm = task->GetVarManager();
+  vm->AddVariable("pt");
+  vm->AddVariable("eta");
+  vm->AddVariable("phi");
+  vm->AddVariable("charge");
+  vm->AddVariable("source");
+
+  if(!useMC){
+    TF1 *hBackground = new TF1("hadronicBackgroundFunction", "[0]+[1]*TMath::Erf([2]*x+[3])", 0, 20);
+    hBackground->SetParameter(0, 8.19639e-02); 
+    hBackground->SetParameter(1, 7.66857e-02); 
+    hBackground->SetParameter(2, 8.74797e-01); 
+    hBackground->SetParameter(3, -2.69972e+00);
+
+    task->SetBackGroundFactorsFunction(hBackground);
+  }
+
+  // Define PID
+  AliHFEpid *pid = task->GetPID();
+  if(useMC) pid->SetHasMCData(kTRUE);
+  pid->AddDetector("TOF", 0);
+  pid->AddDetector("TPC", 1);
+  pid->ConfigureTPCrejection();
+
+  // QA
+  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
+  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);    
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
+
+  printf("*************************************\n");
+  printf("Configuring standard Task:\n");
+  task->Print();
+  pid->PrintStatus();
+  printf("*************************************\n");
+  return task;
+}
diff --git a/PWG3/hfe/macros/ConfigHFEtrd.C b/PWG3/hfe/macros/ConfigHFEtrd.C
new file mode 100644 (file)
index 0000000..6c1d651
--- /dev/null
@@ -0,0 +1,64 @@
+AliAnalysisTaskHFE *ConfigHFEtrd(Bool_t useMC){
+  //
+  // HFE standard task configuration
+  //
+
+  AliHFEcuts *hfecuts = new AliHFEcuts("hfeCutsTRD","HFE cuts including TRD PID");
+  hfecuts->CreateStandardCuts();
+  hfecuts->SetMinNClustersTPC(110);
+  hfecuts->SetCutITSpixel(AliHFEextraCuts::kFirst);
+  hfecuts->SetCheckITSLayerStatus(kFALSE);
+  hfecuts->SetSigmaToVertex(10);
+  hfecuts->SetQAOn();
+  hfecuts->SetMinNTrackletsTRD(6);
+
+  AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE("HFEanalysisTRD");
+  printf("task %p\n", task);
+  task->SetHFECuts(hfecuts);
+
+  // Define Variables
+  AliHFEvarManager *vm = task->GetVarManager();
+  vm->AddVariable("pt");
+  vm->AddVariable("eta");
+  vm->AddVariable("phi");
+  vm->AddVariable("charge");
+  vm->AddVariable("source");
+
+  // Define PID
+  AliHFEpid *pid = task->GetPID();
+  pid->AddDetector("TOF", 0);
+  pid->AddDetector("TRD", 1);
+  pid->AddDetector("TPC", 2);
+  AliHFEpidTRD *trdpid = pid->GetDetPID(AliHFEpid::kTRDpid);
+  trdpid->SetPIDMethod(AliHFEpidTRD::kLQ);
+  trdpid->SetElectronEfficiency(0.71);
+  // New threshold parameters for LHC10d
+  const Double_t kNparams = 4;
+  Double_t par70[kNparams] = {2.29791e-02, 1.17777e-02, 4.29038e-02, 2.11955e+00};
+  Double_t par75[kNparams] = {-1.89881e+00, -2.31561e-01, 1.98553e+00, -1.04081e-01};
+  Double_t par80[kNparams] = {-1.85572e+00, -3.88746e-01, 2.01796e+00, -1.61435e-01};
+  Double_t par85[kNparams] = {2.44547e-01, -8.26956e-02, 4.49075e-02, -7.84496e-01};
+  Double_t par90[kNparams] = {1.64799e-01, 2.07216e-01, 4.43009e-01, 1.19677e+00};
+  Double_t par95[kNparams] = {8.43719e-01, 4.95028e-02, 1.11009e-01, 4.58459e+00};  
+  trdpid->SetThresholdParameters(0.71, par70);
+  trdpid->SetThresholdParameters(0.76, par75);
+  trdpid->SetThresholdParameters(0.81, par80);
+  trdpid->SetThresholdParameters(0.86, par85);
+  trdpid->SetThresholdParameters(0.91, par90);
+  trdpid->SetThresholdParameters(0.96, par95);
+  
+  // QA
+  printf("task %p\n", task);
+  task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
+  task->SetQAOn(AliAnalysisTaskHFE::kMCqa);    
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kDEstep);
+
+  printf("*************************************\n");
+  printf("Configuring standard Task:\n");
+  task->PrintStatus();
+  pid->PrintStatus();
+  printf("*************************************\n");
+  return task;
+}
diff --git a/PWG3/hfe/macros/runAlien.C b/PWG3/hfe/macros/runAlien.C
new file mode 100644 (file)
index 0000000..b3d2755
--- /dev/null
@@ -0,0 +1,203 @@
+//-----------------Global variables for the the analysis------------------------
+TString aliroot_version = "v4-21-11-AN";
+TString analysis_mode = "";
+TString output_file = "PWG3hfe.root";
+TString root_version = "";
+TString api_version = "V1.1x";
+TString input_data = "";
+
+//___________________________________________________________
+Bool_t FindDependentPackages(){
+  // Find packages where aliroot depends on
+  // Method is the following: the dependencies are on a webpage on alimonitor
+  // we download file and try to find the aliroot expression in the file. The line
+  // we read into a string. The we tokenize the string and look for the expression VO_ALICE@ROOT::
+  // Then we have all information we need
+  const char *wd = gSystem->pwd(); 
+  gSystem->cd("/tmp");
+  gSystem->Exec("wget http://alimonitor.cern.ch/packages");
+  TString setting = gSystem->GetFromPipe(Form("cat index.html | grep VO_ALICE@AliRoot::%s", aliroot_version.Data()));
+  gSystem->Exec("rm index.html");
+  gSystem->cd(wd);
+  if(!setting.Length()) return kFALSE;
+  TObjArray *tokens = setting.Tokenize(";");
+  TIter tokiter(tokens);
+  TObjString *os = NULL;
+  while((os = dynamic_cast<TObjString *>(tokiter()))){
+    TString &mys = os->String();
+    if(!mys.Contains("VO_ALICE@ROOT")) continue;
+    mys.ReplaceAll("VO_ALICE@ROOT::", "");
+    mys.ReplaceAll("&quot","");
+    root_version = mys;
+    break;
+  }
+  // print results:
+  printf("Found Packages for Analysis:\n");
+  printf("=====================================\n");
+  printf("ALIROOT: %s\n", aliroot_version.Data());
+  printf("ROOT:    %s\n", root_version.Data());
+  printf("\n");
+  return kTRUE;
+}
+
+//___________________________________________________________
+AliAnalysisAlien *CreateAlienHandler(Bool_t isProof){
+  //if(!AliAnalysisGrid::CreateToken()) return NULL;
+  if(!FindDependentPackages()) return NULL;
+  AliAnalysisAlien *alienplugin = new AliAnalysisAlien;
+   
+  // common settings
+  alienplugin->SetAliROOTVersion(aliroot_version);
+  alienplugin->SetROOTVersion(root_version);
+  alienplugin->SetAPIVersion(api_version);
+  alienplugin->SetAdditionalLibs("libPWG3hfe.so");
+  alienplugin->SetDefaultOutputs(kTRUE);
+  if(isProof){
+    // proof mode
+    if(analysis_mode.Contains("test")) alienplugin->SetRunMode("test");
+    alienplugin->SetProofCluster("alice_caf.cern.ch");
+    alienplugin->SetRootVersionForProof(root_version);
+    alienplugin->SetAliRootMode("aliroot");
+  } else {
+    // grid mode
+    alienplugin->SetRunMode(analysis_mode.Data());
+    // default setting that need no deeper logic
+    alienplugin->SetJDLName("hfeanalysis.jdl");
+    alienplugin->SetExecutable("hfeanalysis.sh");
+    alienplugin->SetAnalysisMacro("hfeanalysis.C");
+    alienplugin->SetValidationScript("hfevalidate.sh");
+    alienplugin->SetGridWorkingDir("hfeanalysis");
+    /*alienplugin->SetOutputArchive();
+    alienplugin->SetDefaultOutputs();*/
+    alienplugin->SetOverwriteMode();
+    alienplugin->SetFastReadOption();
+    alienplugin->SetSplitMaxInputFileNumber(5);
+    alienplugin->SetTTL(30000);
+    alienplugin->SetInputFormat("xml-single");
+    alienplugin->SetPrice(1);
+    alienplugin->SetSplitMode("se");
+    alienplugin->SetNtestFiles(1);
+
+    // Merging setting, only needed in terminate or full mode
+    if(analysis_mode.Contains("full") || analysis_mode.Contains("terminate")){
+      alienplugin->SetMergeViaJDL();
+      alienplugin->SetMaxMergeFiles(50);
+      alienplugin->SetMaxMergeStages(5);
+    }
+  }
+  return alienplugin;
+}
+
+//___________________________________________________________
+void DecodeDataString(const TString &datastring, TString &sample, TArrayI &listofruns){
+  TObjArray *toks = datastring.Tokenize(":");
+  sample = (dynamic_cast<TObjString *>(toks->At(0)))->String();
+  TString &listrunstring = (dynamic_cast<TObjString *>(toks->At(1)))->String();
+  TObjArray *runstrings = listrunstring.Tokenize(",");
+  TIter runiter(runstrings);
+  listofruns.Set(runstrings->GetEntriesFast());
+  TObjString *myrunstring = NULL;
+  Int_t counter = 0;
+  while((myrunstring = dynamic_cast<TObjString *>(runiter()))) listofruns[counter++] = myrunstring->String().Atoi();  
+  // Print summary:
+  printf("Selected sample: %s\n", sample.Data());
+  printf("========================================\n");
+  for(Int_t irun = 0; irun < listofruns.GetSize(); irun++){
+    printf("\trun %d\n", listofruns[irun]);
+  }
+  printf("\n");
+  delete toks; delete runstrings;
+}
+
+//___________________________________________________________
+Int_t GetYear(TString &sample){
+  TString yearstring = sample(3,4); 
+  Int_t year = yearstring.Atoi();
+  return 2000 + year;
+}
+
+//___________________________________________________________
+void AddInput(AliAnalysisAlien *alienhandler, TString sample, TArrayI &listofruns, Bool_t MC){
+  Int_t year = GetYear(sample);
+  TString specialpattern, datapattern;
+  if(!MC){
+    // handle Data
+    datapattern = "ESDs/pass2/*ESDs.root";
+    specialpattern = Form("data/%d", year);
+    //alienhandler->SetRunPrefix("%09d");
+  } else {
+    // handle MC
+    datapattern = "*ESDs.root";
+    specialpattern = "sim";
+  }
+  alienhandler->SetGridDataDir(Form("/alice/%s/%s", specialpattern.Data(), sample.Data()));
+  alienhandler->SetDataPattern(datapattern.Data());
+  for(Int_t ien = 0; ien < listofruns.GetSize(); ien++){
+    if(!MC) alienhandler->AddRunNumber(Form("%09d", listofruns[ien]));
+    else alienhandler->AddRunNumber(listofruns[ien]);
+  }
+  alienhandler->SetGridOutputDir(sample.Data());
+  alienhandler->SetOutputToRunNo();
+}
+
+//___________________________________________________________
+void runAlien(TString data, TString mode = "test", Bool_t MC = kFALSE){  
+  if(!gSystem->Getenv("ALICE_ROOT")){
+    printf("AliRoot has to be initialized\n");  
+    return;
+  }
+  
+  // check for valid modes
+  const int kModes = 5;
+  TString allowed_modes[kModes] = {"proof", "prooftest", "test", "full", "submit"}; 
+  Bool_t isValid = kFALSE;
+  mode.ToLower();
+  for(int imode = 0; imode < kModes; imode++){
+    if(!mode.CompareTo(allowed_modes[imode])) isValid = kTRUE;
+  }
+  if(!isValid){
+    printf("invalid analysis mode selected\n");
+    return;
+  }
+  analysis_mode = mode; 
+  Bool_t proofmode = mode.Contains("proof");
+  // libraries to be loaded
+  gSystem->Load("libANALYSIS");
+  gSystem->Load("libANALYSISalice");
+  gSystem->Load("libCORRFW");
+  gSystem->Load("libPWG3hfe");
+  
+  // Create Analysis Manager
+  AliAnalysisManager *runAnalysis = new AliAnalysisManager("Heavy Flavour Electron Analysis");
+  runAnalysis->SetCommonFileName(output_file.Data());
+  runAnalysis->SetInputEventHandler(new AliESDInputHandler); 
+  if(MC) runAnalysis->SetMCtruthEventHandler(new AliMCEventHandler);
+  AliAnalysisAlien *alienhandler = CreateAlienHandler(proofmode);
+  printf("alienhandler %p\n", alienhandler);
+  runAnalysis->SetGridHandler(alienhandler);
+  //return;
+  
+  // Specify input (runs or dataset)
+  if(!proofmode){
+    // Query sample ID and runs
+    TString sample;
+    TArrayI listofruns;
+    DecodeDataString(data, sample, listofruns);
+    AddInput(alienhandler, sample, listofruns, MC);
+  } else {
+    alienhandler->SetProofDataSet(data);
+  }
+
+  // Add Tasks
+  gROOT->LoadMacro(Form("%s/ANALYSIS/macros/AddTaskPhysicsSelection.C", gSystem->Getenv("ALICE_ROOT")));
+  gROOT->LoadMacro(Form("%s/PWG3/hfe/macros/AddTaskHFE.C", gSystem->Getenv("ALICE_ROOT")));
+  AddTaskPhysicsSelection(MC);
+  AddTaskHFE();     // @TODO: MC and PbPb flag to be fixed
+
+  // Run Analysis
+  TString anamode = proofmode ? "proof" : "grid";
+  if(runAnalysis->InitAnalysis()){
+    runAnalysis->PrintStatus();
+    runAnalysis->StartAnalysis(anamode);
+  }
+}