]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/hfe/runElectronTask.C
Introduced PID method using AliAODPidHF (not yet used by default) (Rossella, AndreaR)
[u/mrichter/AliRoot.git] / PWG3 / hfe / runElectronTask.C
index 950fcd3df744385336a0d0e692cbc105ee27e4ae..6bda5a4a7100af0dc7421a66792f69111b458f8a 100644 (file)
@@ -1,7 +1,9 @@
 void SetupPar(char* pararchivename);
+void SwitchBranches(TChain *c);
 TChain * CreateXMLChain(char* xmlfile);
+TChain * CreateAODChain(const char * name = 0x0);
 
-void runElectronTask(const char *treelist = 0x0){
+void runElectronTask(const char *treelist = 0x0, Bool_t hasMC = kTRUE){
   if(!treelist){
     printf("Error: No ESD list specified\n");
     return;
@@ -20,47 +22,55 @@ void runElectronTask(const char *treelist = 0x0){
     SetupPar("CORRFW");
     SetupPar("Util");
   }
-  SetupPar("HFE");
+  //SetupPar("HFE");
+  gSystem->Load("libHFE.so");
 //  gROOT->LoadMacro("AliAnalysisTaskHFE.cxx++");
  // AliLog::SetGlobalLogLevel(AliLog::kError);
   
   // Make the ESD chain
   TString treename = treelist;
-  TChain *esdchain = 0x0;
-  if(treename.EndsWith(".xml"))
+  TChain *inputChain = 0x0;
+  Bool_t isAOD = kFALSE;
+  if(treename.EndsWith(".xml")){
     esdchain = CreateXMLChain(treelist);
-  else{
-    gROOT->LoadMacro("CreateESDChain.C");
-    esdchain = CreateESDChain(treelist, -1);
+    SwitchBranches(inputChain);
+  }else{
+    inputChain = CreateAODChain(treelist);
+    if(inputChain) isAOD = kTRUE;
+    else{
+      gROOT->LoadMacro("CreateESDChain.C");
+      inputChain = CreateESDChain(treelist, -1);
+      SwitchBranches(inputChain);
+    }
   }
-  //esdchain->SetBranchStatus("*", 0);
-  esdchain->SetBranchStatus("Calo*", 0);
-  esdchain->SetBranchStatus("*FMD*", 1);
-  esdchain->SetBranchStatus("Tracks", 1);
-  
   // Start the Analysis Manager and Create Handlers
-  AliAnalysisManager *pidEffManager = new AliAnalysisManager("Single Electron Analysis");
-  pidEffManager->SetInputEventHandler(new AliESDInputHandler);
-  pidEffManager->SetMCtruthEventHandler(new AliMCEventHandler);
+  AliAnalysisManager *hfeAnalysis = new AliAnalysisManager("Single Electron Analysis");
+  if(!isAOD) hfeAnalysis->SetInputEventHandler(new AliESDInputHandler);
+  else hfeAnalysis->SetInputEventHandler(new AliAODInputHandler);
+  if(hasMC && !isAOD) hfeAnalysis->SetMCtruthEventHandler(new AliMCEventHandler);
   AliHFEcuts *hfecuts = new AliHFEcuts;
   hfecuts->CreateStandardCuts();
   AliAnalysisTaskHFE *task = new AliAnalysisTaskHFE;
+  if(hasMC) task->SetHasMCData();
+  if(isAOD) task->SetAODAnalysis();
   task->SetHFECuts(hfecuts);
-  task->SetPIDStrategy("Strategy4");
+  task->SetPIDStrategy(4);
   task->SetQAOn(AliAnalysisTaskHFE::kPIDqa);
   task->SetQAOn(AliAnalysisTaskHFE::kMCqa);
-  task->SetSecVtxOn();
-  pidEffManager->AddTask(task);
-  task->ConnectInput(0, pidEffManager->GetCommonInputContainer());
-  task->ConnectOutput(0, pidEffManager->CreateContainer("nEvents", TH1I::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
-  task->ConnectOutput(1, pidEffManager->CreateContainer("Results", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
-  task->ConnectOutput(2, pidEffManager->CreateContainer("QA", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
-  
+  task->SwitchOnPlugin(AliAnalysisTaskHFE::kSecVtx);
+  //task->SwitchOnPlugin(AliAnalysisTaskHFE::kIsElecBackGround);
+  hfeAnalysis->AddTask(task);
+  task->ConnectInput(0, hfeAnalysis->GetCommonInputContainer());
+  task->ConnectOutput(1, hfeAnalysis->CreateContainer("nEvents", TH1I::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
+  task->ConnectOutput(2, hfeAnalysis->CreateContainer("Results", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
+  task->ConnectOutput(3, hfeAnalysis->CreateContainer("QA", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));
+  //task->ConnectOutput(3, hfeAnalysis->CreateContainer("QA-new", TList::Class(), AliAnalysisManager::kOutputContainer, "HFEtask.root"));  
   // Run the Analysis
-  if(pidEffManager->InitAnalysis()){  
+  if(hfeAnalysis->InitAnalysis()){  
     TStopwatch timer;
     timer.Start();
-    pidEffManager->StartAnalysis("local", esdchain);
+    hfeAnalysis->StartAnalysis("local", inputChain);
     timer.Stop();
     timer.Print();
   }
@@ -128,6 +138,28 @@ TChain * CreateXMLChain(char* xmlfile)
   return chain;
 }
 
+//______________________________________________________________________________
+TChain *CreateAODChain(const char * name){
+  if(!name) return NULL;
+  ifstream filelist(name);
+  string filename;
+  TChain *c = new TChain("aodTree");
+  Bool_t isAODlist = kTRUE;
+  while(getline(filelist,filename)){
+    if(!strstr(filename.c_str(), "AliAOD")){
+      isAODlist = kFALSE;
+      break;
+    }
+    c->Add(filename.c_str());
+  }
+  if(!isAODlist){
+    printf("No AOD anlysis");
+    delete c;
+    return NULL;
+  }
+  return c;
+}
+
 //______________________________________________________________________________
 void SetupPar(char* pararchivename)
 {
@@ -161,3 +193,10 @@ void SetupPar(char* pararchivename)
     printf("Current dir: %s\n", ocwd.Data());
   }
 }
+
+void SwitchBranches(TChain *c){
+  //esdchain->SetBranchStatus("*", 0);
+  c->SetBranchStatus("Calo*", 0);
+  c->SetBranchStatus("*FMD*", 1);
+  c->SetBranchStatus("Tracks", 1);
+}