ROOT logo
void AliITSAnalizeSPDHits(TString hfn="galice.root",Int_t mod=-1,
                     Int_t evnt=-1){
  // Macro to analize hits in the SPD to chatch posible problems

  // Dynamically link some shared libs
  if (gClassTable->GetID("AliRun") < 0) {
    gROOT->LoadMacro("loadlibs.C");
    loadlibs();
  } else {
    if(gAlice){
      delete AliRunLoader::Instance();
      delete gAlice;
      gAlice=0;
    }
  }
  gROOT->LoadMacro("$(ALICE_ROOT)/ITS/AliITSstandard.C");
  // Set OCDB if needed
  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 
  TString geof(gSystem->DirName(hfn));
  geof += "/geometry.root";
  TGeoManager::Import(geof.Data());
  if (!gGeoManager) {
    cout<<"geometry not found\n";
    return -1;
  }


  AliRunLoader *rl = AccessFile(hfn); // Set up to read in Data
  Int_t retval = rl->LoadHeader();
  if (retval){
    cerr<<"AliITSPrintHits.C : LoadHeader returned error"<<endl;
    return;
  }

  AliITSLoader* ITSloader =  (AliITSLoader*) rl->GetLoader("ITSLoader");

  if(!ITSloader){
    cerr<<"AliITSPrintHits.C :  ITS loader not found"<<endl;
    return;
  }

  ITSloader->LoadHits("read");
  AliITS *ITS = (AliITS*)gAlice->GetDetector("ITS");
  if(!ITS || ITS==0){
    cout << "Error: no ITS found. Aborting"<<endl;
    return;
  } // end if !ITS
  //cout << ITS << endl;
  AliITSInitGeometry *initgeom = new AliITSInitGeometry(ITS->GetMajorVersion(),ITS->GetMinorVersion());
  //cout << initgeom << endl;
  AliITSgeom *geom = initgeom->CreateAliITSgeom();
  if(!geom){
    cout << "Error: not AliITSgeom object found."<<endl;
    return;
  } // end if geom
  ITSloader->SetITSgeom(geom);

  Int_t evNumber1 = 0;
  Int_t evNumber2 = AliRunLoader::GetNumberOfEvents();
  if(evnt>=0){
    evNumber1 = evnt;
    evNumber2 = evnt+1;
  } // end if evnt>=0
  Int_t mod1 = 0;
  Int_t mod2 = geom->GetIndexMax();
  if(mod>=0){
    mod1 = mod;
    mod2 = mod+1;
  } // end if mod>=0
  AliITShit *hp = 0;

  Int_t i;
  Double_t zbin[161];
  for(i=0;i<161;i++) zbin[i] = 425.0E-4;
  zbin[32] = zbin[64] = zbin[96] = zbin[128] = 625.0E-4;
  zbin[0] = -3.536;
  for(i=1;i<161;i++) zbin[i] += zbin[i-1];
  TH1I *phiDistribution1 = new TH1I("phiDistribution1",
		   "Phi Distribution for the inner most layer of the SPD",
				    5027,0.0,360.0);
  TH2I *detCoverage1 = new TH2I("detCoverage1",
	      "The SPD layer 1 cell coverage summed over the first ladder per sector",
				160,(Double_t *)zbin,256,-0.64,+0.64);
  TH2I *detCoverage1a = new TH2I("detCoverage1a",
	      "The SPD layer 1 cell coverage sum over the second ladder per sector",
				 160,(Double_t *)zbin,256,-0.64,+0.64);
  TH2I *detThicknessZ1 = new TH2I("detThicknessZ1",
                    "Hit local y distribution as a function of z",
				  160,(Double_t*)zbin,200,-100.E-4,+100.E-4);
  TH2I *detThicknessX1 = new TH2I("detThicknessX1",
                    "Hit local y distribution as a function of x",
				  256,-0.64,+0.64,200,-100.E-4,+100.E-4);
  TH1I *phiDistribution2 = new TH1I("phiDistribution2",
		   "Phi Distribution for the outer most layer of the SPD",
				    8800,0.0,360.0);
  TH2I *detCoverage2 = new TH2I("detCoverage2",
	      "The SPD layer 2 cell coverage summed over all but the forth ladder per sector",
				160,(Double_t *)zbin,256,-0.64,+0.64);
  TH2I *detCoverage2a = new TH2I("detCoverage2a",
	      "The SPD layer 2 cell coverage summed over all forth ladder per sector",
				 160,(Double_t *)zbin,256,-0.64,+0.64);
  TH2I *detThicknessZ2 = new TH2I("detThicknessZ2",
                    "Hit local y distribution as a function of z",
				  160,(Double_t*)zbin,200,-100.E-4,+100.E-4);
  TH2I *detThicknessX2 = new TH2I("detThicknessX2",
                    "Hit local y distribution as a function of x",
				  256,-0.64,+0.64,200,-100.E-4,+100.E-4);
  TH2I *xySpace = new TH2I("xySpace",
			   "ALICE global coorinate location of hits in X,y",
			   100,-8.0,+8.0,100,-8.0,+8.0);
  TH2I *zrSpace = new TH2I("zrSpace",
			   "ALICE global coorinate location of hits in z,r",
			   100,-15.0,+15.0,100,0.0,+8.0);
  Double_t xg,yg,zg,xl,yl,zl,phi;
  Int_t nmodules,size=-1;
  Int_t event,m,i,i2,hit,trk,lay,lad,det;
  for(event = evNumber1; event < evNumber2; event++){
    //cout<<"Processing event "<<event<<endl;
    rl->GetEvent(event);
    ITS->InitModules(size,nmodules);
    ITS->FillModules(event,0,-1," "," ");
    for(m=mod1;m<mod2;m++)if(geom->GetModuleType(m)==(AliITSDetector)(0)){
      i2 = (ITS->GetModule(m))->GetNhits();
      //cout <<  "Event=" << event << " module=" << m <<
      //  " Number of Hits=" << i2 <<endl;
      for(i=0;i<i2;i++){
        trk = (ITS->GetModule(m))->GetHitTrackIndex(i);
        hit = (ITS->GetModule(m))->GetHitHitIndex(i);
        hp  = (ITS->GetModule(m))->GetHit(i);
	hp->GetPositionG(xg,yg,zg);
	hp->GetPositionL(xl,yl,zl);
	geom->GetModuleId(m,lay,lad,det);
	phi = TMath::ATan2(yg,xg)*TMath::RadToDeg();
	if(phi<0.0) phi+=360.0;
	switch(lay){
	case 1:
	  phiDistribution1->Fill(phi,1.0);
	  if(lad%2==1) detCoverage1->Fill(zl,xl,1.0);
	  if(lad%2==0) detCoverage1a->Fill(zl,xl,1.0);
	  detThicknessZ1->Fill(zl,yl,1.0);
	  detThicknessX1->Fill(xl,yl,1.0);
	  break;
	case 2:
	  phiDistribution2->Fill(phi,1.0);
	  if(lad%4!=0) detCoverage2->Fill(zl,xl,1.0);
	  if(lad%4==0) detCoverage2a->Fill(zl,xl,1.0);
	  detThicknessZ2->Fill(zl,yl,1.0);
	  detThicknessX2->Fill(xl,yl,1.0);
	break;
	default:
	} // end switch
      } // end for i
    } // end for m
    ITS->ClearModules();
  } // end for event
  //
  cout << "Creating pad"<<endl;
  TVirtualPad *pad=0;
  TCanvas *c0 = new TCanvas("c0","SPD Hits Tests",262,50,700,534);
  c0->Range(0,0,1,1);
  c0->Divide(3,2);
  //
  pad = c0->cd(1);
  phiDistribution2->Draw();
  pad = c0->cd(4);
  phiDistribution1->Draw();
  TPad *pad2 = c0->cd(2);
  delete pad2;
  c0->cd(0);
  TPad *pad21 = new TPad("pad21","CoverageZ",0.34,0.875,0.65,1.0);
  pad21->Draw();
  pad21->cd();
  pad21->Range(0,0,1,1);
  pad21->Modified();
  detCoverage2->Draw();
  c0->Update();
  c0->cd(0);
  TPad *pad22 = new TPad("pad22","CoverageZa",0.34,0.75,0.65,0.875);
  pad22->Draw();
  pad22->cd();
  pad22->Range(0,0,1,1);
  pad22->Modified();
  detCoverage2a->Draw();
  c0->Update();
  c0->cd(0);
  TPad *pad23 = new TPad("pad23","ThicknessZ",0.34,0.625,0.65,0.75);
  pad23->Draw();
  pad23->cd();
  pad23->Range(0,0,1,1);
  pad23->Modified();
  detThicknessZ2->Draw();
  c0->Update();
  c0->cd(0);
  TPad *pad24 = new TPad("pad24","ThicknessX",0.34,0.50,0.65,0.625);
  pad24->Draw();
  pad24->cd();
  pad24->Range(0,0,1,1);
  pad24->Modified();
  detThicknessX2->Draw();
  c0->Update();
  //
  c0->cd(0);
  TPad *pad5 = c0->cd(5);
  delete pad5;
  c0->cd(0);
  TPad *pad51 = new TPad("pad51","CoverageZ",0.34,0.375,0.65,0.50);
  pad51->Draw();
  pad51->cd();
  pad51->Range(0,0,1,1);
  pad51->Modified();
  detCoverage1->Draw();
  c0->Update();
  c0->cd(0);
  TPad *pad52 = new TPad("pad52","CoverageZa",0.34,0.25,0.65,0.375);
  pad52->Draw();
  pad52->cd();
  pad52->Range(0,0,1,1);
  pad52->Modified();
  detCoverage1a->Draw();
  c0->Update();
  c0->cd(0);
  TPad *pad53 = new TPad("pad53","ThicknessZ",0.34,0.125,0.65,0.25);
  pad53->Draw();
  pad53->cd();
  pad53->Range(0,0,1,1);
  pad53->Modified();
  detThicknessZ1->Draw();
  c0->Update();
  c0->cd(0);
  TPad *pad54 = new TPad("pad54","ThicknessX",0.34,0.00,0.65,0.125);
  pad54->Draw();
  pad54->cd();
  pad54->Range(0,0,1,1);
  pad54->Modified();
  detThicknessX1->Draw();
  c0->Update();
  //
  TList *tvTreeList = new TList;
  TTree *tvTree = (TTree *) gROOT->FindObject("TreeH");
  tvTreeList->Add(tvTree);
  pad = c0->cd(3);
  tvTree->Draw("ITS.fY:ITS.fX","ITS.fModule<240","", 100000, 0);
  pad = c0->cd(6);
  tvTree->Draw("ITS.fX*ITS.fX+ITS.fY*ITS.fY:ITS.fZ","ITS.fModule<240","", 
		 100000, 0);

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