]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/Displayv11.C
Resize to fit the number of references (Ruben)
[u/mrichter/AliRoot.git] / ITS / Displayv11.C
CommitLineData
541f7ba6 1//----------------------------------------------------------------------
297369a1 2
57aa7862 3#if !defined(__CINT__) || defined(__MAKECINT__)
4#include <TROOT.h>
5#include <TSystem.h>
6#include <TPolyLine.h>
7#include <TGeoVolume.h>
8#include <TGeoMedium.h>
9#include <TGeoManager.h>
10#include <TArrayD.h>
11#include <TArrow.h>
12#include <TControlBar.h>
13#include <TGeoTube.h>
14#include <TCanvas.h>
15#include <TPad.h>
16#include <TVirtualPad.h>
17#include <TView.h>
18#include "AliITSgeom.h"
19#include "AliITSInitGeometry.h"
20#include "AliITSv11GeometrySPD.h"
21#include "AliITSv11GeometrySDD.h"
22#include "AliITSv11GeometrySSD.h"
23#include "AliITSv11GeometrySupport.h"
24#endif
25
26
54c9a3d9 27static AliITSv11GeometrySPD *gspd;
28static AliITSv11GeometrySDD *gsdd;
29static AliITSv11GeometrySSD *gssd;
30static AliITSv11GeometrySupport *gsupp;
31static AliITSgeom *geom;
57aa7862 32
33void CreateMaterialsITS();
34
35void AliMaterial(Int_t imat, const char* name, Float_t a,
36 Float_t z, Float_t dens, Float_t radl,
37 Float_t absl);
38void AliMedium(Int_t numed, const char *name, Int_t nmat,
39 Int_t isvol, Int_t ifield, Float_t fieldm,
40 Float_t tmaxfd, Float_t stemax, Float_t deemax,
41 Float_t epsil, Float_t stmin);
42void AliMixture(Int_t kmat, const char* name, Float_t* a, Float_t* z,
43 Double_t dens, Int_t nlmat=0, Float_t* wmat=0);
44void Mixture(Int_t& kmat, const char* name, Double_t* a, Double_t* z,
45 Double_t dens, Int_t nlmat, Double_t* wmat);
46Double_t* CreateDoubleArray(Float_t* array, Int_t size);
47
48Bool_t Make2DCrossSections(TPolyLine &a0,TPolyLine &a1,
49 TPolyLine &b0,TPolyLine &b1,TPolyMarker &p);
50
297369a1 51//
52//----------------------------------------------------------------------
57aa7862 53void Displayv11(){
541f7ba6 54 // Display AliITSv11 Geometry
55 // Inputs:
56 // const char* filename output file with the display in it
57 // Outputs:
58 // none.
59 // Retrurn:
60 // none.
61
62 gSystem->Load("libGeom");
63 //
541f7ba6 64 if(gGeoManager) delete gGeoManager;
57aa7862 65 gGeoManager = new TGeoManager("ITSGeometry",
66 " ITS Simulation Geometry Manager");
67 TGeoManager *mgr2 = gGeoManager;
541f7ba6 68 //
57aa7862 69 const AliITSVersion_t kv11=(AliITSVersion_t)110;
54c9a3d9 70 const Char_t *cvsDate="$Date$";
71 const Char_t *cvsRevision="$Revision$";
72 const Int_t kLength=100;
73 Char_t vstrng[kLength];
74 AliITSInitGeometry initgeom(kv11,1);
75 //
541f7ba6 76 TGeoMaterial *vacmat = new TGeoMaterial("Vacume",0,0,0);
77 TGeoMedium *vacmed = new TGeoMedium("Vacume_med",1,vacmat);
543b7370 78 TGeoVolume *ALIC = mgr2->MakeBox("ALIC",vacmed,1000.,1000.,2000.);
541f7ba6 79 mgr2->SetTopVolume(ALIC);
543b7370 80 TGeoVolume *ITS = mgr2->MakeBox("ITSV",vacmed,990.,990.,1990.);
54c9a3d9 81 if(initgeom.WriteVersionString(vstrng,kLength,kv11,1,cvsDate,cvsRevision))
82 ITS->SetTitle(vstrng);
83 //TGeoVolumeAssembly *ITSSPD = new TGeoVolumeAssembly("ITSSPD");
84 //ITS->AddNode(ITSSPD,1);
a53658c6 85 ALIC->AddNode(ITS,1);
541f7ba6 86 //
a53658c6 87 /*
db486a6e 88 AliITSv11 *its = new AliITSv11(0,3);
d1a22f9a 89 its->SetDebug(ISetits(0,-1));
db486a6e 90 its->GetSPDGeometry()->SetDebug(ISetits(0,-1));
91 its->GetSupGeometry()->SetDebug(ISetits(0,-1));
541f7ba6 92 its->CreateMaterials();
93 its->CreateGeometry();
a53658c6 94 */
54c9a3d9 95 gspd = new AliITSv11GeometrySPD(0);
96 gsdd = new AliITSv11GeometrySDD();
297369a1 97 gsupp = new AliITSv11GeometrySupport(0);
54c9a3d9 98 gssd = new AliITSv11GeometrySSD();
a53658c6 99 //
57aa7862 100 CreateMaterialsITS();
54c9a3d9 101 gspd->SPDSector(ITS,mgr2);
012f0f4c 102 gsupp->SPDCone(ITS,mgr2);
543b7370 103 gsupp->SetDebug(0);
012f0f4c 104 gsupp->SDDCone(ITS,mgr2);
54c9a3d9 105 gsdd->Layer3(ITS);
106 gsdd->Layer4(ITS);
107 gsdd->ForwardLayer3(ITS);// in Hybrid its in IS02
108 gsdd->ForwardLayer4(ITS);// in Hybrid its in IS02
109 gssd->Layer5(ITS);
110 gssd->Layer6(ITS);
111 gssd->LadderSupportLayer5(ITS);
112 gssd->LadderSupportLayer6(ITS);
113 gssd->EndCapSupportSystemLayer6(ITS);
114 gssd->EndCapSupportSystemLayer5(ITS);
012f0f4c 115 gsupp->SSDCone(ITS,mgr2);
116 gsupp->ServicesCableSupport(ITS);
541f7ba6 117 //
118 mgr2->CloseGeometry();
d1a22f9a 119 //
54c9a3d9 120 geom = new AliITSgeom();
121 initgeom.InitAliITSgeom(geom);
122 geom->WriteNewFile("ITSgeomV11.det");
123 //
d1a22f9a 124 TControlBar *bar=new TControlBar("vertical","ITS Geometry Display",10,10);
d5219d0d 125 bar->AddButton("Set Clipping on","ISetits(2,1)","Clipping on");
126 bar->AddButton("Set Cllipping off","ISetits(2,0)","Clipping off");
d1a22f9a 127 bar->AddButton("Set axis on","ISetits(3,1)","Show Axis on");
128 bar->AddButton("Set axis off","ISetits(3,0)","Show Axis off");
129 bar->AddButton("Set perspective on","ISetits(4,1)","Perspective on");
130 bar->AddButton("Set perspective off","ISetits(4,0)","Perspective off");
d5219d0d 131 bar->AddButton("Set RayTrace on","ISetits(5,1)","Perspective on");
132 bar->AddButton("Set RayTrace off","ISetits(5,0)","Perspective off");
d1a22f9a 133 bar->AddButton("Set circle/80","ISetits(1,80)","circles ~ by 80 lines");
134 bar->AddButton("Display Geometry","Displayit()","Run Displayit");
012f0f4c 135 bar->AddButton("Display SPD Sector Volume","EngineeringSPDSector()",
136 "Run EngineeringSPDSector");
54c9a3d9 137 bar->AddButton("Print SPD Sector Volume data xfig","PrintSPDSectorData()",
138 "Run PrintSPDSectorData");
57aa7862 139 bar->AddButton("Display SPD General Volume","EngineeringSPDCenter()",
012f0f4c 140 "Run EngineeringSPDCenter");
57aa7862 141 bar->AddButton("Display SPD Thermal Shield","EngineeringSPDThS()",
4830bf84 142 "Run EngineeringSPDThS");
297369a1 143 bar->AddButton("Display SPD Sector Cross Sections","EngineeringSPDSCS()",
144 "Run EngineeringSPDSCS");
db486a6e 145 bar->AddButton("Display SDD Layer 3","EngineeringSDDLayer3()",
146 "Run EngineeringSDDLayer3");
147 bar->AddButton("Display SDD Layer 4","EngineeringSDDLayer4()",
148 "Run EngineeringSDDLayer4");
d1a22f9a 149 bar->AddButton("Display SDD Cone","EngineeringSDDCone()",
150 "Run EngineeringSDDCone");
57aa7862 151 bar->AddButton("Display SDD Central Cylinder","EngineeringSDDCylinder()",
d1a22f9a 152 "Run EngineeringSDDCylinder");
57aa7862 153 bar->AddButton("Display SSD Layer 5","EngineeringSSDLayer5()",
154 "Run EngineeringSSDLayer5");
155 bar->AddButton("Display SSD Layer 6","EngineeringSSDLayer6()",
156 "Run EngineeringSSDLayer6");
d5219d0d 157 bar->AddButton("Display SSD Cone","EngineeringSSDCone()",
158 "Run EngineeringSSDCone");
57aa7862 159 bar->AddButton("Display SSD Central Cylinder","EngineeringSSDCylinder()",
d5219d0d 160 "Run EngineeringSSDCylinder");
57aa7862 161// bar->AddButton("Display SUP RB24 side","EngineeringSupRB24()",
162// "Run EngineeringSupRB24");
163// bar->AddButton("Display Cable Trays RB24 side","EngineeringSupTrayRB24()",
164// "Run EngineeringSupTrayRB24");
165// bar->AddButton("Display SUP RB26 side","EngineeringSupRB26()",
166// "Run EngineeringSupRB26");
a53658c6 167 bar->AddButton("Save Geometry to File","ExportToFile()",
168 "Run ExportToFile");
d1a22f9a 169 bar->AddButton("Quit/Exit",".q","Exit");
170 bar->Show();
171 gROOT->SaveContext();
172 //Displayit();
173}
174//----------------------------------------------------------------------
a53658c6 175void ExportToFile(){
176 // Quirry file name and write geometry to a root file.
177 // Inputs:
178 // const char* filename output file with the display in it
179 // Outputs:
180 // none.
181 // Retrurn:
182 // none.
183 Char_t filename[100];
184
57aa7862 185 printf("Enter File name:");
a53658c6 186 scanf("%s",filename);
187
188 gGeoManager->Export(filename);
189}
190//----------------------------------------------------------------------
d1a22f9a 191Int_t ISetits(Int_t t,Int_t v){
d5219d0d 192 static Int_t itsdebug=1,nsegments=80,cut=0,axis=1,perspective=0,ray=0;
d1a22f9a 193
194 switch (t) {
195 case 0:
196 if(v<0) return itsdebug;
197 itsdebug = v;
198 break;
199 case 1:
200 if(v<0) return nsegments;
201 nsegments= v;
202 break;
203 case 2:
204 if(v<0) return cut;
205 cut = v;
206 break;
207 case 3:
208 if(v<0) return axis;
209 axis = v;
210 break;
211 case 4:
212 if(v<0) return perspective;
213 perspective = v;
214 break;
d5219d0d 215 case 5:
216 if(v<0) return ray;
217 ray = v;
218 break;
d1a22f9a 219 }// end switch
220 return 0;
221}
222//----------------------------------------------------------------------
223Double_t DSetits(Int_t t,Double_t v){
224 static Double_t phimincut=0.0,phimaxcut=180.0;
57aa7862 225 static Double_t longitude=90.0,latitude=0.0;
d1a22f9a 226
227 switch (t) {
228 case 0:
229 if(v<0.) return phimincut;
230 phimincut = v;
231 break;
232 case 1:
233 if(v<0.) return phimaxcut;
234 phimaxcut = v;
235 break;
236 case 2:
237 if(v<0.) return longitude;
238 longitude = v;
239 break;
240 case 3:
241 if(v<0.) return latitude;
242 latitude = v;
243 break;
244 case 4:
245 if(v<0.) return latitude;
246 latitude = v;
247 break;
248 }// end switch
249 return 0;
250}
251//----------------------------------------------------------------------
252void Displayit(){
253 // Display AliITSv11 Geometry
254 // Inputs:
255 // const char* filename output file with the display in it
256 // Outputs:
257 // none.
258 // Retrurn:
259 // none.
260 Int_t irr;
261 //
262 TGeoManager *mgr2 = gGeoManager;
263 TGeoVolume *ALIC = mgr2->GetTopVolume();
264 TCanvas *c1;
265 if(!(c1 = (TCanvas*)gROOT->FindObject("C1")))
266 c1 = new TCanvas("C1","ITS Simulation Geometry",900,900);
54c9a3d9 267 //c1->Divide(2,2);
d1a22f9a 268 //
269 mgr2->SetNsegments(ISetits(1,-1));
541f7ba6 270 //
171f3f35 271 mgr2->SetVisLevel(6);
cbd7b929 272 mgr2->SetVisOption(0);
171f3f35 273 //mgr2->CheckOverlaps(0.01);
274 //mgr2->PrintOverlaps();
d5219d0d 275 if(ISetits(2,-1)==1){
276 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
277 mgr2->SetClippingShape(clip);
278 } // end if
d1a22f9a 279 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
541f7ba6 280 //
171f3f35 281 c1->cd(1);
282 ALIC->Draw();
57aa7862 283 TPad *p1 = (TPad*)c1->GetPad(1);
171f3f35 284 TView *view1 = p1->GetView();
285 if(view1){
d1a22f9a 286 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
287 if(irr) cout <<"error="<<irr<<endl;
a53658c6 288 if(ISetits(4,-1)==0) view1->SetParallel();
d1a22f9a 289 else view1->SetPerspective();
171f3f35 290 view1->Front();
d1a22f9a 291 if(ISetits(3,-1)!=0) view1->ShowAxis();
292 } // end if view1
d5219d0d 293 if(ISetits(5,-1)==1) ALIC->Raytrace();
54c9a3d9 294 /*c1->cd(2);
171f3f35 295 ALIC->Draw();
296 TPad *p2 = c1->GetPad(2);
297 TView *view2 = p2->GetView();
298 if(view2){
d1a22f9a 299 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
300 if(irr) cout <<"error="<<irr<<endl;
a53658c6 301 if(ISetits(4,-1)==0) view2->SetParallel();
d1a22f9a 302 else view2->SetPerspective();
171f3f35 303 view2->RotateView(60.,30.);
d1a22f9a 304 if(ISetits(3,-1)!=0) view2->ShowAxis();
171f3f35 305 } // end if view2
d5219d0d 306 if(ISetits(5,-1)==1) ALIC->Raytrace();
171f3f35 307 c1->cd(3);
171f3f35 308 ALIC->Draw();
d1a22f9a 309 c1->SetPhi(90.0); c1->SetTheta(90.0);
171f3f35 310 TPad *p3 = c1->GetPad(3);
311 TView *view3 = p3->GetView();
312 if(view3){
d1a22f9a 313 view3->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
314 if(irr) cout <<"error="<<irr<<endl;
a53658c6 315 if(ISetits(4,-1)==0) view3->SetParallel();
d1a22f9a 316 else view3->SetPerspective();
171f3f35 317 view3->Top();
d1a22f9a 318 if(ISetits(3,-1)!=0) view3->ShowAxis();
171f3f35 319 } // end if view3
d5219d0d 320 if(ISetits(5,-1)==1) ALIC->Raytrace();
171f3f35 321 c1->cd(4);
541f7ba6 322 ALIC->Draw();
171f3f35 323 TPad *p4 = c1->GetPad(4);
324 TView *view4 = p4->GetView();
325 if(view4){
d1a22f9a 326 view4->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
327 if(irr) cout <<"error="<<irr<<endl;
a53658c6 328 if(ISetits(4,-1)==0) view4->SetParallel();
d1a22f9a 329 else view4->SetPerspective();
171f3f35 330 view4->Side();
d1a22f9a 331 if(ISetits(3,-1)!=0) view4->ShowAxis();
171f3f35 332 } // end if view4
d5219d0d 333 if(ISetits(5,-1)==1) ALIC->Raytrace();
54c9a3d9 334 *///
541f7ba6 335}
d1a22f9a 336//----------------------------------------------------------------------
297369a1 337void EngineeringSPDSCS(){
338 // Display SPD Carbon Fiber Sector Cross sections A and B
339 // Inputs:
340 // none.
341 // Outputs:
342 // none.
343 // Return:
344 // none.
345 TPolyLine *a0,*a1,*b0,*b1;
346 TPolyMarker *p;
347 TCanvas *cSPDSCS=0;
348 Int_t i;
349 Double_t max=0.0;
350
351 a0 = new TPolyLine();
352 a1 = new TPolyLine();
353 b0 = new TPolyLine();
354 b1 = new TPolyLine();
355 p = new TPolyMarker();
356 a0->SetLineColor(1);
357 a1->SetLineColor(4);
358 b0->SetLineColor(3);
359 b0->SetLineStyle(2); // dashed
360 b1->SetLineColor(6);
361 b1->SetLineStyle(2); // dashed
362 p->SetMarkerColor(2);
363 p->SetMarkerStyle(5);
57aa7862 364 if(gspd==0||Make2DCrossSections(*a0,*a1,*b0,*b1,*p)==kFALSE)return;
297369a1 365 for(i=0;i<a0->GetN();i++) {
366 if(TMath::Abs(a0->GetX()[i])>max) max = TMath::Abs(a0->GetX()[i]);
367 if(TMath::Abs(a0->GetY()[i])>max) max = TMath::Abs(a0->GetY()[i]);
368 } // end for i
369 for(i=0;i<a1->GetN();i++) {
370 if(TMath::Abs(a1->GetX()[i])>max) max = TMath::Abs(a0->GetX()[i]);
371 if(TMath::Abs(a1->GetY()[i])>max) max = TMath::Abs(a1->GetY()[i]);
372 } // end for i
373 for(i=0;i<b0->GetN();i++) {
374 if(TMath::Abs(b0->GetX()[i])>max) max = TMath::Abs(b0->GetX()[i]);
375 if(TMath::Abs(b0->GetY()[i])>max) max = TMath::Abs(b0->GetY()[i]);
376 } // end for i
377 for(i=0;i<b1->GetN();i++) {
378 if(TMath::Abs(b1->GetX()[i])>max) max = TMath::Abs(b1->GetX()[i]);
379 if(TMath::Abs(b1->GetY()[i])>max) max = TMath::Abs(b1->GetY()[i]);
380 } // end for i
381 max *= 1.05;
57aa7862 382 cSPDSCS = (TCanvas*)gROOT->FindObject("cSPDSCS");
297369a1 383 if(cSPDSCS==0) delete cSPDSCS;
384 cSPDSCS = new TCanvas("cSPDSCS","SPD Carbon Fiber Sector Cross sections",2);
385 cSPDSCS->Range(-max,-max,max,max);
386 //cSPDSCS->RangeAxis();
387 cSPDSCS->SetFixedAspectRatio(kTRUE);
388 //
389 a0->Draw("");
390 a1->Draw("same");
391 p->Draw("same");
392 b0->Draw("same");
393 b1->Draw("same");
394 cSPDSCS->Update();
395 return;
396}
397//----------------------------------------------------------------------
012f0f4c 398void EngineeringSPDSector(){
399 // Display SPD Sector Geometry
db486a6e 400 // Inputs:
401 // none.
402 // Outputs:
403 // none.
404 // Retrurn:
405 // none.
406 Int_t irr;
407 //
408 TGeoManager *mgr2 = gGeoManager;
409 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 410 TCanvas *c4=0, *c5=0;
db486a6e 411 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
412 c4 = new TCanvas("C4","ITS SPD Layer Geometry Side View",500,500);
54c9a3d9 413 TGeoVolume *ITS=0,*ITSSPD=0,*SPDLay=0;
414 TGeoNode *node=0;
db486a6e 415 //
416 node = ALIC->FindNode("ITSV_1");
417 ITS = node->GetVolume();
54c9a3d9 418 node = ITS->FindNode("ITSSPD_1");
419 ITSSPD = node->GetVolume();
420 node = ITSSPD->FindNode("ITSSPDCarbonFiberSectorV_1");
421 if(node==0)Error("EngineeringSPDSector","could not find node %s",
422 "ITSSPDCarbonFiberSectorV_1");
db486a6e 423 SPDLay = node->GetVolume();
54c9a3d9 424 if(SPDLay==0)Error("EngineeringSPDSector","could not find volume SPDLay");
db486a6e 425 //
426 mgr2->SetNsegments(ISetits(1,-1));
427 //
428 mgr2->SetVisLevel(6);
429 mgr2->SetVisOption(0);
430 //mgr2->CheckOverlaps(0.01);
431 //mgr2->PrintOverlaps();
432 if(ISetits(2,-1)==1){
433 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
434 mgr2->SetClippingShape(clip);
435 } // end if
436 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
437 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
438 //
439 SPDLay->Draw();
440 TView *view1 = c4->GetView();
441 if(view1){
442 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
443 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 444 if(ISetits(4,-1)==0) view1->SetParallel();
db486a6e 445 else view1->SetPerspective();
446 view1->Front();
447 if(ISetits(3,-1)!=0) view1->ShowAxis();
448 } // end if view1
449 if(ISetits(5,-1)==1) SPDLay->Raytrace();
450 //
451 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
012f0f4c 452 c5 = new TCanvas("C5","ITS SPD Sector Geometry End View",500,500);
db486a6e 453 SPDLay->Draw();
454 TView *view2 = c5->GetView();
455 if(view2){
456 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
457 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 458 if(ISetits(4,-1)==0) view2->SetParallel();
db486a6e 459 else view2->SetPerspective();
460 view2->Top();
461 if(ISetits(3,-1)!=0) view2->ShowAxis();
462 } // end if view2
463 if(ISetits(5,-1)==1) SPDLay->Raytrace();
464 //
465}
466//----------------------------------------------------------------------
54c9a3d9 467void PrintSPDSectorData(){
468 // Print SPD Sector Data
469 // Inputs:
470 // none.
471 // Outputs:
472 // none.
473 // Retrurn:
474 // none.
475 Int_t irr,i;
476 //
477 TGeoManager *mgr2 = gGeoManager;
478 TGeoXtru * sA0;
57aa7862 479 TGeoVolume *vA0=0;
54c9a3d9 480
481 //mgr2->PushPath();
482 //mgr2->cd("ITSSPDCarbonFiberSupportSectorA0_1");
483 vA0 = mgr2->FindVolumeFast("ITSSPDCarbonFiberSupportSectorA0");
484 sA0 = (TGeoXtru*) vA0->GetShape();
485 irr = sA0->GetNvert();
486 Double_t x,y;
487 cout <<endl;
488 cout <<"2 3 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 "<<irr;
489 for(i=0;i<irr;i++){
490 x = sA0->GetX(i)+2.5;
491 y = sA0->GetY(i)+2.5;
492 if(!(i%6)) { cout << endl; cout <<" ";}
493 cout<<" "<<TMath::Nint(x*450.)<<" "<<TMath::Nint(y*450);
494 //cout<<" "<<x<<" "<<y;
495 } // end for i
496 x = sA0->GetX(0)+2.5;
497 y = sA0->GetY(0)+2.5;
498 if(!(i%6)) { cout << endl; cout <<" ";}
499 cout<<" "<<TMath::Nint(x*450.)<<" "<<TMath::Nint(y*450);
500 //cout<<" "<<x<<" "<<y;
501 cout << endl;
502 //
503}
504//----------------------------------------------------------------------
012f0f4c 505void EngineeringSPDCenter(){
506 // Display SPD Centeral Geometry
507 // Inputs:
508 // none.
509 // Outputs:
510 // none.
511 // Retrurn:
512 // none.
513 Int_t irr;
514 //
515 TGeoManager *mgr2 = gGeoManager;
516 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 517 TCanvas *c4=0, *c5=0;
012f0f4c 518 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
519 c4 = new TCanvas("C4","ITS SPD Layer Geometry Side View",500,500);
54c9a3d9 520 TGeoVolume *ITS,*ITSSPD,*SPDLay=0;
012f0f4c 521 TGeoNode *node;
012f0f4c 522 //
523 node = ALIC->FindNode("ITSV_1");
524 ITS = node->GetVolume();
54c9a3d9 525 node = ITS->FindNode("ITSSPD_1");
526 ITSSPD = node->GetVolume();
012f0f4c 527 //
528 mgr2->SetNsegments(ISetits(1,-1));
529 //
530 mgr2->SetVisLevel(6);
531 mgr2->SetVisOption(0);
532 //mgr2->CheckOverlaps(0.01);
533 //mgr2->PrintOverlaps();
534 if(ISetits(2,-1)==1){
535 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
536 mgr2->SetClippingShape(clip);
537 } // end if
538 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
539 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
540 //
54c9a3d9 541 ITSSPD->Draw();
012f0f4c 542 TView *view1 = c4->GetView();
543 if(view1){
544 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
545 if(irr) cout <<"error="<<irr<<endl;
546 if(ISetits(4,-1)==0) view1->SetParallel();
547 else view1->SetPerspective();
548 view1->Front();
549 if(ISetits(3,-1)!=0) view1->ShowAxis();
550 } // end if view1
551 if(ISetits(5,-1)==1) SPDLay->Raytrace();
552 //
553 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
554 c5 = new TCanvas("C5","ITS SPD Centeral Geometry End View",500,500);
54c9a3d9 555 ITSSPD->Draw();
012f0f4c 556 TView *view2 = c5->GetView();
557 if(view2){
558 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
559 if(irr) cout <<"error="<<irr<<endl;
560 if(ISetits(4,-1)==0) view2->SetParallel();
561 else view2->SetPerspective();
562 view2->Top();
563 if(ISetits(3,-1)!=0) view2->ShowAxis();
564 } // end if view2
54c9a3d9 565 if(ISetits(5,-1)==1) ITSSPD->Raytrace();
012f0f4c 566 //
567}
568//----------------------------------------------------------------------
4830bf84 569void EngineeringSPDThS(){
57aa7862 570 // Display SPD Thermal Shield Geometry
4830bf84 571 // Inputs:
572 // none.
573 // Outputs:
574 // none.
575 // Retrurn:
576 // none.
577 Int_t irr;
578 //
579 TGeoManager *mgr2 = gGeoManager;
580 TGeoVolume *ALIC = mgr2->GetTopVolume();
581 TCanvas *c4;
582 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
583 c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
584 c4->Divide(2,1);
585 TGeoVolume *ITS,*SPDThS=0;
586 TGeoNode *node;
4830bf84 587 //
588 node = ALIC->FindNode("ITSV_1");
589 ITS = node->GetVolume();
57aa7862 590 node = ITS->FindNode("ITSspdThermalShield_1");
4830bf84 591 SPDThS = node->GetVolume();
592 //
593 mgr2->SetNsegments(ISetits(1,-1));
594 //
595 mgr2->SetVisLevel(6);
596 mgr2->SetVisOption(0);
597 //mgr2->CheckOverlaps(0.01);
598 //mgr2->PrintOverlaps();
d5219d0d 599 if(ISetits(2,-1)==1){
600 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
601 mgr2->SetClippingShape(clip);
602 } // end if
4830bf84 603 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
604 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
605 //
606 c4->cd(1);
607 SPDThS->Draw();
57aa7862 608 TPad *p1 = (TPad*)c4->GetPad(1);
4830bf84 609 TView *view1 = p1->GetView();
610 if(view1){
611 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
612 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 613 if(ISetits(4,-1)==0) view1->SetParallel();
4830bf84 614 else view1->SetPerspective();
615 view1->Front();
616 if(ISetits(3,-1)!=0) view1->ShowAxis();
617 } // end if view1
d5219d0d 618 if(ISetits(5,-1)==1) SPDThS->Raytrace();
4830bf84 619 //
620 c4->cd(2);
621 SPDThS->Draw();
57aa7862 622 TPad *p2 = (TPad*)c4->GetPad(2);
4830bf84 623 TView *view2 = p2->GetView();
624 if(view2){
625 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
626 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 627 if(ISetits(4,-1)==0) view2->SetParallel();
4830bf84 628 else view2->SetPerspective();
629 view2->Top();
630 if(ISetits(3,-1)!=0) view2->ShowAxis();
631 } // end if view2
d5219d0d 632 if(ISetits(5,-1)==1) SPDThS->Raytrace();
4830bf84 633 //
634}
635//----------------------------------------------------------------------
db486a6e 636void EngineeringSDDLayer3(){
637 // Display SDD Layer 3 Geometry
638 // Inputs:
639 // none.
640 // Outputs:
641 // none.
642 // Retrurn:
643 // none.
644 Int_t irr;
645 //
646 TGeoManager *mgr2 = gGeoManager;
647 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 648 TCanvas *c4=0, *c5=0;
db486a6e 649 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
650 c4 = new TCanvas("C4","ITS SDD Layer 3 Geometry Side View",500,500);
651 TGeoVolume *ITS,*SDDLay3=0;
652 TGeoNode *node;
db486a6e 653 //
654 node = ALIC->FindNode("ITSV_1");
655 ITS = node->GetVolume();
656 node = ITS->FindNode("ITSsddLayer3_1");
657 SDDLay3 = node->GetVolume();
658 //
659 mgr2->SetNsegments(ISetits(1,-1));
660 //
661 mgr2->SetVisLevel(6);
662 mgr2->SetVisOption(0);
663 //mgr2->CheckOverlaps(0.01);
664 //mgr2->PrintOverlaps();
665 if(ISetits(2,-1)==1){
666 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
667 mgr2->SetClippingShape(clip);
668 } // end if
669 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
670 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
671 //
672 SDDLay3->Draw();
673 TView *view1 = c4->GetView();
674 if(view1){
675 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
676 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 677 if(ISetits(4,-1)==0) view1->SetParallel();
db486a6e 678 else view1->SetPerspective();
679 view1->Front();
680 if(ISetits(3,-1)!=0) view1->ShowAxis();
681 } // end if view1
682 if(ISetits(5,-1)==1) SDDLay3->Raytrace();
683 //
684 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
685 c5 = new TCanvas("C5","ITS SDD Layer 3 Geometry End View",500,500);
686 SDDLay3->Draw();
687 TView *view2 = c5->GetView();
688 if(view2){
689 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
690 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 691 if(ISetits(4,-1)==0) view2->SetParallel();
db486a6e 692 else view2->SetPerspective();
693 view2->Top();
694 if(ISetits(3,-1)!=0) view2->ShowAxis();
695 } // end if view2
696 if(ISetits(5,-1)==1) SDDLay3->Raytrace();
697 //
698}
699//----------------------------------------------------------------------
700void EngineeringSDDLayer4(){
701 // Display SDD Layer 4 Geometry
702 // Inputs:
703 // none.
704 // Outputs:
705 // none.
706 // Retrurn:
707 // none.
708 Int_t irr;
709 //
710 TGeoManager *mgr2 = gGeoManager;
711 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 712 TCanvas *c4=0, *c5=0;
db486a6e 713 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
714 c4 = new TCanvas("C4","ITS SDD Layer 4 Geometry Side View",500,500);
715 TGeoVolume *ITS,*SDDLay4=0;
716 TGeoNode *node;
db486a6e 717 //
718 node = ALIC->FindNode("ITSV_1");
719 ITS = node->GetVolume();
720 node = ITS->FindNode("ITSsddLayer4_1");
721 SDDLay4 = node->GetVolume();
722 //
723 mgr2->SetNsegments(ISetits(1,-1));
724 //
725 mgr2->SetVisLevel(6);
726 mgr2->SetVisOption(0);
727 //mgr2->CheckOverlaps(0.01);
728 //mgr2->PrintOverlaps();
729 if(ISetits(2,-1)==1){
730 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
731 mgr2->SetClippingShape(clip);
732 } // end if
733 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
734 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
735 //
736 SDDLay4->Draw();
737 TView *view1 = c4->GetView();
738 if(view1){
739 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
740 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 741 if(ISetits(4,-1)==0) view1->SetParallel();
db486a6e 742 else view1->SetPerspective();
743 view1->Front();
744 if(ISetits(3,-1)!=0) view1->ShowAxis();
745 } // end if view1
746 if(ISetits(5,-1)==1) SDDLay4->Raytrace();
747 //
748 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
749 c5 = new TCanvas("C5","ITS SDD Layer 4 Geometry End View",500,500);
750 SDDLay4->Draw();
751 TView *view2 = c5->GetView();
752 if(view2){
753 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
754 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 755 if(ISetits(4,-1)==0) view2->SetParallel();
db486a6e 756 else view2->SetPerspective();
757 view2->Top();
758 if(ISetits(3,-1)!=0) view2->ShowAxis();
759 } // end if view2
760 if(ISetits(5,-1)==1) SDDLay4->Raytrace();
761 //
762}
763//----------------------------------------------------------------------
d1a22f9a 764void EngineeringSDDCone(){
765 // Display SDD Cone Geometry
766 // Inputs:
767 // none.
768 // Outputs:
769 // none.
770 // Retrurn:
771 // none.
772 Int_t irr;
773 //
774 TGeoManager *mgr2 = gGeoManager;
775 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 776 TCanvas *c2=0;
d1a22f9a 777 if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
778 c2 = new TCanvas("C2","ITS SDD Cone Geometry",900,450);
779 c2->Divide(2,1);
780 TGeoVolume *ITS,*SDD=0;
781 TGeoNode *node;
782 //
783 node = ALIC->FindNode("ITSV_1");
784 ITS = node->GetVolume();
57aa7862 785 node = ITS->FindNode("SDDCarbonFiberCone_1");
d1a22f9a 786 SDD = node->GetVolume();
787 //
788 mgr2->SetNsegments(ISetits(1,-1));
789 //
790 mgr2->SetVisLevel(6);
791 mgr2->SetVisOption(0);
792 //mgr2->CheckOverlaps(0.01);
793 //mgr2->PrintOverlaps();
d5219d0d 794 if(ISetits(2,-1)==1){
795 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
796 mgr2->SetClippingShape(clip);
797 } // end if
d1a22f9a 798 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
799 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
800 //
801 c2->cd(1);
802 SDD->Draw();
57aa7862 803 TPad *p1 = (TPad*)c2->GetPad(1);
d1a22f9a 804 TView *view1 = p1->GetView();
805 if(view1){
806 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
807 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 808 if(ISetits(4,-1)==0) view1->SetParallel();
d1a22f9a 809 else view1->SetPerspective();
810 view1->Front();
811 if(ISetits(3,-1)!=0) view1->ShowAxis();
812 } // end if view1
d5219d0d 813 if(ISetits(5,-1)==1) SDD->Raytrace();
d1a22f9a 814 //
815 c2->cd(2);
816 SDD->Draw();
57aa7862 817 TPad *p2 = (TPad*)c2->GetPad(2);
d1a22f9a 818 TView *view2 = p2->GetView();
819 if(view2){
820 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
821 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 822 if(ISetits(4,-1)==0) view2->SetParallel();
d1a22f9a 823 else view2->SetPerspective();
824 view2->Top();
825 if(ISetits(3,-1)!=0) view2->ShowAxis();
826 } // end if view1
d5219d0d 827 if(ISetits(5,-1)==1) SDD->Raytrace();
d1a22f9a 828 //
829}
830//----------------------------------------------------------------------
831void EngineeringSDDCylinder(){
832 // Display SDD Cylinder Geometry
833 // Inputs:
834 // none.
835 // Outputs:
836 // none.
837 // Retrurn:
838 // none.
839 Int_t irr;
840 //
841 TGeoManager *mgr2 = gGeoManager;
842 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 843 TCanvas *c3=0;
d1a22f9a 844 if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
845 c3 = new TCanvas("C3","ITS SDD Cylinder Geometry",900,450);
846 c3->Divide(2,1);
847 TGeoVolume *ITS,*SDD=0;
848 TGeoNode *node;
57aa7862 849// TArrow *arrow=new TArrow();
d1a22f9a 850 //
851 node = ALIC->FindNode("ITSV_1");
852 ITS = node->GetVolume();
57aa7862 853 node = ITS->FindNode("SDDCarbonFiberCylinder_1");
d1a22f9a 854 SDD = node->GetVolume();
57aa7862 855// Double_t Rmin = ((TGeoTube*)(SDD->GetShape()))->GetRmin();
856// Double_t Rmax = ((TGeoTube*)(SDD->GetShape()))->GetRmax();
857// Double_t Dz = ((TGeoTube*)(SDD->GetShape()))->GetDz();
d1a22f9a 858 //
859 mgr2->SetNsegments(ISetits(1,-1));
860 //
861 mgr2->SetVisLevel(6);
862 mgr2->SetVisOption(0);
863 //mgr2->CheckOverlaps(0.01);
864 //mgr2->PrintOverlaps();
d5219d0d 865 if(ISetits(2,-1)==1){
866 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
867 mgr2->SetClippingShape(clip);
868 } // end if
d1a22f9a 869 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
870 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
871 //
872 c3->cd(1);
873 SDD->Draw();
57aa7862 874 TPad *p1 = (TPad*)c3->GetPad(1);
d1a22f9a 875 TView *view1 = p1->GetView();
876 if(view1){
877 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
878 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 879 if(ISetits(4,-1)==0) view1->SetParallel();
d1a22f9a 880 else view1->SetPerspective();
881 view1->Front();
882 if(ISetits(3,-1)!=0) view1->ShowAxis();
883 } // end if view1
d5219d0d 884 if(ISetits(5,-1)==1) SDD->Raytrace();
885 //arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
d1a22f9a 886 //
887 c3->cd(2);
888 SDD->Draw();
57aa7862 889 TPad *p2 = (TPad*)c3->GetPad(2);
d1a22f9a 890 TView *view2 = p2->GetView();
891 if(view2){
892 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
893 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 894 if(ISetits(4,-1)==0) view2->SetParallel();
d1a22f9a 895 else view2->SetPerspective();
896 view2->Top();
897 if(ISetits(3,-1)!=0) view2->ShowAxis();
898 } // end if view2
d5219d0d 899 if(ISetits(5,-1)==1) SDD->Raytrace();
900 //arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
901 //Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
902 //arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
903 //
904}
905//----------------------------------------------------------------------
57aa7862 906void EngineeringSSDLayer5(){
907 // Display SSD Layer 5 Geometry
908 // Inputs:
909 // none.
910 // Outputs:
911 // none.
912 // Retrurn:
913 // none.
914 Int_t irr;
915 //
916 TGeoManager *mgr2 = gGeoManager;
917 TGeoVolume *ALIC = mgr2->GetTopVolume();
918 TCanvas *c4=0, *c5=0;
919 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
920 c4 = new TCanvas("C4","ITS SDD Layer 5 Geometry Side View",500,500);
921 TGeoVolume *ITS,*SDDLay5=0;
922 TGeoNode *node;
923 //
924 node = ALIC->FindNode("ITSV_1");
925 ITS = node->GetVolume();
926 node = ITS->FindNode("ITSssdLayer5_1");
927 SDDLay5 = node->GetVolume();
928 //
929 mgr2->SetNsegments(ISetits(1,-1));
930 //
931 mgr2->SetVisLevel(6);
932 mgr2->SetVisOption(0);
933 //mgr2->CheckOverlaps(0.01);
934 //mgr2->PrintOverlaps();
935 if(ISetits(2,-1)==1){
936 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
937 mgr2->SetClippingShape(clip);
938 } // end if
939 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
940 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
941 //
942 SDDLay5->Draw();
943 TView *view1 = c4->GetView();
944 if(view1){
945 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
946 if(irr) cout <<"error="<<irr<<endl;
947 if(ISetits(4,-1)==0) view1->SetParallel();
948 else view1->SetPerspective();
949 view1->Front();
950 if(ISetits(3,-1)!=0) view1->ShowAxis();
951 } // end if view1
952 if(ISetits(5,-1)==1) SDDLay5->Raytrace();
953 //
954 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
955 c5 = new TCanvas("C5","ITS SDD Layer 5 Geometry End View",500,500);
956 SDDLay5->Draw();
957 TView *view2 = c5->GetView();
958 if(view2){
959 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
960 if(irr) cout <<"error="<<irr<<endl;
961 if(ISetits(4,-1)==0) view2->SetParallel();
962 else view2->SetPerspective();
963 view2->Top();
964 if(ISetits(3,-1)!=0) view2->ShowAxis();
965 } // end if view2
966 if(ISetits(5,-1)==1) SDDLay5->Raytrace();
967 //
968}
969//----------------------------------------------------------------------
970void EngineeringSSDLayer6(){
971 // Display SSD Layer 6 Geometry
972 // Inputs:
973 // none.
974 // Outputs:
975 // none.
976 // Retrurn:
977 // none.
978 Int_t irr;
979 //
980 TGeoManager *mgr2 = gGeoManager;
981 TGeoVolume *ALIC = mgr2->GetTopVolume();
982 TCanvas *c4=0, *c5=0;
983 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
984 c4 = new TCanvas("C4","ITS SDD Layer 6 Geometry Side View",500,500);
985 TGeoVolume *ITS,*SDDLay6=0;
986 TGeoNode *node;
987 //
988 node = ALIC->FindNode("ITSV_1");
989 ITS = node->GetVolume();
990 node = ITS->FindNode("ITSssdLayer6_1");
991 SDDLay6 = node->GetVolume();
992 //
993 mgr2->SetNsegments(ISetits(1,-1));
994 //
995 mgr2->SetVisLevel(6);
996 mgr2->SetVisOption(0);
997 //mgr2->CheckOverlaps(0.01);
998 //mgr2->PrintOverlaps();
999 if(ISetits(2,-1)==1){
1000 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1001 mgr2->SetClippingShape(clip);
1002 } // end if
1003 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1004 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1005 //
1006 SDDLay6->Draw();
1007 TView *view1 = c4->GetView();
1008 if(view1){
1009 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1010 if(irr) cout <<"error="<<irr<<endl;
1011 if(ISetits(4,-1)==0) view1->SetParallel();
1012 else view1->SetPerspective();
1013 view1->Front();
1014 if(ISetits(3,-1)!=0) view1->ShowAxis();
1015 } // end if view1
1016 if(ISetits(5,-1)==1) SDDLay6->Raytrace();
1017 //
1018 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
1019 c5 = new TCanvas("C5","ITS SDD Layer 6 Geometry End View",500,500);
1020 SDDLay6->Draw();
1021 TView *view2 = c5->GetView();
1022 if(view2){
1023 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1024 if(irr) cout <<"error="<<irr<<endl;
1025 if(ISetits(4,-1)==0) view2->SetParallel();
1026 else view2->SetPerspective();
1027 view2->Top();
1028 if(ISetits(3,-1)!=0) view2->ShowAxis();
1029 } // end if view2
1030 if(ISetits(5,-1)==1) SDDLay6->Raytrace();
1031 //
1032}
1033//----------------------------------------------------------------------
d5219d0d 1034void EngineeringSSDCone(){
1035 // Display SSD Cone Geometry
1036 // Inputs:
1037 // none.
1038 // Outputs:
1039 // none.
1040 // Retrurn:
1041 // none.
1042 Int_t irr;
1043 //
1044 TGeoManager *mgr2 = gGeoManager;
1045 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 1046 TCanvas *c2=0;
d5219d0d 1047 if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
1048 c2 = new TCanvas("C2","ITS SSD Cone Geometry",900,450);
1049 c2->Divide(2,1);
1050 TGeoVolume *ITS,*SSD=0;
1051 TGeoNode *node;
1052 //
1053 node = ALIC->FindNode("ITSV_1");
1054 ITS = node->GetVolume();
57aa7862 1055 node = ITS->FindNode("ITSssdCone_1");
d5219d0d 1056 SSD = node->GetVolume();
1057 //
1058 mgr2->SetNsegments(ISetits(1,-1));
1059 //
1060 mgr2->SetVisLevel(6);
1061 mgr2->SetVisOption(0);
1062 //mgr2->CheckOverlaps(0.01);
1063 //mgr2->PrintOverlaps();
1064 if(ISetits(2,-1)==1){
1065 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1066 mgr2->SetClippingShape(clip);
1067 } // end if
1068 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1069 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1070 //
1071 c2->cd(1);
1072 SSD->Draw();
57aa7862 1073 TPad *p1 = (TPad*)c2->GetPad(1);
d5219d0d 1074 TView *view1 = p1->GetView();
1075 if(view1){
1076 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1077 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1078 if(ISetits(4,-1)==0) view1->SetParallel();
d5219d0d 1079 else view1->SetPerspective();
1080 view1->Top();
1081 if(ISetits(3,-1)!=0) view1->ShowAxis();
1082 } // end if view1
1083 if(ISetits(5,-1)==1) SSD->Raytrace();
1084 //
1085 c2->cd(2);
1086 SSD->Draw();
57aa7862 1087 TPad *p2 = (TPad*)c2->GetPad(2);
d5219d0d 1088 TView *view2 = p2->GetView();
1089 if(view2){
1090 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1091 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1092 if(ISetits(4,-1)==0) view2->SetParallel();
d5219d0d 1093 else view2->SetPerspective();
1094 view2->Front();
1095 if(ISetits(3,-1)!=0) view2->ShowAxis();
1096 } // end if view1
1097 if(ISetits(5,-1)==1) SSD->Raytrace();
1098 //
1099}
1100//----------------------------------------------------------------------
1101void EngineeringSSDCylinder(){
1102 // Display SSD Cylinder Geometry
1103 // Inputs:
1104 // none.
1105 // Outputs:
1106 // none.
1107 // Retrurn:
1108 // none.
1109 Int_t irr;
1110 //
1111 TGeoManager *mgr2 = gGeoManager;
1112 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 1113 TCanvas *c3=0;
d5219d0d 1114 if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
1115 c3 = new TCanvas("C3","ITS SSD Cylinder Geometry",900,450);
1116 c3->Divide(2,1);
1117 TGeoVolume *ITS,*SSD=0;
1118 TGeoNode *node;
57aa7862 1119// TArrow *arrow=new TArrow();
d5219d0d 1120 //
1121 node = ALIC->FindNode("ITSV_1");
1122 ITS = node->GetVolume();
57aa7862 1123 node = ITS->FindNode("SSDexternalcylinder_1");
d5219d0d 1124 SSD = node->GetVolume();
db486a6e 1125 //Double_t Rmin = ((TGeoPcon*)(SSD->GetShape()))->GetRmin();
1126 //Double_t Rmax = ((TGeoPcon*)(SSD->GetShape()))->GetRmax();
1127 //Double_t Dz = ((TGeoPcon*)(SSD->GetShape()))->GetDz();
d5219d0d 1128 //
1129 mgr2->SetNsegments(ISetits(1,-1));
1130 //
1131 mgr2->SetVisLevel(6);
1132 mgr2->SetVisOption(0);
1133 //mgr2->CheckOverlaps(0.01);
1134 //mgr2->PrintOverlaps();
1135 if(ISetits(2,-1)==1){
1136 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1137 mgr2->SetClippingShape(clip);
1138 } // end if
1139 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1140 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1141 //
1142 c3->cd(1);
1143 SSD->Draw();
57aa7862 1144 TPad *p1 = (TPad*)c3->GetPad(1);
d5219d0d 1145 TView *view1 = p1->GetView();
1146 if(view1){
1147 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1148 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1149 if(ISetits(4,-1)==0) view1->SetParallel();
d5219d0d 1150 else view1->SetPerspective();
1151 view1->Front();
1152 if(ISetits(3,-1)!=0) view1->ShowAxis();
1153 } // end if view1
1154 if(ISetits(5,-1)==1) SSD->Raytrace();
1155 //arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
1156 //
1157 c3->cd(2);
1158 SSD->Draw();
57aa7862 1159 TPad *p2 = (TPad*)c3->GetPad(2);
d5219d0d 1160 TView *view2 = p2->GetView();
1161 if(view2){
1162 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1163 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1164 if(ISetits(4,-1)==0) view2->SetParallel();
d5219d0d 1165 else view2->SetPerspective();
1166 view2->Top();
1167 if(ISetits(3,-1)!=0) view2->ShowAxis();
1168 } // end if view2
1169 if(ISetits(5,-1)==1) SSD->Raytrace();
1170 //arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
1171 //Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
1172 //arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
d1a22f9a 1173 //
1174}
1175//----------------------------------------------------------------------
1176void EngineeringSupRB24(){
d5219d0d 1177 // Display RB 24 side cable tray support structure Geometry
d1a22f9a 1178 // Inputs:
1179 // none.
1180 // Outputs:
1181 // none.
1182 // Retrurn:
1183 // none.
1184 Int_t irr;
1185 //
1186 TGeoManager *mgr2 = gGeoManager;
1187 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 1188 TCanvas *c4=0;
d1a22f9a 1189 if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
1190 c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
1191 c4->Divide(2,1);
1192 TGeoVolume *ITS,*SUPRB24=0;
1193 TGeoNode *node;
d1a22f9a 1194 //
1195 node = ALIC->FindNode("ITSV_1");
1196 ITS = node->GetVolume();
1197 node = ITS->FindNode("ITSsupFrameM24_1");
1198 SUPRB24 = node->GetVolume();
1199 //
1200 mgr2->SetNsegments(ISetits(1,-1));
1201 //
1202 mgr2->SetVisLevel(6);
1203 mgr2->SetVisOption(0);
1204 //mgr2->CheckOverlaps(0.01);
1205 //mgr2->PrintOverlaps();
d5219d0d 1206 if(ISetits(2,-1)==1){
1207 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1208 mgr2->SetClippingShape(clip);
1209 } // end if
d1a22f9a 1210 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1211 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1212 //
1213 c4->cd(1);
1214 SUPRB24->Draw();
57aa7862 1215 TPad *p1 = (TPad*)c4->GetPad(1);
d1a22f9a 1216 TView *view1 = p1->GetView();
1217 if(view1){
1218 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1219 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1220 if(ISetits(4,-1)==0) view1->SetParallel();
d1a22f9a 1221 else view1->SetPerspective();
1222 view1->Front();
1223 if(ISetits(3,-1)!=0) view1->ShowAxis();
1224 } // end if view1
d5219d0d 1225 if(ISetits(5,-1)==1) SUPRB24->Raytrace();
d1a22f9a 1226 //
1227 c4->cd(2);
1228 SUPRB24->Draw();
57aa7862 1229 TPad *p2 = (TPad*)c4->GetPad(2);
d1a22f9a 1230 TView *view2 = p2->GetView();
1231 if(view2){
1232 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1233 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1234 if(ISetits(4,-1)==0) view2->SetParallel();
d1a22f9a 1235 else view2->SetPerspective();
1236 view2->Top();
1237 if(ISetits(3,-1)!=0) view2->ShowAxis();
1238 } // end if view2
d5219d0d 1239 if(ISetits(5,-1)==1) SUPRB24->Raytrace();
d1a22f9a 1240 //
1241}
db486a6e 1242//----------------------------------------------------------------------
1243void EngineeringSupTrayRB24(){
1244 // Display RB 24 side cable tray support structure Geometry
1245 // Inputs:
1246 // none.
1247 // Outputs:
1248 // none.
1249 // Retrurn:
1250 // none.
1251 Int_t irr;
1252 //
1253 TGeoManager *mgr2 = gGeoManager;
1254 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 1255 TCanvas *c4=0,*c5=0;
db486a6e 1256 //if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
1257 c4 = new TCanvas("C4","ITS RB24 Cable Trays and Patch Pannels",500,500);
1258 //c4->Divide(2,1);
1259 TGeoVolume *ITS,*SUPRB24=0;
1260 TGeoNode *node;
db486a6e 1261 //
1262 node = ALIC->FindNode("ITSV_1");
1263 ITS = node->GetVolume();
1264 node = ITS->FindNode("ITSsupCableTrayMotherMT24_1");
1265 SUPRB24 = node->GetVolume();
1266 //
1267 mgr2->SetNsegments(ISetits(1,-1));
1268 //
1269 mgr2->SetVisLevel(6);
1270 mgr2->SetVisOption(0);
1271 //mgr2->CheckOverlaps(0.01);
1272 //mgr2->PrintOverlaps();
1273 if(ISetits(2,-1)==1){
1274 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1275 mgr2->SetClippingShape(clip);
1276 } // end if
1277 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1278 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1279 //
1280 c4->cd(1);
1281 SUPRB24->Draw();
1282 //TPad *p1 = c4->GetPad(1);
1283 //TView *view1 = p1->GetView();
1284 TView *view1 = c4->GetView();
1285 if(view1){
1286 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1287 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1288 if(ISetits(4,-1)==0) view1->SetParallel();
db486a6e 1289 else view1->SetPerspective();
1290 view1->Front();
1291 if(ISetits(3,-1)!=0) view1->ShowAxis();
1292 } // end if view1
1293 if(ISetits(5,-1)==1) SUPRB24->Raytrace();
1294 //
1295 //c4->cd(2);
1296 c5 = new TCanvas("C5","ITS RB24 Cable Trays and Patch Pannels",500,500);
1297 c5->cd(1);
1298 SUPRB24->Draw();
1299 //TPad *p2 = c5->GetPad(1);
1300 //TView *view2 = p2->GetView();
1301 TView *view2 = c5->GetView();
1302 if(view2){
1303 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1304 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1305 if(ISetits(4,-1)==0) view2->SetParallel();
db486a6e 1306 else view2->SetPerspective();
1307 view2->Top();
1308 if(ISetits(3,-1)!=0) view2->ShowAxis();
1309 } // end if view2
1310 if(ISetits(5,-1)==1) SUPRB24->Raytrace();
1311 //
1312}
d1a22f9a 1313//----------------------------------------------------------------------
1314void EngineeringSupRB26(){
d5219d0d 1315 // Display RB 26 side cable tray support structure
d1a22f9a 1316 // Inputs:
1317 // none.
1318 // Outputs:
1319 // none.
1320 // Retrurn:
1321 // none.
1322 Int_t irr;
1323 //
1324 TGeoManager *mgr2 = gGeoManager;
1325 TGeoVolume *ALIC = mgr2->GetTopVolume();
57aa7862 1326 TCanvas *c5=0;
d1a22f9a 1327 if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
1328 c5 = new TCanvas("C5","ITS SDD Cylinder Geometry",900,450);
1329 c5->Divide(2,1);
1330 TGeoVolume *ITS,*SUPRB26=0;
1331 TGeoNode *node;
d1a22f9a 1332 //
1333 node = ALIC->FindNode("ITSV_1");
1334 ITS = node->GetVolume();
1335 node = ITS->FindNode("ITSsupFrameM26_1");
1336 SUPRB26 = node->GetVolume();
1337 //
1338 mgr2->SetNsegments(ISetits(1,-1));
1339 //
1340 mgr2->SetVisLevel(6);
1341 mgr2->SetVisOption(0);
1342 //mgr2->CheckOverlaps(0.01);
1343 //mgr2->PrintOverlaps();
d5219d0d 1344 if(ISetits(2,-1)==1){
1345 TGeoShape *clip = new TGeoTubeSeg(0, 1000, 2000, 45, 90);
1346 mgr2->SetClippingShape(clip);
1347 } // end if
d1a22f9a 1348 mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1349 if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
1350 //
1351 c5->cd(1);
1352 SUPRB26->Draw();
57aa7862 1353 TPad *p1 = (TPad*)c5->GetPad(1);
d1a22f9a 1354 TView *view1 = p1->GetView();
1355 if(view1){
1356 view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1357 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1358 if(ISetits(4,-1)==0) view1->SetParallel();
d1a22f9a 1359 else view1->SetPerspective();
1360 view1->Front();
1361 if(ISetits(3,-1)!=0) view1->ShowAxis();
1362 } // end if view1
d5219d0d 1363 if(ISetits(5,-1)==1) SUPRB26->Raytrace();
d1a22f9a 1364 //
1365 c5->cd(2);
1366 SUPRB26->Draw();
57aa7862 1367 TPad *p2 = (TPad*)c5->GetPad(2);
d1a22f9a 1368 TView *view2 = p2->GetView();
1369 if(view2){
1370 view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
1371 if(irr) cout <<"error="<<irr<<endl;
012f0f4c 1372 if(ISetits(4,-1)==0) view2->SetParallel();
d1a22f9a 1373 else view2->SetPerspective();
1374 view2->Top();
1375 if(ISetits(3,-1)!=0) view2->ShowAxis();
1376 } // end if view2
d5219d0d 1377 if(ISetits(5,-1)==1) SUPRB26->Raytrace();
d1a22f9a 1378 //
57aa7862 1379}
1380
1381// Local functions to replace "regular" ones not available
1382// in the environment where the macro runs
1383
1384//______________________________________________________________________
1385void CreateMaterialsITS(){
1386 // Create ITS materials
1387 // This function defines the default materials used in the Geant
1388 // Monte Carlo simulations for the geometries AliITSv1, AliITSv3,
1389 // AliITSv11Hybrid.
1390 // In general it is automatically replaced by
1391 // the CreateMaterials routine defined in AliITSv?. Should the function
1392 // CreateMaterials not exist for the geometry version you are using this
1393 // one is used. See the definition found in AliITSv5 or the other routine
1394 // for a complete definition.
1395 // Inputs:
1396 // none.
1397 // Outputs:
1398 // none.
1399 // Return:
1400 // none.
1401
1402 Bool_t fByThick=kTRUE; // Flag to use services materials by thickness
1403 // ture, or mass false.
1404
1405// Int_t ifield = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
1406// Float_t fieldm = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
1407 Int_t ifield = 2;
1408 Float_t fieldm = 10.;
1409
1410 Float_t tmaxfd = 0.1; // 1.0; // Degree
1411 Float_t stemax = 1.0; // cm
1412 Float_t deemax = 0.1; // 30.0; // Fraction of particle's energy 0<deemax<=1
1413 Float_t epsil = 1.0E-4; // 1.0; // cm
1414 Float_t stmin = 0.0; // cm "Default value used"
1415
1416 Float_t tmaxfdSi = 0.1; // .10000E+01; // Degree
1417 Float_t stemaxSi = 0.0075; // .10000E+01; // cm
1418 Float_t deemaxSi = 0.1; // 0.30000E-02; // Fraction of particle's energy 0<deemax<=1
1419 Float_t epsilSi = 1.0E-4;// .10000E+01;
1420 Float_t stminSi = 0.0; // cm "Default value used"
1421
1422 Float_t tmaxfdAir = 0.1; // .10000E+01; // Degree
1423 Float_t stemaxAir = .10000E+01; // cm
1424 Float_t deemaxAir = 0.1; // 0.30000E-02; // Fraction of particle's energy 0<deemax<=1
1425 Float_t epsilAir = 1.0E-4;// .10000E+01;
1426 Float_t stminAir = 0.0; // cm "Default value used"
1427
1428 Float_t tmaxfdServ = 1.0; // 10.0; // Degree
1429 Float_t stemaxServ = 1.0; // 0.01; // cm
1430 Float_t deemaxServ = 0.5; // 0.1; // Fraction of particle's energy 0<deemax<=1
1431 Float_t epsilServ = 1.0E-3; // 0.003; // cm
1432 Float_t stminServ = 0.0; //0.003; // cm "Default value used"
1433
1434 // Freon PerFluorobuthane C4F10 see
1435 // http://st-support-cooling-electronics.web.cern.ch/
1436 // st-support-cooling-electronics/default.htm
1437 Float_t afre[2] = { 12.011,18.9984032 };
1438 Float_t zfre[2] = { 6., 9. };
1439 Float_t wfre[2] = { 4.,10. };
1440 Float_t densfre = 1.52;
1441
1442
1443 //CM55J
1444
1445 Float_t aCM55J[4]={12.0107,14.0067,15.9994,1.00794};
1446 Float_t zCM55J[4]={6.,7.,8.,1.};
1447 Float_t wCM55J[4]={0.908508078,0.010387573,0.055957585,0.025146765};
1448 Float_t dCM55J = 1.8;
1449
1450 //ALCM55J
1451
1452 Float_t aALCM55J[5]={12.0107,14.0067,15.9994,1.00794,26.981538};
1453 Float_t zALCM55J[5]={6.,7.,8.,1.,13.};
1454 Float_t wALCM55J[5]={0.817657902,0.0093488157,0.0503618265,0.0226320885,0.1};
1455 Float_t dALCM55J = 1.9866;
1456
1457 //Si Chips
1458
1459 Float_t aSICHIP[6]={12.0107,14.0067,15.9994,1.00794,28.0855,107.8682};
1460 Float_t zSICHIP[6]={6.,7.,8.,1.,14., 47.};
1461 Float_t wSICHIP[6]={0.039730642,0.001396798,0.01169634,0.004367771,0.844665,0.09814344903};
1462 Float_t dSICHIP = 2.36436;
1463
1464 //Inox
1465
1466 Float_t aINOX[9]={12.0107,54.9380, 28.0855,30.9738,32.066,58.6928,51.9961,95.94,55.845};
1467 Float_t zINOX[9]={6.,25.,14.,15.,16., 28.,24.,42.,26.};
1468 Float_t wINOX[9]={0.0003,0.02,0.01,0.00045,0.0003,0.12,0.17,0.025,0.654};
1469 Float_t dINOX = 8.03;
1470
1471 //SDD HV microcable
1472
1473 Float_t aHVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538};
1474 Float_t zHVm[5]={6.,1.,7.,8.,13.};
1475 Float_t wHVm[5]={0.520088819984,0.01983871336,0.0551367996,0.157399667056, 0.247536};
1476 Float_t dHVm = 1.6087;
1477
1478 //SDD LV+signal cable
1479
1480 Float_t aLVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538};
1481 Float_t zLVm[5]={6.,1.,7.,8.,13.};
1482 Float_t wLVm[5]={0.21722436468,0.0082859922,0.023028867,0.06574077612, 0.68572};
1483 Float_t dLVm = 2.1035;
1484
1485 //SDD hybrid microcab
1486
1487 Float_t aHLVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538};
1488 Float_t zHLVm[5]={6.,1.,7.,8.,13.};
1489 Float_t wHLVm[5]={0.24281879711,0.00926228815,0.02574224025,0.07348667449, 0.64869};
1490 Float_t dHLVm = 2.0502;
1491
1492 //SDD anode microcab
1493
1494 Float_t aALVm[5]={12.0107,1.00794,14.0067,15.9994,26.981538};
1495 Float_t zALVm[5]={6.,1.,7.,8.,13.};
1496 Float_t wALVm[5]={0.392653705471,0.0128595919215,0.041626868025,0.118832707289, 0.431909};
1497 Float_t dALVm = 2.0502;
1498
1499 //X7R capacitors
1500
1501 Float_t aX7R[7]={137.327,47.867,15.9994,58.6928,63.5460,118.710,207.2};
1502 Float_t zX7R[7]={56.,22.,8.,28.,29.,50.,82.};
1503 Float_t wX7R[7]={0.251639432,0.084755042,0.085975822,0.038244751,0.009471271,0.321736471,0.2081768};
1504 Float_t dX7R = 7.14567;
1505
1506 // AIR
1507
1508 Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1509 Float_t zAir[4]={6.,7.,8.,18.};
1510 Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1511 Float_t dAir = 1.20479E-3;
1512
1513 // Water
1514
1515 Float_t aWater[2]={1.00794,15.9994};
1516 Float_t zWater[2]={1.,8.};
1517 Float_t wWater[2]={0.111894,0.888106};
1518 Float_t dWater = 1.0;
1519
1520 // CERAMICS
1521 // 94.4% Al2O3 , 2.8% SiO2 , 2.3% MnO , 0.5% Cr2O3
1522 Float_t acer[5] = { 26.981539,15.9994,28.0855,54.93805,51.9961 };
1523 Float_t zcer[5] = { 13., 8., 14., 25., 24. };
1524 Float_t wcer[5] = {.4443408,.5213375,.0130872,.0178135,.003421};
1525 Float_t denscer = 3.6;
1526
1527 //G10FR4
1528
1529 Float_t zG10FR4[14] = {14.00, 20.00, 13.00, 12.00, 5.00, 22.00, 11.00, 19.00, 26.00, 9.00, 8.00, 6.00, 7.00, 1.00};
1530 Float_t aG10FR4[14] = {28.0855000,40.0780000,26.9815380,24.3050000,10.8110000,47.8670000,22.9897700,39.0983000,55.8450000,18.9984000,15.9994000,12.0107000,14.0067000,1.0079400};
1531 Float_t wG10FR4[14] = {0.15144894,0.08147477,0.04128158,0.00904554,0.01397570,0.00287685,0.00445114,0.00498089,0.00209828,0.00420000,0.36043788,0.27529426,0.01415852,0.03427566};
1532 Float_t densG10FR4= 1.8;
1533
1534 //--- EPOXY --- C18 H19 O3
1535 Float_t aEpoxy[3] = {15.9994, 1.00794, 12.0107} ;
1536 Float_t zEpoxy[3] = { 8., 1., 6.} ;
1537 Float_t wEpoxy[3] = { 3., 19., 18.} ;
1538 Float_t dEpoxy = 1.8 ;
1539
1540 // rohacell: C9 H13 N1 O2
1541 Float_t arohac[4] = {12.01, 1.01, 14.010, 16.};
1542 Float_t zrohac[4] = { 6., 1., 7., 8.};
1543 Float_t wrohac[4] = { 14., 10., 2., 6.};
1544 Float_t drohac = 0.052;
1545
1546 // If he/she means stainless steel (inox) + Aluminium and Zeff=15.3383 then
1547//
1548// %Al=81.6164 %inox=100-%Al
1549
1550 Float_t aInAl[5] = {27., 55.847,51.9961,58.6934,28.0855 };
1551 Float_t zInAl[5] = {13., 26.,24.,28.,14. };
1552 Float_t wInAl[5] = {.816164, .131443,.0330906,.0183836,.000919182};
1553 Float_t dInAl = 3.075;
1554
1555 // Kapton
1556
1557 Float_t aKapton[4]={1.00794,12.0107, 14.010,15.9994};
1558 Float_t zKapton[4]={1.,6.,7.,8.};
1559 Float_t wKapton[4]={0.026362,0.69113,0.07327,0.209235};
1560 Float_t dKapton = 1.42;
1561
1562 // Kapton + Cu (for Pixel Bus)
1563
1564 Float_t aKaptonCu[5]={1.00794, 12.0107, 14.010, 15.9994, 63.5460};
1565 Float_t zKaptonCu[5]={1., 6., 7., 8., 29.};
1566 Float_t wKaptonCuBus[5];
1567
1568 // Kapton + Cu (for Pixel MCM)
1569
1570 Float_t wKaptonCuMCM[5];
1571
1572 // Kapton + Cu (mix of two above)
1573
1574 Float_t wKaptonCuMix[5];
1575
1576 //SDD ruby sph.
1577 Float_t aAlOxide[2] = { 26.981539,15.9994};
1578 Float_t zAlOxide[2] = { 13., 8.};
1579 Float_t wAlOxide[2] = {0.4707, 0.5293};
1580 Float_t dAlOxide = 3.97;
1581
1582 // Silica for optical fibers: Si O2
1583 Float_t aoptfib[2] = { 28.0855, 15.9994};
1584 Float_t zoptfib[2] = { 14., 8. };
1585 Float_t woptfib[2] = { 1., 2. };
1586 Float_t doptfib = 2.55;
1587
1588 // Tetrafluorethylene-Perfluorpropylene (FEP) - 08 Mar 10
1589 Float_t aFEP[2] = { 12.0107, 18.9984};
1590 Float_t zFEP[2] = { 6. , 9. };
1591 Float_t wFEP[2] = { 1. , 2. };
1592 Float_t dFEP = 2.15;
1593
1594 // PVC (C2H3Cl)n - 08 Jul 10
1595 Float_t aPVC[3] = { 12.0107, 1.00794, 35.4527};
1596 Float_t zPVC[3] = { 6. , 1. , 35. };
1597 Float_t wPVC[3] = { 2. , 3. , 1. };
1598 Float_t dPVC = 1.3;
1599
1600 //SSD NiSn capacitor ends
1601 Float_t aNiSn[2] = { 56.6934,118.710};
1602 Float_t zNiSn[2] = { 28., 50.};
1603 Float_t wNiSn[2] = {0.33, 0.67};
1604 Float_t dNiSn = wNiSn[0]*8.908 + wNiSn[1]*7.310;
1605
1606 AliMaterial(1,"SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1607 AliMedium(1,"SI$",1,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1608
1609 AliMaterial(2,"SPD SI CHIP$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1610 AliMedium(2,"SPD SI CHIP$",2,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1611
1612 AliMaterial(3,"SPD SI BUS$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1613 AliMedium(3,"SPD SI BUS$",3,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1614
1615 AliMixture(4,"C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J);
1616 AliMedium(4,"C (M55J)$",4,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1617
1618 AliMixture(5,"AIR$",aAir,zAir,dAir,4,wAir);
1619 AliMedium(5,"AIR$",5,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);
1620
1621 AliMixture(6,"GEN AIR$",aAir,zAir,dAir,4,wAir);
1622 AliMedium(6,"GEN AIR$",6,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);
1623
1624 AliMixture(7,"SDD SI CHIP$",aSICHIP,zSICHIP,dSICHIP,6,wSICHIP);
1625 AliMedium(7,"SDD SI CHIP$",7,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1626
1627 AliMixture(9,"SDD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J);
1628 AliMedium(9,"SDD C (M55J)$",9,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1629
1630 AliMixture(10,"SDD AIR$",aAir,zAir,dAir,4,wAir);
1631 AliMedium(10,"SDD AIR$",10,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);
1632
1633 AliMaterial(11,"AL$",0.26982E+02,0.13000E+02,0.26989E+01,0.89000E+01,0.99900E+03);
1634 AliMedium(11,"AL$",11,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1635
1636 AliMixture(12, "Water$",aWater,zWater,dWater,2,wWater);
1637 AliMedium(12,"WATER$",12,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1638
1639 AliMixture(13,"Freon$",afre,zfre,densfre,-2,wfre);
1640 AliMedium(13,"Freon$",13,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1641
1642 AliMaterial(14,"COPPER$",0.63546E+02,0.29000E+02,0.89600E+01,0.14300E+01,0.99900E+03);
1643 AliMedium(14,"COPPER$",14,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1644 AliMixture(15,"CERAMICS$",acer,zcer,denscer,5,wcer);
1645 AliMedium(15,"CERAMICS$",15,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1646
1647 AliMixture(20,"SSD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J);
1648 AliMedium(20,"SSD C (M55J)$",20,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1649
1650 AliMixture(21,"SSD AIR$",aAir,zAir,dAir,4,wAir);
1651 AliMedium(21,"SSD AIR$",21,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);
1652
1653 AliMixture(25,"G10FR4$",aG10FR4,zG10FR4,densG10FR4,14,wG10FR4);
1654 AliMedium(25,"G10FR4$",25,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1655
1656 AliMixture(26,"GEN C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J);
1657 AliMedium(26,"GEN C (M55J)$",26,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1658
1659 AliMixture(27,"GEN Air$",aAir,zAir,dAir,4,wAir);
1660 AliMedium(27,"GEN Air$",27,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);
1661
1662 AliMixture(47,"PVC$",aPVC,zPVC,dPVC,-3,wPVC);
1663 AliMedium(47,"PVC$",47,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1664
1665 Double_t cuFrac = 0.56;
1666 Double_t kFrac = 1.0 - cuFrac;
1667 Double_t cuDens = 8.96;
1668 Float_t dKaptonCuBus = cuFrac * cuDens + kFrac * dKapton;
1669 for (Int_t j=0; j<4; j++)
1670 wKaptonCuBus[j] = wKapton[j]*kFrac;
1671 wKaptonCuBus[4] = cuFrac;
1672 AliMixture(48, "SPD-BUS CU KAPTON", aKaptonCu, zKaptonCu, dKaptonCuBus, 5, wKaptonCuBus);
1673 AliMedium(48,"SPD-BUS CU KAPTON$",48,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1674
1675 cuFrac = 0.5;
1676 kFrac = 1.0 - cuFrac;
1677 Float_t dKaptonCuMCM = cuFrac * cuDens + kFrac * dKapton;
1678 for (Int_t j=0; j<4; j++)
1679 wKaptonCuMCM[j] = wKapton[j]*kFrac;
1680 wKaptonCuMCM[4] = cuFrac;
1681 AliMixture(49, "SPD-MCM CU KAPTON", aKaptonCu, zKaptonCu, dKaptonCuMCM, 5, wKaptonCuMCM);
1682 AliMedium(49,"SPD-MCM CU KAPTON$",49,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1683
1684 cuFrac = (0.56 + 0.5) / 2.0;
1685 kFrac = 1.0 - cuFrac;
1686 Float_t dKaptonCuMix = cuFrac * cuDens + kFrac * dKapton;
1687 for (Int_t j=0; j<4; j++)
1688 wKaptonCuMix[j] = wKapton[j]*kFrac;
1689 wKaptonCuMix[4] = cuFrac;
1690 AliMixture(50, "SPD-MIX CU KAPTON", aKaptonCu, zKaptonCu, dKaptonCuMix, 5, wKaptonCuMix);
1691 AliMedium(50,"SPD-MIX CU KAPTON$",50,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1692
1693 AliMaterial(51,"SPD SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1694 AliMedium(51,"SPD SI$",51,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1695
1696 AliMaterial(52,"SPD SI CHIP$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1697 AliMedium(52,"SPD SI CHIP$",52,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1698
1699 AliMaterial(53,"SPD SI BUS$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1700 AliMedium(53,"SPD SI BUS$",53,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1701
1702 AliMixture(54,"SPD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J);
1703 AliMedium(54,"SPD C (M55J)$",54,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1704
1705 AliMixture(55,"SPD AIR$",aAir,zAir,dAir,4,wAir);
1706 AliMedium(55,"SPD AIR$",55,0,ifield,fieldm,tmaxfdAir,stemaxAir,deemaxAir,epsilAir,stminAir);
1707
1708 AliMixture(56, "SPD KAPTON(POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton);
1709 AliMedium(56,"SPD KAPTON(POLYCH2)$",56,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1710
1711 // Gaseous Freon has same chemical composition but air density at 1.7 atm
1712 AliMixture(59,"GASEOUS FREON$",afre,zfre,1.7*dAir,-2,wfre);
1713 AliMedium(59,"GASEOUS FREON$",59,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1714
1715 AliMixture(61,"EPOXY$",aEpoxy,zEpoxy,dEpoxy,-3,wEpoxy);
1716 AliMedium(61,"EPOXY$",61,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1717
1718 AliMaterial(62,"SILICON$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1719 AliMedium(62,"SILICON$",62,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi);
1720
1721 AliMixture(63, "KAPTONH(POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton);
1722 AliMedium(63,"KAPTONH(POLYCH2)$",63,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1723
1724 AliMaterial(64,"ALUMINUM$",0.26982E+02,0.13000E+02,0.26989E+01,0.89000E+01,0.99900E+03);
1725 AliMedium(64,"ALUMINUM$",64,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1726
1727 AliMixture(65,"INOX$",aINOX,zINOX,dINOX,9,wINOX);
1728 AliMedium(65,"INOX$",65,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1729
1730 AliMixture(66,"NiSn$",aNiSn,zNiSn,dNiSn,2,wNiSn);
1731 AliMedium(66,"NiSn$",66,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1732
1733 AliMaterial(67,"Sn$", 118.710, 50., 7.310, 1.206, 999.);
1734 AliMedium(67,"Sn$",67,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1735
1736 AliMixture(68,"ROHACELL$",arohac,zrohac,drohac,-4,wrohac);
1737 AliMedium(68,"ROHACELL$",68,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1738
1739 AliMixture(69,"SDD C AL (M55J)$",aALCM55J,zALCM55J,dALCM55J,5,wALCM55J);
1740 AliMedium(69,"SDD C AL (M55J)$",69,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1741
1742 AliMixture(70, "SDDKAPTON (POLYCH2)", aKapton, zKapton, dKapton, 4, wKapton);
1743 AliMedium(70,"SDDKAPTON (POLYCH2)$",70,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1744
1745 AliMaterial(71,"ITS SANDW A$",0.12011E+02,0.60000E+01,0.2115E+00,0.17479E+03,0.99900E+03);
1746 AliMedium(71,"ITS SANDW A$",71,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1747
1748 AliMaterial(72,"ITS SANDW B$",0.12011E+02,0.60000E+01,0.27000E+00,0.18956E+03,0.99900E+03);
1749 AliMedium(72,"ITS SANDW B$",72,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1750
1751 AliMaterial(73,"ITS SANDW C$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03);
1752 AliMedium(73,"ITS SANDW C$",73,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1753
1754 AliMaterial(74,"HEAT COND GLUE$",0.12011E+02,0.60000E+01,0.1930E+01,0.22100E+02,0.99900E+03);
1755 AliMedium(74,"HEAT COND GLUE$",74,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1756
1757 AliMaterial(75,"ELASTO SIL$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1758 AliMedium(75,"ELASTO SIL$",75,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1759
1760 // SPD bus (data from Petra Riedler)
1761 Float_t aSPDbus[5] = {1.00794,12.0107,14.01,15.9994,26.982 };
1762 Float_t zSPDbus[5] = {1.,6.,7.,8.,13.};
1763 Float_t wSPDbus[5] = {0.023523,0.318053,0.009776,0.078057,0.570591};
1764 Float_t dSPDbus = 2.128505;
1765
1766 // AliMaterial(76,"SPDBUS(AL+KPT+EPOX)$",0.19509E+02,0.96502E+01,0.19060E+01,0.15413E+02,0.99900E+03);
1767 AliMixture(76,"SPDBUS(AL+KPT+EPOX)$",aSPDbus,zSPDbus,dSPDbus,5,wSPDbus);
1768 AliMedium(76,"SPDBUS(AL+KPT+EPOX)$",76,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1769
1770 AliMixture(77,"SDD X7R capacitors$",aX7R,zX7R,dX7R,7,wX7R);
1771 AliMedium(77,"SDD X7R capacitors$",77,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1772
1773 AliMixture(78,"SDD ruby sph. Al2O3$",aAlOxide,zAlOxide,dAlOxide,2,wAlOxide);
1774 AliMedium(78,"SDD ruby sph. Al2O3$",78,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1775
1776 AliMaterial(79,"SDD SI insensitive$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03);
1777 AliMedium(79,"SDD SI insensitive$",79,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1778
1779 AliMixture(80,"SDD HV microcable$",aHVm,zHVm,dHVm,5,wHVm);
1780 AliMedium(80,"SDD HV microcable$",80,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1781
1782 AliMixture(81,"SDD LV+signal cable$",aLVm,zLVm,dLVm,5,wLVm);
1783 AliMedium(81,"SDD LV+signal cable$",81,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1784
1785 AliMixture(82,"SDD hybrid microcab$",aHLVm, zHLVm,dHLVm,5,wHLVm);
1786 AliMedium(82,"SDD hybrid microcab$",82,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1787
1788 AliMixture(83,"SDD anode microcab$",aALVm,zALVm,dALVm,5,wALVm);
1789 AliMedium(83,"SDD anode microcab$",83,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1790 Float_t aDSring[4]={12.0107, 1.00794, 14.0067, 15.9994};
1791 Float_t zDSring[4]={ 6., 1., 7., 8.};
1792 Float_t wDSring[4]={ 0.854323888, 0.026408778, 0.023050265, 0.096217069};
1793 Float_t dDSring = 0.2875;
1794 AliMixture(84,"SDD/SSD rings$",aDSring,zDSring,dDSring,4,wDSring);
1795 AliMedium(84,"SDD/SSD rings$",84,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1796
1797 AliMixture(85,"inox/alum$",aInAl,zInAl,dInAl,5,wInAl);
1798 AliMedium(85,"inox/alum$",85,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1799
1800 // special media to take into account services in the SDD and SSD
1801 // cones for the FMD
1802 //Begin_Html
1803 /*
1804 <A HREF="http://www.Physics.ohio-state.edu/~nilsen/ITS/ITS_MatBudget_4B.xls">
1805 </pre>
1806 <br clear=left>
1807 <font size=+2 color=blue>
1808 <p> The Exel spread sheet from which these density number come from.
1809 </font></A>
1810 */
1811 //End_Html
1812
1813 // AliMaterial(86,"AIRFMDSDD$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03);
1814 Float_t aA[13],zZ[13],wW[13],den;
1815 // From Pierluigi Barberis calculations of 2SPD+1SDD October 2 2002.
1816 zZ[0] = 1.0; aA[0] = 1.00794; // Hydrogen
1817 zZ[1] = 6.0; aA[1] = 12.011; // Carbon
1818 zZ[2] = 7.0; aA[2] = 14.00674; // Nitrogen
1819 zZ[3] = 8.0; aA[3] = 15.9994; // Oxigen
1820 zZ[4] = 14.0; aA[4] = 28.0855; // Silicon
1821 zZ[5] = 24.0; aA[5] = 51.9961; //Cromium
1822 zZ[6] = 25.0; aA[6] = 54.938049; // Manganese
1823 zZ[7] = 26.0; aA[7] = 55.845; // Iron
1824 zZ[8] = 28.0; aA[8] = 58.6934; // Nickle
1825 zZ[9] = 29.0; aA[9] = 63.546; // Copper
1826 zZ[10] = 13.0; aA[10] = 26.981539; // Alulminum
1827 zZ[11] = 47.0; aA[11] = 107.8682; // Silver
1828 zZ[12] = 27.0; aA[12] = 58.9332; // Cobolt
1829 wW[0] = 0.019965;
1830 wW[1] = 0.340961;
1831 wW[2] = 0.041225;
1832 wW[3] = 0.200352;
1833 wW[4] = 0.000386;
1834 wW[5] = 0.001467;
1835 wW[6] = 0.000155;
1836 wW[7] = 0.005113;
1837 wW[8] = 0.000993;
1838 wW[9] = 0.381262;
1839 wW[10] = 0.008121;
1840 wW[11] = 0.000000;
1841 wW[12] = 0.000000;
1842 if(fByThick){// New values seeITS_MatBudget_4B.xls
1843 den = 1.5253276; // g/cm^3 Cell O370
1844 }else{
1845 den = 2.58423412; // g/cm^3 Cell L370
1846 } // end if fByThick
1847 //den = 6161.7/(3671.58978);//g/cm^3 Volume does not exclude holes
1848 AliMixture(86,"AIRFMDSDD$",aA,zZ,den,+11,wW);
1849 AliMedium(86,"AIRFMDSDD$",86,0,ifield,fieldm,tmaxfdAir,stemaxAir,
1850 deemaxAir,epsilAir,stminAir);
1851
1852 //AliMaterial(87,"AIRFMDSSD$",0.14610E+02,0.73000E+01,0.12050E-02,0.30423E+05,0.99900E+03);
1853 // From Pierluigi Barberis calculations of SSD October 2 2002.
1854 wW[0] = 0.019777;
1855 wW[1] = 0.325901;
1856 wW[2] = 0.031848;
1857 wW[3] = 0.147668;
1858 wW[4] = 0.030609;
1859 wW[5] = 0.013993;
1860 wW[6] = 0.001479;
1861 wW[7] = 0.048792;
1862 wW[8] = 0.009477;
1863 wW[9] = 0.350697;
1864 wW[10] = 0.014546;
1865 wW[11] = 0.005213;
1866 wW[12] = 0.000000;
1867 if(fByThick){// New values seeITS_MatBudget_4B.xls
1868 den = 1.2464275; // g/cm^3 Cell O403
1869 }else{
1870 den = 1.28134409; // g/cm^3 Cell L403
1871 } // end if fByThick
1872 //den = 7666.3/(9753.553259); // volume does not exclude holes
1873 AliMixture(87,"AIRFMDSSD$",aA,zZ,den,+12,wW);
1874 AliMedium(87,"AIRFMDSSD$",87,0,ifield,fieldm,tmaxfdAir,stemaxAir,
1875 deemaxAir,epsilAir,stminAir);
1876
1877 //AliMaterial(88,"ITS SANDW CFMDSDD$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03);
1878 // From Pierluigi Barberis calculations of 1SDD+Carbon fiber October 2 2002
1879 wW[0] = 0.016302;
1880 wW[1] = 0.461870;
1881 wW[2] = 0.033662;
1882 wW[3] = 0.163595;
1883 wW[4] = 0.000315;
1884 wW[5] = 0.001197;
1885 wW[6] = 0.000127;
1886 wW[7] = 0.004175;
1887 wW[8] = 0.000811;
1888 wW[9] = 0.311315;
1889 wW[10] = 0.006631;
1890 wW[11] = 0.000000;
1891 wW[12] = 0.000000;
1892 if(fByThick){// New values seeITS_MatBudget_4B.xls
1893 den = 1.9353276; // g/cm^3 Cell N370
1894 }else{
1895 den = 3.2788626; // g/cm^3 Cell F370
1896 } // end if fByThick
1897 //den = 7667.1/(3671.58978); // Volume does not excludeholes
1898 AliMixture(88,"ITS SANDW CFMDSDD$",aA,zZ,den,+11,wW);
1899 AliMedium(88,"ITS SANDW CFMDSDD$",88,0,ifield,fieldm,tmaxfd,stemax,
1900 deemax,epsil,stmin);
1901
1902 //AliMaterial(89,"ITS SANDW CFMDSSD$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03);
1903 // From Pierluigi Barberis calculations of SSD+Carbon fiber October 2 2002.
1904 wW[0] = 0.014065;
1905 wW[1] = 0.520598;
1906 wW[2] = 0.022650;
1907 wW[3] = 0.105018;
1908 wW[4] = 0.021768;
1909 wW[5] = 0.009952;
1910 wW[6] = 0.001051;
1911 wW[7] = 0.034700;
1912 wW[8] = 0.006740;
1913 wW[9] = 0.249406;
1914 wW[10] = 0.010345;
1915 wW[11] = 0.0003707;
1916 wW[12] = 0.000000;
1917 if(fByThick){// New values seeITS_MatBudget_4B.xls
1918 den = 1.6564275; // g/cm^3 Cell N304
1919 }else{
1920 den = 1.7028296; // g/cm^3 Cell F304
1921 } // end if fByThick
1922 //den = 1166.5/(3671.58978); // Volume does not exclude holes
1923 AliMixture(89,"ITS SANDW CFMDSSD$",aA,zZ,den,+12,wW);
1924 AliMedium(89,"ITS SANDW CFMDSSD$",89,0,ifield,fieldm,tmaxfd,stemax,
1925 deemax,epsil,stmin);
1926
1927 //AliMaterial(97,"SPD SERVICES$",0.12011E+02,0.60000E+01,0.41000E+00,0.90868E+02,0.99900E+03);
1928 // From Pierluigi Barberis calculations of 1SPD October 2 2002.
1929 wW[0] = 0.005970;
1930 wW[1] = 0.304704;
1931 wW[2] = 0.042510;
1932 wW[3] = 0.121715;
1933 wW[4] = 0.001118;
1934 wW[5] = 0.030948;
1935 wW[6] = 0.003270;
1936 wW[7] = 0.107910;
1937 wW[8] = 0.020960;
1938 wW[9] = 0.360895;
1939 wW[10] = 0.000000;
1940 wW[11] = 0.000000;
1941 wW[12] = 0.000000;
1942 if(fByThick){// New values seeITS_MatBudget_4B.xls
1943 den = 80.31136576; // g/cm^3 Cell H329
1944 }else{
1945 den = 87.13062; // g/cm^3 Cell G329
1946 } // end if fByThick
1947 //den = 1251.3/(0.05*2.0*TMath::Pi()*(7.75*7.75 - 3.7*3.7)); // g/cm^3
1948 AliMixture(97,"SPD SERVICES$",aA,zZ,den,+10,wW);
1949 AliMedium(97,"SPD SERVICES$",97,0,ifield,fieldm,tmaxfd,stemax,
1950 deemax,epsil,stmin);
1951
1952
1953 // Special media
1954
1955 AliMaterial(90,"SPD shield$", 12.011, 6., 1.93 , 22.36, 999);
1956 AliMedium(90,"SPD shield$",90,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1957
1958 // SPD End Ladder (data from Petra Riedler)
1959 Float_t aSPDel[5] = {1.00794,12.0107,14.01,15.9994,63.54 };
1960 Float_t zSPDel[5] = {1.,6.,7.,8.,29.};
1961 Float_t wSPDel[5] = {0.004092,0.107274,0.011438,0.032476,0.844719};
1962 Float_t dSPDel = 3.903403;
1963
1964 // AliMaterial(91, "SPD End ladder$", 47.0447, 21.7963, 3.6374, 4.4711, 999);
1965 AliMixture(91,"SPD End ladder$",aSPDel,zSPDel,dSPDel,5,wSPDel);
1966 AliMedium(91,"SPD End ladder$",91,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1967
1968 AliMaterial(92, "SPD cone$",28.0855, 14., 2.33, 9.36, 999);
1969 AliMedium(92,"SPD cone$",92,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1970 /* Material with fractional Z not actually used
1971 AliMaterial(93, "SDD End ladder$", 69.9298, 29.8246, 0.3824, 36.5103, 999);
1972 AliMedium(93,"SDD End ladder$",93,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1973 */
1974 AliMaterial(94, "SDD cone$",63.546, 29., 1.15, 1.265, 999);
1975 AliMedium(94,"SDD cone$",94,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1976 /* Material with fractional Z not actually used
1977 AliMaterial(95, "SSD End ladder$", 32.0988, 15.4021, 0.68, 35.3238, 999);
1978 AliMedium(95,"SSD End ladder$",95,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1979 */
1980 AliMaterial(96, "SSD cone$",63.546, 29., 1.15, 1.265, 999);
1981 AliMedium(96,"SSD cone$",96,0,ifield,fieldm,tmaxfdServ,stemaxServ,deemaxServ,epsilServ,stminServ);
1982
1983 AliMixture(98,"SDD OPTICFIB$",aoptfib,zoptfib,doptfib,-2,woptfib);
1984 AliMedium(98,"SDD OPTICFIB$",98,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1985
1986 AliMixture(95,"SSD FEP$",aFEP,zFEP,dFEP,-2,wFEP);
1987 AliMedium(95,"SSD FEP$",95,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
1988
1989 // Mean material for low-voltage cables on SPD trays Side A
1990 // (Copper + PolyEthylene (C2-H4)) (D.Elia for cable number and
1991 // cross-section area, M.Sitta for elemental computation) - 26 Feb 10
1992 wW[0] = 0.323024;//H
1993 wW[2] = 0.515464;//Cu
1994 wW[1] = 0.161512;//C
1995 wW[3] = 0.000000;//O
1996 wW[4] = 0.000000;//S
1997 wW[5] = 0.000000;//F
1998 wW[6] = 0.000000;//Sn
1999 wW[7] = 0.000000;//Pb
2000 wW[8] = 0.000000;//Cr
2001 wW[9] = 0.000000;//Si
2002 wW[10] = 0.000000;//Ni
2003 wW[11] = 0.000000;//Ca
2004
2005 den = 5.078866;
2006 AliMixture(60,"SPD_LOWCABLES$",aA,zZ,den,+3,wW);
2007 AliMedium(60,"SPD_LOWCABLES$",60,0,ifield,fieldm,tmaxfd,stemax,
2008 deemax,epsil,stmin);
2009
2010 // Mean material for high-voltage cables on SPD trays Side A & C
2011 // (Copper + HD PolyEthylene (C2-H2)) (D.Elia for cable number and
2012 // cross-section area, M.Sitta for elemental computation) - 10 Jun 10
2013 wW[0] = 0.083766;//H
2014 wW[2] = 0.417136;//Cu
2015 wW[1] = 0.499098;//C
2016 wW[3] = 0.000000;//O
2017 wW[4] = 0.000000;//S
2018 wW[5] = 0.000000;//F
2019 wW[6] = 0.000000;//Sn
2020 wW[7] = 0.000000;//Pb
2021 wW[8] = 0.000000;//Cr
2022 wW[9] = 0.000000;//Si
2023 wW[10] = 0.000000;//Ni
2024 wW[11] = 0.000000;//Ca
2025
2026 den = 1.514930;
2027 AliMixture(58,"SPD_HICABLES$",aA,zZ,den,+3,wW);
2028 AliMedium(58,"SPD_HICABLES$",58,0,ifield,fieldm,tmaxfd,stemax,
2029 deemax,epsil,stmin);
2030
2031 // PolyUrethane [C25-H42-N2-O6] - 07 Mar 10
2032 zZ[2] = 7.0; aA[2] = 14.0067; // Nitrogen - From Root TGeoElementTable
2033
2034 wW[0] = 0.090724;//H
2035 wW[2] = 0.060035;//N
2036 wW[1] = 0.643513;//C
2037 wW[3] = 0.205728;//O
2038 wW[4] = 0.000000;//S
2039 wW[5] = 0.000000;//F
2040 wW[6] = 0.000000;//Sn
2041 wW[7] = 0.000000;//Pb
2042 wW[8] = 0.000000;//Cr
2043 wW[9] = 0.000000;//Si
2044 wW[10] = 0.000000;//Ni
2045 wW[11] = 0.000000;//Ca
2046
2047 den = 1.158910;
2048 AliMixture(67,"POLYURETHANE$",aA,zZ,den,+4,wW);
2049 AliMedium(67,"POLYURETHANE$",67,0,ifield,fieldm,tmaxfd,stemax,
2050 deemax,epsil,stmin);
2051
2052 // POM (Polyoxymethylene = (CH2O)n ) - 02 May 10
2053 zZ[2] = 8.0; aA[2] = 15.9994; // Oxigen
2054
2055 wW[0] = 0.067137;//H
2056 wW[1] = 0.400016;//C
2057 wW[2] = 0.532847;//O
2058 wW[3] = 0.000000;//O
2059 wW[4] = 0.000000;//S
2060 wW[5] = 0.000000;//F
2061 wW[6] = 0.000000;//Sn
2062 wW[7] = 0.000000;//Pb
2063 wW[8] = 0.000000;//Cr
2064 wW[9] = 0.000000;//Si
2065 wW[10] = 0.000000;//Ni
2066 wW[11] = 0.000000;//Ca
2067
2068 den = 1.4200;
2069 AliMixture(57,"POLYOXYMETHYLENE$",aA,zZ,den,+3,wW);
2070 AliMedium(57,"POLYOXYMETHYLENE$",57,0,ifield,fieldm,tmaxfd,stemax,
2071 deemax,epsil,stmin);
2072
2073
2074 // Anticorodal: Aliminum alloy for tray ring support on Side A
2075 den = 2.710301;
2076 AliMaterial(93,"ANTICORODAL$",0.26982E+02,0.13000E+02,den,0.89000E+01,0.99900E+03);
2077 AliMedium(93,"ANTICORODAL$",93,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin);
2078
2079}
2080
2081//_____________________________________________________________________________
2082void AliMaterial(Int_t imat, const char* name, Float_t a,
2083 Float_t z, Float_t dens, Float_t radl,
2084 Float_t absl) {
2085
2086 TString uniquename = "ITS";
2087 uniquename.Append("_");
2088 uniquename.Append(name);
2089
2090 gGeoManager->Material(uniquename.Data(), a, z, dens, imat, radl, absl);
2091
2092}
2093
2094//_____________________________________________________________________________
2095void AliMedium(Int_t numed, const char *name, Int_t nmat,
2096 Int_t isvol, Int_t ifield, Float_t fieldm,
2097 Float_t tmaxfd, Float_t stemax, Float_t deemax,
2098 Float_t epsil, Float_t stmin){
2099
2100 TString uniquename = "ITS";
2101 uniquename.Append("_");
2102 uniquename.Append(name);
2103
2104 gGeoManager->Medium(uniquename.Data(),numed,nmat, isvol, ifield, fieldm,
2105 tmaxfd, stemax,deemax, epsil, stmin);
2106
2107}
2108
2109//_____________________________________________________________________________
2110void AliMixture(Int_t kmat, const char* name, Float_t* a, Float_t* z,
2111 Double_t dens, Int_t nlmat, Float_t* wmat)
2112{
2113 //
2114 // Defines mixture OR COMPOUND IMAT as composed by
2115 // THE BASIC NLMAT materials defined by arrays A,Z and WMAT
2116 //
2117 // If NLMAT > 0 then wmat contains the proportion by
2118 // weights of each basic material in the mixture.
2119 //
2120 // If nlmat < 0 then WMAT contains the number of atoms
2121 // of a given kind into the molecule of the COMPOUND
2122 // In this case, WMAT in output is changed to relative
2123 // weigths.
2124 //
2125
2126 TString uniquename = "ITS";
2127 uniquename.Append("_");
2128 uniquename.Append(name);
2129
2130
2131 Double_t* da = CreateDoubleArray(a, TMath::Abs(nlmat));
2132 Double_t* dz = CreateDoubleArray(z, TMath::Abs(nlmat));
2133 Double_t* dwmat = CreateDoubleArray(wmat, TMath::Abs(nlmat));
2134
2135 Mixture(kmat, uniquename.Data(), da, dz, dens, nlmat, dwmat);
2136 for (Int_t i=0; i<nlmat; i++) {
2137 a[i] = da[i]; z[i] = dz[i]; wmat[i] = dwmat[i];
2138 }
2139
2140 delete [] da;
2141 delete [] dz;
2142 delete [] dwmat;
2143}
2144
2145//_____________________________________________________________________________
2146void Mixture(Int_t& kmat, const char* name, Double_t* a, Double_t* z,
2147 Double_t dens, Int_t nlmat, Double_t* wmat)
2148{
2149 //
2150 // Defines mixture OR COMPOUND IMAT as composed by
2151 // THE BASIC NLMAT materials defined by arrays A,Z and WMAT
2152 //
2153 // If NLMAT > 0 then wmat contains the proportion by
2154 // weights of each basic material in the mixture.
2155 //
2156 // If nlmat < 0 then WMAT contains the number of atoms
2157 // of a given kind into the molecule of the COMPOUND
2158 // In this case, WMAT in output is changed to relative
2159 // weigths.
2160 //
2161
2162 if (nlmat < 0) {
2163 nlmat = - nlmat;
2164 Double_t amol = 0;
2165 Int_t i;
2166 for (i=0;i<nlmat;i++) {
2167 amol += a[i]*wmat[i];
2168 }
2169 for (i=0;i<nlmat;i++) {
2170 wmat[i] *= a[i]/amol;
2171 }
2172 }
2173 gGeoManager->Mixture(name, a, z, dens, nlmat, wmat, kmat);
2174}
2175
2176//_____________________________________________________________________________
2177Double_t* CreateDoubleArray(Float_t* array, Int_t size)
2178{
2179// Converts Float_t* array to Double_t*,
2180// !! The new array has to be deleted by user.
2181// ---
2182
2183 Double_t* doubleArray;
2184 if (size>0) {
2185 doubleArray = new Double_t[size];
2186 for (Int_t i=0; i<size; i++) doubleArray[i] = array[i];
2187 } else {
2188 //doubleArray = 0;
2189 doubleArray = new Double_t[1];
2190 }
2191 return doubleArray;
2192}
2193
2194//______________________________________________________________________
2195Bool_t Make2DCrossSections(TPolyLine &a0,TPolyLine &a1,
2196 TPolyLine &b0,TPolyLine &b1,TPolyMarker &p)
2197{
2198 //
2199 // Fill the objects with the points representing
2200 // a0 the outer carbon fiber SPD sector shape Cross Section A
2201 // a1 the inner carbon fiber SPD sector shape Cross Section A
2202 // b0 the outer carbon fiber SPD sector shape Cross Section B
2203 // b1 the inner carbon fiber SPD sector shape Cross Section B
2204 //
2205 // Inputs:
2206 // TPolyLine &a0 The outer carbon fiber SPD sector shape
2207 // TPolyLine &a1 The Inner carbon fiber SPD sector shape
2208 // TPolyLine &b0 The outer carbon fiber SPD sector shape
2209 // TPolyLine &b1 The Inner carbon fiber SPD sector shape
2210 // TPolyMarker &p The points where the ladders are to be placed
2211 // Outputs:
2212 // TPolyLine &a0 The shape filled with the points
2213 // TPolyLine &a1 The shape filled with the points
2214 // TPolyLine &b0 The shape filled with the points
2215 // TPolyLine &b1 The shape filled with the points
2216 // TPolyMarker &p The filled array of points
2217 // Return:
2218 // An error flag.
2219 //
2220 Int_t n0,n1,i;
2221 Double_t x,y;
2222 TGeoVolume *a0V,*a1V,*b0V,*b1V;
2223 TGeoXtru *a0S,*a1S,*b0S,*b1S;
2224 TGeoManager *mgr = gGeoManager;
2225
2226 a0V = mgr->GetVolume("ITSSPDCarbonFiberSupportSectorA0");
2227 a0S = dynamic_cast<TGeoXtru*>(a0V->GetShape());
2228 n0 = a0S->GetNvert();
2229 a0.SetPolyLine(n0+1);
2230 //for(i=0;i<fSPDsectorPoints0.GetSize();i++)
2231 // printf("%d %d %d\n",i,fSPDsectorPoints0[i],fSPDsectorPoints1[i]);
2232 for(i=0;i<n0;i++){
2233 x = a0S->GetX(i);
2234 y = a0S->GetY(i);
2235 //printf("%d %g %g\n",i,x,y);
2236 a0.SetPoint(i,x,y);
2237 if(i==0) a0.SetPoint(n0,x,y);
2238 } // end for i
2239 a1V = mgr->GetVolume("ITSSPDCarbonFiberSupportSectorAirA1");
2240 a1S = dynamic_cast<TGeoXtru*>(a1V->GetShape());
2241 n1 = a1S->GetNvert();
2242 a1.SetPolyLine(n1+1);
2243 for(i=0;i<n1;i++){
2244 x = a1S->GetX(i);
2245 y = a1S->GetY(i);
2246 a1.SetPoint(i,x,y);
2247 if(i==0) a1.SetPoint(n1,x,y);
2248 } // end for i
2249 // Cross Section B
2250 b0V = mgr->GetVolume("ITSSPDCarbonFiberSupportSectorEndB0");
2251 b0S = dynamic_cast<TGeoXtru*>(b0V->GetShape());
2252 n0 = b0S->GetNvert();
2253 b0.SetPolyLine(n0+1);
2254 for(i=0;i<n0;i++){
2255 x = b0S->GetX(i);
2256 y = b0S->GetY(i);
2257 b0.SetPoint(i,x,y);
2258 if(i==0) b0.SetPoint(n0,x,y);
2259 } // end for i
2260 b1V = mgr->GetVolume("ITSSPDCarbonFiberSupportSectorEndAirB1");
2261 b1S = dynamic_cast<TGeoXtru*>(b1V->GetShape());
2262 n1 = b1S->GetNvert();
2263 b1.SetPolyLine(n1+1);
2264 for(i=0;i<n1;i++){
2265 x = b1S->GetX(i);
2266 y = b1S->GetY(i);
2267 b1.SetPoint(i,x,y);
2268 if(i==0) b1.SetPoint(n1,x,y);
2269 } // end for i
2270 //
2271 Double_t x0,y0,x1,y1;
2272 p.SetPolyMarker(2*gspd->GetSPDsectorX0Size());
2273 for(i=0;i<gspd->GetSPDsectorX0Size();i++){
2274 gspd->GetSectorMountingPoints(i,x0,y0,x1,y1);
2275 p.SetPoint(2*i,x0,y0);
2276 p.SetPoint(2*i+1,x1,y1);
2277 } // end for i
2278 return kTRUE;
2279}