1 //----------------------------------------------------------------------
2 void Displayv11(const char* filename=""){
3 // Display AliITSv11 Geometry
5 // const char* filename output file with the display in it
11 gSystem->Load("libGeom");
13 if(gGeoManager) delete gGeoManager;
14 mgr2 = gGeoManager = new TGeoManager("ITSGeometry",
15 " ITS Simulation Geometry Manager");
17 TGeoMaterial *vacmat = new TGeoMaterial("Vacume",0,0,0);
18 TGeoMedium *vacmed = new TGeoMedium("Vacume_med",1,vacmat);
19 TGeoVolume *ALIC = mgr2->MakeBox("ALIC",vacmed,100.,100.,200.);
20 mgr2->SetTopVolume(ALIC);
22 AliITSv11 *its = new AliITSv11();
23 its->SetDebug(ISetits(0,-1));
24 its->CreateMaterials();
25 its->CreateGeometry();
27 mgr2->CloseGeometry();
29 TControlBar *bar=new TControlBar("vertical","ITS Geometry Display",10,10);
30 bar->AddButton("Set ITS Debug level 1","ISetits(0,1)","Debug on");
31 bar->AddButton("Set ITS Debug level 0","ISetits(0,0)","Debug off");
32 bar->AddButton("Set Clipping on","ISetits(2,1)","Clipping on");
33 bar->AddButton("Set Cllipping off","ISetits(2,0)","Clipping off");
34 bar->AddButton("Set axis on","ISetits(3,1)","Show Axis on");
35 bar->AddButton("Set axis off","ISetits(3,0)","Show Axis off");
36 bar->AddButton("Set perspective on","ISetits(4,1)","Perspective on");
37 bar->AddButton("Set perspective off","ISetits(4,0)","Perspective off");
38 bar->AddButton("Set RayTrace on","ISetits(5,1)","Perspective on");
39 bar->AddButton("Set RayTrace off","ISetits(5,0)","Perspective off");
40 bar->AddButton("Set circle/80","ISetits(1,80)","circles ~ by 80 lines");
41 bar->AddButton("Display Geometry","Displayit()","Run Displayit");
42 bar->AddButton("Display SPD Thermal Sheald","EngineeringSPDThS()",
43 "Run EngineeringSPDThS");
44 bar->AddButton("Display SDD Cone","EngineeringSDDCone()",
45 "Run EngineeringSDDCone");
46 bar->AddButton("Display SDD Centeral Cylinder","EngineeringSDDCylinder()",
47 "Run EngineeringSDDCylinder");
48 bar->AddButton("Display SSD Cone","EngineeringSSDCone()",
49 "Run EngineeringSSDCone");
50 bar->AddButton("Display SSD Centeral Cylinder","EngineeringSSDCylinder()",
51 "Run EngineeringSSDCylinder");
52 bar->AddButton("Display SUP RB24 side","EngineeringSupRB24()",
53 "Run EngineeringSDDCylinder");
54 bar->AddButton("Display SUP RB26 side","EngineeringSupRB26()",
55 "Run EngineeringSupRB26");
56 bar->AddButton("Quit/Exit",".q","Exit");
61 //----------------------------------------------------------------------
62 Int_t ISetits(Int_t t,Int_t v){
63 static Int_t itsdebug=1,nsegments=80,cut=0,axis=1,perspective=0,ray=0;
67 if(v<0) return itsdebug;
71 if(v<0) return nsegments;
83 if(v<0) return perspective;
93 //----------------------------------------------------------------------
94 Double_t DSetits(Int_t t,Double_t v){
95 static Double_t phimincut=0.0,phimaxcut=180.0;
96 static Double_t longitude=90.0,latitude=0.0,psi=0.0;
100 if(v<0.) return phimincut;
104 if(v<0.) return phimaxcut;
108 if(v<0.) return longitude;
112 if(v<0.) return latitude;
116 if(v<0.) return latitude;
122 //----------------------------------------------------------------------
124 // Display AliITSv11 Geometry
126 // const char* filename output file with the display in it
133 TGeoManager *mgr2 = gGeoManager;
134 TGeoVolume *ALIC = mgr2->GetTopVolume();
136 if(!(c1 = (TCanvas*)gROOT->FindObject("C1")))
137 c1 = new TCanvas("C1","ITS Simulation Geometry",900,900);
140 mgr2->SetNsegments(ISetits(1,-1));
142 mgr2->SetVisLevel(6);
143 mgr2->SetVisOption(0);
144 //mgr2->CheckOverlaps(0.01);
145 //mgr2->PrintOverlaps();
146 if(ISetits(2,-1)==1){
147 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
148 mgr2->SetClippingShape(clip);
150 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
154 TPad *p1 = c1->GetPad(1);
155 TView *view1 = p1->GetView();
157 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
158 if(irr) cout <<"error="<<irr<<endl;
159 if(ISetits(4,-1)==0) view1->SetParralel();
160 else view1->SetPerspective();
162 if(ISetits(3,-1)!=0) view1->ShowAxis();
164 if(ISetits(5,-1)==1) ALIC->Raytrace();
167 TPad *p2 = c1->GetPad(2);
168 TView *view2 = p2->GetView();
170 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
171 if(irr) cout <<"error="<<irr<<endl;
172 if(ISetits(4,-1)==0) view2->SetParralel();
173 else view2->SetPerspective();
174 view2->RotateView(60.,30.);
175 if(ISetits(3,-1)!=0) view2->ShowAxis();
177 if(ISetits(5,-1)==1) ALIC->Raytrace();
180 c1->SetPhi(90.0); c1->SetTheta(90.0);
181 TPad *p3 = c1->GetPad(3);
182 TView *view3 = p3->GetView();
184 view3->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
185 if(irr) cout <<"error="<<irr<<endl;
186 if(ISetits(4,-1)==0) view3->SetParralel();
187 else view3->SetPerspective();
189 if(ISetits(3,-1)!=0) view3->ShowAxis();
191 if(ISetits(5,-1)==1) ALIC->Raytrace();
194 TPad *p4 = c1->GetPad(4);
195 TView *view4 = p4->GetView();
197 view4->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
198 if(irr) cout <<"error="<<irr<<endl;
199 if(ISetits(4,-1)==0) view4->SetParralel();
200 else view4->SetPerspective();
202 if(ISetits(3,-1)!=0) view4->ShowAxis();
204 if(ISetits(5,-1)==1) ALIC->Raytrace();
207 //----------------------------------------------------------------------
208 void EngineeringSPDThS(){
209 // Display SPD Thermal Sheald Geometry
218 TGeoManager *mgr2 = gGeoManager;
219 TGeoVolume *ALIC = mgr2->GetTopVolume();
221 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
222 c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
224 TGeoVolume *ITS,*SPDThS=0;
226 TArrow *arrow=new TArrow();
228 node = ALIC->FindNode("ITSV_1");
229 ITS = node->GetVolume();
230 node = ITS->FindNode("ITSspdThermalSheald_1");
231 SPDThS = node->GetVolume();
233 mgr2->SetNsegments(ISetits(1,-1));
235 mgr2->SetVisLevel(6);
236 mgr2->SetVisOption(0);
237 //mgr2->CheckOverlaps(0.01);
238 //mgr2->PrintOverlaps();
239 if(ISetits(2,-1)==1){
240 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
241 mgr2->SetClippingShape(clip);
243 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
244 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
248 TPad *p1 = c4->GetPad(1);
249 TView *view1 = p1->GetView();
251 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
252 if(irr) cout <<"error="<<irr<<endl;
253 if(ISetits(4,-1)==0) view1->SetParralel();
254 else view1->SetPerspective();
256 if(ISetits(3,-1)!=0) view1->ShowAxis();
258 if(ISetits(5,-1)==1) SPDThS->Raytrace();
262 TPad *p2 = c4->GetPad(2);
263 TView *view2 = p2->GetView();
265 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
266 if(irr) cout <<"error="<<irr<<endl;
267 if(ISetits(4,-1)==0) view2->SetParralel();
268 else view2->SetPerspective();
270 if(ISetits(3,-1)!=0) view2->ShowAxis();
272 if(ISetits(5,-1)==1) SPDThS->Raytrace();
275 //----------------------------------------------------------------------
276 void EngineeringSDDCone(){
277 // Display SDD Cone Geometry
286 TGeoManager *mgr2 = gGeoManager;
287 TGeoVolume *ALIC = mgr2->GetTopVolume();
289 if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
290 c2 = new TCanvas("C2","ITS SDD Cone Geometry",900,450);
292 TGeoVolume *ITS,*SDD=0;
295 node = ALIC->FindNode("ITSV_1");
296 ITS = node->GetVolume();
297 node = ITS->FindNode("ITSsddConeL_1");
298 SDD = node->GetVolume();
300 mgr2->SetNsegments(ISetits(1,-1));
302 mgr2->SetVisLevel(6);
303 mgr2->SetVisOption(0);
304 //mgr2->CheckOverlaps(0.01);
305 //mgr2->PrintOverlaps();
306 if(ISetits(2,-1)==1){
307 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
308 mgr2->SetClippingShape(clip);
310 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
311 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
315 TPad *p1 = c2->GetPad(1);
316 TView *view1 = p1->GetView();
318 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
319 if(irr) cout <<"error="<<irr<<endl;
320 if(ISetits(4,-1)==0) view1->SetParralel();
321 else view1->SetPerspective();
323 if(ISetits(3,-1)!=0) view1->ShowAxis();
325 if(ISetits(5,-1)==1) SDD->Raytrace();
329 TPad *p2 = c2->GetPad(2);
330 TView *view2 = p2->GetView();
332 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
333 if(irr) cout <<"error="<<irr<<endl;
334 if(ISetits(4,-1)==0) view2->SetParralel();
335 else view2->SetPerspective();
337 if(ISetits(3,-1)!=0) view2->ShowAxis();
339 if(ISetits(5,-1)==1) SDD->Raytrace();
342 //----------------------------------------------------------------------
343 void EngineeringSDDCylinder(){
344 // Display SDD Cylinder Geometry
353 TGeoManager *mgr2 = gGeoManager;
354 TGeoVolume *ALIC = mgr2->GetTopVolume();
356 if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
357 c3 = new TCanvas("C3","ITS SDD Cylinder Geometry",900,450);
359 TGeoVolume *ITS,*SDD=0;
361 TArrow *arrow=new TArrow();
363 node = ALIC->FindNode("ITSV_1");
364 ITS = node->GetVolume();
365 node = ITS->FindNode("ITSsddCentCylCF_1");
366 SDD = node->GetVolume();
367 Double_t Rmin = ((TGeoTube*)(SDD->GetShape()))->GetRmin();
368 Double_t Rmax = ((TGeoTube*)(SDD->GetShape()))->GetRmax();
369 Double_t Dz = ((TGeoTube*)(SDD->GetShape()))->GetDz();
371 mgr2->SetNsegments(ISetits(1,-1));
373 mgr2->SetVisLevel(6);
374 mgr2->SetVisOption(0);
375 //mgr2->CheckOverlaps(0.01);
376 //mgr2->PrintOverlaps();
377 if(ISetits(2,-1)==1){
378 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
379 mgr2->SetClippingShape(clip);
381 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
382 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
386 TPad *p1 = c3->GetPad(1);
387 TView *view1 = p1->GetView();
389 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
390 if(irr) cout <<"error="<<irr<<endl;
391 if(ISetits(4,-1)==0) view1->SetParralel();
392 else view1->SetPerspective();
394 if(ISetits(3,-1)!=0) view1->ShowAxis();
396 if(ISetits(5,-1)==1) SDD->Raytrace();
397 //arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
401 TPad *p2 = c3->GetPad(2);
402 TView *view2 = p2->GetView();
404 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
405 if(irr) cout <<"error="<<irr<<endl;
406 if(ISetits(4,-1)==0) view2->SetParralel();
407 else view2->SetPerspective();
409 if(ISetits(3,-1)!=0) view2->ShowAxis();
411 if(ISetits(5,-1)==1) SDD->Raytrace();
412 //arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
413 //Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
414 //arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
417 //----------------------------------------------------------------------
418 void EngineeringSSDCone(){
419 // Display SSD Cone Geometry
428 TGeoManager *mgr2 = gGeoManager;
429 TGeoVolume *ALIC = mgr2->GetTopVolume();
431 if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
432 c2 = new TCanvas("C2","ITS SSD Cone Geometry",900,450);
434 TGeoVolume *ITS,*SSD=0;
437 node = ALIC->FindNode("ITSV_1");
438 ITS = node->GetVolume();
439 node = ITS->FindNode("ITSssdConeA_1");
440 SSD = node->GetVolume();
442 mgr2->SetNsegments(ISetits(1,-1));
444 mgr2->SetVisLevel(6);
445 mgr2->SetVisOption(0);
446 //mgr2->CheckOverlaps(0.01);
447 //mgr2->PrintOverlaps();
448 if(ISetits(2,-1)==1){
449 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
450 mgr2->SetClippingShape(clip);
452 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
453 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
457 TPad *p1 = c2->GetPad(1);
458 TView *view1 = p1->GetView();
460 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
461 if(irr) cout <<"error="<<irr<<endl;
462 if(ISetits(4,-1)==0) view1->SetParralel();
463 else view1->SetPerspective();
465 if(ISetits(3,-1)!=0) view1->ShowAxis();
467 if(ISetits(5,-1)==1) SSD->Raytrace();
471 TPad *p2 = c2->GetPad(2);
472 TView *view2 = p2->GetView();
474 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
475 if(irr) cout <<"error="<<irr<<endl;
476 if(ISetits(4,-1)==0) view2->SetParralel();
477 else view2->SetPerspective();
479 if(ISetits(3,-1)!=0) view2->ShowAxis();
481 if(ISetits(5,-1)==1) SSD->Raytrace();
484 //----------------------------------------------------------------------
485 void EngineeringSSDCylinder(){
486 // Display SSD Cylinder Geometry
495 TGeoManager *mgr2 = gGeoManager;
496 TGeoVolume *ALIC = mgr2->GetTopVolume();
498 if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
499 c3 = new TCanvas("C3","ITS SSD Cylinder Geometry",900,450);
501 TGeoVolume *ITS,*SSD=0;
503 TArrow *arrow=new TArrow();
505 node = ALIC->FindNode("ITSV_1");
506 ITS = node->GetVolume();
507 node = ITS->FindNode("ITSssdCentCylCA_1");
508 SSD = node->GetVolume();
509 Double_t Rmin = ((TGeoTube*)(SSD->GetShape()))->GetRmin();
510 Double_t Rmax = ((TGeoTube*)(SSD->GetShape()))->GetRmax();
511 Double_t Dz = ((TGeoTube*)(SSD->GetShape()))->GetDz();
513 mgr2->SetNsegments(ISetits(1,-1));
515 mgr2->SetVisLevel(6);
516 mgr2->SetVisOption(0);
517 //mgr2->CheckOverlaps(0.01);
518 //mgr2->PrintOverlaps();
519 if(ISetits(2,-1)==1){
520 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
521 mgr2->SetClippingShape(clip);
523 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
524 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
528 TPad *p1 = c3->GetPad(1);
529 TView *view1 = p1->GetView();
531 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
532 if(irr) cout <<"error="<<irr<<endl;
533 if(ISetits(4,-1)==0) view1->SetParralel();
534 else view1->SetPerspective();
536 if(ISetits(3,-1)!=0) view1->ShowAxis();
538 if(ISetits(5,-1)==1) SSD->Raytrace();
539 //arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
543 TPad *p2 = c3->GetPad(2);
544 TView *view2 = p2->GetView();
546 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
547 if(irr) cout <<"error="<<irr<<endl;
548 if(ISetits(4,-1)==0) view2->SetParralel();
549 else view2->SetPerspective();
551 if(ISetits(3,-1)!=0) view2->ShowAxis();
553 if(ISetits(5,-1)==1) SSD->Raytrace();
554 //arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
555 //Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
556 //arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
559 //----------------------------------------------------------------------
560 void EngineeringSupRB24(){
561 // Display RB 24 side cable tray support structure Geometry
570 TGeoManager *mgr2 = gGeoManager;
571 TGeoVolume *ALIC = mgr2->GetTopVolume();
573 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
574 c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
576 TGeoVolume *ITS,*SUPRB24=0;
578 TArrow *arrow=new TArrow();
580 node = ALIC->FindNode("ITSV_1");
581 ITS = node->GetVolume();
582 node = ITS->FindNode("ITSsupFrameM24_1");
583 SUPRB24 = node->GetVolume();
585 mgr2->SetNsegments(ISetits(1,-1));
587 mgr2->SetVisLevel(6);
588 mgr2->SetVisOption(0);
589 //mgr2->CheckOverlaps(0.01);
590 //mgr2->PrintOverlaps();
591 if(ISetits(2,-1)==1){
592 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
593 mgr2->SetClippingShape(clip);
595 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
596 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
600 TPad *p1 = c4->GetPad(1);
601 TView *view1 = p1->GetView();
603 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
604 if(irr) cout <<"error="<<irr<<endl;
605 if(ISetits(4,-1)==0) view1->SetParralel();
606 else view1->SetPerspective();
608 if(ISetits(3,-1)!=0) view1->ShowAxis();
610 if(ISetits(5,-1)==1) SUPRB24->Raytrace();
614 TPad *p2 = c4->GetPad(2);
615 TView *view2 = p2->GetView();
617 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
618 if(irr) cout <<"error="<<irr<<endl;
619 if(ISetits(4,-1)==0) view2->SetParralel();
620 else view2->SetPerspective();
622 if(ISetits(3,-1)!=0) view2->ShowAxis();
624 if(ISetits(5,-1)==1) SUPRB24->Raytrace();
628 //----------------------------------------------------------------------
629 void EngineeringSupRB26(){
630 // Display RB 26 side cable tray support structure
639 TGeoManager *mgr2 = gGeoManager;
640 TGeoVolume *ALIC = mgr2->GetTopVolume();
642 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
643 c5 = new TCanvas("C5","ITS SDD Cylinder Geometry",900,450);
645 TGeoVolume *ITS,*SUPRB26=0;
647 TArrow *arrow=new TArrow();
649 node = ALIC->FindNode("ITSV_1");
650 ITS = node->GetVolume();
651 node = ITS->FindNode("ITSsupFrameM26_1");
652 SUPRB26 = node->GetVolume();
654 mgr2->SetNsegments(ISetits(1,-1));
656 mgr2->SetVisLevel(6);
657 mgr2->SetVisOption(0);
658 //mgr2->CheckOverlaps(0.01);
659 //mgr2->PrintOverlaps();
660 if(ISetits(2,-1)==1){
661 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
662 mgr2->SetClippingShape(clip);
664 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
665 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
669 TPad *p1 = c5->GetPad(1);
670 TView *view1 = p1->GetView();
672 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
673 if(irr) cout <<"error="<<irr<<endl;
674 if(ISetits(4,-1)==0) view1->SetParralel();
675 else view1->SetPerspective();
677 if(ISetits(3,-1)!=0) view1->ShowAxis();
679 if(ISetits(5,-1)==1) SUPRB26->Raytrace();
683 TPad *p2 = c5->GetPad(2);
684 TView *view2 = p2->GetView();
686 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
687 if(irr) cout <<"error="<<irr<<endl;
688 if(ISetits(4,-1)==0) view2->SetParralel();
689 else view2->SetPerspective();
691 if(ISetits(3,-1)!=0) view2->ShowAxis();
693 if(ISetits(5,-1)==1) SUPRB26->Raytrace();