https:///weradocs/XHeader.shtml Last update:

WERA HF Radar Software - eXtended Header Information

This data structure is normally passed through a file located at /home/wera/weractrl/ctrl_data.cpy.

The extended header data structure contains information on the current measurement status and control and is attached in front of the measurement header, which is copied to all data sets.

/* ctrl_data.h -                                      */
/*
 The structure ctrl_data contains all information
 that can be generated or influenced by the program
 WeraDesk in ASCII representation.
*/

// These are the commands implemented in the WERA command processor
#define WRITE_HEADER      "write_head\n"
#define RECEIVED_HEADER   "got_header\n"
#define SET_FILENAME      "set_filnam\n"
#define RECEIVED_FILENAME "got_filnam\n"
#define GET_GPSTIME       "get_gpstim\n"
#define SHUTDOWN_VME      "shutdwnvme\n"
#define START_ACQ         "start_acqu\n"
#define FINISH_ACQ        "stopp_acqu\n"
#define UNSUPP_CMD        "unsupp_cmd\n"
#define PC104_EXIT        "pc104_exit\n"
#define WERA_STATUS       "werastatus\n"
#define ASK_4_BUSY        "areu_ready\n"
#define SOFTWAREINFO      "_software_\n"
#define SEND_AUXPORTSTART "sndaxstart\n"
#define SEND_AUXPORTSTOP  "sndaxstop_\n"

// These are the commands implemented in WeraDesk
#define SET_SWEEP_FRQ     "set_sw_frq"
#define SET_CYCLE_TIME    "set_cyctim"
#define SET_MAST_SLAVE    "set_mstslv"
#define DATAFILE_EXT      ".dat"
#define SWEEP_FRQ         "8.5MHZ"
#define START_TIME        "13:05"
#define CYCLE_TIME        "20MIN"
#define MASTER_SLAVE      "MASTER"

//define sub-structures
struct wera_com
{
   char command[11],on_off[1];
};

struct wera_store
{
   char device[4],on_off[1];  //device=tape,disk,netw
};

struct wera_proc
{
   char process[4],on_off[1];  //process=raw,rad,spec
};

struct wera_acq
{
   char acq_typ[4],on_off[1];  //acq_typ=sngl,cont,test
};

//define structure of extended header
struct ctrl_data 
{
  struct wera_com write_header,  //----------- command-data
                  received_header,
                  set_filename,
                  received_filename,
                  get_gpstime,
                  shutdown_vme,
                  start_acq,
                  finish_acq,
                  set_sweep_frq,
                  set_cycle_time,
                  set_mast_slave,
                  set_path2data,
                  set_sngl_acq,
                  set_cont_acq,
                  set_calib_acq; //----------- last command-data
  char datafile_ext[4];  //-------------------- control-data
  char sweep_frq[6];
  char start_time[5];
  char cycle_time[5];
  char master_slave[6];
  char path2data[128];   // /data/wera/.../ 
  char url_store[128];   // wera@ifmaxp3.ifm.uni-hamburg.de/data/wera/
  char tar_command[128]; // tar -xvf /dev/nrmt0 

  struct wera_store wstore[3];  //device=tape,disk,netw
  struct wera_proc  wproc[3];   //process=raw,cal,sort
  struct wera_acq   wacqtyp[3]; //acq_typ=sngl,cont,test
              
  char samp[4],du1[11]; //------ 512 byte measurement header
  char date[9],du2[1];
  char atime[9],du3[2];
  char loc[12];
  char locid[6],du4[10];  
  char wfrq[7],du5[4];
  char y2000[9],du6[13]; //----9 characters e.g. YEAR 2001
  char range[6],du7[14];
  char truen[3],du8[11];
  char rate[8],du9[11];
  char nrcels[3],du10[16];
  char lon[11],du11[7];
  char lat[11],du12[18];
  char win[2],du13[5];
  char nant[2],du14[4];
  char rc[2],du15[9];
  char offs[3],du16[10];
  char rxoffs[10],du17[25];
  char note1[128];
  char note2[96];        //----- end of 512 byte measurement header
};

This is a FORTRAN program to write the eXtended Header data structure:

