--- /dev/null
+#define AliAnalysisTaskPt_cxx
+
+#include "TChain.h"
+#include "TH1.h"
+#include "TCanvas.h"
+#include "TSystem.h"
+
+#include "AliAnalysisTask.h"
+
+#include "AliESD.h"
+
+#include "AliAnalysisTaskPt.h"
+
+ClassImp(AliAnalysisTaskPt)
+
+//________________________________________________________________________
+AliAnalysisTaskPt::AliAnalysisTaskPt(const char *name) :AliAnalysisTask(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 AliAnalysisTaskPt::Init(Option_t *) {
+ printf(" Init %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);
+ }
+
+ OpenFile(0,"Pt.ESD.1.root","RECREATE");
+ }
+
+ 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 AliAnalysisTaskPt::Exec(Option_t *) {
+ // Task making a pt distribution.
+ // Get input data
+ TChain *chain = (TChain*)GetInputData(0);
+ Long64_t ientry = chain->GetReadEntry();
+ if (!fESD) return;
+
+ printf("Tracks: %d \n",fESD->GetNumberOfTracks());
+
+ for(Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
+ AliESDtrack * ESDTrack = fESD->GetTrack(iTracks);
+ //UInt_t status = ESDTrack->GetStatus();
+ Double_t momentum[3];
+ ESDTrack->GetPxPyPz(momentum);
+ Double_t Pt = sqrt(pow(momentum[0],2) + pow(momentum[1],2));
+ fHistPt->Fill(Pt);
+ }//track loop
+ // Post final data. It will be written to a file with option "RECREATE"
+ PostData(0, fHistPt);
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskPt::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");
+ }
+}
--- /dev/null
+#include "TH1.h"
+
+#include "AliESD.h"
+
+#include "AliAnalysisTask.h"
+
+class AliAnalysisTaskPt : public AliAnalysisTask {
+ public:
+ AliAnalysisTaskPt(const char *name);
+ virtual ~AliAnalysisTaskPt() {}
+
+ virtual void Init(Option_t *);
+ virtual void Exec(Option_t *option);
+ virtual void Terminate(Option_t *);
+
+ private:
+ AliESD *fESD; //ESD object
+ TH1F *fHistPt; //Pt spectrum
+
+ ClassDef(AliAnalysisTaskPt, 0); // example of analysis
+};
+
--- /dev/null
+//________________________________________________________________________
+void demoLocal() {
+ //____________________________________________//
+ AliTagAnalysis *TagAna = new AliTagAnalysis();
+ TagAna->ChainLocalTags("../Tags/");
+
+ AliEventTagCuts *EvCuts1 = new AliEventTagCuts();
+ EvCuts1->SetMultiplicityRange(11,12);
+ TChain* chain1 = 0x0;
+ chain1 = TagAna->QueryTags(EvCuts1);
+
+ //____________________________________________//
+ // Make the analysis manager
+ AliAnalysisManager *mgr = new AliAnalysisManager();
+ //____________________________________________//
+ // 1st Pt task
+ AliAnalysisTask *task1 = new AliAnalysisTaskPt("TaskPt");
+ 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);
+
+ //____________________________________________//
+ mgr->ConnectInput(task1,0,cinput1);
+ mgr->ConnectOutput(task1,0,coutput1);
+ cinput1->SetData(chain1);
+
+ if (mgr->InitAnalysis()) {
+ mgr->PrintStatus();
+ chain1->Process(mgr);
+ }
+}
+
--- /dev/null
+void runAnalysis() {
+ TStopwatch timer;
+ timer.Start();
+
+ //____________________________________________________//
+ //_____________Setting up ESD.par_____________________//
+ //____________________________________________________//
+ const char* pararchivename1 = "ESD";
+ //////////////////////////////////////////
+ // Libraries required to load
+ //////////////////////////////////////////
+
+ //////////////////////////////////////////////////////////////////
+ // Setup PAR File
+ if (pararchivename1) {
+ char processline[1024];
+ sprintf(processline,".! tar xvzf %s.par",pararchivename1);
+ gROOT->ProcessLine(processline);
+ const char* ocwd = gSystem->WorkingDirectory();
+ gSystem->ChangeDirectory(pararchivename1);
+
+ // check for BUILD.sh and execute
+ if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
+ printf("*******************************\n");
+ printf("*** Building PAR archive ***\n");
+ printf("*******************************\n");
+
+ if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
+ Error("runProcess","Cannot Build the PAR Archive! - Abort!");
+ return -1;
+ }
+ }
+ // check for SETUP.C and execute
+ if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
+ printf("*******************************\n");
+ printf("*** Setup PAR archive ***\n");
+ printf("*******************************\n");
+ gROOT->Macro("PROOF-INF/SETUP.C");
+ }
+
+ gSystem->ChangeDirectory("../");
+ }
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libESD.so");
+
+ //_____________________________________________________________//
+ //_____________Setting up ANALYSIS_NEW.par_____________________//
+ //_____________________________________________________________//
+ const char* pararchivename2 = "ANALYSIS_NEW";
+ //////////////////////////////////////////
+ // Libraries required to load
+ //////////////////////////////////////////
+
+ //////////////////////////////////////////////////////////////////
+ // Setup PAR File
+ if (pararchivename2) {
+ char processline[1024];
+ sprintf(processline,".! tar xvzf %s.par",pararchivename2);
+ gROOT->ProcessLine(processline);
+ const char* ocwd = gSystem->WorkingDirectory();
+ gSystem->ChangeDirectory(pararchivename2);
+
+ // check for BUILD.sh and execute
+ if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
+ printf("*******************************\n");
+ printf("*** Building PAR archive ***\n");
+ printf("*******************************\n");
+
+ if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
+ Error("runProcess","Cannot Build the PAR Archive! - Abort!");
+ return -1;
+ }
+ }
+ // check for SETUP.C and execute
+ if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
+ printf("*******************************\n");
+ printf("*** Setup PAR archive ***\n");
+ printf("*******************************\n");
+ gROOT->Macro("PROOF-INF/SETUP.C");
+ }
+
+ gSystem->ChangeDirectory("../");
+ }
+ gSystem->Load("libANALYSIS_NEW.so");
+
+ gROOT->LoadMacro("AliAnalysisTaskPt.cxx+");
+ gROOT->LoadMacro("demoLocal.C");
+ demoLocal();
+
+ timer.Stop();
+ timer.Print();
+}