Generating a multipoint lookup table

This page documents how to generate a lookup table containing time offsets (t0) for particular signal traces. The table could then be used to unpack hits efficiently and with much better time resolution than can be accomplished with DCS (dual-correlated sampling).

The current implementation of a lookup table and how to unpack it was written by Chris Backhouse and is in the Calibrator package. See ADCShapeFit.h, ADCShapeFit.cxx, and for details on how to use the table once it has been generated. Note that two tables have been pregenerated using the current configuration (as of August 5, 2014). Calibrator/adc_shape_fit_table.root works for the FD and NDOS while Calibrator/adc_shape_fit_table_nd.root is for the ND.

The actual generation is currently done using Calibrator/standalone/ To generate a new table, add the Calibrator package to a test release and make. The genADCShapeFitTable executable should be in ./bin/LinuxX.X-GCC-debug/. To run using the most recently committed settings, simply use genADCShapeFitTable [FD|ND] depending on which detector you are using.

Important settings

Sample, rise, and fall time

The sample time is the number of nanoseconds between each readout on the APD's (ie. the time between points in a trace). The rise and fall time are those of the ASIC curve, and should be given in units of samples. They should be set in lines 27-29, as appropriate.

  const double sampleTime = isND ? 125 : 500; // ns
  const double riseTime = (isND ?   80 :  380)/sampleTime; // samples
  const double fallTime = (isND ? 4500 : 7000)/sampleTime; // samples

Number of hits per trace

This is the number of readouts available in each trace. It should be set on line 26 of ADCShapeFit.cxx:

  // Number of points we expect to receive, to find the best peak match with
  const unsigned int kNumFineTimingADCPoints = 4; // Including the DCS origin

Number of samples per offset

The offset is the internal unit of the table. Setting this parameter sets the granularity of the table. Currently, the table uses 8 bits for the offset, and covers a range of 4 samples. Thus the 256 possible values for the offset are broken into 4 equal chunks of 64, giving on line 33 of ADCShapeFit.cxx:

  const double kSamplesPerOffset = 1./64;

A comment in the code notes that "Smaller steps than this aren't observed to improve resolution further."

Generate the lookup table for DDT WaveformProcessor

  genADCShapeFitTableDDT [FD|ND]