Amplitude Response Unit

Hello everyone,
In my Allpix2 simulation using the CSA Digitizer module, the Y-axis (Amplitude Response) is scaled by 10^-12, but I don’t know the exact unit of this amplitude. Can anyone help identify it for me?
Best regards,

Hi @emma ,

It depends a bit on which plot you mean. If it’s a pulsegraph output by Allpix Sqaured, the unit is mV on the y-axis. If you get the histogram some other way, please let us know how you do it and then we can probably figure it out!

Kind regards,
Håkan

Hi @hwennlof,
Thank You for the clarification! Actually, I was referring to the response function. You’ll find the corresponding curve attached.

Just to clear things here, @emma you already received a long e-mail by @annvau, quoting here for completeness:

In general, a charge-sensitive amplifier is a current integrator that produces a voltage output proportional to the integrated value of the input current.
For a little more introduction, see e.g. Charge sensitive preamplifiers explained – Cremat Inc .

As for what Allpix2 does: you have two options of which kind out output signal you want to match your analysis. To quote the AP2 manual section for the module ( CSADigitizer | Allpix Squared ):
“The values stored in PixelHit depend on the Time-of-Arrival (ToA) and Time-over-Threshold (ToT) settings. […] If a ToT clock is defined, then signal will be the amount of ToT cycles the pulse is above the threshold, else it will be the integral of the amplified pulse.”

If you look at the source code, you will find the following lines:
(src/modules/CSADigitizer/CSADigitizerModule.cpp · master · Allpix Squared / Allpix Squared · GitLab)

       // Decide whether to store ToT or the pulse integral:
       auto charge = (store_tot_ ? static_cast<double>(get_tot(timestep, std::get<2>(arrival), amplified_pulse))
                                 : std::accumulate(amplified_pulse.begin(), amplified_pulse.end(), 0.0));

       LOG(DEBUG) << "Pixel " << pixel_index << ": time "
                  << (store_toa_ ? std::to_string(static_cast<int>(time)) + "clk"
                                 : Units::display(time, {"ps", "ns", "us"}))
                  << ", signal "
                  << (store_tot_ ? std::to_string(static_cast<int>(charge)) + "clk"
                                 : Units::display(charge, {"V*s", "mV*s"}));

… so when in doubt, enable the DEBUG log level, and you will get more information on what is happening: the “pixel charge” that gets assigned to the pixel is either a number in Time-Over-Threshold units, or an integrated voltage.

I hope this helps to clarify things.

ok, thank you for the clarification.