Skip to content
This repository was archived by the owner on Aug 12, 2024. It is now read-only.

Commit 56bc703

Browse files
author
keimpema
committed
Add a vlba_print_headers, and add some options to the existing
*_print_headers utilities. git-svn-id: svn+ssh://jop91.astron.nl/auto/home/jive_cvs/SOFTC/svn/trunk/sfxc@1711 5736e3ea-d426-0410-8aaf-93e336ac3372
1 parent f442cfe commit 56bc703

5 files changed

+371
-26
lines changed

utils/Makefile.am

+13-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pkginclude_HEADERS = *.h *.py
1111
bin_PROGRAMS = mark5a_print_headers \
1212
mark5b_print_headers \
1313
vdif_print_headers \
14+
vlba_print_headers \
1415
print_new_output_format \
1516
extract_channelizer
1617

@@ -59,8 +60,6 @@ vdif_print_headers_SOURCES = \
5960

6061
mark5a_print_headers_SOURCES = \
6162
mark5a_print_headers.cc \
62-
../src/log_writer.cc \
63-
../src/log_writer_cout.cc \
6463
../src/data_reader.cc \
6564
../src/data_reader_file.cc \
6665
../src/data_reader_blocking.cc \
@@ -72,6 +71,18 @@ mark5a_print_headers_SOURCES = \
7271
../src/control_parameters.cc \
7372
../src/correlator_time.cc
7473

74+
vlba_print_headers_SOURCES = \
75+
vlba_print_headers.cc \
76+
../src/data_reader.cc \
77+
../src/data_reader_file.cc \
78+
../src/data_reader_blocking.cc \
79+
../src/input_data_format_reader.cc \
80+
../src/vlba_reader.cc \
81+
../src/vlba_header.cc \
82+
../src/channel_extractor_5.cc \
83+
../src/utils.cc \
84+
../src/control_parameters.cc \
85+
../src/correlator_time.cc
7586

7687
produce_html_plotpage_SOURCES = \
7788
produce_html_plotpage.cc \

utils/mark5a_print_headers.cc

+61-10
Original file line numberDiff line numberDiff line change
@@ -117,40 +117,91 @@ void get_input_node_parameters(Input_node_parameters &param, Mark5a_reader::Data
117117
param.track_bit_rate = 1;
118118
}
119119

120+
void usage(char *filename){
121+
std::cout << "Usage : " << filename << " [OPTIONS] <filename>\n"
122+
<< "Options : -n <number>, Only print <number> timestamps\n"
123+
<< " -y <YEAR>, the year in which the recording was made\n";
124+
}
125+
126+
void parse_arguments(int argc, char *argv[], char **filename, int *n_time_stamps, int *year){
127+
int c;
128+
*n_time_stamps = -1;
129+
*year = 0;
130+
131+
while ((c = getopt (argc, argv, "n:y:")) != -1){
132+
bool error = false;
133+
char *next;
134+
135+
switch (c){
136+
case 'n':
137+
next = optarg;
138+
*n_time_stamps = strtol(optarg, &next, 10);
139+
error = (next == optarg);
140+
break;
141+
case 'y':
142+
next = optarg;
143+
*year = strtol(optarg, &next, 10);
144+
error = (next == optarg);
145+
break;
146+
case '?':
147+
std::cerr << "Error : Invalid option, " << (char)optopt << "\n";
148+
usage(argv[0]);
149+
exit(1);
150+
}
151+
if (error){
152+
std::cerr << "Error : invalid parameter\n";
153+
exit(1);
154+
}
155+
}
156+
if(argc - optind != 1){
157+
std::cerr << "Invalid number of arguments\n";
158+
usage(argv[0]);
159+
exit(1);
160+
}
161+
*filename = argv[optind];
162+
}
163+
164+
boost::shared_ptr< Data_memory_pool > memory_pool_(new Data_memory_pool(10));
165+
120166
int main(int argc, char *argv[]) {
121167
#ifdef SFXC_PRINT_DEBUG
122168
RANK_OF_NODE = 0;
123169
#endif
170+
int n_time_stamps=-1, year=0;
171+
char *filename;
124172

125-
Log_writer_cout log_writer(0);
173+
parse_arguments(argc, argv, &filename, &n_time_stamps, &year);
126174

127-
if (argc != 2) {
128-
log_writer << "usage: " << argv[0] << " <mark5a-file>" << std::endl;
129-
return 1;
175+
Time ref_time;
176+
if (year > 0){
177+
int y = year + 4799;
178+
int mjd_year = 365*y + (y/4) - (y/100) + (y/400) - 2431738.5;
179+
ref_time.set_time(mjd_year, 0);
130180
}
131181

132182
Mark5a_reader::Data_frame data;
133-
boost::shared_ptr< Data_memory_pool > memory_pool_(new Data_memory_pool(10));
134183
data.buffer = memory_pool_->allocate();
135184

136185
Input_node_parameters param;
137-
get_input_node_parameters(param, data, argv[1]);
186+
get_input_node_parameters(param, data, filename);
138187

139-
boost::shared_ptr<Data_reader> reader(new Data_reader_file(argv[1]));
140-
Mark5a_reader *mark5a_reader = new Mark5a_reader(reader, Time(0));
188+
boost::shared_ptr<Data_reader> reader(new Data_reader_file(filename));
189+
Mark5a_reader *mark5a_reader = new Mark5a_reader(reader, ref_time);
141190
mark5a_reader->set_parameters(param);
142191

143192
while ((!mark5a_reader->open_input_stream(data)) && (!mark5a_reader->eof()))
144193
;
145-
int64_t prev_time = (int64_t)mark5a_reader->get_current_time().get_time_usec(), current_time;
146194

195+
int n = 0;
196+
int64_t prev_time = (int64_t)mark5a_reader->get_current_time().get_time_usec(), current_time;
147197
do {
148198
current_time = (int64_t)mark5a_reader->get_current_time().get_time_usec();
149199
std::cout
150200
<< current_time
201+
<< " \t" << mark5a_reader->get_current_time()
151202
<< " \t" << current_time - prev_time
152203
<< std::endl;
153204
prev_time = current_time;
154-
} while (mark5a_reader->read_new_block(data));
205+
} while ((++n != n_time_stamps) && (mark5a_reader->read_new_block(data)));
155206

156207
}