C	Parameters for extended Header
C
	CHARACTER*1	CR
	LOGICAL		STOP_ACQ	!.TRUE. = Stop ACQ set
	LOGICAL		RAW		!.TRUE. = Process RAW set
	LOGICAL		SORT		!.TRUE. = Process SORT set
	LOGICAL		CAL		!.TRUE. = Process CAL set

	CHARACTER*1147	CTRL_DATA

	INTEGER		SAMPLES
	INTEGER		RAN_RES
	INTEGER		BAND_WIDTH
	REAL		FREQ
	INTEGER		TRUE_NO
	REAL		CHIRPLN
        INTEGER         CHIRPMT
        INTEGER         POWER           ! max = 4095	
	REAL		RAN_OFF
	INTEGER		RX_OFFS
	INTEGER		NUM_RAN
	INTEGER		LAT_DEG
	INTEGER		LAT_MIN
	INTEGER		LAT_SEC
	CHARACTER*1	LAT_NS
	INTEGER		LON_DEG
	INTEGER		LON_MIN
	INTEGER		LON_SEC
	CHARACTER*1	LON_EW
	CHARACTER*12	LOC_NAME
	CHARACTER*3	TIM_COD
	CHARACTER*3	CODE
	CHARACTER*5	STA_TIM
	CHARACTER*2	REP_TIM
	CHARACTER*6	STATION
	CHARACTER*30	DATADIR
	CHARACTER*5	ACQ_SNGL
	CHARACTER*5	ACQ_CONT
	CHARACTER*5 	ACQ_CALI
	CHARACTER*6	FM_MODE
	INTEGER		MAX_RAN
	INTEGER		ACQ_MIN
	INTEGER		ACQ_SEC
	CHARACTER*80	COMMENT
	REAL		PHAS(16)

        LOGICAL         PA_ON           !.TRUE. = Switch power amplifier to 'on'
        LOGICAL         INT_CAL         !.TRUE. = Switch to 'internal calibrati
        LOGICAL         TX              !.TRUE. = Program TX  DDS
        LOGICAL         RX              !.TRUE. = Program RX  DDS
        INTEGER         I_PA_ON         ! 0000 0000 0001
        INTEGER         I_INT_CAL       ! 0000 0000 0010
        INTEGER         I_TX            ! 0000 0001 0000
        INTEGER         I_RX            ! 0000 0010 0000
        INTEGER         MODE            ! Mode bits
        INTEGER         POWER           ! max = 4095

	CR	= CHAR(13)

