26 #include "midiGlobal.h"
28 #include "errorHandling.h"
29 #include "midiFitsUtility.h"
30 #include "fileHandling.h"
31 #include "createProdWavCal.h"
32 #include "cpl_table.h"
55 void createWaveCalProd (
59 WaveCalibration *waveCal,
65 const char routine[] =
"createWaveCalProd";
66 char *classification, *stringTemp;
73 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
74 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
76 cpl_msg_info(cpl_func,
"\nCreating Product files for WAV_CAL from batch %d \n", batchNumber);
77 cpl_msg_info(cpl_func,
"--------------------------------------------- \n");
78 fprintf (midiReportPtr,
"\nCreating Product files for WAV_CAL from batch %d \n", batchNumber);
79 fprintf (midiReportPtr,
"--------------------------------------------- \n");
85 createWaveCalPrimHead (processing, fileNames, format, waveCal, error);
88 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create Primary Header extension");
93 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
94 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
95 wavCalImage = (
float *) calloc (format->iXWidth * format->iYWidth, sizeof (
float));
98 qdWavCal.filename = fileNames->outFitsName;
99 qdWavCal.npix = format->iXWidth * format->iYWidth;
100 qdWavCal.ptype = PTYPE_FLOAT;
101 qdWavCal.fbuf = wavCalImage;
102 qdWavCal.out_ptype = BPP_IEEE_FLOAT;
103 qfits_pixdump (&qdWavCal);
108 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
110 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
112 free (classification);
118 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
119 sprintf (classification,
"%s",
"");
120 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
123 createWaveCalQcLog (fileNames->inFitsName, error);
124 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot copy keywords to QC log");
127 addProdInfoToWaveCalQcLog (processing, format, fileNames, waveCal, error);
130 fclose (inFitsBatchPtr);
131 free (classification);
152 void createWaveCalPrimHead (
154 MidiFiles *fileNames,
156 WaveCalibration *waveCal,
162 const char routine[] =
"createWaveCalPrimHead";
163 qfits_header *outFitsHeader;
164 FILE *inFitsBatchPtr=NULL, *outFitsPtr;
166 char *textBuff, *stringQfits, *messageBuffer, *currentTime, *cleanString,
167 *stringTemp, *classification, *sWidthX, *sWidthY;
174 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
175 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
181 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
183 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
189 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
190 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
191 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
192 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
193 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
194 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
195 sWidthX = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
196 sWidthY = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
200 newTime = gmtime (&now);
201 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
204 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
205 sprintf (classification,
"%s",
"");
206 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
209 outFitsHeader = qfits_header_read (fileNames->inFitsName);
210 if (outFitsHeader == NULL)
213 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load header from the input FITS file");
214 free (messageBuffer);
218 free (classification);
226 sprintf (sWidthY,
"%d", format->iYWidth);
227 sprintf (sWidthX,
"%d", format->iXWidth);
230 qfits_header_mod (outFitsHeader,
"BITPIX",
"-32",
"number of bits per pixel");
231 qfits_header_mod (outFitsHeader,
"NAXIS",
"2",
"number of data axes");
232 qfits_header_add (outFitsHeader,
"NAXIS1", sWidthX,
"", NULL);
233 qfits_header_add (outFitsHeader,
"NAXIS2", sWidthY,
"", NULL);
234 qfits_header_mod (outFitsHeader,
"INSTRUME",
"MIDI",
"MIDI Raw Data Display FITS created by DRS pipeline" );
238 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO TYPE", format->obsType,
"MIDI pipeline product type", NULL);
239 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO CATG",
"REDUCED_WAVECAL",
"Pipeline product category", NULL);
240 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO ARCFILE", fileNames->archFileName,
"Arcfile name of first raw file", NULL);
241 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO PIPEDATE", currentTime,
"Pipeline run date",
"");
242 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION,
"Pipeline version", NULL);
243 qfits_header_add (outFitsHeader,
"PIPEFILE", fileNames->pipeFileName,
"Pipeline product file name", NULL);
244 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO DID", MIDI_QC_DIC_VERSION,
"QC dictionary version", NULL);
247 rewind (inFitsBatchPtr);
251 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
253 sprintf (classification,
"%s",
"");
254 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
257 if (strcmp (classification,
"") == 0)
259 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
260 if (stringQfits == NULL)
262 sprintf (classification,
"%s",
"UNKNOWN");
263 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
267 cleanUpString (stringQfits, cleanString);
268 sprintf (classification,
"%s", cleanString);
271 removePathName (messageBuffer, midiReportPtr);
272 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d NAME", i);
273 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"FITS file name",
"");
274 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d CATG", i++);
275 qfits_header_add (outFitsHeader, textBuff, classification,
"Observation Categoty",
"");
277 fclose (inFitsBatchPtr);
280 for (region = 0; region < format->numOfDetectorRegions; region++)
282 for (i = 0; i < format->iXWidth; i++)
284 sprintf (textBuff,
"HIERARCH ESO QC WCAL CH%d R%d", i, region+1);
285 sprintf (messageBuffer,
"%f", waveCal->calibratedWave[region][i]);
286 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Channel Wavelength assignment",
"");
293 for (region = 0; region < format->numOfDetectorRegions; region++)
295 sprintf (textBuff,
"HIERARCH ESO QC WCAL VAR R%d", region+1);
296 sprintf (messageBuffer,
"%f", waveCal->variance[region]);
297 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Correlation Variance",
"");
302 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH1",
"TBD",
"TBD",
"");
303 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH2",
"TBD",
"TBD",
"");
304 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH3",
"TBD",
"TBD",
"");
305 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH4",
"TBD",
"TBD",
"");
306 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH5",
"TBD",
"TBD",
"");
307 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH6",
"TBD",
"TBD",
"");
308 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH7",
"TBD",
"TBD",
"");
309 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH8",
"TBD",
"TBD",
"");
310 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH9",
"TBD",
"TBD",
"");
313 if (stat (fileNames->outFitsName, &buf) == 0)
remove (fileNames->outFitsName);
315 outFitsPtr = fopen (fileNames->outFitsName,
"w");
319 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create output FITS file");
320 free (messageBuffer);
324 free (classification);
331 cpl_msg_info(cpl_func,
"Created Product FITS file: %s \n", fileNames->outFitsName);
332 fprintf (midiReportPtr,
"Created Product FITS file: %s \n", fileNames->outFitsName);
335 qfits_header_sort (&outFitsHeader);
336 qfits_header_dump (outFitsHeader, outFitsPtr);
338 qfits_header_destroy (outFitsHeader);
341 free (messageBuffer);
345 free (classification);
368 void createWaveCalQcLog (
376 const char routine[] =
"createWaveCalQcLog";
377 char *qfitsString, *emptyString, *cleanString;
381 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
382 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
388 emptyString = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
389 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
392 strcpy (emptyString,
"\"UNKNOWN\"");
395 qfitsString = qfits_query_hdr (inFitsName,
"ARCFILE");
396 if (qfitsString == NULL)
397 fprintf (midiQcLogPtr,
"ARCFILE %s \n", emptyString);
398 else {cleanUpString (qfitsString, cleanString);
399 fprintf (midiQcLogPtr,
"ARCFILE \"%s\" \n", cleanString);}
401 qfitsString = qfits_query_hdr (inFitsName,
"TELESCOP");
402 if (qfitsString == NULL)
403 fprintf (midiQcLogPtr,
"TELESCOP %s \n", emptyString);
404 else {cleanUpString (qfitsString, cleanString);
405 fprintf (midiQcLogPtr,
"TELESCOP \"%s\" \n", cleanString);}
407 qfitsString = qfits_query_hdr (inFitsName,
"INSTRUME");
408 if (qfitsString == NULL)
409 fprintf (midiQcLogPtr,
"INSTRUME %s \n", emptyString);
410 else {cleanUpString (qfitsString, cleanString);
411 fprintf (midiQcLogPtr,
"INSTRUME \"%s\" \n", cleanString);}
413 qfitsString = qfits_query_hdr (inFitsName,
"MJD-OBS");
414 if (qfitsString == NULL)
415 fprintf (midiQcLogPtr,
"MJD-OBS %s \n", emptyString);
416 else {cleanUpString (qfitsString, cleanString);
417 fprintf (midiQcLogPtr,
"MJD-OBS \"%s\" \n", cleanString);}
419 qfitsString = qfits_query_hdr (inFitsName,
"DATE-OBS");
420 if (qfitsString == NULL)
421 fprintf (midiQcLogPtr,
"DATE-OBS %s \n", emptyString);
422 else {cleanUpString (qfitsString, cleanString);
423 fprintf (midiQcLogPtr,
"DATE-OBS \"%s\" \n", cleanString);}
425 qfitsString = qfits_query_hdr (inFitsName,
"UTC");
426 if (qfitsString == NULL)
427 fprintf (midiQcLogPtr,
"UTC %s \n", emptyString);
428 else {cleanUpString (qfitsString, cleanString);
429 fprintf (midiQcLogPtr,
"UTC %s \n", cleanString);}
431 qfitsString = qfits_query_hdr (inFitsName,
"LST");
432 if (qfitsString == NULL)
433 fprintf (midiQcLogPtr,
"LST %s \n", emptyString);
434 else {cleanUpString (qfitsString, cleanString);
435 fprintf (midiQcLogPtr,
"LST %s \n", cleanString);}
437 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET CHIP NX");
438 if (qfitsString == NULL)
439 fprintf (midiQcLogPtr,
"DET.CHIP.NX %s \n", emptyString);
440 else {cleanUpString (qfitsString, cleanString);
441 fprintf (midiQcLogPtr,
"DET.CHIP.NX %s \n", cleanString);}
443 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET CHIP NY");
444 if (qfitsString == NULL)
445 fprintf (midiQcLogPtr,
"DET.CHIP.NY %s \n", emptyString);
446 else {cleanUpString (qfitsString, cleanString);
447 fprintf (midiQcLogPtr,
"DET.CHIP.NY %s \n", cleanString);}
449 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET DIT");
450 if (qfitsString == NULL)
451 fprintf (midiQcLogPtr,
"DET.DIT %s \n", emptyString);
452 else {cleanUpString (qfitsString, cleanString);
453 fprintf (midiQcLogPtr,
"DET.DIT %s \n", cleanString);}
455 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET DITDELAY");
456 if (qfitsString == NULL)
457 fprintf (midiQcLogPtr,
"DET.DITDELAY %s \n", emptyString);
458 else {cleanUpString (qfitsString, cleanString);
459 fprintf (midiQcLogPtr,
"DET.DITDELAY %s \n", cleanString);}
461 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET INT MODE");
462 if (qfitsString == NULL)
463 fprintf (midiQcLogPtr,
"DET.INT.MODE %s \n", emptyString);
464 else {cleanUpString (qfitsString, cleanString);
465 fprintf (midiQcLogPtr,
"DET.INT.MODE \"%s\" \n", cleanString);}
467 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET NDIT");
468 if (qfitsString == NULL)
469 fprintf (midiQcLogPtr,
"DET.NDIT %s \n", emptyString);
470 else {cleanUpString (qfitsString, cleanString);
471 fprintf (midiQcLogPtr,
"DET.NDIT %s \n", cleanString);}
473 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET NRTS MODE");
474 if (qfitsString == NULL)
475 fprintf (midiQcLogPtr,
"DET.NRTS.MODE %s \n", emptyString);
476 else {cleanUpString (qfitsString, cleanString);
477 fprintf (midiQcLogPtr,
"DET.NRTS.MODE \"%s\" \n", cleanString);}
479 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN1 NX");
480 if (qfitsString == NULL)
481 fprintf (midiQcLogPtr,
"DET.WIN1.NX %s \n", emptyString);
482 else {cleanUpString (qfitsString, cleanString);
483 fprintf (midiQcLogPtr,
"DET.WIN1.NX %s \n", cleanString);}
485 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN1 NY");
486 if (qfitsString == NULL)
487 fprintf (midiQcLogPtr,
"DET.WIN1.NY %s \n", emptyString);
488 else {cleanUpString (qfitsString, cleanString);
489 fprintf (midiQcLogPtr,
"DET.WIN1.NY %s \n", cleanString);}
491 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN2 NX");
492 if (qfitsString == NULL)
493 fprintf (midiQcLogPtr,
"DET.WIN2.NX %s \n", emptyString);
494 else {cleanUpString (qfitsString, cleanString);
495 fprintf (midiQcLogPtr,
"DET.WIN2.NX %s \n", cleanString);}
497 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN2 NY");
498 if (qfitsString == NULL)
499 fprintf (midiQcLogPtr,
"DET.WIN2.NY %s \n", emptyString);
500 else {cleanUpString (qfitsString, cleanString);
501 fprintf (midiQcLogPtr,
"DET.WIN2.NY %s \n", cleanString);}
503 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR CATG");
504 if (qfitsString == NULL)
505 fprintf (midiQcLogPtr,
"DPR.CATG %s \n", emptyString);
506 else {cleanUpString (qfitsString, cleanString);
507 fprintf (midiQcLogPtr,
"DPR.CATG \"%s\" \n", cleanString);}
509 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR TECH");
510 if (qfitsString == NULL)
511 fprintf (midiQcLogPtr,
"DPR.TECH %s \n", emptyString);
512 else {cleanUpString (qfitsString, cleanString);
513 fprintf (midiQcLogPtr,
"DPR.TECH \"%s\" \n", cleanString);}
515 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR TYPE");
516 if (qfitsString == NULL)
517 fprintf (midiQcLogPtr,
"DPR.TYPE %s \n", emptyString);
518 else {cleanUpString (qfitsString, cleanString);
519 fprintf (midiQcLogPtr,
"DPR.TYPE \"%s\" \n", cleanString);}
521 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS CAM NAME");
522 if (qfitsString == NULL)
523 fprintf (midiQcLogPtr,
"INS.CAM.NAME %s \n", emptyString);
524 else {cleanUpString (qfitsString, cleanString);
525 fprintf (midiQcLogPtr,
"INS.CAM.NAME \"%s\" \n", cleanString);}
527 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS FILT NAME");
528 if (qfitsString == NULL)
529 fprintf (midiQcLogPtr,
"INS.FILT.NAME %s \n", emptyString);
530 else {cleanUpString (qfitsString, cleanString);
531 fprintf (midiQcLogPtr,
"INS.FILT.NAME \"%s\" \n", cleanString);}
533 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS GRIS NAME");
534 if (qfitsString == NULL)
535 fprintf (midiQcLogPtr,
"INS.GRIS.NAME %s \n", emptyString);
536 else {cleanUpString (qfitsString, cleanString);
537 fprintf (midiQcLogPtr,
"INS.GRIS.NAME \"%s\" \n", cleanString);}
539 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS MODE");
540 if (qfitsString == NULL)
541 fprintf (midiQcLogPtr,
"INS.MODE %s \n", emptyString);
542 else {cleanUpString (qfitsString, cleanString);
543 fprintf (midiQcLogPtr,
"INS.MODE \"%s\" \n", cleanString);}
545 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS OPT1 NAME");
546 if (qfitsString == NULL)
547 fprintf (midiQcLogPtr,
"INS.OPT1.NAME %s \n", emptyString);
548 else {cleanUpString (qfitsString, cleanString);
549 fprintf (midiQcLogPtr,
"INS.OPT1.NAME %s \n", cleanString);}
551 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS OPT1 TYPE");
552 if (qfitsString == NULL)
553 fprintf (midiQcLogPtr,
"INS.OPT1.TYPE %s \n", emptyString);
554 else {cleanUpString (qfitsString, cleanString);
555 fprintf (midiQcLogPtr,
"INS.OPT1.TYPE \"%s\" \n", cleanString);}
557 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS SHUT NAME");
558 if (qfitsString == NULL)
559 fprintf (midiQcLogPtr,
"INS.SHUT.NAME %s \n", emptyString);
560 else {cleanUpString (qfitsString, cleanString);
561 fprintf (midiQcLogPtr,
"INS.SHUT.NAME \"%s\" \n", cleanString);}
563 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS SLIT NAME");
564 if (qfitsString == NULL)
565 fprintf (midiQcLogPtr,
"INS.SLIT.NAME %s \n", emptyString);
566 else {cleanUpString (qfitsString, cleanString);
567 fprintf (midiQcLogPtr,
"INS.SLIT.NAME \"%s\" \n", cleanString);}
569 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS ID");
570 if (qfitsString == NULL)
571 fprintf (midiQcLogPtr,
"OBS.ID %s \n", emptyString);
572 else {cleanUpString (qfitsString, cleanString);
573 fprintf (midiQcLogPtr,
"OBS.ID \"%s\" \n", cleanString);}
575 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS NAME");
576 if (qfitsString == NULL)
577 fprintf (midiQcLogPtr,
"OBS.NAME %s \n", emptyString);
578 else {cleanUpString (qfitsString, cleanString);
579 fprintf (midiQcLogPtr,
"OBS.NAME \"%s\" \n", cleanString);}
581 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PI-COI ID");
582 if (qfitsString == NULL)
583 fprintf (midiQcLogPtr,
"OBS.PI-COI.ID %s \n", emptyString);
584 else {cleanUpString (qfitsString, cleanString);
585 fprintf (midiQcLogPtr,
"OBS.PI-COI.ID \"%s\" \n", cleanString);}
587 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PI-COI NAME");
588 if (qfitsString == NULL)
589 fprintf (midiQcLogPtr,
"OBS.PI-COI.NAME %s \n", emptyString);
590 else {cleanUpString (qfitsString, cleanString);
591 fprintf (midiQcLogPtr,
"OBS.PI-COI.NAME \"%s\" \n", cleanString);}
593 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PROG ID");
594 if (qfitsString == NULL)
595 fprintf (midiQcLogPtr,
"OBS.PROG.ID %s \n", emptyString);
596 else {cleanUpString (qfitsString, cleanString);
597 fprintf (midiQcLogPtr,
"OBS.PROG.ID \"%s\" \n", cleanString);}
599 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS START");
600 if (qfitsString == NULL)
601 fprintf (midiQcLogPtr,
"OBS.START %s \n", emptyString);
602 else {cleanUpString (qfitsString, cleanString);
603 fprintf (midiQcLogPtr,
"OBS.START \"%s\" \n", cleanString);}
605 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS TARG NAME");
606 if (qfitsString == NULL)
607 fprintf (midiQcLogPtr,
"OBS.TARG.NAME %s \n", emptyString);
608 else {cleanUpString (qfitsString, cleanString);
609 fprintf (midiQcLogPtr,
"OBS.TARG.NAME \"%s\" \n", cleanString);}
611 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OCS EXPO1 FNAME1");
612 if (qfitsString == NULL)
613 fprintf (midiQcLogPtr,
"OCS.EXPO1.FNAME1 %s \n", emptyString);
614 else {cleanUpString (qfitsString, cleanString);
615 fprintf (midiQcLogPtr,
"OCS.EXPO1.FNAME1 \"%s\" \n", cleanString);}
617 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO TPL ID");
618 if (qfitsString == NULL)
619 fprintf (midiQcLogPtr,
"TPL.ID %s \n", emptyString);
620 else {cleanUpString (qfitsString, cleanString);
621 fprintf (midiQcLogPtr,
"TPL.ID \"%s\" \n", cleanString);}
623 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO TPL START");
624 if (qfitsString == NULL)
625 fprintf (midiQcLogPtr,
"TPL.START %s \n", emptyString);
626 else {cleanUpString (qfitsString, cleanString);
627 fprintf (midiQcLogPtr,
"TPL.START \"%s\" \n", cleanString);}
651 void addProdInfoToWaveCalQcLog (
654 MidiFiles *fileNames,
655 WaveCalibration *waveCal,
661 const char routine[] =
"addProdInfoToWaveCalQcLog";
663 FILE *inFitsBatchPtr;
664 char *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
665 *stringTemp, *classification;
671 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
672 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
678 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
679 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
680 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
681 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
682 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
683 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
687 newTime = gmtime (&now);
688 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
691 fprintf (midiQcLogPtr,
"PRO.TYPE \"%s\" \n", format->obsType);
692 fprintf (midiQcLogPtr,
"PRO.CATG \"REDUCED_WAVECAL\" \n");
693 fprintf (midiQcLogPtr,
"PRO.ARCFILE \"%s\" \n", fileNames->archFileName);
694 fprintf (midiQcLogPtr,
"PRO.PIPEDATE \"%s\" \n", currentTime);
695 fprintf (midiQcLogPtr,
"PRO.VERSION \"%s\" \n", MIDI_PIPE_VERSION);
696 fprintf (midiQcLogPtr,
"PRO.PIPEFILE \"%s\" \n", fileNames->pipeFileName);
697 fprintf (midiQcLogPtr,
"PRO.DID \"%s\" \n", MIDI_QC_DIC_VERSION);
700 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
703 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
704 free (messageBuffer);
708 free (classification);
715 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
717 sprintf (classification,
"%s",
"");
718 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
721 if (strcmp (classification,
"") == 0)
723 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
724 if (stringQfits == NULL)
726 sprintf (classification,
"%s",
"UNKNOWN");
727 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
731 cleanUpString (stringQfits, cleanString);
732 sprintf (classification,
"%s", cleanString);
735 removePathName (messageBuffer, midiReportPtr);
736 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.NAME \"%s\" \n", i, messageBuffer);
737 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.CATG \"%s\" \n", i++, classification);
739 fclose (inFitsBatchPtr);
742 for (region = 0; region < format->numOfDetectorRegions; region++)
744 for (i = 0; i < format->iXWidth; i++)
745 fprintf (midiQcLogPtr,
"QC.WCAL.CH%d.R%d %f \n", i, region+1, waveCal->calibratedWave[region][i]);
751 for (region = 0; region < format->numOfDetectorRegions; region++)
752 fprintf (midiQcLogPtr,
"QC.WCAL.VAR.R%d %f \n", region+1, waveCal->variance[region]);
756 free (messageBuffer);
761 free (classification);