ROOT logo
void AliITSPlotGeom(const char *filename="galice.root"){
/////////////////////////////////////////////////////////////////////////
//   This macro displays part of the ITS sensitive volume as defined
// in the root file.
//   
//     Root > .L AliITSPlotGeom.C         //this loads the macro in memory
//     Root > AliITSPlotGeom();           //by default process first event   
//     Root > AliITSPlotGeom("galice2.root"); //process third event from 
//                                              galice2.root file.
//End_Html
/////////////////////////////////////////////////////////////////////////
    if(gAlice){
	delete gAlice;
	gAlice=0;
    }else{
	// Dynamically link some shared libs
	if(gClassTable->GetID("AliRun") < 0) {
	    gROOT->LoadMacro("loadlibs.C");
	    loadlibs();
	} // end if
    } // end if gAlice
    // Connect the Root Galice file containing Geometry, Kine and Hits
    TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(filename);
    if(!file) file = new TFile(filename);

    // Get AliRun object from file or create it if not on file
    if(!gAlice) {
	gAlice = (AliRun*)file->Get("gAlice");
	if(gAlice) printf("AliRun object found on file\n");
	if(!gAlice) gAlice = new AliRun("gAlice","Alice test program");
    } // end if !gAlice
      

// Get pointers to the ITS Alice detectors and Hits containers
    AliITS    *ITS    = (AliITS*)    gAlice->GetDetector("ITS");
    if(ITS==0){
	cout << "ITS not found. Exiting." << endl;
	return;
    } // end if ITS==0
    AliITSgeom *itsgeom = ITS->GetITSgeom();
    if(itsgeom==0){
	cout << "ITSgeom not defined. Exiting." << endl;
	return;
    } // end if itsgeom==0
    Int_t is,ie,in;
    is = itsgeom->GetStartSPD();
    ie = itsgeom->GetLastSPD()+1;
    in = ie-is;

    // Transformations.
//    Float_t *x = new Float_t[in];
//    Float_t *y = new Float_t[in];
//    Float_t *z = new Float_t[in];
    Float_t x,y,z;
    TRotMatrix **r = new TRotMatrix*[in];
    Int_t i,j;
    Double_t m[9];
    char name[10],title[20],name2[10],title2[20];
//    cout << in << endl;
    for(i=0;i<in;i++){
	itsgeom->GetRotMatrix(i+is,m);
	sprintf(name,"ROT%d",i+is);
	sprintf(title,"ROT%d",i+is);
	r[i] = new TRotMatrix(name,title,m);
//	cout << name << title << endl;
//	itsgeom->GetTrans(i+is,x[i],y[i],z[i]);
//	cout << i << " " << x[i] << " " << y[i] << " " << z[i] <<endl;
    } // end for i

    // Sensitive volumes.
    if(itsgeom->IsShapeDefined(0)){
	TBRIK *spds = (TShape*) (itsgeom->GetShape(0));
    }else{
	TBRIK *spds = new TBRIK("SPD","SPD","void",0.64,0.015,3.48);
    } // end if
//    cout << spds << endl;
    if(itsgeom->IsShapeDefined(1)){
	TBRIK *sdds = (TShape*) (itsgeom->GetShape(240));
    }else{
	TBRIK *sdds = new TBRIK("SDD","SDD","void",3.50850,0.01499,3.76320);
    } // end if
//    cout << sdds << endl;
    if(itsgeom->IsShapeDefined(2)){
	TBRIK *ssds = (TShape*) (itsgeom->GetShape(1000));
    }else{
	TBRIK *ssds = new TBRIK("SSD","SSD","void",3.65,0.015,2.00);
    } // end if
//    cout << ssds << endl;

    // Set up display.

    TCanvas *c1 = new TCanvas("c1","ITS geometry",10,10,700,700);
//  TPad *p1 = new TPad("p1","p1",0.01,0.01,0.99,0.99,46,3,1);
//  p1->Draw();
//  p1->cd();
//  TView *view = new TView(1);
//  view->SetRange(-5,-5,-5,5,5,5);
      TShape  *mother = new TBRIK("Mother","Mother Volume","void",10,10,10);
//      TShape  *mother = new TBRIK("Mother","Mother Volume","void",30,30,30);
//      TShape  *mother = new TBRIK("Mother","Mother Volume","void",50,50,50);
      TNode *node = new TNode("node","Mother Node",mother);
      node->cd();

    // Set up nodes
    TNode **itsn = new TNode*[in];
    TPolyLine3D **pl = new TPolyLine3D*[in];
/*    Double_t p[5*3],axis[5*3]={1.,0.,0.,
                               0.,0.,0.,
			       0.,1.,0.,
			       0.,0.,0.,
			       0.,0.,1.}; */
    Double_t p[19*3],axis[19*3]={-0.25,0.,1.25,  // 1
				 +0.00,0.,1.25,  // 2
				 -0.25,0.,1.00,  // 3
				 +0.00,0.,1.00,  // 4
				 +0.00,0.,0.00,  // 5
				 +1.00,0.,0.00,  // 6
				 +1.25,0.,0.25,  // 7
				 +1.125,0.,0.125,  // 8
				 +1.00,0.,0.25,  // 9
				 +1.125,0.,0.125,  // 10
				 +1.25,0.,0.00,  // 11
				 +1.125,0.,0.125,  // 12
				 +1.00,0.,0.00,  // 13
				 +0.00,0.,0.00,  // 14
				 +0.00,1.,0.00,  // 15
				 +0.00,1.,0.125,  // 16
				 +0.25,1.,0.25,  // 17
				 +0.00,1.,0.125,  // 18
				 -0.25,1.,0.25,  // 19
    };
    for(i=0;i<in;i++){
	itsgeom->GetTrans(i+is,x,y,z);
/*	switch (itsgeom->GetGeomMatrix(i+is)->GetDetectorIndex())
        case 0:
	    sprintf(name,"SPD%d",i+is);
	    sprintf(title,"SPD%d",i+is);
	    sprintf(name2,"BSPD%d",i+is);
	    sprintf(title2,"BSPD%d",i+is);
	    itsn[i] = new TNode(name,title,new TBRIK(name2,title2,"void",
                      spds->GetDx(),spds->GetDy(),spds->GetDz()),x,y,z,r[i]);
	    break;
        case 1:
	    sprintf(name,"SDD%d",i+is);
	    sprintf(title,"SDD%d",i+is);
	    sprintf(name2,"BSDD%d",i+is);
	    sprintf(title2,"BSDD%d",i+is);
	    itsn[i] = new TNode(name,title,new TBRIK(name2,title2,"void",
                      sdds->GetDx(),sdds->GetDy(),sdds->GetDz()),x,y,z,r[i]);
	    break;
        case 2:
	    sprintf(name,"SSD%d",i+is);
	    sprintf(title,"SSD%d",i+is);
	    sprintf(name2,"BSSD%d",i+is);
	    sprintf(title2,"BSSD%d",i+is);
	    itsn[i] = new TNode(name,title,new TBRIK(name2,title2,"void",
                      ssds->GetDx(),ssds->GetDy(),ssds->GetDz()),x,y,z,r[i]);
	    break; */
	for(j=0;j<19;j++) itsgeom->LtoG(i+is,(Double_t*)&axis[3*j],
                                            (Double_t*)&p[3*j]);
	pl[i] = new TPolyLine3D(19,p);
    } // end for i

    // display it
    node->cd();
    node->Draw();
//    for(i=0;i<in;i++) itsn[i]->Draw();
//    node->Draw();
    for(i=0;i<in;i++) pl[i]->Draw();
    c1->Update();

    // clean up
//    delete[] x;
//    delete[] y;
//    delete[] z;
//    for(i=0;i<itsgeom->GetIndexMax();i++) delete[] r[i];
//    delete[] r;
}

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