 |
Belle II Software
release-05-02-19
|
12 #include <klm/bklm/geometry/GeometryPar.h>
15 #include <klm/dataobjects/bklm/BKLMElementNumbers.h>
16 #include <klm/dataobjects/KLMChannelIndex.h>
17 #include <klm/dbobjects/bklm/BKLMAlignment.h>
20 #include <framework/gearbox/GearDir.h>
21 #include <framework/logging/Logger.h>
22 #include <framework/database/DBObjPtr.h>
23 #include <simulation/background/BkgSensitiveDetector.h>
26 using namespace Belle2::bklm;
32 if (m_Instance)
return m_Instance;
33 B2FATAL(
"instance() called without initialization");
39 if (!m_Instance) m_Instance =
new GeometryPar(content);
45 if (!m_Instance) m_Instance =
new GeometryPar(element);
49 GeometryPar::GeometryPar(
const GearDir& content) :
50 m_DoBeamBackgroundStudy(false),
51 m_BkgSensitiveDetector(nullptr),
61 m_DoBeamBackgroundStudy(false),
62 m_BkgSensitiveDetector(nullptr),
78 for (std::map<int, Module*>::iterator m =
m_Modules.begin(); m !=
m_Modules.end(); ++m) {
delete m->second; }
93 m_Phi = content.getLength(
"Phi");
94 m_NSector = content.getNumberNodes(
"Sectors/Forward/Sector");
96 B2FATAL(
"BKLM GeometryPar::read(): sector array size exceeded:"
103 m_NLayer = content.getNumberNodes(
"Layers/Layer");
105 B2FATAL(
"BKLM GeometryPar::read(): layer array size exceeded:"
115 m_Gap1IronWidth = content.getLength(
"Layers/Layer[@layer=\"1\"]/GapIronWidth");
117 m_GapLength = content.getLength(
"Layers/GapLength");
119 m_NZStrips = content.getInt(
"Layers/NZStrips");
121 m_NZScints = content.getInt(
"Layers/NZScintillators");
124 B2FATAL(
"BKLM GeometryPar::read(): z-scint array size exceeded:"
126 <<
LogVar(
"array size", NZSCINT));
129 B2FATAL(
"BKLM GeometryPar::read(): chimney sector z-scint array size exceeded:"
131 <<
LogVar(
"array size", NZSCINT));
147 m_ScintWidth = content.getLength(
"Module/Scintillator/Width");
148 m_ScintHeight = content.getLength(
"Module/Scintillator/Height");
185 B2FATAL(
"BKLM GeometryPar::read(): readout stations array size exceeded:"
187 <<
LogVar(
"array size", NSTATION));
190 sprintf(name,
"/Readout/Stations/Station[@station=\"%d\"]", station);
191 GearDir stationContent = content;
192 stationContent.
append(name);
212 m_MPPCLength = content.getLength(
"Readout/MPPC/Sensor/Length");
213 m_MPPCWidth = content.getLength(
"Readout/MPPC/Sensor/Width");
214 m_MPPCHeight = content.getLength(
"Readout/MPPC/Sensor/Height");
216 for (
int layer = 1; layer <=
m_NLayer; ++layer) {
217 sprintf(name,
"/Layers/Layer[@layer=\"%d\"]", layer);
218 GearDir layerContent = content;
219 layerContent.
append(name);
227 B2FATAL(
"BKLM GeometryPar::read(): phi-scint array size exceeded:"
228 <<
LogVar(
"in zero-based layer", layer - 1)
230 <<
LogVar(
"array size", NPHISCINT));
232 for (
int scint = 1; scint <=
m_NZScints; ++scint) {
233 sprintf(name,
"/ZScintillators/Scint[@scint=\"%d\"]", scint);
234 GearDir scintContent(layerContent);
235 scintContent.
append(name);
242 for (
int sector = 1; sector <=
m_NSector; ++sector) {
243 sprintf(name,
"/Sectors/%s/Sector[@sector=\"%d\"]", (isForward ?
"Forward" :
"Backward"), sector);
244 GearDir sectorContent(content);
245 sectorContent.
append(name);
247 for (
int layer = 1; layer <=
m_NLayer; ++layer) {
248 GearDir layerContent(sectorContent);
249 sprintf(name,
"/Layer[@layer=\"%d\"]", layer);
250 layerContent.
append(name);
267 m_Phi = element.getPhi();
351 for (
int preamp = 1; preamp <= element.getNReadoutPreamplifierPosition(); ++preamp) {
365 for (
int layer = 1; layer <=
m_NLayer; ++layer) {
366 m_HasRPCs[layer - 1] = element.hasRPCs(layer);
372 for (
int scint = 1; scint <=
m_NZScints; ++scint) {
378 for (
int sector = 1; sector <=
m_NSector; ++sector) {
379 m_SectorRotation[section][sector - 1] = element.getSectorRotation(section, sector);
380 for (
int layer = 1; layer <=
m_NLayer; ++layer) {
384 m_IsFlipped[section][sector - 1][layer - 1] =
false;
385 if (layer <= NSCINTLAYER) {
386 m_IsFlipped[section][sector - 1][layer - 1] = element.isFlipped(section, sector, layer);
399 B2INFO(
"BKLM::GeometryPar: DoBeamBackgroundStudy is enabled");
402 B2DEBUG(20,
"BKLM::GeometryPar: DoBeamBackgroundStudy is disabled");
419 for (
int sector = 1; sector <=
m_NSector; ++sector) {
423 CLHEP::HepRotation rotation;
424 if (!isForward) rotation.rotateX(M_PI);
426 for (
int layer = 1; layer <=
m_NLayer; ++layer) {
427 bool isFlipped =
m_IsFlipped[section][sector - 1][layer - 1];
433 CLHEP::Hep3Vector localOrigin(dx, 0.0, dz);
435 section, sector, layer);
439 (layer == 1 ? 2 : 1),
443 CLHEP::Hep3Vector(0.0, 0.0,
m_OffsetZ) + rotation(localOrigin),
444 localReconstructionShift,
449 m_Modules.insert(std::pair<int, Module*>(moduleID, pModule));
452 localOrigin.setY(dy);
457 CLHEP::Hep3Vector(0.0, 0.0,
m_OffsetZ) + rotation(localOrigin),
458 localReconstructionShift,
464 m_Modules.insert(std::pair<int, Module*>(moduleID, pModule));
466 for (
int scint = 1; scint <=
m_NPhiScints[layer - 1]; ++scint) {
474 for (
int scint = 1; scint <= nZScints; ++scint) {
519 return CLHEP::Hep3Vector(dx, r * tan(M_PI /
m_NSector) - ds, dz);
582 if ((layer <= 0) || (layer >
m_NLayer))
return 0;
616 }
else if (s1 > s2) {
632 CLHEP::Hep3Vector airHalfSize =
getAirHalfSize(layer, hasChimney);
634 CLHEP::Hep3Vector offset((airHalfSize.x() - envelopeHalfSize.x()),
635 (airHalfSize.y() - envelopeHalfSize.y()),
636 -(airHalfSize.z() - envelopeHalfSize.z()));
656 CLHEP::Hep3Vector size;
670 if (bracket == 0)
return z;
674 return (bracket == 1 ? 0.0 : -z);
712 if ((layer <= 0) || (layer >
m_NLayer))
return false;
719 map<int, Module*>::const_iterator iM =
m_Modules.find(moduleID);
720 return (iM ==
m_Modules.end() ?
nullptr : iM->second);
726 map<int, HepGeom::Transform3D>::const_iterator iA =
m_Alignments.find(moduleID);
727 return (iA ==
m_Alignments.end() ? HepGeom::Transform3D() : iA->second);
733 map<int, HepGeom::Transform3D>::const_iterator iDis =
m_Displacements.find(moduleID);
734 return (iDis ==
m_Displacements.end() ? HepGeom::Transform3D() : iDis->second);
740 if (!bklmAlignment.isValid())
741 B2FATAL(
"No BKLM alignment data.");
744 bklmModule != bklmModules.
endBKLM(); ++bklmModule) {
745 uint16_t module = bklmModule.getKLMModuleNumber();
747 bklmAlignment->getModuleAlignment(module);
748 if (alignmentData ==
nullptr)
749 B2FATAL(
"Incomplete BKLM alignment data.");
750 HepGeom::Transform3D alignment;
752 alignmentData->getDeltaU(),
753 alignmentData->getDeltaV(),
754 alignmentData->getDeltaW(),
755 alignmentData->getDeltaAlpha(),
756 alignmentData->getDeltaBeta(),
757 alignmentData->getDeltaGamma());
759 bklmModule.getSection(), bklmModule.getSector(),
760 bklmModule.getLayer());
761 m_Alignments.insert(std::pair<int, HepGeom::Transform3D>(moduleID, alignment));
770 if (!bklmDisplacement.
isValid())
771 B2FATAL(
"No BKLM displaced geometry data in database!");
774 bklmModule != bklmModules.
endBKLM(); ++bklmModule) {
775 uint16_t module = bklmModule.getKLMModuleNumber();
777 bklmDisplacement->getModuleAlignment(module);
778 if (displacementData ==
nullptr)
779 B2FATAL(
"Incomplete BKLM displacement data.");
780 HepGeom::Transform3D displacement;
789 bklmModule.getSection(), bklmModule.getSector(),
790 bklmModule.getLayer());
791 m_Displacements.insert(std::pair<int, HepGeom::Transform3D>(moduleID, displacement));
801 CLHEP::HepRotation dy = CLHEP::HepRotationY(-dAlpha);
802 CLHEP::HepRotation dz = CLHEP::HepRotationZ(-dBeta);
803 CLHEP::HepRotation dx = CLHEP::HepRotationX(-dGamma);
804 CLHEP::Hep3Vector shift(dW, dU, dV);
809 return HepGeom::Transform3D(dy * dz * dx, shift);
int m_NZScintsChimney
number of z-measuring scintillators in a chimney-sector scintillator module
const CLHEP::Hep3Vector getGapHalfSize(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the gap [=slot] of specified layer.
bool hasRPCs(int layer) const
Determine if the sensitive detectors in a given layer are RPCs (=true) or scintillators (=false)
double m_ReadoutCarrierWidth
Width of the readout carrier card.
bool m_ReadoutStationIsPhi[NSTATION]
Selector for phi (true) or z (false) readout station.
bool m_DoBeamBackgroundStudy
Flag for enabling beam background study (=use bkg sensitive-detector function too)
double m_GapInnerRadius
Radius of the inner tangent circle of virtual gap 0 (assuming equal-height layers)
double m_MPPCHousingLength
MPPC housing length.
double m_ReadoutConnectorsPosition
Position of the readout connectors pair along the length of the carrier card.
double m_ReadoutConnectorsWidth
Width of the readout connectors pair.
void addZScint(int scint, double length, double offset, double position)
Add one z-measuring scintillator strip to the module.
int m_NZScints
number of z-measuring scintillators in a standard scintillator module
KLMChannelIndex & endBKLM()
Last channel for BKLM.
double m_ScintHeight
height of one scintillator strip (cm), including the TiO2 coating
double m_OuterRadius
Radius of the circle tangent to the sides of the outer polygon.
double m_ScintTiO2ThicknessTop
thickness (cm) of the TiO2 coating on the top (and bottom) of the scintillator strip
double m_Gap1IronWidth
Width (at the outer radius) of the adjacent structural iron on either side of innermost gap.
void clear()
Clear all geometry parameters.
void readDisplacedGeoFromDB()
Initialize and Updates displacements parameters from DB for geometry constructor, registers itself fo...
double getBracketZPosition(int, bool) const
Get the position of a layer-0 support plate's bracket.
double m_BracketCutoutDphi
angular width of the innermost-module support plate's bracket's cutout
double m_ModulePolystyreneOuterHeight
height of the outer polystyrene-filler sheet
int getNPhiScints(int layer) const
Get the number of phi-measuring scintillators in a scintillator module.
double m_SupportPlateLengthChimney
length of the innermost-module support plate in the chimney sector
double m_ScintTiO2ThicknessSide
thickness (cm) of the TiO2 coating on the left (and right) side of the scintillator strip
const CLHEP::Hep3Vector getChimneyPosition(int layer) const
Get the position of the chimney hole in the specified layer.
double m_SolenoidOuterRadius
Outer radius of the solenoid.
double getAngle(const std::string &path="") const noexcept(false)
Get the parameter path as a double converted to the standard angle unit.
GeometryPar(const GearDir &)
Hidden constructor.
const CLHEP::Hep3Vector getReadoutContainerHalfSize(void) const
Get the size (dx,dy,dz) of the readout container.
double m_Gap1NominalHeight
Nominal height of the innermost gap.
@ c_IndexLevelLayer
Layer.
std::map< int, Module * > m_Modules
map of <volumeIDs, pointers to defined modules>
int getInt(const std::string &path="") const noexcept(false)
Get the parameter path as a int.
double m_ModuleFrameThickness
thickness of a detector module's frame ("C" shape - thickness of vertical leg)
const CLHEP::Hep3Vector getModuleHalfSize(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the detector module of specified layer.
const CLHEP::Hep3Vector getReadoutPreamplifierHalfSize(void) const
Get the size (dx,dy,dz) of the preamplifier card.
double m_BraceWidthChimney
width of the central brace in the middle of the cable-services channel in the chimney sector
double m_ReadoutConnectorsHeight
Height of the readout connectors pair.
double m_ChimneyLength
length along z of the chimney hole
double m_ScintFiberRadius
radius (cm) of the central WLS fiber in the scintillator strip
double m_ModuleReadoutHeight
height of a detector module's readout
double m_SupportPlateLength
length of the innermost-module support plate
~GeometryPar()
Hidden destructor.
double m_ReadoutCarrierLength
Length of the readout carrier card.
float getDeltaV() const
Get shift in V.
double m_ModuleFoamHeight
height of a detector module's transmission-line foam
double m_Phi
Starting angle of the polygon shape.
const CLHEP::Hep3Vector getChimneyHalfSize(int layer) const
Get the size of the chimney hole in the specified layer.
double m_ChimneyShieldInnerRadius
inner radius of the chimney shield
double m_BracketLength
length of the innermost-module support plate's bracket
double m_ReadoutContainerWidth
Width of the readout station's container.
bool m_IsFlipped[2][BKLMElementNumbers::getMaximalSectorNumber()][BKLMElementNumbers::getMaximalLayerNumber()]
Flag to indicate whether a module is flipped (true) or not (false) by 180 degrees about the z axis.
void addPhiScint(int scint, double length, double offset, double position)
Add one phi-measuring scintillator strip to the module.
@ c_ForwardSection
Forward.
The Class for BeamBackground Sensitive Detector.
int m_NReadoutStation
Number of preamplifier readout stations.
double m_BracketRibThickness
thickness of the innermost-module support plate's bracket's rib
double m_ChimneyPipeOuterRadius
outer radius of the chimney pipe
@ c_ChimneySector
Chimney sector: BB3 in 1-based notation; BB2 in 0-based notation.
double m_ModuleGasHeight
height of a detector module's gas gap
double m_LayerHeight
Height of a layer: internal use only.
double m_Gap1InnerRadius
Radius of the inner tangent circle of the innermost gap.
const CLHEP::Hep3Vector getAirHalfSize(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the scintillator detector module's air filler.
double m_GapNominalHeight
Nominal height of outer gaps.
double getPolystyreneOffsetX(void) const
Get the radial offset of the scintillator detector module's active envelope due to difference in poly...
Define the geometry of a BKLM module Each sector [octant] contains Modules.
float getDeltaAlpha() const
Get rotation in alpha.
static constexpr int getMaximalSectorNumber()
Get maximal sector number (1-based).
Provides BKLM geometry parameters for simulation, reconstruction etc (from Gearbox or DataBase)
KLMChannelIndex beginBKLM()
First channel for BKLM.
double getModuleMiddleRadius(int layer) const
Get the radial midpoint of the detector module of specified layer.
double m_GapActualHeight
Actual height of outer gaps.
double m_CablesWidth
width of the cable-services channel at each end
double m_Gap1ActualHeight
Actual height of the innermost gap.
Class for accessing objects in the database.
double m_BracketRibWidth
width of the innermost-module support plate's bracket's rib
float getDeltaU() const
Get shift in U.
const CLHEP::Hep3Vector getReadoutCarrierHalfSize(void) const
Get the size (dx,dy,dz) of the carrier card.
double m_ModuleLength
length along z of the module
double m_ModuleLengthChimney
length along z of the module in the chimney sector
double m_RibThickness
thickness of the radial rib that supports the solenoid / inner detectors
double getGapMiddleRadius(int layer) const
Get the radial midpoint of the gap of specified layer.
double m_ModuleMylarHeight
height of a detector module's mylar insulation
double m_GapLength
Length along z of each gap.
const HepGeom::Transform3D getModuleDisplacedGeo(int section, int sector, int layer) const
Get the displacement transformation of a module.
double m_ChimneyHousingOuterRadius
outer radius of the chimney housing
double m_MPPCLength
MPPC length.
static constexpr int getMaximalLayerNumber()
Get maximal layer number (1-based).
double getLayerOuterRadius(int layer) const
Get the outer radius of specified layer.
float getDeltaBeta() const
Get rotation in alpha.
double m_ReadoutPreamplifierWidth
Width of the preamplifier card.
double m_ZStripWidth[BKLMElementNumbers::getMaximalLayerNumber()]
Width of the z strips on each layer.
double m_ModuleHeight
height of a detector module
bool m_HasRPCs[BKLMElementNumbers::getMaximalLayerNumber()]
Flag to indicate whether layer contains RPCs (true) or scintillators (false)
const HepGeom::Transform3D getModuleAlignment(int section, int sector, int layer) const
Get the alignment transformation of a module.
double m_ReadoutContainerHeight
Height of the readout station's container.
const CLHEP::Hep3Vector getElectrodeHalfSize(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the detector module's electrode of specified layer.
HepGeom::Transform3D getTransformFromRigidBodyParams(double dU, double dV, double dW, double dAlpha, double dBeta, double dGamma)
Convert 6 rigid body params (alignment/displacement) to corresponding Transform3D Angles in radians,...
const CLHEP::Hep3Vector getSupportPlateHalfSize(bool) const
Get the size of the layer-0 support plate.
GearDir is the basic class used for accessing the parameter store.
void append(const std::string &path)
Append something to the current path, modifying the GearDir in place.
std::map< int, HepGeom::Transform3D > m_Displacements
map of <volumeIDs, displacement Transform3D>
Class to store variables with their name which were sent to the logging service.
const CLHEP::Hep3Vector getReadoutConnectorsHalfSize(void) const
Get the size (dx,dy,dz) of the readout connectors pair.
double m_BracketThickness
thickness of the innermost-module support plate's bracket
double m_MPPCWidth
MPPC width.
double m_ReadoutCarrierHeight
Height of the readout carrier card.
int m_NZStripsChimney
number of z-measuring cathode strips in a chimney-sector RPC module
double m_ReadoutPreamplifierLength
Length of the preamplifier card.
The Class for BKLM geometry.
const CLHEP::Hep3Vector getScintEnvelopeOffset(int layer, bool hasChimney) const
Get the shift (dx,dy,dz) of the scintillator detector module's scintillator envelope within its enclo...
double m_ReadoutStationPosition[NSTATION]
Position of each readout station along its relevant axis.
float getDeltaGamma() const
Get rotation in alpha.
std::map< int, HepGeom::Transform3D > m_Alignments
map of <volumeIDs, alignment Transform3D>
double m_Rotation
Global rotation about z of the BKLM.
double m_HalfLength
Half-length along z of the BKLM.
const CLHEP::Hep3Vector getScintEnvelopeHalfSize(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the scintillator detector module's scintillator envelope.
double m_BraceWidth
width of the central brace in the middle of the cable-services channel
void read(const GearDir &)
Get geometry parameters from Gearbox.
BkgSensitiveDetector * m_BkgSensitiveDetector
Pointer to object that creates BeamBkgHits for BKLM.
void setDisplacedGeo(const HepGeom::Transform3D &moduleDisplacedGeo)
Set the displaced geometry Transformation.
double m_MPPCHousingRadius
MPPC housing radius.
double m_ChimneyShieldOuterRadius
outer radius of the chimney shield
int m_NPhiStrips[BKLMElementNumbers::getMaximalLayerNumber()]
Number of phi-readout RPC strips in each layer.
double m_LocalReconstructionShiftX[2][BKLMElementNumbers::getMaximalSectorNumber()][BKLMElementNumbers::getMaximalLayerNumber()]
Reconstruction dx in local system. displacement, not alignment.
const CLHEP::Hep3Vector getModuleInteriorHalfSize2(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the scintillator detector module's polystyrene filler.
int getScintEnvelopeOffsetSign(int layer) const
Get the sign (+/-1) of scintillator-envelope's shift along y axis within its enclosing module for MPP...
double getLength(const std::string &path="") const noexcept(false)
Get the parameter path as a double converted to the standard length unit.
double m_BracketInnerRadius
inner radius of the innermost-module support plate's bracket
int m_NZStrips
number of z-measuring cathode strips in a standard RPC module
double m_ChimneyHousingInnerRadius
inner radius of the chimney housing
double m_LocalReconstructionShiftY[2][BKLMElementNumbers::getMaximalSectorNumber()][BKLMElementNumbers::getMaximalLayerNumber()]
Reconstruction dy in local system. displacement, not alignment.
bool isValid() const
Check whether a valid object was obtained from the database.
double m_ScintBoreRadius
radius (cm) of the central bore in the scintillator strip
static constexpr int getMaximalSectionNumber()
Get maximal section number (0-based).
void readAlignmentFromDB()
Initialize and Updates alignment parameters from DB for reconstruction, that is for Module constructi...
void readFromDB(const BKLMGeometryPar &)
Get geometry parameters from Conditions Database.
double m_SupportPlateWidth
width of the innermost-module support plate
double m_PhiStripWidth[BKLMElementNumbers::getMaximalLayerNumber()]
Width of the phi strips on each layer.
double m_SupportPlateHeight
height of the innermost-module support plate
double m_LocalReconstructionShiftZ[2][BKLMElementNumbers::getMaximalSectorNumber()][BKLMElementNumbers::getMaximalLayerNumber()]
Reconstruction dz in local system. displacement, not alignment.
double m_ReadoutPreamplifierHeight
Height of the preamplifier card.
const CLHEP::Hep3Vector getModuleInteriorHalfSize1(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the detector module's interior volume 1.
double m_Layer1Height
Height of layer 0: internal use only.
double m_ModulePolystyreneInnerHeight
height of the inner polystyrene-filler sheet
double m_ReadoutConnectorsLength
Length of the readout connectors pair.
double m_ChimneyWidth
width of the chimney hole
int getNZScints(bool isChimney) const
Get the number of z-measuring scintillators in a scintillator module.
double m_ChimneyPipeInnerRadius
inner radius of the chimney pipe
double m_ModuleCopperHeight
height of a detector module's copper readout or ground plane
double m_ModuleFrameWidth
width of a detector module's frame ("C" shape - width of horizontal leg)
double m_OffsetZ
Global offset along z of the BKLM.
double m_BracketWidth
width of the innermost-module support plate's bracket
double m_SectorRotation[2][BKLMElementNumbers::getMaximalSectorNumber()]
Global rotation angle of a sector.
void calculate()
Calculate additional geometry parameters.
double m_ReadoutContainerLength
Length of the readout station's container.
int m_NPhiScints[BKLMElementNumbers::getMaximalLayerNumber()]
Number of phi-readout scintillators in each layer.
float getDeltaW() const
Get shift in W.
double m_ScintWidth
width of one scintillator strip (cm), including the TiO2 coating
bool getBool(const std::string &path="") const noexcept(false)
Get the parameter path as a bool.
double m_BracketInset
distance from support plate's end of bracket
const Module * findModule(int section, int sector, int layer) const
Get the pointer to the definition of a module.
double m_ZScintDLength[BKLMElementNumbers::getMaximalLayerNumber()][NZSCINT]
Shortening of the nominal length of the z scintillators.
int m_ScintEnvelopeOffsetSign[BKLMElementNumbers::getMaximalLayerNumber()]
Sign (+/-1) of scintillator-envelope's shift along y axis within its enclosing module for MPPC placem...
double m_ModuleGlassHeight
height of a detector module's glass electrode
const CLHEP::Hep3Vector getGasHalfSize(int layer, bool hasChimney) const
Get the size (dx,dy,dz) of the detector module's gas gaps of specified layer.
double m_ChimneyCoverThickness
thickness of the chimney's iron cover plate
int m_NLayer
Number of layers in one sector.
void addCallback(std::function< void(const std::string &)> callback, bool onDestruction=false)
Add a callback method.
double m_IronActualHeight
Actual height of a layer's stuctural iron.
double m_ModuleGasSpacerWidth
width of a detector module's spacer
double getActiveMiddleRadius(int section, int sector, int layer) const
Get the radial midpoint of the detector module's active volume of specified layer.
double m_MPPCHeight
MPPC height.
void setAlignment(const HepGeom::Transform3D &moduleAlignment)
Set the alignment Transformation.
static uint16_t moduleNumber(int section, int sector, int layer, bool fatalError=true)
Get module number.
double m_ModuleCoverHeight
height of a detector module's aluminum cover
double m_IronNominalHeight
Nominal height of a layer's structural iron.
double m_GapIronWidth
Width (at the outer radius) of the adjacent structural iron on either side of a gap.
std::vector< double > m_ReadoutPreamplifierPosition
Positions of the preamplifiers along the length of the carrier card.
double getLayerInnerRadius(int layer) const
Get the inner radius of specified layer.
int m_NSector
Number of sectors (=8 : octagonal)