#include "iostream"
#include "TChain.h"
#include "TTree.h"
#include "TH1F.h"
#include "TCanvas.h"
#include "TList.h"
#include "TFile.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
#include "AliESDInputHandler.h"
#include "AliESDVertex.h"
#include "AliTracker.h"
#include "AliGeomManager.h"
#include "AliCentrality.h"
#include "AliESDVZERO.h"
#include "AliMultiplicity.h"
#include "AliESDtrackCuts.h"
#include "AliMCEventHandler.h"
#include "AlidNdPt.h"
#include "AlidNdPtEventCuts.h"
#include "AlidNdPtAcceptanceCuts.h"
#include "AlidNdPtTask.h"
using namespace std;
ClassImp(AlidNdPtTask)
AlidNdPtTask::AlidNdPtTask(const char *name)
: AliAnalysisTaskSE(name)
, fESD(0)
, fMC(0)
, fOutput(0)
, fPitList(0)
, fCompList(0)
, fUseMCInfo(kFALSE)
{
DefineOutput(1, TList::Class());
fCompList = new TList;
}
AlidNdPtTask::~AlidNdPtTask()
{
if(fOutput) delete fOutput; fOutput =0;
if(fCompList) delete fCompList; fCompList =0;
}
Bool_t AlidNdPtTask::Notify()
{
static Int_t count = 0;
count++;
TTree *chain = (TChain*)GetInputData(0);
if(chain)
Printf("Processing %d. file: %s", count, chain->GetCurrentFile()->GetName());
return kTRUE;
}
Bool_t AlidNdPtTask::AddAnalysisObject(AlidNdPt *pObj)
{
if(pObj == 0) {
Printf("ERROR: Could not add comparison object");
return kFALSE;
}
fCompList->AddLast(pObj);
return kTRUE;
}
void AlidNdPtTask::UserCreateOutputObjects()
{
OpenFile(1, "RECREATE");
fOutput = new TList;
fOutput->SetOwner();
fPitList = fOutput->MakeIterator();
AlidNdPt *pObj=0;
Int_t count=0;
TIterator *pitCompList = fCompList->MakeIterator();
pitCompList->Reset();
while(( pObj = (AlidNdPt *)pitCompList->Next()) != NULL) {
fOutput->Add(pObj);
count++;
}
Printf("UserCreateOutputObjects(): Number of output objects: %d \n", count);
PostData(1, fOutput);
}
void AlidNdPtTask::UserExec(Option_t *)
{
fESD = (AliESDEvent*) (InputEvent());
if (!fESD) {
Printf("ERROR: ESD event not available");
return;
}
if(fUseMCInfo) {
fMC = MCEvent();
if (!fMC) {
Printf("ERROR: MC event not available");
return;
}
}
AlidNdPt *pObj = 0;
fPitList->Reset();
while((pObj = (AlidNdPt *)fPitList->Next()) != NULL) {
pObj->Process(fESD,fMC);
}
PostData(1, fOutput);
}
void AlidNdPtTask::FinishTaskOutput()
{
fOutput = dynamic_cast<TList*> (GetOutputData(1));
if (!fOutput) {
Printf("ERROR: AlidNdPtTask::FinishTaskOutput(): Output data not avaiable GetOutputData(1)==0x0 ..." );
return;
}
AlidNdPt* pObj=0;
TIterator* itOut = fOutput->MakeIterator();
itOut->Reset();
while(( pObj = dynamic_cast<AlidNdPt*>(itOut->Next())) != NULL) {
if(pObj->GetAnalyseOutput()) {
pObj->Analyse();
}
}
PostData(1, fOutput);
}
void AlidNdPtTask::Terminate(Option_t *)
{
fOutput = dynamic_cast<TList*> (GetOutputData(1));
if (!fOutput) {
Printf("ERROR: AlidNdPtTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." );
return;
}
}