C       Calculate CHIRPMT (Calibration SweepReduction)
C
        CHIRPMT = NINT(DBLE(CHIRPLN)*768.0D0/0.26D0)

        MODE = 0
        IF(PA_ON)   MODE = MODE + I_PA_ON
        IF(INT_CAL) MODE = MODE + I_INT_CAL
        IF(TX)      MODE = MODE + I_TX
        IF(RX)      MODE = MODE + I_RX

	DO      I = 1,16
	 PHAS(I) = 0.0
	END DO

	DO	I=1,LEN(CTRL_DATA)
	 CTRL_DATA(I:I) = ' '
	END DO

	CTRL_DATA(   1:  10) = 'write_head'
	CTRL_DATA(  11:  11) = CR
	CTRL_DATA(  12:  12) = '1'
	CTRL_DATA(  13:  22) = 'got_header'
	CTRL_DATA(  23:  23) = CR
	CTRL_DATA(  24:  24) = '0'
	CTRL_DATA(  25:  34) = 'set_filnam'
	CTRL_DATA(  35:  35) = CR
	CTRL_DATA(  36:  36) = '1'
	CTRL_DATA(  37:  46) = 'got_filnam'
	CTRL_DATA(  47:  47) = CR
	CTRL_DATA(  48:  48) = '0'
	CTRL_DATA(  49:  58) = 'get_gpstim'
	CTRL_DATA(  59:  59) = CR
	CTRL_DATA(  60:  60) = '0'
	CTRL_DATA(  61:  70) = 'shutdwnvme'
	CTRL_DATA(  71:  71) = CR
	CTRL_DATA(  72:  72) = '0'
	CTRL_DATA(  73:  82) = 'start_acqu'
	CTRL_DATA(  83:  83) = CR
	IF(STOP_ACQ) THEN
	 CTRL_DATA(  84:  84) = '0'
	ELSE
	 CTRL_DATA(  84:  84) = '1'
	END IF
	CTRL_DATA(  85:  94) = 'stopp_acqu'
	CTRL_DATA(  95:  95) = CR
	IF(STOP_ACQ) THEN
	 CTRL_DATA(  96:  96) = '1'
	ELSE
	 CTRL_DATA(  96:  96) = '0'
	END IF
	CTRL_DATA(  97: 106) = 'set_sw_frq'
	CTRL_DATA( 107: 107) = CR
	CTRL_DATA( 108: 108) = '1'
	CTRL_DATA( 109: 118) = 'set_cyctim'
	CTRL_DATA( 119: 119) = CR
	CTRL_DATA( 120: 120) = '1'
	CTRL_DATA( 121: 130) = 'set_mstslv'
	CTRL_DATA( 131: 131) = CR
	CTRL_DATA( 132: 132) = '1'
	CTRL_DATA( 133: 142) = 'set_pth2dt'
	CTRL_DATA( 143: 143) = CR
	CTRL_DATA( 144: 144) = '1'
	CTRL_DATA( 145: 154) = 'set_sglacq'
	CTRL_DATA( 155: 155) = CR
	CTRL_DATA( 156: 156) = '1'
	CTRL_DATA( 157: 166) = 'set_cntacq'
	CTRL_DATA( 167: 167) = CR
	CTRL_DATA( 168: 168) = '1'
	CTRL_DATA( 169: 178) = 'set_calacq'
	CTRL_DATA( 179: 179) = CR
	CTRL_DATA( 180: 180) = '1'
	CTRL_DATA( 181: 181) = '.'
	CTRL_DATA( 182: 184) = CODE(1:3)
	WRITE(UNIT=CTRL_DATA( 185: 187), FMT='(I3)') BAND_WIDTH
	CTRL_DATA( 188: 190) = 'KHZ'
	CTRL_DATA( 191: 195) = STA_TIM(1:5)
	CTRL_DATA( 196: 197) = REP_TIM(1:2)
	CTRL_DATA( 198: 200) = 'MIN'
	CTRL_DATA( 201: 206) = STATION(1:6)
	CTRL_DATA( 207: 222) = '/home/wera/data/'
	CTRL_DATA( 223: 252) = DATADIR(1:30)
	CTRL_DATA( 335: 381) = 'wera@ifmpc143.ifm.uni-hamburg.de/home/wera/data'
	CTRL_DATA( 382: 382) = CHAR(0)
	CTRL_DATA( 463: 481) = 'tar -cvf /dev/nrmt0'
	CTRL_DATA( 482: 482) = CHAR(0)
	CTRL_DATA( 591: 595) = 'TAPE0'
	CTRL_DATA( 596: 600) = 'DISK0'
	CTRL_DATA( 601: 605) = 'NETW0'
	IF(RAW) THEN
	 CTRL_DATA( 606: 610) = 'RAW 1'
	ELSE
	 CTRL_DATA( 606: 610) = 'RAW 0'
	END IF
	IF(CAL) THEN
	 CTRL_DATA( 611: 615) = 'CAL 1'
	ELSE
	 CTRL_DATA( 611: 615) = 'CAL 0'
	END IF
	IF(SORT) THEN
	 CTRL_DATA( 616: 620) = 'SORT1'
	ELSE
	 CTRL_DATA( 616: 620) = 'SORT0'
	END IF
	CTRL_DATA( 621: 625) = ACQ_SNGL(1:5)
	CTRL_DATA( 626: 630) = ACQ_CONT(1:5)
	CTRL_DATA( 631: 635) = ACQ_CALI(1:5)

