26 #include "midiGlobal.h"
28 #include "errorHandling.h"
29 #include "midiFitsUtility.h"
30 #include "fileHandling.h"
31 #include "createProdDetRon.h"
53 void createDetRonProd (
62 const char routine[] =
"createDetRonProd";
63 qfitsdumper qdNoisePattern;
67 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
68 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
70 cpl_msg_info(cpl_func,
"\nCreating Product files for DET_RON from batch %d \n", batchNumber);
71 cpl_msg_info(cpl_func,
"--------------------------------------------- \n");
72 fprintf (midiReportPtr,
"\nCreating Product files for DET_RON from batch %d \n", batchNumber);
73 fprintf (midiReportPtr,
"--------------------------------------------- \n");
79 createDetRonPrimHead (fileNames, size, noise, error);
82 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create Primary Header extension");
87 qdNoisePattern.filename = fileNames->outFitsName;
88 qdNoisePattern.npix = size->iXWidth * size->iYWidth;
89 qdNoisePattern.ptype = PTYPE_FLOAT;
90 qdNoisePattern.fbuf = noise->pattern;
91 qdNoisePattern.out_ptype = BPP_IEEE_FLOAT;
93 qfits_pixdump (&qdNoisePattern);
96 createDetRonQcLog (fileNames->inFitsName, error);
97 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot copy keywords to QC log");
100 addProdInfoToDetRonQcLog (size, fileNames, noise->median, error);
120 void createDetRonPrimHead (
121 MidiFiles *fileNames,
129 const char routine[] =
"createDetRonPrimHead";
130 qfits_header *outFitsHeader;
131 FILE *inFitsBatchPtr=NULL, *outFitsPtr;
133 char *textBuff, *stringQfits, *messageBuffer, *currentTime, *cleanString,
134 *stringTemp, *classification, *sWidthX, *sWidthY;
141 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
142 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
146 if (diagnostic)cpl_msg_info(cpl_func,
"Creating Primary FITS Header \n");
147 fprintf (midiReportPtr,
"Creating Primary FITS Header \n");
150 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
152 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
158 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
159 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
160 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
161 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
162 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
163 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
164 sWidthX = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
165 sWidthY = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
169 newTime = gmtime (&now);
170 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
173 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
174 sprintf (classification,
"%s",
"");
175 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
178 outFitsHeader = qfits_header_read (fileNames->inFitsName);
179 if (outFitsHeader == NULL)
182 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load header from the input FITS file");
183 free (messageBuffer);
187 free (classification);
195 sprintf (sWidthY,
"%d", size->iYWidth);
196 sprintf (sWidthX,
"%d", size->iXWidth);
199 qfits_header_mod (outFitsHeader,
"BITPIX",
"-32",
"number of bits per pixel");
200 qfits_header_mod (outFitsHeader,
"NAXIS",
"2",
"number of data axes");
201 qfits_header_add (outFitsHeader,
"NAXIS1", sWidthX,
"", NULL);
202 qfits_header_add (outFitsHeader,
"NAXIS2", sWidthY,
"", NULL);
203 qfits_header_mod (outFitsHeader,
"INSTRUME",
"MIDI",
"MIDI Raw Data Display FITS created by DRS pipeline" );
207 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO TYPE", size->obsType,
"MIDI pipeline product type", NULL);
208 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO CATG",
"REDUCED_DETRON",
"Pipeline product category", NULL);
209 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO ARCFILE", fileNames->archFileName,
"Arcfile name of first raw file", NULL);
210 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO PIPEDATE", currentTime,
"Pipeline run date",
"");
211 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION,
"Pipeline version", NULL);
212 qfits_header_add (outFitsHeader,
"PIPEFILE", fileNames->pipeFileName,
"Pipeline product file name", NULL);
213 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO DID", MIDI_QC_DIC_VERSION,
"QC dictionary version", NULL);
216 rewind (inFitsBatchPtr);
220 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
222 sprintf (classification,
"%s",
"");
223 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
226 if (strcmp (classification,
"") == 0)
228 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
229 if (stringQfits == NULL)
231 sprintf (classification,
"%s",
"UNKNOWN");
232 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
236 cleanUpString (stringQfits, cleanString);
237 sprintf (classification,
"%s", cleanString);
240 removePathName (messageBuffer, midiReportPtr);
241 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d NAME", i);
242 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"FITS file name",
"");
243 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d CATG", i++);
244 qfits_header_add (outFitsHeader, textBuff, classification,
"Observation Categoty",
"");
246 fclose (inFitsBatchPtr);
249 sprintf (messageBuffer,
"%f", noise->median);
250 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC DETRON MEDIAN", messageBuffer,
"Median of noise pattern",
"");
253 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH1",
"TBD",
"TBD",
"");
254 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH2",
"TBD",
"TBD",
"");
255 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH3",
"TBD",
"TBD",
"");
256 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH4",
"TBD",
"TBD",
"");
257 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH5",
"TBD",
"TBD",
"");
258 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH6",
"TBD",
"TBD",
"");
259 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH7",
"TBD",
"TBD",
"");
260 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH8",
"TBD",
"TBD",
"");
261 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH9",
"TBD",
"TBD",
"");
264 if (diagnostic)cpl_msg_info(cpl_func,
"Creating Product FITS file %s \n", fileNames->outFitsName);
265 fprintf (midiReportPtr,
"Creating Product FITS file %s \n", fileNames->outFitsName);
266 if (stat (fileNames->outFitsName, &buf) == 0)
remove (fileNames->outFitsName);
267 outFitsPtr = fopen (fileNames->outFitsName,
"w");
271 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create output FITS file");
272 free (messageBuffer);
276 free (classification);
283 cpl_msg_info(cpl_func,
"Created Product FITS file: %s \n", fileNames->outFitsName);
284 fprintf (midiReportPtr,
"Created Product FITS file: %s \n", fileNames->outFitsName);
287 qfits_header_sort (&outFitsHeader);
288 qfits_header_dump (outFitsHeader, outFitsPtr);
290 qfits_header_destroy (outFitsHeader);
293 free (messageBuffer);
297 free (classification);
321 void createDetRonQcLog (
329 const char routine[] =
"createDetRonQcLog";
330 char *qfitsString, *emptyString, *cleanString;
334 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
335 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
341 emptyString = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
342 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
345 strcpy (emptyString,
"\"UNKNOWN\"");
348 qfitsString = qfits_query_hdr (inFitsName,
"ARCFILE");
349 if (qfitsString == NULL)
350 fprintf (midiQcLogPtr,
"ARCFILE %s \n", emptyString);
351 else {cleanUpString (qfitsString, cleanString);
352 fprintf (midiQcLogPtr,
"ARCFILE \"%s\" \n", cleanString);}
354 qfitsString = qfits_query_hdr (inFitsName,
"TELESCOP");
355 if (qfitsString == NULL)
356 fprintf (midiQcLogPtr,
"TELESCOP %s \n", emptyString);
357 else {cleanUpString (qfitsString, cleanString);
358 fprintf (midiQcLogPtr,
"TELESCOP \"%s\" \n", cleanString);}
360 qfitsString = qfits_query_hdr (inFitsName,
"INSTRUME");
361 if (qfitsString == NULL)
362 fprintf (midiQcLogPtr,
"INSTRUME %s \n", emptyString);
363 else {cleanUpString (qfitsString, cleanString);
364 fprintf (midiQcLogPtr,
"INSTRUME \"%s\" \n", cleanString);}
366 qfitsString = qfits_query_hdr (inFitsName,
"MJD-OBS");
367 if (qfitsString == NULL)
368 fprintf (midiQcLogPtr,
"MJD-OBS %s \n", emptyString);
369 else {cleanUpString (qfitsString, cleanString);
370 fprintf (midiQcLogPtr,
"MJD-OBS \"%s\" \n", cleanString);}
372 qfitsString = qfits_query_hdr (inFitsName,
"DATE-OBS");
373 if (qfitsString == NULL)
374 fprintf (midiQcLogPtr,
"DATE-OBS %s \n", emptyString);
375 else {cleanUpString (qfitsString, cleanString);
376 fprintf (midiQcLogPtr,
"DATE-OBS \"%s\" \n", cleanString);}
378 qfitsString = qfits_query_hdr (inFitsName,
"UTC");
379 if (qfitsString == NULL)
380 fprintf (midiQcLogPtr,
"UTC %s \n", emptyString);
381 else {cleanUpString (qfitsString, cleanString);
382 fprintf (midiQcLogPtr,
"UTC %s \n", cleanString);}
384 qfitsString = qfits_query_hdr (inFitsName,
"LST");
385 if (qfitsString == NULL)
386 fprintf (midiQcLogPtr,
"LST %s \n", emptyString);
387 else {cleanUpString (qfitsString, cleanString);
388 fprintf (midiQcLogPtr,
"LST %s \n", cleanString);}
390 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET CHIP NX");
391 if (qfitsString == NULL)
392 fprintf (midiQcLogPtr,
"DET.CHIP.NX %s \n", emptyString);
393 else {cleanUpString (qfitsString, cleanString);
394 fprintf (midiQcLogPtr,
"DET.CHIP.NX %s \n", cleanString);}
396 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET CHIP NY");
397 if (qfitsString == NULL)
398 fprintf (midiQcLogPtr,
"DET.CHIP.NY %s \n", emptyString);
399 else {cleanUpString (qfitsString, cleanString);
400 fprintf (midiQcLogPtr,
"DET.CHIP.NY %s \n", cleanString);}
402 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET DIT");
403 if (qfitsString == NULL)
404 fprintf (midiQcLogPtr,
"DET.DIT %s \n", emptyString);
405 else {cleanUpString (qfitsString, cleanString);
406 fprintf (midiQcLogPtr,
"DET.DIT %s \n", cleanString);}
408 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET DITDELAY");
409 if (qfitsString == NULL)
410 fprintf (midiQcLogPtr,
"DET.DITDELAY %s \n", emptyString);
411 else {cleanUpString (qfitsString, cleanString);
412 fprintf (midiQcLogPtr,
"DET.DITDELAY %s \n", cleanString);}
414 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET INT MODE");
415 if (qfitsString == NULL)
416 fprintf (midiQcLogPtr,
"DET.INT.MODE %s \n", emptyString);
417 else {cleanUpString (qfitsString, cleanString);
418 fprintf (midiQcLogPtr,
"DET.INT.MODE \"%s\" \n", cleanString);}
420 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET NDIT");
421 if (qfitsString == NULL)
422 fprintf (midiQcLogPtr,
"DET.NDIT %s \n", emptyString);
423 else {cleanUpString (qfitsString, cleanString);
424 fprintf (midiQcLogPtr,
"DET.NDIT %s \n", cleanString);}
426 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET NRTS MODE");
427 if (qfitsString == NULL)
428 fprintf (midiQcLogPtr,
"DET.NRTS.MODE %s \n", emptyString);
429 else {cleanUpString (qfitsString, cleanString);
430 fprintf (midiQcLogPtr,
"DET.NRTS.MODE \"%s\" \n", cleanString);}
432 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN1 NX");
433 if (qfitsString == NULL)
434 fprintf (midiQcLogPtr,
"DET.WIN1.NX %s \n", emptyString);
435 else {cleanUpString (qfitsString, cleanString);
436 fprintf (midiQcLogPtr,
"DET.WIN1.NX %s \n", cleanString);}
438 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN1 NY");
439 if (qfitsString == NULL)
440 fprintf (midiQcLogPtr,
"DET.WIN1.NY %s \n", emptyString);
441 else {cleanUpString (qfitsString, cleanString);
442 fprintf (midiQcLogPtr,
"DET.WIN1.NY %s \n", cleanString);}
444 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN2 NX");
445 if (qfitsString == NULL)
446 fprintf (midiQcLogPtr,
"DET.WIN2.NX %s \n", emptyString);
447 else {cleanUpString (qfitsString, cleanString);
448 fprintf (midiQcLogPtr,
"DET.WIN2.NX %s \n", cleanString);}
450 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN2 NY");
451 if (qfitsString == NULL)
452 fprintf (midiQcLogPtr,
"DET.WIN2.NY %s \n", emptyString);
453 else {cleanUpString (qfitsString, cleanString);
454 fprintf (midiQcLogPtr,
"DET.WIN2.NY %s \n", cleanString);}
456 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR CATG");
457 if (qfitsString == NULL)
458 fprintf (midiQcLogPtr,
"DPR.CATG %s \n", emptyString);
459 else {cleanUpString (qfitsString, cleanString);
460 fprintf (midiQcLogPtr,
"DPR.CATG \"%s\" \n", cleanString);}
462 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR TECH");
463 if (qfitsString == NULL)
464 fprintf (midiQcLogPtr,
"DPR.TECH %s \n", emptyString);
465 else {cleanUpString (qfitsString, cleanString);
466 fprintf (midiQcLogPtr,
"DPR.TECH \"%s\" \n", cleanString);}
468 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR TYPE");
469 if (qfitsString == NULL)
470 fprintf (midiQcLogPtr,
"DPR.TYPE %s \n", emptyString);
471 else {cleanUpString (qfitsString, cleanString);
472 fprintf (midiQcLogPtr,
"DPR.TYPE \"%s\" \n", cleanString);}
474 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS CAM NAME");
475 if (qfitsString == NULL)
476 fprintf (midiQcLogPtr,
"INS.CAM.NAME %s \n", emptyString);
477 else {cleanUpString (qfitsString, cleanString);
478 fprintf (midiQcLogPtr,
"INS.CAM.NAME \"%s\" \n", cleanString);}
480 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS FILT NAME");
481 if (qfitsString == NULL)
482 fprintf (midiQcLogPtr,
"INS.FILT.NAME %s \n", emptyString);
483 else {cleanUpString (qfitsString, cleanString);
484 fprintf (midiQcLogPtr,
"INS.FILT.NAME \"%s\" \n", cleanString);}
486 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS GRIS NAME");
487 if (qfitsString == NULL)
488 fprintf (midiQcLogPtr,
"INS.GRIS.NAME %s \n", emptyString);
489 else {cleanUpString (qfitsString, cleanString);
490 fprintf (midiQcLogPtr,
"INS.GRIS.NAME \"%s\" \n", cleanString);}
492 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS MODE");
493 if (qfitsString == NULL)
494 fprintf (midiQcLogPtr,
"INS.MODE %s \n", emptyString);
495 else {cleanUpString (qfitsString, cleanString);
496 fprintf (midiQcLogPtr,
"INS.MODE \"%s\" \n", cleanString);}
498 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS OPT1 NAME");
499 if (qfitsString == NULL)
500 fprintf (midiQcLogPtr,
"INS.OPT1.NAME %s \n", emptyString);
501 else {cleanUpString (qfitsString, cleanString);
502 fprintf (midiQcLogPtr,
"INS.OPT1.NAME \"%s\" \n", cleanString);}
504 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS OPT1 TYPE");
505 if (qfitsString == NULL)
506 fprintf (midiQcLogPtr,
"INS.OPT1.TYPE %s \n", emptyString);
507 else {cleanUpString (qfitsString, cleanString);
508 fprintf (midiQcLogPtr,
"INS.OPT1.TYPE \"%s\" \n", cleanString);}
510 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS SHUT NAME");
511 if (qfitsString == NULL)
512 fprintf (midiQcLogPtr,
"INS.SHUT.NAME %s \n", emptyString);
513 else {cleanUpString (qfitsString, cleanString);
514 fprintf (midiQcLogPtr,
"INS.SHUT.NAME \"%s\" \n", cleanString);}
516 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS SLIT NAME");
517 if (qfitsString == NULL)
518 fprintf (midiQcLogPtr,
"INS.SLIT.NAME %s \n", emptyString);
519 else {cleanUpString (qfitsString, cleanString);
520 fprintf (midiQcLogPtr,
"INS.SLIT.NAME \"%s\" \n", cleanString);}
522 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS ID");
523 if (qfitsString == NULL)
524 fprintf (midiQcLogPtr,
"OBS.ID %s \n", emptyString);
525 else {cleanUpString (qfitsString, cleanString);
526 fprintf (midiQcLogPtr,
"OBS.ID \"%s\" \n", cleanString);}
528 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS NAME");
529 if (qfitsString == NULL)
530 fprintf (midiQcLogPtr,
"OBS.NAME %s \n", emptyString);
531 else {cleanUpString (qfitsString, cleanString);
532 fprintf (midiQcLogPtr,
"OBS.NAME \"%s\" \n", cleanString);}
534 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PI-COI ID");
535 if (qfitsString == NULL)
536 fprintf (midiQcLogPtr,
"OBS.PI-COI.ID %s \n", emptyString);
537 else {cleanUpString (qfitsString, cleanString);
538 fprintf (midiQcLogPtr,
"OBS.PI-COI.ID \"%s\" \n", cleanString);}
540 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PI-COI NAME");
541 if (qfitsString == NULL)
542 fprintf (midiQcLogPtr,
"OBS.PI-COI.NAME %s \n", emptyString);
543 else {cleanUpString (qfitsString, cleanString);
544 fprintf (midiQcLogPtr,
"OBS.PI-COI.NAME \"%s\" \n", cleanString);}
546 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PROG ID");
547 if (qfitsString == NULL)
548 fprintf (midiQcLogPtr,
"OBS.PROG.ID %s \n", emptyString);
549 else {cleanUpString (qfitsString, cleanString);
550 fprintf (midiQcLogPtr,
"OBS.PROG.ID \"%s\" \n", cleanString);}
552 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS START");
553 if (qfitsString == NULL)
554 fprintf (midiQcLogPtr,
"OBS.START %s \n", emptyString);
555 else {cleanUpString (qfitsString, cleanString);
556 fprintf (midiQcLogPtr,
"OBS.START \"%s\" \n", cleanString);}
558 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS TARG NAME");
559 if (qfitsString == NULL)
560 fprintf (midiQcLogPtr,
"OBS.TARG.NAME %s \n", emptyString);
561 else {cleanUpString (qfitsString, cleanString);
562 fprintf (midiQcLogPtr,
"OBS.TARG.NAME \"%s\" \n", cleanString);}
564 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OCS EXPO1 FNAME1");
565 if (qfitsString == NULL)
566 fprintf (midiQcLogPtr,
"OCS.EXPO1.FNAME1 %s \n", emptyString);
567 else {cleanUpString (qfitsString, cleanString);
568 fprintf (midiQcLogPtr,
"OCS.EXPO1.FNAME1 \"%s\" \n", cleanString);}
570 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO TPL ID");
571 if (qfitsString == NULL)
572 fprintf (midiQcLogPtr,
"TPL.ID %s \n", emptyString);
573 else {cleanUpString (qfitsString, cleanString);
574 fprintf (midiQcLogPtr,
"TPL.ID \"%s\" \n", cleanString);}
576 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO TPL START");
577 if (qfitsString == NULL)
578 fprintf (midiQcLogPtr,
"TPL.START %s \n", emptyString);
579 else {cleanUpString (qfitsString, cleanString);
580 fprintf (midiQcLogPtr,
"TPL.START \"%s\" \n", cleanString);}
604 void addProdInfoToDetRonQcLog (
606 MidiFiles *fileNames,
613 const char routine[] =
"addProdInfoToDetRonQcLog";
615 FILE *inFitsBatchPtr;
616 char *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
617 *stringTemp, *classification;
623 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
624 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
630 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
631 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
632 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
633 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
634 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
635 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
639 newTime = gmtime (&now);
640 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
643 fprintf (midiQcLogPtr,
"PRO.TYPE \"%s\" \n", format->obsType);
644 fprintf (midiQcLogPtr,
"PRO.CATG \"REDUCED_DETRON\" \n");
645 fprintf (midiQcLogPtr,
"PRO.ARCFILE \"%s\" \n", fileNames->archFileName);
646 fprintf (midiQcLogPtr,
"PRO.PIPEDATE \"%s\" \n", currentTime);
647 fprintf (midiQcLogPtr,
"PRO.VERSION \"%s\" \n", MIDI_PIPE_VERSION);
648 fprintf (midiQcLogPtr,
"PRO.PIPEFILE \"%s\" \n", fileNames->pipeFileName);
649 fprintf (midiQcLogPtr,
"PRO.DID \"%s\" \n", MIDI_QC_DIC_VERSION);
652 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
655 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
656 free (messageBuffer);
660 free (classification);
667 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
669 sprintf (classification,
"%s",
"");
670 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
673 if (strcmp (classification,
"") == 0)
675 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
676 if (stringQfits == NULL)
678 sprintf (classification,
"%s",
"UNKNOWN");
679 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
683 cleanUpString (stringQfits, cleanString);
684 sprintf (classification,
"%s", cleanString);
687 removePathName (messageBuffer, midiReportPtr);
688 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.NAME \"%s\" \n", i, messageBuffer);
689 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.CATG \"%s\" \n", i++, classification);
691 fclose (inFitsBatchPtr);
693 fprintf (midiQcLogPtr,
"QC.DETRON.MEDIAN %f \n", median);
696 free (messageBuffer);
701 free (classification);