ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)

#include <Riostream.h>
#include "TSystem.h"
#include "TFile.h"
#include "TTree.h"
#include "TCanvas.h"
#include "TH1.h"
#include "TFile.h"
#include "TObject.h"
#include "TStyle.h"
#include "TROOT.h"

#include "AliAODEvent.h"
#include "AliAODHeader.h"
#include "AliAODEventInfo.h"
#include "AliAODVertex.h"
#include "AliAODTrack.h"
#include "AliAODCluster.h"
#include "AliAODDimuon.h"

#endif

void ReadSpecAOD(const char *fileName = "AliMuonAOD.root") {

    gSystem->Load("libTree");
    gSystem->Load("libGeom");
    gSystem->Load("libSTEERBase");
    gSystem->Load("libAOD");
    gSystem->Load("libANALYSIS");			
    gSystem->Load("libPWGHFbase.so");



  gStyle->SetOptStat(111111);
  gStyle->SetFrameFillColor(10);
  gStyle->SetCanvasColor(10);
  gStyle->SetOptStat(0);
  TH1F *mass=new TH1F("mass","Invariant mass",100,0.,20.);
  TH1F *rap=new TH1F("rap","Rapidity",100,-5.,0.);
  TH1F *cost=new TH1F("cost","Cost_CS",100,-1.,1.);
  TH1F *pt=new TH1F("pt","Pt",100,0.,50.);
  TH1F *ptmuon=new TH1F("ptmuon","single muon Pt",100,0.,50.);

  // open input file and get the TTree
  TFile inFile(fileName, "READ");
  TTree *aodTree = (TTree*)inFile.Get("AOD");

  AliAODEvent *aod = (AliAODEvent*)aodTree->GetUserInfo()->FindObject("AliAODEvent");

  TClonesArray *Dimuons;
  TClonesArray *tracks;
  TClonesArray *vertices;
  AliAODEventInfo *MuonInfos;
  
  aodTree->SetBranchAddress("Dimuons",&Dimuons);
  aodTree->SetBranchAddress("tracks",&tracks);
  aodTree->SetBranchAddress("vertices",&vertices);
  aodTree->SetBranchAddress("MuonInfos",&MuonInfos);

  // loop over events
  Int_t nEvents = aodTree->GetEntries();
  for (Int_t nEv = 0; nEv < nEvents; nEv++) {
    cout << "Event: " << nEv+1 << "/" << nEvents << endl;
    aodTree->GetEntry(nEv);
    // loop over tracks
    Int_t nTracks = tracks->GetEntries();
    for (Int_t nTr = 0; nTr < nTracks; nTr++) {
      AliAODTrack *tr = (AliAODTrack *)tracks->At(nTr);
      ptmuon->Fill(tr->Pt());
      // print track info
      cout << nTr+1 << "/" << nTracks << ": track pt: " << tr->Pt();
      if (tr->GetProdVertex()) {
	cout << ", vertex z of this track: " << tr->GetProdVertex()->GetZ();
      }
      cout << endl;
    }
    // loop over dimuons
    
    Int_t nDimuons = Dimuons->GetEntries();
    cout << nDimuons << " dimuon(s)" << endl;
    for(Int_t nDi=0; nDi < nDimuons; nDi++){
      AliAODDimuon *di=(AliAODDimuon*)Dimuons->At(nDi);
       if((MuonInfos->MUON_Unlike_HPt_L0())){
         mass->Fill(di->M());
         pt->Fill(di->Pt());
         rap->Fill(di->Y());
         cost->Fill(di->CostCS());
         cout << "Dimuon: " << nDi << " q: " << di->Charge() 
	      << " m: " << di->M() << " Y: " << di->Y() << " Pt: " << di->Pt()<< " CostCS: " << di->CostCS() << endl  ;
       }
    }
//     // loop over vertices
//     Int_t nVtxs = vertices->GetEntries();
//     for (Int_t nVtx = 0; nVtx < nVtxs; nVtx++) {
//       
//       // print track info
//       cout << nVtx+1 << "/" << nVtxs << ": vertex z position: " <<vertices->At(nVtx)->GetZ() << endl;
//     }
  }
  inFile.Close();
  TCanvas *c1=new TCanvas();
  c1->Show();
  c1->Divide(2,2);
  c1->ForceUpdate();
  c1->cd(1);
  mass->DrawClone();
  c1->cd(2);
  rap->DrawClone();
  c1->cd(3);
  pt->DrawClone();
  c1->cd(4);
  cost->DrawClone();
  
  TCanvas *c2 = new TCanvas();
  c2->cd();
  ptmuon->DrawClone();
  return;
}
 ReadSpecAOD.C:1
 ReadSpecAOD.C:2
 ReadSpecAOD.C:3
 ReadSpecAOD.C:4
 ReadSpecAOD.C:5
 ReadSpecAOD.C:6
 ReadSpecAOD.C:7
 ReadSpecAOD.C:8
 ReadSpecAOD.C:9
 ReadSpecAOD.C:10
 ReadSpecAOD.C:11
 ReadSpecAOD.C:12
 ReadSpecAOD.C:13
 ReadSpecAOD.C:14
 ReadSpecAOD.C:15
 ReadSpecAOD.C:16
 ReadSpecAOD.C:17
 ReadSpecAOD.C:18
 ReadSpecAOD.C:19
 ReadSpecAOD.C:20
 ReadSpecAOD.C:21
 ReadSpecAOD.C:22
 ReadSpecAOD.C:23
 ReadSpecAOD.C:24
 ReadSpecAOD.C:25
 ReadSpecAOD.C:26
 ReadSpecAOD.C:27
 ReadSpecAOD.C:28
 ReadSpecAOD.C:29
 ReadSpecAOD.C:30
 ReadSpecAOD.C:31
 ReadSpecAOD.C:32
 ReadSpecAOD.C:33
 ReadSpecAOD.C:34
 ReadSpecAOD.C:35
 ReadSpecAOD.C:36
 ReadSpecAOD.C:37
 ReadSpecAOD.C:38
 ReadSpecAOD.C:39
 ReadSpecAOD.C:40
 ReadSpecAOD.C:41
 ReadSpecAOD.C:42
 ReadSpecAOD.C:43
 ReadSpecAOD.C:44
 ReadSpecAOD.C:45
 ReadSpecAOD.C:46
 ReadSpecAOD.C:47
 ReadSpecAOD.C:48
 ReadSpecAOD.C:49
 ReadSpecAOD.C:50
 ReadSpecAOD.C:51
 ReadSpecAOD.C:52
 ReadSpecAOD.C:53
 ReadSpecAOD.C:54
 ReadSpecAOD.C:55
 ReadSpecAOD.C:56
 ReadSpecAOD.C:57
 ReadSpecAOD.C:58
 ReadSpecAOD.C:59
 ReadSpecAOD.C:60
 ReadSpecAOD.C:61
 ReadSpecAOD.C:62
 ReadSpecAOD.C:63
 ReadSpecAOD.C:64
 ReadSpecAOD.C:65
 ReadSpecAOD.C:66
 ReadSpecAOD.C:67
 ReadSpecAOD.C:68
 ReadSpecAOD.C:69
 ReadSpecAOD.C:70
 ReadSpecAOD.C:71
 ReadSpecAOD.C:72
 ReadSpecAOD.C:73
 ReadSpecAOD.C:74
 ReadSpecAOD.C:75
 ReadSpecAOD.C:76
 ReadSpecAOD.C:77
 ReadSpecAOD.C:78
 ReadSpecAOD.C:79
 ReadSpecAOD.C:80
 ReadSpecAOD.C:81
 ReadSpecAOD.C:82
 ReadSpecAOD.C:83
 ReadSpecAOD.C:84
 ReadSpecAOD.C:85
 ReadSpecAOD.C:86
 ReadSpecAOD.C:87
 ReadSpecAOD.C:88
 ReadSpecAOD.C:89
 ReadSpecAOD.C:90
 ReadSpecAOD.C:91
 ReadSpecAOD.C:92
 ReadSpecAOD.C:93
 ReadSpecAOD.C:94
 ReadSpecAOD.C:95
 ReadSpecAOD.C:96
 ReadSpecAOD.C:97
 ReadSpecAOD.C:98
 ReadSpecAOD.C:99
 ReadSpecAOD.C:100
 ReadSpecAOD.C:101
 ReadSpecAOD.C:102
 ReadSpecAOD.C:103
 ReadSpecAOD.C:104
 ReadSpecAOD.C:105
 ReadSpecAOD.C:106
 ReadSpecAOD.C:107
 ReadSpecAOD.C:108
 ReadSpecAOD.C:109
 ReadSpecAOD.C:110
 ReadSpecAOD.C:111
 ReadSpecAOD.C:112
 ReadSpecAOD.C:113
 ReadSpecAOD.C:114
 ReadSpecAOD.C:115
 ReadSpecAOD.C:116
 ReadSpecAOD.C:117
 ReadSpecAOD.C:118
 ReadSpecAOD.C:119
 ReadSpecAOD.C:120