Charges deposited close to sensor entrance are sometimes not propagated towards implant

Hey everybody!

I was experimenting with some low energy gamma sources of 4keV. Because of this low energy, the penetration depth into the sensor volume is quite small, in the order of a couple microns. I use a linear E-field that is fully depleted as shown below. I noticed that sometimes charges were not propagated correctly. To experiment, I set the integration time to 1 second, as to make sure all electrons are propagated until they reach the contact surface (I checked to make sure, all electrons are in the HALTED state when the propagation is finished).

When plotting the final charge positions after propagation, I noticed some charges did not propagate towards the implant (z=6.5mm), instead they ended up at the entry side (z=3.5mm)
Detector volume runs through the global coordinates z=[3.5mm,6.5mm].


The linear E-field along the z-axis is shown below:

Below are debug outputs of a sample run, showing the final deposition locations, and the propagation locations.
Positions of deposited charges:

|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 9 charges at (0mm,0mm,3.50012mm) global / (0mm,0mm,-1.49988mm) local in detector1 after 45.0316ps global / 0ns local
|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 24 charges at (0mm,-0mm,3.50012mm) global / (0mm,-0mm,-1.49988mm) local in detector1 after 45.0316ps global / 2.77206e-05ps local
|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 24 charges at (-0mm,-0mm,3.50012mm) global / (-0mm,-0mm,-1.49988mm) local in detector1 after 45.0316ps global / 2.7501e-05ps local
|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 4 charges at (-0.001um,-0.003um,3.50012mm) global / (-0.001um,-0.003um,-1.49988mm) local in detector1 after 45.0317ps global / 0.000125272ps local
|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 438 charges at (-0.003um,-0.016um,3.50012mm) global / (-0.003um,-0.016um,-1.49988mm) local in detector1 after 45.0322ps global / 0.000687916ps local
|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 11 charges at (0.003um,-0.002um,3.50012mm) global / (0.003um,-0.002um,-1.49988mm) local in detector1 after 45.0317ps global / 0.000169813ps local
|14:29:35.880|   (DEBUG) (Event 19) [R:DepositionGeant4] Created deposit of 575 charges at (0.022um,-0.008um,3.50015mm) global / (0.022um,-0.008um,-1.49985mm) local in detector1 after 45.0328ps global / 0.00127579ps local

Snippet of location of propagated charges:

|14:29:35.882|   (DEBUG) (Event 19) [R:GenericPropagation:detector1] Set of charge carriers ("e") on (-0.003um,-0.016um,-1.49988mm)
|14:29:35.882|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (12.268um,-6.893um,1.5mm) in 57.1587ns time, gain 1, final state: halted
|14:29:35.882|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-26.96um,-14.172um,1.5mm) in 56.6587ns time, gain 1, final state: halted
|14:29:35.882|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (0.246um,-0.103um,-1.5mm) in 0.01ns time, gain 1, final state: halted
|14:29:35.882|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (25.803um,18.243um,1.5mm) in 57.0005ns time, gain 1, final state: halted
|14:29:35.882|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (46.858um,1.8um,1.5mm) in 57.2773ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (11.843um,15.553um,1.5mm) in 56.6587ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (12.359um,-15.667um,1.5mm) in 56.5005ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (27.213um,-4.288um,1.5mm) in 56.1587ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-0.465um,-0.427um,-1.5mm) in 0.01ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-5.019um,25.721um,1.5mm) in 56.7896ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (12.444um,-13.726um,1.5mm) in 57.0005ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-40.692um,-12.3um,1.5mm) in 57.0005ns time, gain 1, final state: halted
|14:29:35.883|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-20.629um,-4.412um,1.5mm) in 56.1587ns time, gain 1, final state: halted
|14:29:35.884|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-2.697um,-5.208um,1.5mm) in 57.1587ns time, gain 1, final state: halted
|14:29:35.884|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-19.038um,-18.965um,1.5mm) in 56.2896ns time, gain 1, final state: halted
|14:29:35.884|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (0.003um,22.813um,1.5mm) in 56.7773ns time, gain 1, final state: halted
|14:29:35.884|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (20.326um,-21.211um,1.5mm) in 57.1587ns time, gain 1, final state: halted
|14:29:35.884|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (8.692um,3.431um,1.5mm) in 56.5005ns time, gain 1, final state: halted
|14:29:35.884|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (12.631um,-12.226um,1.5mm) in 56.5005ns time, gain 1, final state: halted
|14:29:35.885|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-3.942um,-25.624um,1.5mm) in 56.1587ns time, gain 1, final state: halted
|14:29:35.885|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (11.217um,31.214um,1.5mm) in 57.1587ns time, gain 1, final state: halted
|14:29:35.885|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (4.436um,-18.555um,1.5mm) in 56.6587ns time, gain 1, final state: halted
|14:29:35.885|   (DEBUG) (Event 19) [R:GenericPropagation:detector1]  Propagated 10 to (-23.84um,22.681um,1.5mm) in 56.7773ns time, gain 1, final state: halted

Notice how most charges end up correctly at the implant side at z = 1.5mm, after an integration time of ~50ns. However, some of them end up at z=-1.5mm, with a very short integration time (0.01ns). I have tried decreasing the timestep_max and spatial_precision for the GenericPropagation module, but this did not solve the issue.

I was wondering if anyone had an idea what could be causing this? I was thinking maybe by chance, the diffusion step could nudge the charges towards the negative z-direction, such that its next z-position would be <3.5mm (global), causing it to fall outside the sensor volume, and thus be halted for further integration. Could that be the cause?

I have added the configuration files, with a minimal working example and the appropriate seed such that you should see the run described above.
config: simulation_setup.conf (844 Bytes)
model: pin.conf (353 Bytes)
detector: bare_detector.conf (65 Bytes)

Thank you so much for thinking along, please let me know if there is anything I should clarify :slight_smile:

Did some more tests, varying the temperature. The problem seems to disappear when decreasing the temperature (and as a result, the diffusion step size), and it seems to worsen when increasing the temperature. Indicating that the problem should indeed lie at the diffusion step in the integration?


Edit: Did some experimenting, and this seems to indeed be the cause. Changing the addition of the Diffusion term such that it is only added if this does not cause the charge to leave the sensor:

if(model_->isWithinSensor(static_cast<ROOT::Math::XYZPoint>(position + diffusion))) {
position += diffusion;
}

seems to solve my issue. Not sure if this might lead to other problems though.

Hi @sblokhuizen

you were faster than I was :slight_smile: Yes, the explanation certainly is that they have a very low velocity in the first step, and on top of that they are getting a randomly-directed diffusion step. Now, if that diffusion happens to send them backwards, they hit the sensor surface and get HALTED there.

Your edit essentially suggests that charge carriers only diffuse if they stay within the sensor - but in my mind it actually is a physical effect that you lose some generated charge carriers at the surface. I have to think about that a bit more :slight_smile:

Cheers,
Simon

Hi @simonspa,

Thanks for your insight. I was thinking about that as well, and I suppose it strongly depends on what kind of material it diffuses towards. In my case above, this diffusion happens from the silicon sensor into vacuum which might not be physical. Whereas it would be able to diffuse into conductive plating for instance.

Hi @sblokhuizen

The question is less about diffusing into something than recombining. The charge carriers we are talking about are quasiparticles, and reaching crystal defects at the sensor surface (e.g. from cutting or polishing) they recombine with the lattice definitely.

Cheers
Simon