Belle II Software  release-05-02-19
GeoPXDCreator Class Reference

The creator for the PXD geometry of the Belle II detector. More...

#include <GeoPXDCreator.h>

Inheritance diagram for GeoPXDCreator:
Collaboration diagram for GeoPXDCreator:

Public Member Functions

 GeoPXDCreator ()
 Constructor of the GeoPXDCreator class.
 
virtual ~GeoPXDCreator ()
 The destructor of the GeoPXDCreator class.
 
virtual void create (const GearDir &content, G4LogicalVolume &topVolume, geometry::GeometryTypes type) override
 The old create member: create the configuration object(s) on the fly and call the geometry creation routine.
 
virtual void createPayloads (const GearDir &content, const IntervalOfValidity &iov) override
 Create the configuration objects and save them in the Database. More...
 
virtual void createFromDB (const std::string &name, G4LogicalVolume &topVolume, geometry::GeometryTypes type) override
 Create the geometry from the Database.
 
virtual VXD::GeoVXDAssembly createLayerSupport ()
 Create support structure for a PXD Layer. More...
 
virtual VXD::GeoVXDAssembly createLadderSupport ()
 Create support structure for a PXD Ladder. More...
 
virtual VXD::GeoVXDAssembly createHalfShellSupport (const PXDGeometryPar &parameters)
 Create support structure for PXD Half Shell, that means everything thagt does not depend on layer or sensor alignment. More...
 
virtual VXD::SensorInfoBasecreateSensorInfo (const VXDGeoSensorPar &sensor) override
 Read the sensor definitions from the database. More...
 
PXDSensorInfoParreadSensorInfo (const GearDir &sensor)
 Read the sensor definitions from the gearbox. More...
 
virtual VXD::SensitiveDetectorBasecreateSensitiveDetector (VxdID sensorID, const VXDGeoSensor &sensor, const VXDGeoSensorPlacement &placement) override
 Return a SensitiveDetector implementation for a given sensor. More...
 
void readHalfShellSupport (const GearDir &support, PXDGeometryPar &pxdGeometryPar)
 Create support structure for VXD Half Shell, that means everything thagt does not depend on layer or sensor alignment. More...
 
virtual void setCurrentLayer (int layer, const VXDGeometryPar &parameters)
 Read parameters for given layer and store in m_ladder.
 
G4Transform3D placeLadder (int ladderID, double phi, G4LogicalVolume *volume, const G4Transform3D &placement, const VXDGeometryPar &parameters)
 Place ladder corresponding to the given ladder id into volume setLayer has to be called first to set the correct layer id.
 
G4Transform3D getPosition (const VXDGeoComponent &mother, const VXDGeoComponent &daughter, const VXDGeoPlacement &placement, bool originCenter)
 Return the position where a daughter component is to be placed. More...
 
G4Transform3D getAlignment (const VXDAlignmentPar &params)
 Get Alignment from paylead object. More...
 
GeoVXDAssembly createSubComponents (const std::string &name, VXDGeoComponent &component, std::vector< VXDGeoPlacement > placements, bool originCenter=true, bool allowOutside=false)
 Place a list of subcomponents into an component. More...
 
G4VSolid * createTrapezoidal (const std::string &name, double width, double width2, double length, double &height, double angle=0)
 Create a trapezoidal solid. More...
 
void createDiamonds (const VXDGeoRadiationSensorsPar &params, G4LogicalVolume &topVolume, G4LogicalVolume &envelopeVolume)
 Create diamond radiation sensors.
 
std::vector< VXDGeoPlacementPargetSubComponents (const GearDir &path)
 Return vector of VXDGeoPlacements with all the components defined inside a given path.
 
virtual void readLadder (int layer, GearDir components, VXDGeometryPar &geoparameters)
 Read parameters for a ladder in layer with given ID from gearbox and layer store them in payload.
 
virtual void readLadderComponents (int layerID, int ladderID, GearDir content, VXDGeometryPar &vxdGeometryPar)
 Read parameters for ladder components and their alignment corresponding to the given ladder id.
 
void readComponent (const std::string &name, GearDir components, VXDGeometryPar &vxdGeometryPar)
 Read parameters for component name from Gearbox into geometry payload. More...
 
