Logo ROOT  
Reference Guide
parallel_world.C File Reference

Detailed Description

Misaligning geometry generate in many cases overlaps, due to the idealization of the design and the fact that in real life movements of the geometry volumes have constraints and are correlated.

This typically generates inconsistent response of the navigation methods, leading to inefficiencies during tracking, errors in the material budget calculations, and so on. Among those, there are dangerous cases when the hidden volumes are sensitive. This macro demonstrates how to use the "parallel world" feature to assign highest navigation priority to some physical paths in geometry.

void align();
//______________________________________________________________________________
void parallel_world(Bool_t usepw=kTRUE, Bool_t useovlp=kTRUE)
{
TGeoManager *geom = new TGeoManager("parallel_world", "Showcase for prioritized physical paths");
TGeoMaterial *matV = new TGeoMaterial("Vac", 0,0,0);
TGeoMedium *medV = new TGeoMedium("MEDVAC",1,matV);
TGeoMaterial *matAl = new TGeoMaterial("Al", 26.98,13,2.7);
TGeoMedium *medAl = new TGeoMedium("MEDAL",2,matAl);
TGeoMaterial *matSi = new TGeoMaterial("Si", 28.085,14,2.329);
TGeoMedium *medSi = new TGeoMedium("MEDSI",3,matSi);
TGeoVolume *top = gGeoManager->MakeBox("TOP",medV,100,400,1000);
// Shape for the support block
TGeoBBox *sblock = new TGeoBBox("sblock", 20,10,2);
// The volume for the support
TGeoVolume *support = new TGeoVolume("block",sblock, medAl);
support->SetLineColor(kGreen);
// Shape for the sensor to be prioritized in case of overlap
TGeoBBox *ssensor = new TGeoBBox("sensor", 19,9,0.2);
// The volume for the sensor
TGeoVolume *sensor = new TGeoVolume("sensor",ssensor, medSi);
sensor->SetLineColor(kRed);
// Chip assembly of support+sensor
chip->AddNode(support, 1);
chip->AddNode(sensor,1, new TGeoTranslation(0,0,-2.1));
// A ladder that normally sags
TGeoBBox *sladder = new TGeoBBox("sladder", 20,300,5);
// The volume for the ladder
TGeoVolume *ladder = new TGeoVolume("ladder",sladder, medAl);
ladder->SetLineColor(kBlue);
// Add nodes
top->AddNode(ladder,1);
for (Int_t i=0; i<10; i++)
top->AddNode(chip, i+1, new TGeoTranslation(0, -225.+50.*i, 10));
if (usepw) pw = gGeoManager->CreateParallelWorld("priority_sensors");
// Align chips
align();
if (usepw) {
if (useovlp) pw->AddOverlap(ladder);
}
TString cname;
cname = usepw ? "cpw" : "cnopw";
TCanvas *c = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(cname);
if (c) c->cd();
else c = new TCanvas(cname, "",800,600);
top->Draw();
// top->RandomRays(0,0,0,0,sensor->GetName());
// Track random "particles" coming from the block side and draw only the tracklets
// actually crossing one of the sensors. Note that some of the tracks coming
// from the outer side may see the full sensor, while the others only part of it.
TStopwatch timer;
timer.Start();
top->RandomRays(100000,0,0,-30,sensor->GetName());
timer.Stop();
timer.Print();
TView3D *view = (TView3D*)gPad->GetView();
view->SetParallel();
view->Side();
if (usepw) pw->PrintDetectedOverlaps();
}
//______________________________________________________________________________
void align()
{
// Aligning 2 sensors so they will overlap with the support. One sensor is positioned
// normally while the other using the shared matrix
Double_t sag;
for (Int_t i=0; i<10; i++) {
node = gGeoManager->MakePhysicalNode(TString::Format("/TOP_1/chip_%d",i+1));
sag = 8.-0.494*(i-4.5)*(i-4.5);
TGeoTranslation *tr = new TGeoTranslation(0., -225.+50.*i, 10-sag);
node->Align(tr);
if (pw) pw->AddNode(TString::Format("/TOP_1/chip_%d",i+1));
}
}
Author
Andrei Gheata

Definition in file parallel_world.C.

