ROOT Geometry PackageL 1
The New ROOTGeometry Package
RTAG MCCERN 8 August
René Brun, Andrei & Mihaela Gheata
CERN
ftp://root.cern.ch/root/rootgeom.ppt
R.Brun RTAG MC ROOT Geometry Package 2
Simulation tools
Geant3created in 1981
Still used bythe majority
of experiments
FlukaState of the artfor hadronics
and neutron physics
Geant4A huge investment
Slow penetrationin experiments
R.Brun RTAG MC ROOT Geometry Package 3
Detector Geometry (way 1)
Geant4geometry
Reconstructionprogram
Simulationprogram
Geant4-based
XMLfiles
C++classes
MySQL
Visualisation
R.Brun RTAG MC ROOT Geometry Package 4
The Virtual MonteCarlo
DAQ
Online
TVirtualMC
Geant3
Fluka
Geant4Kinematics Geometry
Hits, Digits
This strategy facilitates
migration or comparisons
with a common input
and a common output
Geant3.tar.gz includesan upgraded Geant3
with a C++ interface
Geant4_mc.tar.gz includesthe TVirtualMC <-->Geant4
interface classes
For exampleAliRootin Alice
R.Brun RTAG MC ROOT Geometry Package 5
Virtual MC example (with G3)
{ // Load basic libraries gSystem->Load("libPhysics"); gSystem->Load("libMC"); gSystem->Load("$(MCINSTALL)/lib/Linux-g++/libexample01");
// Load Geant3 libraries // … skipped
// MC application Ex01MCApplication* appl = new Ex01MCApplication("Example01", "The example01 MC
application");
appl->InitMC("g3Config.C"); appl->RunMC(1);
} void Config() g3Config.C{ cout << "Create geant3" << endl; new TGeant3("C++ Interface to Geant3");}
R.Brun RTAG MC ROOT Geometry Package 6
Virtual MC example (with G4)
{ // Load basic libraries gSystem->Load("libPhysics"); gSystem->Load("libMC"); gSystem->Load("$(MCINSTALL)/lib/Linux-g++/libexample01");
// Load Geant4 libraries // … skipped
// MC application Ex01MCApplication* appl = new Ex01MCApplication("Example01", "The example01 MC
application");
appl->InitMC("g4Config.C"); appl->RunMC(1);}
void Config() { g4Config.C
// RunConfiguration for Geant4 TG4RunConfiguration* runConfiguration = new TG4RunConfiguration();
// TGeant4 new TGeant4("TGeant4", "The Geant4 Monte Carlo", runConfiguration);}
R.Brun RTAG MC ROOT Geometry Package 7
Detector Geometry (way 2)
Geometrypackage
Reconstructionprogram
Simulationprogram
Geant3-basedGeant4-basedFluka-based
C++classes
MySQL
Visualisation
Modelling
Visualisation
Interactivity
Where am I?
Distance to boundary
Closest boundary
Persistency
R.Brun RTAG MC ROOT Geometry Package 8
The new ROOT Geometry package
Was the request Nr 1 at ROOT FNAL workshop in June 2001
The package is being developed in collaboration with Alice (Andrei & Mihaela Gheata)
Alpha release in July faster than Geant3 Import from Geant3 (eg 4 LHC detectors) Interfaces to Geant3,4, Fluka in view Demos on request
R.Brun RTAG MC ROOT Geometry Package 9
The TGeo classes in htmlhttp://root.cern.ch/root/htmldoc/ClassIndex.h
tml
R.Brun RTAG MC ROOT Geometry Package 10
TGeoManager
R.Brun RTAG MC ROOT Geometry Package 11
TGeoShape
R.Brun RTAG MC ROOT Geometry Package 12
TGeoVolume
R.Brun RTAG MC ROOT Geometry Package 13
TGeoNode
R.Brun RTAG MC ROOT Geometry Package 14
Example
R.Brun RTAG MC ROOT Geometry Package 15
The ROOT “detector” example
R.Brun RTAG MC ROOT Geometry Package 16
Shooting random points
R.Brun RTAG MC ROOT Geometry Package 17
Shooting random rays
R.Brun RTAG MC ROOT Geometry Package 18
Automatic conversion from Geant3
Zebra memoryData structure
JVOLUMJMATE,etc
Geant > RZ/File 21 mygeom.geom on
Zebra RZmygeom.geom
g2root mygeom.geom mygeom.C
void gexam1(){TGeoMaterial *mat;TGeoMixture *mix;
TGeoManager *gexam1 = new TGeoManager("gexam1","gexam1.C");
//-----------List of Materials and Mixtures--------------
mat = new TGeoMaterial("mat9","ALUMINIUM",26.98,13,2.7);mix = new TGeoMixture("mix10","IRON(COMPOUND)",3); mix->DefineElement(0,55.847,26,0.703964); mix->DefineElement(1,58.71,28,0.9900000E-01); mix->DefineElement(2,51.998,24,0.197);mat = new TGeoMaterial("mat11","COPPER",63.54,29,8.96);
Root > .x mygeom.C Mygeom.c
R.Brun RTAG MC ROOT Geometry Package 19
Example : gexam1
void gexam1() {TGeoMaterial *mat;TGeoMixture *mix;
TGeoManager *gexam1;gexam1 = new TGeoManager("gexam1","gexam1.C");
//-----------List of Materials and Mixtures--------------
mat = new TGeoMaterial("mat9","ALUMINIUM",26.98,13,2.7);mix = new TGeoMixture("mix10","IRON(COMPOUND)",3); mix->DefineElement(0,55.847,26,0.703964); mix->DefineElement(1,58.71,28,0.9900000E-01); mix->DefineElement(2,51.998,24,0.197);mat = new TGeoMaterial("mat11","COPPER",63.54,29,8.96);mat = new TGeoMaterial("mat13","LEAD",207.19,82,11.35);mat = new TGeoMaterial("mat14","URANIUM",238.03,92,18.95);mat = new TGeoMaterial("mat15","AIR",14.61,7.3,0.1205E-02);mat = new TGeoMaterial("mat16","VACUUM",0,0,0);mix = new TGeoMixture("mix21","BGO(COMPOUND)",3); mix->DefineElement(0,208.98,83,0.6710563); mix->DefineElement(1,72.59,32,0.1748205); mix->DefineElement(2,15.999,8,0.1541233);mix = new TGeoMixture("mix22","LEAD GLASS",6); mix->DefineElement(0,207.19,82,0.65994); mix->DefineElement(1,39.102,19,0.7990000E-02); mix->DefineElement(2,28.088,14,0.126676); mix->DefineElement(3,22.99,11,0.4007300E-02); mix->DefineElement(4,15.999,8,0.199281); mix->DefineElement(5,74.922,33,0.2004850E-02);
//-----------List of Volumes--------------
TGeoVolume *ECAL ;ECAL = gexam1-> MakeTube("ECAL","mat15",0,5.898013,12.35774);LEAK = gexam1->MakeTube("LEAK","mat15",0,5.898013,0.5617155);LATR = gexam1->MakeTube("LATR","mat15",5.617156,5.813,11.23);BLOC = gexam1->MakeTube("BLOC","mix21",0,5.617156,11.23431);
//-----------List of Nodes--------------
gexam1->SetTopVolume(ECAL); ECAL->AddNode(LEAK,1,new TGeoTranslation(0,0,-11.79603)); ECAL->AddNode(LEAK,2,new TGeoTranslation(0,0,11.79603)); ECAL->AddNode(LATR,1,gGeoIdentity); ECAL->AddNode(BLOC,1,gGeoIdentity); TGeoVolume *RTUB = BLOC->Divide("RTUB",1,20,0,0.2808578); TGeoVolume *RING = RTUB->Divide("RING",3,20,-11.31,1.131); gexam1->CloseGeometry();}
gexam1.C codegenerated automatically
by g2root
R.Brun RTAG MC ROOT Geometry Package 20
Brahms2649 nodes
R.Brun RTAG MC ROOT Geometry Package 21
CMS
1.3 million nodes
R.Brun RTAG MC ROOT Geometry Package 22
Atlas 29 million nodes
R.Brun RTAG MC ROOT Geometry Package 23
Atlas
R.Brun RTAG MC ROOT Geometry Package 24
Atlas
R.Brun RTAG MC ROOT Geometry Package 25
Alice
R.Brun RTAG MC ROOT Geometry Package 26
Alice 3 million nodes
R.Brun RTAG MC ROOT Geometry Package 27
TGeo performance vs Geant3
Number gtmedi Root Geant3/ gtmedi Root Geant3/ nodes physics physics Root random random RootGexam1 425 3.08 1.84 1.67 6.60 4.39 1.50Gexam3 86 2.87 2.15 1.33 3.47 2.50 1.38Gexam4 12781 2.51 2.20 1.14 12.09 11.18 1.08Brahms 2649 5.82 3.04 1.91 4.17 1.93 2.16Tesla 15370 6.56 5.58 1.17 12.95 7.15 1.81CDF 24422 14.81 4.31 3.43 20.94 5.85 3.57Minos_near 30988 30.93 20.99 1.47 21.57 13.70 1.57BTeVEcal 52 1.57 1.08 1.45 1.78 0.73 2.43BTeV 295310 45.27 25.88 1.75 197.06 26.83 7.34CMSEcal 251713 5.60 1.81 3.09 5.69 1.74 3.27CMS 1166310 33.57 8.76 3.83 39.09 24.98 1.56LHCb 1533488 7.98 6.75 1.18 12.58 2.89 4.35Alice 3080198 11.50 8.63 1.33 11.45 7.28 1.57Atlas 29046966 8.90 9.94 0.89 32.48 23.39 1.38
R.Brun RTAG MC ROOT Geometry Package 28
BteV
R.Brun RTAG MC ROOT Geometry Package 29
Validation Procedure
Use one million points generated by Geant3.
Compare G3 path vs TGeo found path (pictures for a CDF event)
R.Brun RTAG MC ROOT Geometry Package 30
Validation Procedure Using points generated by Geant3 applications
grecord.f --> mygeom.geom, mygeom.hbook
Play-back these points in Geant3 using only the Geant3 geometry package. Compute g3path, snext, safety in myresults.hbook
h2root myresults.hbook myresults.root Same operation with TGeo classes. Compare
g3path with tgeopath, same for snext, safety Some discrepancies with Geant3 (see next)
R.Brun RTAG MC ROOT Geometry Package 31
Validation ProcedureDifferences Geant3 TGeo
Due to precision problems in Geant3, points recorded at the volume boundaries may be found on the other side by TGeo.
When volumes declared MANY in Geant3 overlap and have sub-volumes also MANY, Geant3 is not always reporting the right answer. In general it does not matter, sometimes it does.
In this exercise, we also found original errors in the detector description, eg wrong parameters.
R.Brun RTAG MC ROOT Geometry Package 32
Status of the implementation - test of gtnext
• Visualization - best tool for checking the algorithms
• The "width" of the boundaries due to floating point limitations was determined for some shapes
• This diffusion effect is crucial for fixing stepping actions in order to trigger expected inside/ouside response of the modeler
• The diffusion was defined as the distance between extrapolated point from step and closest point that changes this in/out response.
R.Brun RTAG MC ROOT Geometry Package 33
Status of the implementation
Geant3 geometries - almost fully mapped (still not supporting multiple positioning for volumes having shapes with negative parameters which then are divided - quite seldom topology)
"Where am I ?" - fully implemented Tested on a dozen of geometries, including all 4 LHC
experiments Performance w.r.t GEANT3 - OK. The average gain factor
~1.5-2.0 , increasing for flat-like geometries Consistency vs. GEANT3 response reasonable : still few
% differences, but fully understood Still scope for increasing speed, specially for cylindrical
symmetries, where the current voxelization algorithm is not efficient enough.
R.Brun RTAG MC ROOT Geometry Package 34
Status of the implementation - gtnext
"Which is the next crossed boundary ?" - about 80% implemented, still a couple of weeks to work on it.
Algorithms per shape improved w.r.t G3 for some shapes New functionalities added : normals to surfaces at
crossing points, accurate distance to closest node, direction vector to closest point
Features for stepping added : flags for entering and exiting
SHAPE BOX PARA TUBE TUBS CONE CONS SPHEREFROM INFROM OUT
SHAPE TRD1 TRD2 TRAP GTRA CTUB PCON PGONFROM INFROM OUT
ALGO. GLOBAL VOXELS DIVISIONS"MANY"
R.Brun RTAG MC ROOT Geometry Package 35
Summary
The new Geometry Package looks very promising.
We have been able to model all existing large detectors.
Performance is better than Geant3. We are planing to interface it via
TVirtualMC to Geant3, Geant4 and Fluka. Alpha release with ROOT version 3.03/07