ROOT logo
//////////////////////////////////////////////////////////////////
// Macro to check ESD info provided by the 2 SPD layers         //
// Provides:                                                    //
//  1 canvas with                                               //
//      - distribution of the SPD vertex Z-coord                //
//      - SPD vertex Z-coord and sigma for each event           //
//  1 canvas for tracklets with                                 //
//      - #tracklets                                            //
//      - #tracklets vs #clusters (inner layer)                 //
//      - deltaPhi                                              //
//      - Phi                                                   //
//  1 canvas for clusters (inner layer) not associated with     //
//      - #single clusters                                      // 
//      - Phi                                                   //
//      - Theta                                                 //
//                                                              //
//  Maria.Nicassio@ba.infn.it                                   //
//  Domenico.Elia@ba.infn.it                                    //
//////////////////////////////////////////////////////////////////
                                                                                                                         
#if !defined(__CINT__) || defined(__MAKECINT__)

#include <Riostream.h>
#include "TFile.h"
#include "TTree.h"
#include "TH1.h"
#include "TH2.h"
#include "TCanvas.h"                                                                                                               
#include "AliESD.h"                                                                                                               
#include "AliESDEvent.h"
#include "AliESDHeader.h"
#include "AliESDVertex.h"
#include "AliESDtrack.h"
#include "AliMultiplicity.h"
#endif

