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

WeraDesk [Web Interface] Documentation - eXtended Header Information

This data structure is normally passed through a file located at /home/wera/weractrl/ctrl_data.cpy or /home/wera/weractrl/scan_data.cpy for frequency scans.

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)