------------------------------------------------------------------ DESCRIPTION of ELECTRIC FIELD DATA in SCIENCE DATA BASE FORMAT EXOS-D EFD-P ------------------------------------------------------------------ 1991. 07. 27 1991. 12. 9 revised 1992. 08. 22 revised 1994. 12. 05 revised 1996. 10. 17 revised PREFACE Electric Field Detectors (EFD) are installed onboard EXOS-D (AKEBONO). EFD-P measures 2-dimension electric field by two sets of double probes with 60m tip-to-tip length in the GSM Y-Z plain, which is perpendicular to the spin axis of S/C. The GSM-X component is derived under the assumption that the electric field has no component along the ambient magnetic field. ExB plasma flow is calculated from the observed electric and magnetic fields. It is projected on the ionospheric plain at 120 km altitude using IGRF 1985 model. FILE NAME The file name is combination of date and hour of the start time. The format is; YYYYMMDDHH.efd DATA FORMAT The data file consists of continuous blocks whose size is 181 bytes. The first block is for the header and the following blocks are for the data. The header format is; byte | contents -------------------------------------- 1 - 6 | start date [YYMMDD] 7 - 12 | start time [HHMMSS] 13 - 22 | comment about version no. 23 -181 | blank Each data block starts with block no. and data for 120sec interval follows it. The data are averaged with 1 S/C spin period (about 8 sec) and given every 8 sec; namely, one data block consists of 15 data points. 12 bytes are assigned for each data point. byte | contents | data time ------------------------------------------------------------------ 1 | block no. | --------- 2 - 13 | 1st data | (start time)+(block no.)*120sec 14 - 25 | 2nd data | + 8sec 26 - 37 | 3rd data | + 16sec : : : : : 170 - 181 | 15th data | +112sec For one data point, three components of electric field in GSM coordinate ( Ex, Ey and Ez ), 2-dimension plasma flow projected on the plain at 120 km altitude in geomagnetic coordinate ( V-eastward and V-poleward ) and S/C potential relative to the ambient plasma are recorded as 2 byte integers, in which lower byte precedes upper byte. 1 digit corresponds to 0.1 mV/m for the electric field data, 0.01 km/s for the flow data and 0.01V for the potential data. byte | contents ------------------------------------------ 12*i+2 , 12*i+3 | Ex ( 0.1 mV/m ) 12*i+4 , 12*i+5 | Ey ( 0.1 mV/m ) 12*i+6 , 12*i+7 | Ez ( 0.1 mV/m ) 12*i+8 , 12*i+9 | Ve ( 0.01 km/s ) 12*i+10 , 12*i+11 | Vp ( 0.01 km/s ) 12*i+12 , 12*i+13 | Pot ( 0.01 V ) i = 0, 1, ... 14 The data are filled with 0 when the data is not available. We strongly recommend you to refer to Hayakawa et al., Electric field measurement on the Akebono (EXOS-D) satellite, J. Geomagn. Geoelectr., 42, 371-384, 1990. when you see EFD data. Before you make a presentation in meetings or publish a paper using EFD-P data you have to send a copy of abstract or paper to PI: Hajime Hayakawa, The Institute of Space and Astronautical Science (ISAS), Yoshinodai, Sagamihara, Kanagawa 229, Japan Tel: 0427-51-3911 (ext. 2503) FAX: 0427-59-4236 e-mail: hayakawa@gtl.isas.ac.jp For further information, please refer to: Ayako Matsuoka, ISAS Tel: 0427-51-3911 (ext. 2511) FAX: 0427-59-4236 e-mail: matsuoka@gtl.isas.ac.jp SAMPLE PROGRAM TO READ DATA (for use on SUN) /*--- ASCII dump in standard out for ---*/ /*--- EXOS-D EFD-P Science Data Base (SDB) ---*/ /*--- version 4.0/4.1 format data ---*/ /*--- 94/12/05 by Ayako Matsuoka(ISAS) ---*/ #include #include #include #define Rec_L 181 void digital_cnv(int , int * , int * , int * ) ; int EFD_SDB , START_SEC; struct data_point { short Ex ; short Ey ; short Ez ; short Ve ; short Vp ; short Pot ; } ; struct { unsigned char rec_n ; struct data_point DATA[15] ; } EFD ; int main(int argc, char **argv) { int t_sec , hh , mm , ss , i ; double ex , ey , ez , ve , vp , pot ; char yymmdd[6] , hhmmss[6] , head[Rec_L-12] ; switch( argc ) { case 2: if(-1 == (EFD_SDB=open(argv[1],O_RDONLY))) { printf("EFD FILE OPEN FAILURE FOR %s\n",argv[1]) ; exit(1); } /* printf("EFD FILE OPEN ! %s\n",argv[1]) ; */ read(EFD_SDB,yymmdd,6) ; read(EFD_SDB,hhmmss,6) ; read(EFD_SDB,head,Rec_L-12); START_SEC = sec_cnv( atoi(hhmmss) ) ; printf("START %s %s HEADER INFORMATION = %s\n",yymmdd,hhmmss,head); break; default: exit(1) ; } while( 0 < efd_sdb_read() ) { printf("RECORD %d SEC Ex Ey Ez Ve Vp Pot\n",EFD.rec_n) ; for( i=0 ; i<15 ; i++ ) { digital_cnv( (t_sec=efd_sdb_extract(i,&ex,&ey,&ez,&ve,&vp,&pot)) , &hh, &mm, &ss ) ; printf("%2d:%2d:%2d,%6d,%7.1f,%7.1f,%7.1f,%7.2f,%7.2f,%7.2f\n",hh,mm,ss,t_sec,ex,ey,ez,ve,vp,pot) ; } } close(EFD_SDB) ; exit(0); } void digital_cnv(int sec , int *hh , int *mm , int *ss ) { int t ; t = sec ; *ss = t % 60 ; t -= *ss ; t /= 60 ; *mm = t % 60 ; t -= *mm ; t /= 60 ; *hh = t % 60 ; } int sec_cnv(int hhmmss ) { int hh, mm, ss, t ; t = hhmmss ; ss = t % 100 ; t -= ss ; t /= 100 ; mm = t % 100 ; t -= mm ; t /= 100 ; hh = t ; t = hh*60*60 + mm*60 + ss ; return t ; } int efd_sdb_read() { unsigned char efd_rec[Rec_L] , *pt_1 , *pt_2 ; union { short s ; unsigned char c[2] ; } u_short ; int i ,j ; switch( read(EFD_SDB,efd_rec,Rec_L) ) { case Rec_L: break ; case 0: printf("SDB FILE END\n") ; return 0 ; default: printf("SDB FILE READ ERROR\n") ; return -1 ; } EFD.rec_n = efd_rec[0] ; pt_1 = efd_rec ; pt_1++ ; for( j=0 ; j<15 ; j++ ) { pt_2 = u_short.c + 1 ; for( i=0 ; i<2 ; i++ ) *pt_2-- = *pt_1++ ; EFD.DATA[j].Ex = u_short.s ; pt_2 = u_short.c + 1 ; for( i=0 ; i<2 ; i++ ) *pt_2-- = *pt_1++ ; EFD.DATA[j].Ey = u_short.s ; pt_2 = u_short.c + 1 ; for( i=0 ; i<2 ; i++ ) *pt_2-- = *pt_1++ ; EFD.DATA[j].Ez = u_short.s ; pt_2 = u_short.c + 1 ; for( i=0 ; i<2 ; i++ ) *pt_2-- = *pt_1++ ; EFD.DATA[j].Ve = u_short.s ; pt_2 = u_short.c + 1 ; for( i=0 ; i<2 ; i++ ) *pt_2-- = *pt_1++ ; EFD.DATA[j].Vp = u_short.s ; pt_2 = u_short.c + 1 ; for( i=0 ; i<2 ; i++ ) *pt_2-- = *pt_1++ ; EFD.DATA[j].Pot = u_short.s ; /* printf("%02x %02x %02x %02x %02x %02x\n",EFD.DATA[j].Ex,EFD.DATA[j].Ey,EFD.DATA[j].Ez,EFD.DATA[j].Ve,EFD.DATA[j].Vp,EFD.DATA[j].Pot) ; */ } return START_SEC + (int) EFD.rec_n * 120 ; } int efd_sdb_extract(int n,double *ex,double *ey,double *ez,double *ve,double *vp,double *pot) { int sec ; sec = START_SEC + (int) EFD.rec_n * 120 + n * 8 ; *ex = (double) EFD.DATA[n].Ex * 0.1 ; *ey = (double) EFD.DATA[n].Ey * 0.1 ; *ez = (double) EFD.DATA[n].Ez * 0.1 ; *ve = (double) EFD.DATA[n].Ve * 0.01 ; *vp = (double) EFD.DATA[n].Vp * 0.01 ; *pot = (double) EFD.DATA[n].Pot * 0.01 ; return sec ; }