void readSubComponents (const std::vector< VXDGeoPlacementPar > &placements, const GearDir &componentsDir, VXDGeometryPar &vxdGeometryPar)
 Read parameters for all components in placement container from Gearbox into payload. More...
 
 BELLE2_DEFINE_EXCEPTION (DBNotImplemented, "Cannot create geometry from Database.")
 Exception that will be thrown in createFromDB if member is not yet implemented by creator.
 

Protected Attributes

std::string m_prefix
 Prefix to prepend to all volume names.
 
GearDir m_alignment
 GearDir pointing to the alignment parameters.
 
GearDir m_components
 GearDir pointing to the toplevel of the components.
 
std::map< std::string, VXDGeoComponentm_componentCache
 Cache of all previously created components.
 
std::map< std::string, VXDGeoSensorm_sensorMap
 Map containing Information about all defined sensor types.
 
VXDGeoLadder m_ladder
 Parameters of the currently active ladder.
 
std::vector< Simulation::SensitiveDetectorBase * > m_sensitive
 List to all created sensitive detector instances.
 
GeoVXDRadiationSensors m_radiationsensors
 Diamond radiation sensor "sub creator".
 
std::string m_defaultMaterial
 Name of the Material to be used for Air.
 
float m_distanceTolerance {(float)(5 * Unit::um)}
 tolerance for Geant4 steps to be merged to a single step
 
float m_electronTolerance {100}
 tolerance for the energy deposition in electrons to be merged in a single step
 
float m_minimumElectrons {10}
 minimum number of electrons to be deposited by a particle to be saved
 
double m_activeStepSize {5 * Unit::um}
 Stepsize to be used inside active volumes.
 
bool m_activeChips {false}
 Make also chips sensitive.
 
bool m_seeNeutrons {false}
 Make sensitive detectors also see neutrons.
 
bool m_onlyPrimaryTrueHits {false}
 If true only create TrueHits from primary particles and ignore secondaries.
 
bool m_onlyActiveMaterial {false}
 If this is true, only active Materials will be placed for tracking studies. More...
 
std::vector< G4UserLimits * > m_UserLimits
 Vector of G4UserLimit pointers.
 
std::string m_currentHalfShell {""}
 Current half-shell being processed (need to know ladder parent for hierarchy)
 
std::map< std::string, Belle2::VxdIDm_halfShellVxdIDs
 Used for translation of half-shell name into a VxdID to consitently handle it in hierarchy. More...
 

Private Member Functions

PXDGeometryPar createConfiguration (const GearDir &param)
 Create a parameter object from the Gearbox XML parameters.
 
void createGeometry (const PXDGeometryPar &parameters, G4LogicalVolume &topVolume, geometry::GeometryTypes type)
 Create the geometry from a parameter object.
 

Private Attributes

std::vector< SensorInfo * > m_SensorInfo
 Vector of points to SensorInfo objects.
 

Detailed Description

The creator for the PXD geometry of the Belle II detector.


Definition at line 40 of file GeoPXDCreator.h.

Member Function Documentation

◆ createHalfShellSupport()

VXD::GeoVXDAssembly createHalfShellSupport ( const PXDGeometryPar parameters)
virtual

Create support structure for PXD Half Shell, that means everything thagt does not depend on layer or sensor alignment.

Parameters
supportReference to the database containing the parameters

Definition at line 563 of file GeoPXDCreator.cc.

