Charge propagation for RD53 DUT type

Dear allpix2 experts,

I am posting an issue for some guidance for my configuration setup.
I am trying to run the mimosa26 planes with RD53 DUTs, which I added the configuration for in models/.
In my main Conf file I added the ‘DetectorHistogrammer’ module to see results and it seems that the DUTs have no Hits/Tracks produced from the simulation (check empty histo below).
so my question is how to simulate hits for the RD53 module?

Perhaps you can spot and error or redundancy in my conf files added below.
Your input would be appreciated.
Thank you very much!

example.conf

[AllPix]
log_level = "WARNING"
log_format = "DEFAULT"
number_of_events = 1000000
detectors_file = "dut.conf"
root_file = "eudet_2dut_Hist"
model_paths = "../.."

[GeometryBuilderGeant4]
world_material = "air"

[DepositionGeant4]
physics_list = FTFP_BERT_EMZ
particle_type = "e-"
number_of_particles = 1
source_energy = 5GeV
source_position = 0um 0um -20mm
source_type = "beam"
beam_size = 5mm
beam_direction = 0 0 1
max_step_length = 1.0um

[ElectricFieldReader]
model = "linear"
bias_voltage = -100V
depletion_voltage = -50V

[GenericPropagation]
temperature = 293K
charge_per_step = 100

[SimpleTransfer]
max_depth_distance = 5um

[DefaultDigitizer]
electronics_noise = 13e
threshold = 60e
threshold_smearing = 4e
adc_smearing = 0e
output_plots = 1
adc_resolution = 1

[LCIOWriter]
file_name = "run000126.slcio"
dump_mc_truth = true
detector_assignment=["telescope0","zsdata_m26","0"],["telescope1","zsdata_m26","1"],["telescope2","zsdata_m26","2"],["dut_0","zsdata_dut","10"],["dut_1","zsdata_dut","11"],["telescope3","zsdata_m26","3"],["telescope4","zsdata_m26","4"],["telescope5","zsdata_m26","5"]

[DetectorHistogrammer]

detector.conf

[telescope0]
type = "mimosa26"
position = 0um 0um 0mm
orientation_mode = "xyz"
orientation = 0deg 0deg 0deg
alignment_precision_position = 0um 0um 0mm

[telescope1]
type = "mimosa26"
position = 0um 0um 250mm
orientation_mode = "xyz"
orientation = 0deg 0deg 0deg
alignment_precision_position = 0um 0um 0mm

[telescope2]
type = "mimosa26"
position = 0um 0um 300mm
orientation_mode = "xyz"
orientation = 0deg 0deg 0deg
alignment_precision_position = 0um 0um 0mm

[dut_0]
type = "RD53"
position = 0 0 350um
orientation_mode = "xyz"
orientation = 0deg 45deg 180deg
alignment_precision_position = 0um 0um 0mm
alignment_precision_orientation = 0deg 0deg 0deg

[dut_1]
type = "RD53"
position = 0 0 400um
orientation_mode = "xyz"
orientation = 0deg 45deg 180deg
alignment_precision_position = 0um 0um 0mm
alignment_precision_orientation = 0deg 0deg 0deg

[telescope3]
type = "mimosa26"
position = 0um 0um 450mm
orientation_mode = "xyz"
orientation = 0deg 0deg 0deg
alignment_precision_position = 50um 50um 1mm

[telescope4]
type = "mimosa26"
position = 0um 0um 500mm
orientation_mode = "xyz"
orientation = 0deg 0deg 0deg
alignment_precision_position = 0um 0um 0mm

[telescope5]
type = "mimosa26"
position = 0um 0um 550mm
orientation_mode = "xyz"
orientation = 0deg 0deg 0deg
alignment_precision_position = 0um 0um 0mm

models/RD53.conf

type = "hybrid"

number_of_pixels = 400 129
pixel_size = 50um 50um

sensor_thickness = 100um
sensor_excess = 200um

bump_sphere_radius = 9.0um
bump_cylinder_radius = 7.0um
bump_height = 20.0um
bump_offset = -70.0um 0

chip_thickness = 150um

Dear @retaibah

the issue most likely comes from a typo in your detector placement. In the geometry you wrote

[dut_0]
position = 0 0 350um

which places this detector inside the first telescope place which is located at 0, 0, 0. The framework should actually print you a warning that is has detected overlapping volumes. In this case Geant4 is not capable of properly tracking the particle through the volumes and skips the respective volumes - which is why you don’t see any charge from there. Could you try fixing the units of the position and let me know if that solved your issue?