/* $Id$ */
void ShowSPDESDs (Int_t RunStart, Int_t RunStop) {

  Char_t fileName[256];

  Char_t* dir = "/home/elia/alice/pp/data/first";            

  TH1F* hSPDVertex = new TH1F("SPDVertex","",80,-20.,20.);
  TH1F* hSPDVertexPerEvent = new TH1F("SPDVertexPerEvent","",100,0.,100.);

  TH1F* hnTracklets = new TH1F("nTracklets","",200,0.,200.);
  TH2F* hnTracklets_nCl1 = new TH2F("nTracklets_nCl1","",200,0.,200.,200,0.,200.);
  TH1F* hDePhiTracklets = new TH1F("DePhiTracklets","",200,-0.2,0.2);
  TH1F* hPhiTracklets = new TH1F("PhiTracklets","",600,0.,2*TMath::Pi());
  TH1F* hThetaTracklets = new TH1F("ThetaTracklets","",300,0.,TMath::Pi());
  TH1F* hnSingleClustersLay1 = new TH1F("nSingleClustersLay1","",200,0.,200.);
  TH1F* hPhiSingleClustersLay1 = new TH1F("PhiSingleClustersLay1","",600,0.,2*TMath::Pi());
  TH1F* hThetaSingleClustersLay1 = new TH1F("ThetaSingleClustersLay1","",600,0.,TMath::Pi());

  // Loop over runs ...
  for (Int_t run=RunStart; run<RunStop+1; run++) {

    sprintf(fileName,"%s/AliESDsRAW_%04d.root",dir,run);

    // Open input file and get the TTree
    TFile inFile(fileName, "READ");
  
    TTree *esdTree = (TTree*)inFile.Get("esdTree");
    AliESDEvent *esd = new AliESDEvent();
    esd->ReadFromTree(esdTree);
  
    // Loop over events
    Int_t nESDEvents = esdTree->GetEntries();
    for (Int_t iEv = 0; iEv < nESDEvents; iEv++) {
//    cout << "Event: " << iEv+1 << "/" << nESDEvents << endl;

      // Read events
      esdTree->GetEvent(iEv);      

      // Get the ESD vertex
      const AliESDVertex* vtxESD = esd->GetVertex();

      Double_t ESDvtx[3];
      Double_t sigmaESDvtx[3];
      vtxESD->GetXYZ(ESDvtx);
      vtxESD->GetSigmaXYZ(sigmaESDvtx);
//    cout<<"SPD vtx: x="<<ESDvtx[0]<<" y="<<ESDvtx[1]<<" z="<<ESDvtx[2]<<endl;
//    cout<<"sigma SPD vtx: x="<<sigmaESDvtx[0]<<" y="<<sigmaESDvtx[1]<<" z="<<sigmaESDvtx[2]<<endl;
      hSPDVertex->Fill(ESDvtx[2]);          
      if (ESDvtx[2]!=0.) hSPDVertexPerEvent->SetBinError(iEv,sigmaESDvtx[2]);         
      hSPDVertexPerEvent->Fill(iEv,ESDvtx[2]);                                         

      // Get the SPD reconstructed multiplicity
      const AliMultiplicity* SPDMult = esd->GetMultiplicity();

      Int_t nTracklets = SPDMult->GetNumberOfTracklets();
      // Loop over tracklets
      for (Int_t itr=0; itr<nTracklets; ++itr) {
        Float_t thetaTr = SPDMult->GetTheta(itr);
        Float_t phiTr = SPDMult->GetPhi(itr);
        Float_t dePhiTr = SPDMult->GetDeltaPhi(itr);
        hPhiTracklets->Fill(phiTr);
        hDePhiTracklets->Fill(dePhiTr);
        hThetaTracklets->Fill(thetaTr);
      }

      Int_t nSingleCl1 = SPDMult->GetNumberOfSingleClusters();
      Int_t nCl1 = nSingleCl1 + nTracklets;
      // Loop over unassociated clusters
      for (Int_t icl=0; icl<nSingleCl1; ++icl) {
        Float_t phiSing = SPDMult->GetPhiSingle(icl);
        Float_t thetaSing = SPDMult->GetThetaSingle(icl);
        hPhiSingleClustersLay1->Fill(phiSing);
        hThetaSingleClustersLay1->Fill(thetaSing);
      }   
      hnTracklets_nCl1->Fill(nCl1,nTracklets);
      hnTracklets->Fill(nTracklets);
      hnSingleClustersLay1->Fill(nSingleCl1);

    } // end loop over events
  } // end loop over runs
  
  TFile* fout = new TFile("out_ShowSPDESDs.root","RECREATE");
  
  TCanvas *cVertex = new TCanvas("cVertex","SPD vertex");
  cVertex->Divide(1,2);
  cVertex->cd(1);
  hSPDVertex->GetYaxis()->SetTitle("Entries");
  hSPDVertex->GetXaxis()->SetTitle("Reconstructed vertex [cm]");
  hSPDVertex->Draw();
  cVertex->cd(2);
  hSPDVertexPerEvent->SetMarkerStyle(21);
  hSPDVertexPerEvent->SetMarkerColor(2);
  hSPDVertexPerEvent->SetMarkerSize(0.4);
  hSPDVertexPerEvent->GetXaxis()->SetTitle("Event number");
  hSPDVertexPerEvent->GetYaxis()->SetTitle("Reconstructed vertex [cm]");
  hSPDVertexPerEvent->Draw("p");                                                                                            
  TCanvas *cTracklets = new TCanvas("cTracklets","SPD Tracklets");
  cTracklets->Divide(2,2);
  cTracklets->cd(1);
  hnTracklets->GetXaxis()->SetTitle("Number of tracklets");
  hnTracklets->GetYaxis()->SetTitle("Entries");
  hnTracklets->Draw();
  cTracklets->cd(2);
  hnTracklets_nCl1->GetXaxis()->SetTitle("# clusters (inner layer)");
  hnTracklets_nCl1->GetYaxis()->SetTitle("# tracklets");
  hnTracklets_nCl1->Draw();
  cTracklets->cd(3);
  hDePhiTracklets->GetXaxis()->SetTitle("#Delta#phi [rad]");
  hDePhiTracklets->GetYaxis()->SetTitle("Entries");
  hDePhiTracklets->Draw(); 
  cTracklets->cd(4);
  hPhiTracklets->GetXaxis()->SetTitle("#phi [rad]");
  hPhiTracklets->GetYaxis()->SetTitle("Entries");
  hPhiTracklets->Draw();

  TCanvas *cSingleClusters = new TCanvas("cSingleClusters","Unassociated clusters");
  cSingleClusters->Divide(2,2);
  cSingleClusters->cd(1);
  hnSingleClustersLay1->GetXaxis()->SetTitle("# clusters (inner layer)");
  hnSingleClustersLay1->GetYaxis()->SetTitle("Entries");
  hnSingleClustersLay1->Draw();
  cSingleClusters->cd(2);
  hPhiSingleClustersLay1->GetXaxis()->SetTitle("#phi [rad]");
  hPhiSingleClustersLay1->GetYaxis()->SetTitle("Entries");
  hPhiSingleClustersLay1->Draw();
  cSingleClusters->cd(3);
  hThetaSingleClustersLay1->GetXaxis()->SetTitle("#theta [rad]");
  hThetaSingleClustersLay1->GetYaxis()->SetTitle("Entries");
  hThetaSingleClustersLay1->Draw();

  hSPDVertex->Write();
  hSPDVertexPerEvent->Write();
  hnTracklets_nCl1->Write();
  hnTracklets->Write();

  hDePhiTracklets->Write();
  hPhiTracklets->Write();
  hThetaTracklets->Write();
  hnSingleClustersLay1->Write(); 
  hPhiSingleClustersLay1->Write(); 
  hThetaSingleClustersLay1->Write();

  fout->Close(); 
  return;

}
 ShowSPDESDs.C:1
 ShowSPDESDs.C:2
 ShowSPDESDs.C:3
 ShowSPDESDs.C:4
 ShowSPDESDs.C:5
 ShowSPDESDs.C:6
 ShowSPDESDs.C:7
 ShowSPDESDs.C:8
 ShowSPDESDs.C:9
 ShowSPDESDs.C:10
 ShowSPDESDs.C:11
 ShowSPDESDs.C:12
 ShowSPDESDs.C:13
 ShowSPDESDs.C:14
 ShowSPDESDs.C:15
 ShowSPDESDs.C:16
 ShowSPDESDs.C:17
 ShowSPDESDs.C:18
 ShowSPDESDs.C:19
 ShowSPDESDs.C:20
 ShowSPDESDs.C:21
 ShowSPDESDs.C:22
 ShowSPDESDs.C:23
 ShowSPDESDs.C:24
 ShowSPDESDs.C:25
 ShowSPDESDs.C:26
 ShowSPDESDs.C:27
 ShowSPDESDs.C:28
 ShowSPDESDs.C:29
 ShowSPDESDs.C:30
 ShowSPDESDs.C:31
 ShowSPDESDs.C:32
 ShowSPDESDs.C:33
 ShowSPDESDs.C:34
 ShowSPDESDs.C:35
 ShowSPDESDs.C:36
 ShowSPDESDs.C:37
 ShowSPDESDs.C:38
 ShowSPDESDs.C:39
 ShowSPDESDs.C:40
 ShowSPDESDs.C:41
 ShowSPDESDs.C:42
 ShowSPDESDs.C:43
 ShowSPDESDs.C:44
 ShowSPDESDs.C:45
 ShowSPDESDs.C:46
 ShowSPDESDs.C:47
 ShowSPDESDs.C:48
 ShowSPDESDs.C:49
 ShowSPDESDs.C:50
 ShowSPDESDs.C:51
 ShowSPDESDs.C:52
 ShowSPDESDs.C:53
 ShowSPDESDs.C:54
 ShowSPDESDs.C:55
 ShowSPDESDs.C:56
 ShowSPDESDs.C:57
 ShowSPDESDs.C:58
 ShowSPDESDs.C:59
 ShowSPDESDs.C:60
 ShowSPDESDs.C:61
 ShowSPDESDs.C:62
 ShowSPDESDs.C:63
 ShowSPDESDs.C:64
 ShowSPDESDs.C:65
 ShowSPDESDs.C:66
 ShowSPDESDs.C:67
 ShowSPDESDs.C:68
 ShowSPDESDs.C:69
 ShowSPDESDs.C:70
 ShowSPDESDs.C:71
 ShowSPDESDs.C:72
 ShowSPDESDs.C:73
 ShowSPDESDs.C:74
 ShowSPDESDs.C:75
 ShowSPDESDs.C:76
 ShowSPDESDs.C:77
 ShowSPDESDs.C:78
 ShowSPDESDs.C:79
 ShowSPDESDs.C:80
 ShowSPDESDs.C:81
 ShowSPDESDs.C:82
 ShowSPDESDs.C:83
 ShowSPDESDs.C:84
 ShowSPDESDs.C:85
 ShowSPDESDs.C:86
 ShowSPDESDs.C:87
 ShowSPDESDs.C:88
 ShowSPDESDs.C:89
 ShowSPDESDs.C:90
 ShowSPDESDs.C:91
 ShowSPDESDs.C:92
 ShowSPDESDs.C:93
 ShowSPDESDs.C:94
 ShowSPDESDs.C:95
 ShowSPDESDs.C:96
 ShowSPDESDs.C:97
 ShowSPDESDs.C:98
 ShowSPDESDs.C:99
 ShowSPDESDs.C:100
 ShowSPDESDs.C:101
 ShowSPDESDs.C:102
 ShowSPDESDs.C:103
 ShowSPDESDs.C:104
 ShowSPDESDs.C:105
 ShowSPDESDs.C:106
 ShowSPDESDs.C:107
 ShowSPDESDs.C:108
 ShowSPDESDs.C:109
 ShowSPDESDs.C:110
 ShowSPDESDs.C:111
 ShowSPDESDs.C:112
 ShowSPDESDs.C:113
 ShowSPDESDs.C:114
 ShowSPDESDs.C:115
 ShowSPDESDs.C:116
 ShowSPDESDs.C:117
 ShowSPDESDs.C:118
 ShowSPDESDs.C:119
 ShowSPDESDs.C:120
 ShowSPDESDs.C:121
 ShowSPDESDs.C:122
 ShowSPDESDs.C:123
 ShowSPDESDs.C:124
 ShowSPDESDs.C:125
 ShowSPDESDs.C:126
 ShowSPDESDs.C:127
 ShowSPDESDs.C:128
 ShowSPDESDs.C:129
 ShowSPDESDs.C:130
 ShowSPDESDs.C:131
 ShowSPDESDs.C:132
 ShowSPDESDs.C:133
 ShowSPDESDs.C:134
 ShowSPDESDs.C:135
 ShowSPDESDs.C:136
 ShowSPDESDs.C:137
 ShowSPDESDs.C:138
 ShowSPDESDs.C:139
 ShowSPDESDs.C:140
 ShowSPDESDs.C:141
 ShowSPDESDs.C:142
 ShowSPDESDs.C:143
 ShowSPDESDs.C:144
 ShowSPDESDs.C:145
 ShowSPDESDs.C:146
 ShowSPDESDs.C:147
 ShowSPDESDs.C:148
 ShowSPDESDs.C:149
 ShowSPDESDs.C:150
 ShowSPDESDs.C:151
 ShowSPDESDs.C:152
 ShowSPDESDs.C:153
 ShowSPDESDs.C:154
 ShowSPDESDs.C:155
 ShowSPDESDs.C:156
 ShowSPDESDs.C:157
 ShowSPDESDs.C:158
 ShowSPDESDs.C:159
 ShowSPDESDs.C:160
 ShowSPDESDs.C:161
 ShowSPDESDs.C:162
 ShowSPDESDs.C:163
 ShowSPDESDs.C:164
 ShowSPDESDs.C:165
 ShowSPDESDs.C:166
 ShowSPDESDs.C:167
 ShowSPDESDs.C:168
 ShowSPDESDs.C:169
 ShowSPDESDs.C:170
 ShowSPDESDs.C:171
 ShowSPDESDs.C:172
 ShowSPDESDs.C:173
 ShowSPDESDs.C:174
 ShowSPDESDs.C:175
 ShowSPDESDs.C:176
 ShowSPDESDs.C:177
 ShowSPDESDs.C:178
 ShowSPDESDs.C:179
 ShowSPDESDs.C:180
 ShowSPDESDs.C:181
 ShowSPDESDs.C:182
 ShowSPDESDs.C:183
 ShowSPDESDs.C:184