Difference between revisions of "Data mode"

From MCEWiki
(MCE Data Types)
 
(31 intermediate revisions by 7 users not shown)
Line 1: Line 1:
= MCE Data Types =
+
During data readout from the MCE, there are different types of data associated with each detector. These are:
There are 5 types of data that the MCE can return in data packets: 
 
* '''sq1_fb''': the feedback applied by the MCE to the 1<sup>st</sup> stage SQUIDs:
 
** Where <math>\sum_{i=1}^n error_i</math> is the integral of the error from the moment the pixel was locked, and
 
** Where <math>\left[error_{n} - error_{n-1} \right]</math> is the difference between the current error value and the previous one.
 
<math>sq1\_fb_{t} = \frac{1}{2^{12}} \left[(gainp \times error_{t}) + (gaini \times \sum_{i=1}^{t} error_i) + (gaind \times [error_{t} - error_{t-1}]) \right]</math>
 
* '''error''':  the error calculated from the Series-Array signals sampled by the ADCs:
 
<math>error_{t+1} = \sum_{n=1}^{sample\_num} (adc\_reading_{n} - adc\_offset)</math>
 
* '''sq1_fb_filtered''': the low-pass filtered SQ1 feedback (see [[ Digital 4-pole Butterworth Low-pass filter | 4-pole Butterworth low-pass filter ]]).  The effective DC gain, including quantization error, is approximately 1218.
 
<math>filter_{t+1} = 1218 \times low\_pass\_filter(sq1\_fb_{[t, t-1, t-2]})</math>
 
* '''num_flux_jumps''':  the value stored in the flux-jump counter.  See [[ Flux jumping ]].
 
<math>num\_flux\_jumps_{t} = \frac{1}{flux\_quanta} \left[(sq1\_fb_{t}) - (sq1\_fb\_applied\_to\_DAC_{t})\right]  </math>
 
