**************************************************************************/
//-----------------------------------------------------------------------
-// Example of task running on AliEn (CAF?)
+// Example of task (running locally, on AliEn and CAF),
// which provides standard way of calculating acceptance and efficiency
// between different steps of the procedure.
// The ouptut of the task is a AliCFContainer from which the efficiencies
#ifndef ALICFSINGLETRACKTASK_CXX
#define ALICFSINGLETRACKTASK_CXX
-#include <TROOT.h>
-#include <TInterpreter.h>
#include "AliCFSingleTrackTask.h"
#include "TCanvas.h"
#include "AliStack.h"
#include "TParticle.h"
#include "TH1I.h"
-#include "TChain.h"
-#include "AliMCEventHandler.h"
#include "AliMCEvent.h"
#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
+#include "AliAODEvent.h"
#include "AliCFManager.h"
#include "AliCFCutBase.h"
#include "AliCFContainer.h"
#include "TChain.h"
#include "AliESDtrack.h"
#include "AliLog.h"
+
ClassImp(AliCFSingleTrackTask)
+
//__________________________________________________________________________
AliCFSingleTrackTask::AliCFSingleTrackTask() :
- fChain(0x0),
- fESD(0x0),
+ fReadTPCTracks(0),
+ fReadAODData(0),
fCFManager(0x0),
fQAHistList(0x0),
fHistEventsProcessed(0x0)
{
-//Defual ctor
+ //
+ //Default ctor
+ //
}
//___________________________________________________________________________
AliCFSingleTrackTask::AliCFSingleTrackTask(const Char_t* name) :
- AliAnalysisTask(name,"AliCFSingleTrackTask"),
- fChain(0x0),
- fESD(0x0),
+ AliAnalysisTaskSE(name),
+ fReadTPCTracks(0),
+ fReadAODData(0),
fCFManager(0x0),
fQAHistList(0x0),
fHistEventsProcessed(0x0)
// Constructor. Initialization of Inputs and Outputs
//
Info("AliCFSingleTrackTask","Calling Constructor");
- DefineInput (0,TChain::Class());
- DefineOutput(0,TH1I::Class());
- DefineOutput(1,AliCFContainer::Class());
- DefineOutput(2,TList::Class());
+
+ /*
+ DefineInput(0) and DefineOutput(0)
+ are taken care of by AliAnalysisTaskSE constructor
+ */
+ DefineOutput(1,TH1I::Class());
+ DefineOutput(2,AliCFContainer::Class());
+ DefineOutput(3,TList::Class());
}
//___________________________________________________________________________
// Assignment operator
//
if (this!=&c) {
- AliAnalysisTask::operator=(c) ;
- fChain = c.fChain;
- fESD = c.fESD;
+ AliAnalysisTaskSE::operator=(c) ;
+ fReadTPCTracks = c.fReadTPCTracks ;
+ fReadAODData = c.fReadAODData ;
fCFManager = c.fCFManager;
fQAHistList = c.fQAHistList ;
fHistEventsProcessed = c.fHistEventsProcessed;
//___________________________________________________________________________
AliCFSingleTrackTask::AliCFSingleTrackTask(const AliCFSingleTrackTask& c) :
- AliAnalysisTask(c),
- fChain(c.fChain),
- fESD(c.fESD),
+ AliAnalysisTaskSE(c),
+ fReadTPCTracks(c.fReadTPCTracks),
+ fReadAODData(c.fReadAODData),
fCFManager(c.fCFManager),
fQAHistList(c.fQAHistList),
fHistEventsProcessed(c.fHistEventsProcessed)
//destructor
//
Info("~AliCFSingleTrackTask","Calling Destructor");
- if (fChain) delete fChain ;
- if (fESD) delete fESD ;
if (fCFManager) delete fCFManager ;
if (fHistEventsProcessed) delete fHistEventsProcessed ;
if (fQAHistList) {fQAHistList->Clear(); delete fQAHistList;}
}
-//___________________________________________________________________________
-
-void AliCFSingleTrackTask::Init()
-{
-
-}
//_________________________________________________
-void AliCFSingleTrackTask::Exec(Option_t *)
+void AliCFSingleTrackTask::UserExec(Option_t *)
{
//
// Main loop function
//
- Info("Exec","") ;
- // Get the mc truth
- AliMCEventHandler* mcTruth = (AliMCEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
-
- if (!mcTruth) Error("Exec","NO MC INFO FOUND... EXITING\n");
-
- // transform possible old AliESD into AliESDEvent
+ Info("UserExec","") ;
- if (fESD->GetAliESDOld()) fESD->CopyFromOldESD(); //transition to new ESD format
+ AliVEvent* fEvent = fInputEvent ;
+ AliVParticle* track ;
+
+ if (!fEvent) {
+ Error("UserExec","NO EVENT FOUND!");
+ return;
+ }
+ if (!fMCEvent) Error("UserExec","NO MC INFO FOUND");
+
//pass the MC evt handler to the cuts that need it
-
- fCFManager->SetEventInfo(mcTruth);
-
- // Get the MC event
- AliMCEvent* mcEvent = mcTruth->MCEvent();
+ fCFManager->SetEventInfo(fMCEvent);
// MC-event selection
- Float_t containerInput[2] ;
+ Double_t containerInput[2] ;
//loop on the MC event
- for (Int_t ipart=0; ipart<mcEvent->GetNumberOfTracks(); ipart++) {
- AliMCParticle *mcPart = mcEvent->GetTrack(ipart);
+ for (Int_t ipart=0; ipart<fMCEvent->GetNumberOfTracks(); ipart++) {
+ AliMCParticle *mcPart = fMCEvent->GetTrack(ipart);
//check the MC-level cuts
if (!fCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,mcPart)) continue;
containerInput[1] = mcPart->Eta() ;
//fill the container for Gen-level selection
fCFManager->GetParticleContainer()->Fill(containerInput,kStepGenerated);
-
+
//check the Acceptance-level cuts
if (!fCFManager->CheckParticleCuts(AliCFManager::kPartAccCuts,mcPart)) continue;
//fill the container for Acceptance-level selection
}
//Now go to rec level
- for (Int_t iTrack = 0; iTrack<fESD->GetNumberOfTracks(); iTrack++) {
-
- AliESDtrack* track = fESD->GetTrack(iTrack);
+ for (Int_t iTrack = 0; iTrack<fEvent->GetNumberOfTracks(); iTrack++) {
- fCFManager->FillQABeforeParticleCuts(AliCFManager::kPartRecCuts,track);
- if (!fCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,track)) continue;
- fCFManager->FillQAAfterParticleCuts(AliCFManager::kPartRecCuts,track);
+ track = fEvent->GetTrack(iTrack);
+
+ if (fReadTPCTracks) {
+ if (fReadAODData) {
+ Error("UserExec","TPC-only tracks are not supported with AOD");
+ return ;
+ }
+ AliESDtrack* esdTrack = (AliESDtrack*) track;
+ AliESDtrack* esdTrackTPC = new AliESDtrack();
+ if (!esdTrack->FillTPCOnlyTrack(*esdTrackTPC)) {
+ Error("UserExec","Could not retrieve TPC info");
+ continue;
+ }
+ track = esdTrackTPC ;
+ }
+ if (!fCFManager->CheckParticleCuts(AliCFManager::kPartRecCuts,track)) continue;
+
// is track associated to particle ?
- if (track->GetLabel()<0) continue;
- AliMCParticle *mcPart = mcEvent->GetTrack(track->GetLabel());
+
+ Int_t label = track->GetLabel();
+
+ if (label<0) continue;
+ AliMCParticle *mcPart = fMCEvent->GetTrack(label);
// check if this track was part of the signal
if (!fCFManager->CheckParticleCuts(AliCFManager::kPartGenCuts,mcPart)) continue;
//fill the container
Double_t mom[3];
- track->GetPxPyPz(mom);
+ track->PxPyPz(mom);
Double_t pt=TMath::Sqrt(mom[0]*mom[0]+mom[1]*mom[1]);
containerInput[0] = pt ;
containerInput[1] = track->Eta();
fCFManager->GetParticleContainer()->Fill(containerInput,kStepReconstructed) ;
+
if (!fCFManager->CheckParticleCuts(AliCFManager::kPartSelCuts,track)) continue ;
fCFManager->GetParticleContainer()->Fill(containerInput,kStepSelected);
+
+ if (fReadTPCTracks) delete track;
}
fHistEventsProcessed->Fill(0);
- PostData(0,fHistEventsProcessed) ;
- PostData(1,fCFManager->GetParticleContainer()) ;
- PostData(2,fQAHistList) ;
+
+ /* PostData(0) is taken care of by AliAnalysisTaskSE */
+ PostData(1,fHistEventsProcessed) ;
+ PostData(2,fCFManager->GetParticleContainer()) ;
+ PostData(3,fQAHistList) ;
}
// the results graphically or save the results to file.
Info("Terminate","");
- AliAnalysisTask::Terminate();
+ AliAnalysisTaskSE::Terminate();
+ //draw some example plots....
- Double_t max1 = fCFManager->GetParticleContainer()->ShowProjection(0,0)->GetMaximum();
- Double_t max2 = fCFManager->GetParticleContainer()->ShowProjection(1,0)->GetMaximum();
+ AliCFContainer *cont= dynamic_cast<AliCFContainer*> (GetOutputData(2));
- fCFManager->GetParticleContainer()->ShowProjection(0,0)->GetYaxis()->SetRangeUser(0,max1*1.2);
- fCFManager->GetParticleContainer()->ShowProjection(0,1)->GetYaxis()->SetRangeUser(0,max1*1.2);
- fCFManager->GetParticleContainer()->ShowProjection(0,2)->GetYaxis()->SetRangeUser(0,max1*1.2);
- fCFManager->GetParticleContainer()->ShowProjection(0,3)->GetYaxis()->SetRangeUser(0,max1*1.2);
+ TH1D* h00 = cont->ShowProjection(0,0) ;
+ TH1D* h01 = cont->ShowProjection(0,1) ;
+ TH1D* h02 = cont->ShowProjection(0,2) ;
+ TH1D* h03 = cont->ShowProjection(0,3) ;
- fCFManager->GetParticleContainer()->ShowProjection(1,0)->GetYaxis()->SetRangeUser(0,max2*1.2);
- fCFManager->GetParticleContainer()->ShowProjection(1,1)->GetYaxis()->SetRangeUser(0,max2*1.2);
- fCFManager->GetParticleContainer()->ShowProjection(1,2)->GetYaxis()->SetRangeUser(0,max2*1.2);
- fCFManager->GetParticleContainer()->ShowProjection(1,3)->GetYaxis()->SetRangeUser(0,max2*1.2);
+ TH1D* h10 = cont->ShowProjection(1,0) ;
+ TH1D* h11 = cont->ShowProjection(1,1) ;
+ TH1D* h12 = cont->ShowProjection(1,2) ;
+ TH1D* h13 = cont->ShowProjection(1,3) ;
- fCFManager->GetParticleContainer()->ShowProjection(0,0)->SetMarkerStyle(23) ;
- fCFManager->GetParticleContainer()->ShowProjection(0,1)->SetMarkerStyle(24) ;
- fCFManager->GetParticleContainer()->ShowProjection(0,2)->SetMarkerStyle(25) ;
- fCFManager->GetParticleContainer()->ShowProjection(0,3)->SetMarkerStyle(26) ;
+ Double_t max1 = h00->GetMaximum();
+ Double_t max2 = h10->GetMaximum();
- fCFManager->GetParticleContainer()->ShowProjection(1,0)->SetMarkerStyle(23) ;
- fCFManager->GetParticleContainer()->ShowProjection(1,1)->SetMarkerStyle(24) ;
- fCFManager->GetParticleContainer()->ShowProjection(1,2)->SetMarkerStyle(25) ;
- fCFManager->GetParticleContainer()->ShowProjection(1,3)->SetMarkerStyle(26) ;
+ h00->GetYaxis()->SetRangeUser(0,max1*1.2);
+ h01->GetYaxis()->SetRangeUser(0,max1*1.2);
+ h02->GetYaxis()->SetRangeUser(0,max1*1.2);
+ h03->GetYaxis()->SetRangeUser(0,max1*1.2);
+
+ h10->GetYaxis()->SetRangeUser(0,max2*1.2);
+ h11->GetYaxis()->SetRangeUser(0,max2*1.2);
+ h12->GetYaxis()->SetRangeUser(0,max2*1.2);
+ h13->GetYaxis()->SetRangeUser(0,max2*1.2);
+
+ h00->SetMarkerStyle(23) ;
+ h01->SetMarkerStyle(24) ;
+ h02->SetMarkerStyle(25) ;
+ h03->SetMarkerStyle(26) ;
+
+ h10->SetMarkerStyle(23) ;
+ h11->SetMarkerStyle(24) ;
+ h12->SetMarkerStyle(25) ;
+ h13->SetMarkerStyle(26) ;
TCanvas * c =new TCanvas("c","",1400,800);
c->Divide(4,2);
-// TCanvas * c1 =new TCanvas("c1","",600,400);
c->cd(1);
- fCFManager->GetParticleContainer()->ShowProjection(0,0)->Draw("p");
+ h00->Draw("p");
c->cd(2);
- fCFManager->GetParticleContainer()->ShowProjection(0,1)->Draw("p");
+ h01->Draw("p");
c->cd(3);
- fCFManager->GetParticleContainer()->ShowProjection(0,2)->Draw("p");
+ h02->Draw("p");
c->cd(4);
- fCFManager->GetParticleContainer()->ShowProjection(0,3)->Draw("p");
-
-// TCanvas * c2 =new TCanvas("c2","",600,400);
+ h03->Draw("p");
c->cd(5);
- fCFManager->GetParticleContainer()->ShowProjection(1,0)->Draw("p");
+ h10->Draw("p");
c->cd(6);
- fCFManager->GetParticleContainer()->ShowProjection(1,1)->Draw("p");
+ h11->Draw("p");
c->cd(7);
- fCFManager->GetParticleContainer()->ShowProjection(1,2)->Draw("p");
+ h12->Draw("p");
c->cd(8);
- fCFManager->GetParticleContainer()->ShowProjection(1,3)->Draw("p");
+ h13->Draw("p");
c->SaveAs("plots.eps");
-
- delete fHistEventsProcessed ;
}
-//___________________________________________________________________________
-void AliCFSingleTrackTask::ConnectInputData(Option_t *) {
- //
- // Initialize branches.
- //
- Info("ConnectInputData","ConnectInputData of task %s\n",GetName());
-
- fChain = (TChain*)GetInputData(0);
- fChain->SetBranchStatus("*FMD*",0);
- fChain->SetBranchStatus("*CaloClusters*",0);
- fESD = new AliESDEvent();
- fESD->ReadFromTree(fChain);
-}
//___________________________________________________________________________
-void AliCFSingleTrackTask::CreateOutputObjects() {
+void AliCFSingleTrackTask::UserCreateOutputObjects() {
//HERE ONE CAN CREATE OUTPUT OBJECTS, IN PARTICULAR IF THE OBJECT PARAMETERS DON'T NEED
//TO BE SET BEFORE THE EXECUTION OF THE TASK
//
- Info("CreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
+ Info("CreateOutputObjects","CreateOutputObjects of task %s", GetName());
- //slot #0
+ //slot #1
+ OpenFile(1);
fHistEventsProcessed = new TH1I("fHistEventsProcessed","",1,0,1) ;
- //slot #2
- fQAHistList = new TList();
- fCFManager->InitQAHistos();
- fCFManager->AddQAHistosToList(fQAHistList);
+// OpenFile(2);
+// OpenFile(3);
}
#endif