On a different note: please feel free to open a merge request adding the RD53 model to the repository - this would be very much appreciated!

All the best,
/Simon

Dear @retaibah

there is one more thing I noticed in your detector model:

You configure a pixel pitch of 50um but shift the bump bond by more than half the pitch - this will not work, it will land outside the pixel. What was your intention here?

/Simon

Thank you very much for your replies Simon,
both correction were obviously helped. they were both unintentional typos.

Sure, as soon as I have a successful reconstructed data I will send a merge request to include the RD53 type.

Great, thank you very much. By now I have added a check for the bump bond shift so such an issue would be discovered early on, see https://gitlab.cern.ch/allpix-squared/allpix-squared/-/merge_requests/382

Hello Simon,

My configuration for RD53 modules worked (Y) thanks for the help.
I do have couple of questions;
1- I assign number_of_particles=1 in [DepositionGeant4] and beam_size=5mm, so in the histogrammer (and reconstructed data afterwards) looks like one particle passing in one position all the time not spread out due to some multiple scattering as I would expect. I say this also because the residuals look a bit too slim, or ideal if you may.
So does the deposition and propagation take some scattering through the materials into account? How can I see/know that?

2- I am trying to add some passive material to the setup. I see a cleanup_passive branch with passive_volume.conf example for a hollow box. The box is defined with type “box” that doesn’t exist in the models.
so can you perhaps tell me what is or where to find the model for the ‘box’?

3- I tried to push my branch of eudet_RD53 but I cant access the gitlab, and I think I need to push the repo first to then request a merge …?

Thank you very much!

Dear @retaibah

  1. with number_of_particles = 1 you will get a single particle per event generated by Geant4 and propagated throught he setup, including all multiple Coulomb scattering and Landau energy deposition effects. The beam_size = 5mm parameter means you have a Gaussian width of your beam of 5mm. So over many events being simulated, your particle distribution will approximate a Gauss with 5mm width.
    I don’t understand fully what you mean with “one particle in one position”. Is this always the same position or does it change from event to event? The latter is the correct and expected behavior.
    Scattering is taken into acocunt by Geant4, you can test this e.g. by setting a low particle energy, switch on the [VisualizationGeant4] module and observe the particle trajectory. Or, of course, the experimental way: put a second detector behind and observe the scattering. :slight_smile:
  2. The cleanup_passive branch is fully unrelated and just current development of refactoring some code. The support for passive materials has been merged to the master branch some months ago and will be released as version 1.6 next week. If you are on master, you can already use it. The different shapes and models are described in the GeometryBuilderGeant4 module documentation here: https://gitlab.cern.ch/allpix-squared/allpix-squared/-/blob/master/src/modules/GeometryBuilderGeant4/README.md . Just place the required elements in your geometry file and mark them with role = "passive". Read more on it in the manual of the master branch or in the example/passive_volume example.
  3. Since you do not have write access to the main repository, you need to fork it (make a copy to your own account), push your changes there and then open the merge request against the main repository. See e.g. here: https://www.tutorialspoint.com/gitlab/gitlab_fork_project.htm

Cheers,
Simon

Hello Simon,

Thank you very for clarifying a lot of points.
I return to point 2 regarding the passive material, I still have a question I didn’t manage, I define in my detector.conf:

[box1]
type = "box"
role = "passive"
size = 200mm 200mm 100mm

[dut_0]
type = "RD53"
position = 0mm 0mm 200mm
orientation_mode = "xyz"
orientation = 0deg 0deg 180deg

but I don’t have any detector model of type “box” and therefore I get a fatal error.
I can see that the types of these model are defined within the [GeometryBuilderGeant4] but allpix2 is still requiring a configuration of the type in /models.

I think I’m just missing a piece of the puzzle, if you can clarify that out I’d appreciate it.
Thank you very much!

Hi @retaibah

could it be that you are using version 1.5 for this exercise? The passive material is not released yet (will be version 1.6 this week) but only available in the master branch of the repository.

With the proper software version, the error you should be getting is:

|21:08:19.162|   (FATAL) Error in the configuration:
                         Key 'material' in section 'box1' does not exist
                         The configuration needs to be updated. Cannot continue.

and after adding a material, e.g. material = "copper", you should probably still define its position and orientation:

[box1]
type = "box"
role = "passive"
size = 200mm 200mm 100mm
material = "copper"
position = 0 0 100mm
orientation = 0 0 0

Cheers,
Simon