22 void parallel_world(Bool_t usepw=kTRUE, Bool_t useovlp=kTRUE)
24 TGeoManager *geom =
new TGeoManager(
"parallel_world",
"Showcase for prioritized physical paths");
25 TGeoMaterial *matV =
new TGeoMaterial(
"Vac", 0,0,0);
26 TGeoMedium *medV =
new TGeoMedium(
"MEDVAC",1,matV);
27 TGeoMaterial *matAl =
new TGeoMaterial(
"Al", 26.98,13,2.7);
28 TGeoMedium *medAl =
new TGeoMedium(
"MEDAL",2,matAl);
29 TGeoMaterial *matSi =
new TGeoMaterial(
"Si", 28.085,14,2.329);
30 TGeoMedium *medSi =
new TGeoMedium(
"MEDSI",3,matSi);
31 TGeoVolume *top = gGeoManager->MakeBox(
"TOP",medV,100,400,1000);
32 gGeoManager->SetTopVolume(top);
35 TGeoBBox *sblock =
new TGeoBBox(
"sblock", 20,10,2);
37 TGeoVolume *support =
new TGeoVolume(
"block",sblock, medAl);
38 support->SetLineColor(kGreen);
41 TGeoBBox *ssensor =
new TGeoBBox(
"sensor", 19,9,0.2);
43 TGeoVolume *sensor =
new TGeoVolume(
"sensor",ssensor, medSi);
44 sensor->SetLineColor(kRed);
47 TGeoVolumeAssembly *chip =
new TGeoVolumeAssembly(
"chip");
48 chip->AddNode(support, 1);
49 chip->AddNode(sensor,1,
new TGeoTranslation(0,0,-2.1));
52 TGeoBBox *sladder =
new TGeoBBox(
"sladder", 20,300,5);
54 TGeoVolume *ladder =
new TGeoVolume(
"ladder",sladder, medAl);
55 ladder->SetLineColor(kBlue);
58 top->AddNode(ladder,1);
59 for (Int_t i=0; i<10; i++)
60 top->AddNode(chip, i+1,
new TGeoTranslation(0, -225.+50.*i, 10));
62 gGeoManager->CloseGeometry();
63 TGeoParallelWorld *pw = 0;
64 if (usepw) pw = gGeoManager->CreateParallelWorld(
"priority_sensors");
68 if (useovlp) pw->AddOverlap(ladder);
70 gGeoManager->SetUseParallelWorldNav(kTRUE);
73 cname = usepw ?
"cpw" :
"cnopw";
74 TCanvas *c = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(cname);
76 else c =
new TCanvas(cname,
"",800,600);
84 top->RandomRays(100000,0,0,-30,sensor->GetName());
87 TView3D *view = (TView3D*)gPad->GetView();
90 if (usepw) pw->PrintDetectedOverlaps();
98 TGeoPhysicalNode *node;
99 TGeoParallelWorld *pw = gGeoManager->GetParallelWorld();
101 for (Int_t i=0; i<10; i++) {
102 node = gGeoManager->MakePhysicalNode(TString::Format(
"/TOP_1/chip_%d",i+1));
103 sag = 8.-0.494*(i-4.5)*(i-4.5);
104 TGeoTranslation *tr =
new TGeoTranslation(0., -225.+50.*i, 10-sag);
106 if (pw) pw->AddNode(TString::Format(
"/TOP_1/chip_%d",i+1));