Bif is a modified mini-tlu ( with a custom firmware (

It provides 4 trigger inputs, but capability to store them all at once is limited. They all have to come within the same 25ns period at the moment. Future firmware should be able to record triggers individually.

  • Inputs are internally terminated (50 Ohm) - no need for external termination
  • Logic level: Nim (negative voltage)
  • trigger edge: negative edge (default edge on NIM)
  • Trigger threshold: configurable, typically -0.2V

Requires a gigabit ethernet! May fail to communicate over 100 MBit ethernet

The IP address is

Trigger mask


Connection via "Frankenstein" cable

  • Frankenstein RJ45 goes to the RJ45 connector on the mezzanine
  • ground lemo cable needs to be attached to one of the inputs. The central signal pin is removed from this connector, therefore it can be used together with lemo-T splitter
  • Preferred trigger input is trigger 3.
  • clock pin need to be carefully inserted (see the right detail), red wire goes to the upper pin

Expected performance

The BIF has an intristic timestamping resolution of 0.78125 ns (comes from 640 MHz DDR sampling). The performance of the whole system can be checked from the recorded data at DESY testbeam. The electrons are generated from the DESY II accelerator in rather fixed timing of multiples of 976.65234 ns (=1250.115 bins). This is then the expected trigger distance in the data. 

Trigger distances can be extracted from the BIF raw data using the ahcalBifCorrelation utility from

./ahcalbifcorrelate -b ${BIF_RAW_FILE} -w /dev/zero -g -r 0 
#if you are interested in the consecutive triggers only, pipe to:
#  |egrep "^1[0-9]{3,3}$"
# or 
#  |egrep "^[0-9]{4,4}$

The histogram of the trigger distances (converted to ns) looks typically like this:
Distribution with the exact time distance of 976 ns:

Distribution when up to 7.8 ns taken into account (modulo 1250.115 bins):  

# make a histogram modulo 1250.115 bins (repetition rate of DESY beam)

set table "hist1.txt"; 
plot "distances.txt" u (600+round(modulo($1-600,1250.115))):(1.0) smooth freq
unset table

stats "hist1.txt" u 1:2
# get the maximum

set fit errorvariables
#GNUPLOT is sometimes picky on the starting parameters:
a=5.0E+6;sigma=1.7; mu=1250.0;
set ylabel "counts"
set xlabel "time difference [ns]
set title "time difference of BIF triggers (all runs in 08/2019)"
set xrange[1250-10:1250+10]; 
fit gauss(x) 'hist1.txt' u ($1):2 via a,sigma,mu ; 
set yrange [1:*]
set xrange [(mu-20)/1.28:(mu+20)/1.28]; plot 'hist1.txt' u (($1)/1.28):2 w histeps title "data", gauss(x*1.28) title  "\n\ngauss: \n".sprintf("mu=%.3f+-%.3f ns",mu/1.28,mu_err/1.28)."\nsigma=".sprintf("%.3f+-%.3f ns",sigma/1.28,sigma_err/1.28)

Since the sigma of the gaussian distribution describes the sigma of the time difference, the single timestamp resolution (including the NIM crate, cables, PMT and scintillators) should be 1/sqrt(2) of that value, meaning the resolution should be in the order of 1.0 ns

  • No labels