10 #include <framework/logging/Logger.h>
12 #include <arich/dbobjects/ARICHGeoBase.h>
15 #include <TRotation.h>
72 void print(
const std::string& title =
"Aerogel plane parameters:")
const override;
92 void addSupportPlate(
double inR,
double outR,
double thick,
const std::string& material)
128 void addTileParameters(
int ring,
int column,
int layerN,
double n,
double transmL,
double thick,
const std::string& material)
130 m_tiles.push_back({ ring, column, layerN, n, transmL, thick, material });
230 void setAerogelLayer(
unsigned ilayer,
double thick,
double rIndex,
double trLen,
const std::string& material)
233 m_layers.push_back({thick, rIndex, trLen, material});
236 m_layers[ilayer - 1] = {thick, rIndex, trLen, material};
237 }
else B2ERROR(
"ARICHGeoAerogelPlane::setAerogelLayer: please set aerogel layers in consecutive order!");
263 double getRingRadius(
unsigned iRing)
const {
if (iRing >
m_rSize || iRing == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid ring number!");
return m_r[iRing - 1] /
s_unit;}
270 double getRingDPhi(
unsigned iRing)
const {
if (iRing >
m_rSize || iRing == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid ring number!");
return m_dPhi[iRing - 1];}
284 double getLayerRefIndex(
unsigned iLayer)
const {
if (iLayer >
m_nLayers || iLayer == 0) B2ERROR(
"ARICHGeoAerogelPlane: invalid aerogel layer number!");
return m_layers[iLayer - 1].refIndex;}
298 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;}
315 if (params.size() != 5) B2ERROR(
"ARICHGeoAerogelPlane:setSimple: 5 parameters are needed for simple configuration!");
317 m_simpleParams = params;
335 return m_simpleParams;
389 unsigned getTileParameters(
int ring,
int column,
int layerN,
double& n,
double& transmL,
double& thick,
390 std::string& material)
const;
514 std::vector<double> m_simpleParams;
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.
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 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 it contains position of the tile its refractive ind...
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.
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 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.
TRotation getRotation() const
get rotation matrix of aerogel plane in ARICH local frame
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.
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)
const std::string & getLayerMaterial(unsigned iLayer) const
Get material name of tiles i-th aerogel layer.
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 it contains position of the tile its ref...
ARICHGeoAerogelPlane()
Default constructor.
double m_thickness
thickness of support plate
const std::string & getSupportMaterial() const
Get material 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
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.
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...
unsigned m_nLayers
number of aerogel tile layers
std::vector< layer > m_layers
parameters averaged properties of the aerogel tiles/layers (up and down)
TVector3 getPosition() const
get position vector of aerogel plane in ARICH local frame
double getLayerRefIndex(unsigned iLayer) const
Get refractive index of tiles 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.
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
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.
const std::vector< int > & getNAeroSlotsIndividualRing() const
Get vector of numbers of aerogel slots in individual ring.
const std::vector< double > & getSimpleParams() const
Get parameters of simple aerogel configuration.
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 Only for averaged properties of the aerogel tiles/layers.
Struct to hold individual aerogel tile parameters layer : 0 - up layer : 1 - down.