Hi experts,
Recently I am trying to using Garfield++ to simulate a diamond detector response to an incident pion. I came across some confusing things while using AvalancheMC to simulate the avalanche generation. Here is the core part of my code:
for (const auto& cluster : track.GetClusters()) {
++nc;
nesum += cluster.electrons.size();
for (const auto& electron : cluster.electrons) {
drift.DriftElectron(electron.x, electron.y, electron.z, electron.t);
drift.AvalancheElectron(electron.x, electron.y, electron.z, electron.t, true);
}
for (const auto& hole : cluster.ions) {
drift.DriftHole(hole.x, hole.y, hole.z, hole.t);
drift.AvalancheHole(hole.x, hole.y, hole.z, hole.t, true);
}
}
So I want to simulate the whole process after the pion pass through the detector, including the drift and diffusion of electrons and holes generated by incident pion, and also the secondary electrons and holes from avalanche generation, then get the signal (induced current).
My questions are:
- Is this part of the code written correctly? It seems that with or without the “drift.AvalancheElectron” and “drift.AvalancheHole” lines, the induced currents are really different. (the one with avalanche rows is 2~3 times higher) which should not be with such a difference…
- How does the AvalancheElectron simulate the Avalanche generation of carriers exactly, and how to control it? I have a avalanche simulation result from sentaurus TCAD and it uses Chynoweth’s equation for avalanche calculation, the results are quite different… I am trying to understander the reason…
Thank you very much for your time!
Huazhen