564  {
565  VXD::GeoVXDAssembly supportAssembly;
566 
567  if (!parameters.getBuildSupport()) return supportAssembly;
568 
569 
570  // Create the Endlanges
571  const std::vector<VXDPolyConePar> Endflanges = parameters.getEndflanges();
572  for (const VXDPolyConePar& endflange : Endflanges) {
573 
574  double minZ(0), maxZ(0);
575  string name = endflange.getName();
576 
577  // Create a polycone
578  double minPhi = endflange.getMinPhi();
579  double dPhi = endflange.getMaxPhi() - minPhi;
580  int nPlanes = endflange.getPlanes().size();
581  if (nPlanes < 2) {
582  B2ERROR("Polycone needs at least two planes");
583  return supportAssembly;
584  }
585  std::vector<double> z(nPlanes, 0);
586  std::vector<double> rMin(nPlanes, 0);
587  std::vector<double> rMax(nPlanes, 0);
588  int index(0);
589  minZ = numeric_limits<double>::infinity();
590  maxZ = -numeric_limits<double>::infinity();
591 
592  const std::vector<VXDPolyConePlanePar> Planes = endflange.getPlanes();
593  for (const VXDPolyConePlanePar& plane : Planes) {
594  z[index] = plane.getPosZ() / Unit::mm;
595  minZ = min(minZ, z[index]);
596  maxZ = max(maxZ, z[index]);
597  rMin[index] = plane.getInnerRadius() / Unit::mm;
598  rMax[index] = plane.getOuterRadius() / Unit::mm;
599  ++index;
600  }
601 
602  G4VSolid* supportCone = new G4Polycone(name, minPhi, dPhi, nPlanes, z.data(), rMin.data(), rMax.data());
603 
604 
605  //Cutout boxes to make place for modules
606 
607  //We have the z dimensions of the polycon. Let's
608  //add 1mm on each side to make sure we don't run into problems when the
609  //surfaces match
610  minZ -= 1. / Unit::mm;
611  maxZ += 1. / Unit::mm;
612 
613 
614  //Now get the number of cutouts and their size/position/angle
615  int nCutouts = parameters.getNCutOuts();
616  double sizeX = parameters.getCutOutWidth() / Unit::mm / 2.;
617  double sizeY = parameters.getCutOutHeight() / Unit::mm / 2.;
618  double sizeZ = (maxZ - minZ) / 2.;
619  G4ThreeVector origin(
620  parameters.getCutOutShift() / Unit::mm,
621  parameters.getCutOutRPhi() / Unit::mm,
622  minZ + sizeZ
623  );
624 
625  double phi0 = parameters.getCutOutStartPhi();
626  double dphi = parameters.getCutOutDeltaPhi();
627  for (int i = 0; i < nCutouts; ++i) {
628  G4Box* box = new G4Box("Cutout", sizeX, sizeY, sizeZ);
629  G4Transform3D placement = G4RotateZ3D(phi0 + i * dphi) * G4Translate3D(origin);
630  supportCone = new G4SubtractionSolid("PXD Support endflange", supportCone, box, placement);
631  }
632 
633 
634  string materialName = endflange.getMaterial();
635  G4Material* material = geometry::Materials::get(materialName);
636  if (!material) B2FATAL("Material '" << materialName << "', required by PXD component " << name << ", could not be found");
637 
638  G4LogicalVolume* volume = new G4LogicalVolume(supportCone, material, name);
639  geometry::setColor(*volume, "#ccc4");
640  supportAssembly.add(volume);
641 
642  }
643 
644 
645  //Create Carbon cooling tubes
646  {
647  int nTubes = parameters.getNTubes();
648  double minZ = parameters.getTubesMinZ() / Unit::mm;
649  double maxZ = parameters.getTubesMaxZ() / Unit::mm;
650  double minR = parameters.getTubesMinR() / Unit::mm;
651  double maxR = parameters.getTubesMaxR() / Unit::mm;
652  double sizeZ = (maxZ - minZ) / 2.;
653  double shiftX = parameters.getTubesRPhi() / Unit::mm;
654  double shiftY = 0;
655  double shiftZ = minZ + sizeZ;
656  double phi0 = parameters.getTubesStartPhi();
657  double dphi = parameters.getTubesDeltaPhi();
658  string material = parameters.getTubesMaterial();
659 
660  G4Tubs* tube = new G4Tubs("CarbonTube", minR, maxR, sizeZ, 0, 2 * M_PI);
661  G4LogicalVolume* tubeVol = new G4LogicalVolume(tube, geometry::Materials::get(material), "CarbonTube");
662  geometry::setColor(*tubeVol, "#000");
663  for (int i = 0; i < nTubes; ++i) {
664  G4Transform3D placement = G4RotateZ3D(phi0 + i * dphi) * G4Translate3D(shiftX, shiftY, shiftZ);
665  supportAssembly.add(tubeVol, placement);
666  }
667  }
668 
669  return supportAssembly;
670  }

◆ createLadderSupport()

VXD::GeoVXDAssembly createLadderSupport ( )
virtual

Create support structure for a PXD Ladder.

Parameters
layerLayer ID to create the support
supportReference to the database containing the parameters

Definition at line 561 of file GeoPXDCreator.cc.

◆ createLayerSupport()

VXD::GeoVXDAssembly createLayerSupport ( )
virtual

Create support structure for a PXD Layer.

Parameters
layerLayer ID to create the support
supportReference to the database containing the parameters

Definition at line 559 of file GeoPXDCreator.cc.

