Other geometry/main

Table Of Contents

Previous topic

Data I/O

Next topic

Kinematic Generators

This Page

Daya Bay Links

Content Skeleton

Detector Description


The Detector Description, or “DetDesc” for short, provides multiple, partially redundant hierarchies of information about the detectors, reactors and other physical parts of the experiment.

The description has three main sections:

defines the elements, isotopes and materials and their optical properties that make up the detectors and the reactors.
describes the volumes, along with their solid shape, relative positioning, materials and sensitivity and any surface properties, making up the detectors and reactors. The geometry, like that of Geant4, consists of logical volumes containing other placed (or physical) logical volumes. Logical volumes only know of their children.
describes a hierarchy of distinct, placed “touchable” volumes (Geant4 nomenclature) also known as Detector Elements (Gaudi nomenclature). Not all volumes are directly referenced in this hiearchy, only those that are considered important.

The data making up the description exists in a variety of forms:

XML files
The definitive source of ideal geometry is stored in XML files following a well defined DTD schema.
DetDesc TDS objects
In memory, the description is accessed as objects from the DetDesc package stored in the Transient Detector Store. These objects are largely built from the XML files but can have additional information added, such as offsets from ideal locations.
Geant4 geometry
Objects in the Materials and Geometry sections can be converted into Geant4 geometry objects for simulation purposes.


There are three types of volumes in the description. Figure fig:log-phy-touch describes the objects that store logical, physical and touchable volume information.


The logical volume is the basic building block. It combines a shape and a material and zero or more daughter logical volumes fully contained inside the shape.
The single PMT logical volume placed as a daughter in the AD oil and Pool inner/outer water shields [1].


Daughters are placed inside a mother with a transformation matrix giving the daughters translation and rotation with respect to the mother’s coordinate system. The combination of a transformation and a logical volume is called a physical volume.
The 192 placed PMTs in the AD oil logical volume.


Logical volumes can be reused by placing them multiple times. Any physical daughter volumes are also reused when their mother is placed multiple times. A touchable volume is the trail from the top level “world” volume down the logical/physical hiearchy to a specific volume. In Geant4 this trail is stored as a vector of physical volumes (G4TouchableHistory). On the other hand in Gaudi only local information is stored. Each DetectorElement holds a pointer to the mother DetectorElement that “supports” it as well as pointers to all child DetectorElements that it supports.
The 8\times192=1536 AD PMTs in the whole experiment


Logical, Physical and Touchable volumes.

Scope of Detector Description, basics of geometry, structure and materials. Include diagrams showing geometry containment and structure’s detector element / geometry info relationships.


The numbering conventions reserve 0 to signify an error. PMTs and RPCs are addressed using a single bit-packed integer that also records the site and detector ID. The packing is completely managed by classes in Conventions/Detectors.h. The site ID is in Conventions/Site.h and the detector ID (type) is in Conventions/DetectorId.h. These are all in the DataModel area.


The primary PMTs in an AD are numbered sequentially as well as by which ring and column they are in. Rings count from 1 to 8 starting at the bottom and going upwards. Columns count from 1 to 24 starting at the column just above the X-axis [2] and continuing counter clockwise if looking down at the AD. The sequential ID number can be calculated by:

column# + 24*(ring# - 1)

Besides the 192 primary PMTs there are 6 calibration PMTs. Their ID numbers are assigned 193 - 198 as 192 +:

  1. top, target-viewing
  2. bottom, target-viewing
  3. top, gamma-catcher-viewing
  4. bottom, gamma-catcher-viewing
  5. top, mineral-oil-viewing
  6. bottom, mineral-oil-viewing

FIXME Add figures showing PMT row and column counts, orientation of ADs in Pool. AD numbers. coordinate system w.r.t pool.

Pool PMTs

Pool PMT counting, coordinate system w.r.t hall.


RPC sensor id convention. Coordinate system w.r.t. hall.

Coordinate System

As described above, every mother volume provides a coordinate system with which to place daughters. For human consumption there are three canonical coordinate system conventions. They are:

