ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include<Riostream.h>
#include<TROOT.h>
#include<TArrayI.h>
#include<TBranch.h>
#include<TCanvas.h>
#include<TClassTable.h>
#include<TClonesArray.h>
#include<TFile.h>
#include<TStyle.h>
#include<TH1.h>
#include<TH2.h>
#include<TLatex.h>
#include <TInterpreter.h>
#include <TGeoManager.h>
#include<TObject.h>
#include<TObjArray.h>
#include<TTree.h>
#include<TNtuple.h>
#include<TParticle.h>
#include "AliStack.h"
#include "AliRun.h"
#include "AliCDBManager.h"
#include "AliGeomManager.h"
#include "AliITS.h"
#include "AliITSgeomTGeo.h"
#include "AliITSDetTypeRec.h"
#include "AliITSRecPoint.h"
#include "AliITSRecPoint.h"
#include "AliITSdigit.h"
#include "AliITSdigitSSD.h"
#include "AliITShit.h"
#include "AliITSmodule.h" 
#include "AliITSsegmentation.h"
#include "AliITSsegmentationSPD.h" 
#include "AliITSsegmentationSDD.h"
#include "AliITSsegmentationSSD.h"
#include "AliRunLoader.h"
#include "AliITSLoader.h"
#include "AliHeader.h"
#endif

/*  $Id$    */

// macro to display the coordindates (local+global) and the energy deposit
// of ITS hits 


