Simulate the pulse signal of silicon strip detector


I’m learning to simulate the pulse signal of silicon strip detector. The source is protons of 14 MeV.
I have two very primary questions.

  1. I want to confirm that the modules I use is correct. Is there a better choice?
  2. I want to confirm that the signals I want are the four files starting with “amp_pulse_” in the figure. How do I get the data from the root file?

Here is the configuration file I used.

number_of_events = 1
detectors_file = "mySSD_geometry.conf"
model_paths = ./

world_material = "vacuum"

physics_list = FTFP_BERT_LIV
max_step_length = 10um
source_type = "macro"
number_of_particles = 1
file_name = "source.mac"

model = "linear"
bias_voltage = -50V
depletion_voltage = -30V

temperature = 293.15K
charge_per_step = 100


model = "simple"
integration_time = 500e-9s
sigma_noise = 0.1e-3V
threshold = -10e-3V
clock_bin_toa = 1.5625ns
clock_bin_tot = 25.0ns
feedback_capacitance = 5e-15C/V
rise_time_constant = 1e-9s
feedback_time_constant = 10e-9s
output_plots = 1
output_plots_scale = 30ke
output_plots_bins = 100
output_pulsegraphs = 1


Screenshot from 2021-12-29 23-53-05

1 Like

Dear @Tunooo ,

thanks for your message.

  1. The modules used in your simulation are not working well for generating pulse signals. You are currently using the module ProjectionPropagation for the propagation of charge carriers inside the sensor volume. This module simply projects all charge carriers of a given type to the sensor surface, but does not produce any time-resolved information. However, this time information is relevant for generating pulses. I suggest to use the GenericPropagation module instead. If you should have a 3D mapping of the electric field and the weighting potential, you can also use the TransientPropagation module. Besides that, the modules you are using are fine.
  2. If the visual output by double clicking the corresponding graphs is not sufficient for this confirmation, you can write the pulse data to file by using the module ROOTObjectWriter as the last module, which will write the pulses (and other information, if configured correspondingly) to file. You can then read the data using root, loading the library lib/, similarly to the macros and instructions provided here. If you should need more help on this, please let us know.


Dear @pschutze,

Thanks for your timely answer, which is very helpful to me.

I have a new question I’d like to ask you.
The pulse output is generated at each event. Is there any way to output one strip’s total pulse in order to reduce file size?

All the best,

Hi @Tunooo ,

this is not implemented. In PulseTransfer and TransientPropagation there are graphs showing profiles of all pulses, but these take all pixels into account, not only a single one.

As the framework is open to the community and I currently wouldn’t have the time for it, please feel free to contribute and implement such a feature :slight_smile: If you do so, we would be happy for a merge request :wink:


Hi @pschutze ,

Sorry for the late reply. I think that the goal of merging pulse signals for all events can be achieved by using DepositionReader module. If all the event numbers are set to 0, there will be only one pulse for one strip or pixel in the CSA output.

I don’t know whether this can work correctly. The result of this operation is that the sequence information of time and position disappears. We only know how much energy is deposited at a certain place and time in a step. Does the sequence information affect the results?

Looking forward to your reply!

All the best,

Hi @Tunooo ,

this for sure works as long as the signal shape does not depend on its amplitude. If it does, which is the case in many amplifiers, this is not equal to averaging over multiple events.

Another solution would be to simulate all the events, write out the data and average the pulses per strip in an analysis script/macro.


Hi @pschutze ,

Thanks for your advice. I’ll try the method of using script to analyze the output data.

All the best,