// --- 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)
AliAnalysisTaskSE(),
fAna(0x0),
fOutputContainer(0x0),
- fConfigName(0)
+ fConfigName(""), fCuts(0x0)
{
// Default constructor
}
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;
}
//_____________________________________________________
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);
+
}
//_____________________________________________________
}
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();
}
// 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");
}
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();
+
}
// 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);
+
+}
+