]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG4/PartCorrBase/AliAnalysisTaskParticleCorrelation.cxx
Fix Coverity
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / AliAnalysisTaskParticleCorrelation.cxx
index cdea274f66f945f0a6c41ae93bc391186aae2fcf..b86c66839d80805046e7f37e5fe41c2e31b5a6d3 100755 (executable)
 // --- Root ---
 #include <TROOT.h>
 #include <TInterpreter.h>
+#include <TClonesArray.h>
 //#include <Riostream.h>
+//#include <TObjectTable.h>
 
 // --- Analysis ---
 #include "AliAnalysisTaskParticleCorrelation.h"
 #include "AliAnaPartCorrMaker.h"
 #include "AliCaloTrackReader.h"
 #include "AliPDG.h"
+#include "AliAnalysisManager.h"
+#include "AliInputEventHandler.h"
 
 ClassImp(AliAnalysisTaskParticleCorrelation)
 
@@ -42,7 +46,7 @@ AliAnalysisTaskParticleCorrelation::AliAnalysisTaskParticleCorrelation():
   AliAnalysisTaskSE(),
   fAna(0x0),
   fOutputContainer(0x0),
-  fConfigName(0)
+  fConfigName(""), fCuts(0x0)
 {
   // Default constructor
 }
@@ -52,24 +56,23 @@ AliAnalysisTaskParticleCorrelation::AliAnalysisTaskParticleCorrelation(const cha
   AliAnalysisTaskSE(name),
   fAna(0x0),
   fOutputContainer(0x0),
-  fConfigName("")
+  fConfigName(""), fCuts(0x0)
 {
   // Default constructor
   
   DefineOutput(1, TList::Class());
-  
+  DefineOutput(2, TList::Class());  // will contain cuts or local params
 }
 
 //_____________________________________________________
 AliAnalysisTaskParticleCorrelation::~AliAnalysisTaskParticleCorrelation() 
 {
   // Remove all pointers
-  
-  if(fOutputContainer){
+  if (fOutputContainer && ! AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
     fOutputContainer->Clear() ; 
     delete fOutputContainer ;
   }
-
+  if (fAna && ! AliAnalysisManager::GetAnalysisManager()->IsProofMode()) delete fAna;
 }
 
 //_____________________________________________________
@@ -79,17 +82,47 @@ void AliAnalysisTaskParticleCorrelation::UserCreateOutputObjects()
   if (DebugLevel() > 1) printf("AliAnalysisTaskParticleCorrelation::UserCreateOutputObjects() - Begin\n");
   
   //Get list of aod arrays, add each aod array to analysis frame 
-  TClonesArray * array = 0;
-  TList * list = fAna->GetAODBranchList();
-  for(Int_t iaod = 0; iaod < list->GetEntries(); iaod++){
-    array = (TClonesArray*) list->At(iaod);
-    AddAODBranch("TClonesArray", &array);
-  } 
+  TClonesArray *array = 0;
+  TList * list = fAna->FillAndGetAODBranchList(); //Loop the analysis and create the list of branches
+  if (DebugLevel() >= 1) printf("AliAnalysisTaskParticleCorrelation::UserCreateOutputObjects() - n AOD branches %d\n",list->GetEntries());
+  
+  //Put the delta AODs in output file, std or delta
+  if((fAna->GetReader())->WriteDeltaAODToFile()){
+    TString deltaAODName = (fAna->GetReader())->GetDeltaAODFileName();
+    for(Int_t iaod = 0; iaod < list->GetEntries(); iaod++){
+      array = (TClonesArray*) list->At(iaod);
+      if(deltaAODName!="") AddAODBranch("TClonesArray", &array, deltaAODName);//Put it in DeltaAOD file
+      else AddAODBranch("TClonesArray", &array);//Put it in standard AOD file
+    } 
+       }
   
   //Histograms container
   OpenFile(1);
   fOutputContainer = fAna->GetOutputContainer();
+  
+  if (DebugLevel() >= 1) printf("AliAnalysisTaskParticleCorrelation::UserCreateOutputObjects() - n histograms %d\n",fOutputContainer->GetEntries());
+
+  fOutputContainer->SetOwner(kTRUE);
+  
   if (DebugLevel() > 1) printf("AliAnalysisTaskParticleCorrelation::UserCreateOutputObjects() - End\n");
+  PostData(1,fOutputContainer);
+
+}
+//_____________________________________________________
+void AliAnalysisTaskParticleCorrelation::LocalInit()
+{
+       // Local Initialization
+       
+       //Call the Init to initialize the configuration of the analysis
+       Init();
+       
+       // Create cuts/param objects and publish to slot
+       fCuts = fAna->GetListOfAnalysisCuts();
+       fCuts ->SetOwner(kTRUE);
+       // Post Data
+       PostData(2, fCuts);
+       
 }
 
 //_____________________________________________________
@@ -108,7 +141,7 @@ void AliAnalysisTaskParticleCorrelation::Init()
   }
   
   if(!fAna) {
-       printf("AliAnalysisTaskParticleCorrelation::Init() - Analysis maker pointer not initialized, no analysis specified, STOP!\n");
+       printf("AliAnalysisTaskParticleCorrelation::Init() - Analysis maker pointer not initialized, no analysis specified, STOP !\n");
        abort();
   }
   
