Garfield++ v2r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
|
Component for interpolating field maps stored in a regular mesh. More...
#include <ComponentVoxel.hh>
Public Member Functions | |
ComponentVoxel () | |
Constructor. | |
~ComponentVoxel () | |
Destructor. | |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status) |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) |
void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) |
void | MagneticField (const double x, const double y, const double z, double &bx, double &by, double &bz, int &status) |
void | SetWeightingFieldOffset (const double x, const double y, const double z) |
Medium * | GetMedium (const double x, const double y, const double z) |
Get the medium at a given location (x, y, z). | |
bool | GetVoltageRange (double &vmin, double &vmax) |
Calculate the voltage range [V]. | |
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) |
Get the bounding box coordinates. | |
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) |
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.) |
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. | |
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 | 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. | |
Public Member Functions inherited from Garfield::ComponentBase | |
ComponentBase () | |
Constructor. | |
virtual | ~ComponentBase () |
Destructor. | |
virtual void | SetGeometry (GeometryBase *geo) |
Define the geometry. | |
virtual void | Clear () |
Reset. | |
virtual Medium * | GetMedium (const double x, const double y, const double z) |
Get the medium at a given location (x, y, z). | |
virtual void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status)=0 |
virtual void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, Medium *&m, int &status)=0 |
virtual bool | GetVoltageRange (double &vmin, double &vmax)=0 |
Calculate the voltage range [V]. | |
virtual void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label) |
virtual double | WeightingPotential (const double x, const double y, const double z, const std::string &label) |
virtual void | MagneticField (const double x, const double y, const double z, double &bx, double &by, double &bz, int &status) |
void | SetMagneticField (const double bx, const double by, const double bz) |
Set a constant magnetic field. | |
virtual bool | IsReady () |
Ready for use? | |
virtual bool | GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) |
Get the bounding box coordinates. | |
virtual bool | IsWireCrossed (const double x0, const double y0, const double z0, const double x1, const double y1, const double z1, double &xc, double &yc, double &zc) |
virtual bool | IsInTrapRadius (const double q0, const double x0, const double y0, const double z0, double &xw, double &yw, double &rw) |
void | EnablePeriodicityX (const bool on=true) |
Enable simple periodicity in the direction. | |
void | DisablePeriodicityX () |
void | EnablePeriodicityY (const bool on=true) |
Enable simple periodicity in the direction. | |
void | DisablePeriodicityY () |
void | EnablePeriodicityZ (const bool on=true) |
Enable simple periodicity in the direction. | |
void | DisablePeriodicityZ () |
void | EnableMirrorPeriodicityX (const bool on=true) |
Enable mirror periodicity in the direction. | |
void | DisableMirrorPeriodicityX () |
void | EnableMirrorPeriodicityY (const bool on=true) |
Enable mirror periodicity in the direction. | |
void | DisableMirrorPeriodicityY () |
void | EnableMirrorPeriodicityZ (const bool on=true) |
Enable mirror periodicity in the direction. | |
void | DisableMirrorPeriodicityZ () |
void | EnableAxialPeriodicityX (const bool on=true) |
Enable axial periodicity in the direction. | |
void | DisableAxialPeriodicityX () |
void | EnableAxialPeriodicityY (const bool on=true) |
Enable axial periodicity in the direction. | |
void | DisableAxialPeriodicityY () |
void | EnableAxialPeriodicityZ (const bool on=true) |
Enable axial periodicity in the direction. | |
void | DisableAxialPeriodicityZ () |
void | EnableRotationSymmetryX (const bool on=true) |
Enable rotation symmetry around the axis. | |
void | DisableRotationSymmetryX () |
void | EnableRotationSymmetryY (const bool on=true) |
Enable rotation symmetry around the axis. | |
void | DisableRotationSymmetryY () |
void | EnableRotationSymmetryZ (const bool on=true) |
Enable rotation symmetry around the axis. | |
void | DisableRotationSymmetryZ () |
void | EnableDebugging () |
Switch on debugging messages. | |
void | DisableDebugging () |
Switch off debugging messages. | |
void | ActivateTraps () |
Request trapping to be taken care of by the component (for TCAD). | |
void | DeactivateTraps () |
bool | IsTrapActive () |
void | ActivateVelocityMap () |
Request velocity to be taken care of by the component (for TCAD). | |
void | DectivateVelocityMap () |
bool | IsVelocityActive () |
virtual bool | ElectronAttachment (const double, const double, const double, double &eta) |
Get the electron attachment coefficient. | |
virtual bool | HoleAttachment (const double, const double, const double, double &eta) |
Get the hole attachment coefficient. | |
virtual void | ElectronVelocity (const double, const double, const double, double &vx, double &vy, double &vz, Medium *&, int &status) |
Get the electron drift velocity. | |
virtual void | HoleVelocity (const double, const double, const double, double &vx, double &vy, double &vz, Medium *&, int &status) |
Get the hole drift velocity. | |
virtual bool | GetElectronLifetime (const double, const double, const double, double &etau) |
virtual bool | GetHoleLifetime (const double, const double, const double, double &htau) |
Additional Inherited Members | |
virtual void | Reset ()=0 |
Geometry checks. | |
virtual void | UpdatePeriodicity ()=0 |
Verify periodicities. | |
Protected Attributes inherited from Garfield::ComponentBase | |
std::string | m_className |
Class name. | |
GeometryBase * | m_geometry |
Pointer to the geometry. | |
bool | m_ready |
Ready for use? | |
bool | m_activeTraps |
Does the component have traps? | |
bool | m_hasVelocityMap |
Does the component have velocity maps? | |
bool | m_xPeriodic |
Simple periodicity in x. | |
bool | m_yPeriodic |
Simple periodicity in y. | |
bool | m_zPeriodic |
Simple periodicity in z. | |
bool | m_xMirrorPeriodic |
Mirror periodicity in x. | |
bool | m_yMirrorPeriodic |
Mirror periodicity in y. | |
bool | m_zMirrorPeriodic |
Mirror periodicity in z. | |
bool | m_xAxiallyPeriodic |
Axial periodicity in x. | |
bool | m_yAxiallyPeriodic |
Axial periodicity in y. | |
bool | m_zAxiallyPeriodic |
Axial periodicity in z. | |
bool | m_xRotationSymmetry |
Rotation symmetry around x-axis. | |
bool | m_yRotationSymmetry |
Rotation symmetry around y-axis. | |
bool | m_zRotationSymmetry |
Rotation symmetry around z-axis. | |
double | m_bx0 |
double | m_by0 |
double | m_bz0 |
bool | m_debug |
Switch on/off debugging messages. | |
Component for interpolating field maps stored in a regular mesh.
Definition at line 10 of file ComponentVoxel.hh.
Garfield::ComponentVoxel::ComponentVoxel | ( | ) |
Constructor.
Definition at line 12 of file ComponentVoxel.cc.
|
inline |
|
virtual |
Implements Garfield::ComponentBase.
Definition at line 33 of file ComponentVoxel.cc.
Referenced by ElectricField(), and WeightingField().
|
virtual |
Calculate the drift field at given point.
x,y,z | coordinates [cm]. |
ex,ey,ez | components of the electric field [V/cm]. |
m | pointer to the medium at this location. |
status | status flag |
Status flags:
0: Inside an active medium > 0: Inside a wire of type X -4 ... -1: On the side of a plane where no wires are -5: Inside the mesh but not in an active medium -6: Outside the mesh -10: Unknown potential type (should not occur) other: Other cases (should not occur)
Implements Garfield::ComponentBase.
Definition at line 75 of file ComponentVoxel.cc.
|
virtual |
Get the bounding box coordinates.
Reimplemented from Garfield::ComponentBase.
Definition at line 529 of file ComponentVoxel.cc.
bool Garfield::ComponentVoxel::GetElectricFieldRange | ( | double & | exmin, |
double & | exmax, | ||
double & | eymin, | ||
double & | eymax, | ||
double & | ezmin, | ||
double & | ezmax | ||
) |
Definition at line 567 of file ComponentVoxel.cc.
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.
Definition at line 638 of file ComponentVoxel.cc.
Referenced by ElectricField(), GetMedium(), and MagneticField().
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.
Definition at line 674 of file ComponentVoxel.cc.
|
virtual |
Get the medium at a given location (x, y, z).
Reimplemented from Garfield::ComponentBase.
Definition at line 129 of file ComponentVoxel.cc.
Medium * Garfield::ComponentVoxel::GetMedium | ( | const unsigned int | i | ) | const |
Get the medium in region i.
Definition at line 629 of file ComponentVoxel.cc.
|
virtual |
Calculate the voltage range [V].
Implements Garfield::ComponentBase.
Definition at line 559 of file ComponentVoxel.cc.
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:
Definition at line 183 of file ComponentVoxel.cc.
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.
Definition at line 227 of file ComponentVoxel.cc.
|
virtual |
Calculate the magnetic field at a given point.
x,y,z | coordinates [cm]. |
bx,by,bz | components of the magnetic field [Tesla]. |
status | status flag. |
Reimplemented from Garfield::ComponentBase.
Definition at line 102 of file ComponentVoxel.cc.
void Garfield::ComponentVoxel::PrintRegions | ( | ) | const |
Print all regions.
Definition at line 596 of file ComponentVoxel.cc.
void Garfield::ComponentVoxel::SetMedium | ( | const unsigned int | i, |
Medium * | m | ||
) |
Set the medium in region i.
Definition at line 619 of file ComponentVoxel.cc.
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 . |
Definition at line 149 of file ComponentVoxel.cc.
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.
Definition at line 95 of file ComponentVoxel.cc.
|
virtual |
Calculate the weighting field at a given point and for a given electrode.
x,y,z | coordinates [cm]. |
wx,wy,wz | components of the weighting field [1/cm]. |
label | name of the electrode |
Reimplemented from Garfield::ComponentBase.
Definition at line 83 of file ComponentVoxel.cc.