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