Th global coordinate system has its origin at the mid site with X pointing East, Y pointing North and Z pointing up. It is this system in which Geant4 works.
Each site has a local coordinate system with X pointing towards the exit and Z pointing up. Looking down, the X-Y origin is at the center of the tank, mid way between the center of the ADs. The Z origin is at the floor level which is also the nominal water surface. This makes the Pools and ADs at negative Z, the RPCs at positive Z.
Each AD has an even more local coordinate system. The Z origin is mid way between the inside top and bottom of the Stainless Steal vessel. This Z_{AD} = 0 origin is nominally at Z_{Site} =   -(5m - 7.5mm). The Z axis is collinear with the AD cylinder axis and the X and Y are parallel to X and Y of the Site coordinate system, respectively.

The Site and AD coordinate systems are related to each other by translation alone. Site coordinate systems are translated and rotated with respect to the Global system.

Given a global point, the local Site or AD coordinate system can be found using the CoordSysSvc service like:

// Assumed in a GaudiAlgorithm:
IService* isvc = 0;
StatusCode sc = service("CoordSysSvc", isvc, true);
if (sc.isFailure()) handle_error();
ICoordSvc* icss = 0;
sc = isvc->queryInterface(IID_ICoordSysSvc,(void**)&icss);
if (sc.isFailure()) handle_error();

Gaudi::XYZPoint globalPoint = ...;
IDetectorElement* de = icss->coordSysDE(globalPoint);
if (!de) handle_error();
Gaudi::XYZPoint localPoint = de->geometry()->toLocal(globalPoint);

XML Files

Schema, conventions.

Transient Detector Store

In a subclass of GaudiAlgorithm you can simply access the Transient Detector Store (TDS) using getDet() templated method or the SmartDataPtr smart pointer.

// if in a GaudiAlgorithm can use getDet():
DetectorElement* de = getDet<DetectorElement>("/dd/Structure/DayaBay");
LVolume* lv = getDet<LVolume>("/dd/Geometry/AD/lvOIL");

// or if not in a GaudiAlgorithm do it more directly:
IDataProviderSvc* detSvc = 0;
StatusCode sc = service("DetectorDataSvc",detSvc,true);
if (sc.isFailure()) handle_error();

SmartDataPtr<IDetectorElement> topDE(detSvc,"/dd/Structure/DayaBay");
if (!topDE) return handle_error();

// use topDE...


Configuring the Detector Description

The detector description is automatically configured for the user in nuwa.py.

PMT Lookups

Information about PMTs can be looked up using the PmtGeomInfoSvc. You can do the lookup using one of these types of keys:

Structure path
which is the /dd/Structure/... path of the PMT
PMT id
the PMT id that encodes what PMT in what detector at what site the PMT is
the pointer to the DetectorElement that embodies the PMT

The resulting PmtGeomInfo object gives access to global and local PMT positions and directions.


Visualization can be done using our version of LHCb’s PANORAMIX display. This display is started by running:

shell> nuwa.py -V

Take this tour:

  • First, note that in the tree viewer on the left hand side, if you click on a folder icon it opens but if you click on a folder name nothing happens. The opposite is true for the leaf nodes. Clicking on a leaf’s name adds the volume to the viewer.
  • Try openning /dd/Geometry/PMT/lvHemiPmt. You may see a tiny dot in the middle of the viewer or nothing because it is too small.
  • Next click on the yellow/blue eyeball icon on the right. This should zoom you to the PMT.
  • You can then rotate with a mouse drag or the on-screen rollers. If you have a mouse with a wheel it will zoom in/out. Cntl-drag or Shift-drag pans.
  • Click on the red arrow and you can “pick” volumes. A Ctrl-pick will delete a volume. A Shift-click will restore it (note some display artifacts can occur during these delete/restores).
  • Go back to the Michael Jackson glove to do 3D moves.
  • You can clear the scene with Scene->Scene->Clear. You will likely want to do this before displaying any new volumes as each new volume is centered at the same point.
  • Scene->”Frame m” is useful thing to add.
  • Materials can’t be viewed but /dd/Structure can be.
  • Another thing to try: Click on /dd/Structure/DayaBay, select the yellow/blue eye, then the red arror and Ctrl-click away the big cube. This shows the 3 sites. You can drill down them further until you get to the AD pmt arrays.
  • Finally, note that there is still a lot of non-DayaBay “cruft” that should be cleaned out so many menu items are not particularly useful.


[1]We may create a separate PMT logical volume for the AD and one or two for the Pool to handle differences in PMT models actually in use.
[2]Here the X-axis points to the exit of the hall.