Another histos for lumi
[u/mrichter/AliRoot.git] / ITS / DisplayITSv11.cxx
CommitLineData
e884b829 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
2047f253 16//
17// Class for the display of ITS
18// Version 11
19// with the new geometry
20// A proper description of this class
21// will be written shortly
22//
23
24
e884b829 25/*
26$Id$
27*/
2047f253 28
b4a4a5e6 29#include <Riostream.h>
2047f253 30#include <TArrow.h>
31#include <TCanvas.h>
32#include <TControlBar.h>
e884b829 33#include <TGeoManager.h>
e884b829 34#include <TGeoMaterial.h>
35#include <TGeoMedium.h>
2047f253 36#include <TGeoNode.h>
37#include <TGeoVolume.h>
e884b829 38#include <TPad.h>
2047f253 39#include <TROOT.h>
40#include <TSystem.h>
e884b829 41#include <TView.h>
2047f253 42class TGeoTube;
e884b829 43
44#include "AliITS.h"
45#include "AliITSv11.h"
46#include "DisplayITSv11.h"
47
48ClassImp(DisplayITSv11)
49//______________________________________________________________________
2047f253 50DisplayITSv11::DisplayITSv11()
51{
52 // Default Constructor.
53 // Inputs:
54 // none.
55 // Outputs:
56 // none.
57 // Return:
58 // A Default constructed DispalyITSv11 class/task.
59
60 fmgr = 0;
61 fits = 0;
62 fALICE = 0;
63 fITS = 0;
64 fClip = 0;
65 fITSdebug = 0;
66 fNsegments = 80;
67 fCut = 0;
68 fAxis = 1;
69 fPerspective = 0;
70 fSolid = 0;
71 fPhimincut = 0.0;
72 fPhimaxcut = 180.0;
73 fRmin[0] = fRmin[1] = fRmin[2] = fRmax[0] = fRmax[1] = fRmax[2] = 0.0;
74 fLongitude = 90.0;
75 fLatitude = 0.0;
76 fPsi = 0.0;
e884b829 77}
e884b829 78
e884b829 79//______________________________________________________________________
2047f253 80DisplayITSv11::~DisplayITSv11()
81{
82 // Destructor.
83 // Inputs:
84 // none.
85 // Outputs:
86 // none.
87 // Return:
88 // none..
89
90 if(fits) delete fits;
91 if(fClip) delete fClip;
92 fITS = 0;
93 fALICE = 0;
94 fmgr = 0;
e884b829 95}
2047f253 96
e884b829 97//______________________________________________________________________
2047f253 98void DisplayITSv11::Exec(Option_t* opt)
99{
100 // Main display routine
101 // Inputs:
102 // Option_t * opt Not presently used.
103 // Outputs:
104 // none.
105 // Return:
106 // none.
107 Int_t i;
108
109 if(strstr(opt,"debug")) fits->SetDebug();
110 gSystem->Load("libGeom");
111 //
112 if(gGeoManager) delete gGeoManager;
113 fmgr = gGeoManager = new TGeoManager("ITSGeometry",
114 " ITS Simulation Geometry Manager");
115 //
116 TGeoMaterial *vacmat = new TGeoMaterial("Vacume",0,0,0);
117 TGeoMedium *vacmed = new TGeoMedium("Vacume_med",1,vacmat);
118 fRmax[0] = 100.;
119 fRmax[1] = 100.;
120 fRmax[2] = 200.;
121 for(i=0;i<3;i++) fRmin[i] = -fRmax[i];
122 fALICE = fmgr->MakeBox("ALIC",vacmed,fRmax[0],fRmax[1],fRmax[2]);
123 fmgr->SetTopVolume(fALICE);
124 //
125 AliITSv11 *fits = new AliITSv11();
126 fits->SetDebug(GetDebugITS());
127 fits->CreateMaterials();
128 fits->CreateGeometry();
129 //
130 fmgr->CloseGeometry();
131 fITS = fALICE->FindNode("ITSV_1")->GetVolume();
132 //
133 TControlBar *bar=new TControlBar("vertical","ITS Geometry Display",10,10);
134 bar->AddButton("Set ITS Debug level 1","SetITSdebugOn()","Debug on");
135 bar->AddButton("Set ITS Debug level 0","SetITSdebugOff()","Debug off");
136 bar->AddButton("Set ITS Theta,Phi cut on","SetCylindericalClipVolume()",
137 "Cut on");
138 bar->AddButton("Set ITS Theta,Phi cut off","SetCylindericalCutOff()",
139 "Cut off");
140 bar->AddButton("Set axis on","SetAxisOn()","Show Axis on");
141 bar->AddButton("Set axis off","SetAxisOff()","Show Axis off");
142 bar->AddButton("Set perspective on","SetPerspectiveOn()",
143 "Perspective on");
144 bar->AddButton("Set perspective off","SetPerspectiveOff()",
145 "Perspective off");
146 bar->AddButton("Draw volumes as Solid","SetSolid()","Solid Volumes");
147 bar->AddButton("Draw volumes as wire","SetWire()","Wire Volumes");
148 bar->AddButton("Set circle/80","SetCircleSegments(80)",
149 "circles ~ by 80 lines");
150 bar->AddButton("Check Overlaps","fmgr->CheckOverlaps()",
151 "Check for overlaps");
152 bar->AddButton("Display Geometry","Displayit()","Run Displayit");
153 bar->AddButton("Display SPD Thermal Sheald","EngineeringSPDThS()",
154 "Run EngineeringSPDThS");
155 bar->AddButton("Display SDD Cone","EngineeringSDDCone()",
156 "Run EngineeringSDDCone");
157 bar->AddButton("Display SDD Centeral Cylinder","EngineeringSDDCylinder()",
158 "Run EngineeringSDDCylinder");
159 bar->AddButton("Display SUP RB24 side","EngineeringSupRB24()",
160 "Run EngineeringSDDCylinder");
161 bar->AddButton("Display SUP RB26 side","EngineeringSupRB26()",
162 "Run EngineeringSupRB26");
163 bar->AddButton("Quit/Exit",".q","Exit");
164 bar->Show();
165 gROOT->SaveContext();
166 //Displayit();
167}
e884b829 168
2047f253 169//______________________________________________________________________
170void DisplayITSv11::Displaying(TGeoVolume *v,TCanvas *c,Int_t ipad)
171{
172 // Display Volume according to existing values
173 // Inputs:
174 // TGeoVolume *v volume to be drawn.
175 // TCanvas *p Pad where drawing is to be done
176 // Int_t ipad subpad to draw on
177 // Outputs:
178 // none.
179 // Return:
180 // none.
181 Int_t irr;
182 TVirtualPad *p = 0;
183 TView *view=0;
184
185 c->cd(ipad);
186 p = c->GetPad(ipad);
187 if(!p) return;
188 view = p->GetView();
189 if(!view){view = new TView(fRmin,fRmax,1);p->SetView(view);}
190 view->SetRange(fRmin,fRmax);
191 view->SetView(fLongitude,fLatitude,fPsi,irr);
192 if(fPerspective) view->SetPerspective();
193 else view->SetParralel();
194 if(fAxis) view->ShowAxis();
195 //
196 if(fClip) fmgr->SetClippingShape(fClip);
197 v->Draw();
198 if(fSolid) v->Raytrace();
199 p->Modified(1);
200 p->Update();
e884b829 201}
202//----------------------------------------------------------------------
203void DisplayITSv11::DisplayITS(){
204 // Display AliITSv11 Geometry
205 // Inputs:
206 // const char* filename output file with the display in it
207 // Outputs:
208 // none.
209 // Retrurn:
210 // none.
211 Double_t lon,lat,psi;
212 //
213 TCanvas *c1;
214 if(!(c1 = (TCanvas*)gROOT->FindObject("C1")))
215 c1 = new TCanvas("C1","ITS Simulation Geometry",900,900);
216 c1->Divide(2,2);
217 //
218 fmgr->SetNsegments(fNsegments);
219 //
220 fmgr->SetVisLevel(6);
221 fmgr->SetVisOption(0);
222 // Perspective
223 Displaying(fALICE,c1,2);
224 lon = fLongitude;
225 lat = fLatitude;
226 psi = fPsi;
227 fLongitude = 270.0; // Front
228 fLatitude = 90.0;
229 fPsi = 0.0;
230 Displaying(fALICE,c1,1);
231 fLongitude = 270.0; // Top
232 fLatitude = 0.0;
233 fPsi = 0.0;
234 Displaying(fALICE,c1,3);
235 fLongitude = 0.0; // Side
236 fLatitude = 90.0;
237 fPsi = 0.0;
238 Displaying(fALICE,c1,4);
239 fLongitude = lon;
240 fLatitude = lat;
241 fPsi = psi;
242 //
243}
244//----------------------------------------------------------------------
2047f253 245void DisplayITSv11::EngineeringSPDThS()
246{
247 // Display SPD Thermal Sheald Geometry
248 // Inputs:
249 // none.
250 // Outputs:
251 // none.
252 // Retrurn:
253 // none.
254 Double_t lon,lat,psi;
255 //
256 TCanvas *c4;
257 TGeoNode *node;
258 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
259 c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
260 c4->Divide(2,1);
261 TGeoVolume *sPDThS=0;
262 //TArrow *arrow=new TArrow();
263 //
264 node = fITS->FindNode("ITSspdThermalSheald_1");
265 sPDThS = node->GetVolume();
266 //
267 fmgr->SetNsegments(fNsegments);
268 //
269 fmgr->SetVisLevel(6);
270 fmgr->SetVisOption(0);
271 //
272 lon = fLongitude;
273 lat = fLatitude;
274 psi = fPsi;
275 fLongitude = 270.0; // Front
276 fLatitude = 90.0;
277 fPsi = 0.0;
278 Displaying(sPDThS,c4,1);
279 //
280 fLongitude = 270.0; // Top
281 fLatitude = 0.0;
282 fPsi = 0.0;
283 Displaying(sPDThS,c4,2);
284 //
285 fLongitude = lon;
286 fLatitude = lat;
287 fPsi = psi;
e884b829 288}
2047f253 289
e884b829 290//----------------------------------------------------------------------
2047f253 291void DisplayITSv11::EngineeringSDDCone()
292{
293 // Display SDD Cone Geometry
294 // Inputs:
295 // none.
296 // Outputs:
297 // none.
298 // Retrurn:
299 // none.
300 Double_t lon,lat,psi;
301 //
302 TCanvas *c2;
303 if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
304 c2 = new TCanvas("C2","ITS SDD Cone Geometry",900,450);
305 c2->Divide(2,1);
306 TGeoVolume *sDD=0;
307 TGeoNode *node;
308 //
309 node = fITS->FindNode("ITSsddConeL_1");
310 sDD = node->GetVolume();
311 //
312 fmgr->SetNsegments(fNsegments);
313 //
314 fmgr->SetVisLevel(6);
315 fmgr->SetVisOption(0);
316 //
317 lon = fLongitude;
318 lat = fLatitude;
319 psi = fPsi;
320 fLongitude = 270.0; // Front
321 fLatitude = 90.0;
322 fPsi = 0.0;
323 Displaying(sDD,c2,1);
324 //
325 fLongitude = 270.0; // Top
326 fLatitude = 0.0;
327 fPsi = 0.0;
328 Displaying(sDD,c2,2);
329 //
330 fLongitude = lon;
331 fLatitude = lat;
332 fPsi = psi;
e884b829 333}
2047f253 334
e884b829 335//----------------------------------------------------------------------
2047f253 336void DisplayITSv11::EngineeringSDDCylinder()
337{
338 // Display SDD Cylinder Geometry
339 // Inputs:
340 // none.
341 // Outputs:
342 // none.
343 // Retrurn:
344 // none.
345 Double_t lon,lat,psi;
346 //
347 TCanvas *c3;
348 if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
349 c3 = new TCanvas("C3","ITS SDD Cylinder Geometry",900,450);
350 c3->Divide(2,1);
351 TGeoVolume *sDD=0;
352 TGeoNode *node;
353 TArrow *arrow=new TArrow();
354 //
355 node = fITS->FindNode("ITSsddCentCylCF_1");
356 sDD = node->GetVolume();
357 Double_t rmin = ((TGeoTube*)(sDD->GetShape()))->GetRmin();
358 Double_t rmax = ((TGeoTube*)(sDD->GetShape()))->GetRmax();
359 Double_t dz = ((TGeoTube*)(sDD->GetShape()))->GetDz();
360 //
361 fmgr->SetNsegments(fNsegments);
362 //
363 fmgr->SetVisLevel(6);
364 fmgr->SetVisOption(0);
365 //
366 lon = fLongitude;
367 lat = fLatitude;
368 psi = fPsi;
369 fLongitude = 270.0; // Front
370 fLatitude = 90.0;
371 fPsi = 0.0;
372 Displaying(sDD,c3,1);
373 arrow->DrawArrow(1.01*rmax,-dz,1.01*rmax,+dz);
374 //
375 fLongitude = 270.0; // Top
376 fLatitude = 0.0;
377 fPsi = 0.0;
378 Displaying(sDD,c3,2);
379 arrow->DrawArrow(rmax,0.0,rmax,0.0);
380 Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
381 arrow->DrawArrow(-rmin*c,-rmin*s,rmin*c,rmin*s);
382 //
383 fLongitude = lon;
384 fLatitude = lat;
385 fPsi = psi;
e884b829 386}
2047f253 387
e884b829 388//----------------------------------------------------------------------
2047f253 389void DisplayITSv11::EngineeringSupRB24()
390{
391 // Display SDD Cylinder Geometry
392 // Inputs:
393 // none.
394 // Outputs:
395 // none.
396 // Retrurn:
397 // none.
398 Double_t lon,lat,psi;
399 //
400 TCanvas *c4;
401 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
402 c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
403 c4->Divide(2,1);
404 TGeoVolume *sUPRB24=0;
405 TGeoNode *node;
406 //TArrow *arrow=new TArrow();
407 //
408 node = fITS->FindNode("ITSsupFrameM24_1");
409 sUPRB24 = node->GetVolume();
410 //
411 fmgr->SetNsegments(fNsegments);
412 //
413 fmgr->SetVisLevel(6);
414 fmgr->SetVisOption(0);
415 //
416 lon = fLongitude;
417 lat = fLatitude;
418 psi = fPsi;
419 fLongitude = 270.0; // Front
420 fLatitude = 90.0;
421 fPsi = 0.0;
422 Displaying(sUPRB24,c4,1);
423 //
424 fLongitude = 270.0; // Top
425 fLatitude = 0.0;
426 fPsi = 0.0;
427 Displaying(sUPRB24,c4,2);
428 //
429 fLongitude = lon;
430 fLatitude = lat;
431 fPsi = psi;
e884b829 432}
433
434//----------------------------------------------------------------------
2047f253 435void DisplayITSv11::EngineeringSupRB26()
436{
437 // Display SDD Cylinder Geometry
438 // Inputs:
439 // none.
440 // Outputs:
441 // none.
442 // Retrurn:
443 // none.
444 Double_t lon,lat,psi;
445 //
446 TCanvas *c5;
447 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
448 c5 = new TCanvas("C5","ITS SDD Cylinder Geometry",900,450);
449 c5->Divide(2,1);
450 TGeoVolume *sUPRB26=0;
451 TGeoNode *node;
452 //TArrow *arrow=new TArrow();
453 //
454 node = fITS->FindNode("ITSsupFrameM26_1");
455 sUPRB26 = node->GetVolume();
456 //
457 fmgr->SetNsegments(fNsegments);
458 //
459 fmgr->SetVisLevel(6);
460 fmgr->SetVisOption(0);
461 //
462 lon = fLongitude;
463 lat = fLatitude;
464 psi = fPsi;
465 fLongitude = 270.0; // Front
466 fLatitude = 90.0;
467 fPsi = 0.0;
468 Displaying(sUPRB26,c5,1);
469 //
470 fLongitude = 270.0; // Top
471 fLatitude = 0.0;
472 fPsi = 0.0;
473 Displaying(sUPRB26,c5,2);
474 //
475 fLongitude = lon;
476 fLatitude = lat;
477 fPsi = psi;
e884b829 478}