This page provides an overview of the status and inner workings of the TES Readout development and eventual implementation.
Description of TES
Configuration Steps
The following are an overview of the main configuration steps for the TES-SMURF detector to go from turn the system on and start collecting data.
To be completed as more information becomes available.
- Configure the main registers of the SMURF board (to be detailed)
- Set the bias of the cryogenic amplifiers. The bias are provided by the manufacturer.
- Find the resonator frequencies -
- Each multiplexed line must be scanned in frequency. The resonators are situated where the amplitude of the signal drops and there is a phase discontinuity. The phase discontinuity is used to determine the most precise frequency of the resonators. If 2 resonators are too close, one needs to be turned off to avoid crosstalk.
Benchmarks
This table lists the latest benchmarks.
Currently, it evaluates the average time (over 1e6 iterations) to complete the number of products indicated as well as the sum of the resulting vector. The length of the vector varies according to the number of samples.
For a fixed number of samples, the code uses if statements to directly indicates how many filters to use. For the code using the binary decision tree, the number of filters is passed as a prepocessor argument. Once we know how many filters are necessary this will become a fixed value.
These benchmarks were obtained os psanagpu116, using O3 and vectored optimization. As a reference, 10 kHz operation gives a time window of 100 µs.
g++ -std=c++11 -O3 -DNDEBUG -march=native -IEigen main.cpp
All values are in μs.
Number of products Number of samples | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
100 | 0.061 | 0.074 | 0.091 | 0.108 | |
200 | 0.113 | 0.145 | 0.176 | 0.210 | |
300 | 0.150 | 0.190 | 0.241 | 0.296 | |
400 | 0.200 | 0.266 | 0.329 | 0.397 | |
500 | 0.239 | 0.321 | 0.402 | 0.486 | |
600 | 0.279 | 0.378 | 0.476 | 0.576 | |
700 | 0.318 | 0.435 | 0.549 | 0.667 | |
Decision tree | 0.092 | 0.117 | 0.138 | 0.161 | 0.203 |
Latest code :
Latest integration iteration (Working copy)
11/7/2018 The current code is functional and creates random data, selects a case and runs the inner products on a self-renewing stream. It currently integrates Eigen u_int arrays in ring buffers with Eigen float arrays for filters with the switch case strategy to distinguish between the 6 filter cases. However it suffers from slower than expected performance which has been partially fixed and the other part is still being tracked down. It seems to be slow loop behavior however the instruction causing the loop to hang is eluding me...
Original codes before combinations.
Code with switch case (Clemens)
References
Ullom and Bennet. Review of superconducting transition sensors for X-ray and gamma-ray spectroscopy
Irwin and Hilton. Transition-edge sensors.
Tasks
Task | Status | Comment |
---|---|---|
Create fake data vectors | NOT STARTED | Using random number vectors |
Implement event detection algorithm | NOT STARTED | |
Program arguments for benchmarking | DONE | Arguments for the size of the vectors and the number of array products used Preprocessor arguments |
Decision tree for event cases | DONE | Switch case tree for given number of filters - reusable for different cases |
Input data from simulation | NOT STARTED | |
Create circular buffer | DONE | |
Optimize loop behavior | IN PROGRESS |