allpix::DetectorModel
Module: Detector models
Base of all detector models. More…
#include <DetectorModel.hpp>
Inherited by allpix::PixelDetectorModel, allpix::RadialStripDetectorModel
Public Classes
Name | |
---|---|
class | Implant Helper class to hold implant definitions for a detector model. |
Public Functions
Name | |
---|---|
std::shared_ptr< DetectorModel > | factory(const std::string & name, const ConfigReader & reader) Factory to dynamically create detector model objects. |
template <class T > bool |
is() Helper method to determine if this detector model is of a given type The template parameter needs to be specified specifically, i.e. if(model->is |
DetectorModel(std::string type, std::shared_ptr< DetectorAssembly > assembly, const ConfigReader & reader, const Configuration & config) Constructs the base detector model. |
|
virtual | ~DetectorModel() =default Essential virtual destructor. |
std::vector< Configuration > | getConfigurations() const Get the configuration associated with this model. |
const std::string & | getType() const Get the type of the model. |
const std::shared_ptr< DetectorAssembly > | getAssembly() const |
virtual ROOT::Math::XYZPoint | getMatrixCenter() const Get local coordinate of the position and rotation center in global frame. |
virtual ROOT::Math::XYZPoint | getModelCenter() const Get local coordinate of the geometric center of the model. |
virtual ROOT::Math::XYZVector | getSize() const Get size of the wrapper box around the model that contains all elements. |
ROOT::Math::DisplacementVector2D< ROOT::Math::Cartesian2D< unsigned int > > | getNPixels() const Get number of pixels (replicated blocks in generic sensors) |
const ROOT::Math::XYVector & | getPixelSize() const Get size of a single pixel. |
Pixel::Type | getPixelType() const Get type of the pixels. |
const std::vector< Implant > & | getImplants() const Return all implants. |
virtual ROOT::Math::XYZVector | getMatrixSize() const Get total size of the pixel grid. |
virtual ROOT::Math::XYZVector | getSensorSize() const Get size of the sensor. |
virtual ROOT::Math::XYZPoint | getSensorCenter() const Get center of the sensor in local coordinates. |
SensorMaterial | getSensorMaterial() const Get the material of the sensor. |
virtual ROOT::Math::XYZVector | getChipSize() const Get size of the chip. |
virtual ROOT::Math::XYZPoint | getChipCenter() const Get center of the chip in local coordinates. |
virtual std::vector< SupportLayer > | getSupportLayers() const Return all layers of support. |
virtual bool | isWithinSensor(const ROOT::Math::XYZPoint & local_pos) const =0 Returns if a local position is within the sensitive device. |
virtual bool | isOnSensorBoundary(const ROOT::Math::XYZPoint & local_pos) const =0 Returns if a local position is on the sensor boundary. |
virtual ROOT::Math::XYZPoint | getSensorIntercept(const ROOT::Math::XYZPoint & inside, const ROOT::Math::XYZPoint & outside) const =0 Calculate exit point of step outside sensor volume from one point inside the sensor (before step) and one point outside (after step). |
virtual std::optional< Implant > | isWithinImplant(const ROOT::Math::XYZPoint & local_pos) const Returns if a local position is within the pixel implant region of the sensitive device. |
ROOT::Math::XYZPoint | getImplantIntercept(const Implant & implant, const ROOT::Math::XYZPoint & outside, const ROOT::Math::XYZPoint & inside) const Calculate entry point of step into impant volume from one point outside the implant (before step) and one point inside (after step). |
virtual bool | isWithinMatrix(const Pixel::Index & pixel_index) const =0 Returns if a pixel index is within the grid of pixels defined for the device. |
virtual bool | isWithinMatrix(const int x, const int y) const =0 Returns if a set of pixel coordinates is within the grid of pixels defined for the device. |
virtual bool | isWithinMatrix(const ROOT::Math::XYZPoint & position) const Returns if a position is within the grid of pixels defined for the device. |
virtual ROOT::Math::XYZPoint | getPixelCenter(const int x, const int y) const =0 Returns a pixel center in local coordinates. |
virtual std::pair< int, int > | getPixelIndex(const ROOT::Math::XYZPoint & local_pos) const =0 Return X,Y indices of a pixel corresponding to a local position in a sensor. |
virtual std::set< Pixel::Index > | getNeighbors(const Pixel::Index & idx, const size_t distance) const =0 Return a set containing all pixels neighboring the given one with a configurable maximum distance. |
virtual bool | areNeighbors(const Pixel::Index & seed, const Pixel::Index & entrant, const size_t distance) const =0 Check if two pixel indices are neighbors to each other. |
Protected Functions
Name | |
---|---|
void | setNPixels(ROOT::Math::DisplacementVector2D< ROOT::Math::Cartesian2D< unsigned int » val) Set number of pixels (replicated blocks in generic sensors) |
void | setPixelSize(ROOT::Math::XYVector val) Set the size of a pixel. |
void | setSensorThickness(double val) Set the thickness of the sensor. |
void | setSensorExcessTop(double val) Set the excess at the top of the sensor (positive y-coordinate) |
void | setSensorExcessRight(double val) Set the excess at the right of the sensor (positive x-coordinate) |
void | setSensorExcessBottom(double val) Set the excess at the bottom of the sensor (negative y-coordinate) |
void | setSensorExcessLeft(double val) Set the excess at the left of the sensor (negative x-coordinate) |
Protected Attributes
Name | |
---|---|
std::string | type_ |
ROOT::Math::DisplacementVector2D< ROOT::Math::Cartesian2D< unsigned int > > | number_of_pixels_ |
ROOT::Math::XYVector | pixel_size_ |
Pixel::Type | pixel_type_ |
double | sensor_thickness_ |
std::array< double, 4 > | sensor_excess_ |
SensorMaterial | sensor_material_ |
std::shared_ptr< DetectorAssembly > | assembly_ |
std::vector< Implant > | implants_ |
std::vector< SupportLayer > | support_layers_ |
Detailed Description
Base of all detector models.
Implements the minimum required for a detector model. A model always has a pixel grid with a specific pixel size. The pixel grid defines the base size of the sensor, chip and support. Excess length can be specified. Every part of the detector model has a defined center and size which can be overloaded by specialized detector models. The basic detector model also defines the rotation center in the local coordinate system.
Public Functions Documentation
function factory
Factory to dynamically create detector model objects.
Parameters:
- name Name of the model
- reader Reader with the configuration for this model
Return: Detector model instantiated from the configuration
function is
Helper method to determine if this detector model is of a given type The template parameter needs to be specified specifically, i.e. if(model->is
Return: Boolean indication whether this model is of the given type or not
function DetectorModel
Constructs the base detector model.
Parameters:
- type Name of the model type
- assembly Detector assembly object with information about ASIC and packaging
- reader Configuration reader with description of the model
- config Configuration holding the empty section of the configuration file
function ~DetectorModel
Essential virtual destructor.
function getConfigurations
Get the configuration associated with this model.
Return: Configuration used to construct the model
function getType
Get the type of the model.
Return: Model type
function getAssembly
function getMatrixCenter
Get local coordinate of the position and rotation center in global frame.
Note: It can be a bit counter intuitive that this is not usually the origin, neither the geometric center of the model, but the geometric center of the sensitive part. This way, the position of the sensing element is invariant under rotations
Reimplemented by: allpix::HexagonalPixelDetectorModel::getMatrixCenter, allpix::RadialStripDetectorModel::getMatrixCenter
The center coordinate corresponds to the position in the global frame.
function getModelCenter
Get local coordinate of the geometric center of the model.
Note: This returns the center of the geometry model, i.e. including all support layers, passive readout chips et cetera.
function getSize
Get size of the wrapper box around the model that contains all elements.
Return: Size of the detector model
Reimplemented by: allpix::RadialStripDetectorModel::getSize
All elements of the model are covered by a box centered around DetectorModel::getModelCenter. This means that the extend of the model should be calculated using the geometrical center as reference, not the position returned by DetectorModel::getMatrixCenter.
function getNPixels
Get number of pixels (replicated blocks in generic sensors)
Return: Number of two dimensional pixels
function getPixelSize
Get size of a single pixel.
Return: Size of a pixel
function getPixelType
Get type of the pixels.
Return: TYpe of the pixels indicating their shape
function getImplants
Return all implants.
Return: List of all the implants
function getMatrixSize
Get total size of the pixel grid.
Return: Size of the pixel grid
Note: This is basically a 2D method, but provided in 3D because it is primarily used there
Warning: The grid has zero thickness
Reimplemented by: allpix::HexagonalPixelDetectorModel::getMatrixSize
function getSensorSize
Get size of the sensor.
Return: Size of the sensor
Calculated from pixel grid size, sensor excess and sensor thickness
function getSensorCenter
Get center of the sensor in local coordinates.
Return: Center of the sensor
Center of the sensor with excess taken into account
function getSensorMaterial
Get the material of the sensor.
Return: Material of the sensor
function getChipSize
Get size of the chip.
Return: Size of the chip
Calculated from pixel grid size, sensor excess and chip thickness
function getChipCenter
Get center of the chip in local coordinates.
Return: Center of the chip
Center of the chip calculated from chip excess and sensor offset
function getSupportLayers
Return all layers of support.
Return: List of all the support layers
This method internally computes the correct center of all the supports by stacking them in linear order on both the chip and the sensor side.
function isWithinSensor
Returns if a local position is within the sensitive device.
Parameters:
- local_pos Position in local coordinates of the detector model
Return: True if a local position is within the sensor, false otherwise
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::PixelDetectorModel::isWithinSensor, allpix::RadialStripDetectorModel::isWithinSensor
function isOnSensorBoundary
Returns if a local position is on the sensor boundary.
Parameters:
- local_pos Position in local coordinates of the detector model
Return: True if a local position is on the sensor boundary, false otherwise
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::PixelDetectorModel::isOnSensorBoundary, allpix::RadialStripDetectorModel::isOnSensorBoundary
function getSensorIntercept
Calculate exit point of step outside sensor volume from one point inside the sensor (before step) and one point outside (after step).
Parameters:
- inside Position before the step, inside the sensor volume
- outside Position after the step, outside the sensor volume
Exceptions:
- std::invalid_argument if no intersection of track segment with sensor volume can be found
Return: Exit point of the sensor in local coordinates
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::PixelDetectorModel::getSensorIntercept, allpix::RadialStripDetectorModel::getSensorIntercept
function isWithinImplant
Returns if a local position is within the pixel implant region of the sensitive device.
Parameters:
- local_pos Position in local coordinates of the detector model
Return: Either the implant in which the position is located, or false
If the implant is defined as 3D volume in the detector model, this method returns true if the given position is found within the implant volume. If the impland is configured with two dimensions only, i.e. an area on the sensor surface, the additional depth parameter is used to create a volume within which carriers are considered inside the implant.
function getImplantIntercept
Calculate entry point of step into impant volume from one point outside the implant (before step) and one point inside (after step).
Parameters:
- implant The implant the intercept should be calculated for
- outside Position before the step, outside the implant volume
- inside Position after the step, inside the implant volume
Exceptions:
- std::invalid_argument if no intersection of track segment with implant volume can be found
Return: Entry point in implant in local coordinates of the sensor
function isWithinMatrix
Returns if a pixel index is within the grid of pixels defined for the device.
Parameters:
- pixel_index Pixel index to be checked
Return: True if pixel_index is within the pixel grid, false otherwise
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::HexagonalPixelDetectorModel::isWithinMatrix, allpix::PixelDetectorModel::isWithinMatrix, allpix::RadialStripDetectorModel::isWithinMatrix
function isWithinMatrix
Returns if a set of pixel coordinates is within the grid of pixels defined for the device.
Parameters:
- x X- (or column-) coordinate to be checked
- y Y- (or row-) coordinate to be checked
Return: True if pixel coordinates are within the pixel grid, false otherwise
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::HexagonalPixelDetectorModel::isWithinMatrix, allpix::PixelDetectorModel::isWithinMatrix, allpix::RadialStripDetectorModel::isWithinMatrix
function isWithinMatrix
Returns if a position is within the grid of pixels defined for the device.
Parameters:
- position Position in local coordinates of the detector model
Return: True if position within the pixel grid, false otherwise
Note: This method is virtual and can be implemented by detector models for faster calculations
Reimplemented by: allpix::PixelDetectorModel::isWithinMatrix
function getPixelCenter
Returns a pixel center in local coordinates.
Parameters:
- x X- (or column-) coordinate of the pixel
- y Y- (or row-) coordinate of the pixel
Return: Coordinates of the pixel center
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::HexagonalPixelDetectorModel::getPixelCenter, allpix::PixelDetectorModel::getPixelCenter, allpix::RadialStripDetectorModel::getPixelCenter
function getPixelIndex
Return X,Y indices of a pixel corresponding to a local position in a sensor.
Parameters:
- local_pos Position in local coordinates of the detector model
Return: X,Y pixel indices
Note:
- No checks are performed on whether these indices represent an existing pixel or are within the pixel matrix.
- This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::PixelDetectorModel::getPixelIndex, allpix::HexagonalPixelDetectorModel::getPixelIndex, allpix::RadialStripDetectorModel::getPixelIndex
function getNeighbors
Return a set containing all pixels neighboring the given one with a configurable maximum distance.
Parameters:
- idx Index of the pixel in question
- distance Distance for pixels to be considered neighbors
Return: Set of neighboring pixel indices, including the initial pixel
Note:
- The returned set should always also include the initial pixel indices the neighbors are calculated for
- This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::HexagonalPixelDetectorModel::getNeighbors, allpix::PixelDetectorModel::getNeighbors, allpix::RadialStripDetectorModel::getNeighbors
function areNeighbors
Check if two pixel indices are neighbors to each other.
Parameters:
- seed Initial pixel index
- entrant Entrant pixel index to be tested
- distance Distance for pixels to be considered neighbors
Return: Boolean whether pixels are neighbors or not
Note: This method is purely virtual and must be implemented by the respective concrete detector model classes
Reimplemented by: allpix::HexagonalPixelDetectorModel::areNeighbors, allpix::PixelDetectorModel::areNeighbors, allpix::RadialStripDetectorModel::areNeighbors
Protected Functions Documentation
function setNPixels
Set number of pixels (replicated blocks in generic sensors)
Parameters:
- val Number of two dimensional pixels
function setPixelSize
Set the size of a pixel.
Parameters:
- val Size of a pixel
function setSensorThickness
Set the thickness of the sensor.
Parameters:
- val Thickness of the sensor
function setSensorExcessTop
Set the excess at the top of the sensor (positive y-coordinate)
Parameters:
- val Sensor top excess
function setSensorExcessRight
Set the excess at the right of the sensor (positive x-coordinate)
Parameters:
- val Sensor right excess
function setSensorExcessBottom
Set the excess at the bottom of the sensor (negative y-coordinate)
Parameters:
- val Sensor bottom excess
function setSensorExcessLeft
Set the excess at the left of the sensor (negative x-coordinate)
Parameters:
- val Sensor right excess
Protected Attributes Documentation
variable type_
variable number_of_pixels_
variable pixel_size_
variable pixel_type_
variable sensor_thickness_
variable sensor_excess_
variable sensor_material_
variable assembly_
variable implants_
variable support_layers_
Updated on 2025-02-27 at 14:14:46 +0000