]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Simple example of a local analysis using the event tags and the new analysis framework.
authorpanos <panos@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Dec 2006 15:19:36 +0000 (15:19 +0000)
committerpanos <panos@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 14 Dec 2006 15:19:36 +0000 (15:19 +0000)
PWG2/AnalysisMacros/Local/AliAnalysisTaskPt.cxx [new file with mode: 0644]
PWG2/AnalysisMacros/Local/AliAnalysisTaskPt.h [new file with mode: 0644]
PWG2/AnalysisMacros/Local/demoLocal.C [new file with mode: 0644]
PWG2/AnalysisMacros/Local/runAnalysis.C [new file with mode: 0644]

diff --git a/PWG2/AnalysisMacros/Local/AliAnalysisTaskPt.cxx b/PWG2/AnalysisMacros/Local/AliAnalysisTaskPt.cxx
new file mode 100644 (file)
index 0000000..8d154b0
--- /dev/null
@@ -0,0 +1,85 @@
+#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");
+  }
+}
diff --git a/PWG2/AnalysisMacros/Local/AliAnalysisTaskPt.h b/PWG2/AnalysisMacros/Local/AliAnalysisTaskPt.h
new file mode 100644 (file)
index 0000000..bf72f7e
--- /dev/null
@@ -0,0 +1,22 @@
+#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
+};
+
diff --git a/PWG2/AnalysisMacros/Local/demoLocal.C b/PWG2/AnalysisMacros/Local/demoLocal.C
new file mode 100644 (file)
index 0000000..e601746
--- /dev/null
@@ -0,0 +1,33 @@
+//________________________________________________________________________
+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);
+  }
+}                         
+                      
diff --git a/PWG2/AnalysisMacros/Local/runAnalysis.C b/PWG2/AnalysisMacros/Local/runAnalysis.C
new file mode 100644 (file)
index 0000000..8399b4d
--- /dev/null
@@ -0,0 +1,92 @@
+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();
+}