@@ -116,9 +149,16 @@ void AliAnalysisTaskParticleCorrelation::Init()
   // to avoid problems when reading MC generator particles
   AliPDG::AddParticlesToPdgDataBase();
 
+  //Set in the reader the name of the task in case is needed
+  (fAna->GetReader())->SetTaskName(GetName());
+       
   // Initialise analysis
   fAna->Init();
-  
+
+  //Delta AOD
+  if((fAna->GetReader())->GetDeltaAODFileName()!="")
+         AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile((fAna->GetReader())->GetDeltaAODFileName());
+
   if (DebugLevel() > 1) printf("AliAnalysisTaskParticleCorrelation::Init() - End\n");
   
 }
@@ -138,15 +178,18 @@ void AliAnalysisTaskParticleCorrelation::UserExec(Option_t */*option*/)
     printf("AliAnalysisTaskParticleCorrelation::UserExec() - Wrong type of data\n");
     return ;
   }
-  
+
   fAna->GetReader()->SetInputOutputMCEvent(InputEvent(), AODEvent(), MCEvent());
 
   //Process event
   fAna->ProcessEvent((Int_t) Entry(), CurrentFileName());
   //printf("AliAnalysisTaskParticleCorrelation::Current Event %d; Current File Name : %s\n",(Int_t) Entry(), CurrentFileName());
   if (DebugLevel() > 1) printf("AliAnalysisTaskParticleCorrelation::UserExec() - End\n");
-  
+       
   PostData(1, fOutputContainer);
+       
+  //gObjectTable->Print();
+
   
 }
 
@@ -157,9 +200,24 @@ void AliAnalysisTaskParticleCorrelation::Terminate(Option_t */*option*/)
   // Do some plots
 
   // Get merged histograms from the output container
-  TList *outputList = (TList*)GetOutputData(1);
   // Propagate histagrams to maker
-  fAna->Terminate(outputList);
+  fAna->Terminate((TList*)GetOutputData(1));
        
 }
 
+//_____________________________________________________
+void AliAnalysisTaskParticleCorrelation::FinishTaskOutput(){
+  // Put in the output some event summary histograms
+  AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
+  AliInputEventHandler *inputH = dynamic_cast<AliInputEventHandler*>(am->GetInputEventHandler());
+  if (!inputH) return; 
+  TH2F *histStat = dynamic_cast<TH2F*>(inputH->GetStatistics()); 
+  TH2F *histBin0 = dynamic_cast<TH2F*>(inputH->GetStatistics("BIN0"));
+  
+  if(histStat)fOutputContainer->Add(histStat); 
+  else if(DebugLevel()>0) 
+    printf("AliAnalysisTaskParticleCorrelation::FinishTaskOutput() - Stat histogram not available check, \n if ESDs, that AliPhysicsSelection was on, \n if AODs, if EventStat_temp.root exists \n");
+  if(histBin0)fOutputContainer->Add(histBin0); 
+  
+}
+