ROOT logo
void plotHits(Int_t ilay=3, Int_t ilrs=1, Int_t nev=-1, Int_t evStart=0)
{
  // Adapted from readHit.C macro - M.S. 10 jul 14

  enum {kLSLayer, kLSStave , kLSHalfStave, kLSModule,
	kLSChip , kLSSensor, kLSNumPar   };
  char lrsNames[kLSNumPar][10];
  Int_t i = -1;
  strcpy(lrsNames[++i],"Layer");
  strcpy(lrsNames[++i],"Stave");
  strcpy(lrsNames[++i],"HalfStave");
  strcpy(lrsNames[++i],"Module");
  strcpy(lrsNames[++i],"Chip");
  strcpy(lrsNames[++i],"Sensor");

  Int_t idWrapVol[7] = {0, 0, 0, 1, 1, 2, 2};

  Bool_t argerr = kFALSE;

  if (ilay < 0 || ilay > 6 ||
      ilrs < 0 || ilrs >= kLSNumPar ) argerr = kTRUE;

  if (argerr) {
    printf("Wrong parameters! ilay = %d - ilrs = %d\n\n",ilay,ilrs);
    printf("Usage:\n.x plotHit(ilay, ilrs, nev, evStart)\n");
    printf("   ilay : layer number (0 < ilay < 7, default 0)\n");
    printf("   ilrs : local reference system (0 layer, 1 stave, 2 half stave, 3 module, 4 chip, 5 sensor, default 1)\n");
    printf("   nev : number of events (default -1 = all)\n");
    printf("   evStart : first event (default 0)\n");
    return;
  }

  printf("--> Plotting hits at %s level for Layer %d <--\n",
	 lrsNames[ilrs],ilay);

  gROOT->SetStyle("Plain");

  // Load libraries, geometry, pointers, whatever
  gSystem->Load("libITSUpgradeBase");
  gSystem->Load("libITSUpgradeSim");

  gAlice=NULL;
  AliRunLoader* runLoader = AliRunLoader::Open("galice.root");
  runLoader->LoadgAlice();

  gAlice = runLoader->GetAliRun();

  runLoader->LoadHeader();
  runLoader->LoadKinematics();
  runLoader->LoadSDigits();
  runLoader->LoadHits();

  AliGeomManager::LoadGeometry("geometry.root");
  AliITSUGeomTGeo* gm = new AliITSUGeomTGeo(kTRUE);

  AliLoader *dl = runLoader->GetDetectorLoader("ITS");

  // Create histos
  char volName[15];
  sprintf(volName,"ITSU%s%d",lrsNames[ilrs],ilay);
  TGeoBBox *vShape = (TGeoBBox*)(gGeoManager->GetVolume(volName)->GetShape());
  Double_t xHist = 1.1*vShape->GetDX(); // 10% greater
  Double_t yHist = 1.1*vShape->GetDY();
  Double_t zHist = 1.1*vShape->GetDZ();

  // OB stave are strongly asymmetric in Y: dimension increased for better view
  if (ilay > 2 && ilrs == kLSStave) yHist*=1.20;

  char histTitle[50];

  sprintf(histTitle," X - Y %s Local coordinates",lrsNames[ilrs]);
  TH2F *xy = new TH2F("xy",histTitle,100,-xHist,xHist,100,-yHist,yHist);
  xy->SetXTitle("X (cm)");
  xy->SetYTitle("Y (cm)");
  xy->SetMarkerStyle(7);

  sprintf(histTitle," X - Z %s Local coordinates",lrsNames[ilrs]);
  TH2F *xz = new TH2F("xz",histTitle,100,-xHist,xHist,100,-zHist,zHist);
  xz->SetXTitle("X (cm)");
  xz->SetYTitle("Z (cm)");
  xz->SetMarkerStyle(7);

  sprintf(histTitle," Z - Y %s Local coordinates",lrsNames[ilrs]);
  TH2F *zy = new TH2F("zy",histTitle,100,-zHist,zHist,100,-yHist,yHist);
  zy->SetXTitle("Z (cm)");
  zy->SetYTitle("Y (cm)");
  zy->SetMarkerStyle(7);

  // Get number of events which to loop on
  Int_t nevTot = (Int_t)runLoader->GetNumberOfEvents();
  printf("Total events : %i\n\n",nevTot);
  evStart = evStart<nevTot ? evStart : nevTot-1;
  if (evStart<0) evStart = 0;

  Int_t lastEv = nev<0 ? nevTot : evStart+nev;
  if (lastEv > nevTot) lastEv = nevTot;

  // Loop on hit structure
  TTree *hitTree = 0x0;
  TClonesArray *hitList=new TClonesArray("AliITSUHit");

  TString path;
  TGeoMatrix *mat = 0x0;
  char nodName[15], parName[15];

  for (Int_t iEvent = evStart; iEvent < lastEv; iEvent++) {

    printf("Event\t%d\n",iEvent);
 
    runLoader->GetEvent(iEvent);
    
    hitTree = dl->TreeH();
    hitTree->SetBranchAddress("ITS",&hitList);

    for(Int_t iEnt=0; iEnt<hitTree->GetEntries(); iEnt++){
      hitTree->GetEntry(iEnt);

      for(Int_t iHit=0; iHit<hitList->GetEntries();iHit++){
	AliITSUHit *pHit = (AliITSUHit*)hitList->At(iHit);

	Int_t id = pHit->GetChip();
	Int_t lr = gm->GetLayer(id);
	Int_t st = gm->GetStave(id);
	Int_t hs = gm->GetHalfStave(id);
	Int_t md = gm->GetModule(id);
	Int_t cp = gm->GetChipIdInModule(id);

	if (lr == ilay) {
	  Double_t xg, yg, zg=0.;
	  Double_t loc[3], mas[3];

	  pHit->GetPositionG(xg, yg, zg);
	  mas[0] = xg;
	  mas[1] = yg;
	  mas[2] = zg;
	  path.Clear();
	  path = Form("/ALIC_1/ITSV_2/");
	  path += Form("ITSUWrapVol%d_1/ITSULayer%d_1",idWrapVol[ilay],ilay);
	  if (ilrs > kLSLayer)
	    path += Form("/ITSUStave%d_%d",ilay,st);
	  if (ilrs > kLSStave)
	    path += Form("/ITSUHalfStave%d_%d",ilay,hs);
	  if (ilrs > kLSHalfStave)
	    path += Form("/ITSUModule%d_%d",ilay,md);
	  if (ilrs > kLSModule)
	    path += Form("/ITSUChip%d_%d",ilay,cp);
	  if (ilrs > kLSChip)
	    path += Form("/ITSUSensor%d_1",ilay);

	  // Get the matrix for the current volume
	  gGeoManager->PushPath();
	  if (!gGeoManager->cd(path.Data())) {
	    gGeoManager->PopPath();
	    printf("Error in cd-ing to %s!\n",path.Data());
	    printf("Chip id %5d | Lr:%2d Stave:%3d, HStave:%3d Module:%3d Chip:%3d\n",
		   id,lr,st,hs,md,cp);
	  
	    return 1;
	  }
	  mat = gGeoManager->GetCurrentMatrix();
	  gGeoManager->PopPath();

	  // Convert global coordinate to local reference system
	  mat->MasterToLocal(mas, loc);
	  xy->Fill(loc[0],loc[1]);
	  xz->Fill(loc[0],loc[2]);
	  zy->Fill(loc[2],loc[1]);

	} // lr == ilay
      }//loop hit 
    }//entryloopHitList
	
  }//event loop

  // Finally plot the histos
  TCanvas *xyCanv =  new TCanvas("xyCanv","Hit X-Y positions",500,500);
  xyCanv->cd();
  xy->Draw();

  TCanvas *xzCanv =  new TCanvas("xzCanv","Hit X-Z positions",500,500);
  xzCanv->cd();
  xz->Draw();

  TCanvas *zyCanv =  new TCanvas("zyCanv","Hit Z-Y positions",500,500);
  zyCanv->cd();
  zy->Draw();

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