To correct for energy loss and multiple scattering on a charged particle trajectory, the LHCb track fit talks to the transport service to locate intersections with detector material. Since the number of volumes in the LHCb geometry is large (about 10 million), searching for intersections is expensive. For single iteration fits, it dominates the track fit time consumption.
A solution to this problem is to use a 'simplified' tracking geometry. In LHCb we have for now chosen a very simplistic solution: the detector geometry is 'summarized' in O(20) volumes, most of which are in the velo region. These volumes get material properties such that they more or less represent the average material that you would find in the full geometry in that volume.
Here you can find a few presentations in which the simplified geometry is discussed
The tracking geometry contains about 30 volumes. The xml for the geometry resides in the database in DDDB/TrackfitGeometry/. It is a normal geometry, just like the default LHCb geometry. You can for example visualize it in Panoramix.
Here are a few schematic pictures of how the volumes are chosen:
To get access to the top-level element of the simplified geometry in C++ you can do
Each volume in the trackfit geometry is either a box, a cylinder or a cone. Being a single volume, it has a homogeneous material distribution. The volumes in the track fit geometry have been defined by carefully looking at how material was distributed. The aim was to obtain pull distributions for the parameters of long tracks that at the vertex look more or less identical to those that are obtained with the nominal geometry. The particular complication is the RF foil: the simplified geometry is not phi symmetric, just like the full LHCb geometry is not phi symmetric.
The material properties of the volumes in the trackfit geometry are obtained by averaging the true distribution of materials inside the volume. This procedure is described below.
The track fit uses a tool of type IMaterialLocator
to interact with the geometry. There are two ways to use the simplified geometry in the track fit. First, you can tell the DetailedMaterialLocator
to use a different geometry to search for volumes, e.g. schematically
Fitter.addTool( DetailedMaterialLocator , "MaterialLocator" ) Fitter.MaterialLocator.Geometry = '/dd/TrackfitGeometry/Structure/LHCb'
Alternatively, you can use another implementation of the !IMaterialLocator
tool:
Fitter.addTool( SimplifiedMaterialLocator , "MaterialLocator" )
The latter is a bit faster because the SimplifiedMaterialLocator
exploits a particular feature of the simplified geometry: None of the volumes in the simplified geometry are rotated. Therefore, the global-to-local transformations are much simpler than for the generic case.
The package Det/TrackfitGeometry
contains an algorithm to generate the material properties of the algorithms in the simplified geometry. The procedure can be sketched as follows:
MCParticles
and =MCHits=. (For MC09
this is an '=.xdst=' file.)
MCParticles
that traverse both VELO and T-stations.
MCHits
and between the first MCHit
and the vertex
intersection
is a special term int he transport service: it is basically the segment through as single-material volume. So, you have a begin-point, an end-point and a pointer to a particular material in the material database
Mixture
(which is an implementation of a Material
). To do this the original Materials
are decomposed in so called Elements
(which is another implementation of a Material
). Each element appears in the final mixture as a certain fraction of the mass. This allows to get proper values for the effective A and Z for the mixture. The density and radiation length of the material follow their own averaging: To run the algorithm, check-out the package, compile the algorithm and run the example script:
shell> SetupProject Brunel shell> getpack Det/TrackfitGeometry shell> cd Det/TrackfitGeometry/cmt shell> gmake shell> gaudirun.py ../options/GenerateMaterial.pyThis will produce a file
materials.xml
as well as a root file with histograms.
To test your new material.xml
file, you can create a database layer as follows:
shell> mkdirhier DDDB/TrackingGeometry shell> mv materials.xml DDDB/TrackingGeometry shell> SetupProject LHCb shell> copy_files_to_db.py -c sqlite_file:SimplifiedMaterials.db/DDDB -s DDDBYou can load this database layer in your standard brunel job by copying these lines into your main option file
shell> from Configurables import ( CondDB, CondDBAccessSvc ) shell> simplifiedmaterialCond = CondDBAccessSvc( 'SimplifiedMaterialCond' ) shell> simplifiedmaterialCond.ConnectionString = 'sqlite_file:SimplifiedMaterials.db/DDDB' shell> CondDB().addLayer( simplifiedmaterialCond )
-- WouterHulsbergen - 14 Jul 2009
I | Attachment | History | Action | Size | Date | Who | Comment |
---|---|---|---|---|---|---|---|
png | rffoil.png | r1 | manage | 38.6 K | 2009-07-14 - 15:54 | WouterHulsbergen | xy view of velo with RF foil in red |
png | simplelhcb.png | r1 | manage | 6.5 K | 2009-07-14 - 15:52 | WouterHulsbergen | all of LHCb |
png | veloregion.png | r1 | manage | 7.3 K | 2009-07-14 - 15:53 | WouterHulsbergen | velo region |