From 0f400c1aa2a53f6266990aac881b563ddefcae70 Mon Sep 17 00:00:00 2001 From: panos Date: Wed, 14 Mar 2007 16:17:32 +0000 Subject: [PATCH] Adding the example on how to access the kine tree with tha TaskRL --- .../Kine/AliAnalysisTaskRLPt.cxx | 95 +++++++++++++++++++ .../AnalysisMacros/Kine/AliAnalysisTaskRLPt.h | 23 +++++ PWG2/AnalysisMacros/Kine/demoLocal.C | 28 ++++++ PWG2/AnalysisMacros/Kine/runProcess.C | 16 ++++ 4 files changed, 162 insertions(+) create mode 100644 PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.cxx create mode 100644 PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.h create mode 100644 PWG2/AnalysisMacros/Kine/demoLocal.C create mode 100644 PWG2/AnalysisMacros/Kine/runProcess.C diff --git a/PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.cxx b/PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.cxx new file mode 100644 index 00000000000..159f09c71d3 --- /dev/null +++ b/PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.cxx @@ -0,0 +1,95 @@ +#define AliAnalysisTaskRLPt_cxx + +#include "TChain.h" +#include "TH1.h" +#include "TCanvas.h" +#include "TSystem.h" +#include "TROOT.h" +#include "TParticle.h" + +#include "AliESD.h" +#include "AliLog.h" +#include "AliStack.h" + +#include "AliAnalysisTaskRL.h" +#include "AliAnalysisTaskRLPt.h" + +ClassImp(AliAnalysisTaskRLPt) + +//________________________________________________________________________ +AliAnalysisTaskRLPt::AliAnalysisTaskRLPt(const char *name) :AliAnalysisTaskRL(name,""), fESD(0), fHistPt(0) { + // Constructor. + // Input slot #0 works with an Ntuple + DefineInput(0, TChain::Class()); + // Output slot #0 writes into a TH1 container + DefineOutput(0, TH1F::Class()); +} + +//___________________________________________________________________________ +void AliAnalysisTaskRLPt::ConnectInputData(Option_t *) { + // Initialize branches. + printf(" ConnectInputData of task %s\n", GetName()); + if (!fESD) { + char ** address = (char **)GetBranchAddress(0, "ESD"); + if (address) fESD = (AliESD*)(*address); + if (!fESD) { + fESD = new AliESD(); + SetBranchAddress(0, "ESD", &fESD); + } + } +} + +//___________________________________________________________________________ +void AliAnalysisTaskRLPt::CreateOutputObjects() { + printf(" CreateOutputObjects of task %s\n", GetName()); + if (!fHistPt) { + fHistPt = new TH1F("fHistPt","This is the Pt distribution",15,0.1,3.1); + fHistPt->SetStats(kTRUE); + fHistPt->GetXaxis()->SetTitle("P_{T} [GeV]"); + fHistPt->GetYaxis()->SetTitle("#frac{dN}{dP_{T}}"); + fHistPt->GetXaxis()->SetTitleColor(1); + fHistPt->SetMarkerStyle(kFullCircle); + } +} + +//________________________________________________________________________ +void AliAnalysisTaskRLPt::Exec(Option_t *) { + // Task making a pt distribution. + // Get input data + TTree *tinput = (TTree*)GetInputData(0); + Long64_t ientry = tinput->GetReadEntry(); + if (AliAnalysisTaskRL::GetEntry(ientry) == kFALSE) { + printf("Couldn't get event from the runLoader\n"); + return; + } + if (!fESD) return; + + AliStack* stack = GetStack(); + if (!stack) { + AliDebug(AliLog::kError, "Stack not available"); + //return kFALSE; + } + // loop over mc particles + Int_t nPrim = stack->GetNprimary(); + printf("Particles: %d - Tracks: %d \n",nPrim,fESD->GetNumberOfTracks()); + for(Int_t i = 0; i < nPrim; i++) { + TParticle * particle = stack->Particle(i); + if(TMath::Abs(particle->Eta()) > 1.0) continue; + fHistPt->Fill(particle->Pt()); + } + + // Post final data. It will be written to a file with option "RECREATE" + PostData(0, fHistPt); +} + +//________________________________________________________________________ +void AliAnalysisTaskRLPt::Terminate(Option_t *) { + // Draw some histogram at the end. + if (!gROOT->IsBatch()) { + TCanvas *c1 = new TCanvas("c1","Pt",10,10,310,310); + c1->SetFillColor(10); c1->SetHighLightColor(10); + c1->cd(1)->SetLeftMargin(0.15); c1->cd(1)->SetBottomMargin(0.15); + c1->cd(1)->SetLogy(); + fHistPt->DrawCopy("E"); + } +} diff --git a/PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.h b/PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.h new file mode 100644 index 00000000000..3f7d18c8cdb --- /dev/null +++ b/PWG2/AnalysisMacros/Kine/AliAnalysisTaskRLPt.h @@ -0,0 +1,23 @@ +#include "TH1.h" + +#include "AliESD.h" + +#include "AliAnalysisTaskRL.h" + +class AliAnalysisTaskRLPt : public AliAnalysisTaskRL { + public: + AliAnalysisTaskRLPt(const char *name); + virtual ~AliAnalysisTaskRLPt() {} + + virtual void ConnectInputData(Option_t *); + virtual void CreateOutputObjects(); + virtual void Exec(Option_t *option); + virtual void Terminate(Option_t *); + + private: + AliESD *fESD; //ESD object + TH1F *fHistPt; //Pt spectrum + + ClassDef(AliAnalysisTaskRLPt, 0); // example of analysis +}; + diff --git a/PWG2/AnalysisMacros/Kine/demoLocal.C b/PWG2/AnalysisMacros/Kine/demoLocal.C new file mode 100644 index 00000000000..a9bc2230f69 --- /dev/null +++ b/PWG2/AnalysisMacros/Kine/demoLocal.C @@ -0,0 +1,28 @@ +//________________________________________________________________________ +void demoLocal() { + TChain* chain = new TChain("esdTree"); + chain->Add("data/001/AliESDs.root"); + chain->Add("data/002/AliESDs.root"); + + //____________________________________________// + // Make the analysis manager + AliAnalysisManager *mgr = new AliAnalysisManager("TestManager"); + //____________________________________________// + // 1st Pt task + AliAnalysisTaskRLPt *task1 = new AliAnalysisTaskRLPt("TaskRLPt"); + mgr->AddTask(task1); + // Create containers for input/output + AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer); + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("chist1", TH1::Class(),AliAnalysisManager::kOutputContainer,"Pt.ESD.root"); + + //____________________________________________// + mgr->ConnectInput(task1,0,cinput1); + mgr->ConnectOutput(task1,0,coutput1); + cinput1->SetData(chain); + + if(mgr->InitAnalysis()) { + mgr->PrintStatus(); + mgr->StartAnalysis("local",chain); + } +} + diff --git a/PWG2/AnalysisMacros/Kine/runProcess.C b/PWG2/AnalysisMacros/Kine/runProcess.C new file mode 100644 index 00000000000..6cd3d748ba7 --- /dev/null +++ b/PWG2/AnalysisMacros/Kine/runProcess.C @@ -0,0 +1,16 @@ +void runProcess() { + TStopwatch timer; + timer.Start(); + gSystem->AddIncludePath("-I\"$ALICE_ROOT/include\""); + gSystem->Load("libANALYSIS.so"); + gSystem->Load("libANALYSISRL.so"); + + gROOT->LoadMacro("AliAnalysisTaskRLPt.cxx+"); + gROOT->LoadMacro("demoLocal.C"); + demoLocal(); + + timer.Stop(); + timer.Print(); +} + + -- 2.43.0