Page History
\This page provides an overview of the status and inner workings of the TES Readout development and eventual implementation.
...
|
PseudoCode
This is a proposed algorithm to handle the data produced by the TES detectors for LCLS-II.
The data is assumed to consist of several time streams per FPGA (250) sampled at 1 MHz. The beam repetition rate is 10 kHz, for a total of 100 samples minimum between valid (photon generated) events. The samples are assumed to be 16 bits.
Parfor : Parallel For
NumberOfChannels : number of channels to be handles by the FPGA
Samples per Window : Number of samples in a single pulse window
TotalNumberOfWindows : Maximum number of windows to be kept in memory for the configured filters. Currently only 3 for a total of four cases. The active window, the preceding one and the following one. Possibly more windows to be added before/after for more precision in the energy measurement.
Active Window : Window on which we are performing the filter calculation
Current Window : Window that is currently loading in buffers.
EventMatrix : Matrix containgin information about the presence of events in each window of each channel.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
CreateCircularBuffers (NumberOfChannels,
SamplesPerWindow, TotalNumberOfWindows)
LoadFilters()
ConfigureDataChannel()
While IncomingData:
LoadDatainBuffers()
ApplyCrosstalkCorrection(All_Channels,CurrentWindow)
EventMatrix = TagEvents(All_Channels)
For each ActiveWindow :
WindowIncrement=+1
Parfor each Channel:
Switch (CheckEvents(EventMatrix)):
Case No Event Before And After
Energy = ApplyFilter(Filter00)
Case Event Before And After
Energy = ApplyFilter(Filter11)
Case Event Before Only
Energy = ApplyFilter(Filter10)
Case Event After Only
Energy = ApplyFilter(Filter00)
SaveEnergyAndTimestamp(xtcFile)
If WindowIncrement == SaveIncrement
SaveWaveformtoXTC(xtcFile, TotalTimeWindow, AllChannels)
Def TagEvents:
Parfor each channel :
If Slope > MinimumSlope:
CurrentWindowEvent=True
Else:
CurrentWindowEvent=False
EventMatrix(channel, currentWindowIndex) = CurrentWindowEvent
Return EventMatrix
Def ApplyFilter(Filter):
For each i, sample :
Temp = linearFunction(sample) * sample
sum1 = temp* Filter(i)
sum2 = sample*Filter2(i) %More filters added if necessary
Energy = sum1+sum2 |
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.
- SetupNotches - Find the transformation η(I,Q) = (I', Q') where η is a complex transformation. We want to move the operation point so that we are at the (I', Q') = (1,0) point and that all variations maximized their projection on Q'.
- Setup the flux ramp. The Squids are connected to the flux generators in large groups. Each group can have a different flux ramp.
- Flux amplitude
- Ramp amplitude
- At this point it is possible to track the phase of the carrier frequency and collect data but the TES still need to be configured.
- The voltage for the TES is selected by tracing the IV curve, from which we get the RTES curve. We wish to be as close as possible to the bottom part of the transition without hitting instability effects.
Benchmarks
This table lists the latest benchmarks.
Currently, it evaluates the average time rate (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. one linear transformation and two inner products. Each pixel has its own ring buffer of 10 windows, each window has 100 data samples of uint_16. The buffers are refilled as the reader nears the empty flag from Random data. The buffers are implemented using Eigen Matrix library.
These benchmarks were obtained os psanagpu116, using O3 and vectored optimization. As a reference, 10 kHz operation gives a time window of 100 µs.
Code Block | ||||
---|---|---|---|---|
| ||||
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 :
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#include <iostream>
#include <Eigen/Dense>
#include <chrono>
#include <unistd.h>
using namespace Eigen;
using namespace std;
#define FILTERS 5
#define VERBOSE 1
#define REPEAT 1000
#define SAMPLESPEREVENT 100
#define MAXWINDOW 6
#define MAXSAMPLESIZE MAXWINDOW*SAMPLESPEREVENT
#define MAXFILTERS 5
#define NUMEVENTS 1000
int evaluate_energy(const ArrayXi samples, const ArrayXXi filters, int windowsize){
ArrayXi temp(MAXSAMPLESIZE, 1);
int size = SAMPLESPEREVENT*windowsize;
temp = (samples.head(size) + ArrayXi::Constant(size,52)) * 50; // linear transformation
//cout << filters.block(0,0,size,1) << endl;
#if FILTERS == 1
temp = temp * filters.topRows(size);
#elif FILTERS == 2
temp = temp * filters.topLeftCorner(size,1) * filters.block(0,1,size,1);
#elif FILTERS == 3
temp = temp * filters.topLeftCorner(size,1) * filters.block(0,1,size,1) * filters.block(0,2,size,1);
#elif FILTERS == 4
temp = temp * filters.topLeftCorner(size,1) * filters.block(0,1,size,1) * filters.block(0,2,size,1) * filters.block(0,3,size,1);
#elif FILTERS == 5
temp = temp * filters.topLeftCorner(size,1) * filters.block(0,1,size,1) * filters.block(0,2,size,1) * filters.block(0,3,size,1) * filters.block(0,4,size,1);
#endif
int sum = temp.sum();
//int sum = 22;
return sum;
}
int main(int argc, char** argv)
{
ArrayXi samples = ArrayXi::Random(MAXSAMPLESIZE);
ArrayXXi filters = ArrayXXi::Random(MAXSAMPLESIZE, FILTERS);
ArrayXXf tempEvents = ArrayXXf::Random(1, NUMEVENTS);
Array<bool, 1, NUMEVENTS> isEvent;
isEvent = tempEvents > 0.5;
int sum;
auto t1 = std::chrono::high_resolution_clock::now();
for (int repeat = 0; repeat<REPEAT; repeat++){
for (int i = 4; i<NUMEVENTS; i++){
if (isEvent(i) == true){
if (isEvent(i-1) == true){
//use filter of length 2
sum = evaluate_energy(samples, filters, 2);
#if VERBOSE > 1
cout << isEvent.segment<6>(i-5) << " -- " << "2 period filter used. The sum is " << sum << endl;
#endif
}
else{
if (isEvent(i-2) == true){
//use filter of length 3
sum = evaluate_energy(samples, filters, 3);
#if VERBOSE > 1
cout << isEvent.segment<6>(i-5) << " -- " << "3 period filter used. The sum is " << sum << endl;
#endif
}
else{
if (isEvent(i-3) == true){
//use filter of length 4
sum = evaluate_energy(samples, filters, 4);
#if VERBOSE > 1
cout << isEvent.segment<6>(i-5) << " -- " << "4 period filter used. The sum is " << sum << endl;
#endif
}
else{
if (isEvent(i-4) == true){
//use filter of length 5
sum = evaluate_energy(samples, filters, 5);
#if VERBOSE > 1
cout << isEvent.segment<6>(i-5) << " -- " << "5 period filter used. The sum is " << sum << endl;
#endif
}
else{
//use single event filter
sum = evaluate_energy(samples, filters, 1);
#if VERBOSE > 1
cout << isEvent.segment<6>(i-5) << " -- " << "Single period filter used. The sum is " << sum << endl;
#endif
}
}
}
}
}
}
}
auto t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> fp_ms = t2 - t1;
#if VERBOSE > 0
cout << "The sum is : " << sum << endl;
cout << "The process took " << fp_ms.count() << "ms" << endl;
#endif
//Multiply vectors then sum the coefficients for inner product.
}
|
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 0 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 1 1 0 1 -- 3 period filter used. The sum is 690148080
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 1 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 1 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 1 0 1 -- 3 period filter used. The sum is 690148080
1 1 1 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 1 0 1 -- 3 period filter used. The sum is 690148080
1 1 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 1 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 1 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 1 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 1 1 0 1 -- 3 period filter used. The sum is 690148080
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 1 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 1 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 1 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 0 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 1 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 0 1 1 1 1 -- 2 period filter used. The sum is 1637963934
0 1 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 1 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
1 1 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 1 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 1 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 1 0 1 1 -- 2 period filter used. The sum is 1637963934
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 1 1 -- 2 period filter used. The sum is 1637963934
1 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
0 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
1 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 1 0 0 0 1 -- 5 period filter used. The sum is 558569752
1 0 0 0 0 1 -- Single period filter used. The sum is 67346722
0 0 1 0 0 1 -- 4 period filter used. The sum is 357753622
1 0 0 1 0 1 -- 3 period filter used. The sum is 690148080
The sum is : 690148080
The process took 11.03ms
|
The following graph shows the calculation rate per pixel as a function of the density of hits. While the data generation is not in the scope of the timer, it may still affect the start and stop of said timer. Clemens algorithm pre generates all data and thus times one continuous loop. Thus if there are no events, the loop is very very efficient. However, the Eigen library used in the most recent version of the code does accelerate the calculation of the inner products, as shown by the better performance at higher hit rates.
Latest code :
Latest integration iteration (Working copy)
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
...
Task | Status | Comment | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Create fake data vectors |
| Using random number vectors | ||||||||||||
Implement event detection algorithm |
| |||||||||||||
Program arguments for benchmarking |
| Arguments for the size of the vectors and the number of array products used Preprocessor arguments | ||||||||||||
Decision tree for event cases |
| Switch case tree for given number of filters - reusable for different cases | ||||||||||||
Input data from simulation |
| |||||||||||||
Create circular buffer |
| |||||||||||||
Optimize loop behavior |
| |