SHiP Geometry
SHiP experiment geometry implementation using GeoModel.
Loading...
Searching...
No Matches
Enumerations | Functions | Variables
SHiPGeometry::Calo Namespace Reference

Compile-time parameters of the SHiP calorimeter geometry. More...

Enumerations

enum class  LayerCode {
  WidePVT_H , WidePVT_V , ThinPS_H , ThinPS_V ,
  FibreHPL_Y , FibreHPL_X , Absorber , AirGap
}
 Layer types used in the ECAL/HCAL layer sequences. More...
 

Functions

constexpr double layerThickness (LayerCode code, double absorberThickness)
 Z advance of one layer of the given type (mm).
 
constexpr double sectionZ (std::span< const LayerCode > codes, double absorberThickness)
 Z extent of one calorimeter section (mm).
 
constexpr int sectionVolumeCount (std::span< const LayerCode > codes)
 Child volumes one section contributes to the container, per module.
 

Variables

constexpr double kPlateXY = 2160.0
 
constexpr double kLeadThickness = 3.0
 
constexpr double kScintThickness = 10.0
 
constexpr double kHplThickness = 10.0
 
constexpr double kFiberDiameter = 1.2
 
constexpr double kFiberCoreDiameter = 1.0
 
constexpr double kIronThickness = 170.0
 
constexpr double kAirGap = 1000.0
 Air gap within the ECAL layer sequence (mm).
 
constexpr double kGapEcalHcal = 100.0
 Gap between the ECAL and HCAL stacks (mm).
 
constexpr double kWidePVTBarPitch = 60.0
 
constexpr double kThinPSBarPitch = 10.0
 
constexpr int kModuleNX = 2
 
constexpr int kModuleNY = 3
 
constexpr double kModulePitchX = kPlateXY
 
constexpr double kModulePitchY = kPlateXY
 
constexpr auto kEcalLayers
 ECAL layer sequence.
 
constexpr auto kHcalLayers
 HCAL layer sequence (Absorber means iron here rather than lead).
 
constexpr double kContainerHalfX = 3000.0
 
constexpr double kContainerHalfY = 3500.0
 
constexpr double kContainerHalfZ = 1450.0
 
constexpr double kTotalStackZ
 Total Z extent of one ECAL+gap+HCAL stack (mm).
 
constexpr int kVolsPerModule
 Child volumes one module contributes to the container.
 
constexpr int kWidePVTBarCount = static_cast<int>(kPlateXY / kWidePVTBarPitch)
 Bars per layer, from the plate size and the bar pitch.
 
constexpr int kThinPSBarCount = static_cast<int>(kPlateXY / kThinPSBarPitch)
 

Detailed Description

Compile-time parameters of the SHiP calorimeter geometry.

