10#include <framework/logging/Logger.h>
12#include <arich/dbobjects/ARICHGeoBase.h>
14#include <Math/Vector3D.h>
15#include <Math/Rotation3D.h>
16#include <Math/RotationX.h>
17#include <Math/RotationY.h>
18#include <Math/RotationZ.h>
99 void print(
const std::string& title =
"Aerogel plane parameters:")
const override;
119 void addSupportPlate(
double inR,
double outR,
double thick,
const std::string& material)
169 void addTileParameters(
int ring,
int column,
int layerN,
double n,
double transmL,
double thick,
const std::string& material)
171 m_tiles.push_back({ ring, column, layerN, n, transmL, thick, material });
186 ROOT::Math::Rotation3D rot;
187 ROOT::Math::RotationX rotX(
m_rx);
188 ROOT::Math::RotationY rotY(
m_ry);
189 ROOT::Math::RotationZ rotZ(
m_rz);
190 rot *= rotZ * rotY * rotX;
288 void setAerogelLayer(
unsigned ilayer,
double thick,
double rIndex,
double trLen,
const std::string& material)
291 m_layers.push_back({thick, rIndex, trLen, material});
294 m_layers[ilayer - 1] = {thick, rIndex, trLen, material};
295 }
else B2ERROR(
"ARICHGeoAerogelPlane::setAerogelLayer: please set aerogel layers in consecutive order!");
324 double getRingRadius(
unsigned iRing)
const {
if (iRing >
m_rSize || iRing == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid ring number!");
return m_r[iRing - 1] /
s_unit;}
332 double getRingDPhi(
unsigned iRing)
const {
if (iRing >
m_rSize || iRing == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid ring number!");
return m_dPhi[iRing - 1];}
346 double getLayerRefIndex(
unsigned iLayer)
const {
if (iLayer >
m_nLayers || iLayer == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid aerogel layer number!");
return m_layers[iLayer - 1].refIndex;}
360 const std::string&
getLayerMaterial(
unsigned iLayer)
const {
if (iLayer >
m_nLayers || iLayer == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid aerogel layer number!");
return m_layers[iLayer - 1].material;}
379 if (params.size() != 5) B2ERROR(
"ARICHGeoAerogelPlane:setSimple: 5 parameters are needed for simple configuration!");
472 unsigned getTileParameters(
int ring,
int column,
int layerN,
double& n,
double& transmL,
double& thick,
473 std::string& material)
const;
Geometry parameters of HAPD.
void setTileGap(double gap)
Set gap between aerogel tile and aluminum wall.
double getAerogelZPosition() const
Get starting Z position of first aerogel layer.
std::vector< double > m_r
"r" aluminum wall radiuses
double m_tileGap
gap between aerogel tiles and aluminum walls
bool isConsistent() const override
Consistency check of geometry parameters.
const std::vector< double > & getSimpleParams() const
Get parameters of simple aerogel configuration.
bool isSimple() const
Use simple aerogel configuration.
std::vector< int > m_nAeroSlotsIndividualRing
Number of aerogel slots in individual ring.
double getLayerThickness(unsigned iLayer) const
Get thickness of tiles in i-th aerogel layer.
ClassDefOverride(ARICHGeoAerogelPlane, 3)
ClassDef.
void setNAeroSlotsIndividualRing(const std::vector< int > &nAeroSlotsIndividualRing)
Set vector of numbers of aerogel slots in individual ring.
double m_innerR
inner radius of support plate
double getSupportThickness() const
Get support-plate thickness.
unsigned getNRings() const
Get number of aluminum wall rings (should be number of tile rings + 1).
double getSupportOuterR() const
Get support-plate outer radius.
std::vector< tilestr > m_tiles
parameters of the individual aerogel tiles
double getCompensationARICHairVolumeThick_min() const
Get minimum thickness of the compensation volume with ARICH air.
void setWallHeight(double height)
Set height of aluminum walls between aerogel tiles.
void printSingleTileParameters(unsigned i) const
Print the content of the single tilestr structure.
std::vector< double > m_dPhi
"phi" aluminum wall distances in tile ring
double getImgTubeThickness() const
Get imaginary tube thikness just after aerogel layers used as volume to which tracks are extrapolated...
double getWallHeight() const
Get height of aluminum walls between aerogel tiles.
std::vector< double > m_simpleParams
vector of simple parameters
double m_ry
rotation around y-axis
void print(const std::string &title="Aerogel plane parameters:") const override
Print the content of the class.
std::string m_supportMaterial
material of support plate
double getLayerTrLength(unsigned iLayer) const
Get transmission length of tiles in i-th aerogel layer.
void addSupportPlate(double inR, double outR, double thick, const std::string &material)
Set parameters of aerogel support plate.
double getTotalTileThickness(int ring, int column) const
Get total thickness of the aerogel tiles tile_up + tile_down for a given slot.
void setWallThickness(double thick)
Set thickness of aluminum walls between aerogel tiles.
double getRingDPhi(unsigned iRing) const
Get phi (angle) distance between "phi" aluminum wall between aerogel tiles in i-th tile ring.
ROOT::Math::Rotation3D getRotation() const
Get rotation matrix of aerogel plane in ARICH local frame.
double getRotationY() const
Get angle of rotation around Y axis.
unsigned m_dPhiSize
size of m_dPhi vector
void setWallRadius(std::vector< double > &rs)
Set radiuses at which "r" aluminum walls between tiles are placed (+inner+outter aluminum ring).
double getRotationZ() const
Get angle of rotation around Z axis.
void printTileParameters(const std::string &title="Aerogel tiles parameters:") const
Print the content of the m_tiles vector of tilestr structure.
ARICHGeoAerogelPlane()
Default constructor.
double m_thickness
thickness of support plate
double getTileThickness(int ring, int column, int layerN) const
Get thickness of individual tile.
double m_wallHeight
height (z) of aluminum walls between aerogel tiles
bool m_simple
switch to simple mode
void setAerogelLayer(unsigned ilayer, double thick, double rIndex, double trLen, const std::string &material)
Set parameters of i-th aerogel layer.
void addTileParameters(int ring, int column, int layerN, double n, double transmL, double thick, const std::string &material)
Add parameters of individual tile.
const std::string & getLayerMaterial(unsigned iLayer) const
Get material name of tiles in i-th aerogel layer.
void setCompensationARICHairVolumeThick_min(double compensationARICHairVolumeThick_min)
Set minimum thickness of the compensation volume with ARICH air.
int m_fullAerogelMaterialDescriptionKey
Full aerogel material description key : 1 - use material explicitly for each aerogel tile,...
void setImgTubeThickness(double imgTubeThickness)
Set imaginary tube thikness just after aerogel layers used as volume to which tracks are extrapolated...
const std::string & getSupportMaterial() const
Get material of support plate.
unsigned m_nLayers
number of aerogel tile layers
std::vector< layer > m_layers
parameters averaged properties of the aerogel tiles/layers (up and down)
double getLayerRefIndex(unsigned iLayer) const
Get refractive index of tiles in i-th aerogel layer.
void testGetTileParametersFunction() const
This function tests the getTileParameters function.
double getWallThickness() const
Get thickness of aluminum walls between aerogel tiles.
void setFullAerogelMaterialDescriptionKey(int fullAerogelMaterialDescriptionKey)
Set full aerogel material description key.
double getRingRadius(unsigned iRing) const
Get radius of i-th aluminum ring between aerogel tiles (inner radius of ring).
double m_imgTubeThickness
imaginary tube thikness just after aerogel layers used as volume to which tracks are extrapolated
double m_outerR
outer radius of support plate
double m_wallThickness
thickness of aluminum walls between aerogel tiles
unsigned getNLayers() const
Get number of aerogel layers.
ROOT::Math::XYZVector getPosition() const
Get position vector of aerogel plane in ARICH local frame.
double getSupportInnerR() const
Get support-plate inner radius.
void setPlacement(double x, double y, double z, double rx, double ry, double rz)
Set aerogel plane positioning within ARICH local volume.
double m_rz
rotation around z-axis
void setWallDPhi(std::vector< double > &dphi)
Set phi (angle) distance between "phi" aluminum walls between aerogel tiles for all aerogel tile ring...
double m_compensationARICHairVolumeThick_min
Minimum thickness of the compensation volume with ARICH air.
int getFullAerogelMaterialDescriptionKey() const
Get full aerogel material description key.
unsigned getAerogelTileID(double x, double y) const
Get ID of aerogel tile containing point (x,y) (actually this is tile slot ID, as it is the same for a...
unsigned m_rSize
size of m_r vector
const std::vector< int > & getNAeroSlotsIndividualRing() const
Get vector of numbers of aerogel slots in individual ring.
void setSimple(std::vector< double > ¶ms)
Set to use simple aerogel plane (single square aerogel tile (2 layers), for cosmic test for example).
std::string getTileMaterialName(int ring, int column, int layerN) const
Get material name of individual tile.
double getMaximumTotalTileThickness() const
Get maximum total thickness of the aerogel tiles tile_up + tile_down for all the slots.
double m_rx
rotation around x-axis
double getTileGap() const
Get gap between aerogel tile and aluminum wall.
unsigned getTileParameters(int ring, int column, int layerN, double &n, double &transmL, double &thick, std::string &material) const
Get parameters of individual tile.
double getRotationX() const
Get angle of rotation around X axis.
Base class for geometry parameters.
static double s_unit
conversion unit for length
Abstract base class for different kinds of events.
Struct to hold aerogel layer parameters.
double thickness
Thickness.
std::string material
Material.
double trLength
Transmission length.
double refIndex
Refractive index.
Struct to hold individual aerogel tile parameters.
std::string material
Material.
double transmL
Transmission length.
double n
Refractive index.