2 #ifndef GEAR_FTDLayerLayoutImpl_H
3 #define GEAR_FTDLayerLayoutImpl_H 1
5 #include "gear/FTDLayerLayout.h"
26 vframe(): x(0),y(0),z(0) { ; }
27 vframe(
const double & xval,
const double & yval,
const double & zval):
28 x(xval),y(yval),z(zval) { ; }
50 double petalOpenningAngle {};
69 typedef std::vector<Layer> LayerVec ;
79 virtual int getNPetals(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).nPetals ; }
94 virtual int getNSensors(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).nSensors; }
98 virtual bool isDoubleSided(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).isDoubleSided; }
105 virtual int getSensorType(
int layerIndex)
const {
return _lVec.at(getEquivLayer(layerIndex)).sensorType; }
111 {
return _lVec.at( getEquivLayer(layerIndex) ).petalOpenningAngle ; }
115 virtual double getPhi0(
const int & layerIndex)
const {
return _lVec.at(getEquivLayer(layerIndex)).phi0 ; }
119 virtual double getAlpha(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).alpha ; }
127 {
return _lVec.at(getEquivLayer(layerIndex)).zposition ; }
136 {
return _lVec.at(getEquivLayer(layerIndex)).zoffset ; }
141 {
return _lVec.at(getEquivLayer(layerIndex)).zsign0 ; }
154 {
return _lVec.at( getEquivLayer(layerIndex) ).rInner ; }
160 {
return _lVec.at( getEquivLayer(layerIndex) ).radLength ; }
166 {
return _lVec.at( getEquivLayer(layerIndex) ).thickness ; }
172 virtual double getSupportLengthMin(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).lengthMin ; }
178 virtual double getSupportLengthMax(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).lengthMax ; }
184 virtual double getSupportWidth(
int layerIndex)
const {
return _lVec.at( getEquivLayer(layerIndex) ).width ; }
200 const int & sensorIndex)
const;
205 {
return _sVec.at( getEquivLayer(layerIndex) ).rInner ; }
210 virtual double getSensitiveRadLength(
int layerIndex)
const {
return _sVec.at( getEquivLayer(layerIndex) ).radLength ; }
214 virtual double getSensitiveThickness(
int layerIndex)
const {
return _sVec.at( getEquivLayer(layerIndex) ).thickness ; }
219 virtual double getSensitiveLengthMin(
int layerIndex)
const {
return _sVec.at( getEquivLayer(layerIndex) ).lengthMin ; }
225 virtual double getSensitiveLengthMax(
int layerIndex)
const {
return _sVec.at( getEquivLayer(layerIndex) ).lengthMax ; }
230 virtual double getSensitiveWidth(
int layerIndex)
const {
return _sVec.at( getEquivLayer(layerIndex) ).width ; }
235 virtual void addLayer(
int nPetals,
int nSensors,
bool isDoubleSided ,
int sensorType,
double petalOpAngle,
double phi0,
double alpha,
237 double zposition,
double zoffset,
double zsign0,
240 double supportRinner,
double supportThickness,
241 double supportLengthMin,
double supportLengthMax,
243 double supportRadLength,
246 double sensitiveRinner,
double sensitiveThickness,
247 double sensitiveLengthMin,
double sensitiveLengthMax,
248 double sensitiveWidth,
249 double sensitiveRadLength ) ;
257 virtual double getPhiPetalCd(
const int & layerIndex,
const int & petalIndex)
const;
261 virtual double getMaxRadius(
const int & layerIndex,
const bool & sensitive=
false )
const ;
266 virtual double getStartPhi(
const int & layerIndex,
const int & petalInd,
const bool &sensitive=
false )
const ;
271 virtual double getEndPhi(
const int & layerIndex,
const int & petalInd,
const bool & sensitive=
false )
const ;
280 const double & phi,
const bool & sensitive=
false )
const ;
293 std::vector<vframe> _eL{};
294 std::vector<vframe> _eS{};
304 int getEquivLayer(
const int & layerIndex)
const;
307 std::vector<vframe> getframe(
const Layer & layer );
virtual double getSensitiveThickness(int layerIndex) const
The thickness in mm of the sensitive area in supports in layer layerIndex.
virtual double getThicknessForAngle(const int &layerIndex, const double &tetha, const double &phi, const bool &sensitive=false) const
returns thickness as viewed under the incidence angles phi and theta in layer layerIndex.
virtual int getNLayers() const
The total number of layers (z-positives and z-negatives disks).
virtual double getPhiPetalCd(const int &layerIndex, const int &petalIndex) const
Azimuthal angle of the petal petalIndex Centroid at layer layerIndex.
virtual double getSupportWidth(int layerIndex) const
The width in mm for supports in layer layerIndex - layer indexing starting at 0 from the layer closes...
virtual double getSupportRadLength(int layerIndex) const
The radiation length in the support structure supports of layer layerIndex - layer indexing starts at...
virtual double getSupportRinner(int layerIndex) const
The R-min of the petals in the XY-plane in mm for supports.
virtual int getSensorType(int layerIndex) const
The sensor type of the disk: pixel or micro-strip The return value corresponds to the following value...
virtual double getSensitiveRinner(int layerIndex) const
The R-min of the support in the XY-plane in mm for sensors.
virtual double getSupportThickness(int layerIndex) const
The thickness in mm of the supports in layerIndex - layer indexing starting at 0 for the layer closes...
virtual int getNSensors(int layerIndex) const
The number of sensors per petal on a specific layer - Sensor indexing is defined as follows: (illustr...
virtual double getSensitiveRadLength(int layerIndex) const
The radiation length in sensitive volumes in layer layerIndex - layer indexing starts at 0 for the la...
Abstract description of layers in a FTD detector.
virtual double getZposition(const int &layerIndex) const
The z-position of the centroid of the disk structure.
virtual double getMaxRadius(const int &layerIndex, const bool &sensitive=false) const
returns maximum radius for a given layer
virtual double getSupportZposition(const int &layerIndex, const int &petalIndex) const
The position of the support in z direction in mm for the petalIndex petal in layer layerIndex - layer...
virtual double getZoffsetSign0(const int &layerIndex) const
The z-offset sign for the first petal (petalId=0)
virtual double getPhiHalfDistance(int layerIndex) const
Angular half-width of the petals of a layer.
virtual double getSupportLengthMax(int layerIndex) const
The length (x-direction) in mm for the largest edge of the supports in layerIndex - layer indexing st...
virtual double getPhi0(const int &layerIndex) const
Angular distance (XY plane) of a first petal (whose index is 0)
virtual double getAlpha(int layerIndex) const
Angle of rotation in the own plane of a petal.
Geometry properties of a FTD detector needed for reconstruction code.
virtual double getSensitiveLengthMin(int layerIndex) const
Same as getSupportLengthMin() except for the sensitive part of the support.
virtual double getEndPhi(const int &layerIndex, const int &petalInd, const bool &sensitive=false) const
returns ending phi for first petal in layer layerIndex (on side facing IP)
virtual int getNPetals(int layerIndex) const
The number of petals in the layer layerIndex - layer indexing starts at 0 for the layer closest to IP...
virtual double getSensitiveZposition(const int &layerIndex, const int &petalIndex, const int &sensorIndex) const
The position of the sensitive in z direction in mm for sensor sensorIndex of the petal support petalI...
virtual bool isDoubleSided(int layerIndex) const
Whether the petals on a layer have sensors in front and back.
virtual double getSensitiveLengthMax(int layerIndex) const
Same as getSupportLengthMax() except for the sensitive part of the support.
Abstract description of layers in a FTD detector.
Helper class for layer properties.
virtual double getSensitiveWidth(int layerIndex) const
The width of the sensitive area in supports in layer layerIndex in mm.
virtual void addLayer(int nPetals, int nSensors, bool isDoubleSided, int sensorType, double petalOpAngle, double phi0, double alpha, double zposition, double zoffset, double zsign0, double supportRinner, double supportThickness, double supportLengthMin, double supportLengthMax, double supportWidth, double supportRadLength, double sensitiveRinner, double sensitiveThickness, double sensitiveLengthMin, double sensitiveLengthMax, double sensitiveWidth, double sensitiveRadLength)
Add a new layer at the given position.
virtual double getZoffset(const int &layerIndex) const
The z-offset of the support structure in a staggered the setup - the z position of the even numbered ...
virtual double getSupportLengthMin(int layerIndex) const
The length (x-direction) in mm for the smallest edge of the supports in layerIndex - layer indexing s...
virtual double getStartPhi(const int &layerIndex, const int &petalInd, const bool &sensitive=false) const
returns starting phi for first petal in layer layerIndex (on side facing IP)