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. //Begin_Html /* */ //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;iGetRotMatrix(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] <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;iGetTrans(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;iDraw(); // node->Draw(); for(i=0;iDraw(); c1->Update(); // clean up // delete[] x; // delete[] y; // delete[] z; // for(i=0;iGetIndexMax();i++) delete[] r[i]; // delete[] r; }