utils/mark5b_print_headers.cc

+63-6
Original file line numberDiff line numberDiff line change
@@ -26,23 +26,71 @@ void find_first_header(FILE *infile){
2626
fseek(infile, -4, SEEK_CUR);
2727
}
2828

29+
void usage(char *filename){
30+
std::cout << "Usage : " << filename << " [OPTIONS] <filename>\n"
31+
<< "Options : -n <number>, Only print <number> timestamps\n"
32+
<< " -y <YEAR>, the year in which the recording was made\n";
33+
}
34+
35+
void parse_arguments(int argc, char *argv[], char **filename, int *n_time_stamps, int *year){
36+
int c;
37+
*n_time_stamps = -1;
38+
*year = 0;
39+
40+
while ((c = getopt (argc, argv, "n:y:")) != -1){
41+
bool error = false;
42+
char *next;
43+
44+
switch (c){
45+
case 'n':
46+
next = optarg;
47+
*n_time_stamps = strtol(optarg, &next, 10);
48+
error = (next == optarg);
49+
break;
50+
case 'y':
51+
next = optarg;
52+
*year = strtol(optarg, &next, 10);
53+
error = (next == optarg);
54+
break;
55+
case '?':
56+
std::cerr << "Error : Invalid option, " << (char)optopt << "\n";
57+
usage(argv[0]);
58+
exit(1);
59+
}
60+
if (error){
61+
std::cerr << "Error : invalid parameter\n";
62+
exit(1);
63+
}
64+
}
65+
if(argc - optind != 1){
66+
std::cerr << "Invalid number of arguments\n";
67+
usage(argv[0]);
68+
exit(1);
69+
}
70+
*filename = argv[optind];
71+
}
72+
73+
2974
// Prints the timestamps in the headers of a mark5b file
3075
int main(int argc, char *argv[]) {
31-
if (argc != 2) {
32-
std::cout << "usage: " << argv[0] << " <mark5b-file>" << std::endl;
33-
return 1;
34-
}
76+
int n_time_stamps=-1, year=0;
77+
char *filename;
78+
79+
parse_arguments(argc, argv, &filename, &n_time_stamps, &year);
3580

36-
FILE *infile = fopen(argv[1], "r");
81+
FILE *infile = fopen(filename, "r");
3782
if(infile == NULL){
38-
std::cout << "Could not open " << argv[1] << " for reading.\n";
83+
std::cout << "Could not open " << filename << " for reading.\n";
3984
return 1;
4085
}
4186

4287
find_first_header(infile);
4388
int header[4];
4489
int bytes_read = fread(&header[0], 1, MARK5B_HEADER_SIZE, infile);
90+
int n=0;
4591
while(bytes_read == MARK5B_HEADER_SIZE){
92+
if (n++ == n_time_stamps)
93+
break;
4694
if (header[0] != SYNCWORD){
4795
std::cout << "Invalid header\n";
4896
}else{
@@ -63,6 +111,15 @@ int main(int argc, char *argv[]) {
63111
subsec += ((header[3]&mask) >> b) * mul;
64112
mask = mask << 4;
65113
}
114+
// If a year is given then compute the full MJD
115+
if (year > 0){
116+
int y = year + 4799;
117+
int mjd_year = 365*y + (y/4) - (y/100) + (y/400) - 2431738.5;
118+
if (mjd >= mjd_year%1000)
119+
mjd = mjd_year + mjd - mjd_year%1000;
120+
else
121+
mjd = mjd_year + mjd - mjd_year%1000 + 1000;
122+
}
66123
char time_string[80];
67124
sprintf(time_string, "%02d:%02d:%02d.%d", sec/(60*60), (sec%(60*60))/60, sec%60, subsec);
68125
std::cout << "mjd = " << mjd << ", sec = " << sec << ", subsec = " << subsec

utils/vdif_print_headers.cc

+24-8
Original file line numberDiff line numberDiff line change
@@ -46,23 +46,28 @@ void usage(char *filename){
4646
std::cout << "Options :\n";
4747
std::cout << " -q, --quiet Only print bad frames\n";
4848
std::cout << " -s, --skip=N Skip the first N frames.\n";
49-
std::cout << " -f, --frame-size=M Override the frame size given in the VDIF headers..\n";
49+
std::cout << " -n, --n-frames=M Only print the first M frames.\n";
50+
std::cout << " -f, --frame-size=P Override the frame size given in the VDIF headers..\n";
5051
}
5152

52-
void get_options(int argc, char*argv[], char **filename, int &frame_size, int &nskip, bool &quiet){
53+
void get_options(int argc, char*argv[], char **filename, int &frame_size, int &nskip, int &nframes, bool &quiet){
5354
int c, opt_index = 0;
5455
static struct option long_options[] = {
5556
{"help", no_argument, 0, 'h'},
5657
{"frame-size", required_argument, 0, 'f'},
5758
{"skip", required_argument, 0, 's'},
59+
{"nframes", required_argument, 0, 'n'},
5860
{"quiet", required_argument, 0, 'q'},
5961
{0, 0, 0, 0}
6062
};
6163
frame_size = 0;
6264
nskip = 0;
6365
quiet = false;
64-
while( (c = getopt_long (argc, argv, "qhs:f:", long_options,
66+
nframes = -1;
67+
bool error = false;
68+
while( (c = getopt_long (argc, argv, "qhs:f:n:", long_options,
6569
&opt_index)) != -1){
70+
int i;
6671
switch (c){
6772
case 'h':
6873
usage(argv[0]);
@@ -71,16 +76,26 @@ void get_options(int argc, char*argv[], char **filename, int &frame_size, int &n
7176
case 'q':
7277
quiet = true;
7378
break;
79+
case 'n':
80+
i = sscanf(optarg, "%d", &nframes);
81+
error = (i == 0);
82+
break;
7483
case 's':
75-
sscanf(optarg, "%d", &nskip);
84+
i = sscanf(optarg, "%d", &nskip);
85+
error = (i == 0);
7686
break;
7787
case 'f':
78-
sscanf(optarg, "%d", &frame_size);
88+
i = sscanf(optarg, "%d", &frame_size);
89+
error = (i == 0);
7990
break;
8091
default:
8192
printf ("option %s", long_options[opt_index].name);
8293
abort();
8394
}
95+
if (error){
96+
printf("Bad argument to option %s\n", long_options[opt_index].name);
97+
abort();
98+
}
8499
}
85100
if ((argc-optind) != 1) {
86101
std::cout << "Input file not specified\n";
@@ -168,10 +183,10 @@ int64_t find_next_valid_header(FILE *infile, Header &prev_header){
168183
}
169184

170185
int main(int argc, char *argv[]) {
171-
int frame_size, nskip;
186+
int frame_size, nskip, nframes=-1;
172187
bool quiet;
173188
char *filename;
174-
get_options(argc, argv, &filename, frame_size, nskip, quiet);
189+
get_options(argc, argv, &filename, frame_size, nskip, nframes, quiet);
175190

176191
FILE *infile = fopen(filename, "r");
177192
if(infile == NULL){
@@ -183,10 +198,11 @@ int main(int argc, char *argv[]) {
183198

184199
bool eof = false;
185200
int invalid_nr = 0;
201+
int n = 0;
186202
size_t data_size = 1, header_size = 0;
187203
bool first_header = true;
188204
Header prev_header;
189-
while (eof == false){
205+
while ((n++ != nframes) && (eof == false)){
190206
Header header;
191207
unsigned char *header_buf = (unsigned char *) &header;
192208
size_t nwords = fread(&header_buf[0],4,4,infile);

0 commit comments

Comments
 (0)