* '''raw_data''': raw 50 MHz data.  See [[ Raw-mode readout ]].
 
  
= Data Modes (current as of Readout Card firmware revision 4.0.c) =
+
# calculated SQ1 feedback ('''''sq1_fb'''''):
{| border="1"
+
#* <math>sq1\_fb_{n+1} =  \frac{1}{2^{12}} \left[\left(gainp \times q_{n}\right) + \left(gaini \times \sum_{i=1}^{n} error_i\right) + \left(gaind \times [error_{n} - error_{n-1}]\right)\right] </math>
 +
#* where <math> q_n=error_n + b\times q_{n-1}</math>
 +
#* ''n'' is the multiplexing-frame index
 +
#*''i'' is reset when the PID servo is restarted by setting the {{param|rc|servo_mode}} to 3 or {{param|rc|flx_lp_init}} to 1.
 +
#*''b'' < 1 and specified by {{param|rc|pterm_decay_bits}}
 +
# coadded error ('''''error'''''):
 +
#* calculated from the Series-Array signal sampled @ 50MHz by the ADC
 +
#* <math>error = \sum_{1}^{sample\_num} (adc\_reading_{i} - adc\_offset)</math>
 +
# low-pass filtered SQ1 feedback ('''''sq1_fb_filtered'''''):
 +
#*see [[ Digital 4-pole Butterworth Low-pass filter | 4-pole Butterworth low-pass filter ]]. 
 +
#* The effective DC gain, including quantization error, is approximately: <math>sq1\_fb\_filtered_{n} \simeq 1218 \times \left[sq1\_fb_{n-1}\right]</math>
 +
# flux-jump counter ('''''num_flux_jumps''''').  See [[ Flux jumping ]].
 +
# raw ADC samples @ 50 MHz ('''''raw''''').  See [[ Raw-mode readout ]].
 +
 
 +
Note that '''''error''''', '''''sq1_fb''''', and '''''sq1_fb_filtered''''' are internally stored as 32 bits while '''''num_flux_jumps''''' are stored as 8 bits and '''''raw''''' as 14 bits. During readout the appropriate windowing is chosen for each data type.
 +
== Data Modes and Windowing ==
 +
The type of data reported by the MCE during data acquisition is determined by the MCE parameter {{param|rc|data_mode}}. Depending on the data mode, the reported data will be windowed in a different way. The notes in the table below explain the windowing, in terms of how many bits are reported and the relative scaling of the windowed value relative to some reference data mode. The reference data modes for error, sq1fb and filtered_sq1fb are, respectively, 0, 1, and 2.  
 +
 
 +
{| class="wikitable"
 
|-
 
|-
! Data Mode !! Summary !! Pixel-Data Description !! RC Firmware Revision  
+
! data-mode !! data-type !! Description !! RC Firmware Revision  
 
|-
 
|-
 
| 0  
 
| 0  
|| Error
+
|| <center>''error''</center>
|| 32b (signed) co-added Error signal err[31:0].
+
|| 32b (signed) co-added error <br />
 
+
* [31:0] = error  
'''error_mode0''' = error  
 
  
 
|| all
 
|| all
 
|-
 
|-
 
| 1  
 
| 1  
|| Feedback
+
|| <center>''sq1_fb''</center>
||32b (signed) SQ1 Feedback data fb[31:0].  When servo_mode = 3:
+
|| 32b (signed) calculated SQ1 feedback.
 
+
* [31:0] = sq1_fb * 2<sup>12</sup> when {{param|rc|servo_mode}} = 3
'''feedback_mode1''' = sq1_fb * 2<sup>12</sup>
+
* [31:0] = sq1_fb when {{param|rc|servo_mode}} != 3
 
+
''Note that {{param|rc|servo_mode}}=3 is the normal running condition. The non-servoing form, used at times during array-auto-tune for example, is included here for completeness.
 +
''
 
|| all
 
|| all
 
|-
 
|-
 
| 2  
 
| 2  
|| Filtered feedback
+
|| <center>''filtered_sq1_fb''</center>
||32b (signed) low-pass filtered SQ1 feedback data fb[31:0]
+
||32b (signed) low-pass filtered SQ1 feedback data.  <br />
 
+
* [31:0] = sq1_fb_filtered
'''filtered_fb_mode2''' = sq1_fb_filtered
 
  
 
|| 2.0.5 and later
 
|| 2.0.5 and later
 
|-
 
|-
| 3  
+
| 3 obsolete <br /> (see 12)
|| Raw 50 MHz
+
|| <center>raw</center>
|| Raw 50 MHz ADC samples raw[13:i]
+
|| Raw 50 MHz ADC samples raw[13:i], where i=0 in rev. 4.3.7 and i=6 in all previous firmware. <br />
 
+
* [31:0] = raw_data / (2<sup>i</sup>),
'''raw_mode3''' = (adc_reading – adc_offset) / (2<sup>i</sup>),
 
 
 
where i=0 in rev. 4.3.7 and i=6 in all previous firmware.
 
  
 
|| Only 3.0.6, 3.0.16, 3.0.25, 4.1.7, 4.2.7, 4.3.7
 
|| Only 3.0.6, 3.0.16, 3.0.25, 4.1.7, 4.2.7, 4.3.7
 
|-
 
|-
 
| 4  
 
| 4  
|| 18:14 Mixed
+
|| <center>18:14 mixed </center>
||Signed 18b SQ1 feedback fb[31] & fb[28:12] + signed 14b coadded error signal err[31] & err[12:0].  
+
||signed 18b SQ1 feedback + signed 14b coadded error   <br />
 
+
* [31:14] = sq1_fb
'''feedback_mode4''' = sq1_fb
+
* [13:0]  = error
 
 
'''error_mode4''' = error
 
  
 
|| 2.0.9 and later
 
|| 2.0.9 and later
 
|-
 
|-
 
| 5  
 
| 5  
|| 24:8 mixed  
+
|| <center>24:8 mixed </center>
|| Signed 24b SQ1 feedback fb[31:8] + signed 8b num_flux_jumps fj[7:0].
+
|| signed 24b SQ1 feedback + signed 8b num_flux_jumps[7:0]. <br />
 
+
* [31:8] = sq1_fb * 2<sup>4</sup>
'''feedback_mode5''' = sq1_fb * 2<sup>4</sup>
+
* [7:0]  = num_flux_jumps
  
 
|| all
 
|| all
 
|-
 
|-
 
| 6 obsolete  
 
| 6 obsolete  
|| 18:14 mixed
+
|| <center>18:14 mixed</center>
|| Signed 18b filtered data filter[31] & filter[27:11] + signed 14b coadded error signal err[31] & err[12:0].
+
|| signed 18b filtered data + signed 14b co-added <br />
 
+
* [31:13] = sq1_fb_filtered / (2<sup>11</sup>)
'''filtered_fb_mode6''' = sq1_fb_filtered / (2<sup>11</sup>)
+
* [12:0]  = error
 
 
'''error_mode6''' = error
 
  
 
|| 3.0.30 to 4.0.6 only
 
|| 3.0.30 to 4.0.6 only
 
|-
 
|-
 
| 7  
 
| 7  
|| 22:10 mixed
+
|| <center>22:10 mixed</center>
|| Signed 22b filtered data filter[31] & filter[27:7] + signed 10b coadded error signal err[31] & err[12:4].
+
|| signed 22b filtered data + signed 10b coadded error<br />
 
+
* [31:10] = sq1_fb_filtered / (2<sup>7</sup>)
'''filtered_fb_mode7''' = sq1_fb_filtered / (2<sup>7</sup>)
+
* [9:0]  = error / (2<sup>4</sup>)
 
 
'''error_mode7''' = error / (2<sup>4</sup>)
 
  
 
|| 4.0.2 and later
 
|| 4.0.2 and later
 
|-
 
|-
 
| 8 obsolete
 
| 8 obsolete
||24:8 mixed  
+
||<center>24:8 mixed</center>
|| Signed 24b filtered data filter[31:8] + signed 8b num_flux_jumps fj[7:0].
+
|| signed 24b filtered data + signed 8b num_flux_jumps[7:0]. <br />
 
+
* [31:8] = sq1_fb_filtered / (2<sup>8</sup>)
'''filtered_fb_mode8''' = sq1_fb_filtered / (2<sup>8</sup>)
+
* [7:0]  = num_flux_jumps
  
 
|| 4.0.4 only
 
|| 4.0.4 only
 
|-
 
|-
| 9  
+
| 9 obsolete
|| 24:8 mixed  
+
|| <center>24:8 mixed </center>
|| Signed 24b filtered data filter[31] & filter[23:1] + signed 8b num_flux_jumps fj[7:0].
+
|| signed 24b filtered data + signed 8b num_flux_jumps[7:0]. <br />
 +
* [31:8] = sq1_fb_filtered/ (2<sup>1</sup>)
 +
* [7:0] = num_flux_jumps
  
'''filtered_fb_mode9''' = sq1_fb_filtered/ (2<sup>1</sup>)
+
|| 4.0.5 till 4.0.a
 
 
|| 4.0.5 and later
 
 
|-
 
|-
 
| 10  
 
| 10  
|| 25:7 mixed  
+
|| <center>25:7 mixed</center>
|| Signed 25b filtered data filter[27:3] + signed 7b num_flux_jumps fj[6:0].
+
|| Signed 25b filtered data + signed 7b num_flux_jumps. <br />
 
+
* [31:7] = sq1_fb_filtered / (2<sup>3</sup>)
'''filtered_fb_mode10''' = sq1_fb_filtered / (2<sup>3</sup>)
+
* [6:0]  = num_flux_jumps
  
 
|| 4.1.6, 4.0.b and later
 
|| 4.1.6, 4.0.b and later
|}
+
|-
 +
| 11
 +
|| <center>6:3 mixed, debugging mode </center>
 +
|| Unsigned 6b row_index + unsigned 3b column_index. <br />
 +
* [31:10] '''----'''
 +
* [9:3] '''row_index'''
 +
* [2:0] '''column_index'''
  
 +
|| 5.0.0 and later
 +
|-
 +
| 12
 +
||<center> raw</center>
 +
|| Raw 50 MHz ADC samples raw[13:0], sign-extended to 32 bits.
 +
* [31:0] = raw_data
  
 +
|| 4.0.d, 4.0.e, 5.0.1+
 +
|}
  
