![]() |
Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
|
Component for interpolating field maps stored in a regular mesh. More...
#include <ComponentVoxel.hh>
Classes | |
struct | Element |
Public Member Functions | |
ComponentVoxel () | |
Constructor. | |
~ComponentVoxel () | |
Destructor. | |
void | EnableInterpolation (const bool on=true) |
Interpolate between field values at the element centres. | |
void | SetMesh (const unsigned int nx, const unsigned int ny, const unsigned int nz, const double xmin, const double xmax, const double ymin, const double ymax, const double zmin, const double zmax) |
Define the grid. | |
bool | LoadElectricField (const std::string &filename, const std::string &format, const bool withPotential, const bool withRegion, const double scaleX=1., const double scaleE=1., const double scaleP=1.) |
Import electric field and potential values from a file. | |
bool | LoadWeightingField (const std::string &filename, const std::string &format, const bool withPotential, const double scaleX=1., const double scaleE=1., const double scaleP=1.) |
Import (prompt) weighting field from file. | |
void | SetWeightingFieldOffset (const double x, const double y, const double z) |
Offset coordinates in the weighting field, such that the same numerical weighting field map can be used for electrodes at different positions. | |
bool | LoadWeightingField (const std::string &filename, const std::string &format, const double time, const bool withPotential, const double scaleX=1., const double scaleE=1., const double scaleP=1.) |
Import delayed weighting field from file. | |
bool | LoadMagneticField (const std::string &filename, const std::string &format, const double scaleX=1., const double scaleB=1.) |
Import magnetic field values from a file. | |
void | SetMedium (const unsigned int i, Medium *m) |
Set the medium in region i. | |
Medium * | GetMedium (const unsigned int i) const |
Get the medium in region i. | |
void | PrintRegions () const |
Print all regions. | |
bool | GetElement (const double xi, const double yi, const double zi, unsigned int &i, unsigned int &j, unsigned int &k, bool &xMirrored, bool &yMirrored, bool &zMirrored) const |
Return the indices of the element at a given point. | |
bool | GetElement (const unsigned int i, const unsigned int j, const unsigned int k, double &v, double &ex, double &ey, double &ez) const |
Return the field for an element with given index. | |
void | Clear () override |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status) override |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) override |
void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) override |
double | WeightingPotential (const double x, const double y, const double z, const std::string &label) override |
void | DelayedWeightingField (const double x, const double y, const double z, const double t, double &wx, double &wy, double &wz, const std::string &label) override |
double | DelayedWeightingPotential (const double x, const double y, const double z, const double t, const std::string &label) override |
void | MagneticField (const double x, const double y, const double z, double &bx, double &by, double &bz, int &status) override |
bool | HasMagneticField () const override |
Medium * | GetMedium (const double x, const double y, const double z) override |
bool | GetVoltageRange (double &vmin, double &vmax) override |
bool | GetElectricFieldRange (double &exmin, double &exmax, double &eymin, double &eymax, double &ezmin, double &ezmax) |
bool | GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) override |
bool | GetElementaryCell (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) override |
Private Member Functions | |
bool | LoadData (const std::string &filename, std::string format, const bool withPotential, const bool withRegion, const double scaleX, const double scaleF, const double scaleP, std::vector< std::vector< std::vector< Element > > > &field) |
Read data from file. | |
void | Reset () override |
void | UpdatePeriodicity () override |
bool | GetField (const double x, const double y, const double z, const std::vector< std::vector< std::vector< Element > > > &field, double &fx, double &fy, double &fz, double &p, int ®ion) |
Look up/interpolate the field at a given point. | |
double | Reduce (const double xin, const double xmin, const double xmax, const bool simplePeriodic, const bool mirrorPeriodic, bool &isMirrored) const |
Reduce a coordinate to the basic cell (in case of periodicity). | |
void | Initialise (std::vector< std::vector< std::vector< Element > > > &fields) |
Set the dimensions of a table according to the mesh. | |
void | InitialiseRegions () |
Private Attributes | |
std::vector< Medium * > | m_media |
std::vector< std::vector< std::vector< int > > > | m_regions |
Region indices. | |
std::vector< std::vector< std::vector< Element > > > | m_efields |
Electric field values and potentials at each mesh element. | |
std::vector< std::vector< std::vector< Element > > > | m_bfields |
Magnetic field values at each mesh element. | |
std::vector< std::vector< std::vector< Element > > > | m_wfields |
Prompt weighting field values and potentials at each mesh element. | |
std::vector< std::vector< std::vector< std::vector< Element > > > > | m_wdfields |
Delayed weighting field values and potentials at each mesh element. | |
unsigned int | m_nX = 0 |
unsigned int | m_nY = 0 |
unsigned int | m_nZ = 0 |
double | m_xMin = 0. |
double | m_yMin = 0. |
double | m_zMin = 0. |
double | m_xMax = 0. |
double | m_yMax = 0. |
double | m_zMax = 0. |
double | m_dx = 0. |
double | m_dy = 0. |
double | m_dz = 0. |
bool | m_interpolate = false |
bool | m_hasMesh = false |
bool | m_hasPotential = false |
bool | m_hasEfield = false |
bool | m_hasBfield = false |
bool | m_hasWfield = false |
double | m_wField_xOffset = 0. |
double | m_wField_yOffset = 0. |
double | m_wField_zOffset = 0. |
double | m_pMin = 0. |
double | m_pMax = 0. |
Component for interpolating field maps stored in a regular mesh.
Definition at line 10 of file ComponentVoxel.hh.
Garfield::ComponentVoxel::ComponentVoxel | ( | ) |
Constructor.
|
inline |
|
inlineoverride |
Definition at line 85 of file ComponentVoxel.hh.
|
override |
|
override |
|
override |
|
override |
|
inline |
Interpolate between field values at the element centres.
Definition at line 18 of file ComponentVoxel.hh.
|
override |
bool Garfield::ComponentVoxel::GetElectricFieldRange | ( | double & | exmin, |
double & | exmax, | ||
double & | eymin, | ||
double & | eymax, | ||
double & | ezmin, | ||
double & | ezmax ) |
bool Garfield::ComponentVoxel::GetElement | ( | const double | xi, |
const double | yi, | ||
const double | zi, | ||
unsigned int & | i, | ||
unsigned int & | j, | ||
unsigned int & | k, | ||
bool & | xMirrored, | ||
bool & | yMirrored, | ||
bool & | zMirrored ) const |
Return the indices of the element at a given point.
bool Garfield::ComponentVoxel::GetElement | ( | const unsigned int | i, |
const unsigned int | j, | ||
const unsigned int | k, | ||
double & | v, | ||
double & | ex, | ||
double & | ey, | ||
double & | ez ) const |
Return the field for an element with given index.
|
override |
|
private |
Look up/interpolate the field at a given point.
|
override |
Medium * Garfield::ComponentVoxel::GetMedium | ( | const unsigned int | i | ) | const |
Get the medium in region i.
|
override |
|
override |
|
private |
Set the dimensions of a table according to the mesh.
|
private |
|
private |
Read data from file.
bool Garfield::ComponentVoxel::LoadElectricField | ( | const std::string & | filename, |
const std::string & | format, | ||
const bool | withPotential, | ||
const bool | withRegion, | ||
const double | scaleX = 1., | ||
const double | scaleE = 1., | ||
const double | scaleP = 1. ) |
Import electric field and potential values from a file.
The file is supposed to contain one line for each mesh point starting with
followed by
Format types are:
bool Garfield::ComponentVoxel::LoadMagneticField | ( | const std::string & | filename, |
const std::string & | format, | ||
const double | scaleX = 1., | ||
const double | scaleB = 1. ) |
Import magnetic field values from a file.
bool Garfield::ComponentVoxel::LoadWeightingField | ( | const std::string & | filename, |
const std::string & | format, | ||
const bool | withPotential, | ||
const double | scaleX = 1., | ||
const double | scaleE = 1., | ||
const double | scaleP = 1. ) |
Import (prompt) weighting field from file.
bool Garfield::ComponentVoxel::LoadWeightingField | ( | const std::string & | filename, |
const std::string & | format, | ||
const double | time, | ||
const bool | withPotential, | ||
const double | scaleX = 1., | ||
const double | scaleE = 1., | ||
const double | scaleP = 1. ) |
Import delayed weighting field from file.
|
override |
void Garfield::ComponentVoxel::PrintRegions | ( | ) | const |
Print all regions.
|
private |
Reduce a coordinate to the basic cell (in case of periodicity).
|
overrideprivate |
void Garfield::ComponentVoxel::SetMedium | ( | const unsigned int | i, |
Medium * | m ) |
Set the medium in region i.
void Garfield::ComponentVoxel::SetMesh | ( | const unsigned int | nx, |
const unsigned int | ny, | ||
const unsigned int | nz, | ||
const double | xmin, | ||
const double | xmax, | ||
const double | ymin, | ||
const double | ymax, | ||
const double | zmin, | ||
const double | zmax ) |
Define the grid.
nx,ny,nz | number of bins along x, y, z. |
xmin,xmax | range along ![]() |
ymin,ymax | range along ![]() |
zmin,zmax | range along ![]() |
void Garfield::ComponentVoxel::SetWeightingFieldOffset | ( | const double | x, |
const double | y, | ||
const double | z ) |
Offset coordinates in the weighting field, such that the same numerical weighting field map can be used for electrodes at different positions.
|
overrideprivate |
|
override |
|
override |
|
private |
Magnetic field values at each mesh element.
Definition at line 129 of file ComponentVoxel.hh.
|
private |
Definition at line 139 of file ComponentVoxel.hh.
|
private |
Definition at line 139 of file ComponentVoxel.hh.
|
private |
Definition at line 139 of file ComponentVoxel.hh.
|
private |
Electric field values and potentials at each mesh element.
Definition at line 127 of file ComponentVoxel.hh.
|
private |
Definition at line 146 of file ComponentVoxel.hh.
|
private |
Definition at line 145 of file ComponentVoxel.hh.
|
private |
Definition at line 143 of file ComponentVoxel.hh.
|
private |
Definition at line 144 of file ComponentVoxel.hh.
|
private |
Definition at line 147 of file ComponentVoxel.hh.
|
private |
Definition at line 141 of file ComponentVoxel.hh.
|
private |
Definition at line 118 of file ComponentVoxel.hh.
|
private |
Definition at line 136 of file ComponentVoxel.hh.
|
private |
Definition at line 136 of file ComponentVoxel.hh.
|
private |
Definition at line 136 of file ComponentVoxel.hh.
|
private |
Definition at line 155 of file ComponentVoxel.hh.
|
private |
Definition at line 155 of file ComponentVoxel.hh.
|
private |
Region indices.
Definition at line 125 of file ComponentVoxel.hh.
|
private |
Delayed weighting field values and potentials at each mesh element.
Definition at line 133 of file ComponentVoxel.hh.
|
private |
Definition at line 150 of file ComponentVoxel.hh.
|
private |
Definition at line 151 of file ComponentVoxel.hh.
|
private |
Definition at line 152 of file ComponentVoxel.hh.
|
private |
Prompt weighting field values and potentials at each mesh element.
Definition at line 131 of file ComponentVoxel.hh.
|
private |
Definition at line 138 of file ComponentVoxel.hh.
|
private |
Definition at line 137 of file ComponentVoxel.hh.
|
private |
Definition at line 138 of file ComponentVoxel.hh.
|
private |
Definition at line 137 of file ComponentVoxel.hh.
|
private |
Definition at line 138 of file ComponentVoxel.hh.
|
private |
Definition at line 137 of file ComponentVoxel.hh.