21 #include <sys/types.h>
28 #include "midiGlobal.h"
31 #include "midiFitsUtility.h"
32 #include "createProdFrgUndisp.h"
34 #include "memoryHandling.h"
35 #include "errorHandling.h"
36 #include "fileHandling.h"
50 static void set_fnan(
float *f)
53 #ifndef WORDS_BIGENDIAN
54 static unsigned char fnan_pat[] = {0, 0, 0xc0, 0x7f};
56 static unsigned char fnan_pat[] = {0x7f, 0xc0, 0, 0};
59 memcpy(f, fnan_pat, 4);
80 void createFrgProdUndisp (
83 FilterData *filterInfo,
84 RawVisibility *rawVis,
85 TransferFunction *trfFunction,
86 CalibratorParam *calibrator,
87 CalibratedVisibility *calibVis,
88 PhotometryResult *photom,
94 const char routine[] =
"createFrgProdUndisp";
95 int iwave, numOfTelescopes, extNumber;
96 char *stringQfits, *classification, *stringTemp;
97 FILE *inFitsBatchPtr = NULL;
100 float *visAmp, *visSqrd;
104 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
105 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
107 cpl_msg_info(cpl_func,
"\nCreating Product files for batch %d \n", batchNumber);
108 cpl_msg_info(cpl_func,
"-------------------------------- \n");
109 fprintf (midiReportPtr,
"\nCreating Product files for batch %d \n", batchNumber);
110 fprintf (midiReportPtr,
"-------------------------------- \n");
116 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
117 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
120 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
123 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
125 free (classification);
130 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
131 sprintf (classification,
"%s",
"");
132 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
133 fclose (inFitsBatchPtr);
136 createQcLog (fileNames->inFitsName, error);
139 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot copy keywords to QC log");
141 free (classification);
148 extNumber = getFitsExtensionNumber (fileNames->inFitsName,
"IMAGING_DATA", error);
151 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
152 "Cannot get IMAGING_DATA extension number from input FITS file");
154 free (classification);
157 stringQfits = qfits_query_ext (fileNames->inFitsName,
"MAXTEL", extNumber);
158 if (stringQfits == NULL)
161 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read MAXTEL from input FITS file");
163 free (classification);
166 else sscanf (stringQfits,
"%d", &numOfTelescopes);
169 iauData = callocIauExchange (numOfTelescopes, 1);
170 uvw = (UVW *) calloc (1,
sizeof (UVW));
171 visAmp = (
float *) calloc (iauData->wavelength->nwave, sizeof (
float));
172 visSqrd = (
float *) calloc (iauData->wavelength->nwave, sizeof (
float));
175 for (iwave = 0; iwave < iauData->wavelength->nwave; iwave++)
177 visAmp[iwave] = rawVis->vis;
178 visSqrd[iwave] = rawVis->visSqrd;
182 if ((strcmp (format->obsCatg,
"SCIENCE") == 0) && calibVis->exists)
184 for (iwave = 0; iwave < iauData->wavelength->nwave; iwave++)
186 visAmp[iwave] = calibVis->vis[iwave];
187 visSqrd[iwave] = calibVis->visSqrd[iwave];
192 loadFrgOutputDataUndisp (fileNames->inFitsName, filterInfo, visAmp, visSqrd, iauData->array, iauData->targets,
193 iauData->wavelength, iauData->vis, iauData->vis2, uvw, error);
196 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load data structure");
197 freeIauExchange (iauData);
202 free (classification);
207 addProdInfoToFrgQcLogUndisp (format, fileNames, rawVis, calibVis, uvw, photom,
208 filterInfo, trfFunction, calibrator, error);
211 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot add product info to QC log");
212 freeIauExchange (iauData);
217 free (classification);
222 createFrgPrimHeadUndisp (fileNames, format, rawVis, calibVis,
223 uvw, photom, filterInfo, trfFunction, calibrator, error);
226 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create Primary Header extension");
227 freeIauExchange (iauData);
232 free (classification);
238 writeFrgFitsFileUndisp (fileNames->outFitsName, iauData->array, iauData->targets, iauData->wavelength,
239 iauData->vis, iauData->vis2, error);
242 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot write product FITS file");
243 freeIauExchange (iauData);
248 free (classification);
252 if (diagnostic)cpl_msg_info(cpl_func,
"Created Output FITS file: %s \n", fileNames->outFitsName);
253 fprintf (midiReportPtr,
"Created Output FITS file: %s \n", fileNames->outFitsName);
256 freeIauExchange (iauData);
261 free (classification);
282 void createFrgPrimHeadUndisp (
283 MidiFiles *fileNames,
285 RawVisibility *rawVis,
286 CalibratedVisibility *calibVis,
288 PhotometryResult *photom,
289 FilterData *filterInfo,
290 TransferFunction *trfFunction,
291 CalibratorParam *calibrator,
297 const char routine[] =
"createFrgPrimHeadUndisp";
298 qfits_header *outFitsHeader;
299 FILE *inFitsBatchPtr, *outFitsPtr;
301 char *textBuff, *stringQfits, *messageBuffer, *currentTime, *cleanString,
302 *stringTemp, *classification;
303 unsigned int stringLength;
310 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
311 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
316 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
317 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
318 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
319 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
320 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
321 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
325 newTime = gmtime (&now);
326 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
329 outFitsHeader = qfits_header_read (fileNames->inFitsName);
330 if (outFitsHeader == NULL)
333 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load header from the input FITS file");
334 free (messageBuffer);
338 free (classification);
345 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO TYPE", format->obsType,
"MIDI pipeline product type",
"");
346 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO CATG",
"REDUCED_UNDISPERSED",
"Pipeline product category", NULL);
347 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO ARCFILE", fileNames->archFileName,
"Arcfile name of first raw file",
"");
348 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO PIPEDATE", currentTime,
"Pipeline run date",
"");
349 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION,
"Pipeline version",
"");
350 qfits_header_add (outFitsHeader,
"PIPEFILE", fileNames->pipeFileName,
"Pipeline product file name",
"");
351 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO DID", MIDI_QC_DIC_VERSION,
"QC dictionary version",
"");
354 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
357 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
358 free (messageBuffer);
362 free (classification);
369 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
371 sprintf (classification,
"%s",
"");
372 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
375 if (strcmp (classification,
"") == 0)
377 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
378 if (stringQfits == NULL)
380 sprintf (classification,
"%s",
"UNKNOWN");
381 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
385 cleanUpString (stringQfits, cleanString);
386 sprintf (classification,
"%s", cleanString);
389 removePathName (messageBuffer, midiReportPtr);
390 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d NAME", i);
391 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"FITS file name",
"");
392 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d CATG", i++);
393 qfits_header_add (outFitsHeader, textBuff, classification,
"Observation Categoty",
"");
395 fclose (inFitsBatchPtr);
398 sprintf (messageBuffer,
"%s", fileNames->maskFileName);
399 removePathName (messageBuffer, midiReportPtr);
400 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO REC2 RAW1 NAME", messageBuffer,
"Pipeline Mask File",
"");
403 if (strcmp (format->obsCatg,
"CALIB") == 0) sprintf (messageBuffer,
"%s", fileNames->trfNameWrite);
404 else sprintf (messageBuffer,
"%s", fileNames->trfNameRead);
405 removePathName (messageBuffer, midiReportPtr);
406 stringLength = strlen (messageBuffer);
407 sprintf (textBuff,
"r.");
408 strncat (textBuff, messageBuffer, stringLength-4);
409 sprintf (messageBuffer,
"%s_tpl_0001.dummy", textBuff);
410 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO REC2 RAW2 NAME", messageBuffer,
"Transfer Function File",
"");
413 sprintf (messageBuffer,
"%d", format->numOfScansProcessed);
414 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC SCN PROCESSED", messageBuffer,
"Number of scans processed",
"");
415 sprintf (messageBuffer,
"%d", format->numOfScansRejected);
416 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC SCN REJECTED", messageBuffer,
"Number of scans rejected",
"");
419 sprintf (messageBuffer,
"%f", filterInfo->optFreqLo);
420 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC WAVE MIN", messageBuffer,
"Filter minimum wavelength in micron",
"");
421 sprintf (messageBuffer,
"%f", filterInfo->optFreqHi);
422 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC WAVE MAX", messageBuffer,
"Filter maximum wavelength in micron",
"");
425 if (trfFunction->exists)
427 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO TRF",
"AVAILABLE",
"Flag for Transfer Function availability", NULL);
428 if (strcmp (format->obsCatg,
"CALIB") == 0)
430 sprintf (messageBuffer,
"%f", calibrator->calibVisSqrd);
431 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC THEOVIS", messageBuffer,
"Theoretical visibility",
"");
432 sprintf (messageBuffer,
"%f", calibrator->calibVisSqrdErr);
433 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DTHEOVIS", messageBuffer,
"(sigma) Error on theoretical visibility",
"");
435 sprintf (messageBuffer,
"%f", trfFunction->trf[3]);
436 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC T0", messageBuffer,
"Measured transfer function (ratio of square visibilities)",
"");
437 sprintf (messageBuffer,
"%f", trfFunction->trf[4]);
438 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC T1", messageBuffer,
"Measured transfer function (ratio of square visibilities)",
"");
439 sprintf (messageBuffer,
"%f", trfFunction->trf[5]);
440 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC T2", messageBuffer,
"Measured transfer function (ratio of square visibilities)",
"");
442 sprintf (messageBuffer,
"%f", trfFunction->trfErr[3]);
443 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DT0", messageBuffer,
"(sigma) Error on measured transfer function",
"");
444 sprintf (messageBuffer,
"%f", trfFunction->trfErr[4]);
445 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DT1", messageBuffer,
"(sigma) Error on measured transfer function",
"");
446 sprintf (messageBuffer,
"%f", trfFunction->trfErr[5]);
447 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DT2", messageBuffer,
"(sigma) Error on measured transfer function",
"");
449 sprintf (messageBuffer,
"%f", 1.0/trfFunction->trf[3]);
450 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC COT0", messageBuffer,
"Inverse transfer function",
"");
451 sprintf (messageBuffer,
"%f", 1.0/trfFunction->trf[4]);
452 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC COT1", messageBuffer,
"Inverse transfer function",
"");
453 sprintf (messageBuffer,
"%f", 1.0/trfFunction->trf[5]);
454 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC COT2", messageBuffer,
"Inverse transfer function",
"");
456 sprintf (messageBuffer,
"%f", 1.0/trfFunction->trfErr[3]);
457 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DCOT0", messageBuffer,
"(sigma) Error on inverse transfer function",
"");
458 sprintf (messageBuffer,
"%f", 1.0/trfFunction->trfErr[4]);
459 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DCOT1", messageBuffer,
"(sigma) Error on inverse transfer function",
"");
460 sprintf (messageBuffer,
"%f", 1.0/trfFunction->trfErr[5]);
461 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DCOT2", messageBuffer,
"(sigma) Error on inverse transfer function",
"");
465 sprintf (messageBuffer,
"%f", trfFunction->trf[3]);
466 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC AT0", messageBuffer,
"Applied transfer function",
"");
467 sprintf (messageBuffer,
"%f", trfFunction->trf[4]);
468 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC AT1", messageBuffer,
"Applied transfer function",
"");
469 sprintf (messageBuffer,
"%f", trfFunction->trf[5]);
470 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC AT2", messageBuffer,
"Applied transfer function",
"");
471 sprintf (messageBuffer,
"%f", trfFunction->trfErr[3]);
472 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DAT0", messageBuffer,
"(sigma) Error on applied transfer function",
"");
473 sprintf (messageBuffer,
"%f", trfFunction->trfErr[4]);
474 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DAT1", messageBuffer,
"(sigma) Error on applied transfer function",
"");
475 sprintf (messageBuffer,
"%f", trfFunction->trfErr[5]);
476 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DAT2", messageBuffer,
"(sigma) Error on applied transfer function",
"");
480 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO TRF", UNAV,
"Flag for Transfer Function availability", NULL);
483 sprintf (messageBuffer,
"%f", rawVis->visSqrd);
484 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC UNCALV0", messageBuffer,
"Uncalibrated square visibility",
"");
485 sprintf (messageBuffer,
"%f", rawVis->visSqrd1);
486 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC UNCALV1", messageBuffer,
"Ucalibrated square visibility",
"");
487 sprintf (messageBuffer,
"%f", rawVis->visSqrd2);
488 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC UNCALV2", messageBuffer,
"Uncalibrated square visibility",
"");
489 sprintf (messageBuffer,
"%f", rawVis->visSqrdErr);
490 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DUNCALV0", messageBuffer,
"Variance of uncalibrated square visibility",
"");
491 sprintf (messageBuffer,
"%f", rawVis->visSqrd1Err);
492 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DUNCALV1", messageBuffer,
"Variance of uncalibrated square visibility",
"");
493 sprintf (messageBuffer,
"%f", rawVis->visSqrd2Err);
494 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DUNCALV2", messageBuffer,
"Variance of uncalibrated square visibility",
"");
495 if (calibVis->exists)
497 sprintf (messageBuffer,
"%f", calibVis->visSqrd[0]);
498 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALV0", messageBuffer,
"Calibrated square visibility",
"");
499 sprintf (messageBuffer,
"%f", calibVis->visSqrd[1]);
500 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALV1", messageBuffer,
"Calibrated square visibility",
"");
501 sprintf (messageBuffer,
"%f", calibVis->visSqrd[2]);
502 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALV2", messageBuffer,
"Calibrated square visibility",
"");
503 sprintf (messageBuffer,
"%f", calibVis->visSqrdErr[0]);
504 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DCALV0", messageBuffer,
"Variance of calibrated square visibility",
"");
505 sprintf (messageBuffer,
"%f", calibVis->visSqrdErr[1]);
506 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DCALV1", messageBuffer,
"Variance of calibrated square visibility",
"");
507 sprintf (messageBuffer,
"%f", calibVis->visSqrdErr[2]);
508 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DCALV2", messageBuffer,
"Variance of calibrated square visibility",
"");
512 sprintf (messageBuffer,
"%f", photom->photomA[0]);
513 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PHOTA0", messageBuffer,
"Number of photons",
"");
514 sprintf (messageBuffer,
"%f", photom->photomAErr[0]);
515 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DPHOTA0", messageBuffer,
"(sigma) Error in number of photons",
"");
516 sprintf (messageBuffer,
"%f", photom->photomA[1]);
517 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PHOTA1", messageBuffer,
"Number of photons",
"");
518 sprintf (messageBuffer,
"%f", photom->photomAErr[1]);
519 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DPHOTA1", messageBuffer,
"(sigma) Error in number of photons",
"");
520 sprintf (messageBuffer,
"%f", photom->photomB[0]);
521 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PHOTB0", messageBuffer,
"Number of photons",
"");
522 sprintf (messageBuffer,
"%f", photom->photomBErr[0]);
523 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DPHOTB0", messageBuffer,
"(sigma) Error in number of photons",
"");
524 sprintf (messageBuffer,
"%f", photom->photomB[1]);
525 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PHOTB1", messageBuffer,
"Number of photons",
"");
526 sprintf (messageBuffer,
"%f", photom->photomBErr[1]);
527 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DPHOTB1", messageBuffer,
"(sigma) Error in number of photons",
"");
528 sprintf (messageBuffer,
"%f", photom->ratioPhotomA0toA1);
529 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PHOTA01", messageBuffer,
"Ratio of number of photons",
"");
530 sprintf (messageBuffer,
"%f", photom->ratioPhotomB0toB1);
531 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PHOTB01", messageBuffer,
"Ratio of number of photons",
"");
532 sprintf (messageBuffer,
"%f", photom->chop2ChopAErr[0]);
533 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC RMS CHOPA0", messageBuffer,
"RMS of chopping cycles",
"");
534 sprintf (messageBuffer,
"%f", photom->chop2ChopAErr[1]);
535 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC RMS CHOPA1", messageBuffer,
"RMS of chopping cycles",
"");
536 sprintf (messageBuffer,
"%f", photom->chop2ChopBErr[0]);
537 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC RMS CHOPB0", messageBuffer,
"RMS of chopping cycles",
"");
538 sprintf (messageBuffer,
"%f", photom->chop2ChopBErr[1]);
539 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC RMS CHOPB1", messageBuffer,
"RMS of chopping cycles",
"");
542 if (strcmp (format->obsCatg,
"CALIB") == 0)
544 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB POS",
"UNKNOWN",
"Position of the calibrator entry",
"");
545 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB NAME", calibrator->calibName,
"Name of the calibrator entry",
"");
546 sprintf (messageBuffer,
"%f", calibrator->calibRA);
547 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB RA", messageBuffer,
"Calibrator Right Ascension",
"");
548 sprintf (messageBuffer,
"%f", calibrator->calibDEC);
549 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB DEC", messageBuffer,
"Calibrator Declination",
"");
550 sprintf (messageBuffer,
"%f", RAD_TO_ARCSEC * calibrator->calibDistance);
551 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB DIST", messageBuffer,
"Calibrator Radial Distance in arcsec",
"");
552 sprintf (messageBuffer,
"%f", calibrator->calibDiameter);
553 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB DIAM", messageBuffer,
"Calibrator Diameter in milliarcsec",
"");
554 sprintf (messageBuffer,
"%f", calibrator->calibDiameterErr);
555 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB DDIAM", messageBuffer,
"(sigma) Error on calibrator Diameter in milliarcsec",
"");
556 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB FLAG",
"UNKNOWN",
"Calibrator quality flag",
"");
557 sprintf (messageBuffer,
"%f", calibrator->calibVisSqrd);
558 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB VIS", messageBuffer,
"Calibrator estimated square visibility",
"");
559 sprintf (messageBuffer,
"%f", calibrator->calibVisSqrdErr);
560 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC CALIB DVIS", messageBuffer,
"Variance of calibrator estimated square visibility",
"");
564 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC TARG DIAM",
"UNKNOWN",
"Estimated diameter of the target (mas, Un.Disk model)",
"");
565 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC TARG DDIAM",
"UNKNOWN",
"(sigma) Error on estimated target diameter in milliarcsec",
"");
568 sprintf (messageBuffer,
"%f", uvw->uCoord);
569 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC BL UVW1", messageBuffer,
"u component of UVW vector",
"");
570 sprintf (messageBuffer,
"%f", uvw->vCoord);
571 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC BL UVW2", messageBuffer,
"v component of UVW vector",
"");
572 sprintf (messageBuffer,
"%f", uvw->wCoord);
573 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC BL UVW3", messageBuffer,
"w component of UVW vector",
"");
576 if (trfFunction->exists)
578 if (strcmp (format->obsCatg,
"CALIB") == 0)
580 sprintf (messageBuffer,
"%f", calibrator->calibPblAverage);
581 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC BL LENGTH", messageBuffer,
"Baseline vector length",
"");
582 sprintf (messageBuffer,
"%f", calibrator->calibParangAverage);
583 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC BL ANGLE", messageBuffer,
"Baseline vector angle",
"");
588 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH1",
"TBD",
"TBD",
"");
589 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH2",
"TBD",
"TBD",
"");
590 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH3",
"TBD",
"TBD",
"");
591 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH4",
"TBD",
"TBD",
"");
592 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH5",
"TBD",
"TBD",
"");
593 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH6",
"TBD",
"TBD",
"");
594 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH7",
"TBD",
"TBD",
"");
595 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH8",
"TBD",
"TBD",
"");
596 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH9",
"TBD",
"TBD",
"");
599 if (stat (fileNames->outFitsName, &buf) == 0)
600 remove (fileNames->outFitsName);
601 outFitsPtr = fopen (fileNames->outFitsName,
"w");
605 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create output FITS file");
606 free (messageBuffer);
610 free (classification);
616 qfits_header_sort (&outFitsHeader);
617 qfits_header_dump (outFitsHeader, outFitsPtr);
618 qfits_header_destroy (outFitsHeader);
622 free (messageBuffer);
626 free (classification);
648 void addProdInfoToFrgQcLogUndisp (
650 MidiFiles *fileNames,
651 RawVisibility *rawVis,
652 CalibratedVisibility *calibVis,
654 PhotometryResult *photom,
655 FilterData *filterInfo,
656 TransferFunction *trfFunction,
657 CalibratorParam *calibrator,
663 const char routine[] =
"addProdInfoToFrgQcLogUndisp";
665 FILE *inFitsBatchPtr;
666 char *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
667 *stringTemp, *classification;
668 unsigned int stringLength;
674 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
675 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
681 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
682 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
683 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
684 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
685 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
686 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
690 newTime = gmtime (&now);
691 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
694 fprintf (midiQcLogPtr,
"PRO.TYPE \"%s\" \n", format->obsType);
695 fprintf (midiQcLogPtr,
"PRO.CATG \"REDUCED_UNDISPERSED\" \n");
696 fprintf (midiQcLogPtr,
"PRO.ARCFILE \"%s\" \n", fileNames->archFileName);
697 fprintf (midiQcLogPtr,
"PRO.PIPEDATE \"%s\" \n", currentTime);
698 fprintf (midiQcLogPtr,
"PRO.VERSION \"%s\" \n", MIDI_PIPE_VERSION);
699 fprintf (midiQcLogPtr,
"PRO.PIPEFILE \"%s\" \n", fileNames->pipeFileName);
700 fprintf (midiQcLogPtr,
"PRO.DID \"%s\" \n", MIDI_QC_DIC_VERSION);
703 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
706 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
707 free (messageBuffer);
711 free (classification);
718 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
720 sprintf (classification,
"%s",
"");
721 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
724 if (strcmp (classification,
"") == 0)
726 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
727 if (stringQfits == NULL)
729 sprintf (classification,
"%s",
"UNKNOWN");
730 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
734 cleanUpString (stringQfits, cleanString);
735 sprintf (classification,
"%s", cleanString);
738 removePathName (messageBuffer, midiReportPtr);
739 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.NAME \"%s\" \n", i, messageBuffer);
740 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.CATG \"%s\" \n", i++, classification);
742 fclose (inFitsBatchPtr);
745 sprintf (messageBuffer,
"%s", fileNames->maskFileName);
746 removePathName (messageBuffer, midiReportPtr);
747 fprintf (midiQcLogPtr,
"PRO.REC2.RAW1.NAME \"%s\" \n", messageBuffer);
750 if (strcmp (format->obsCatg,
"CALIB") == 0) sprintf (messageBuffer,
"%s", fileNames->trfNameWrite);
751 else sprintf (messageBuffer,
"%s", fileNames->trfNameRead);
752 removePathName (messageBuffer, midiReportPtr);
753 stringLength = strlen (messageBuffer);
754 sprintf (textBuff,
"r.");
755 strncat (textBuff, messageBuffer, stringLength-4);
756 sprintf (messageBuffer,
"%s_tpl_0001.dummy", textBuff);
757 fprintf (midiQcLogPtr,
"PRO.REC2.RAW2.NAME \"%s\" \n", messageBuffer);
760 fprintf (midiQcLogPtr,
"QC.SCN.PROCESSED %d \n", format->numOfScansProcessed);
761 fprintf (midiQcLogPtr,
"QC.SCN.REJECTED %d \n", format->numOfScansRejected);
764 fprintf (midiQcLogPtr,
"QC.FREQ.MIN %f \n", filterInfo->optFreqLo);
765 fprintf (midiQcLogPtr,
"QC.FREQ.MAX %f \n", filterInfo->optFreqHi);
768 if (trfFunction->exists)
770 if (strcmp (format->obsCatg,
"CALIB") == 0)
773 fprintf (midiQcLogPtr,
"QC.THEOVIS %f \n", calibrator->calibVisSqrd);
774 fprintf (midiQcLogPtr,
"QC.DTHEOVIS %f \n", calibrator->calibVisSqrdErr);
775 fprintf (midiQcLogPtr,
"QC.T0 %f \n", trfFunction->trf[3]);
776 fprintf (midiQcLogPtr,
"QC.T1 %f \n", trfFunction->trf[4]);
777 fprintf (midiQcLogPtr,
"QC.T2 %f \n", trfFunction->trf[5]);
778 fprintf (midiQcLogPtr,
"QC.DT0 %f \n", trfFunction->trfErr[3]);
779 fprintf (midiQcLogPtr,
"QC.DT1 %f \n", trfFunction->trfErr[4]);
780 fprintf (midiQcLogPtr,
"QC.DT2 %f \n", trfFunction->trfErr[5]);
781 fprintf (midiQcLogPtr,
"QC.COT0 %f \n", 1.0/trfFunction->trf[3]);
782 fprintf (midiQcLogPtr,
"QC.COT1 %f \n", 1.0/trfFunction->trf[4]);
783 fprintf (midiQcLogPtr,
"QC.COT2 %f \n", 1.0/trfFunction->trf[5]);
784 fprintf (midiQcLogPtr,
"QC.DCOT0 %f \n", 1.0/trfFunction->trfErr[3]);
785 fprintf (midiQcLogPtr,
"QC.DCOT1 %f \n", 1.0/trfFunction->trfErr[4]);
786 fprintf (midiQcLogPtr,
"QC.DCOT2 %f \n", 1.0/trfFunction->trfErr[5]);
791 fprintf (midiQcLogPtr,
"QC.AT0 %f \n", trfFunction->trf[3]);
792 fprintf (midiQcLogPtr,
"QC.AT1 %f \n", trfFunction->trf[4]);
793 fprintf (midiQcLogPtr,
"QC.AT2 %f \n", trfFunction->trf[5]);
794 fprintf (midiQcLogPtr,
"QC.DAT0 %f \n", trfFunction->trfErr[3]);
795 fprintf (midiQcLogPtr,
"QC.DAT1 %f \n", trfFunction->trfErr[4]);
796 fprintf (midiQcLogPtr,
"QC.DAT2 %f \n", trfFunction->trfErr[5]);
801 fprintf (midiQcLogPtr,
"QC.UNCALV0 %f \n", rawVis->visSqrd);
802 fprintf (midiQcLogPtr,
"QC.UNCALV1 %f \n", rawVis->visSqrd1);
803 fprintf (midiQcLogPtr,
"QC.UNCALV2 %f \n", rawVis->visSqrd2);
804 fprintf (midiQcLogPtr,
"QC.DUNCALV0 %f \n", rawVis->visSqrdErr);
805 fprintf (midiQcLogPtr,
"QC.DUNCALV1 %f \n", rawVis->visSqrd1Err);
806 fprintf (midiQcLogPtr,
"QC.DUNCALV2 %f \n", rawVis->visSqrd2Err);
807 if (calibVis->exists)
809 fprintf (midiQcLogPtr,
"QC.CALV0 %f \n", calibVis->visSqrd[0]);
810 fprintf (midiQcLogPtr,
"QC.CALV1 %f \n", calibVis->visSqrd[1]);
811 fprintf (midiQcLogPtr,
"QC.CALV2 %f \n", calibVis->visSqrd[2]);
812 fprintf (midiQcLogPtr,
"QC.DCALV0 %f \n", calibVis->visSqrdErr[0]);
813 fprintf (midiQcLogPtr,
"QC.DCALV1 %f \n", calibVis->visSqrdErr[1]);
814 fprintf (midiQcLogPtr,
"QC.DCALV2 %f \n", calibVis->visSqrdErr[2]);
818 fprintf (midiQcLogPtr,
"QC.PHOTA0 %f \n", photom->photomA[0]);
819 fprintf (midiQcLogPtr,
"QC.DPHOTA0 %f \n", photom->photomAErr[0]);
820 fprintf (midiQcLogPtr,
"QC.PHOTA1 %f \n", photom->photomA[1]);
821 fprintf (midiQcLogPtr,
"QC.DPHOTA1 %f \n", photom->photomAErr[1]);
822 fprintf (midiQcLogPtr,
"QC.PHOTB0 %f \n", photom->photomB[0]);
823 fprintf (midiQcLogPtr,
"QC.DPHOTB0 %f \n", photom->photomBErr[0]);
824 fprintf (midiQcLogPtr,
"QC.PHOTB1 %f \n", photom->photomB[1]);
825 fprintf (midiQcLogPtr,
"QC.DPHOTB1 %f \n", photom->photomBErr[1]);
826 fprintf (midiQcLogPtr,
"QC.PHOTA01 %f \n", photom->ratioPhotomA0toA1);
827 fprintf (midiQcLogPtr,
"QC.PHOTB01 %f \n", photom->ratioPhotomB0toB1);
828 fprintf (midiQcLogPtr,
"QC.RMS.CHOPA0 %f \n", photom->chop2ChopAErr[0]);
829 fprintf (midiQcLogPtr,
"QC.RMS.CHOPA1 %f \n", photom->chop2ChopAErr[1]);
830 fprintf (midiQcLogPtr,
"QC.RMS.CHOPB0 %f \n", photom->chop2ChopBErr[0]);
831 fprintf (midiQcLogPtr,
"QC.RMS.CHOPB1 %f \n", photom->chop2ChopBErr[1]);
834 if (strcmp (format->obsCatg,
"CALIB") == 0)
836 fprintf (midiQcLogPtr,
"QC.CALIB.POS \"UNKNOWN\" \n");
837 fprintf (midiQcLogPtr,
"QC.CALIB.NAME \"%s\" \n", calibrator->calibName);
838 fprintf (midiQcLogPtr,
"QC.CALIB.RA %f \n", calibrator->calibRA);
839 fprintf (midiQcLogPtr,
"QC.CALIB.DEC %f \n", calibrator->calibDEC);
840 fprintf (midiQcLogPtr,
"QC.CALIB.DIST %f \n", RAD_TO_ARCSEC * calibrator->calibDistance);
841 fprintf (midiQcLogPtr,
"QC.CALIB.DIAM %f \n", calibrator->calibDiameter);
842 fprintf (midiQcLogPtr,
"QC.CALIB.DDIAM %f \n", calibrator->calibDiameterErr);
843 fprintf (midiQcLogPtr,
"QC.CALIB.FLAG \"UNKNOWN\" \n");
844 fprintf (midiQcLogPtr,
"QC.CALIB.VIS %f \n", calibrator->calibVisSqrd);
845 fprintf (midiQcLogPtr,
"QC.CALIB.DVIS %f \n", calibrator->calibVisSqrdErr);
849 fprintf (midiQcLogPtr,
"QC.TARG.DIAM \"UNKNOWN\" \n");
850 fprintf (midiQcLogPtr,
"QC.TARG.DDIAM \"UNKNOWN\" \n");
853 fprintf (midiQcLogPtr,
"QC.BL.UVW1 %f \n", uvw->uCoord);
854 fprintf (midiQcLogPtr,
"QC.BL.UVW2 %f \n", uvw->vCoord);
855 fprintf (midiQcLogPtr,
"QC.BL.UVW3 %f \n", uvw->wCoord);
858 if (trfFunction->exists)
860 if (strcmp (format->obsCatg,
"CALIB") == 0)
862 fprintf (midiQcLogPtr,
"QC.BL.LENGTH %f \n", calibrator->calibPblAverage);
863 fprintf (midiQcLogPtr,
"QC.BL.ANGLE %f \n", calibrator->calibParangAverage);
868 free (messageBuffer);
873 free (classification);
893 void loadFrgOutputDataUndisp (
895 FilterData *filterInfo,
908 const char routine[] =
"loadFrgOutputDataUndisp";
909 int i, irec, iwave, itarg, mjdObs, *selection, extNumber;
910 float effectiveWave, effectiveBand, equinox;
911 char *stringQfits, *emptyString, *buffer, *observationData, *arrayName,
912 *instName, *cleanString;
913 double raEp0, decEp0, integrationTime;
914 qfits_table *arrayGeometry;
916 short *qfitsRow_int, targetId = 1;
917 float *qfitsRow_flt, nullFloat;
918 double *qfitsRow_dbl, utcTime;
923 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
924 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
927 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
928 emptyString = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
929 buffer = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
930 observationData = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
931 arrayName = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
932 instName = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
935 strcpy (emptyString,
"NULL");
936 set_fnan (&nullFloat);
940 stringQfits = qfits_query_hdr (fileName,
"DATE-OBS");
941 if (stringQfits == NULL)
942 sscanf (emptyString,
"%s", observationData);
945 cleanUpString (stringQfits, cleanString);
946 sscanf (cleanString,
"%s", observationData);
950 stringQfits = qfits_query_hdr (fileName,
"EXPTIME");
951 if (stringQfits == NULL) integrationTime = nullFloat;
952 else sscanf (stringQfits,
"%lf", &integrationTime);
954 extNumber = getFitsExtensionNumber (fileName,
"ARRAY_GEOMETRY", error);
957 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
958 "Cannot get ARRAY_GEOMETRY extension number from input FITS file");
961 free (observationData);
968 stringQfits = qfits_query_ext (fileName,
"ARRNAME", extNumber);
969 if (stringQfits == NULL)
970 sscanf (emptyString,
"%s", arrayName);
973 cleanUpString (stringQfits, cleanString);
974 sscanf (cleanString,
"%s", arrayName);
977 stringQfits = qfits_query_hdr (fileName,
"INSTRUME");
978 if (stringQfits == NULL)
979 sscanf (emptyString,
"%s", instName);
982 cleanUpString (stringQfits, cleanString);
983 sscanf (cleanString,
"%s", instName);
986 stringQfits = qfits_query_hdr (fileName,
"RA");
987 if (stringQfits == NULL) raEp0 = nullFloat;
988 else sscanf (stringQfits,
"%lf", &raEp0);
990 stringQfits = qfits_query_hdr (fileName,
"DEC");
991 if (stringQfits == NULL) decEp0 = nullFloat;
992 else sscanf (stringQfits,
"%lf", &decEp0);
994 stringQfits = qfits_query_hdr (fileName,
"EQUINOX");
995 if (stringQfits == NULL) equinox = nullFloat;
996 else sscanf (stringQfits,
"%f", &equinox);
998 stringQfits = qfits_query_hdr (fileName,
"MJD-OBS");
999 if (stringQfits == NULL) mjdObs = nullFloat;
1000 else sscanf (stringQfits,
"%d", &mjdObs);
1002 stringQfits = qfits_query_hdr (fileName,
"UTC");
1003 if (stringQfits == NULL) utcTime = nullFloat;
1004 else sscanf (stringQfits,
"%lf", &utcTime);
1008 if (diagnostic)cpl_msg_info(cpl_func,
"Loading oi_array data ... \n");
1009 if (diagnostic) fprintf (midiReportPtr,
"Loading oi_array data ... \n");
1012 sscanf (arrayName,
"%s", array->arrname);
1015 extNumber = getFitsExtensionNumber (fileName,
"ARRAY_GEOMETRY", error);
1018 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
1019 "Cannot get ARRAY_GEOMETRY extension number from input FITS file");
1022 free (observationData);
1029 stringQfits = qfits_query_ext (fileName,
"FRAME", extNumber);
1030 if (stringQfits == NULL)
1031 sscanf (emptyString,
"%s", array->frame);
1034 cleanUpString (stringQfits, cleanString);
1035 sscanf (cleanString,
"%s", array->frame);
1038 stringQfits = qfits_query_ext (fileName,
"ARRAYX", extNumber);
1039 if (stringQfits == NULL) array->arrayx = nullFloat;
1040 else sscanf (stringQfits,
"%lf", &(array->arrayx));
1042 stringQfits = qfits_query_ext (fileName,
"ARRAYY", extNumber);
1043 if (stringQfits == NULL) array->arrayy = nullFloat;
1044 else sscanf (stringQfits,
"%lf", &(array->arrayy));
1046 stringQfits = qfits_query_ext (fileName,
"ARRAYZ", extNumber);
1047 if (stringQfits == NULL) array->arrayz = nullFloat;
1048 else sscanf (stringQfits,
"%lf", &(array->arrayz));
1051 arrayGeometry = qfits_table_open (fileName, extNumber);
1055 selection = (
int *) calloc (array->nelement, sizeof (
int));
1056 for (i = 0; i < array->nelement; i++)
1059 qfitsRow = (
char *) (qfits_query_column (arrayGeometry, 0, selection));
1060 sprintf (array->elem[i].tel_name,
"%s", qfitsRow);
1063 qfitsRow = (
char *) (qfits_query_column (arrayGeometry, 1, selection));
1064 sprintf (array->elem[i].sta_name,
"%s", qfitsRow);
1067 qfitsRow_int = (
short *) (qfits_query_column (arrayGeometry, 2, selection));
1068 array->elem[i].sta_index = qfitsRow_int[0];
1069 free (qfitsRow_int);
1071 qfitsRow_flt = (
float *) (qfits_query_column (arrayGeometry, 3, selection));
1072 array->elem[i].diameter = qfitsRow_flt[0];
1073 free (qfitsRow_flt);
1075 qfitsRow_dbl = (
double *) (qfits_query_column (arrayGeometry, 4, selection));
1076 array->elem[i].staxyz[0] = qfitsRow_dbl[0];
1077 array->elem[i].staxyz[1] = qfitsRow_dbl[1];
1078 array->elem[i].staxyz[2] = qfitsRow_dbl[2];
1079 free (qfitsRow_dbl);
1083 sprintf (array->revision,
"%s", IAUEXCHANGE_VERSION);
1085 qfits_table_close (arrayGeometry);
1090 if (diagnostic)cpl_msg_info(cpl_func,
"Loading oi_target data ... \n");
1091 if (diagnostic) fprintf (midiReportPtr,
"Loading oi_target data ... \n");
1093 stringQfits = qfits_query_hdr (fileName,
"HIERARCH ESO OBS TARG NAME");
1094 if (stringQfits == NULL)
1095 sscanf (emptyString,
"%s", buffer);
1098 cleanUpString (stringQfits, cleanString);
1099 sscanf (cleanString,
"%s", buffer);
1102 for (itarg = 0; itarg < targets->ntarget; itarg++)
1104 targets->targ[itarg].target_id = targetId;
1105 sscanf (buffer,
"%s", targets->targ[itarg].target);
1106 targets->targ[itarg].raep0 = raEp0;
1107 targets->targ[itarg].decep0 = decEp0;
1108 targets->targ[itarg].equinox = equinox;
1109 targets->targ[itarg].ra_err = nullFloat;
1110 targets->targ[itarg].dec_err = nullFloat;
1111 targets->targ[itarg].sysvel = nullFloat;
1112 sscanf (emptyString,
"%s", targets->targ[itarg].veltyp);
1113 sscanf (emptyString,
"%s", targets->targ[itarg].veldef);
1114 targets->targ[itarg].pmra = nullFloat;
1115 targets->targ[itarg].pmdec = nullFloat;
1116 targets->targ[itarg].pmra_err = nullFloat;
1117 targets->targ[itarg].pmdec_err = nullFloat;
1118 targets->targ[itarg].parallax = nullFloat;
1119 targets->targ[itarg].para_err = nullFloat;
1120 sscanf (emptyString,
"%s", targets->targ[itarg].spectyp);
1122 sprintf (targets->revision,
"%s", IAUEXCHANGE_VERSION);
1127 if (diagnostic)cpl_msg_info(cpl_func,
"Loading oi_wavelength data ... \n");
1128 if (diagnostic) fprintf (midiReportPtr,
"Loading oi_wavelength data ... \n");
1131 effectiveWave = 1.e-6 * (SPEED_OF_LIGHT /
1132 (0.5 * (filterInfo->optFreqLo + filterInfo->optFreqHi)));
1133 effectiveBand = 1.e-6 * (SPEED_OF_LIGHT /
1134 (filterInfo->optFreqHi - filterInfo->optFreqLo));
1136 sscanf (instName,
"%s", wave->insname);
1137 for (i = 0; i < wave->nwave; i++)
1139 wave->eff_wave[i] = effectiveWave;
1140 wave->eff_band[i] = effectiveBand;
1142 sprintf (wave->revision,
"%s", IAUEXCHANGE_VERSION);
1145 computeUVW (array->elem[0].staxyz[0], array->elem[0].staxyz[1], array->elem[0].staxyz[2],
1146 array->elem[1].staxyz[0], array->elem[1].staxyz[1], array->elem[1].staxyz[2],
1147 mjdObs, raEp0, decEp0, uvw);
1151 if (diagnostic)cpl_msg_info(cpl_func,
"Loading oi_vis data ... \n");
1152 if (diagnostic) fprintf (midiReportPtr,
"Loading oi_vis data ... \n");
1155 sscanf (observationData,
"%s", vis->date_obs);
1156 sscanf (arrayName,
"%s", vis->arrname);
1157 sscanf (instName,
"%s", vis->insname);
1158 for (irec = 0; irec < vis->numrec; irec++)
1160 vis->record[irec].target_id = targetId;
1161 vis->record[irec].time = utcTime;
1162 vis->record[irec].mjd = mjdObs;
1163 vis->record[irec].int_time = integrationTime;
1164 vis->record[irec].ucoord = uvw->uCoord;
1165 vis->record[irec].vcoord = uvw->vCoord;
1166 vis->record[irec].sta_index[0] = array->elem[0].sta_index;
1167 vis->record[irec].sta_index[1] = array->elem[1].sta_index;
1169 for (iwave = 0; iwave < wave->nwave; iwave++)
1171 vis->record[irec].visamp[iwave] = visAmp[iwave];
1172 vis->record[irec].visamperr[iwave] = nullFloat;
1173 vis->record[irec].visphi[iwave] = nullFloat;
1174 vis->record[irec].visphierr[iwave] = nullFloat;
1176 sprintf (vis->record[irec].flag,
"%s",
"FALSE");
1178 sprintf (vis->revision,
"%s", IAUEXCHANGE_VERSION);
1179 vis->nwave = wave->nwave;
1184 if (diagnostic)cpl_msg_info(cpl_func,
"Loading oi_vis2 data ... \n");
1185 if (diagnostic) fprintf (midiReportPtr,
"Loading oi_vis2 data ... \n");
1188 sscanf (observationData,
"%s", vis2->date_obs);
1189 sscanf (arrayName,
"%s", vis2->arrname);
1190 sscanf (instName,
"%s", vis2->insname);
1191 for(irec = 0; irec < vis2->numrec; irec++)
1193 vis2->record[irec].target_id = targetId;
1194 vis2->record[irec].time = utcTime;
1195 vis2->record[irec].mjd = mjdObs;
1196 vis2->record[irec].int_time = integrationTime;
1197 vis2->record[irec].ucoord = uvw->uCoord;
1198 vis2->record[irec].vcoord = uvw->vCoord;
1199 vis2->record[irec].sta_index[0] = array->elem[0].sta_index;;
1200 vis2->record[irec].sta_index[1] = array->elem[1].sta_index;;
1202 for(iwave = 0; iwave < wave->nwave; iwave++)
1204 vis2->record[irec].vis2data[iwave] = visSqrd[iwave];
1205 vis2->record[irec].vis2err[iwave] = nullFloat;
1207 sprintf (vis2->record[irec].flag,
"%s",
"FALSE");
1209 sprintf (vis2->revision,
"%s", IAUEXCHANGE_VERSION);
1210 vis2->nwave = wave->nwave;
1216 free (observationData);
1240 void writeFrgFitsFileUndisp (
1244 OiWavelength *wavelength,
1251 const char routine[] =
"writeFrgFitsFileUndisp";
1255 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1256 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1258 if (diagnostic)cpl_msg_info(cpl_func,
"Writing data into the output FITS file \n\n");
1259 if (diagnostic) fprintf (midiReportPtr,
"Writing data into the output FITS file \n\n");
1265 writeOiArray (outFitsName, array, error);
1268 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
1269 "Cannot write OI_ARRAY in the output FITS file");
1274 writeOiTarget (outFitsName, targets, error);
1277 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
1278 "Cannot write OI_TARGET in the output FITS file");
1283 writeOiWavelength (outFitsName, wavelength, error);
1286 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
1287 "Cannot write OI_WAVELENGTH in the output FITS file");
1292 writeOiVis (outFitsName, vis, error);
1295 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
1296 "Cannot write OI_VIS in the output FITS file");
1301 writeOiVis2 (outFitsName, vis2, error);
1304 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
1305 "Cannot write OI_VIS2 in the output FITS file");