= Data Mode Notes =
+
== Links ==
* Depending on the data mode, these values will be windowed in a different way.  The notes in the table below explain the windowing, in terms of how many bits are reported and the relative scaling of the windowed value relative to some reference data mode.
+
* [[ MCE firmware ]]
* The 'data_mode' parameter of each readout card determines which signals end up in the frame data, and in what arrangement.  In order to fit the desired data into 32 bits, a signal may be windowed (some upper and lower bits dropped) and put into some subset of the 32 bits.  The table below explains the windowing and packing of the signals for all data modes of the MCE.
 
* The type, gain, and windowing of the data returned depends on what data mode the MCE is in.  See the table at the bottom of this page for a complete listing of data modes. 
 
* Generally, a data packet contains one data point per pixel, although there are exceptions to this:
 
** Fast Data: packets contain data for a subset of pixels to allow readout at a faster rate:  [[ Fast Data Readout ]].
 
** Raw Data: packets contain a 50MHz time stream of data starting from row zero.
 
 
 
= Automatic loading of data with mas_data.pro =
 
Please note that, by default, [[ mas_data.pro ]] will rescale data in the following way:
 
* error signals are rescaled to match the units of data mode 0.
 
* sq1 feedback is rescaled to sq1_feedback (DAC) units (i.e. data mode 1 divided by 2<sup>12</sup>)
 
* filtered sq1 feedback is rescaled to the units of data mode 2.
 
  
This means the IDL user does not need to worry about the windowing of the different data modes for many applications.
+
[[Category:Readout Card Firmware]]
 +
[[Category:MAS]]
 +
[[Category:MCE Script]]

