Bepi Colombo MIO
MEA
Flight Data Processing / Analysis Log
Fedorov
1 MIO and MEA cruise phase configuration
The instrument configuration during the cruise phase is shown in Figure
1. The important information is in the small table below:
Sensor
|
GF,
|
Note
|
MEA-1
|
|
Anodes (elevation channels) 10,11,12,13 are obscured
|
MEA-2
|
|
|
2 Instruments data modes used for commissioning
2.1 3D data product
- MDP generates a 3D product from MEA-1 data ONLY.
- 3D data product can be accumulated in several time intervals according to Table 1 (see MDP_DPU1_MEA_software.2014-03-20.doc).
- MDP generates 3D data as shown in Figure 2 top panel. The corresponding CDF L1 file shall contain the recovered data as it is shown in Figure 2 bottom panel.
- The 16 energy steps (see Section xxx) are the concatenation of the 8 sub-steps of the original MEA energy table. It correspond of a sum of two MEA frames.
Product
|
Accumulation, s
|
Energy, Rot. Sectors, Elevation Anodes
|
3D_L
|
4 every 600 s
|
16, 16, 8
|
3D_M
|
8 or 4 (?)
|
16, 16, 8 TBC
|
3D_H
|
4
|
16, 16, 8 TBC
|
Table 1: 3D products contents
The energy table for T0 option (the reason, why I show T0 table only, see in subsection
5.1) is as follows :
0 7
[280.6, 212.2, 158.0, 117.7, 87.63, 65.26, 48.603, 36.20,
8 15
26.96, 20.08, 14.95, 11.13, 8.292, 6.175, 4.600, 3.425]
The corresponding width of the energy bin and the bin accumulation time are as follows:
One energy bin is the concatenation of 8 energy sub-steps from the first table in
tables_HT.XLSX.
2.2 Et-OMN data product
This product is just an energy spectrum with the properties as shown in Table
2.
Product
|
Esteps
|
Accumulation
|
Energy table
|
Energy bin width
|
Comment
|
Et-OMN
|
16
|
4s
|
|
|
T0 table
|
TBD
|
|
|
|
|
|
Table 2: The main properties of Et-OMN product
Subsection
5.2 compares the 3D and OMN spectra of GF #1 taken the the same moment.
3 The first commissioning data
The first real commissioning was performed on Jul 1-2 2019. The data summary are shown in Figure
3 and Figure
4. MEA-1 only provides 3D product to get more or less complete information about the electron distribution.
The commissioning L1 level data are in rosina1:/DATA/BEPI/DATA/L1/20190701/*.cdf
4 IDL patch to work with the last CDF version
- Read cdf_patch_for_idl. Get the last idl_cdf.so and idl_cdf.dlm for x86-64, get showcdfversion.pro procedure.
- Backup /usr/local/itt/idl/bin/bin.linux.x86_64/idl_cdf.so
- Backup /usr/local/itt/idl/bin/bin.linux.x86_64/idl_cdf.dlm
- run idl and run showcdfversion.pro. The output shall be:
CDF library: 3.7.1.0
Latest Leap Second in Table: 2017 1 1
5 3D Data analysis
5.1 General assessment
The table below shows the main attributes of the data analysis:
Data
|
MEA1_L1_3DL__20190701_V00.cdf
|
|
Data Dir
|
/DATA/BEPI/DATA/L1/20190701/
|
rosina1:
|
IDL script
|
read_cdf_mea.pro
|
|
Working dir
|
MERCURY/FLIGHT/DATA_READER
|
fedorov@matrix:
|
CDF “count” correction
|
See below
|
|
CDF “energy” correction
|
T0 table, 8 steps concatenation
|
|
Important notes:
- To recovery a standard original MEA-1 sampling matrix ( see Figure 2) I have used the procedure as follows. If not, the data analysis gives you an irrelevant data. (This part shall be removed as soon as Alain makes a new CDF version)
for i = 0, 3 do begin
CountsArr(*,i*4,0) = CountsArr(*,i*4+2,0)/2.0
CountsArr(*,i*4+1,0) = CountsArr(*,i*4+2,0)/2.0
CountsArr(*,i*4+2,0) = CountsArr(*,i*4+2,0)/2.0
CountsArr(*,i*4+3,0) = CountsArr(*,i*4+3,0)/2.0
CountsArr(*,i*4,7) = CountsArr(*,i*4+2,7)/2.0
CountsArr(*,i*4+1,7) = CountsArr(*,i*4+2,7)/2.0
CountsArr(*,i*4+2,7) = CountsArr(*,i*4+2,7)/2.0
CountsArr(*,i*4+3,7) = CountsArr(*,i*4+3,7)/2.0
CountsArr(*,i*4,1) = CountsArr(*,i*4,1)/2.0
CountsArr(*,i*4+1,1) = CountsArr(*,i*4+1,1)/2.0
CountsArr(*,i*4+2,1) = CountsArr(*,i*4+2,1)/2.0
CountsArr(*,i*4+3,1) = CountsArr(*,i*4+3,1)/2.0
CountsArr(*,i*4,6) = CountsArr(*,i*4,6)/2.0
CountsArr(*,i*4+1,6) = CountsArr(*,i*4+1,6)/2.0
CountsArr(*,i*4+2,6) = CountsArr(*,i*4+2,6)/2.0
CountsArr(*,i*4+3,6) = CountsArr(*,i*4+3,6)/2.0
endfor
- The Energy table #1 in the CDF file is not correct. The electron energy spectrum is adequate to the expected solar wind if we concatenate 8 sub-steps in T0 table (see tables_HT.XLSX. A very approximate formula is:
- It is ONE 4s MEA spectrum. There is NO accumulation of such spectrum over 600 s. CDF parameter “Duration” does not correct
The available data for the working MCP HV and different #GF are shown in Table
Time
|
#GF
|
Comments
|
2019.7.1 22:17:48
|
0
|
dT = 600s, time interval between the steps
|
2019.7.1 22:28:50
|
1
|
|
2019.7.1 22:39:52
|
1
|
|
2019.7.1 22:50:54
|
2
|
|
|
3
|
Does not exist
|
2019.7.1 23:01:57
|
4
|
|
Table 3: The list of all 3D samplings taken for this analysis
Figure
5 shows the analysis of the MEA-1 spectra with #GF = 1.
5.2 Correspondence between 3D and Et-OMN spectrum
I have recalculated the Et-OMN product from the 3D product using the formulas explained in annex
7.2 converted to the 16 energy bins. My conversion code is shown below.
; Canode is the cos(Azimuth), Anodes cosines
d_Lcl_MEA_TBL_GF0 = '40'xus
d_Lcl_MEA_TBL_RD1 = '1ff'xus
d_Lcl_MEA_TBL_GF = 'bf'xus
us_gf = ['89'xus, 'a1'xus, '9c'xus, '96'xus, 'a7'xus, 'a7'xus, 'b4'xus, 'b6'xus, 'b2'xus, 'cf'xus, '00'xus, '00'xus, '00'xus, '00'xus, 'a9'xus, '9d'xus] + d_Lcl_MEA_TBL_GF0 ; GF #1 !!
us_gf(10:13) = 0
OMNIcf = Canode*float(us_gf(0:7))*16.0/float(d_Lcl_MEA_TBL_GF) ; d_Lcl_MEA_TBL_RD1 removed since Canode is real cosin and s_cosp is Canode*d_Lcl_MEA_TBL_RD1
CountToWork = float(CountsArr(*,*,*))
for ie = 0, NeN -1 do for iaz = 0, Naz - 1 do CountToWork(ie,iaz,*) = CountToWork(ie,iaz,*)*OMNIcf
OmniSpec = total(total(CountTowork,3),2)
The resulting comparison of the real OMN product and the OMN recalculated from the 3DL product is shown in Figure
6. The local conclusion is as follows:
- The Et-OMN and 3DL products are the same origin (time stamps are correct)
- The 3DL product is just a ONE 4s instant distribution. There is NO integration or averaging of several successive distributions.
5.3 GF variation analysis
The Energy spectra, calculated from the corresponding 3D distributions, for corresponding states of GF, are shown in Figure
7. See also Table
3. We see that the integral statistics is rather bad and also the integral count level equal to 5 can be interpreted as a noise level. The relative GF values (the right panel) have been calculated as follows:
- Remove the noise level ( = 5) from each spectrum
- Divide the spectrum to and integrate it.
- The resulting value is . Here “C” is a constant. If we assume number density “N” as a constant during 50 minutes of the measurements, we can calculate a relative GF.
# GF
|
GF value, arbitrary units
|
GF/GF(1)
|
Instrument GF, GF/GF(1)
|
Instrument GF/GF(1)
|
0
|
2.400
|
0.65
|
4.305e-06
|
0.61
|
1
|
3.937 (3.70 av)
|
1.07
|
7.112e-06
|
1.0
|
1
|
3.462 (3.70 av)
|
0.94
|
7.112e-06
|
1.0
|
2
|
1.191
|
0.32
|
2.281e-06
|
0.32
|
4
|
0.3309
|
0.09
|
0.149e-06
|
0.021
|
Table 4: Comparison of the relative GFs estimated in flight (left columns) and Calibration numbers (right columns)
The result of GF comparison is shown in Table
4.
It looks reasonable if we take into account:
- Solar wind number density can vary during almost one hour of measurements.
- The statistics of the measurements is very bad for the low GF.
5.4 Moments calculation
5.4.1 The solar wind conditions
We use the ACE data to estimate possible conditions at BepiColombo position. The corresponding ACE data are shown in Figure
8. The all derived contains are gathered in Table
5. You can see that it was a density perturbation in the time of the measurements. We can estimate the two density values shown in the last line of Table
5.
Radial distance from Earth
|
0.2 AU (antisunward)
|
2.99196e+07 km
|
Longitudinal distance
|
0
|
|
Velocity
|
330.0 km/s
|
|
Delay
|
25.1848 hours
|
|
Density in point, cm-3
|
2.0
|
4.0
|
Recalculated density to 1.2AU
|
1.4
|
2.8
|
Expected temperature
|
13 eV
|
See
|
Table 5: Possible densities at Bepi Colombo position
Electron temperature of the solar wind is more-or-less constant (see Figure ) and can be estimated around 13 eV.
5.4.2 Important constants used for the moment calculation and calculation code
dT
|
0.0156
|
One bin accumulation, s
|
GV
|
3.56e-06
|
Velocity geometrical factor,
|
W
|
|
one bin accumulation velocity space,
|
dV/V
|
0.171
|
velocity integration cell (16 steps mode)
|
Table 6: Main MEA-1 calibration and measurement constants used for moments calculation
The IDL code used for the moment calculation is as follows:
Canode = cos(AnodeAngle/180.0*!PI) ; Elevation angle
GV = 7.11e-6/2.0*(1.95e-3*8.0) ; Geometrical factor in cm2 sr dV/V (GF /2) * dT [s]
Varr = 5.96e7*sqrt(MeTable) ; Velocity, cm/s
Omega = double((22.5/180.0*!PI))^2*double(Canode) ; Integration solid angle, sr, array for Elevations
dV = ((dE-1.0)/2.0)*Varr ; Integration V interval, cm/s as a function of Energy step
dW = dblarr(Nen, Naz, Nel) ; Integration Volume, (cm/s)^3
CN = dblarr(Nen, Naz, Nel) ; Density conversion factor
for iaz = 0, Naz - 1 do for iel = 0, Nel-1 do begin
dW(*,iaz,iel) = double(Omega(iel))*double(Varr)^2*double(dV)
CN(*,iaz,iel) = dW(*,iaz,iel)/(GV*(double(Varr))^4)
endfor
LowEn = 15
HighEn = 1
Full3D = dblarr(Nen, Naz, Nel)
for iaz = 0, Naz - 1 do for iel = 0, Nel-1, 2 do begin
Full3D(HighEn:LowEn,iaz,iel) = double(CountsArr(HighEn:LowEn,iaz,6))*double(Canode(iel))
Full3D(HighEn:LowEn,iaz,iel+1) = double(CountsArr(HighEn:LowEn,iaz,7))*double(Canode(iel))
endfor
dN = dblarr(Nen, Naz, Nel)
for iaz = 0, Naz - 1 do for iel = 0, Nel-1, 2 do begin
dN(HighEn:LowEn,iaz,iel) = (CountsArr(HighEn:LowEn,iaz,6) - NoiseLevel/2.0/16.0)*CN(HighEn:LowEn,iaz,iel)
dN(HighEn:LowEn,iaz,iel+1) = (CountsArr(HighEn:LowEn,iaz,7) - NoiseLevel/2.0/16.0)*CN(HighEn:LowEn,iaz,iel+1)
endfor
T = double(0.0)
for iaz = 0, Naz - 1 do for iel = 0, Nel-1 do T += total(MeTable*dN(*,iaz,iel))
T = T/total(dN) ; TEMPERATURE, eV
N = total(dN) ; DENSITY, cm-3
5.4.3 Moments calculation results
Figure
5 shows that only anodes (Elevation channels) 6 and 7 of MEA-1 can see the unobscured solar wind. Thus to calculate the moments, I have replaced the data of the channels 0 - 5 to the channels 6 and 7 data. The result is shown in Figure
10. You can see that the moments are very close to the expected (section
5.4.1). The numerical simulation used the Maxwell distribution and the MEA-1 calibration data shows also very similar result.
6 Conclusions
- Et-OMN and 3DL products data correspond to the expected MEA-1 properties
- The moments calculated form 3DL data correspond to the expected solar wind parameters
- The 3DL data obtained for different GF states show the proper GF variation. The very bad data statistics does not allow to estimate correctly GF #4 data
- MEA-1 3DL has a very bad statistics due to just one spin (4s accumulation). It will be factor 10 better at Mercury. I would suggest to sum at least 8 successive distributions.
- CDF L1 data issues
- The CDF 3D Counts array shall be filled by another way. The correct algorithm is shown in Figure 2.
- The energy table in the CDF file does not correspond to the real Energy table, shall be T0 during commissioning
- CDF variable “Duration” is not clear
- CL issues:
- 3DL times in Figure 3 do not correspond to the times in Table 3
- The total counts of the instrument is going back while the GF # increasing. But CL color scale show the increasing of the count. This is incorrect scaling.
7 Annex
7.1 3D generation code:
//M2 data USE 0-7ch of [16sc][16ch][32en] in L&M&H(4s) modes
// 3D-LL(600s) [88dir][16en] uc_f = 0 L 0-7ch
// 3D-M(4 or 8s) [88dir][16en] uc_f = 0 M 0-7ch
// 3D-H(2s & 4s) [88dir][32en] uc_f = 2 H 0-7ch
// uc_f = 3 H 8-15ch
char app03_MEA_3D( unsigned short *pus_inbuf, //[INPUT] [16sc]( 12B + [16ch][32en])
unsigned short *pus_outbuf, //[OUTPUT][88dir][16or32en]
unsigned char uc_f) //[INPUT] Data ID,
{
int i, j, k, k2;
int i_eSize, i_ch_os, i_sc, i_hd;
i_ch_os = (uc_f != 3) ? 0 : 8; // 8 for 2nd product of 3D-H(2s) // 0 for 3DLL
i_eSize = (uc_f <= 1) ? 16 : 32; // Number of energy steps // 16 for 3DLL
i_sc = d_Lcl_MEA_PACSZ/2; //Size of sector(packet) at USHORT //
i_hd = d_Lcl_MEA_HDRSZ/2; //Size of header in packet
pus_inbuf += i_hd;
//ADD in L&M modes
for (k = 0; k < 32; ++k) { //energy step
k2 = (uc_f <= 1) ? k/2 : k; // k/2 for et-3DLL (thus two energies are added )
i = 0; // channel (elevation anode # )
for (j = 0; j < 4; ++j) // directions (tale 4 selected sectors (azimuthal rotation)
*(pus_outbuf + k2 + j*i_eSize) += *(pus_inbuf + i+i_ch_os + k*16 + (4*j+2)*i_sc)
+ *(pus_inbuf + i+i_ch_os + k*16 + (4*j+3)*i_sc);
i = 1;
for (j = 0; j < 8; ++j)
*(pus_outbuf + k2 + (j+4)*i_eSize) += *(pus_inbuf + i+i_ch_os + k*16 + 2*j *i_sc)
+ *(pus_inbuf + i+i_ch_os + k*16 + (2*j+1)*i_sc);
for (i = 2; i <= 5; ++i) //channel
for (j = 0; j < 16; ++j) //sector(sweep)
*(pus_outbuf + k2 + (j+12 + (i-2)*16)*i_eSize) += *(pus_inbuf + i+i_ch_os + k*16 + j*i_sc);
i = 6;
for (j = 0; j < 8; ++j)
*(pus_outbuf + k2 + (j+76)*i_eSize) += *(pus_inbuf + i+i_ch_os + k*16 + 2*j *i_sc)
+ *(pus_inbuf + i+i_ch_os + k*16 + (2*j+1)*i_sc);
i = 7;
for (j = 0; j < 4; ++j)
*(pus_outbuf + k2 + (j+84)*i_eSize) += *(pus_inbuf + i+i_ch_os + k*16 + (4*j+2)*i_sc)
+ *(pus_inbuf + i+i_ch_os + k*16 + (4*j+3)*i_sc);
}
7.2 Et-OMN generation code
in function app03_MEA_makeM()
i_sc = 16*16
us_cnt[secoros(azimut rotation = 16), energies( = 32),channels(anodes = 16)] // array of the data from MEA
//assume:
// in SOURCES/mk_romtbl/mk_mea_rom.c:
// See MDP_SOURCES: app_romTable_MEA_body.txt
// uc_gf[1,*] = [0x89, 0xa1, 0x9c, 0x96, 0xa7, 0xa7, 0xb4, 0xb6, 0xb2, 0xcf, 0x00, 0x00, 0x00, 0x00, 0xa9, 0x9d]
//us_gf[ianode] = (pP->uc_gf[ianode + i_gf*16]) ? d_Lcl_MEA_TBL_GF0 + pP->uc_gf[ianode + i_gf*16] : 0;
//GF #1 us_gf[ianode] = uc_gf[1,*] + d_Lcl_MEA_TBL_GF0
//us_gf[i] = cos(Anode_Phi[i])*d_Lcl_MEA_TBL_RD1
#define d_Lcl_MEA_TBL_GF0 0x40
#define d_Lcl_MEA_TBL_RD1 0x1ff //RAD.
#define d_Lcl_MEA_TBL_GF 0xbf
//--------------------------------------
for (k = 0; k < 32; ++k) { //energy step
ui_et2 = 0; ui_et3 = 0; // for one and secind half of anaodes (channels) one enetrgy step
for (i = 0; i < 16; ++i) //channel, 16 anodes (elevations)
{
ui_et0 = 0; ui_et1 = 0; // for one and secind half of rotational sectors
//sector(sweep)
for (j = 0; j < 8; ++j) ui_et0 += us_cnt[i + k*16 + j*i_sc]; // summ halfs of sectors
for (j = 8; j < 16; ++j) ui_et1 += us_cnt[i + k*16 + j*i_sc]; // summ halfs of sectors
ui_ttl_ch[i] += ui_et0 + ui_et1; // all sectors together
ui_et2 += ui_et0*us_gf[i]*s_cosp[i]; // GF and polar cosine
ui_et3 += ui_et1*us_gf[i]*s_cosp[i];
}
pDat->ui_MEtO[k] += ui_et2*16/d_Lcl_MEA_TBL_GF/d_Lcl_MEA_TBL_RD1;
pDat->ui_MEtO[k+32] += ui_et3*16/d_Lcl_MEA_TBL_GF/d_Lcl_MEA_TBL_RD1;
}
Yokota-san mentioned, that for 1st of August 2019, the algorithm is as follows:
ui_et2 += ui_et0*us_gf[i]/d_Lcl_MEA_TBL_GF*s_cosp[i];
ui_et3 += ui_et1*us_gf[i]/d_Lcl_MEA_TBL_GF*s_cosp[i];
}
pDat->ui_MEtO[k] += ui_et2;
pDat->ui_MEtO[k+32] += ui_et3;