ATLAS Offline Software
|
#include <SiDetElementsLayer_xk.h>
Public Member Functions | |
SiDetElementsLayer_xk () | |
SiDetElementsLayer_xk (double, double, double, double, double) | |
SiDetElementsLayer_xk (const SiDetElementsLayer_xk &)=default | |
SiDetElementsLayer_xk (SiDetElementsLayer_xk &&)=default | |
~SiDetElementsLayer_xk ()=default | |
SiDetElementsLayer_xk & | operator= (const SiDetElementsLayer_xk &)=default |
SiDetElementsLayer_xk & | operator= (SiDetElementsLayer_xk &&)=default |
const float & | r () const |
const float & | dr () const |
const float & | z () const |
const float & | dz () const |
const float & | dfe () const |
std::vector< SiDetElementLink_xk > & | elements () |
const std::vector< SiDetElementLink_xk > & | elements () const |
void | set (double, double, double, double, double) |
void | add (const SiDetElementLink_xk &) |
int | nElements () const |
void | getBarrelDetElements (const std::array< float, 6 > &startingPoint, const std::array< float, 3 > &searchDirection, std::vector< InDet::SiDetElementLink_xk::ElementWay > &lDE, std::vector< bool > &used) const |
Get barrel detector elements Input parameters: startPoint[0] - X searchDirection[0] - Ax startPoint[1] - Y searchDirection[1] - Ay startPoint[2] - Z searchDirection[2] - Az startPoint[3] - R startPoint[4] - width startPoint[5] - step Will populate 'lDE' and update 'used' with the detector elements compatible with a crossing by a straight trajectory starting at 'startPoint' and moving in direction 'searchDirection'. More... | |
void | getITkBarrelDetElements (const std::array< float, 6 > &startingPoint, const std::array< float, 3 > &searchDirection, std::vector< InDet::SiDetElementLink_xk::ElementWay > &lDE, std::vector< bool > &used) const |
void | getEndcapDetElements (const std::array< float, 6 > &startingPoint, const std::array< float, 3 > &searchDirection, std::vector< InDet::SiDetElementLink_xk::ElementWay > &lDE, std::vector< bool > &used) const |
void | getITkEndcapDetElements (const std::array< float, 6 > &startingPoint, const std::array< float, 3 > &searchDirection, std::vector< InDet::SiDetElementLink_xk::ElementWay > &lDE, std::vector< bool > &used) const |
void | sortDetectorElements () |
Protected Member Functions | |
void | getDetElements (const std::array< float, 6 > &startingPoint, const std::array< float, 3 > &searchDirection, float phiCrossing, float reducedRoadWidth, std::vector< InDet::SiDetElementLink_xk::ElementWay > &lDE, std::vector< bool > &used) const |
internal helper which resolves the phi-multiplicity of elements within a layer. More... | |
Protected Attributes | |
float | m_z |
float | m_dz |
float | m_r |
float | m_dr |
float | m_dfe |
std::vector< SiDetElementLink_xk > | m_elements |
Definition at line 27 of file SiDetElementsLayer_xk.h.
|
inline |
|
inline |
|
default |
|
default |
|
default |
|
inline |
Definition at line 166 of file SiDetElementsLayer_xk.h.
|
inline |
Definition at line 56 of file SiDetElementsLayer_xk.h.
|
inline |
Definition at line 53 of file SiDetElementsLayer_xk.h.
|
inline |
Definition at line 55 of file SiDetElementsLayer_xk.h.
|
inline |
Definition at line 57 of file SiDetElementsLayer_xk.h.
|
inline |
Definition at line 58 of file SiDetElementsLayer_xk.h.
void InDet::SiDetElementsLayer_xk::getBarrelDetElements | ( | const std::array< float, 6 > & | startingPoint, |
const std::array< float, 3 > & | searchDirection, | ||
std::vector< InDet::SiDetElementLink_xk::ElementWay > & | lDE, | ||
std::vector< bool > & | used | ||
) | const |
Get barrel detector elements Input parameters: startPoint[0] - X searchDirection[0] - Ax startPoint[1] - Y searchDirection[1] - Ay startPoint[2] - Z searchDirection[2] - Az startPoint[3] - R startPoint[4] - width startPoint[5] - step Will populate 'lDE' and update 'used' with the detector elements compatible with a crossing by a straight trajectory starting at 'startPoint' and moving in direction 'searchDirection'.
The two additional elements of startPoint are the road width used as tolerance in the crossing test (in mm) and the step (distance to travel to the module).
In the following, identify where we cross the layer in r by solving the quadratic equation ( startingPoint_xy + s * searchDirection_xy )² = r_layer²
solutions of our equation
pick one: if both solution occur for the same direction, we pick the crossing that occurs first
otherwise, pick the one in the positive direction
Z-coordinate of the layer crossing
radial component of the search direction
Check if we miss the layer completely: If the distance of our crossing point to the layer centre along z exceeds the half width in z of the layer by more than a tolerance obtained as the z movement expected when traversing along the layer radial half-width (dr_half / tan(theta_searchDirection)) plus the road width divided by sin(theta)
Phi coordinate of the crossing
road width divided by the radius of the layer
Definition at line 31 of file SiDetElementsLayer_xk.cxx.
|
protected |
internal helper which resolves the phi-multiplicity of elements within a layer.
Same logic as above. Extra args: 'phiCrossing' is the phi coordinate of the layer crossing and 'reducedRoadWidth' is a phi tolerance obtained by dividing the search road width by the radius of the layer
iteratively search for the index of the crossing by splitting the remaining search region in half
first, rotate in the positive phi direction
if detector element i on this layer is not already used for this road
project delta phi into -pi..pi
dPhi must be compatible with the phi half-width within a tolerance specified by the road width divided by the radius
intersect our projection with the detector element. Output: intersectionOutcome[0] - close distance in azimuthal direction intersectionOutcome[1] - close distance in r or z direction intersectionOutcome[2] - step to detector element
closest distance in both directions has to be compatible within the road width
we found a compatible detector element - add to our list
loop around if we have to
stop when we have tried all detector elements
we get here by triggering the 'break' clause in the positive-direction loop above
now rotate in the negative phi direction
loop around at zero
stop at full circle
Definition at line 311 of file SiDetElementsLayer_xk.cxx.
void InDet::SiDetElementsLayer_xk::getEndcapDetElements | ( | const std::array< float, 6 > & | startingPoint, |
const std::array< float, 3 > & | searchDirection, | ||
std::vector< InDet::SiDetElementLink_xk::ElementWay > & | lDE, | ||
std::vector< bool > & | used | ||
) | const |
solve the linear equation z_layer = z_startingPont + s * z_searchDirection
obtain x,y,r coordinates of the layer crossing in z
search direction z (== cos(theta_search)) * radius of starting point
Kick out cases where we do not expect to cross the layer at all. Do this by checking if the distance of the radial location of the z-crossing from the layer centre in r exceeds the r-half-width by more than the r-movement expected when traversing the half-width in z + the search road width
Definition at line 206 of file SiDetElementsLayer_xk.cxx.
void InDet::SiDetElementsLayer_xk::getITkBarrelDetElements | ( | const std::array< float, 6 > & | startingPoint, |
const std::array< float, 3 > & | searchDirection, | ||
std::vector< InDet::SiDetElementLink_xk::ElementWay > & | lDE, | ||
std::vector< bool > & | used | ||
) | const |
In the following, identify where we cross the layer in r by solving the quadratic equation ( startingPoint_xy + s * searchDirection_xy )² = r_layer²
solutions of our equation
pick one: if both solution occur for the same direction, we pick the crossing that occurs first
otherwise, pick the one in the positive direction
Z-coordinate of the layer crossing
radial component of the search direction
Check if we miss the layer completely: If the distance of our crossing point to the layer centre along z exceeds the half width in z of the layer by more than a tolerance obtained as the z movement expected when traversing along the layer radial half-width (dr_half / tan(theta_searchDirection)) plus the road width divided by sin(theta)
road width divided by the radius of the layer
Phi coordinate of the crossing
Definition at line 94 of file SiDetElementsLayer_xk.cxx.
void InDet::SiDetElementsLayer_xk::getITkEndcapDetElements | ( | const std::array< float, 6 > & | startingPoint, |
const std::array< float, 3 > & | searchDirection, | ||
std::vector< InDet::SiDetElementLink_xk::ElementWay > & | lDE, | ||
std::vector< bool > & | used | ||
) | const |
solve the linear equation z_layer = z_startingPont + s * z_searchDirection
obtain x,y,r coordinates of the layer crossing in z
search direction z (== cos(theta_search)) * radius of starting point
Kick out cases where we do not expect to cross the layer at all. Do this by checking if the distance of the radial location of the z-crossing from the layer centre in r exceeds the r-half-width by more than the r-movement expected when traversing the half-width in z + the search road width
Definition at line 233 of file SiDetElementsLayer_xk.cxx.
|
inline |
Definition at line 171 of file SiDetElementsLayer_xk.h.
|
default |
|
default |
|
inline |
Definition at line 52 of file SiDetElementsLayer_xk.h.
|
inline |
void InDet::SiDetElementsLayer_xk::sortDetectorElements | ( | ) |
Definition at line 402 of file SiDetElementsLayer_xk.cxx.
|
inline |
Definition at line 54 of file SiDetElementsLayer_xk.h.
|
protected |
Definition at line 117 of file SiDetElementsLayer_xk.h.
|
protected |
Definition at line 116 of file SiDetElementsLayer_xk.h.
|
protected |
Definition at line 114 of file SiDetElementsLayer_xk.h.
|
protected |
Definition at line 118 of file SiDetElementsLayer_xk.h.
|
protected |
Definition at line 115 of file SiDetElementsLayer_xk.h.
|
protected |
Definition at line 113 of file SiDetElementsLayer_xk.h.