Garfield++ v2r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
|
#include <ComponentCST.hh>
Public Member Functions | |
ComponentCST () | |
~ComponentCST () | |
void | ShiftComponent (const double xShift, const double yShift, const double zShift) |
Medium * | GetMedium (const double x, const double y, const double z) |
Get the medium at a given location (x, y, z). | |
void | GetNumberOfMeshLines (unsigned int &n_x, unsigned int &n_y, unsigned int &n_z) |
void | GetElementBoundaries (unsigned int element, double &xmin, double &xmax, double &ymin, double &ymax, double &zmin, double &zmax) |
int | GetElementMaterial (unsigned int element) |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, Medium *&m, int &status) |
void | ElectricField (const double x, const double y, const double z, double &ex, double &ey, double &ez, double &v, 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) |
double | WeightingPotential (const double x, const double y, const double z, const std::string &label) |
bool | Initialise (std::string elist, std::string nlist, std::string mplist, std::string prnsol, std::string unit="cm") |
bool | Initialise (std::string dataFile, std::string unit="cm") |
bool | SetWeightingField (std::string prnsol, std::string label, bool isBinary=true) |
virtual bool | IsInBoundingBox (const double x, const double y, const double z) const |
void | SetRange () |
Calculate x, y, z, V and angular ranges. | |
void | SetRangeZ (const double zmin, const double zmax) |
void | DisableXField () |
void | DisableYField () |
void | DisableZField () |
void | EnableShaping () |
void | DisableShaping () |
int | Index2Element (const unsigned int i, const unsigned int j, const unsigned int k) |
bool | Coordinate2Index (const double x, const double y, const double z, unsigned int &i, unsigned int &j, unsigned int &k) |
Public Member Functions inherited from Garfield::ComponentFieldMap | |
ComponentFieldMap () | |
Constructor. | |
virtual | ~ComponentFieldMap () |
Destructor. | |
virtual void | SetRange () |
Calculate x, y, z, V and angular ranges. | |
void | PrintRange () |
Show x, y, z, V and angular ranges. | |
virtual bool | IsInBoundingBox (const double x, const double y, const double z) const |
virtual bool | GetBoundingBox (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) |
Get the bounding box coordinates. | |
virtual bool | GetVoltageRange (double &vmin, double &vmax) |
Calculate the voltage range [V]. | |
void | PrintMaterials () |
List all currently defined materials. | |
void | DriftMedium (const unsigned int imat) |
Flag a field map material as a drift medium. | |
void | NotDriftMedium (const unsigned int imat) |
Flag a field map materials as a non-drift medium. | |
unsigned int | GetNumberOfMaterials () const |
Return the number of materials in the field map. | |
double | GetPermittivity (const unsigned int imat) const |
Return the permittivity of a field map material. | |
double | GetConductivity (const unsigned int imat) const |
Return the conductivity of a field map material. | |
void | SetMedium (const unsigned int imat, Medium *medium) |
Associate a field map material with a Medium class. | |
Medium * | GetMedium (const unsigned int i) const |
Return the Medium associated to a field map material. | |
Medium * | GetMedium (const double x, const double y, const double z)=0 |
Get the medium at a given location (x, y, z). | |
unsigned int | GetNumberOfMedia () const |
int | GetNumberOfElements () const |
Return the number of mesh elements. | |
bool | GetElement (const unsigned int i, double &vol, double &dmin, double &dmax) |
Return the volume and aspect ratio of a mesh element. | |
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 void | WeightingField (const double x, const double y, const double z, double &wx, double &wy, double &wz, const std::string &label)=0 |
virtual double | WeightingPotential (const double x, const double y, const double z, const std::string &label)=0 |
void | EnableCheckMapIndices () |
void | DisableCheckMapIndices () |
void | EnableDeleteBackgroundElements () |
void | DisableDeleteBackgroundElements () |
void | EnableTetrahedralTreeForElementSearch (const bool on=true) |
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) |
Protected Member Functions | |
void | UpdatePeriodicity () |
Verify periodicities. | |
double | GetElementVolume (const unsigned int i) |
void | GetAspectRatio (const unsigned int i, double &dmin, double &dmax) |
bool | Coordinate2Index (const double x, const double y, const double z, unsigned int &i, unsigned int &j, unsigned int &k, double *position_mapped, bool *mirrored, double &rcoordinate, double &rotation) |
Protected Member Functions inherited from Garfield::ComponentFieldMap | |
void | Reset () |
Geometry checks. | |
virtual void | UpdatePeriodicity ()=0 |
Verify periodicities. | |
void | UpdatePeriodicity2d () |
void | UpdatePeriodicityCommon () |
int | FindElement5 (const double x, const double y, const double z, double &t1, double &t2, double &t3, double &t4, double jac[4][4], double &det) |
Find the element for a point in curved quadratic quadrilaterals. | |
int | FindElement13 (const double x, const double y, const double z, double &t1, double &t2, double &t3, double &t4, double jac[4][4], double &det) |
Find the element for a point in curved quadratic tetrahedra. | |
int | FindElementCube (const double x, const double y, const double z, double &t1, double &t2, double &t3, TMatrixD *&jac, std::vector< TMatrixD * > &dN) |
Find the element for a point in a cube. | |
void | MapCoordinates (double &xpos, double &ypos, double &zpos, bool &xmirrored, bool &ymirrored, bool &zmirrored, double &rcoordinate, double &rotation) const |
Move (xpos, ypos, zpos) to field map coordinates. | |
void | UnmapFields (double &ex, double &ey, double &ez, double &xpos, double &ypos, double &zpos, bool &xmirrored, bool &ymirrored, bool &zmirrored, double &rcoordinate, double &rotation) const |
Move (ex, ey, ez) to global coordinates. | |
int | ReadInteger (char *token, int def, bool &error) |
double | ReadDouble (char *token, double def, bool &error) |
virtual double | GetElementVolume (const unsigned int i)=0 |
virtual void | GetAspectRatio (const unsigned int i, double &dmin, double &dmax)=0 |
void | PrintWarning (const std::string &header) |
void | PrintNotReady (const std::string &header) const |
void | PrintElement (const std::string &header, const double x, const double y, const double z, const double t1, const double t2, const double t3, const double t4, const unsigned int i, const unsigned int n, const int iw=-1) const |
virtual void | Reset ()=0 |
Geometry checks. | |
virtual void | UpdatePeriodicity ()=0 |
Verify periodicities. | |
Additional Inherited Members | |
Protected Attributes inherited from Garfield::ComponentFieldMap | |
bool | m_is3d |
int | nElements |
std::vector< Element > | elements |
int | nNodes |
std::vector< Node > | nodes |
unsigned int | m_nMaterials |
std::vector< Material > | materials |
int | nWeightingFields |
std::vector< std::string > | wfields |
std::vector< bool > | wfieldsOk |
bool | hasBoundingBox |
double | xMinBoundingBox |
double | yMinBoundingBox |
double | zMinBoundingBox |
double | xMaxBoundingBox |
double | yMaxBoundingBox |
double | zMaxBoundingBox |
double | mapxmin |
double | mapymin |
double | mapzmin |
double | mapxmax |
double | mapymax |
double | mapzmax |
double | mapxamin |
double | mapyamin |
double | mapzamin |
double | mapxamax |
double | mapyamax |
double | mapzamax |
double | mapvmin |
double | mapvmax |
bool | setangx |
bool | setangy |
bool | setangz |
double | mapsx |
double | mapsy |
double | mapsz |
double | cellsx |
double | cellsy |
double | cellsz |
double | mapnxa |
double | mapnya |
double | mapnza |
bool | m_deleteBackground |
bool | m_warning |
unsigned int | m_nWarnings |
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 importing and interpolating field maps from CST. This interface assumes a certain format of the ascii files Please find the tools to extract the field data from CST in the correct way here: http://www.desy.de/~zenker/garfieldpp.html
Definition at line 15 of file ComponentCST.hh.
Garfield::ComponentCST::ComponentCST | ( | ) |
Definition at line 18 of file ComponentCST.cc.
|
inline |
Definition at line 21 of file ComponentCST.hh.
bool Garfield::ComponentCST::Coordinate2Index | ( | const double | x, |
const double | y, | ||
const double | z, | ||
unsigned int & | i, | ||
unsigned int & | j, | ||
unsigned int & | k | ||
) |
Find the positions in the x/y/z position vectors (m_xlines, m_ylines, m_zlines) for a given point. The operator used for the comparison is <=. Therefore, the last entry in the vector will never be returned for a point inside the mesh.
Definition at line 1226 of file ComponentCST.cc.
Referenced by Coordinate2Index(), GetMedium(), WeightingField(), and WeightingPotential().
|
protected |
Calculate the index in the vectors m_xlines, m_ylines, m_zlines, which is before the given coordinate.
x | The x coordinate mapped to the basic cell. |
y | The y coordinate mapped to the basic cell. |
z | The z coordinate mapped to the basic cell. |
i | The index of the m_xlines vector, where m_xlines.at(i) < x < m_xlines.at(i+1). |
j | The index of the m_ylines vector, where m_ylines.at(j) < y < m_ylines.at(j+1). |
k | The index of the m_zlines vector, where m_zlines.at(k) < z < m_zlines.at(k+1). |
position_mapped | The calculated mapped position (x,y,z) -> (x_mapped, y_mapped, z_mapped) |
mirrored | Information if x, y, or z direction is mirrored. |
rcoordinate | Information about rotation of the component. See ComponentFieldMap::MapCoordinates. |
rotation | Information about rotation of the component. See ComponentFieldMap::MapCoordinates. |
Definition at line 1245 of file ComponentCST.cc.
|
inline |
Definition at line 167 of file ComponentCST.hh.
|
inline |
Use these functions to disable a certain field component. Is a field component is disabled ElectricField and WeightingField will return 0 for this component. This is useful if you want to have calculated global field distortions and you want to add the field of a GEM. If you would simply add both components the field component in drift direction would be added twice!
Definition at line 126 of file ComponentCST.hh.
|
inline |
Definition at line 129 of file ComponentCST.hh.
|
inline |
Definition at line 132 of file ComponentCST.hh.
|
virtual |
Implements Garfield::ComponentFieldMap.
Definition at line 1001 of file ComponentCST.cc.
|
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::ComponentFieldMap.
Definition at line 994 of file ComponentCST.cc.
|
inline |
If you calculate the electric field component in direction along a line in x direction this field component will be constant inside mesh elements (by construction). This can be observed by plotting in direction. If you plot in y direction the field will be smooth (also by construction). Yuri Piadyk proposed also to shape the electric field. This is done as follows. The field component calculated as described above is assumed to appear in the center of the mesh element.
| M1 P | M2 | x direction |-—x—x-|--—x---—|-->
__________ | ____________ |
element 1 element 2
Lets consider only the direction and we want to calculate . The field in the center of the element containing is . Without shaping it is along the direction in everywhere in element 1. The idea of the shaping is to do a linear interpolation of the between the field and . This results in a smooth electric field also in direction. If P would be left from the field in the left neighboring element would be considered. In addition it is also checked if the material in both elements used for the interpolation is the same. Else no interpolation is done.
Definition at line 164 of file ComponentCST.hh.
|
protectedvirtual |
Implements Garfield::ComponentFieldMap.
Definition at line 1304 of file ComponentCST.cc.
void Garfield::ComponentCST::GetElementBoundaries | ( | unsigned int | element, |
double & | xmin, | ||
double & | xmax, | ||
double & | ymin, | ||
double & | ymax, | ||
double & | zmin, | ||
double & | zmax | ||
) |
Definition at line 1153 of file ComponentCST.cc.
|
inline |
Definition at line 29 of file ComponentCST.hh.
|
protectedvirtual |
Implements Garfield::ComponentFieldMap.
Definition at line 1322 of file ComponentCST.cc.
|
virtual |
Get the medium at a given location (x, y, z).
Implements Garfield::ComponentFieldMap.
Definition at line 1167 of file ComponentCST.cc.
void Garfield::ComponentCST::GetNumberOfMeshLines | ( | unsigned int & | n_x, |
unsigned int & | n_y, | ||
unsigned int & | n_z | ||
) |
Definition at line 1146 of file ComponentCST.cc.
int Garfield::ComponentCST::Index2Element | ( | const unsigned int | i, |
const unsigned int | j, | ||
const unsigned int | k | ||
) |
Calculate the element index from the position in the x/y/z position vectors (m_xlines, m_ylines, m_zlines). This is public since it is used in ViewFEMesh::DrawCST.
Definition at line 1236 of file ComponentCST.cc.
Referenced by GetMedium(), and WeightingField().
bool Garfield::ComponentCST::Initialise | ( | std::string | dataFile, |
std::string | unit = "cm" |
||
) |
Import of field data based on binary files. See http://www.desy.de/~zenker/garfieldpp.html to get information about the binary files export from CST.
dataFile | The binary file containing the field data exported from CST. |
unit | The units used in the binary file. They are not necessarily equal to CST units. |
Definition at line 503 of file ComponentCST.cc.
bool Garfield::ComponentCST::Initialise | ( | std::string | elist, |
std::string | nlist, | ||
std::string | mplist, | ||
std::string | prnsol, | ||
std::string | unit = "cm" |
||
) |
Deprecated version of the interface based on text file import of field data.
elist | Information about the element material of mesh cells. Each line contains the element number and the material index: 0 3
...
|
nlist | Information about the mesh like this: xmax 136 ymax 79 zmax 425
x−l i n e s
0
8 . 9 2 8 5 7 e −07
1 . 7 8 5 7 1 e −06
...
y−l i n e s
0
8 . 9 2 8 5 7 e −07
1 . 7 8 5 7 1 e −06
...
z−l i n e s
0.0027
0.00270674
...
|
mplist | Information about material properties used in the simulation: |
prnsol | Information about the node potentials. Each line contains the node number and the potential: 0 1000.00
...
|
unit | The units used in the nlist input file |
Definition at line 34 of file ComponentCST.cc.
|
inlinevirtual |
Reimplemented from Garfield::ComponentFieldMap.
Definition at line 107 of file ComponentCST.hh.
|
virtual |
Calculate x, y, z, V and angular ranges.
Reimplemented from Garfield::ComponentFieldMap.
Definition at line 1186 of file ComponentCST.cc.
Referenced by Initialise(), and ShiftComponent().
void Garfield::ComponentCST::SetRangeZ | ( | const double | zmin, |
const double | zmax | ||
) |
Definition at line 1215 of file ComponentCST.cc.
bool Garfield::ComponentCST::SetWeightingField | ( | std::string | prnsol, |
std::string | label, | ||
bool | isBinary = true |
||
) |
Initialise a weighting field. This function can handle the deprecated text based file format (see Initialise( std::string elist...) for the expected file format, which is similar to prnsol. It also also handles binary files including the weighting field.
prnsol | The input file (binary/text file) |
label | The name of the weighting field to be added. If a weighting field with same name already exist it is replaced by the new one. |
isBinary | Depending on the file type you use, adapt this switch. |
Definition at line 763 of file ComponentCST.cc.
void Garfield::ComponentCST::ShiftComponent | ( | const double | xShift, |
const double | yShift, | ||
const double | zShift | ||
) |
Definition at line 977 of file ComponentCST.cc.
|
protectedvirtual |
Verify periodicities.
Implements Garfield::ComponentFieldMap.
Definition at line 1298 of file ComponentCST.cc.
Referenced by Initialise(), and ShiftComponent().
|
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 |
Implements Garfield::ComponentFieldMap.
Definition at line 1008 of file ComponentCST.cc.
|
virtual |
Implements Garfield::ComponentFieldMap.
Definition at line 1072 of file ComponentCST.cc.