Latest revision as of 14:35, 6 August 2019

During data readout from the MCE, there are different types of data associated with each detector. These are:

  1. calculated SQ1 feedback (sq1_fb):
    • <math>sq1\_fb_{n+1} = \frac{1}{2^{12}} \left[\left(gainp \times q_{n}\right) + \left(gaini \times \sum_{i=1}^{n} error_i\right) + \left(gaind \times [error_{n} - error_{n-1}]\right)\right] </math>
    • where <math> q_n=error_n + b\times q_{n-1}</math>
    • n is the multiplexing-frame index
    • i is reset when the PID servo is restarted by setting the servo_mode to 3 or flx_lp_init to 1.
    • b < 1 and specified by pterm_decay_bits
  2. coadded error (error):
    • calculated from the Series-Array signal sampled @ 50MHz by the ADC
    • <math>error = \sum_{1}^{sample\_num} (adc\_reading_{i} - adc\_offset)</math>
  3. low-pass filtered SQ1 feedback (sq1_fb_filtered):
    • see 4-pole Butterworth low-pass filter .
    • The effective DC gain, including quantization error, is approximately: <math>sq1\_fb\_filtered_{n} \simeq 1218 \times \left[sq1\_fb_{n-1}\right]</math>
  4. flux-jump counter (num_flux_jumps). See Flux jumping .
  5. raw ADC samples @ 50 MHz (raw). See Raw-mode readout .

Note that error, sq1_fb, and sq1_fb_filtered are internally stored as 32 bits while num_flux_jumps are stored as 8 bits and raw as 14 bits. During readout the appropriate windowing is chosen for each data type.

Data Modes and Windowing

The type of data reported by the MCE during data acquisition is determined by the MCE parameter data_mode. Depending on the data mode, the reported data will be windowed in a different way. The notes in the table below explain the windowing, in terms of how many bits are reported and the relative scaling of the windowed value relative to some reference data mode. The reference data modes for error, sq1fb and filtered_sq1fb are, respectively, 0, 1, and 2.

data-mode data-type Description RC Firmware Revision
0
error
32b (signed) co-added error
  • [31:0] = error
all
1
sq1_fb
32b (signed) calculated SQ1 feedback.

Note that servo_mode=3 is the normal running condition. The non-servoing form, used at times during array-auto-tune for example, is included here for completeness.

all
2
filtered_sq1_fb
32b (signed) low-pass filtered SQ1 feedback data.
  • [31:0] = sq1_fb_filtered
2.0.5 and later
3 obsolete
(see 12)
raw
Raw 50 MHz ADC samples raw[13:i], where i=0 in rev. 4.3.7 and i=6 in all previous firmware.
  • [31:0] = raw_data / (2i),
Only 3.0.6, 3.0.16, 3.0.25, 4.1.7, 4.2.7, 4.3.7
4
18:14 mixed
signed 18b SQ1 feedback + signed 14b coadded error
  • [31:14] = sq1_fb
  • [13:0] = error
2.0.9 and later
5
24:8 mixed
signed 24b SQ1 feedback + signed 8b num_flux_jumps[7:0].
  • [31:8] = sq1_fb * 24
  • [7:0] = num_flux_jumps
all
6 obsolete
18:14 mixed
signed 18b filtered data + signed 14b co-added
  • [31:13] = sq1_fb_filtered / (211)
  • [12:0] = error
3.0.30 to 4.0.6 only
7
22:10 mixed
signed 22b filtered data + signed 10b coadded error
  • [31:10] = sq1_fb_filtered / (27)
  • [9:0] = error / (24)
4.0.2 and later
8 obsolete
24:8 mixed
signed 24b filtered data + signed 8b num_flux_jumps[7:0].
  • [31:8] = sq1_fb_filtered / (28)
  • [7:0] = num_flux_jumps
4.0.4 only
9 obsolete
24:8 mixed
signed 24b filtered data + signed 8b num_flux_jumps[7:0].
  • [31:8] = sq1_fb_filtered/ (21)
  • [7:0] = num_flux_jumps
4.0.5 till 4.0.a
10
25:7 mixed
Signed 25b filtered data + signed 7b num_flux_jumps.
  • [31:7] = sq1_fb_filtered / (23)
  • [6:0] = num_flux_jumps
4.1.6, 4.0.b and later
11
6:3 mixed, debugging mode
Unsigned 6b row_index + unsigned 3b column_index.
  • [31:10] ----
  • [9:3] row_index
  • [2:0] column_index
5.0.0 and later
12
raw
Raw 50 MHz ADC samples raw[13:0], sign-extended to 32 bits.
  • [31:0] = raw_data
4.0.d, 4.0.e, 5.0.1+

Links