FORS Pipeline Reference Manual  5.0.9
create_phot.c
1 #include <fors_data.h>
2 #include <fors_pfits.h>
3 #include <fors_dfs.h>
4 
5 #include <cpl.h>
6 
7 #include <stdio.h>
8 #include <string.h>
9 #include <errno.h>
10 
11 #define HARDCODED 0 /* create same values as MIDAS? */
12 
13 #define DIE \
14 do { \
15  fprintf(stderr, "Error at %s:%d\n", __func__, __LINE__); \
16  if (errno) perror(NULL); \
17  cpl_end(); \
18  exit(EXIT_FAILURE); \
19 } while (0)
20 
21 #define CHECK \
22 do { \
23  if (cpl_error_get_code()) { \
24  cpl_msg_error(cpl_func, "%s %s", cpl_error_get_where(), cpl_error_get_message()); \
25  DIE; \
26  } \
27 } while (0)
28 
29 int main(int argc, char *argv[])
30 {
31  cpl_init(CPL_INIT_DEFAULT);
32 
33  errno = 0;
34 
35  if (argc != 1) {
36  fprintf(stderr,
37  "Usage:\n %s\n", argv[0]);
38  DIE;
39  }
40 
41  /* Numbers and code imported from MIDAS: fspil/pipe/proc/fors_zeropoint.prg */
42 
43  // FORS1 data
44 // if (fors1upgraded == 0) {
45 
46  /* Old fors1 */
47  double exti_old_u = 0.425; // Extinction in the U band
48  double exti_old_b = 0.245; // Extinction in the B band
49  double exti_old_v = 0.125; // Extinction in the V band
50  double exti_old_r = 0.081; // Extinction in the R band
51  double exti_old_i = 0.038; // Extinction in the I band
52 
53  double colo_old_u = 0.067; // Color term in the U band
54  double colo_old_b = -0.078; // Color term in the B band
55  double colo_old_v = 0.035; // Color term in the V band
56  double colo_old_r = 0.042; // Color term in the R band
57  double colo_old_i = -0.038; // Color term in the I band
58 
59  double exti_old_u_high = 0.000; // Extinction in the u band
60  double exti_old_b_high = 0.000; // Extinction in the b band
61  double exti_old_v_high = 0.000; // Extinction in the v band
62  double exti_old_g_high = 0.000; // Extinction in the g band
63 
64  double colo_old_u_high = 0.000; // Color term in the u band
65  double colo_old_b_high = 0.000; // Color term in the b band
66  double colo_old_v_high = 0.000; // Color term in the v band
67  double colo_old_g_high = 0.000; // Color term in the g band
68 
69  double zero_old_u = 99.99; // not available
70  double zero_old_b = 99.99;
71  double zero_old_v = 99.99;
72  double zero_old_r = 99.99;
73  double zero_old_i = 99.99;
74  double zero_old_g = 99.99;
75 
76  struct {
77  const char *instrument;
78  struct {
79  const char *base_filename;
80  const char *chip_id;
81  struct {
82  const char *filtername;
83  enum filter filter;
84  double exti, dexti;
85  double colo, dcolo;
86  double zero, dzero;
87  } data[9];
88  } chips[2];
89  }
90  dat[] = {
91  /* Old FORS1 */
92  {"FORS1",
93  {
94  {"fors1_TK", "TK2048EB4-1",
95  {{"U_BESS", FILTER_U, .exti = exti_old_u , .dexti = 0, .colo = colo_old_u , .dcolo = 0, .zero = zero_old_u, .dzero = 0},
96  {"u_HIGH", FILTER_U, .exti = exti_old_u_high, .dexti = 0, .colo = colo_old_u_high, .dcolo = 0, .zero = zero_old_u, .dzero = 0},
97  {"B_BESS", FILTER_B, .exti = exti_old_b , .dexti = 0, .colo = colo_old_b , .dcolo = 0, .zero = zero_old_b, .dzero = 0},
98  {"b_HIGH", FILTER_B, .exti = exti_old_b_high, .dexti = 0, .colo = colo_old_b_high, .dcolo = 0, .zero = zero_old_b, .dzero = 0},
99  {"g_HIGH", FILTER_G, .exti = exti_old_g_high, .dexti = 0, .colo = colo_old_g_high, .dcolo = 0, .zero = zero_old_g, .dzero = 0},
100  {"V_BESS", FILTER_V, .exti = exti_old_v , .dexti = 0, .colo = colo_old_v , .dcolo = 0, .zero = zero_old_v, .dzero = 0},
101  {"v_HIGH", FILTER_V, .exti = exti_old_v_high, .dexti = 0, .colo = colo_old_v_high, .dcolo = 0, .zero = zero_old_v, .dzero = 0},
102  {"R_BESS", FILTER_R, .exti = exti_old_r , .dexti = 0, .colo = colo_old_r , .dcolo = 0, .zero = zero_old_r, .dzero = 0},
103  {"I_BESS", FILTER_I, .exti = exti_old_i , .dexti = 0, .colo = colo_old_i , .dcolo = 0, .zero = zero_old_i, .dzero = 0}}
104  },
105  {NULL, NULL, /* Not used */
106  {{"U_BESS", FILTER_U, .exti = exti_old_u , .dexti = 0, .colo = colo_old_u , .dcolo = 0, .zero = zero_old_u, .dzero = 0},
107  {"u_HIGH", FILTER_U, .exti = exti_old_u_high, .dexti = 0, .colo = colo_old_u_high, .dcolo = 0, .zero = zero_old_u, .dzero = 0},
108  {"B_BESS", FILTER_B, .exti = exti_old_b , .dexti = 0, .colo = colo_old_b , .dcolo = 0, .zero = zero_old_b, .dzero = 0},
109  {"b_HIGH", FILTER_B, .exti = exti_old_b_high, .dexti = 0, .colo = colo_old_b_high, .dcolo = 0, .zero = zero_old_b, .dzero = 0},
110  {"g_HIGH", FILTER_G, .exti = exti_old_g_high, .dexti = 0, .colo = colo_old_g_high, .dcolo = 0, .zero = zero_old_g, .dzero = 0},
111  {"V_BESS", FILTER_V, .exti = exti_old_v , .dexti = 0, .colo = colo_old_v , .dcolo = 0, .zero = zero_old_v, .dzero = 0},
112  {"v_HIGH", FILTER_V, .exti = exti_old_v_high, .dexti = 0, .colo = colo_old_v_high, .dcolo = 0, .zero = zero_old_v, .dzero = 0},
113  {"R_BESS", FILTER_R, .exti = exti_old_r , .dexti = 0, .colo = colo_old_r , .dcolo = 0, .zero = zero_old_r, .dzero = 0},
114  {"I_BESS", FILTER_I, .exti = exti_old_i , .dexti = 0, .colo = colo_old_i , .dcolo = 0, .zero = zero_old_i, .dzero = 0}}
115  }
116  }
117  },
118  /* New FORS1 */
119 
120 #if HARDCODED
121  /* Old values, hardcoded in MIDAS */
122 
123  {"FORS1",
124  {
125  {"fors1_Norma", "Norma III",
126  {{"U_BESS", FILTER_U, .exti = 0.456, .dexti = 0, .colo = 0.091, .dcolo = 0, .zero = 26.080, .dzero = 0.031},
127  {"u_HIGH", FILTER_U, .exti = 0.440, .dexti = 0, .colo = 0.106, .dcolo = 0, .zero = 26.572, .dzero = 0.049},
128  {"B_BESS", FILTER_B, .exti = 0.255, .dexti = 0, .colo = -0.107, .dcolo = 0, .zero = 28.163, .dzero = 0.023},
129  {"b_HIGH", FILTER_B, .exti = 0.230, .dexti = 0, .colo = 0.069, .dcolo = 0, .zero = 28.539, .dzero = 0.031},
130  {"g_HIGH", FILTER_G, .exti = 0.182, .dexti = 0, .colo = 0.031, .dcolo = 0, .zero = 28.867, .dzero = 0.032},
131  {"V_BESS", FILTER_V, .exti = 0.132, .dexti = 0, .colo = 0.020, .dcolo = 0, .zero = 28.227, .dzero = 0.023},
132  {"v_HIGH", FILTER_V, .exti = 0.115, .dexti = 0, .colo = 0.049, .dcolo = 0, .zero = 28.410, .dzero = 0.029},
133  {"R_BESS", FILTER_R, .exti = 0.090, .dexti = 0, .colo = 0.000, .dcolo = 0, .zero = 28.024, .dzero = 0.025},
134  {"I_BESS", FILTER_I, .exti = 0.051, .dexti = 0, .colo = -0.060, .dcolo = 0, .zero = 27.023, .dzero = 0.034}}
135  },
136  {"fors1_Marlene", "Marlene ",
137  {{"U_BESS", FILTER_U, .exti = 0.456, .dexti = 0, .colo = 0.091, .dcolo = 0, .zero = 26.080, .dzero = 0.031},
138  {"u_HIGH", FILTER_U, .exti = 0.440, .dexti = 0, .colo = 0.106, .dcolo = 0, .zero = 26.572, .dzero = 0.049},
139  {"B_BESS", FILTER_B, .exti = 0.255, .dexti = 0, .colo = -0.107, .dcolo = 0, .zero = 28.163, .dzero = 0.023},
140  {"b_HIGH", FILTER_B, .exti = 0.230, .dexti = 0, .colo = 0.069, .dcolo = 0, .zero = 28.539, .dzero = 0.031},
141  {"g_HIGH", FILTER_G, .exti = 0.182, .dexti = 0, .colo = 0.031, .dcolo = 0, .zero = 28.867, .dzero = 0.032},
142  {"V_BESS", FILTER_V, .exti = 0.132, .dexti = 0, .colo = 0.020, .dcolo = 0, .zero = 28.227, .dzero = 0.023},
143  {"v_HIGH", FILTER_V, .exti = 0.115, .dexti = 0, .colo = 0.049, .dcolo = 0, .zero = 28.410, .dzero = 0.029},
144  {"R_BESS", FILTER_R, .exti = 0.090, .dexti = 0, .colo = 0.000, .dcolo = 0, .zero = 28.024, .dzero = 0.025},
145  {"I_BESS", FILTER_I, .exti = 0.051, .dexti = 0, .colo = -0.060, .dcolo = 0, .zero = 27.023, .dzero = 0.034}}
146  },
147  }
148  },
149 
150  {"FORS2",
151  {
152  {"fors2_1453", "CCID20-14-5-3",
153  {{"U_SPECIAL", FILTER_U, .exti = 0.443, .dexti = 0, .colo = 0.076, .dcolo = 0, .zero = 24.365, .dzero = 0.045},
154  {"B_BESS" , FILTER_B, .exti = 0.217, .dexti = 0, .colo = -0.033, .dcolo = 0, .zero = 27.740, .dzero = 0.032},
155  {"V_BESS" , FILTER_V, .exti = 0.127, .dexti = 0, .colo = 0.022, .dcolo = 0, .zero = 28.186, .dzero = 0.025},
156  {"R_SPECIAL", FILTER_R, .exti = 0.098, .dexti = 0, .colo = -0.009, .dcolo = 0, .zero = 28.404, .dzero = 0.037},
157  {"I_BESS" , FILTER_I, .exti = 0.060, .dexti = 0, .colo = -0.017, .dcolo = 0, .zero = 27.773, .dzero = 0.034},
158  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
159  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
160  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
161  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0}}
162  },
163 
164  {"fors2_1456", "CCID20-14-5-6",
165  {{"U_SPECIAL", FILTER_U, .exti = 0.443, .dexti = 0, .colo = 0.076, .dcolo = 0, .zero = 24.365, .dzero = 0.045},
166  {"B_BESS" , FILTER_B, .exti = 0.217, .dexti = 0, .colo = -0.033, .dcolo = 0, .zero = 27.740, .dzero = 0.032},
167  {"V_BESS" , FILTER_V, .exti = 0.127, .dexti = 0, .colo = 0.022, .dcolo = 0, .zero = 28.186, .dzero = 0.025},
168  {"R_SPECIAL", FILTER_R, .exti = 0.098, .dexti = 0, .colo = -0.009, .dcolo = 0, .zero = 28.404, .dzero = 0.037},
169  {"I_BESS" , FILTER_I, .exti = 0.060, .dexti = 0, .colo = -0.017, .dcolo = 0, .zero = 27.773, .dzero = 0.034},
170  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
171  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
172  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
173  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0}}
174  }
175  }
176  }
177 
178 #else
179  /* Numbers from P79 as provided by DFO */
180 
181  {"FORS1",
182  {
183  {"fors1_Norma", "Norma III",
184  {{"U_BESS", FILTER_U, .exti = 0.447, .dexti = 0.018, .colo = 0.043, .dcolo = 0.008, .zero = 26.080, .dzero = 0.031},
185  {"u_HIGH", FILTER_U, .exti = 0.437, .dexti = 0.033, .colo = 0.066, .dcolo = 0.012, .zero = 26.572, .dzero = 0.049},
186  {"B_BESS", FILTER_B, .exti = 0.241, .dexti = 0.013, .colo = -0.128, .dcolo = 0.008, .zero = 28.163, .dzero = 0.023},
187  {"b_HIGH", FILTER_B, .exti = 0.222, .dexti = 0.020, .colo = 0.048, .dcolo = 0.009, .zero = 28.539, .dzero = 0.031},
188  {"g_HIGH", FILTER_G, .exti = 0.209, .dexti = 0.022, .colo = -0.096, .dcolo = 0.008, .zero = 28.867, .dzero = 0.032},
189  {"V_BESS", FILTER_V, .exti = 0.112, .dexti = 0.012, .colo = -0.015, .dcolo = 0.007, .zero = 28.227, .dzero = 0.023},
190  {"v_HIGH", FILTER_V, .exti = 0.139, .dexti = 0.018, .colo = 0.019, .dcolo = 0.008, .zero = 28.410, .dzero = 0.029},
191  {"R_BESS", FILTER_R, .exti = 0.087, .dexti = 0.014, .colo = -0.097, .dcolo = 0.015, .zero = 28.024, .dzero = 0.025},
192  {"I_BESS", FILTER_I, .exti = 0.027, .dexti = 0.021, .colo = -0.101, .dcolo = 0.011, .zero = 27.023, .dzero = 0.034}}
193  },
194  {"fors1_Marlene", "Marlene ",
195  {{"U_BESS", FILTER_U, .exti = 0.470, .dexti = 0.024, .colo = 0.039, .dcolo = 0.013, .zero = 26.069, .dzero = 0.041},
196  {"u_HIGH", FILTER_U, .exti = 0.445, .dexti = 0.051, .colo = 0.063, .dcolo = 0.018, .zero = 26.548, .dzero = 0.070},
197  {"B_BESS", FILTER_B, .exti = 0.316, .dexti = 0.019, .colo = -0.124, .dcolo = 0.012, .zero = 28.221, .dzero = 0.032},
198  {"b_HIGH", FILTER_B, .exti = 0.282, .dexti = 0.036, .colo = 0.059, .dcolo = 0.016, .zero = 28.563, .dzero = 0.052},
199  {"g_HIGH", FILTER_G, .exti = 0.287, .dexti = 0.063, .colo = -0.106, .dcolo = 0.019, .zero = 28.938, .dzero = 0.082},
200  {"V_BESS", FILTER_V, .exti = 0.158, .dexti = 0.018, .colo = -0.011, .dcolo = 0.012, .zero = 28.247, .dzero = 0.033},
201  {"v_HIGH", FILTER_V, .exti = 0.155, .dexti = 0.030, .colo = 0.019, .dcolo = 0.014, .zero = 28.388, .dzero = 0.046},
202  {"R_BESS", FILTER_R, .exti = 0.111, .dexti = 0.018, .colo = -0.047, .dcolo = 0.022, .zero = 28.009, .dzero = 0.033},
203  {"I_BESS", FILTER_I, .exti = 0.037, .dexti = 0.019, .colo = -0.100, .dcolo = 0.012, .zero = 27.038, .dzero = 0.035}}
204  },
205  }
206  },
207 
208  {"FORS2",
209  {
210  {"fors2_1453", "CCID20-14-5-3",
211  {{"U_SPECIAL", FILTER_U, .exti = 0.531, .dexti = 0.025, .colo = 0.069, .dcolo = 0.009, .zero = 24.365, .dzero = 0.045},
212  {"B_BESS" , FILTER_B, .exti = 0.236, .dexti = 0.015, .colo = -0.026, .dcolo = 0.009, .zero = 27.740, .dzero = 0.032},
213  {"V_BESS" , FILTER_V, .exti = 0.117, .dexti = 0.012, .colo = -0.002, .dcolo = 0.006, .zero = 28.186, .dzero = 0.025},
214  {"R_SPECIAL", FILTER_R, .exti = 0.067, .dexti = 0.020, .colo = -0.039, .dcolo = 0.016, .zero = 28.404, .dzero = 0.037},
215  {"I_BESS" , FILTER_I, .exti = 0.049, .dexti = 0.016, .colo = -0.044, .dcolo = 0.007, .zero = 27.773, .dzero = 0.034},
216  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
217  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
218  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
219  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0}}
220  },
221 
222  {"fors2_1456", "CCID20-14-5-6",
223  {{"U_SPECIAL", FILTER_U, .exti = 0.526, .dexti = 0.042, .colo = 0.067, .dcolo = 0.014, .zero = 24.476, .dzero = 0.066},
224  {"B_BESS" , FILTER_B, .exti = 0.272, .dexti = 0.023, .colo = -0.062, .dcolo = 0.011, .zero = 27.837, .dzero = 0.040},
225  {"V_BESS" , FILTER_V, .exti = 0.123, .dexti = 0.014, .colo = -0.008, .dcolo = 0.006, .zero = 28.207, .dzero = 0.028},
226  {"R_SPECIAL", FILTER_R, .exti = 0.065, .dexti = 0.022, .colo = -0.036, .dcolo = 0.013, .zero = 28.400, .dzero = 0.037},
227  {"I_BESS" , FILTER_I, .exti = 0.023, .dexti = 0.013, .colo = -0.080, .dcolo = 0.008, .zero = 27.777, .dzero = 0.039},
228  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
229  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
230  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0},
231  {NULL , FILTER_I, 0, 0, 0, 0, 0, 0}}
232  }
233  }
234  }
235 #endif
236  };
237 
238  CHECK;
239 
240 #if 1
241 
242  /* For each instrument */
243  unsigned i;
244  for(i = 0; i < sizeof(dat) / sizeof(*dat); i++) {
245 
246  /* For each chip */
247  unsigned chips;
248  for(chips = 0;
249  chips < sizeof(dat[i].chips) / sizeof(*dat[i].chips);
250  chips++) {
251 
252  if (dat[i].chips[chips].chip_id == NULL) break;
253 
254  cpl_table *t = cpl_table_new(9999);
255  int size = 0;
256 
257  cpl_propertylist *header = cpl_propertylist_new();
258 
259  cpl_propertylist_update_string(header, FORS_PFITS_CHIP_ID, dat[i].chips[chips].chip_id);
260  cpl_propertylist_update_string(header, "ESO PRO CATG", PHOT_TABLE);
261  cpl_propertylist_update_string(header, FORS_PFITS_INSTRUME, dat[i].instrument);
262 
263 
264  //cpl_table_new_column(t, "Instrument" , CPL_TYPE_STRING);
265  //cpl_table_new_column(t, "Chip" , CPL_TYPE_STRING);
266  cpl_table_new_column(t, FORS_DATA_PHOT_FILTER , CPL_TYPE_STRING);
267  cpl_table_new_column(t, FORS_DATA_PHOT_EXTCOEFF , CPL_TYPE_DOUBLE);
268  cpl_table_new_column(t, FORS_DATA_PHOT_DEXTCOEFF , CPL_TYPE_DOUBLE);
269  cpl_table_new_column(t, FORS_DATA_PHOT_COLORTERM, CPL_TYPE_DOUBLE);
270  cpl_table_new_column(t, FORS_DATA_PHOT_DCOLORTERM, CPL_TYPE_DOUBLE);
271  cpl_table_new_column(t, FORS_DATA_PHOT_ZEROPOINT, CPL_TYPE_DOUBLE);
272  cpl_table_new_column(t, FORS_DATA_PHOT_DZEROPOINT, CPL_TYPE_DOUBLE);
273 
274 
275  /* For each filter */
276  unsigned j;
277  for(j = 0;
278  j < sizeof(dat[i].chips[chips].data) / sizeof(*dat[i].chips[chips].data);
279  j++)
280  {
281  if (dat[i].chips[chips].data[j].filtername == NULL) break;
282 
283  //cpl_table_set_string(t, "Instrument", size, dat[i].instrument);
284  //cpl_table_set_string(t, "Chip", size, dat[i].chips[chips].chip_id);
285  cpl_table_set_string(t, FORS_DATA_PHOT_FILTER, size, dat[i].chips[chips].data[j].filtername);
286  cpl_table_set_double(t, FORS_DATA_PHOT_EXTCOEFF , size,
287  dat[i].chips[chips].data[j].exti);
288  cpl_table_set_double(t, FORS_DATA_PHOT_COLORTERM, size,
289  dat[i].chips[chips].data[j].colo);
290  cpl_table_set_double(t, FORS_DATA_PHOT_ZEROPOINT, size,
291  dat[i].chips[chips].data[j].zero);
292  cpl_table_set_double(t, FORS_DATA_PHOT_DEXTCOEFF , size,
293  dat[i].chips[chips].data[j].dexti);
294  cpl_table_set_double(t, FORS_DATA_PHOT_DCOLORTERM, size,
295  dat[i].chips[chips].data[j].dcolo);
296  cpl_table_set_double(t, FORS_DATA_PHOT_DZEROPOINT, size,
297  dat[i].chips[chips].data[j].dzero);
298 
299  size++;
300  }
301 
302  cpl_table_set_size(t, size);
303  //cpl_table_dump(t, 0, size, stdout);
304 
305 #if HARDCODED
306  const char *full_filename = cpl_sprintf("%s_phot_old.fits",
307  dat[i].chips[chips].base_filename);
308 #else
309  const char *full_filename = cpl_sprintf("%s_phot.fits",
310  dat[i].chips[chips].base_filename);
311 #endif
312 
313  cpl_table_save(t, header, NULL, full_filename, CPL_IO_DEFAULT);
314 
315  CHECK;
316  fprintf(stdout, "Created %s\n", full_filename);
317 
318  cpl_table_delete(t); t = NULL;
319  cpl_propertylist_delete(header); header = NULL;
320  cpl_free((void *)full_filename);
321  }
322  }
323 
324 #else
325  /* One big table */
326 
327  cpl_table *t = cpl_table_new(9999);
328  int size = 0;
329 
330  cpl_propertylist *header = cpl_propertylist_new();
331 
332  cpl_table_new_column(t, "Instrument" , CPL_TYPE_STRING);
333  cpl_table_new_column(t, FORS_DATA_PHOT_FILTER , CPL_TYPE_STRING);
334  cpl_table_new_column(t, "Chip" , CPL_TYPE_STRING);
335  cpl_table_new_column(t, FORS_DATA_PHOT_EXTCOEFF , CPL_TYPE_DOUBLE);
336  cpl_table_new_column(t, FORS_DATA_PHOT_COLORTERM, CPL_TYPE_DOUBLE);
337  cpl_table_new_column(t, FORS_DATA_PHOT_ZEROPOINT, CPL_TYPE_DOUBLE);
338 
339  unsigned i;
340  for(i = 0; i < sizeof(dat) / sizeof(*dat); i++) {
341 
342  unsigned j;
343  for(j = 0;
344  j < sizeof(dat[i].chips[chips].data) / sizeof(*dat[i].chips[chips].data);
345  j++) {
346 
347  if (dat[i].chips[chips].data[j].filtername == NULL) break;
348 
349 
350  unsigned chips;
351  for(chips = 0;
352  chips < sizeof(dat[i].chip_id) / sizeof(*dat[i].chip_id);
353  chips++) {
354 
355  if (dat[i].chip_id[chips] == NULL) break;
356 
357  cpl_table_set_string(t, "Instrument", size, dat[i].instrument);
358  cpl_table_set_string(t, "Chip", size, dat[i].chip_id[chips]);
359  cpl_table_set_string(t, FORS_DATA_PHOT_FILTER, size, dat[i].chips[chips].data[j].filtername);
360  cpl_table_set_double(t, FORS_DATA_PHOT_EXTCOEFF , size,
361  dat[i].chips[chips].data[j].exti);
362  cpl_table_set_double(t, FORS_DATA_PHOT_COLORTERM, size,
363  dat[i].chips[chips].data[j].colo);
364  cpl_table_set_double(t, FORS_DATA_PHOT_ZEROPOINT, size,
365  dat[i].chips[chips].data[j].zero);
366 
367  size++;
368  //cpl_table_dump(t, 0, size, stdout);
369  }
370  }
371  }
372 
373  cpl_table_set_size(t, size);
374 
375  cpl_table_save(t, NULL, NULL, filename, CPL_IO_DEFAULT);
376 
377  CHECK;
378  fprintf(stdout, "Created %s\n", filename);
379 
380 
381 #endif
382 
383 
384 
385 
386 
387 
388 
389 #if 0
390 
391 
392 
393 
394 
395  t = cpl_table_new(FORS_NUM_FILTER);
396 
397  /* Here the order must match fors_data.h: enum filter */
398  double *exti[FORS_NUM_FILTER] = {&exti_u,
399  &exti_b,
400  NULL, // g
401  &exti_v,
402  &exti_r,
403  &exti_i,
404  NULL}; // z
405 
406  double *colo[FORS_NUM_FILTER] = {&colo_u,
407  &colo_b,
408  NULL, // g
409  &colo_v,
410  &colo_r,
411  &colo_i,
412  NULL}; // z
413 
414  double *zero[FORS_NUM_FILTER] = {&zero_u,
415  &zero_b,
416  NULL,
417  &zero_v,
418  &zero_r,
419  &zero_i,
420  NULL};
421 
422  cpl_table_new_column(t, FORS_DATA_PHOT_FILTER , CPL_TYPE_STRING);
423  cpl_table_new_column(t, FORS_DATA_PHOT_EXTCOEFF , CPL_TYPE_DOUBLE);
424  cpl_table_new_column(t, FORS_DATA_PHOT_COLORTERM, CPL_TYPE_DOUBLE);
425  cpl_table_new_column(t, FORS_DATA_PHOT_ZEROPOINT, CPL_TYPE_DOUBLE);
426 
427  int row = 0;
428  {
429  int i;
430  for(i = 0; i < cpl_table_get_nrow(t); i++) {
431  if (exti[i] != NULL && colo[i] != NULL && zero[i] != NULL) {
432  cpl_table_set_string(t, FORS_DATA_PHOT_FILTER , row, FORS_DATA_STD_MAG[i]);
433  cpl_table_set_double(t, FORS_DATA_PHOT_EXTCOEFF, row, *(exti[i]));
434  cpl_table_set_double(t, FORS_DATA_PHOT_COLORTERM, row, *(colo[i]));
435  cpl_table_set_double(t, FORS_DATA_PHOT_ZEROPOINT, row, *(zero[i]));
436  row++;
437  }
438  }
439  }
440 
441  CHECK;
442 
443  cpl_table_set_size(t, row);
444 
445  cpl_table_save(t, NULL, NULL, filename, CPL_IO_DEFAULT);
446 
447  CHECK;
448 
449  fprintf(stdout, "Created %s\n", filename);
450  cpl_table_delete(t);
451 
452 #endif
453 
454  return 0;
455 }
int main(void)
Generic library tests.
Definition: fors-test.c:57