c
#define c(i)
Definition: RSha256.hxx:119
kTRUE
const Bool_t kTRUE
Definition: RtypesCore.h:91
TGeoPhysicalNode
Definition: TGeoPhysicalNode.h:35
TView3D
Definition: TView3D.h:29
TGeoManager::SetUseParallelWorldNav
void SetUseParallelWorldNav(Bool_t flag)
Activate/deactivate usage of parallel world navigation.
Definition: TGeoManager.cxx:3991
TGeoManager::MakeBox
TGeoVolume * MakeBox(const char *name, TGeoMedium *medium, Double_t dx, Double_t dy, Double_t dz)
Make in one step a volume pointing to a box shape with given medium.
Definition: TGeoManager.cxx:2918
kGreen
@ kGreen
Definition: Rtypes.h:66
gGeoManager
R__EXTERN TGeoManager * gGeoManager
Definition: TGeoManager.h:602
TGeoManager::CreateParallelWorld
TGeoParallelWorld * CreateParallelWorld(const char *name)
Create a parallel world for prioritised navigation.
Definition: TGeoManager.cxx:3980
TGeoParallelWorld::PrintDetectedOverlaps
Int_t PrintDetectedOverlaps() const
Print the overlaps which were detected during real tracking.
Definition: TGeoParallelWorld.cxx:104
TGeoManager::CloseGeometry
void CloseGeometry(Option_t *option="d")
Closing geometry implies checking the geometry validity, fixing shapes with negative parameters (run-...
Definition: TGeoManager.cxx:1359
Int_t
int Int_t
Definition: RtypesCore.h:45
TGeoParallelWorld
Definition: TGeoParallelWorld.h:21
TGeoVolume::AddNode
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a TGeoNode to the list of nodes.
Definition: TGeoVolume.cxx:932
TGeoParallelWorld::AddNode
void AddNode(const char *path)
Add a node normally to this world. Overlapping nodes not allowed.
Definition: TGeoParallelWorld.cxx:65
TString::Format
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
Definition: TString.cxx:2311
TString
Definition: TString.h:136
Bool_t
bool Bool_t
Definition: RtypesCore.h:63
TGeoTranslation
Definition: TGeoMatrix.h:121
TGeoMaterial
Definition: TGeoMaterial.h:34
TGeoParallelWorld::AddOverlap
void AddOverlap(TGeoVolume *vol, Bool_t activate=kTRUE)
To use this optimization, the user should declare the full list of volumes which may overlap with any...
Definition: TGeoParallelWorld.cxx:80
TGeoManager::MakePhysicalNode
TGeoPhysicalNode * MakePhysicalNode(const char *path=0)
Makes a physical node corresponding to a path.
Definition: TGeoManager.cxx:3258
TStopwatch::Print
void Print(Option_t *option="") const
Print the real and cpu time passed between the start and stop events.
Definition: TStopwatch.cxx:219
TGeoManager::SetTopVolume
void SetTopVolume(TGeoVolume *vol)
Set the top volume and corresponding node as starting point of the geometry.
Definition: TGeoManager.cxx:3397
TGeoVolumeAssembly::AddNode
virtual void AddNode(TGeoVolume *vol, Int_t copy_no, TGeoMatrix *mat=0, Option_t *option="")
Add a component to the assembly.
Definition: TGeoVolume.cxx:2804
TGeoManager::GetParallelWorld
TGeoParallelWorld * GetParallelWorld() const
Definition: TGeoManager.h:595
TGeoVolume::Draw
virtual void Draw(Option_t *option="")
draw top volume according to option
Definition: TGeoVolume.cxx:1146
TStopwatch::Start
void Start(Bool_t reset=kTRUE)
Start the stopwatch.
Definition: TStopwatch.cxx:58
TGeoBBox
Definition: TGeoBBox.h:17
kRed
@ kRed
Definition: Rtypes.h:66
TGeoParallelWorld::CloseGeometry
Bool_t CloseGeometry()
The main geometry must be closed.
Definition: TGeoParallelWorld.cxx:132
TGeoVolume::RandomRays
void RandomRays(Int_t nrays=10000, Double_t startx=0, Double_t starty=0, Double_t startz=0, const char *target_vol=0, Bool_t check_norm=kFALSE)
Random raytracing method.
Definition: TGeoVolume.cxx:1334
Double_t
double Double_t
Definition: RtypesCore.h:59
TCanvas
Definition: TCanvas.h:23
TStopwatch
Definition: TStopwatch.h:28
kBlue
@ kBlue
Definition: Rtypes.h:66
gPad
#define gPad
Definition: TVirtualPad.h:287
TView3D::SetParallel
virtual void SetParallel()
Set the parallel option (default).
Definition: TView3D.cxx:1304
TGeoMedium
Definition: TGeoMedium.h:23
TNamed::GetName
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:53
TGeoPhysicalNode::Align
Bool_t Align(TGeoMatrix *newmat=0, TGeoShape *newshape=0, Bool_t check=kFALSE, Double_t ovlp=0.001)
Align a physical node with a new relative matrix/shape.
Definition: TGeoPhysicalNode.cxx:133
TStopwatch::Stop
void Stop()
Stop the stopwatch.
Definition: TStopwatch.cxx:77
TGeoVolume::SetLineColor
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TGeoVolume.cxx:2035
TGeoManager
Definition: TGeoManager.h:44
TView3D::Side
virtual void Side()
Definition: TView3D.cxx:1933
TGeoVolume
Definition: TGeoVolume.h:44
TGeoVolumeAssembly
Definition: TGeoVolume.h:302
gROOT
#define gROOT
Definition: TROOT.h:406