That what is not evolving doesn't live. | |
That what doesn't live dies. |
In the past Mark-3/Mark-4 VLBI data analysis software used so-called MARK-3 DBH format (or database-format) which kept information about VLBI session. Data could be transformed from MARK-3 DBH format to a NGS-format or a SUP (or superfile) format but with substantial loss of information which might be not essential for a simplified analysis.
MARK-3 DBH format was developed in middle 70-s. It has a substantial
deficiencies. New format, called gvf (geo-VLBI format) suprseded the old
format.
These overheads are so tremendous what makes it impossible to use
MARK-3 DBH handler routinely. As a result, SOLVE uses another format
called "superfile" for only one reason: to reduce overheads. It makes
the process of data analysis rather more difficult and poses
additional heavy obstacles to further development of analysis
software. The first operation which non-SOLVE VLBI analysis software
does is to convert data from MARK-3 DBH to another usable format.
Advantages of this scheme:
Structure of a DATA-section:
Some new lcodes will be added:
Why not old MARK-3 DBH format?
VLBI Data handler MARK-3 DBH was written in 1976. It is difficult to
find any other program in the world which is intensively used for a
quarter of century. However, several generations of computers changed
since then; approaches to developing software also changed and MARK-3 DBH
database handler is not adequate now. It has deficiencies which become
more and more considerable obstacles to the proper use of VLBI data.
I should notice that many of these setbacks stem from severe memory
restrictions which we had in 70-s. MARK-3 DBH handler should have operated
at the machines with 20Kb available memory and it did! A heavy price has been
paid for it. Times changed. Now we can take 1Gb of operative memory with
impunity and restrictions of MARK-3 DBH format can be and must be
overcome.
Alternative format
Geo VLBI Format
What was done as an alternative
What did it bring?
Specifications of gvf format (geo-VLBI format)
Overview of general approaches
------------ ----------- ----------- ----------- -----------
| Fringe-1 | | Calib-1 | | Theo-1 | | Solve-1 | | Docs-1 |
------------ ----------- ----------- ----------- -----------
------------ ----------- ----------- -----------
| Fringe-2 | | Calib-2 | | Theo-2 | | Solve-2 |
------------ ----------- ----------- -----------
Different files contain different type of information:
More than one extent of the same type can be used. It is
proposed to split the extents of the same type onto extents with
frequently used information and with rarely used information.
It is debatable which items should
be treated as "frequently used". At the beginning we can consider
information to be put in superfiles now as "frequently used".
It assumed that a list of the files related to the experiment
is passed to the gvf-handler.
europe55_b2_b03_cal1.gvf
neos-a784_w1_g08_sol2.agvf
Fields:
Detailed specifications of binary gvf format
A valid binary gvf file consists of several sections of variable
length: a) preamble; b) text section; c) table of contents;
d) binary data section in this order. Text section or "table
of contents" and "binary data" sections may be omitted. Each section
is aligned in order to start from the 256-byte page boundary.
Unused space is always filled by zeroes.
.--------.--------.------.--------.-------------.
| Length | Prefix | Body | Filler | Control sum |
.--------.--------.------.--------.-------------.
where
Length INTEGER*4
Length in bytes of the entire section, including body,
length, prefix, control sum and filler. Prefix CHARACTER*4
Section identifier. One of PREA, TEXT, CONT, DATA Body Undefined
Section content. Treated as a byte stream. Filler Undefined
Unused space. May have zero length. Always binary zeroes.
Control sum INTEGER*4
Control sum.
The preamble section consists of an ordered sequence of logical
records of variable length. The sequence is terminated by
a section terminator: CNTRL/Z (decimal code 26). Firstly,
mandatory records follow, then optional records may follow.
Format of a logical record in preamble section:
Identifier
Sequence of letters (without delimiters!).
Identifier should be unique. Id_delimiter
two bytes: semi-column, blank (decimal codes: 58, 32)
Body
Sequence of ascii symbols in the range 32-127 decimal
Record terminator
CNTRL/J (decimal code: 10)
All mandatory records are written by handler automatically.
The list of mandatory records:
File_format:
Identifier of the format and its version.
Generator:
Name of the program to have generated the file and its version.
Creation_UTC_date:
Creation date.
Binary_format:
Identifier of binary numbers format. It is assumed that
normally IEEE standard will be used, but why not to reserve
the capacity to use alternative format?
File_name:
File name
File_version:
Version number of the file. Versions are numbered starting
with 1 up to 99.
Previous_filename_{ver}:
File name of the version {ver}, where {ver} is a version number
which is less than the current version number. If the current
version number of greater than 2 then several
Previous_filename_{ver}: records should present.
For example, if the current
version is 4 then records Previous_filename_03:,
Previous_filename_02:, Previous_filename_01: should present.
Experiment_id:
Experiment identifier in lower register letters.
Experiment_start_date:
Start date in the format: YYYY.MM.DD , for example, 1999.08.06
The first observation which has been correlated considered
as a start observation.
Experiment_start_doy:
Day of year of the first observation of the experiment.
Experiment_start_UTC_time:
Start time in the format HH:MM:SS.FFF, f.e. 08:00:52.028
Duration:
duration of the experiment in seconds.
Correlation_center_code:
One-symbol code of the correlation center.
Correlation_center_name:
Full name of the correlation center.
Analysis_center_code:
One-symbol code of the center where the file has been
created.
Analysis_center_name:
Full analysis center name.
analyst_name:
Analyst name as it registered in the operating system.
Analyst_e-mail_address:
E-mail address of the person who created a database and to whom
to send questions as a last resort. The name is generated
by operating system.
Hardware_name:
Name and type of the computer used for creation of the file.
OS_name:
Name and version number of the operating system.
Records with arbitrary identifiers can be added after mandatory
records.
The TEXT section consists of an ordered sequence of subsections.
Each subsection is terminated by CNTRL/Z (decimal code: 26).
Each subsection consists of a prefix, title, title delimiter,
body and subsection terminator:
Prefix:
Sequence of 7 symbols: "Title: "
Title:
Ascii text with any symbols, except CNTRL/J and CNTRL/Z
(decimal codes 10 and 26).
Title delimiter:
CNTRL/J (decimal codes 10).
Body:
Any symbols, except CNTRL/Z (decimal 26).
Subsection terminator:
CNTRL/Z (decimal 26)
Text section is for history records and for any textual information.
The CONT section consists of a sequence of records of fixed length.
It describes contents of binary data section:
Lcode
CHARACTER*8
Identifier of the item in the database.
OFFSET
INTEGER*4
Offset in bytes of the first byte of the first occurrence of
this lcode with respect to the beginning of DATA section.
DIM1
INTEGER*2
First dimension of the array of values for the lcode.
Lcode is considered as a three-dimensional array.
DIM2
INTEGER*2
Second dimension of the array of values for the lcode.
Lcode is considered as a three-dimensional array.
DIM3
INTEGER*2
Third dimension of the array of values for the lcode.
Lcode is considered as a three-dimensional array.
Type
Byte*1
Data type code. Supported data types: CHARACTER,
BYTE*1, INTEGER*2, INTEGER*4, REAL*4, REAL*8.
Class
Byte*1
Code of the data class. Supported data classes: Session,
Scan, Station, Baseline.
Usage code
Byte*1
Lcode usage code. Supported usage codes are: Primitive,
Synonym, Derived. Usage code describes which additional
actions are needed besides reading/writing.
The DATA section consists of an ordered sequence of logical
records of variable length. Each logical record corresponds to a
LCODE and contains an ordered sequence of frames. Each frame
contains an array of values of the lcode which corresponds to one
observation. All frames have fixed length within one logical
record.
DATA-section:
~~~~~~~~~~~~~
Record k | LCODE-k |
~~~~~~~~~~~~~
~~~~~~~~~~~~~
Record k+1 | LCODE-k+1 |
~~~~~~~~~~~~~
~~~~~~~~~~~~~
Record k+2 | LCODE-k+2 |
~~~~~~~~~~~~~
...
Structure of a data record:
record-k:
~~~~~~~~~~~~~~~
| Frame j |
~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~
| Frame j+1 |
~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~
| Frame j+2 |
~~~~~~~~~~~~~~~
...
The number of records is the same as the number of lcodes.
The number of frames depends on the class of the lcode:
All lcodes are split onto three groups:
1 8 0
2 9 15
0 10 16
0 11 17
3 12 18
4 0 19
5 0 20
6 0 21
7 13 22
0 14 23
Here station 1 and 3 participated in the
scan #8, while station 2 -- not. Information for
station-type lcodes related to the station 1 and scan #8
is in the frame with index 6; information for
station-type lcodes related to the station 3 and scan #8
is in the frame with index 21. Station-dependent lcodes
are written 23 times in this example; they would be written
60 times if the MARK-3 DBH format would be in use.
1
1
1
2
3
3
3
3
3
3
4
5
5
How gvf handler should work
Reading
Now handler is ready to fulfill a request to the data. Request to preamble
is carried out by searching preamble identifiers codes. Request to the text
data is carried out by searching the title. Request to the binary data is
fulfilled by the following way:
That is all.
Ascii gvf format
Ascii gvf format should satisfy two criteria:
It consists of records of variable length terminated by CNTRL/J (decimal
code: 10) symbol. Alphabetic symbols with codes 32-127 decimal are allowed.
Format of a record in the ascii gvf format:
Prefix | CHARACTER*2 | One of "$$", " $", " ": "$$" is a section prefix; " $" is a keyword prefix, " " is continuation prefix. |
Keyword_delimiter_start | CHARACTER*1 | Double quotation sign " (decimal code 34). It is ignored if a continuation prefix was used. |
Keyword | CHARACTER | Keyword. It is ignored if a continuation prefix was used. |
Keyword_delimiter_end | CHARACTER*2 | Double quotation sign " and blank (decimal codes 34, 32). It is ignored if a continuation prefix was used. |
Value | CHARACTER | Value of the keyword. |
The records with session prefix have the name of the section and empty value. They are the first record of the section and are inserted into the agvf-file as section delimiters. Format of a keyword and a value depends on section.
Prefix | CHARACTER*2 | " $" (decimal codes: 32, 36) |
Delimiter | CHARACTER*1 | Double quotation sign " (decimal code 34). |
Lcode | CHARACTER*8 | Lcode. |
Delimiter | CHARACTER*2 | Delimiter (decimal codes: 34, 32). |
Offset | CHARACTER*9 | Offset in bytes of the first byte of a logical record in the DATA section with respect to beginning of the DATA section. |
Delimiter | CHARACTER*1 | Delimiter (decimal code: 32). |
Dim1 | CHARACTER*5 | First dimension of the array of values of LCODE. |
Delimiter | CHARACTER*1 | Delimiter (decimal code: 32). |
Dim2 | CHARACTER*5 | Second dimension of the array of values of LCODE. |
Delimiter | CHARACTER*1 | Delimiter (decimal code: 32). |
Dim3 | CHARACTER*5 | Third dimension of the array of values of LCODE. |
Delimiter | CHARACTER*1 | Delimiter (decimal code: 32). |
Date type | CHARACTER*2 | One of CH, B1, I2, I4, R4, R8 |
Delimiter | CHARACTER*1 | Delimiter (decimal code: 32). |
Date class | CHARACTER*4 | One of SESS, SCAN, STAN, BASE |
Delimiter | CHARACTER*1 | Delimiter (decimal code: 32). |
Usage code | CHARACTER*4 | One of PRIM, DERV, SYNM |
Prefix | CHARACTER*2 | " $" (decimal codes: 32, 36) |
Delimiter | CHARACTER*1 | Delimiter: double quotation sign " (decimal code 34). |
Lcode | CHARACTER*8 | Lcode. |
Delimiter | CHARACTER*1 | Delimiter: (decimal code: 32) |
Object name | CHARACTER | Experiment-code for session-class lcodes; source name for scan-class lcodes; station name for station-class lcodes and baseline name for baseline-class lcodes. |
Delimiter | CHARACTER*1 | Delimiter: (decimal code 32) |
Date | CHARACTER*10 | Date in the format yyyy.mm.dd |
Delimiter | CHARACTER*1 | Delimiter (decimal code 95) |
Time | CHARACTER*8 | UTC time tag in the format HH:MM:SS |
Delimiter | CHARACTER*1 | Delimiter: (decimal code 32) |
Index element | CHARACTER | Index of the element in the lcode array in the format (IN1, IN2, IN3) |
Delimiter | CHARACTER*2 | Delimiter: double quotation sign " and blank (decimal codes 34, 32) |
Value | CHARACTER | Value of the keyword. |
Example:
$$"PREA" $"File_format:" gvf v 0.1 1999.08.08 ... $$"TEXT" $"HISTORY version 1 1999.08.04 08:34:35" Created by Dbedit HP-UX version 3.1 Dbedit control file history entry: IRIS-S138, fort-gilc-hart-west-wett, -LP Directory /diskA5/is138/1513 ... $$"CONT" $"JUL DATE" 880256 1 1 1 R8 SCAN PRIM $"CALBYFRQ" 1280264 3 2 14 I2 STAN PRIM ... $$"DATA" $"JUL DATE 0552+398 1999.05.03 22:12:33 (1,1,1)" .2451301500000000D+07 ... $"CALBYFRQ HARTRAO 1999.05.03_22:12:33 (1,1,1)" 459 $"CALBYFRQ HARTRAO 1999.05.03_22:12:33 (2,1,1)" -1752 $"CALBYFRQ HARTRAO 1999.05.03_22:12:33 (3,1,1)" 10 $"GRDEL GILCREEK/HARTRAO 1999.05.03_22:12:33 (1,1,1)" -.1162569743908074D-02 $"GRDEL GILCREEK/HARTRAO 1999.05.03_22:12:33 (2,1,1)" -.1162561782032324D-02 ...Format of other keywords is seen from the example above.
This page was prepared by
()
Last update: 05-SEP-99 19:53:44