ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <TCanvas.h>
#include <TFile.h>
#include <TLine.h>
#include <TLatex.h>
#include <TClassTable.h>
#include <TInterpreter.h>
#include <TGeoManager.h>
#include <TNtuple.h>
#include "AliRun.h"
#include "AliGeomManager.h"
#include "AliITSgeomTGeo.h"
#include "AliRunLoader.h"
#include "AliITSLoader.h"
#endif

void MakeSDDGeoMap(){
///////////////////////////////////////////////////////////////////////////
//                                                                       //
// Macro to Create SDD geometrical map starting from geometry.root file  //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

  if (gClassTable->GetID("AliRun") < 0) {
    gInterpreter->ExecuteMacro("loadlibs.C");
  }
  else { 
    if(gAlice){
      delete AliRunLoader::Instance();
      delete gAlice;
      gAlice=0;
    }
  }
  // retrives geometry 
  if(!gGeoManager){
    AliGeomManager::LoadGeometry("geometry.root");
  }
  
  TNtuple *ntsddgeo=new TNtuple("ntsddgeo","SDD module positions","iMod:lay:lad:det:x:y:z:r:theta:phi");
  Float_t xnt[10];
  FILE *outfil;
  outfil=fopen("SDDgeomap.data","w");
  
  Int_t first = AliITSgeomTGeo::GetModuleIndex(3,1,1);
  Int_t last = AliITSgeomTGeo::GetModuleIndex(5,1,1)-1;
  Double_t pos[3];
  Int_t lay,lad,det;
  //  TPaveText **text=new TPaveText*[36];
  TLatex **text=new TLatex*[36];
  TLatex **ltext=new TLatex*[36];
  TLine **linxy=new TLine*[36];
  Char_t modtxt[3];
  Char_t ladtxt[8];
  Int_t it=0;
  Float_t D=3.5; //SDD half length along drift
  for (Int_t iMod=first; iMod<=last; iMod++){
    fprintf(outfil,"=========================================================\n");
    AliITSgeomTGeo::GetModuleId(iMod,lay,lad,det);
    AliITSgeomTGeo::GetTranslation(iMod,pos);
    Float_t rad=TMath::Sqrt(pos[0]*pos[0]+pos[1]*pos[1]);
    Float_t theta=90.-TMath::ATan2(pos[2],rad)*TMath::RadToDeg();
    Float_t phi=TMath::ATan2(pos[1],pos[0])*TMath::RadToDeg();
    fprintf(outfil,"ModuleId=%d   --- Layer %d  Ladder %d  Det %d\n",iMod,lay,lad,det);
    fprintf(outfil,"Global coordinates: x=%f \t y=%f \t z=%f\n",pos[0],pos[1],pos[2]);
    fprintf(outfil,"                    r=%f \t theta=%f \t phi=%f\n",rad,theta,phi);
    xnt[0]=(Float_t)iMod;
    xnt[1]=(Float_t)lay;    
    xnt[2]=(Float_t)lad;    
    xnt[3]=(Float_t)det;
    xnt[4]=pos[0];
    xnt[5]=pos[1];
    xnt[6]=pos[2];
    xnt[7]=rad;
    xnt[8]=theta;
    xnt[9]=phi;
    ntsddgeo->Fill(xnt);
    sprintf(modtxt,"%d",iMod);
    sprintf(ladtxt,"L%d",lad);
    if(det==1){ 
      text[it]=new TLatex(1.1*pos[0],1.1*pos[1],modtxt);
      text[it]->SetTextAlign(22);
      text[it]->SetTextColor(2);
      text[it]->SetTextSize(0.03);      
      ltext[it]=new TLatex(.9*pos[0],.9*pos[1],ladtxt);
      ltext[it]->SetTextAlign(22);
      ltext[it]->SetTextColor(4);
      ltext[it]->SetTextSize(0.03);
      Float_t deltax=D*TMath::Sin(phi*TMath::DegToRad());
      Float_t deltay=D*TMath::Cos(phi*TMath::DegToRad());
      linxy[it]=new TLine(pos[0]-deltax,pos[1]+deltay,pos[0]+deltax,pos[1]-deltay);
      linxy[it]->SetLineWidth(2);
      it++;
    }
  }
  fclose(outfil);
  ntsddgeo->SetMarkerStyle(7);
  TCanvas *c1;
  c1=new TCanvas("c1","",800,800);
  ntsddgeo->Draw("y:x");
  for(Int_t i=0;i<36;i++){
    linxy[i]->Draw();
    text[i]->Draw();
    ltext[i]->Draw();
  }
  

  TCanvas *c2=new TCanvas("c2","",1200,800);
  c2->Divide(3,2);
  c2->cd(1);
  ntsddgeo->SetMarkerColor(1);
  ntsddgeo->Draw("x:iMod");
  ntsddgeo->SetMarkerColor(2);
  ntsddgeo->Draw("x:iMod","lay==4","same");
  c2->cd(2);
  ntsddgeo->SetMarkerColor(1);
  ntsddgeo->Draw("y:iMod");
  ntsddgeo->SetMarkerColor(2);
  ntsddgeo->Draw("y:iMod","lay==4","same");
  c2->cd(3);
  ntsddgeo->SetMarkerColor(1);
  ntsddgeo->Draw("z:iMod");
  ntsddgeo->SetMarkerColor(2);
  ntsddgeo->Draw("z:iMod","lay==4","same");
  c2->cd(4);
  ntsddgeo->SetMarkerColor(1);
  ntsddgeo->Draw("r:iMod");
  ntsddgeo->SetMarkerColor(2);
  ntsddgeo->Draw("r:iMod","lay==4","same");
  TLatex *t3=new TLatex(0.68,0.45,"Layer 3");
  t3->SetTextSize(0.05);
  t3->SetNDC();
  t3->Draw();
  TLatex *t4=new TLatex(0.68,0.37,"Layer 4");
  t4->SetTextSize(0.05);
  t4->SetNDC();
  t4->SetTextColor(2);
  t4->Draw();
  c2->cd(5);
  ntsddgeo->SetMarkerColor(1);
  ntsddgeo->Draw("phi:iMod");
  ntsddgeo->SetMarkerColor(2);
  ntsddgeo->Draw("phi:iMod","lay==4","same");
  t3->Draw();
  t4->Draw();
  c2->cd(6);
  ntsddgeo->SetMarkerColor(1);
  ntsddgeo->Draw("theta:iMod");
  ntsddgeo->SetMarkerColor(2);
  ntsddgeo->Draw("theta:iMod","lay==4","same");
  t3->Draw();
  t4->Draw();
  
  TFile *f=new TFile("SDDgeomap.root","recreate");
  f->cd();
  ntsddgeo->Write();
  f->Close();
  
}


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