Importing TCAD field maps
For realistic calculations of the electric field in a segmented silicon sensor, one usually relies on Technology CAD (TCAD) device simulation programs like Synopsys Sentaurus™ Device. The output of a Sentaurus Device simulation normally includes a plot file (_des.tdr) which contains the solution variables (e.g. electrostatic potential, electric field, doping concentration) at each mesh node. In order to import these data in Garfield++, one can either
- use the tool
svisual
to probe the relevant variables on a regular grid and save the results to a text file, which can then be read using the classComponentGrid
, or - load directly the nodal solutions together with the mesh.
In this example we briefly outline the latter approach. Let us assume we have run a two-dimensional sdevice simulation and generated a plot file pixel_des.tdr
. As a first step, we need to convert this file to a text-based (so-called DF-ISE) format. We do this using the Sentaurus Data Explorer tool (tdx
):
tdx -dd pixel_des.tdr
This should produce two files: pixel_des.grd
, which contains a description of the mesh, and pixel_des.dat
, which contains the solution variables. We now import these files in our Garfield++ program using the class ComponentTcad2d
.
ComponentTcad2d cmp;
cmp.Initialise("pixel_des.grd", "pixel_des.dat");
cmp.PrintRegions();
The last statement prints a list of the "regions" defined in the mesh. If we want to enable ionization and drift of charge-carriers in a region, we need to associate it with a MediumSilicon
object.
MediumSilicon si;
cmp.SetMedium("Silicon", &si);
When requested to return the electric field or potential at a given point, ComponentTcad2d
will look up the mesh element in which the point is located (using a Quadtree search) and interpolate the field (potential) based on the values at the mesh nodes constituting the element.
When simulating a periodic structure like a pixel or strip detector, one typically models only a single cell (or even less if the cell has symmetries) in TCAD. By requesting periodicity (or mirror periodicity) in ComponentTcad2d
, one can extend the solution for the basic cell over the whole domain.
cmp.EnablePeriodicityX();
Now that we have set up the ComponentTcad2d
object, we can proceed along the same lines as in this example, except that we are using ComponentTcad2d
instead of ComponentUser
to describe the electric field. A simple working example can be found here.
Weighting field and potential
In order to calculated weighting fields and potentials using TCAD, we use the following recipe.
- Unlike the electric field (potential) the weighting field (potential) is, in general, not periodic and we therefore need to include multiple pixel/strip cells in the mesh.
- We first determine the solution for the same bias conditions as used for calculating the electric field, and convert the resulting
_des.tdr
file to text files (let's call thempixel_wfield_des.grd
,pixel_wfield_des.dat
). - Then we run a second simulation using the same mesh, but with the potential at the electrode to be read out increased by a small step ΔV. Let us assume ΔV = 1 V and call the resulting (converted) output files
pixel_wfield1_des.grd
,pixel_wfield1_des.dat
. - We create a
ComponentTcad2d
object and initialise it with the first field map.ComponentTcad2d wfield; wfield.Initialise("pixel_wfield_des.grd", "pixel_wfield_des.dat");
-
Now we set up the weighting field and potential.
wfield.SetWeightingField("pixel_wfield_des.dat", "pixel_wfield1_des.dat", 1., "pixel0");
where the third argument is the value of the voltage step ΔV we have used, and the fourth argument ("pixel0") is a label we give to the electrode.
-
ComponentTcad2d
subsequently calculates the weighting potential and field at each mesh node as the difference between the values in the two maps, divided by ΔV. - If we also want to calculate the signal on a neighbouring pixel, we can use the same field map but simply shift it by one pitch, e.g.
cpp constexpr double pitch = 55.e-4; wfield.SetWeightingFieldShift("pixel1", pitch, 0., 0.);