All lengths are raw doubles in mm (GeoModel's native unit). The invariants of these constants are static_asserts at the bottom of this header.

Enumeration Type Documentation

◆ LayerCode

enum class SHiPGeometry::Calo::LayerCode
strong

Layer types used in the ECAL/HCAL layer sequences.

Enumerator
WidePVT_H 

Wide PVT bar layer, bars along X (H orientation)

WidePVT_V 

Wide PVT bar layer, bars along Y (V orientation)

ThinPS_H 

Thin PS bar layer, bars along X (H orientation)

ThinPS_V 

Thin PS bar layer, bars along Y (V orientation)

FibreHPL_Y 

HPL fibre layer, fibres along Y.

FibreHPL_X 

HPL fibre layer, fibres along X.

Absorber 

Absorber plate (Lead in ECAL, Iron in HCAL)

AirGap 

Air gap (no volume, just advances z cursor)

Function Documentation

◆ layerThickness()

constexpr double SHiPGeometry::Calo::layerThickness ( LayerCode  code,
double  absorberThickness 
)
constexpr

Z advance of one layer of the given type (mm).

The absorber thickness differs between the ECAL (lead) and HCAL (iron) sections.

◆ sectionVolumeCount()

constexpr int SHiPGeometry::Calo::sectionVolumeCount ( std::span< const LayerCode >  codes)
constexpr

Child volumes one section contributes to the container, per module.

Every layer places exactly one volume directly under the container (a layer envelope, or the bare iron plate in the HCAL); AirGap places none and only advances the z cursor.

◆ sectionZ()

constexpr double SHiPGeometry::Calo::sectionZ ( std::span< const LayerCode >  codes,
double  absorberThickness 
)
constexpr

Z extent of one calorimeter section (mm).

Variable Documentation

◆ kAirGap

constexpr double SHiPGeometry::Calo::kAirGap = 1000.0
inlineconstexpr

Air gap within the ECAL layer sequence (mm).

◆ kContainerHalfX

constexpr double SHiPGeometry::Calo::kContainerHalfX = 3000.0
inlineconstexpr

◆ kContainerHalfY

constexpr double SHiPGeometry::Calo::kContainerHalfY = 3500.0
inlineconstexpr

◆ kContainerHalfZ

constexpr double SHiPGeometry::Calo::kContainerHalfZ = 1450.0
inlineconstexpr

◆ kEcalLayers

constexpr auto SHiPGeometry::Calo::kEcalLayers
inlineconstexpr
Initial value:
= [] {
using enum LayerCode;
return std::array{
};
}()
LayerCode
Layer types used in the ECAL/HCAL layer sequences.
Definition CalorimeterConstants.h:19
@ FibreHPL_X
HPL fibre layer, fibres along X.
@ ThinPS_H
Thin PS bar layer, bars along X (H orientation)
@ WidePVT_V
Wide PVT bar layer, bars along Y (V orientation)
@ WidePVT_H
Wide PVT bar layer, bars along X (H orientation)
@ Absorber
Absorber plate (Lead in ECAL, Iron in HCAL)
@ FibreHPL_Y
HPL fibre layer, fibres along Y.
@ ThinPS_V
Thin PS bar layer, bars along Y (V orientation)
@ AirGap
Air gap (no volume, just advances z cursor)

ECAL layer sequence.

◆ kFiberCoreDiameter

constexpr double SHiPGeometry::Calo::kFiberCoreDiameter = 1.0
inlineconstexpr

◆ kFiberDiameter

constexpr double SHiPGeometry::Calo::kFiberDiameter = 1.2
inlineconstexpr

◆ kGapEcalHcal

constexpr double SHiPGeometry::Calo::kGapEcalHcal = 100.0
inlineconstexpr

Gap between the ECAL and HCAL stacks (mm).

◆ kHcalLayers

constexpr auto SHiPGeometry::Calo::kHcalLayers
inlineconstexpr
Initial value:
= [] {
using enum LayerCode;
return std::array{
};
}()

HCAL layer sequence (Absorber means iron here rather than lead).

◆ kHplThickness

constexpr double SHiPGeometry::Calo::kHplThickness = 10.0
inlineconstexpr

◆ kIronThickness

constexpr double SHiPGeometry::Calo::kIronThickness = 170.0
inlineconstexpr

◆ kLeadThickness

constexpr double SHiPGeometry::Calo::kLeadThickness = 3.0
inlineconstexpr

◆ kModuleNX

constexpr int SHiPGeometry::Calo::kModuleNX = 2
inlineconstexpr

◆ kModuleNY

constexpr int SHiPGeometry::Calo::kModuleNY = 3
inlineconstexpr

◆ kModulePitchX

constexpr double SHiPGeometry::Calo::kModulePitchX = kPlateXY
inlineconstexpr

◆ kModulePitchY

constexpr double SHiPGeometry::Calo::kModulePitchY = kPlateXY
inlineconstexpr

◆ kPlateXY

constexpr double SHiPGeometry::Calo::kPlateXY = 2160.0
inlineconstexpr

◆ kScintThickness

constexpr double SHiPGeometry::Calo::kScintThickness = 10.0
inlineconstexpr

◆ kThinPSBarCount

constexpr int SHiPGeometry::Calo::kThinPSBarCount = static_cast<int>(kPlateXY / kThinPSBarPitch)
inlineconstexpr

◆ kThinPSBarPitch

constexpr double SHiPGeometry::Calo::kThinPSBarPitch = 10.0
inlineconstexpr

◆ kTotalStackZ

constexpr double SHiPGeometry::Calo::kTotalStackZ
inlineconstexpr
Initial value:
=
sectionZ(kEcalLayers, kLeadThickness) + kGapEcalHcal + sectionZ(kHcalLayers, kIronThickness)
constexpr double sectionZ(std::span< const LayerCode > codes, double absorberThickness)
Z extent of one calorimeter section (mm).
Definition CalorimeterConstants.h:125
constexpr double kGapEcalHcal
Gap between the ECAL and HCAL stacks (mm).
Definition CalorimeterConstants.h:42

Total Z extent of one ECAL+gap+HCAL stack (mm).

◆ kVolsPerModule

constexpr int SHiPGeometry::Calo::kVolsPerModule
inlineconstexpr
Initial value:
=
sectionVolumeCount(kEcalLayers) + sectionVolumeCount(kHcalLayers)
constexpr int sectionVolumeCount(std::span< const LayerCode > codes)
Child volumes one section contributes to the container, per module.
Definition CalorimeterConstants.h:140

Child volumes one module contributes to the container.

◆ kWidePVTBarCount

constexpr int SHiPGeometry::Calo::kWidePVTBarCount = static_cast<int>(kPlateXY / kWidePVTBarPitch)
inlineconstexpr

Bars per layer, from the plate size and the bar pitch.

◆ kWidePVTBarPitch

constexpr double SHiPGeometry::Calo::kWidePVTBarPitch = 60.0
inlineconstexpr