◆ createPayloads()

virtual void createPayloads ( const GearDir content,
const IntervalOfValidity iov 
)
inlineoverridevirtual

Create the configuration objects and save them in the Database.

If more than one object is needed adjust accordingly

Reimplemented from CreatorBase.

Definition at line 64 of file GeoPXDCreator.h.

64  {
65  DBObjPtr<PXDGeometryPar> dbObj;
66  if (!dbObj) {
67  // Check that we found the object and if not report the problem
68  B2FATAL("No configuration for " << name << " found.");
69  }

◆ createSensitiveDetector()

VXD::SensitiveDetectorBase * createSensitiveDetector ( VxdID  sensorID,
const VXDGeoSensor sensor,
const VXDGeoSensorPlacement placement 
)
overridevirtual

Return a SensitiveDetector implementation for a given sensor.

Parameters
sensorIDSensorID for the sensor
sensorInformation about the sensor to create the Sensitive Detector for
placementInformation on how to place the sensor

Implements GeoVXDCreator.

Definition at line 549 of file GeoPXDCreator.cc.

◆ createSensorInfo()

VXD::SensorInfoBase * createSensorInfo ( const VXDGeoSensorPar sensor)
overridevirtual

Read the sensor definitions from the database.

Parameters
sensorsReference to the database containing the parameters

Implements GeoVXDCreator.

Definition at line 60 of file GeoPXDCreator.cc.

◆ createSubComponents()

GeoVXDAssembly createSubComponents ( const std::string &  name,
VXDGeoComponent component,
std::vector< VXDGeoPlacement placements,
bool  originCenter = true,
bool  allowOutside = false 
)
inherited

Place a list of subcomponents into an component.

If the volume of the given component is NULL, a new container will be created to fit all subcomponents. It will have air as medium. If createContainer is true, then the placements above and below are valid. If at least one subcomponent with this placement is found the whole component is wrapped in a container volume with Air medium which extends above and below to fit the subcomponents

Parameters
nameName for the potential new volume or as prefix for the container to extend the component
componentComponent to fit the subcomponents into
placementsPlacement information for all subcomponents
createContainerif true, subcomponents are allowed to be placed on top or below the component and the whole component will be wrapped in an Air volume fitting all components
Returns
offset in w which was applied to the component when extending it

Definition at line 76 of file GeoVXDCreator.cc.

78  {
79  GeoVXDAssembly assembly;
80  B2DEBUG(100, "Creating component " << name);
81  vector<VXDGeoComponent> subComponents;
82  subComponents.reserve(placements.size());
83  //Go over all subcomponents and check if they will fit inside.
84  //If component.volume is zero we will create one so sum up needed space
85  bool widthResize = component.getWidth() <= 0;
86  bool lengthResize = component.getLength() <= 0;
87  bool heightResize = component.getHeight() <= 0;
88 
89  for (VXDGeoPlacement& p : placements) {
90  //Test component already exists
91  if (m_componentCache.find(p.getName()) == m_componentCache.end()) {
92  B2FATAL("A component is requested that was not created before!");
93  }
94  VXDGeoComponent sub = m_componentCache[p.getName()];
95 
96  B2DEBUG(100, "SubComponent " << p.getName());
97  B2DEBUG(100, boost::format("Placement: u:%1% cm, v:%2% cm, w:%3% + %4% cm") % p.getU() % p.getV() % p.getW() % p.getWOffset());
98  B2DEBUG(100, boost::format("Dimensions: %1%x%2%x%3% cm") % sub.getWidth() % sub.getLength() % sub.getHeight());
99 
100  if (p.getW() == VXDGeoPlacement::c_above || p.getW() == VXDGeoPlacement::c_below) {
101  //Below placement only valid if we are allowed to create a container around component
102  if (!allowOutside) B2FATAL("Cannot place component " << p.getName() << " outside of component " << name);
103  } else if (sub.getHeight() + p.getWOffset() > component.getHeight()) {
104  //Component will not fit heightwise. If we resize the volume anyway than we don't have problems
105  if (!heightResize) {
106  B2FATAL("Subcomponent " << p.getName() << " does not fit into volume: "
107  << "height " << sub.getHeight() << " > " << component.getHeight());
108  }
109  component.getHeight() = sub.getHeight() + p.getWOffset();
110  }
111 
112  //Check if compoent will fit inside width,length. If we can resize do it if needed, otherwise bail
113  double minWidth = max(abs(p.getU() + sub.getWidth() / 2.0), abs(p.getU() - sub.getWidth() / 2.0));
114  double minLength = max(abs(p.getV() + sub.getLength() / 2.0), abs(p.getV() - sub.getLength() / 2.0));
115  if (minWidth > component.getWidth() + component.getWidth() * numeric_limits<double>::epsilon()) {
116  if (!widthResize) {
117  B2FATAL("Subcomponent " << p.getName() << " does not fit into volume: "
118  << "minWidth " << minWidth << " > " << component.getWidth());
119  }
120  component.setWidth(minWidth * 2.0);
121  }
122  if (minLength > component.getLength() + component.getLength() * numeric_limits<double>::epsilon()) {
123  if (!lengthResize) {
124  B2FATAL("Subcomponent " << p.getName() << " does not fit into volume: "
125  << "minLength " << minLength << " > " << component.getLength());
126  }
127  component.setLength(minLength * 2.0);
128  }
129  subComponents.push_back(sub);
130  }
131 
132  //zero dimensions are fine mathematically but we don't want them in the simulation
133  if (component.getWidth() <= 0 || component.getLength() <= 0 || component.getHeight() <= 0) {
134  B2FATAL("At least one dimension of component " << name << " is zero which does not make sense");
135  }
136 
137  //No volume yet, create a new one automatically assuming air material
138  if (!component.getVolume()) {
139  G4VSolid* componentShape = createTrapezoidal(name, component.getWidth(), component.getWidth2(), component.getLength(),
140  component.getHeight());
141  component.setVolume(new G4LogicalVolume(componentShape, Materials::get(component.getMaterial()), name));
142  }
143 
144  B2DEBUG(100, boost::format("Component %1% dimensions: %2%x%3%x%4% cm") % name % component.getWidth() % component.getLength() %
145  component.getHeight());
146 
147  //Ok, all volumes set up, now add them together
148  for (size_t i = 0; i < placements.size(); ++i) {
149  VXDGeoPlacement& p = placements[i];
150  VXDGeoComponent& s = subComponents[i];
151 
152  G4Transform3D transform = getPosition(component, s, p, originCenter);
153  if (p.getW() == VXDGeoPlacement::c_below || p.getW() == VXDGeoPlacement::c_above) {
154  //Add to selected mother (either component or container around component
155  assembly.add(s.getVolume(), transform);
156  } else {
157  new G4PVPlacement(transform, s.getVolume(), name + "." + p.getName(), component.getVolume(), false, i);
158  }
159  }
160 
161  //Set some visibility options for volume. Done here because all components including sensor go through here
162  if (component.getColor().empty()) {
163  B2DEBUG(200, "Component " << name << " is an Air volume, setting invisible");
164  setVisibility(*component.getVolume(), false);
165  } else {
166  B2DEBUG(200, "Component " << name << " color: " << component.getColor());
167  setColor(*component.getVolume(), component.getColor());
168  }
169  B2DEBUG(100, "--> Created component " << name);
170  //Return the difference in W between the origin of the original component and the including container
171  return assembly;
172  }

◆ createTrapezoidal()

G4VSolid * createTrapezoidal ( const std::string &  name,
double  width,
double  width2,
double  length,
double &  height,
double  angle = 0 
)
inherited

Create a trapezoidal solid.

Parameters
widthfull forward width of the shape in mm
width2full backward width of the shape in mm
lengthlength of the shape in mm
[in,out]heightof the shape in mm. If angle is not 0 this value might be changed if the actual height will be smaller due to the slanted edges
angleangle of the sides along w with respect to to the uv plane. 0 means normal box shaped, !=0 means the upper endcap of the solid will be smaller since all edges will be slanted by angle
Returns
A G4VShape which could be a G4Box, a G4Trd or a G4Trap depending on the parameters

Definition at line 256 of file GeoVXDCreator.cc.

◆ getAlignment()

G4Transform3D getAlignment ( const VXDAlignmentPar params)
inherited

Get Alignment from paylead object.

Parameters
paramsPayload object
Returns
Transformation matrix for component

Definition at line 174 of file GeoVXDCreator.cc.

◆ getPosition()

G4Transform3D getPosition ( const VXDGeoComponent mother,
const VXDGeoComponent daughter,
const VXDGeoPlacement placement,
bool  originCenter 
)
inherited

Return the position where a daughter component is to be placed.

Parameters
motherMother component
daugtherDaughter component
Returns
Transformation matrix to place the daughter relative to the origin to the mother

Definition at line 181 of file GeoVXDCreator.cc.

◆ readComponent()

void readComponent ( const std::string &  name,
GearDir  components,
VXDGeometryPar vxdGeometryPar 
)
inherited

Read parameters for component name from Gearbox into geometry payload.

The name is assumed to be unique and Volumes are cached.

Parameters
nameName of the component
componentsPath to components

Definition at line 534 of file GeoVXDCreator.cc.

◆ readHalfShellSupport()

void readHalfShellSupport ( const GearDir support,
PXDGeometryPar pxdGeometryPar 
)

Create support structure for VXD Half Shell, that means everything thagt does not depend on layer or sensor alignment.

Parameters
supportReference to the database containing the parameters

Definition at line 298 of file GeoPXDCreator.cc.

◆ readSensorInfo()

PXDSensorInfoPar * readSensorInfo ( const GearDir sensor)

Read the sensor definitions from the gearbox.

Parameters
sensorsReference to the database containing the parameters

Definition at line 99 of file GeoPXDCreator.cc.

◆ readSubComponents()

void readSubComponents ( const std::vector< VXDGeoPlacementPar > &  placements,
const GearDir componentsDir,
VXDGeometryPar vxdGeometryPar 
)
inherited

Read parameters for all components in placement container from Gearbox into payload.

Parameters
placementscontainer holding names of all components to be cached
componentDirPath to Gearbox where parameters are to be found

Definition at line 525 of file GeoVXDCreator.cc.

Member Data Documentation

◆ m_halfShellVxdIDs

std::map<std::string, Belle2::VxdID> m_halfShellVxdIDs
protectedinherited
Initial value:
{
{{"PXD.Ying"}, {Belle2::VxdID(1, 0, 0, 1)}},
{{"PXD.Yang"}, {Belle2::VxdID(1, 0, 0, 2)}},
{{"SVD.Pat"}, {Belle2::VxdID(3, 0, 0, 1)}},
{{"SVD.Mat"}, {Belle2::VxdID(3, 0, 0, 2)}}
}

Used for translation of half-shell name into a VxdID to consitently handle it in hierarchy.

Definition at line 221 of file GeoVXDCreator.h.

◆ m_onlyActiveMaterial

bool m_onlyActiveMaterial {false}
protectedinherited

If this is true, only active Materials will be placed for tracking studies.

Dead Material will be ignored

Definition at line 215 of file GeoVXDCreator.h.


The documentation for this class was generated from the following files:
Belle2::VXD::GeoVXDCreator::getPosition
G4Transform3D getPosition(const VXDGeoComponent &mother, const VXDGeoComponent &daughter, const VXDGeoPlacement &placement, bool originCenter)
Return the position where a daughter component is to be placed.
Definition: GeoVXDCreator.cc:181
Belle2::VxdID
Class to uniquely identify a any structure of the PXD and SVD.
Definition: VxdID.h:43
Belle2::geometry::setColor
void setColor(G4LogicalVolume &volume, const std::string &color)
Set the color of a logical volume.
Definition: utilities.cc:107
Belle2::VXDGeoPlacement::c_below
@ c_below
Place the component below the mother.
Definition: GeoVXDComponents.h:32
Belle2::VXD::GeoVXDCreator::m_componentCache
std::map< std::string, VXDGeoComponent > m_componentCache
Cache of all previously created components.
Definition: GeoVXDCreator.h:187
Belle2::geometry::Materials::get
static G4Material * get(const std::string &name)
Find given material.
Definition: Materials.h:65
Belle2::geometry::setVisibility
void setVisibility(G4LogicalVolume &volume, bool visible)
Helper function to quickly set the visibility of a given volume.
Definition: utilities.cc:115
Belle2::Unit::mm
static const double mm
[millimeters]
Definition: Unit.h:80
Belle2::VXDGeoPlacement::c_above
@ c_above
Place the component above the mother.
Definition: GeoVXDComponents.h:36
Belle2::VXD::GeoVXDCreator::createTrapezoidal
G4VSolid * createTrapezoidal(const std::string &name, double width, double width2, double length, double &height, double angle=0)
Create a trapezoidal solid.
Definition: GeoVXDCreator.cc:256