HOPS
HOPS class reference
d2m4_pcal_record.h
Go to the documentation of this file.
1 #ifndef D2M4_PCAL_RECORD_H__
2 #define D2M4_PCAL_RECORD_H__
3 
4 #include <stdio.h>
5 
6 #define AP_TOL 0.001
7 #define D2M4_NPC_TONES 64
8 #define D2M4_NPC_FREQS 64
9 #define D2M4_LBUFF_SIZE 40 * D2M4_NPC_TONES * D2M4_NPC_FREQS + 256
10 
11 //#define D2M4_PCAL_DEBUG
12 
13 //stores an individual pcal phasor
15 {
16  char polarization; //polarization code
17  int frequency; //frequency in MHz
18  int dstr; //keep track of the original datastream this phasor came from
19  double real;
20  double imag;
21 };
22 
23 //stores all the pcal data from a single line of PCAL file
24 //thisshould be data from single mjd...but for a given mjd,
25 //there may be multiple records from different data streams
27 {
28  char antenna[8]; //antenna code
29  double mjd; //time
30  double tint; //integration time?
31  int nchannels; //number of channels
32  int ntones; //max number of tones per channel
34 };
35 
36 //node for a linked list of pcal data
37 //so we can load and iterate over the whole PCAL file data in memory
39 {
40  struct d2m4_pcal_record* pcal_record; //node data
41  struct d2m4_pcal_list_node* next; //next node in the list
42  struct d2m4_pcal_list_node* previous; //previous node in the list -- do we need bidirectional traversal?
43 };
44 
45 //initialize a pcal record
46 extern void d2m4_pcal_init_record(struct d2m4_pcal_record* rec);
47 
48 //destroy a record
49 extern void d2m4_pcal_free_record(struct d2m4_pcal_record* rec);
50 
51 //populate a record from a PCAL file data line
52 extern void d2m4_pcal_populate_record(struct d2m4_pcal_record* rec, char* line_buffer);
53 
54 //dump a pcal record into a line buffer, returns the lenght of the dumped data (in chars)
55 extern int d2m4_pcal_dump_record(struct d2m4_pcal_record* rec, char* line_buffer, int buffer_size);
56 
57 //copy the data from record2 into record1
58 extern void d2m4_pcal_copy_record(struct d2m4_pcal_record* record1, struct d2m4_pcal_record* record2);
59 
60 //return 1 if two pcal_records can be merged (same AP), and 0 if otherwise
61 extern int d2m4_pcal_can_merge_records(struct d2m4_pcal_record* record1, struct d2m4_pcal_record* record2);
62 
63 //returns the number of unique polaization in a pcal record
65 
66 //allocates space for a new pcal_record which is the result of merging two
67 //individual pcal_records (of a single mjd, but different data streams)
68 //note that the merged records should be deleted afterwards, but this function does not take care of this
69 extern struct d2m4_pcal_record* d2m4_pcal_merge_record(struct d2m4_pcal_record* record1, struct d2m4_pcal_record* record2);
70 
71 //run through a whole PCAL file and read it into memory
72 //return a the pcal records as a linked list
73 extern struct d2m4_pcal_list_node* d2m4_pcal_create_list(FILE* fin);
74 
76 
77 //destroy all the data in the linked-list
78 extern void d2m4_pcal_free_list(struct d2m4_pcal_list_node* pcal_list);
79 
80 #endif
void d2m4_pcal_populate_record(struct d2m4_pcal_record *rec, char *line_buffer)
Definition: d2m4_pcal_populate_record.c:7
int d2m4_pcal_count_unique_polarizations(struct d2m4_pcal_record *record)
Definition: d2m4_pcal_count_unique_polarizations.c:5
struct d2m4_pcal_list_node * next
Definition: d2m4_pcal_record.h:41
int d2m4_pcal_can_merge_records(struct d2m4_pcal_record *record1, struct d2m4_pcal_record *record2)
Definition: d2m4_pcal_merge_record.c:7
struct d2m4_pcal_phasor * phasors
Definition: d2m4_pcal_record.h:33
struct d2m4_pcal_list_node * d2m4_pcal_create_list(FILE *fin)
Definition: d2m4_pcal_create_list.c:8
void d2m4_pcal_init_record(struct d2m4_pcal_record *rec)
Definition: d2m4_pcal_init_record.c:6
struct d2m4_pcal_list_node * d2m4_pcal_merge_datastreams_in_list(struct d2m4_pcal_list_node *input_pcal_list)
Definition: d2m4_pcal_merge_datastreams_in_list.c:6
char antenna[8]
Definition: d2m4_pcal_record.h:28
double imag
Definition: d2m4_pcal_record.h:20
int ntones
Definition: d2m4_pcal_record.h:32
char polarization
Definition: d2m4_pcal_record.h:16
int dstr
Definition: d2m4_pcal_record.h:18
double mjd
Definition: d2m4_pcal_record.h:29
int frequency
Definition: d2m4_pcal_record.h:17
void d2m4_pcal_free_record(struct d2m4_pcal_record *rec)
Definition: d2m4_pcal_free_record.c:5
int nchannels
Definition: d2m4_pcal_record.h:31
double real
Definition: d2m4_pcal_record.h:19
void d2m4_pcal_free_list(struct d2m4_pcal_list_node *pcal_list)
Definition: d2m4_pcal_free_list.c:6
int d2m4_pcal_dump_record(struct d2m4_pcal_record *rec, char *line_buffer, int buffer_size)
Definition: d2m4_pcal_dump_record.c:7
struct d2m4_pcal_record * pcal_record
Definition: d2m4_pcal_record.h:40
struct d2m4_pcal_list_node * previous
Definition: d2m4_pcal_record.h:42
struct d2m4_pcal_record * d2m4_pcal_merge_record(struct d2m4_pcal_record *record1, struct d2m4_pcal_record *record2)
Definition: d2m4_pcal_merge_record.c:30
double tint
Definition: d2m4_pcal_record.h:30
void d2m4_pcal_copy_record(struct d2m4_pcal_record *record1, struct d2m4_pcal_record *record2)
Definition: d2m4_pcal_copy_record.c:7
Definition: d2m4_pcal_record.h:39
Definition: d2m4_pcal_record.h:15
Definition: d2m4_pcal_record.h:27