C	Measurement Header starts here
C
	WRITE(UNIT=CTRL_DATA( 636: 639), FMT='(I4)') SAMPLES
	CTRL_DATA( 640: 666) = ' SAMPLES   05-FEB-02 15:20 '
	CTRL_DATA( 667: 669) = TIM_COD(1:3)
	CTRL_DATA( 670: 671) = '  '
	CTRL_DATA( 672: 683) = loc_name(1:12)
	CTRL_DATA( 684: 689) = FM_MODE(1:6)
	CTRL_DATA( 690: 699) = '  FREQUENZ'
	WRITE(UNIT=CTRL_DATA( 700: 706), FMT='(F7.3)') FREQ
	CTRL_DATA( 707: 731) = 'MHZ YEAR 2002     RANGE: '
	WRITE(UNIT=CTRL_DATA( 732: 738), FMT='(F7.4)') RAN_RES/1000.0
	CTRL_DATA( 739: 752) = ' KM,TRUENORTH:'
	WRITE(UNIT=CTRL_DATA( 753: 755), FMT='(I3)') TRUE_NO			
	CTRL_DATA( 756: 766) = ' GRAD,RATE:'
	WRITE(UNIT=CTRL_DATA( 767: 774), FMT='(F8.6)') CHIRPLN
	CTRL_DATA( 775: 785) = 'S,NRRANGES:'
	WRITE(UNIT=CTRL_DATA( 786: 788), FMT='(I3)') NUM_RAN
	CTRL_DATA( 789: 804) = '         LAENGE:'
	WRITE(UNIT=CTRL_DATA( 805: 807), FMT='(I3)') LON_DEG
	IF(CTRL_DATA( 805: 805).EQ.' ') CTRL_DATA( 805: 805) = '0'
	IF(CTRL_DATA( 806: 806).EQ.' ') CTRL_DATA( 806: 806) = '0'
	CTRL_DATA( 808: 808) = '-'
	WRITE(UNIT=CTRL_DATA( 809: 810), FMT='(I2)') LON_MIN
	IF(CTRL_DATA( 809: 809).EQ.' ') CTRL_DATA( 809: 809) = '0'
	CTRL_DATA( 811: 811) = '-'
	WRITE(UNIT=CTRL_DATA( 812: 813), FMT='(I2)') LON_SEC
	IF(CTRL_DATA( 812: 812).EQ.' ') CTRL_DATA( 812: 812) = '0'
	CTRL_DATA( 814: 814) = ' '
	CTRL_DATA( 815: 815) = LON_EW(1:1)
	CTRL_DATA( 816: 823) = 'BREITE: '
	WRITE(UNIT=CTRL_DATA( 824: 825), FMT='(I2)') LAT_DEG
	IF(CTRL_DATA( 824: 824).EQ.' ') CTRL_DATA( 824: 824) = '0'
	CTRL_DATA( 826: 826) = '-'
	WRITE(UNIT=CTRL_DATA( 827: 828), FMT='(I2)') LAT_MIN
	IF(CTRL_DATA( 827: 827).EQ.' ') CTRL_DATA( 827: 827) = '0'
	CTRL_DATA( 829: 829) = '-'
	WRITE(UNIT=CTRL_DATA( 830: 831), FMT='(I2)') LAT_SEC
	IF(CTRL_DATA( 830: 830).EQ.' ') CTRL_DATA( 830: 830) = '0'
	CTRL_DATA( 832: 832) = ' '
	CTRL_DATA( 833: 833) = LAT_NS(1:1)
        CTRL_DATA( 834: 838) = ' MT: '
        WRITE(UNIT=CTRL_DATA( 839: 843), FMT='(I5)')  CHIRPMT
        CTRL_DATA( 844: 849) = ' PWR: '
        WRITE(UNIT=CTRL_DATA( 850: 853), FMT='(I4.4)')  POWER
        CTRL_DATA( 854: 864) = ' ANT:16 MD:'
        WRITE(UNIT=CTRL_DATA( 865: 867), FMT='(Z3.3)')  MODE
        CTRL_DATA( 868: 875) = ' OFFSET:'
	WRITE(UNIT=CTRL_DATA( 876: 878), FMT='(F3.1)') RAN_OFF
	CTRL_DATA( 879: 888) = ' RXOFFSET:'
	WRITE(UNIT=CTRL_DATA( 889: 898), FMT='(I10)') RX_OFFS
	CTRL_DATA( 924:1003) = COMMENT(1:80)
	DO	I = 1004,1147
	 CTRL_DATA(I:I) = ' '
	END DO
	DO      I = 1,16
	 WRITE(UNIT=CTRL_DATA(1020+8*(I-1):1020+8*I), FMT='(I7.7,X)')
     *         NINT(1000*PHAS(I))
	END DO

C	Write ctrl_data.asc
C
	OPEN(UNIT=1,
     *	     FORM='BINARY',
     *	     TYPE='REPLACE',
     *	     ACCESS='DIRECT',
     *	     RECORDTYPE='FIXED',
     *	     RECL=1147,
     *	     INITIALSIZE=1147,
     *	     FILE=CTRL)
	WRITE(1,REC=1) (CTRL_DATA(I:I),I=1,1147)
	CLOSE(UNIT=1)

	CALL EXIT (0)
	END


Comments to: gurgel@ifm.uni-hamburg.de (Klaus-Werner Gurgel)