NuRadioReco.modules.analogToDigitalConverter module
- NuRadioReco.modules.analogToDigitalConverter.perfect_comparator(trace, adc_n_bits, adc_ref_voltage, mode='floor', output='voltage')[source]
Simulates a perfect comparator flash ADC that compares the voltage to the voltage for the least significative bit and takes the floor or the ceiling of their ratio as a digitised value of the trace.
- Parameters:
- trace: array of floats
Trace containing the voltage to be digitised
- adc_n_bits: int
Number of bits of the ADC
- adc_ref_voltage: float
Voltage corresponding to the maximum number of counts given by the ADC: 2**adc_n_bits - 1
- mode: string
‘floor’ or ‘ceiling’
- output: {‘voltage’, ‘counts’}, default ‘voltage’
Options:
‘voltage’ to store the ADC output as discretised voltage trace
‘counts’ to store the ADC output in ADC counts
- Returns:
- digital_trace: array of floats
Digitised voltage trace in volts or ADC counts
- NuRadioReco.modules.analogToDigitalConverter.perfect_floor_comparator(trace, adc_n_bits, adc_ref_voltage, output='voltage')[source]
Perfect comparator ADC that takes the floor value of the comparison. See perfect_comparator
- NuRadioReco.modules.analogToDigitalConverter.perfect_ceiling_comparator(trace, adc_n_bits, adc_ref_voltage, output='voltage')[source]
Perfect comparator ADC that takes the floor value of the comparison. See perfect_floor.
- NuRadioReco.modules.analogToDigitalConverter.apply_saturation(adc_counts_trace, adc_n_bits, adc_ref_voltage)[source]
Takes a digitised trace in ADC counts and clips the parts of the trace with values higher than 2**(adc_n_bits-1)-1 or lower than -2**(adc_n_bits-1).
- Parameters:
- adc_counts_trace: array of floats
Voltage in ADC counts, unclipped
- adc_n_bits: int
Number of bits of the ADC
- adc_ref_voltage: float
Voltage corresponding to the maximum number of counts given by the ADC: 2**(adc_n_bits-1) - 1
- Returns:
- saturated_trace: array of floats
The clipped or saturated voltage trace
- class NuRadioReco.modules.analogToDigitalConverter.analogToDigitalConverter[source]
Bases:
object
This class simulates an analog to digital converter. The steps followed by this module to achieve the conversion are:
- The following properties of the channel are read. They must be in the
detector configuration file:
“adc_nbits”, the number of bits of the ADC
- “adc_reference_voltage”, the reference voltage in volts, that is, the
maximum voltage the ADC can convert without saturating
“adc_sampling_frequency”, the sampling frequency in GHz
- A random clock offset (jitter) can be added, as it would happen in
a real experiment. Choose random_clock_offset = True to do so. A time delay can also be fixed if the field “adc_time_delay” is specified in ns. The channel trace is interpolated to get the trace values at the clock times displaced from the channel times. This is fine as long as the input channel traces have been simulated with a sampling rate greater than the ADC sampling rate, which should be the case. Upsampling is also possible, and recommended for phased array simulations.
Important
Upsampling after digitisation is performed by the FPGA, which means that the digitised trace is no longer discretised after being upsampled. The FPGA uses fixed point arithmetic, which in practice can be approximated as floats for our simulation purposes.
- A type of ADC converter is chosen, which transforms the trace in ADC
counts (discrete values). The available types are listed in the list _adc_types, which are (see functions with the same names for documentation):
‘perfect_floor_comparator’
‘perfect_ceiling_comparator’
Important
Since this module already performs a downsampling, there is no need to use the channelResampler in those channels that possess an ADC. The chosen method for resampling is interpolation, since filtering only the spectrum below half the sampling frequency would eliminate the higher Nyquist zones.
Note that after this module the traces are still expressed in voltage units, only the possible values are discretised.
If the ADC is used for triggering and the user does not want to modify the trace, the function get_digital_trace can be used. If there are two different ADCs for the same channel, one for triggering and another one for storing, one can define a trigger ADC adding “trigger_” to every relevant ADC field in the detector configuration, and use them setting trigger_adc to True in
get_digital_trace
.Methods
get_digital_trace
(station, det, channel[, ...])Returns the digital trace for a channel, without setting it.
run
(evt, station, det[, clock_offset, ...])Runs the analogToDigitalConverter and transforms the traces from all the channels of an input station to digital voltage values.
end
- get_digital_trace(station, det, channel, Vrms=None, trigger_adc=False, clock_offset=0.0, adc_type='perfect_floor_comparator', return_sampling_frequency=False, adc_output='voltage', trigger_filter=None, channel_id=None)[source]
Returns the digital trace for a channel, without setting it. This allows the creation of a digital trace that can be used for triggering purposes without removing the original information on the channel.
- Parameters:
- station: framework.station.Station object
- det: detector.detector.Detector object
- channel: framework.channel.Channel object
- Vrms: float
If supplied, overrides adc_reference_voltage as supplied in the detector description file
- trigger_adc: bool
If True, the relevant ADC parameters in the config file are the ones that start with ‘trigger_’
- random_clock_offset: bool
If True, a random clock offset between -1 and 1 clock cycles is added
- adc_type: string
The type of ADC used. The following are available:
perfect_floor_comparator
perfect_ceiling_comparator
See functions with the same name on this module for documentation
- return_sampling_frequency: bool
If True, returns the trace and the ADC sampling frequency
- adc_output: string
Options:
‘voltage’ to store the ADC output as discretised voltage trace
‘counts’ to store the ADC output in ADC counts
- trigger_filter: array floats
Freq. domain of the response to be applied to post-ADC traces Must be length for “MC freq”
- channel_id: int
If supplied, using this id to request detector description instead of the channel ID in the channel object
- Returns:
- digital_trace: array of floats
Digitised voltage trace
- adc_sampling_frequency: float
ADC sampling frequency for the channel
- run(evt, station, det, clock_offset=0.0, adc_type='perfect_floor_comparator', adc_output='voltage', trigger_filter=None)[source]
Runs the analogToDigitalConverter and transforms the traces from all the channels of an input station to digital voltage values.
- Parameters:
- evt: framework.event.Event object
- station: framework.station.Station object
- det: detector.detector.Detector object
- clock_offset: float
- adc_type: string
The type of ADC used. The following are available:
‘perfect_floor_comparator’
See functions with the same name on this module for documentation
- adc_output: string
Options:
‘voltage’ to store the ADC output as discretised voltage trace
‘counts’ to store the ADC output in ADC counts
- upsampling_factor: integer
Upsampling factor. The digital trace will be a upsampled to a sampling frequency int_factor times higher than the original one