Garfield++ 3.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
|
Simple component with electric field given by a user function. More...
#include <ComponentUser.hh>
Public Member Functions | |
ComponentUser () | |
Constructor. | |
~ComponentUser () | |
Destructor. | |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) 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 |
Calculate the drift field [V/cm] and potential [V] at (x, y, z). | |
bool | GetVoltageRange (double &vmin, double &vmax) override |
Calculate the voltage range [V]. | |
void | MagneticField (const double x, const double y, const double z, double &bx, double &by, double &bz, 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 |
void | SetElectricField (void(*f)(const double, const double, const double, double &, double &, double &)) |
Set the function to be called for calculating the electric field. | |
void | SetPotential (void(*f)(const double, const double, const double, double &)) |
Set the function to be called for calculating the potential. | |
void | SetWeightingField (void(*f)(const double, const double, const double, double &, double &, double &, const std::string)) |
Set the function to be called for calculating the weighting field. | |
void | SetWeightingPotential (void(*f)(const double, const double, const double, double &, const std::string)) |
Set the function to be called for calculating the weighting potential. | |
void | SetDelayedWeightingField (void(*f)(const double, const double, const double, const double, double &, double &, double &, const std::string)) |
Set the function to be called for calculating the delayed weighting field. | |
void | SetMagneticField (void(*f)(const double, const double, const double, double &, double &, double &)) |
Set the function to be called for calculating the magnetic field. | |
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 |
Calculate the drift field [V/cm] and potential [V] at (x, y, z). | |
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 | DelayedWeightingField (const double x, const double y, const double z, const double t, double &wx, double &wy, double &wz, 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. | |
double | IntegrateFluxCircle (const double xc, const double yc, const double r, const unsigned int nI=50) |
double | IntegrateFluxSphere (const double xc, const double yc, const double zc, const double r, const unsigned int nI=20) |
double | IntegrateFlux (const double x0, const double y0, const double z0, const double dx1, const double dy1, const double dz1, const double dx2, const double dy2, const double dz2, const unsigned int nU=20, const unsigned int nV=20) |
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, const bool centre, double &rc) |
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 |
Reset the component. | |
virtual void | UpdatePeriodicity ()=0 |
Verify periodicities. | |
Protected Attributes inherited from Garfield::ComponentBase | |
std::string | m_className = "ComponentBase" |
Class name. | |
GeometryBase * | m_geometry = nullptr |
Pointer to the geometry. | |
bool | m_ready = false |
Ready for use? | |
bool | m_activeTraps = false |
Does the component have traps? | |
bool | m_hasVelocityMap = false |
Does the component have velocity maps? | |
std::array< bool, 3 > | m_periodic = {{false, false, false}} |
Simple periodicity in x, y, z. | |
std::array< bool, 3 > | m_mirrorPeriodic = {{false, false, false}} |
Mirror periodicity in x, y, z. | |
std::array< bool, 3 > | m_axiallyPeriodic = {{false, false, false}} |
Axial periodicity in x, y, z. | |
std::array< bool, 3 > | m_rotationSymmetric = {{false, false, false}} |
Rotation symmetry around x-axis, y-axis, z-axis. | |
double | m_bx0 = 0. |
double | m_by0 = 0. |
double | m_bz0 = 0. |
bool | m_debug = false |
Switch on/off debugging messages. | |
Simple component with electric field given by a user function.
Definition at line 10 of file ComponentUser.hh.
Garfield::ComponentUser::ComponentUser | ( | ) |
Constructor.
Definition at line 7 of file ComponentUser.cc.
|
inline |
|
overridevirtual |
Calculate the delayed weighting field at a given point and time and for a given electrode.
x,y,z | coordinates [cm]. |
t | time [ns]. |
wx,wy,wz | components of the weighting field [1/cm]. |
label | name of the electrode |
Reimplemented from Garfield::ComponentBase.
Definition at line 99 of file ComponentUser.cc.
|
overridevirtual |
Calculate the drift field [V/cm] and potential [V] at (x, y, z).
Implements Garfield::ComponentBase.
Definition at line 35 of file ComponentUser.cc.
|
overridevirtual |
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 11 of file ComponentUser.cc.
|
overridevirtual |
Calculate the voltage range [V].
Implements Garfield::ComponentBase.
Definition at line 66 of file ComponentUser.cc.
|
overridevirtual |
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 71 of file ComponentUser.cc.
void Garfield::ComponentUser::SetDelayedWeightingField | ( | void(*)(const double, const double, const double, const double, double &, double &, double &, const std::string) | f | ) |
Set the function to be called for calculating the delayed weighting field.
Definition at line 147 of file ComponentUser.cc.
void Garfield::ComponentUser::SetElectricField | ( | void(*)(const double, const double, const double, double &, double &, double &) | f | ) |
Set the function to be called for calculating the electric field.
Definition at line 107 of file ComponentUser.cc.
void Garfield::ComponentUser::SetMagneticField | ( | void(*)(const double, const double, const double, double &, double &, double &) | f | ) |
Set the function to be called for calculating the magnetic field.
Definition at line 158 of file ComponentUser.cc.
void Garfield::ComponentUser::SetPotential | ( | void(*)(const double, const double, const double, double &) | f | ) |
Set the function to be called for calculating the potential.
Definition at line 118 of file ComponentUser.cc.
void Garfield::ComponentUser::SetWeightingField | ( | void(*)(const double, const double, const double, double &, double &, double &, const std::string) | f | ) |
Set the function to be called for calculating the weighting field.
Definition at line 127 of file ComponentUser.cc.
void Garfield::ComponentUser::SetWeightingPotential | ( | void(*)(const double, const double, const double, double &, const std::string) | f | ) |
Set the function to be called for calculating the weighting potential.
Definition at line 137 of file ComponentUser.cc.
|
overridevirtual |
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 ComponentUser.cc.
|
overridevirtual |
Calculate the weighting potential at a given point.
x,y,z | coordinates [cm]. |
label | name of the electrode. |
Reimplemented from Garfield::ComponentBase.
Definition at line 91 of file ComponentUser.cc.