/*
* arx.h
*
* 24 7 1996
*
* (C) Copyright BEAM
*
* Vladimir E. Abramov-Maksimov
* Main (Pulkovo) Astronomical Observatory of RAS
*
* Pulkovo, St.Petersburg 196140, Russia
* Phone: (812) 123-40-19
* E-mail: beam@saoran.spb.su
*
*/
#ifndef ARX_DEFINED
#ifndef GRAD_DEFINED
typedef struct
{
short Grad;
short Min;
short Sec;
short hSec;
}
GRAD;
#define GRAD_DEFINED
#endif
#ifndef TIME_DEFINED
typedef struct
{
short Hour;
short Min;
short Sec;
short hSec;
}
TIME;
#define TIME_DEFINED
#endif
#ifndef TIME3_DEFINED
typedef struct
{
short Hour;
short Min;
short Sec;
}
TIME3;
#define TIME3_DEFINED
#endif
#ifndef TELESCOPES
#define RATAN_SOUTH_SECTOR_AND_PERISCOP 2
#define TELESCOPES
#endif /* TELESCOPES */
#ifndef FORMATS
#define FORMAT5 5
#define FORMATS
#endif /* FORMATS */
/**************************************************************************/
/* */
/* Ф О Р М А Т - 6 */
/* */
/* ( И К А Р - 2 4 ) */
/* */
/**************************************************************************/
#ifndef ICAR24_DEFINED
#define FLAG 0xFF8
#define ZONE_LENGTH 3074
/*
В 47-ом слове сначала была частота опроса, это постоянное число,
оно=10, потом туда стали записывать температуру эквивалента по
Цельсию, это числа в диапазоне 15-30 (т.е. не 10).
В начальных усилениях ВУРов 12-й бит всегда=0, 11-й бит=0 или 1 -
это фаза, 10-й бит всегда=1, это постоянная времени, которая
никогда не менялась и фактически равна от 0.1 до 0.2 сек для
индивидуальных ВУРов. Таким образом первое 8-ми ричное слово=
1 или 3 в зависимости от фазы.
*/
typedef struct
{
short nZone; /* Номер блока */
short Source[9]; /* Название источника */
short Observer[9]; /* Наблюдатель */
/* Дата наблюдения: */
short Day; /* день */
short Month; /* месяц */
short Year; /* год */
short Nobs[4]; /* Номер наблюдения */
GRAD HAerial; /* Высота антенны */
TIME TCulm; /* Момент прохождения центра источника*/
/* через диаграмму направленности */
/* радиотелескопа (мест. зв.) */
GRAD HSource; /* Высота источника */
short nAzimuth; /* Номер азимута */
short Carriage[2]; /* Положение каретки */
GRAD Dec; /* Склонение источника */
/* Знак в Grad, 1 в 12 бите */
short TSign; /* Знак температуры воздуха */
short T; /* Темп. воздуха */
short Freq; /* 47-е слово */
/* То ли частота опроса, */
/* то ли температура эквивалента */
short VUR1; /* Конфиг. ВУР'ов, крейт 1 */
short VUR2; /* Конфиг. ВУР'ов, крейт 2 */
short Amp0[24]; /* Начальные постоянные времени */
/* и усиления */
short PhaseVUR1; /* Начальные фазы ВУР'ов (крейт 1) */
short PhaseVUR2; /* Начальные фазы ВУР'ов (крейт 2) */
TIME TDec; /* Декр. момент. набл. */
short tRS[2]; /* Время прохождения радиуса источника*/
/* в зв. сек. */
short RSun[2]; /* Радиус источника в угл.сек. */
short VALH[3]; /* Часовое изменение прямого восх. */
short VDec[3]; /* Часовое изменение склонения */
short Azimuth[4]; /* Азимут (гр., гр., ', ") */
short tng[24][2]; /* Темп. ГШ, со знаком */
short ModOff[24]; /* Сигнал "модуляция выключена" */
short ModOn[24]; /* Сигнал "модуляция включена" */
short NG[24]; /* Сигнал "ГШ включен" */
short KMIN[24]; /* Минимальный коэффициент усиления */
short CondClb; /* Признак калибр.: 0 - небо, 1- ГШ */
short Wrk[1298]; /* Не используется */
}
ICAR24_HEADER; /* Служебная зона */
typedef struct
{
unsigned short Flag1; /* равно FLAG */
unsigned short Flag2; /* равно FLAG */
TIME3 TCulm; /* Момент наблюдения */
TIME3 TCurrent; /* Текущее время */
unsigned short PhaseVUR1;/* Текущие фазы ВУР'ов(крейт 1)*/
unsigned short PhaseVUR2;/* Текущие фазы ВУР'ов(крейт 2)*/
unsigned short Regim;
unsigned short a[13];
}
SRV; /* Служебная зона цикла цикла опроса */
typedef union
{
unsigned short ku[24]; /* Текущие коэффициенты усиления */
SRV srv;
}
CYCLE_HEADER; /* Служебная зона цикла цикла опроса */
typedef struct
{
unsigned short Data[24];
CYCLE_HEADER Hdr;
}
CYCLE; /* Цикл опроса */
typedef struct
{
unsigned short nZone;
CYCLE cycle[32];
}
ZONE; /* Блок данных */
#define WAVELENGTHS_ICAR24 { \
20.,23.,27.,32.,40.,120.,210.,300.,8.,80.,0.,0., \
20.,23.,27.,32.,40.,120.,210.,300.,8.,80.,0.,0. \
}
#define PAR_ICAR24 "IIIIIIIIII VVVVVVVVVV "
#define DFT_ICAR24 { \
-2.60, 4.91, -5.90, 8.41, -9.73, 31.37, 31.38, 31.50, 0.00, 31.39,
0., 0.,\
-2.60, 4.91, -5.90, 8.41, -9.73, 31.37, 31.38, 31.50, 0.00, 31.39,
0., 0., \
}
#define ICAR24_DEFINED
#endif /* ICAR24_DEFINED */
/**************************************************************************/
/**************************************************************************/
/* */
/* Ф О Р М А Т - 7 */
/* */
/* ( И К А Р - 3 2 ) */
/* */
/**************************************************************************/
#ifndef ICAR32_DEFINED
typedef struct {
short nZone;
short Source[9];
short Observer[9];
short Date[3];
short ObsNumber[4];
short HAerial[4];
short TCulm[4];
short HSource[4];
short NumAzimuth;
short Carriage[2];
short Declination[4];
short SignTAir;
short TAir;
short TEqv;
short ConfigVUR1;
short ConfigVUR2;
short Amp0[32];
short PhaseVUR1;
short PhaseVUR2;
short TDecr[4];
short tRS[2];
short RSun[2];
short VALH[3];
short VDECH[3];
short Azimuth[4];
short TNG[64];
short ModOn[32];
short ModOff[32];
short NG[32];
short CondCalib;
short TCalib; /* Время калибровки: 20 разрядов */
/* 6 - часы, 7 - минуты, 7 - секунды*/
short Sigma2On[64]; /* Дисперсия для ModOn */
short Sigma2Off[64]; /* Дисперсия для ModOff */
short Wrk[769];
}
ICAR32_HEADER;
#define ICAR32_DEFINED
#endif /* ICAR32_DEFINED */
/**************************************************************************/
#ifndef GSOUT_DEFINED
/* Заголовок "Архива 2" (старого) */
typedef struct
{
long nBlock;
long Nofle; /* Порядковый номер файла */
long Nobs; /* Номер наблюдения */
long Year, Month, Day, Hour;
/* Дата и час наблюдения */
long Telescope; /* Телескоп */
long Cabin; /* Облучатель */
long AcqSys; /* Система регистрации */
char Source[4*4];
char Observer[17*4];
long CulmHour, CulmMin; /* Звездное время */
float CulmSec; /* кульминации */
long DecGrad, DecMin; /* Склонение */
float DecSec;
float HSource; /* Высота источника */
float HAerial; /* Высота антенны */
long naz; /* Номер азимута */
float daz; /* Азимут */
float phi0; /* Рабочий угол сектора */
long StartHour, StartMin;
float StartSec; /* Зв. время начала регистрации */
float rs; /* Радиус Солнца */
float valh; /* Часовое изменение прямого восх. */
float vdelh; /* Часовое изменение склонения */
float dfy; /* Вынос из фокуса по Y */
float wl[20]; /* Длины волн по каналам */
long nch[20]; /* Номера каналов */
char prm[20][4]; /* Параметры по каналам ("I", "V", */
/* "DMMY" - канал не используется) */
float dfx[20]; /* Выносы из фокуса по каналам */
long nBlock2; /* Не используется, происхождение сего*/
/* таково: файл на МЛ записывался */
/* блоками по 516 байт, первые 4 байта*/
/* каждого блока ритуальные из */
/* ДОС АСВТ, это начало второго блока */
float tst[20]; /* Моменты начала записи по каналам */
float tng[20]; /* Температуры калибр. ступенек */
float tau[20]; /* Постоянные времени */
float clb[20]; /* Ступеньки калибровки */
long l; /* Число каналов регистрации */
long nfq; /* Частота опроса */
float dtcond; /* Шаг по времени */
long la2; /* Число каналов в архиве */
long mim; /* Число точек на канал */
long nbltt; /* Общее число блоков (по 516 байт) */
long nblch; /* Число блоков на один канал */
char Comment[36*4];
long ip; /* Резерв */
long ws[2];
long nodut;
long noloi;
}
GSOUT;
#define GSOUT_DEFINED
#endif
#ifndef GSOCV_DEFINED
/* Заголовок канала "Архива 2" (старого) */
typedef struct
{
long nmb; /* номер канала */
long nt; /* число точек */
long n1; /* обычно равно 1 - первая точка */
long n2; /* обычно равно mim - последняя точка */
long nx; /* обычно равно 1 - номер точки */
/* с аргументом x */
float x; /* =ts - время начала регистрации */
float dx; /* =dtcond - шаг */
float yz; /* обычно равно 0 - уровень отсчета */
float sc; /* масштаб */
/* сигнал = отсчет*sc+yz */
float a; /* резерв */
char is[8*4]; /* текстовый описатель */
long nn1; /* резерв */
long nn2; /* резерв */
}
GSOCV;
#define GSOCV_DEFINED
#endif
/**************************************************************************/
/* */
/* А Р Х И В - 2 */
/* */
/* ( " Н О В Ы Й " ) */
/* */
/**************************************************************************/
#ifndef GSOUT2_DEFINED
#define SOURCE_LENGTH 4*4
#define OBSERVER_LENGTH 17*4
#define HEADER_COUNT_CHANNEL 20
#define PRM_LENGTH 4
#define COMMENT_LENGTH 36*4
#define WS_LENGTH 4
/* Заголовок "Архива 2" (нового) */
typedef struct
{
long Nofle; /* Порядковый номер файла на МЛ */
/* на PC смысла не имеет */
long Nobs; /* Номер наблюдения */
long Year, Month, Day, Hour;
/* Дата и час наблюдения */
/* час смысла не имеет */
long Telescope; /* Телескоп */
/* 2 - юг+перископ */
long Cabin; /* Облучатель */
long AcqSys; /* Система регистрации */
/* похоже всегда = 5, т.е. реальному */
/* не соответствует */
char Source[SOURCE_LENGTH];
char Observer[OBSERVER_LENGTH];
long CulmHour, CulmMin; /* Звездное время кульминации */
float StartSec;
long DecGrad, DecMin;/* Склонение */
float DecSec;
float HSource; /* Высота источника (в градусах) */
float HAerial; /* Высота антенны (в градусах) */
long naz;
float daz; /* Азимут в градусах = naz+daz */
float phi0; /* Рабочий угол сектора */
/* параметр не задается */
long StartHour, StartMin;/* Зв. время начала регистрации */
float CulmSec;
float rs; /* Время прохождения радиуса Солнца */
/* в зв. сек. */
float valh;
float vdelh;
float dfy;
float wl[HEADER_COUNT_CHANNEL];
/* не используется */
long nch[HEADER_COUNT_CHANNEL];
/* номера каналов */
char prm[HEADER_COUNT_CHANNEL][PRM_LENGTH];
/* параметры по каналам: I, V, DMMY */
float dfx[HEADER_COUNT_CHANNEL];
/* поправка за вынос из фокуса по "x" */
/* в зв.сек. для источника с DEC=0 */
float tst[HEADER_COUNT_CHANNEL];
/* смысл не ясен */
float tng[HEADER_COUNT_CHANNEL];
/* температура ступеньки калибровки (K) */
float tau[HEADER_COUNT_CHANNEL];
/* постоянная времени */
float clb[HEADER_COUNT_CHANNEL];
/* не используется */
long l; /* Число каналов регистрации (24) */
long nfq; /* Частота опроса (320) */
/* смысла не имеет */
float dtcond; /* Шаг по времени */
/* смысла не имеет */
long la2; /* Число каналов в архиве */
long mim; /* */
/* смысла не имеет */
long nbltt; /* Общее число блоков */
/* смысла не имеет */
long nblch; /* */
/* смысла не имеет */
char Comment[COMMENT_LENGTH];
long ip; /* не используется */
long ws[WS_LENGTH]; /* не используется */
}
GSOUT2;
#define GSOUT2_DEFINED
#endif
#ifndef GSOCV2_DEFINED
/* Заголовок канала "Архива 2" (нового) */
#define IS_LENGTH 8*4
typedef struct
{
long nmb; /* номер канала */
long nt; /* не используется (=0) */
long n1; /* =1 */
long n2; /* число точек */
/* программа формирования архива */
/* содержит ошибку: фактически число */
/* точек на 1 меньше */
long nx; /* =1 */
float x; /* =1. */
float dx; /* шаг */
float yz; /* ступенька калибровки */
float sc; /* масштаб */
/* sc=tng/yz */
long na; /* =2 */
char is[IS_LENGTH]; /* текстовый описатель */
long nn1; /* =1 */
long nn2; /* число блоков */
}
GSOCV2;
#define GSOCV2_DEFINED
#endif
/**************************************************************************/
/* */
/* В Т О Р И Ч Н Ы Й Ф О Р М А Т */
/* */
/* ( О П Е Й К И Н О Й ) */
/* */
/**************************************************************************/
#ifndef HEADER_2_DEFINED
/* Заголовок вторичного формата (Опейкиной) */
typedef struct
{
short nt0; /* Количество точек в скане */
short kf1; /* Коэффициент, на который следует */
/* домножить отсчеты */
short idf; /* Интервал между отсчетами */
/* (в угл. сек.), */
/* домноженный на коэффициент kf2 */
short kf2; /* Коэффициент, на который нужно */
/* разделить idf, чтобы получить шаг */
short ice; /* Номер точки, соответствующей */
/* центру */
short ir1; /* Оптический радиус Солнца */
/* (в угл. сек.) */
short AzGrad; /* Азимут (градусы) */
short AzMin; /* Азимут (минуты) */
short AzSec; /* Азимут (секунды) */
short f; /* Резерв */
}
HEADER_2;
#define HEADER_2_DEFINED
#endif
#define ARX_DEFINED
#endif