;+
; NAME: pa_mike_deadtime.pro
;
; PURPOSE: Apply the deadtime correction to P-Alice data
;
; CATEGORY: Data processing
;
; CALLING SEQUENCE: deadtime_correction = pa_deadtime(cntrate)
;
; INPUTS:
; cntrate -- the measured countrate (Hz) of the data
;
; OUTPUTS:
; Returns the factor by which to multiply the data to yield the
; count rate that would have been detected given infinitely fast
; electronics.
;
; COMMON BLOCKS: None
;
; SIDE EFFECTS: None
;
; NOTES:
; The deadtime correction time constant is 16.2 microseconds. At input
; rates below 50 kHz, the detector electronics is non-paralyzable
; (fixed deadtime per event that is not re-triggerable). To calculate
; the detector output count rate, the following formula is used:
;
; r_out = r_in / (exp[r_in * tau_p] + r_in * tau_n)
;
;
; MODIFICATION HISTORY:
; V 1 2007-02-19 Andrew J. Steffl
; V 2 2008-01-23 AJS corrected algorithm to treat detector
; electronics as non-paralyzable.
; V 3 2008-01-25 AJS Added check if count rate is above 50 kHz
; v 4 2009-02-06 AJS Added hybirid deadtime model
;-
FUNCTION ra_mike_deadtime, cntrate
ncntrate = n_elements(cntrate)
IF ncntrate EQ 0 THEN BEGIN
message, '%RA_MIKE_DEADTIME: CNTRATE not defined!'
return, 1.
ENDIF
tau_n = 15.7e-6
tau_p = 11.3e-6
; For this set of time constants, the detected counts rolls over at 88.509 kHz
; input rate. Assume that whatever Rosetta is looking at, it has a lower
; input count rate than this.
r_in = findgen(88510) + 1.
r_out = r_in / (exp(r_in * tau_p) + r_in * tau_n)
deadtime_correction = interpol(r_in/r_out, r_out, cntrate)
return, deadtime_correction
end