//////////////////////////////////////////////////////////////////
// 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;
}