Updates concerning the geometry: versioning system, new V11hybrid version, bug fixes...
[u/mrichter/AliRoot.git] / ITS / Displayv11.C
1 //----------------------------------------------------------------------
2 void Displayv11(const char* filename=""){
3     // Display AliITSv11 Geometry
4     // Inputs:
5     //    const char* filename output file with the display in it
6     // Outputs:
7     //    none.
8     // Retrurn:
9     //    none.
10
11     gSystem->Load("libGeom");
12     //
13     if(gGeoManager) delete gGeoManager;
14     mgr2 = gGeoManager = new TGeoManager("ITSGeometry",
15                                          " ITS Simulation Geometry Manager");
16     //
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);
21     TGeoVolume *ITS = mgr2->MakeBox("ITSV",vacmed,99.,99.,199.);
22     TGeoVolumeAssembly *ITSspd = new TGeoVolumeAssembly("ITSspd");
23     ITS->AddNode(ITSspd,1);
24     ALIC->AddNode(ITS,1);
25     //
26     /*
27     AliITSv11 *its = new AliITSv11(0,3);
28     its->SetDebug(ISetits(0,-1));
29     its->GetSPDGeometry()->SetDebug(ISetits(0,-1));
30     its->GetSupGeometry()->SetDebug(ISetits(0,-1));
31     its->CreateMaterials();
32     its->CreateGeometry();
33     */
34     AliITSv11GeometrySPD *gspd = new AliITSv11GeometrySPD(0);
35     //AliITSv11GeometrySDD *gsdd = new AliITSv11GeometrySDD();
36     AliITSv11GeometrySupport *gsupp = new AliITSv11GeometrySupport(3);
37     //AliITSv11GeometrySSD *gssd = new AliITSv11GeometrySSD();
38     //
39     Int_t imat=1,imed=1;
40     gspd->CreateSPDCenteralMaterials(imed,imat);
41     gspd->SPDSector(ITSspd,mgr2);
42     gsupp->SPDCone(ITS,mgr2);
43     gsupp->SetDebug(1);
44     gsupp->SDDCone(ITS,mgr2);
45     //gsdd->Layer3(ITS);
46     //gsdd->Layer4(ITS);
47     gsupp->SSDCone(ITS,mgr2);
48     gsupp->ServicesCableSupport(ITS);
49     //
50     mgr2->CloseGeometry();
51     //
52     TControlBar *bar=new TControlBar("vertical","ITS Geometry Display",10,10);
53     bar->AddButton("Set Clipping on","ISetits(2,1)","Clipping on");
54     bar->AddButton("Set Cllipping off","ISetits(2,0)","Clipping off");
55     bar->AddButton("Set axis on","ISetits(3,1)","Show Axis on");
56     bar->AddButton("Set axis off","ISetits(3,0)","Show Axis off");
57     bar->AddButton("Set perspective on","ISetits(4,1)","Perspective on");
58     bar->AddButton("Set perspective off","ISetits(4,0)","Perspective off");
59     bar->AddButton("Set RayTrace on","ISetits(5,1)","Perspective on");
60     bar->AddButton("Set RayTrace off","ISetits(5,0)","Perspective off");
61     bar->AddButton("Set circle/80","ISetits(1,80)","circles ~ by 80 lines");
62     bar->AddButton("Display Geometry","Displayit()","Run Displayit");
63     bar->AddButton("Display SPD Sector Volume","EngineeringSPDSector()",
64                    "Run EngineeringSPDSector");
65     bar->AddButton("Display SPD Ceneral Volume","EngineeringSPDCenter()",
66                    "Run EngineeringSPDCenter");
67     bar->AddButton("Display SPD Thermal Sheald","EngineeringSPDThS()",
68                    "Run EngineeringSPDThS");
69     bar->AddButton("Display SDD Layer 3","EngineeringSDDLayer3()",
70                    "Run EngineeringSDDLayer3");
71     bar->AddButton("Display SDD Layer 4","EngineeringSDDLayer4()",
72                    "Run EngineeringSDDLayer4");
73     bar->AddButton("Display SDD Cone","EngineeringSDDCone()",
74                    "Run EngineeringSDDCone");
75     bar->AddButton("Display SDD Centeral Cylinder","EngineeringSDDCylinder()",
76                    "Run EngineeringSDDCylinder");
77     bar->AddButton("Display SSD Cone","EngineeringSSDCone()",
78                    "Run EngineeringSSDCone");
79     bar->AddButton("Display SSD Centeral Cylinder","EngineeringSSDCylinder()",
80                    "Run EngineeringSSDCylinder");
81     bar->AddButton("Display SUP RB24 side","EngineeringSupRB24()",
82                    "Run EngineeringSupRB24");
83     bar->AddButton("Display Cable Trays RB24 side","EngineeringSupTrayRB24()",
84                    "Run EngineeringSupTrayRB24");
85     bar->AddButton("Display SUP RB26 side","EngineeringSupRB26()",
86                    "Run EngineeringSupRB26");
87     bar->AddButton("Save Geometry to File","ExportToFile()",
88                    "Run ExportToFile");
89     bar->AddButton("Quit/Exit",".q","Exit");
90     bar->Show();
91     gROOT->SaveContext();
92          //Displayit();
93 }
94 //----------------------------------------------------------------------
95 void ExportToFile(){
96     // Quirry file name and write geometry to a root file.
97     // Inputs:
98     //    const char* filename output file with the display in it
99     // Outputs:
100     //    none.
101     // Retrurn:
102     //    none.
103     Char_t filename[100];
104
105     printf("Eneter File name:");
106     scanf("%s",filename);
107
108     gGeoManager->Export(filename);
109 }
110 //----------------------------------------------------------------------
111 Int_t ISetits(Int_t t,Int_t v){
112     static Int_t itsdebug=1,nsegments=80,cut=0,axis=1,perspective=0,ray=0;
113
114     switch (t) {
115     case 0:
116         if(v<0) return itsdebug;
117         itsdebug = v;
118         break;
119     case 1:
120         if(v<0) return nsegments;
121         nsegments= v;
122         break;
123     case 2:
124         if(v<0) return cut;
125         cut = v;
126         break;
127     case 3:
128         if(v<0) return axis;
129         axis = v;
130         break;
131     case 4:
132         if(v<0) return perspective;
133         perspective = v;
134         break;
135     case 5:
136         if(v<0) return ray;
137         ray = v;
138         break;
139     }// end switch
140     return 0;
141 }
142 //----------------------------------------------------------------------
143 Double_t DSetits(Int_t t,Double_t v){
144     static Double_t phimincut=0.0,phimaxcut=180.0;
145     static Double_t longitude=90.0,latitude=0.0,psi=0.0;
146
147     switch (t) {
148     case 0:
149         if(v<0.) return phimincut;
150         phimincut = v;
151         break;
152     case 1:
153         if(v<0.) return phimaxcut;
154         phimaxcut = v;
155         break;
156     case 2:
157         if(v<0.) return longitude;
158         longitude = v;
159         break;
160     case 3:
161         if(v<0.) return latitude;
162         latitude = v;
163         break;
164     case 4:
165         if(v<0.) return latitude;
166         latitude = v;
167         break;
168     }// end switch
169     return 0;
170 }
171 //----------------------------------------------------------------------
172 void Displayit(){
173     // Display AliITSv11 Geometry
174     // Inputs:
175     //    const char* filename output file with the display in it
176     // Outputs:
177     //    none.
178     // Retrurn:
179     //    none.
180     Int_t irr;
181     //
182     TGeoManager *mgr2 = gGeoManager;
183     TGeoVolume *ALIC = mgr2->GetTopVolume();
184     TCanvas *c1;
185     if(!(c1 = (TCanvas*)gROOT->FindObject("C1")))
186         c1 = new TCanvas("C1","ITS Simulation Geometry",900,900);
187     c1->Divide(2,2);
188     //
189     mgr2->SetNsegments(ISetits(1,-1));
190     //
191     mgr2->SetVisLevel(6);
192     mgr2->SetVisOption(0);
193     //mgr2->CheckOverlaps(0.01);
194     //mgr2->PrintOverlaps();
195     if(ISetits(2,-1)==1){
196         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
197         mgr2->SetClippingShape(clip);
198     } // end if
199     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
200     //
201     c1->cd(1);
202     ALIC->Draw();
203     TPad *p1 = c1->GetPad(1);
204     TView *view1 = p1->GetView();
205     if(view1){
206         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
207         if(irr) cout <<"error="<<irr<<endl;
208         if(ISetits(4,-1)==0) view1->SetParallel();
209         else  view1->SetPerspective();
210         view1->Front();
211         if(ISetits(3,-1)!=0) view1->ShowAxis();
212     } // end if view1
213     if(ISetits(5,-1)==1) ALIC->Raytrace();
214     c1->cd(2);
215     ALIC->Draw();
216     TPad *p2 = c1->GetPad(2);
217     TView *view2 = p2->GetView();
218     if(view2){
219         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
220         if(irr) cout <<"error="<<irr<<endl;
221         if(ISetits(4,-1)==0) view2->SetParallel();
222         else  view2->SetPerspective();
223         view2->RotateView(60.,30.);
224         if(ISetits(3,-1)!=0) view2->ShowAxis();
225     } // end if view2
226     if(ISetits(5,-1)==1) ALIC->Raytrace();
227     c1->cd(3);
228     ALIC->Draw();
229     c1->SetPhi(90.0); c1->SetTheta(90.0);
230     TPad *p3 = c1->GetPad(3);
231     TView *view3 = p3->GetView();
232     if(view3){
233         view3->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
234         if(irr) cout <<"error="<<irr<<endl;
235         if(ISetits(4,-1)==0) view3->SetParallel();
236         else  view3->SetPerspective();
237         view3->Top();
238         if(ISetits(3,-1)!=0) view3->ShowAxis();
239     } // end if view3
240     if(ISetits(5,-1)==1) ALIC->Raytrace();
241     c1->cd(4);
242     ALIC->Draw();
243     TPad *p4 = c1->GetPad(4);
244     TView *view4 = p4->GetView();
245     if(view4){
246         view4->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
247         if(irr) cout <<"error="<<irr<<endl;
248         if(ISetits(4,-1)==0) view4->SetParallel();
249         else  view4->SetPerspective();
250         view4->Side();
251         if(ISetits(3,-1)!=0) view4->ShowAxis();
252     } // end if view4
253     if(ISetits(5,-1)==1) ALIC->Raytrace();
254     //
255 }
256 //----------------------------------------------------------------------
257 void EngineeringSPDSector(){
258     // Display SPD Sector Geometry
259     // Inputs:
260     //    none.
261     // Outputs:
262     //    none.
263     // Retrurn:
264     //    none.
265     Int_t irr;
266     //
267     TGeoManager *mgr2 = gGeoManager;
268     TGeoVolume *ALIC = mgr2->GetTopVolume();
269     TCanvas *c4;
270     if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
271         c4 = new TCanvas("C4","ITS SPD Layer Geometry Side View",500,500);
272     TGeoVolume *ITS,*ITSspd,*SPDLay=0;
273     TGeoNode *node;
274     TArrow *arrow=new TArrow();
275     //
276     node = ALIC->FindNode("ITSV_1");
277     ITS = node->GetVolume();
278     node = ITS->FindNode("ITSspd_1");
279     ITSspd = node->GetVolume();
280     node = ITSspd->FindNode("ITSSPDCarbonFiberSectorV_1");
281     //node = ITSspd->FindNode("ITSSPDTempSPDMotherVolume_1");
282     SPDLay = node->GetVolume();
283     //
284     mgr2->SetNsegments(ISetits(1,-1));
285     //
286     mgr2->SetVisLevel(6);
287     mgr2->SetVisOption(0);
288     //mgr2->CheckOverlaps(0.01);
289     //mgr2->PrintOverlaps();
290     if(ISetits(2,-1)==1){
291         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
292         mgr2->SetClippingShape(clip);
293     } // end if
294     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
295     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
296     //
297     SPDLay->Draw();
298     TView *view1 = c4->GetView();
299     if(view1){
300         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
301         if(irr) cout <<"error="<<irr<<endl;
302         if(ISetits(4,-1)==0) view1->SetParallel();
303         else  view1->SetPerspective();
304         view1->Front();
305         if(ISetits(3,-1)!=0) view1->ShowAxis();
306     } // end if view1
307     if(ISetits(5,-1)==1) SPDLay->Raytrace();
308     //
309     if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
310         c5 = new TCanvas("C5","ITS SPD Sector Geometry End View",500,500);
311     SPDLay->Draw();
312     TView *view2 = c5->GetView();
313     if(view2){
314         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
315         if(irr) cout <<"error="<<irr<<endl;
316         if(ISetits(4,-1)==0) view2->SetParallel();
317         else  view2->SetPerspective();
318         view2->Top();
319         if(ISetits(3,-1)!=0) view2->ShowAxis();
320     } // end if view2
321     if(ISetits(5,-1)==1) SPDLay->Raytrace();
322     //
323 }
324 //----------------------------------------------------------------------
325 void EngineeringSPDCenter(){
326     // Display SPD Centeral Geometry
327     // Inputs:
328     //    none.
329     // Outputs:
330     //    none.
331     // Retrurn:
332     //    none.
333     Int_t irr;
334     //
335     TGeoManager *mgr2 = gGeoManager;
336     TGeoVolume *ALIC = mgr2->GetTopVolume();
337     TCanvas *c4;
338     if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
339         c4 = new TCanvas("C4","ITS SPD Layer Geometry Side View",500,500);
340     TGeoVolume *ITS,*ITSspd,*SPDLay=0;
341     TGeoNode *node;
342     TArrow *arrow=new TArrow();
343     //
344     node = ALIC->FindNode("ITSV_1");
345     ITS = node->GetVolume();
346     node = ITS->FindNode("ITSspd_1");
347     ITSspd = node->GetVolume();
348     //
349     mgr2->SetNsegments(ISetits(1,-1));
350     //
351     mgr2->SetVisLevel(6);
352     mgr2->SetVisOption(0);
353     //mgr2->CheckOverlaps(0.01);
354     //mgr2->PrintOverlaps();
355     if(ISetits(2,-1)==1){
356         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
357         mgr2->SetClippingShape(clip);
358     } // end if
359     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
360     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
361     //
362     ITSspd->Draw();
363     TView *view1 = c4->GetView();
364     if(view1){
365         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
366         if(irr) cout <<"error="<<irr<<endl;
367         if(ISetits(4,-1)==0) view1->SetParallel();
368         else  view1->SetPerspective();
369         view1->Front();
370         if(ISetits(3,-1)!=0) view1->ShowAxis();
371     } // end if view1
372     if(ISetits(5,-1)==1) SPDLay->Raytrace();
373     //
374     if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
375         c5 = new TCanvas("C5","ITS SPD Centeral Geometry End View",500,500);
376     ITSspd->Draw();
377     TView *view2 = c5->GetView();
378     if(view2){
379         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
380         if(irr) cout <<"error="<<irr<<endl;
381         if(ISetits(4,-1)==0) view2->SetParallel();
382         else  view2->SetPerspective();
383         view2->Top();
384         if(ISetits(3,-1)!=0) view2->ShowAxis();
385     } // end if view2
386     if(ISetits(5,-1)==1) ITSspd->Raytrace();
387     //
388 }
389 //----------------------------------------------------------------------
390 void EngineeringSPDThS(){
391     // Display SPD Thermal Sheald Geometry
392     // Inputs:
393     //    none.
394     // Outputs:
395     //    none.
396     // Retrurn:
397     //    none.
398     Int_t irr;
399     //
400     TGeoManager *mgr2 = gGeoManager;
401     TGeoVolume *ALIC = mgr2->GetTopVolume();
402     TCanvas *c4;
403     if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
404         c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
405     c4->Divide(2,1);
406     TGeoVolume *ITS,*SPDThS=0;
407     TGeoNode *node;
408     TArrow *arrow=new TArrow();
409     //
410     node = ALIC->FindNode("ITSV_1");
411     ITS = node->GetVolume();
412     node = ITS->FindNode("ITSspdThermalShealdMother_1");
413     SPDThS = node->GetVolume();
414     //
415     mgr2->SetNsegments(ISetits(1,-1));
416     //
417     mgr2->SetVisLevel(6);
418     mgr2->SetVisOption(0);
419     //mgr2->CheckOverlaps(0.01);
420     //mgr2->PrintOverlaps();
421     if(ISetits(2,-1)==1){
422         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
423         mgr2->SetClippingShape(clip);
424     } // end if
425     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
426     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
427     //
428     c4->cd(1);
429     SPDThS->Draw();
430     TPad *p1 = c4->GetPad(1);
431     TView *view1 = p1->GetView();
432     if(view1){
433         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
434         if(irr) cout <<"error="<<irr<<endl;
435         if(ISetits(4,-1)==0) view1->SetParallel();
436         else  view1->SetPerspective();
437         view1->Front();
438         if(ISetits(3,-1)!=0) view1->ShowAxis();
439     } // end if view1
440     if(ISetits(5,-1)==1) SPDThS->Raytrace();
441     //
442     c4->cd(2);
443     SPDThS->Draw();
444     TPad *p2 = c4->GetPad(2);
445     TView *view2 = p2->GetView();
446     if(view2){
447         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
448         if(irr) cout <<"error="<<irr<<endl;
449         if(ISetits(4,-1)==0) view2->SetParallel();
450         else  view2->SetPerspective();
451         view2->Top();
452         if(ISetits(3,-1)!=0) view2->ShowAxis();
453     } // end if view2
454     if(ISetits(5,-1)==1) SPDThS->Raytrace();
455     //
456 }
457 //----------------------------------------------------------------------
458 void EngineeringSDDLayer3(){
459     // Display SDD Layer 3 Geometry
460     // Inputs:
461     //    none.
462     // Outputs:
463     //    none.
464     // Retrurn:
465     //    none.
466     Int_t irr;
467     //
468     TGeoManager *mgr2 = gGeoManager;
469     TGeoVolume *ALIC = mgr2->GetTopVolume();
470     TCanvas *c4;
471     if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
472         c4 = new TCanvas("C4","ITS SDD Layer 3 Geometry Side View",500,500);
473     TGeoVolume *ITS,*SDDLay3=0;
474     TGeoNode *node;
475     TArrow *arrow=new TArrow();
476     //
477     node = ALIC->FindNode("ITSV_1");
478     ITS = node->GetVolume();
479     node = ITS->FindNode("ITSsddLayer3_1");
480     SDDLay3 = node->GetVolume();
481     //
482     mgr2->SetNsegments(ISetits(1,-1));
483     //
484     mgr2->SetVisLevel(6);
485     mgr2->SetVisOption(0);
486     //mgr2->CheckOverlaps(0.01);
487     //mgr2->PrintOverlaps();
488     if(ISetits(2,-1)==1){
489         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
490         mgr2->SetClippingShape(clip);
491     } // end if
492     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
493     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
494     //
495     SDDLay3->Draw();
496     TView *view1 = c4->GetView();
497     if(view1){
498         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
499         if(irr) cout <<"error="<<irr<<endl;
500         if(ISetits(4,-1)==0) view1->SetParallel();
501         else  view1->SetPerspective();
502         view1->Front();
503         if(ISetits(3,-1)!=0) view1->ShowAxis();
504     } // end if view1
505     if(ISetits(5,-1)==1) SDDLay3->Raytrace();
506     //
507     if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
508         c5 = new TCanvas("C5","ITS SDD Layer 3 Geometry End View",500,500);
509     SDDLay3->Draw();
510     TView *view2 = c5->GetView();
511     if(view2){
512         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
513         if(irr) cout <<"error="<<irr<<endl;
514         if(ISetits(4,-1)==0) view2->SetParallel();
515         else  view2->SetPerspective();
516         view2->Top();
517         if(ISetits(3,-1)!=0) view2->ShowAxis();
518     } // end if view2
519     if(ISetits(5,-1)==1) SDDLay3->Raytrace();
520     //
521 }
522 //----------------------------------------------------------------------
523 void EngineeringSDDLayer4(){
524     // Display SDD Layer 4 Geometry
525     // Inputs:
526     //    none.
527     // Outputs:
528     //    none.
529     // Retrurn:
530     //    none.
531     Int_t irr;
532     //
533     TGeoManager *mgr2 = gGeoManager;
534     TGeoVolume *ALIC = mgr2->GetTopVolume();
535     TCanvas *c4;
536     if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
537         c4 = new TCanvas("C4","ITS SDD Layer 4 Geometry Side View",500,500);
538     TGeoVolume *ITS,*SDDLay4=0;
539     TGeoNode *node;
540     TArrow *arrow=new TArrow();
541     //
542     node = ALIC->FindNode("ITSV_1");
543     ITS = node->GetVolume();
544     node = ITS->FindNode("ITSsddLayer4_1");
545     SDDLay4 = node->GetVolume();
546     //
547     mgr2->SetNsegments(ISetits(1,-1));
548     //
549     mgr2->SetVisLevel(6);
550     mgr2->SetVisOption(0);
551     //mgr2->CheckOverlaps(0.01);
552     //mgr2->PrintOverlaps();
553     if(ISetits(2,-1)==1){
554         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
555         mgr2->SetClippingShape(clip);
556     } // end if
557     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
558     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
559     //
560     SDDLay4->Draw();
561     TView *view1 = c4->GetView();
562     if(view1){
563         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
564         if(irr) cout <<"error="<<irr<<endl;
565         if(ISetits(4,-1)==0) view1->SetParallel();
566         else  view1->SetPerspective();
567         view1->Front();
568         if(ISetits(3,-1)!=0) view1->ShowAxis();
569     } // end if view1
570     if(ISetits(5,-1)==1) SDDLay4->Raytrace();
571     //
572     if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
573         c5 = new TCanvas("C5","ITS SDD Layer 4 Geometry End View",500,500);
574     SDDLay4->Draw();
575     TView *view2 = c5->GetView();
576     if(view2){
577         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
578         if(irr) cout <<"error="<<irr<<endl;
579         if(ISetits(4,-1)==0) view2->SetParallel();
580         else  view2->SetPerspective();
581         view2->Top();
582         if(ISetits(3,-1)!=0) view2->ShowAxis();
583     } // end if view2
584     if(ISetits(5,-1)==1) SDDLay4->Raytrace();
585     //
586 }
587 //----------------------------------------------------------------------
588 void EngineeringSDDCone(){
589     // Display SDD Cone Geometry
590     // Inputs:
591     //    none.
592     // Outputs:
593     //    none.
594     // Retrurn:
595     //    none.
596     Int_t irr;
597     //
598     TGeoManager *mgr2 = gGeoManager;
599     TGeoVolume *ALIC = mgr2->GetTopVolume();
600     TCanvas *c2;
601     if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
602         c2 = new TCanvas("C2","ITS SDD Cone Geometry",900,450);
603     c2->Divide(2,1);
604     TGeoVolume *ITS,*SDD=0;
605     TGeoNode *node;
606     //
607     node = ALIC->FindNode("ITSV_1");
608     ITS = node->GetVolume();
609     node = ITS->FindNode("ITSsddConeL_1");
610     SDD = node->GetVolume();
611     //
612     mgr2->SetNsegments(ISetits(1,-1));
613     //
614     mgr2->SetVisLevel(6);
615     mgr2->SetVisOption(0);
616     //mgr2->CheckOverlaps(0.01);
617     //mgr2->PrintOverlaps();
618     if(ISetits(2,-1)==1){
619         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
620         mgr2->SetClippingShape(clip);
621     } // end if
622     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
623     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
624     //
625     c2->cd(1);
626     SDD->Draw();
627     TPad *p1 = c2->GetPad(1);
628     TView *view1 = p1->GetView();
629     if(view1){
630         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
631         if(irr) cout <<"error="<<irr<<endl;
632         if(ISetits(4,-1)==0) view1->SetParallel();
633         else  view1->SetPerspective();
634         view1->Front();
635         if(ISetits(3,-1)!=0) view1->ShowAxis();
636     } // end if view1
637     if(ISetits(5,-1)==1) SDD->Raytrace();
638     //
639     c2->cd(2);
640     SDD->Draw();
641     TPad *p2 = c2->GetPad(2);
642     TView *view2 = p2->GetView();
643     if(view2){
644         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
645         if(irr) cout <<"error="<<irr<<endl;
646         if(ISetits(4,-1)==0) view2->SetParallel();
647         else  view2->SetPerspective();
648         view2->Top();
649         if(ISetits(3,-1)!=0) view2->ShowAxis();
650     } // end if view1
651     if(ISetits(5,-1)==1) SDD->Raytrace();
652     //
653 }
654 //----------------------------------------------------------------------
655 void EngineeringSDDCylinder(){
656     // Display SDD Cylinder Geometry
657     // Inputs:
658     //    none.
659     // Outputs:
660     //    none.
661     // Retrurn:
662     //    none.
663     Int_t irr;
664     //
665     TGeoManager *mgr2 = gGeoManager;
666     TGeoVolume *ALIC = mgr2->GetTopVolume();
667     TCanvas *c3;
668     if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
669         c3 = new TCanvas("C3","ITS SDD Cylinder Geometry",900,450);
670     c3->Divide(2,1);
671     TGeoVolume *ITS,*SDD=0;
672     TGeoNode *node;
673     TArrow *arrow=new TArrow();
674     //
675     node = ALIC->FindNode("ITSV_1");
676     ITS = node->GetVolume();
677     node = ITS->FindNode("ITSsddCentCylCF_1");
678     SDD = node->GetVolume();
679     Double_t Rmin = ((TGeoTube*)(SDD->GetShape()))->GetRmin();
680     Double_t Rmax = ((TGeoTube*)(SDD->GetShape()))->GetRmax();
681     Double_t Dz   = ((TGeoTube*)(SDD->GetShape()))->GetDz();
682     //
683     mgr2->SetNsegments(ISetits(1,-1));
684     //
685     mgr2->SetVisLevel(6);
686     mgr2->SetVisOption(0);
687     //mgr2->CheckOverlaps(0.01);
688     //mgr2->PrintOverlaps();
689     if(ISetits(2,-1)==1){
690         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
691         mgr2->SetClippingShape(clip);
692     } // end if
693     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
694     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
695     //
696     c3->cd(1);
697     SDD->Draw();
698     TPad *p1 = c3->GetPad(1);
699     TView *view1 = p1->GetView();
700     if(view1){
701         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
702         if(irr) cout <<"error="<<irr<<endl;
703         if(ISetits(4,-1)==0) view1->SetParallel();
704         else  view1->SetPerspective();
705         view1->Front();
706         if(ISetits(3,-1)!=0) view1->ShowAxis();
707     } // end if view1
708     if(ISetits(5,-1)==1) SDD->Raytrace();
709     //arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
710     //
711     c3->cd(2);
712     SDD->Draw();
713     TPad *p2 = c3->GetPad(2);
714     TView *view2 = p2->GetView();
715     if(view2){
716         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
717         if(irr) cout <<"error="<<irr<<endl;
718         if(ISetits(4,-1)==0) view2->SetParallel();
719         else  view2->SetPerspective();
720         view2->Top();
721         if(ISetits(3,-1)!=0) view2->ShowAxis();
722     } // end if view2
723     if(ISetits(5,-1)==1) SDD->Raytrace();
724     //arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
725     //Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
726     //arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
727     //
728 }
729 //----------------------------------------------------------------------
730 void EngineeringSSDCone(){
731     // Display SSD Cone Geometry
732     // Inputs:
733     //    none.
734     // Outputs:
735     //    none.
736     // Retrurn:
737     //    none.
738     Int_t irr;
739     //
740     TGeoManager *mgr2 = gGeoManager;
741     TGeoVolume *ALIC = mgr2->GetTopVolume();
742     TCanvas *c2;
743     if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
744         c2 = new TCanvas("C2","ITS SSD Cone Geometry",900,450);
745     c2->Divide(2,1);
746     TGeoVolume *ITS,*SSD=0;
747     TGeoNode *node;
748     //
749     node = ALIC->FindNode("ITSV_1");
750     ITS = node->GetVolume();
751     node = ITS->FindNode("ITSssdConeA_1");
752     SSD = node->GetVolume();
753     //
754     mgr2->SetNsegments(ISetits(1,-1));
755     //
756     mgr2->SetVisLevel(6);
757     mgr2->SetVisOption(0);
758     //mgr2->CheckOverlaps(0.01);
759     //mgr2->PrintOverlaps();
760     if(ISetits(2,-1)==1){
761         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
762         mgr2->SetClippingShape(clip);
763     } // end if
764     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
765     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
766     //
767     c2->cd(1);
768     SSD->Draw();
769     TPad *p1 = c2->GetPad(1);
770     TView *view1 = p1->GetView();
771     if(view1){
772         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
773         if(irr) cout <<"error="<<irr<<endl;
774         if(ISetits(4,-1)==0) view1->SetParallel();
775         else  view1->SetPerspective();
776         view1->Top();
777         if(ISetits(3,-1)!=0) view1->ShowAxis();
778     } // end if view1
779     if(ISetits(5,-1)==1) SSD->Raytrace();
780     //
781     c2->cd(2);
782     SSD->Draw();
783     TPad *p2 = c2->GetPad(2);
784     TView *view2 = p2->GetView();
785     if(view2){
786         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
787         if(irr) cout <<"error="<<irr<<endl;
788         if(ISetits(4,-1)==0) view2->SetParallel();
789         else  view2->SetPerspective();
790         view2->Front();
791         if(ISetits(3,-1)!=0) view2->ShowAxis();
792     } // end if view1
793     if(ISetits(5,-1)==1) SSD->Raytrace();
794     //
795 }
796 //----------------------------------------------------------------------
797 void EngineeringSSDCylinder(){
798     // Display SSD Cylinder Geometry
799     // Inputs:
800     //    none.
801     // Outputs:
802     //    none.
803     // Retrurn:
804     //    none.
805     Int_t irr;
806     //
807     TGeoManager *mgr2 = gGeoManager;
808     TGeoVolume *ALIC = mgr2->GetTopVolume();
809     TCanvas *c3;
810     if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
811         c3 = new TCanvas("C3","ITS SSD Cylinder Geometry",900,450);
812     c3->Divide(2,1);
813     TGeoVolume *ITS,*SSD=0;
814     TGeoNode *node;
815     TArrow *arrow=new TArrow();
816     //
817     node = ALIC->FindNode("ITSV_1");
818     ITS = node->GetVolume();
819     node = ITS->FindNode("ITSssdCentCylCA_1");
820     SSD = node->GetVolume();
821     //Double_t Rmin = ((TGeoPcon*)(SSD->GetShape()))->GetRmin();
822     //Double_t Rmax = ((TGeoPcon*)(SSD->GetShape()))->GetRmax();
823     //Double_t Dz   = ((TGeoPcon*)(SSD->GetShape()))->GetDz();
824     //
825     mgr2->SetNsegments(ISetits(1,-1));
826     //
827     mgr2->SetVisLevel(6);
828     mgr2->SetVisOption(0);
829     //mgr2->CheckOverlaps(0.01);
830     //mgr2->PrintOverlaps();
831     if(ISetits(2,-1)==1){
832         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
833         mgr2->SetClippingShape(clip);
834     } // end if
835     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
836     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
837     //
838     c3->cd(1);
839     SSD->Draw();
840     TPad *p1 = c3->GetPad(1);
841     TView *view1 = p1->GetView();
842     if(view1){
843         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
844         if(irr) cout <<"error="<<irr<<endl;
845         if(ISetits(4,-1)==0) view1->SetParallel();
846         else  view1->SetPerspective();
847         view1->Front();
848         if(ISetits(3,-1)!=0) view1->ShowAxis();
849     } // end if view1
850     if(ISetits(5,-1)==1) SSD->Raytrace();
851     //arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
852     //
853     c3->cd(2);
854     SSD->Draw();
855     TPad *p2 = c3->GetPad(2);
856     TView *view2 = p2->GetView();
857     if(view2){
858         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
859         if(irr) cout <<"error="<<irr<<endl;
860         if(ISetits(4,-1)==0) view2->SetParallel();
861         else  view2->SetPerspective();
862         view2->Top();
863         if(ISetits(3,-1)!=0) view2->ShowAxis();
864     } // end if view2
865     if(ISetits(5,-1)==1) SSD->Raytrace();
866     //arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
867     //Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
868     //arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
869     //
870 }
871 //----------------------------------------------------------------------
872 void EngineeringSupRB24(){
873     // Display  RB 24 side cable tray support structure Geometry
874     // Inputs:
875     //    none.
876     // Outputs:
877     //    none.
878     // Retrurn:
879     //    none.
880     Int_t irr;
881     //
882     TGeoManager *mgr2 = gGeoManager;
883     TGeoVolume *ALIC = mgr2->GetTopVolume();
884     TCanvas *c4;
885     if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
886         c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
887     c4->Divide(2,1);
888     TGeoVolume *ITS,*SUPRB24=0;
889     TGeoNode *node;
890     TArrow *arrow=new TArrow();
891     //
892     node = ALIC->FindNode("ITSV_1");
893     ITS = node->GetVolume();
894     node = ITS->FindNode("ITSsupFrameM24_1");
895     SUPRB24 = node->GetVolume();
896     //
897     mgr2->SetNsegments(ISetits(1,-1));
898     //
899     mgr2->SetVisLevel(6);
900     mgr2->SetVisOption(0);
901     //mgr2->CheckOverlaps(0.01);
902     //mgr2->PrintOverlaps();
903     if(ISetits(2,-1)==1){
904         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
905         mgr2->SetClippingShape(clip);
906     } // end if
907     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
908     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
909     //
910     c4->cd(1);
911     SUPRB24->Draw();
912     TPad *p1 = c4->GetPad(1);
913     TView *view1 = p1->GetView();
914     if(view1){
915         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
916         if(irr) cout <<"error="<<irr<<endl;
917         if(ISetits(4,-1)==0) view1->SetParallel();
918         else  view1->SetPerspective();
919         view1->Front();
920         if(ISetits(3,-1)!=0) view1->ShowAxis();
921     } // end if view1
922     if(ISetits(5,-1)==1) SUPRB24->Raytrace();
923     //
924     c4->cd(2);
925     SUPRB24->Draw();
926     TPad *p2 = c4->GetPad(2);
927     TView *view2 = p2->GetView();
928     if(view2){
929         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
930         if(irr) cout <<"error="<<irr<<endl;
931         if(ISetits(4,-1)==0) view2->SetParallel();
932         else  view2->SetPerspective();
933         view2->Top();
934         if(ISetits(3,-1)!=0) view2->ShowAxis();
935     } // end if view2
936     if(ISetits(5,-1)==1) SUPRB24->Raytrace();
937     //
938 }
939 //----------------------------------------------------------------------
940 void EngineeringSupTrayRB24(){
941     // Display  RB 24 side cable tray support structure Geometry
942     // Inputs:
943     //    none.
944     // Outputs:
945     //    none.
946     // Retrurn:
947     //    none.
948     Int_t irr;
949     //
950     TGeoManager *mgr2 = gGeoManager;
951     TGeoVolume *ALIC = mgr2->GetTopVolume();
952     TCanvas *c4,*c5;
953     //if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
954         c4 = new TCanvas("C4","ITS RB24 Cable Trays and Patch Pannels",500,500);
955     //c4->Divide(2,1);
956     TGeoVolume *ITS,*SUPRB24=0;
957     TGeoNode *node;
958     TArrow *arrow=new TArrow();
959     //
960     node = ALIC->FindNode("ITSV_1");
961     ITS = node->GetVolume();
962     node = ITS->FindNode("ITSsupCableTrayMotherMT24_1");
963     SUPRB24 = node->GetVolume();
964     //
965     mgr2->SetNsegments(ISetits(1,-1));
966     //
967     mgr2->SetVisLevel(6);
968     mgr2->SetVisOption(0);
969     //mgr2->CheckOverlaps(0.01);
970     //mgr2->PrintOverlaps();
971     if(ISetits(2,-1)==1){
972         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
973         mgr2->SetClippingShape(clip);
974     } // end if
975     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
976     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
977     //
978     c4->cd(1);
979     SUPRB24->Draw();
980     //TPad *p1 = c4->GetPad(1);
981     //TView *view1 = p1->GetView();
982     TView *view1 = c4->GetView();
983     if(view1){
984         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
985         if(irr) cout <<"error="<<irr<<endl;
986         if(ISetits(4,-1)==0) view1->SetParallel();
987         else  view1->SetPerspective();
988         view1->Front();
989         if(ISetits(3,-1)!=0) view1->ShowAxis();
990     } // end if view1
991     if(ISetits(5,-1)==1) SUPRB24->Raytrace();
992     //
993     //c4->cd(2);
994         c5 = new TCanvas("C5","ITS RB24 Cable Trays and Patch Pannels",500,500);
995     c5->cd(1);
996     SUPRB24->Draw();
997     //TPad *p2 = c5->GetPad(1);
998     //TView *view2 = p2->GetView();
999     TView *view2 = c5->GetView();
1000     if(view2){
1001         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1002         if(irr) cout <<"error="<<irr<<endl;
1003         if(ISetits(4,-1)==0) view2->SetParallel();
1004         else  view2->SetPerspective();
1005         view2->Top();
1006         if(ISetits(3,-1)!=0) view2->ShowAxis();
1007     } // end if view2
1008     if(ISetits(5,-1)==1) SUPRB24->Raytrace();
1009     //
1010 }
1011 //----------------------------------------------------------------------
1012 void EngineeringSupRB26(){
1013     // Display RB 26 side cable tray support structure
1014     // Inputs:
1015     //    none.
1016     // Outputs:
1017     //    none.
1018     // Retrurn:
1019     //    none.
1020     Int_t irr;
1021     //
1022     TGeoManager *mgr2 = gGeoManager;
1023     TGeoVolume *ALIC = mgr2->GetTopVolume();
1024     TCanvas *c5;
1025     if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
1026         c5 = new TCanvas("C5","ITS SDD Cylinder Geometry",900,450);
1027     c5->Divide(2,1);
1028     TGeoVolume *ITS,*SUPRB26=0;
1029     TGeoNode *node;
1030     TArrow *arrow=new TArrow();
1031     //
1032     node = ALIC->FindNode("ITSV_1");
1033     ITS = node->GetVolume();
1034     node = ITS->FindNode("ITSsupFrameM26_1");
1035     SUPRB26 = node->GetVolume();
1036     //
1037     mgr2->SetNsegments(ISetits(1,-1));
1038     //
1039     mgr2->SetVisLevel(6);
1040     mgr2->SetVisOption(0);
1041     //mgr2->CheckOverlaps(0.01);
1042     //mgr2->PrintOverlaps();
1043     if(ISetits(2,-1)==1){
1044         TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1045         mgr2->SetClippingShape(clip);
1046     } // end if
1047     mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1048     if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1049     //
1050     c5->cd(1);
1051     SUPRB26->Draw();
1052     TPad *p1 = c5->GetPad(1);
1053     TView *view1 = p1->GetView();
1054     if(view1){
1055         view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1056         if(irr) cout <<"error="<<irr<<endl;
1057         if(ISetits(4,-1)==0) view1->SetParallel();
1058         else  view1->SetPerspective();
1059         view1->Front();
1060         if(ISetits(3,-1)!=0) view1->ShowAxis();
1061     } // end if view1
1062     if(ISetits(5,-1)==1) SUPRB26->Raytrace();
1063     //
1064     c5->cd(2);
1065     SUPRB26->Draw();
1066     TPad *p2 = c5->GetPad(2);
1067     TView *view2 = p2->GetView();
1068     if(view2){
1069         view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1070         if(irr) cout <<"error="<<irr<<endl;
1071         if(ISetits(4,-1)==0) view2->SetParallel();
1072         else  view2->SetPerspective();
1073         view2->Top();
1074         if(ISetits(3,-1)!=0) view2->ShowAxis();
1075     } // end if view2
1076     if(ISetits(5,-1)==1) SUPRB26->Raytrace();
1077     //
1078 }