void PlotITSHits() {

 
  AliCDBManager* man = AliCDBManager::Instance();
  if (!man->IsDefaultStorageSet()) {
    printf("Setting a local default storage and run number 0\n");
    man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
    man->SetRun(0);
  }
  else {
    printf("Using deafult storage \n");
  }
  // retrives geometry 
  if(!gGeoManager){
    AliGeomManager::LoadGeometry("geometry.root");
  }
  AliGeomManager::ApplyAlignObjsFromCDB("ITS");

  Int_t totmod=AliITSgeomTGeo::GetNModules();
  Int_t modmin=AliITSgeomTGeo::GetModuleIndex(1,1,1);
  Int_t modmax=AliITSgeomTGeo::GetNModules()-1;

  Float_t xlim[6]={4.5,7.5,16.,26.,40.,45.};
  Float_t zlim[6]={15.,15.,22.,30.,45.,55.};

  TH1F* hlayer=new TH1F("hlayer","",6,-0.5,5.5);
  TH1F** hmod=new TH1F*[6];
  TH1F** hxl=new TH1F*[6];
  TH1F** hzl=new TH1F*[6];
  TH1F** hxg=new TH1F*[6];
  TH1F** hyg=new TH1F*[6];
  TH1F** hzg=new TH1F*[6];
  TH1F** hr=new TH1F*[6];
  TH1F** hphi=new TH1F*[6];
  TH2F** hzphi=new TH2F*[6];
  TH1F** hq=new TH1F*[6];

  Char_t name[10];
  for(Int_t iLay=0;iLay<6;iLay++){
    sprintf(name,"hmod%d",iLay+1);
    hmod[iLay]=new TH1F(name,"",totmod,modmin-0.5,modmax+0.5);
    hmod[iLay]->GetXaxis()->SetTitle("Module");
    hmod[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hxloc%d",iLay+1);
    hxl[iLay]=new TH1F(name,"",100,-4.,4.);
    hxl[iLay]->GetXaxis()->SetTitle("Xloc (cm)");
    hxl[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hzloc%d",iLay+1);
    hzl[iLay]=new TH1F(name,"",100,-4.,4.);
    hzl[iLay]->GetXaxis()->SetTitle("Zloc (cm)");
    hzl[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hxgl%d",iLay+1);
    hxg[iLay]=new TH1F(name,"",100,-xlim[iLay],xlim[iLay]);
    hxg[iLay]->GetXaxis()->SetTitle("Xglob (cm)");
    hxg[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hygl%d",iLay+1);
    hyg[iLay]=new TH1F(name,"",100,-xlim[iLay],xlim[iLay]);
    hyg[iLay]->GetXaxis()->SetTitle("Yglob (cm)");
    hyg[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hzgl%d",iLay+1);
    hzg[iLay]=new TH1F(name,"",100,-zlim[iLay],zlim[iLay]);
    hzg[iLay]->GetXaxis()->SetTitle("Zglob (cm)");
    hzg[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hr%d",iLay+1);
    hr[iLay]=new TH1F(name,"",100,0.,50.);
    hr[iLay]->GetXaxis()->SetTitle("r (cm)");
    hr[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hphi%d",iLay+1);
    hphi[iLay]=new TH1F(name,"",100,-TMath::Pi(),TMath::Pi());    
    hphi[iLay]->GetXaxis()->SetTitle("#varphi (rad)");
    hphi[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hq%d",iLay+1);
    hq[iLay]=new TH1F(name,"",100,0.,300.);    
    hq[iLay]->GetXaxis()->SetTitle("Charge (keV)");
    hq[iLay]->GetXaxis()->CenterTitle();
    sprintf(name,"hzphi%d",iLay+1);
    hzphi[iLay]=new TH2F(name,Form("Layer %d",iLay+1),50,-TMath::Pi(),TMath::Pi(),50,-zlim[iLay],zlim[iLay]);
    hzphi[iLay]->GetXaxis()->SetTitle("#varphi (rad)");
    hzphi[iLay]->GetYaxis()->SetTitle("Zglob (cm)");
    hzphi[iLay]->SetStats(0);
  }


  AliRunLoader* rl = AliRunLoader::Open("galice.root");
  if (rl == 0x0){
    cerr<<"Can not open session RL=NULL"<< endl;
    return;
  }
  Int_t retval = rl->LoadgAlice();
  if (retval){
    cerr<<"LoadgAlice returned error"<<endl;
    return;
  }
  gAlice=rl->GetAliRun();
  
  retval = rl->LoadHeader();
  if (retval){
    cerr<<"LoadHeader returned error"<<endl;
    return;
  }
  
  retval = rl->LoadKinematics();
  if (retval){
    cerr<<"LoadKinematics returned error"<<endl;
    return;
  }
  
  AliITSLoader* ITSloader =  (AliITSLoader*) rl->GetLoader("ITSLoader");
  if(!ITSloader){
    cerr<<"ITS loader not found"<<endl;
    return;
  }

  ITSloader->LoadHits("read");
  AliITS *ITS  = (AliITS*)gAlice->GetModule("ITS");
  ITS->SetTreeAddress();
  Int_t totev=rl->GetNumberOfEvents();

  for(Int_t iev=0; iev<totev; iev++){
    rl->GetEvent(iev);

    // HITS
    TTree *TH = ITSloader->TreeH();
    printf("Event %d  Tracks %d\n",iev,(Int_t)TH->GetEntries());
    
    // ITS
    Int_t nmodules;
    ITS->InitModules(-1,nmodules);
    ITS->FillModules(0,0,nmodules," "," ");  
   
    
    for (Int_t mod=modmin; mod<=modmax; mod++){
      Int_t lay,lad,det;
      AliITSgeomTGeo::GetModuleId(mod,lay,lad,det);  
      lay--;

      // Hits
      AliITSmodule *modu = ITS->GetModule(mod);
      TObjArray *arrHits = modu->GetHits();
      Int_t nhits = arrHits->GetEntriesFast();
      for (Int_t iHit=0;iHit<nhits;iHit++) {
	AliITShit *hit = (AliITShit*) arrHits->At(iHit);
	Int_t iMod=hit->GetModule();
	hlayer->Fill(lay);
	Double_t xl,yl,zl,xl0,yl0,zl0;
	Double_t xg,yg,zg,tof,xg0,yg0,zg0,tof0;
	Float_t hitloc[3],hitglo[3];
	hit->GetPositionL(xl,yl,zl,tof);
	hit->GetPositionL0(xl0,yl0,zl0,tof0);
	hit->GetPositionG(xg,yg,zg,tof);
	hit->GetPositionG0(xg0,yg0,zg0,tof0);
	Double_t hitlen=TMath::Abs(yl-yl0);
	if(hitlen<0.005) continue; // remove hits "shorter" than 50 um 
	if(lay > 1 && hitlen<0.025) continue; // remove hits "shorter" than 250 um in SDD,SSD
	hitloc[0]=0.5*(xl+xl0);
	hitloc[1]=0.5*(yl+yl0);
	hitloc[2]=0.5*(zl+zl0);
	hitglo[0]=0.5*(xg+xg0);
	hitglo[1]=0.5*(yg+yg0);
	hitglo[2]=0.5*(zg+zg0);
	Float_t edep=hit->GetIonization()*1000000;
	Float_t rad=TMath::Sqrt(hitglo[0]*hitglo[0]+hitglo[1]*hitglo[1]); 
	Float_t phi=TMath::ATan2(hitglo[1],hitglo[0]);
	hmod[lay]->Fill(iMod);
	hzl[lay]->Fill(hitloc[2]);
	hxl[lay]->Fill(hitloc[0]);
	hzg[lay]->Fill(hitglo[2]);
	hyg[lay]->Fill(hitglo[1]);
	hxg[lay]->Fill(hitglo[0]);
	hr[lay]->Fill(rad);
	hphi[lay]->Fill(phi);
	hq[lay]->Fill(edep);
	hzphi[lay]->Fill(phi,hitglo[2]);
      }
    }
  }

  gStyle->SetOptStat(10);
  gStyle->SetPadBottomMargin(0.14);


  TCanvas **c=new TCanvas*[6];
  Char_t ctit[30];
  for(Int_t iLay=0;iLay<6;iLay++){
    sprintf(name,"can%d",iLay+1);
    sprintf(ctit,"Layer %d",iLay+1);
    c[iLay]=new TCanvas(name,ctit,1200,900);
    c[iLay]->Divide(3,3,0.001,0.001);
    c[iLay]->cd(1);
    hmod[iLay]->Draw();
    c[iLay]->cd(2);
    hxl[iLay]->Draw();
    c[iLay]->cd(3);
    hzl[iLay]->Draw();
    c[iLay]->cd(4);
    hxg[iLay]->Draw();
    c[iLay]->cd(5);
    hyg[iLay]->Draw();
    c[iLay]->cd(6);
    hzg[iLay]->Draw();
    c[iLay]->cd(7);
    hr[iLay]->Draw();
    c[iLay]->cd(8);
    hphi[iLay]->Draw();    
    c[iLay]->cd(9);
    hq[iLay]->Draw();    
  }

  gStyle->SetPalette(1);
  TLatex* tstat=new TLatex();
  tstat->SetNDC();
  TCanvas* cspd=new TCanvas("cspd","SPD",1000,600);
  cspd->Divide(2,1);
  cspd->cd(1);
  hzphi[0]->Draw("colz");
  tstat->DrawLatex(0.6,0.92,Form("# Clusters = %d",int(hzphi[0]->GetEntries())));
  cspd->cd(2);
  hzphi[1]->Draw("colz");
  tstat->DrawLatex(0.6,0.92,Form("# Clusters = %d",int(hzphi[1]->GetEntries())));

  TCanvas* csdd=new TCanvas("csdd","SDD",1000,600);
  csdd->Divide(2,1);
  csdd->cd(1);
  hzphi[2]->Draw("colz");
  tstat->DrawLatex(0.6,0.92,Form("# Clusters = %d",int(hzphi[2]->GetEntries())));  
  csdd->cd(2);
  hzphi[3]->Draw("colz");
  tstat->DrawLatex(0.6,0.92,Form("# Clusters = %d",int(hzphi[3]->GetEntries())));  

  TCanvas* cssd=new TCanvas("cssd","SSD",1000,600);
  cssd->Divide(2,1);
  cssd->cd(1);
  hzphi[4]->Draw("colz");
  tstat->DrawLatex(0.6,0.92,Form("# Clusters = %d",int(hzphi[4]->GetEntries())));  
  cssd->cd(2);
  hzphi[5]->Draw("colz");
  tstat->DrawLatex(0.6,0.92,Form("# Clusters = %d",int(hzphi[5]->GetEntries())));  

}
 PlotITSHits.C:1
 PlotITSHits.C:2
 PlotITSHits.C:3
 PlotITSHits.C:4
 PlotITSHits.C:5
 PlotITSHits.C:6
 PlotITSHits.C:7
 PlotITSHits.C:8
 PlotITSHits.C:9
 PlotITSHits.C:10
 PlotITSHits.C:11
 PlotITSHits.C:12
 PlotITSHits.C:13
 PlotITSHits.C:14
 PlotITSHits.C:15
 PlotITSHits.C:16
 PlotITSHits.C:17
 PlotITSHits.C:18
 PlotITSHits.C:19
 PlotITSHits.C:20
 PlotITSHits.C:21
 PlotITSHits.C:22
 PlotITSHits.C:23
 PlotITSHits.C:24
 PlotITSHits.C:25
 PlotITSHits.C:26
 PlotITSHits.C:27
 PlotITSHits.C:28
 PlotITSHits.C:29
 PlotITSHits.C:30
 PlotITSHits.C:31
 PlotITSHits.C:32
 PlotITSHits.C:33
 PlotITSHits.C:34
 PlotITSHits.C:35
 PlotITSHits.C:36
 PlotITSHits.C:37
 PlotITSHits.C:38
 PlotITSHits.C:39
 PlotITSHits.C:40
 PlotITSHits.C:41
 PlotITSHits.C:42
 PlotITSHits.C:43
 PlotITSHits.C:44
 PlotITSHits.C:45
 PlotITSHits.C:46
 PlotITSHits.C:47
 PlotITSHits.C:48
 PlotITSHits.C:49
 PlotITSHits.C:50
 PlotITSHits.C:51
 PlotITSHits.C:52
 PlotITSHits.C:53
 PlotITSHits.C:54
 PlotITSHits.C:55
 PlotITSHits.C:56
 PlotITSHits.C:57
 PlotITSHits.C:58
 PlotITSHits.C:59
 PlotITSHits.C:60
 PlotITSHits.C:61
 PlotITSHits.C:62
 PlotITSHits.C:63
 PlotITSHits.C:64
 PlotITSHits.C:65
 PlotITSHits.C:66
 PlotITSHits.C:67
 PlotITSHits.C:68
 PlotITSHits.C:69
 PlotITSHits.C:70
 PlotITSHits.C:71
 PlotITSHits.C:72
 PlotITSHits.C:73
 PlotITSHits.C:74
 PlotITSHits.C:75
 PlotITSHits.C:76
 PlotITSHits.C:77
 PlotITSHits.C:78
 PlotITSHits.C:79
 PlotITSHits.C:80
 PlotITSHits.C:81
 PlotITSHits.C:82
 PlotITSHits.C:83
 PlotITSHits.C:84
 PlotITSHits.C:85
 PlotITSHits.C:86
 PlotITSHits.C:87
 PlotITSHits.C:88
 PlotITSHits.C:89
 PlotITSHits.C:90
 PlotITSHits.C:91
 PlotITSHits.C:92
 PlotITSHits.C:93
 PlotITSHits.C:94
 PlotITSHits.C:95
 PlotITSHits.C:96
 PlotITSHits.C:97
 PlotITSHits.C:98
 PlotITSHits.C:99
 PlotITSHits.C:100
 PlotITSHits.C:101
 PlotITSHits.C:102
 PlotITSHits.C:103
 PlotITSHits.C:104
 PlotITSHits.C:105
 PlotITSHits.C:106
 PlotITSHits.C:107
 PlotITSHits.C:108
 PlotITSHits.C:109
 PlotITSHits.C:110
 PlotITSHits.C:111
 PlotITSHits.C:112
 PlotITSHits.C:113
 PlotITSHits.C:114
 PlotITSHits.C:115
 PlotITSHits.C:116
 PlotITSHits.C:117
 PlotITSHits.C:118
 PlotITSHits.C:119
 PlotITSHits.C:120
 PlotITSHits.C:121
 PlotITSHits.C:122
 PlotITSHits.C:123
 PlotITSHits.C:124
 PlotITSHits.C:125
 PlotITSHits.C:126
 PlotITSHits.C:127
 PlotITSHits.C:128
 PlotITSHits.C:129
 PlotITSHits.C:130
 PlotITSHits.C:131
 PlotITSHits.C:132
 PlotITSHits.C:133
 PlotITSHits.C:134
 PlotITSHits.C:135
 PlotITSHits.C:136
 PlotITSHits.C:137
 PlotITSHits.C:138
 PlotITSHits.C:139
 PlotITSHits.C:140
 PlotITSHits.C:141
 PlotITSHits.C:142
 PlotITSHits.C:143
 PlotITSHits.C:144
 PlotITSHits.C:145
 PlotITSHits.C:146
 PlotITSHits.C:147
 PlotITSHits.C:148
 PlotITSHits.C:149
 PlotITSHits.C:150
 PlotITSHits.C:151
 PlotITSHits.C:152
 PlotITSHits.C:153
 PlotITSHits.C:154
 PlotITSHits.C:155
 PlotITSHits.C:156
 PlotITSHits.C:157
 PlotITSHits.C:158
 PlotITSHits.C:159
 PlotITSHits.C:160
 PlotITSHits.C:161
 PlotITSHits.C:162
 PlotITSHits.C:163
 PlotITSHits.C:164
 PlotITSHits.C:165
 PlotITSHits.C:166
 PlotITSHits.C:167
 PlotITSHits.C:168
 PlotITSHits.C:169
 PlotITSHits.C:170
 PlotITSHits.C:171
 PlotITSHits.C:172
 PlotITSHits.C:173
 PlotITSHits.C:174
 PlotITSHits.C:175
 PlotITSHits.C:176
 PlotITSHits.C:177
 PlotITSHits.C:178
 PlotITSHits.C:179
 PlotITSHits.C:180
 PlotITSHits.C:181
 PlotITSHits.C:182
 PlotITSHits.C:183
 PlotITSHits.C:184
 PlotITSHits.C:185
 PlotITSHits.C:186
 PlotITSHits.C:187
 PlotITSHits.C:188
 PlotITSHits.C:189
 PlotITSHits.C:190
 PlotITSHits.C:191
 PlotITSHits.C:192
 PlotITSHits.C:193
 PlotITSHits.C:194
 PlotITSHits.C:195
 PlotITSHits.C:196
 PlotITSHits.C:197
 PlotITSHits.C:198
 PlotITSHits.C:199
 PlotITSHits.C:200
 PlotITSHits.C:201
 PlotITSHits.C:202
 PlotITSHits.C:203
 PlotITSHits.C:204
 PlotITSHits.C:205
 PlotITSHits.C:206
 PlotITSHits.C:207
 PlotITSHits.C:208
 PlotITSHits.C:209
 PlotITSHits.C:210
 PlotITSHits.C:211
 PlotITSHits.C:212
 PlotITSHits.C:213
 PlotITSHits.C:214
 PlotITSHits.C:215
 PlotITSHits.C:216
 PlotITSHits.C:217
 PlotITSHits.C:218
 PlotITSHits.C:219
 PlotITSHits.C:220
 PlotITSHits.C:221
 PlotITSHits.C:222
 PlotITSHits.C:223
 PlotITSHits.C:224
 PlotITSHits.C:225
 PlotITSHits.C:226
 PlotITSHits.C:227
 PlotITSHits.C:228
 PlotITSHits.C:229
 PlotITSHits.C:230
 PlotITSHits.C:231
 PlotITSHits.C:232
 PlotITSHits.C:233
 PlotITSHits.C:234
 PlotITSHits.C:235
 PlotITSHits.C:236
 PlotITSHits.C:237
 PlotITSHits.C:238
 PlotITSHits.C:239
 PlotITSHits.C:240
 PlotITSHits.C:241
 PlotITSHits.C:242
 PlotITSHits.C:243
 PlotITSHits.C:244
 PlotITSHits.C:245
 PlotITSHits.C:246
 PlotITSHits.C:247
 PlotITSHits.C:248
 PlotITSHits.C:249
 PlotITSHits.C:250
 PlotITSHits.C:251
 PlotITSHits.C:252
 PlotITSHits.C:253
 PlotITSHits.C:254
 PlotITSHits.C:255
 PlotITSHits.C:256
 PlotITSHits.C:257
 PlotITSHits.C:258
 PlotITSHits.C:259
 PlotITSHits.C:260
 PlotITSHits.C:261
 PlotITSHits.C:262
 PlotITSHits.C:263
 PlotITSHits.C:264
 PlotITSHits.C:265
 PlotITSHits.C:266
 PlotITSHits.C:267
 PlotITSHits.C:268
 PlotITSHits.C:269
 PlotITSHits.C:270
 PlotITSHits.C:271
 PlotITSHits.C:272
 PlotITSHits.C:273
 PlotITSHits.C:274
 PlotITSHits.C:275
 PlotITSHits.C:276
 PlotITSHits.C:277
 PlotITSHits.C:278
 PlotITSHits.C:279
 PlotITSHits.C:280
 PlotITSHits.C:281
 PlotITSHits.C:282
 PlotITSHits.C:283
 PlotITSHits.C:284
 PlotITSHits.C:285
 PlotITSHits.C:286
 PlotITSHits.C:287
 PlotITSHits.C:288