Adding trapping/detrapping with possibility to add multiple trap types
Description
Trapping and detrapping mechanism are quite useful when simulating irradiated sensors or when simulating dirty materials such as CdZnTe, GaAs or else. This should in principle be easily implemented but ...
Proposal
The natural way to implement this is in a propagation module. However, it only make sense if the Ramo potential is also used and the induced charge is calculated. I see there is a Weighting field propagator in development. I can add it to this once this module is in a stable state.
There is a few things to consider. Trapping occurs to single carriers, if the trapping is naively implemented, this will pose a problem when making approximation such that each propagated carrier represent multiple charges.One way to solve this would be the following :
Let's assume a propagated charge carrying N
actual carriers (N
should be an integer !)
- Calculate by MC the trapping history for each of the N carriers.
- For each carrier, determine with which trap the carrier interacts with as function of their relative density
- Calculate by MC the drift time needed to encounter the trap ,
t_{trap}
and detrap,t_{detrap}
. - when propagation reaches
t_{trap}
, remove one carrier from the propagated charge and create one trapped single carrier at this position, contionue to propagate the rest. - if
t_{detrap}
is reached, detrap the carrier and continue its propagation
This should work fine , but the way I see it is implemented now, the carriers do not have parent-daughter relationship. In any case, I think this modification of how the trajectories are stored. instead of (X,Y,t)
vectors, we would need track objects containing : trajectory, creation time, parent carriers, charge at end of propagation (N- X
).