Newer
Older
#include <iostream>
#include <cstdio>
#include "isisraw.h"
#include "vms_convert.h"
#include "byte_rel_comp.h"
#define SUCCESS 0
#define FAILURE 1
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
ISISRAW::ISISRAW() : m_crpt(0), dat1(0) {
int i, j;
// section 1
frmt_ver_no = 2; // format version number VER1 (=2)
data_format = 0; // data section format (0 = by TC, 1 = by spectrum)
// section 2
ver2 = 1; // run section version number VER2 (=1)
r_number = 0; // run number
memset(r_title, ' ', sizeof(r_title)); // run title
// section 3
ver3 = 2; // instrument section version number (=2)
memset(i_inst, ' ', sizeof(i_inst)); // instrument name
i_det = 1; // number of detectors NDET
i_mon = 1; // number of monitors NMON
i_use = 1; // number of user defined UTn tables NUSE
// I_TABLES is address of MDET
mdet = new int[i_mon]; // detector number for monitors (size NMON)
monp = new int[i_mon]; // prescale value for each monitor (size NMON)
for (i = 0; i < i_mon; i++) {
mdet[i] = i + 1;
monp[i] = 1;
}
spec = new int[i_det]; // spectrum number table (size NDET)
delt = new float[i_det]; // hold off table (size NDET)
len2 = new float[i_det]; // L2 table (size NDET)
code = new int[i_det]; // code for UTn tables (size NDET)
tthe = new float[i_det]; // 2theta scattering angle (size NDET)
ut = new float[i_use *
i_det]; // nuse UT* user tables (total size NUSE*NDET) ut01=phi
for (i = 0; i < i_det; i++) {
spec[i] = i + 1; // we have t_nsp1 = i_det
delt[i] = (float)i;
len2[i] = (float)i;
code[i] = i + 1;
tthe[i] = (float)i;
}
for (i = 0; i < i_use; i++) {
for (j = 0; j < i_det; j++) {
ut[i * i_det + j] = (float)j;
}
}
// section 4
ver4 = 2; // SE section version number (=2)
e_nse = 1; // number of controlled SEPs NSEP
e_seblock = new SE_STRUCT[e_nse]; // NSEP SE parameter blocks (total size
// NSEP*32*4 bytes)
// section 5
ver5 = 2; // DAE section version number (=2)
crat = new int[i_det]; // crate number for each detector (size NDET)
modn = new int[i_det]; // module number for each detector (size NDET)
mpos = new int[i_det]; // module position for each detector (size NDET)
timr = new int[i_det]; // time regime for each detector (size NDET)
udet = new int[i_det]; // user detector number for each detector (size NDET)
for (i = 0; i < i_det; i++) {
crat[i] = 1;
modn[i] = 1;
mpos[i] = i;
timr[i] = 1;
udet[i] = i;
}
// section 6
ver6 = 1; // TCB section version number (=1)
t_ntrg = 1; // number of time regimes (=1)
t_nfpp = 1; // number of frames per period
t_nper = 1; // number of periods
for (i = 0; i < 256; i++) {
t_pmap[i] = 1; // period number for each basic period
}
t_nsp1 = i_det; // number of spectra in time regime 1
t_ntc1 = 10; // number of time channels in time regime 1
memset(t_tcm1, 0, sizeof(t_tcm1)); // time channel mode
memset(t_tcp1, 0, sizeof(t_tcp1)); // time channel parameters
t_pre1 = 1; // prescale for 32MHz clock
t_tcb1 = new int[t_ntc1 +
1]; // time channel boundaries in clock pulses (size NTC1+1)
for (i = 0; i < t_ntc1 + 1; i++) {
t_tcb1[i] = i;
}
// section 7
// write NCHAN = NTC1+1 time channel boundaries
ver7 = 1; // user version number (=1)
u_len = 1;
u_dat = new float[u_len]; // user defined data (ULEN, max size 400 words)
for (i = 0; i < u_len; i++) {
u_dat[i] = (float)i;
}
// section 8
ver8 = 2; // data version number (=2)
// D_DATA points at ddes
ddes = new DDES_STRUCT[(t_nsp1 + 1) * t_nper]; // (NSP1+1)*NPER items, totoal
// size (NSP1+1)*NPER*2*4 bytes
dat1 =
new uint32_t[(t_ntc1 + 1) * (t_nsp1 + 1) *
t_nper]; // compressed data for (NTC1+1)*(NSP1+1)*NPER values
for (i = 0; i < (t_ntc1 + 1) * (t_nsp1 + 1) * t_nper; i++) {
dat1[i] = i;
}
// disable warning about strcpy
#pragma warning(disable : 4996)
logsect.nlines = 1;
logsect.lines = new LOG_LINE[logsect.nlines];
for (i = 0; i < logsect.nlines; i++) {
// logsect.lines[i].data = "test log line"; //Deprecated
logsect.lines[i].data = (char *)malloc(16);
strcpy(logsect.lines[i].data, "test log line");
logsect.lines[i].len = static_cast<int>(strlen(logsect.lines[i].data));
}
addItems();
}
int ISISRAW::addItems() {
static const int hdr_size = sizeof(hdr) / sizeof(char);
static const int rrpb_size = sizeof(rpb) / sizeof(float);
static const int irpb_size = sizeof(rpb) / sizeof(int);
m_char_items.addItem("HDR", (const char *)&hdr, false, &hdr_size);
m_real_items.addItem("RRPB", (float *)&rpb, false, &rrpb_size);
m_int_items.addItem("IRPB", (int *)&rpb, false, &irpb_size);
return 0;
}
// create one bound to a CRPT
ISISRAW::ISISRAW(ISISCRPT_STRUCT *crpt)
: m_crpt(crpt), frmt_ver_no(0), data_format(0), ver2(0), r_number(0),
ver3(0), i_det(0), i_mon(0), i_use(0), mdet(0), monp(0), spec(0), delt(0),
len2(0), code(0), tthe(0), ut(0), ver4(0), ver5(0), crat(0), modn(0),
mpos(0), timr(0), udet(0), ver6(0), t_ntrg(0), t_nfpp(0), t_nper(0),
t_nsp1(0), t_ntc1(0), t_pre1(0), t_tcb1(0), ver7(0), u_dat(0), ver8(0),
ddes(0), dat1(0) {
memset(r_title, ' ', sizeof(r_title));
memset(i_inst, ' ', sizeof(i_inst));
for (int i = 0; i < 256; i++) {
t_pmap[i] = 1; // period number for each basic period
}
memset(t_tcm1, 0, sizeof(t_tcm1)); // time channel mode
memset(t_tcp1, 0, sizeof(t_tcp1)); // time channel parameters
e_nse = 0;
e_seblock = 0;
u_len = 0;
logsect.nlines = 0;
logsect.lines = 0;
addItems();
updateFromCRPT();
}
ISISRAW::ISISRAW(ISISCRPT_STRUCT *crpt, bool doUpdateFromCRPT)
: m_crpt(crpt), frmt_ver_no(0), data_format(0), ver2(0), r_number(0),
ver3(0), i_det(0), i_mon(0), i_use(0), mdet(0), monp(0), spec(0), delt(0),
len2(0), code(0), tthe(0), ut(0), ver4(0), ver5(0), crat(0), modn(0),
mpos(0), timr(0), udet(0), ver6(0), t_ntrg(0), t_nfpp(0), t_nper(0),
t_nsp1(0), t_ntc1(0), t_pre1(0), t_tcb1(0), ver7(0), u_dat(0), ver8(0),
ddes(0), dat1(0) {
memset(r_title, ' ', sizeof(r_title));
memset(i_inst, ' ', sizeof(i_inst));
for (int i = 0; i < 256; i++) {
t_pmap[i] = 1; // period number for each basic period
}
memset(t_tcm1, 0, sizeof(t_tcm1)); // time channel mode
memset(t_tcp1, 0, sizeof(t_tcp1)); // time channel parameters
e_nse = 0;
e_seblock = 0;
u_len = 0;
logsect.nlines = 0;
logsect.lines = 0;
addItems();
if (doUpdateFromCRPT) {
updateFromCRPT();
// update from bound CRPT
int ISISRAW::updateFromCRPT() {
if (m_crpt == NULL) {
return 0;
}
#ifndef REAL_CRPT
#else
int i;
char buffer[256];
spacePadCopy(hdr.inst_abrv, m_crpt->inst_abrv, sizeof(hdr.inst_abrv));
sprintf(buffer, "%05d", m_crpt->run_number);
spacePadCopy(hdr.hd_run, buffer, sizeof(hdr.hd_run));
spacePadCopy(hdr.hd_user, m_crpt->user_name, sizeof(hdr.hd_user));
Loading
Loading full blame...