26 #include "midiGlobal.h"
28 #include "errorHandling.h"
29 #include "midiFitsUtility.h"
30 #include "fileHandling.h"
31 #include "createProdDspTrn.h"
56 void createDspTrnProd (
59 DispersiveTrans *trans,
65 const char routine[] =
"createDspTrnProd";
66 char *classification, *stringTemp;
69 int i, j, k, l, arraySize;
74 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
75 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
77 cpl_msg_info(cpl_func,
"\nCreating Product files for DSP_TRN from batch %d \n", batchNumber);
78 cpl_msg_info(cpl_func,
"--------------------------------------------- \n");
79 fprintf (midiReportPtr,
"\nCreating Product for DSP_TRN from batch %d \n", batchNumber);
80 fprintf (midiReportPtr,
"--------------------------------------- \n");
87 createDspTrnPrimHead (fileNames, format, arraySize, trans, error);
90 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create Primary Header extension");
95 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
96 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
97 dspTrnImage = (
float *) calloc (arraySize * arraySize,
sizeof (
float));
100 for (i = 0; i < 3; i++)
102 for (j = 0; j < 100; j++)
104 for (k = 0; k < arraySize; k++)
106 l = (i * 100 + j) * arraySize + k;
107 dspTrnImage[l] = trans->transmission[i];
112 qdDspTrn.filename = fileNames->outFitsName;
113 qdDspTrn.npix = arraySize * arraySize;
114 qdDspTrn.ptype = PTYPE_FLOAT;
115 qdDspTrn.fbuf = dspTrnImage;
116 qdDspTrn.out_ptype = BPP_IEEE_FLOAT;
117 qfits_pixdump (&qdDspTrn);
122 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
124 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
131 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
132 sprintf (classification,
"%s",
"");
133 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
136 createDspTrnQcLog (fileNames->inFitsName, error);
138 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot copy keywords to QC log");
141 addProdInfoToDspTrnQcLog (format, fileNames, trans, error);
144 fclose (inFitsBatchPtr);
147 free (classification);
167 void createDspTrnPrimHead (
168 MidiFiles *fileNames,
171 DispersiveTrans *trans,
177 const char routine[] =
"createDspTrnPrimHead";
178 qfits_header *outFitsHeader;
179 FILE *inFitsBatchPtr=NULL, *outFitsPtr;
181 char *textBuff, *stringQfits, *messageBuffer, *currentTime, *cleanString,
182 *stringTemp, *classification, *sWidthX, *sWidthY, *tech;
189 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
190 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
196 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
198 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
204 tech = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
205 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
206 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
207 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
208 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
209 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
210 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
211 sWidthX = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
212 sWidthY = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
216 newTime = gmtime (&now);
217 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
220 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
221 sprintf (classification,
"%s",
"");
222 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
225 outFitsHeader = qfits_header_read (fileNames->inFitsName);
226 if (outFitsHeader == NULL)
229 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load header from the input FITS file");
230 free (messageBuffer);
234 free (classification);
242 sprintf (sWidthY,
"%d", arraySize);
243 sprintf (sWidthX,
"%d", arraySize);
246 qfits_header_mod (outFitsHeader,
"BITPIX",
"-32",
"number of bits per pixel");
247 qfits_header_mod (outFitsHeader,
"NAXIS",
"2",
"number of data axes");
248 qfits_header_add (outFitsHeader,
"NAXIS1", sWidthX,
"", NULL);
249 qfits_header_add (outFitsHeader,
"NAXIS2", sWidthY,
"", NULL);
250 qfits_header_mod (outFitsHeader,
"INSTRUME",
"MIDI",
"MIDI Raw Data Display FITS created by DRS pipeline" );
254 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO TYPE", format->obsType,
"MIDI pipeline product type", NULL);
255 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO CATG",
"REDUCED_DSPTRN",
"Pipeline product category", NULL);
256 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO ARCFILE", fileNames->archFileName,
"Arcfile name of first raw file", NULL);
257 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO PIPEDATE", currentTime,
"Pipeline run date",
"");
258 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION,
"Pipeline version", NULL);
259 qfits_header_add (outFitsHeader,
"PIPEFILE", fileNames->pipeFileName,
"Pipeline product file name", NULL);
260 qfits_header_add (outFitsHeader,
"HIERARCH ESO PRO DID", MIDI_QC_DIC_VERSION,
"QC dictionary version", NULL);
263 rewind (inFitsBatchPtr);
267 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
269 sprintf (classification,
"%s",
"");
270 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
273 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR TECH");
274 if (stringQfits == NULL)
276 sprintf (tech,
"%s",
"UNKNOWN");
277 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Technique");
281 cleanUpString (stringQfits, cleanString);
282 sprintf (tech,
"%s", cleanString);
286 if (strcmp (classification,
"") == 0)
288 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
289 if (stringQfits == NULL)
291 sprintf (classification,
"%s",
"UNKNOWN");
292 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
296 cleanUpString (stringQfits, cleanString);
297 sprintf (classification,
"%s", cleanString);
300 removePathName (messageBuffer, midiReportPtr);
301 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d NAME", i+1);
302 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"FITS file name",
"");
303 sprintf (textBuff,
"HIERARCH ESO PRO REC1 RAW%d CATG", i+1);
304 qfits_header_add (outFitsHeader, textBuff, classification,
"Observation Categoty",
"");
307 fclose (inFitsBatchPtr);
310 for (i = 0; i < trans->numOfFiles; i++)
312 if (strcmp (trans->grismId[i],
"OPEN") == 0)
314 sprintf (messageBuffer,
"%s", trans->grismId[i]);
315 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM NAME", i+1);
316 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Grism Name",
"");
317 sprintf (messageBuffer,
"%s", trans->filterName[i]);
318 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM FIL", i+1);
319 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Filter Name",
"");
320 sprintf (messageBuffer,
"%0.2f", trans->target[i].xCoord);
321 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM X", i+1);
322 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"x coordinate",
"");
323 sprintf (messageBuffer,
"%0.2f", trans->target[i].yCoord);
324 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM Y", i+1);
325 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"y coordinate",
"");
326 sprintf (messageBuffer,
"%0.2f", trans->target[i].dxCoord);
327 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM DX", i+1);
328 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Shift x coordinate",
"");
329 sprintf (messageBuffer,
"%0.2f", trans->target[i].dyCoord);
330 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM DY", i+1);
331 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Shift y coordinate",
"");
332 sprintf (messageBuffer,
"%0.4f", trans->integTime[i]);
333 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM EXT", i+1);
334 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Integration time",
"");
335 sprintf (messageBuffer,
"%0.2f", trans->meanFlux[i]);
336 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d IM CNT", i+1);
337 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Mean flux",
"");
339 else if (strcmp (trans->grismId[i],
"GRISM") == 0)
341 sprintf (messageBuffer,
"%s", trans->grismId[i]);
342 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR NAME", i+1);
343 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Grism Name",
"");
344 sprintf (messageBuffer,
"%s", trans->filterName[i]);
345 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR FIL", i+1);
346 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Filter Name",
"");
347 sprintf (messageBuffer,
"%0.2f", trans->target[i].xCoord);
348 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR X", i+1);
349 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"x coordinate",
"");
350 sprintf (messageBuffer,
"%0.2f", trans->target[i].yCoord);
351 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR Y", i+1);
352 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"y coordinate",
"");
353 sprintf (messageBuffer,
"%0.2f", trans->target[i].dxCoord);
354 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR DX", i+1);
355 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Shift x coordinate",
"");
356 sprintf (messageBuffer,
"%0.2f", trans->target[i].dyCoord);
357 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR DY", i+1);
358 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Shift y coordinate",
"");
359 sprintf (messageBuffer,
"%0.4f", trans->integTime[i]);
360 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR EXT", i+1);
361 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Integration time",
"");
362 sprintf (messageBuffer,
"%0.2f", trans->meanFlux[i]);
363 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR CNT", i+1);
364 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Mean flux",
"");
365 if (i == 3 || i == 4 || i == 5)
367 sprintf (messageBuffer,
"%0.6f", trans->transmission[i-3]);
368 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d GR TRANS", i+1);
369 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Transmissivity",
"");
372 else if (strcmp (trans->grismId[i],
"PRISM") == 0)
374 sprintf (messageBuffer,
"%s", trans->grismId[i]);
375 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR NAME", i+1);
376 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Grism Name",
"");
377 sprintf (messageBuffer,
"%s", trans->filterName[i]);
378 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR FIL", i+1);
379 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Filter Name",
"");
380 sprintf (messageBuffer,
"%0.2f", trans->target[i].xCoord);
381 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR X", i+1);
382 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"x coordinate",
"");
383 sprintf (messageBuffer,
"%0.2f", trans->target[i].yCoord);
384 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR Y", i+1);
385 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"y coordinate",
"");
386 sprintf (messageBuffer,
"%0.2f", trans->target[i].dxCoord);
387 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR DX", i+1);
388 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Shift x coordinate",
"");
389 sprintf (messageBuffer,
"%0.2f", trans->target[i].dyCoord);
390 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR DY", i+1);
391 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Shift y coordinate",
"");
392 sprintf (messageBuffer,
"%0.4f", trans->integTime[i]);
393 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR EXT", i+1);
394 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Integration time",
"");
395 sprintf (messageBuffer,
"%0.2f", trans->meanFlux[i]);
396 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR CNT", i+1);
397 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Mean flux",
"");
398 if (i == 3 || i == 4 || i == 5)
400 sprintf (messageBuffer,
"%0.6f", trans->transmission[i-3]);
401 sprintf (textBuff,
"HIERARCH ESO QC TRN F%d PR TRANS", i+1);
402 qfits_header_add (outFitsHeader, textBuff, messageBuffer,
"Transmissivity",
"");
408 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH1",
"TBD",
"TBD",
"");
409 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH2",
"TBD",
"TBD",
"");
410 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH3",
"TBD",
"TBD",
"");
411 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH4",
"TBD",
"TBD",
"");
412 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH5",
"TBD",
"TBD",
"");
413 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH6",
"TBD",
"TBD",
"");
414 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH7",
"TBD",
"TBD",
"");
415 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH8",
"TBD",
"TBD",
"");
416 qfits_header_add (outFitsHeader,
"HIERARCH ESO QC PLACEH9",
"TBD",
"TBD",
"");
419 if (stat (fileNames->outFitsName, &buf) == 0)
remove (fileNames->outFitsName);
421 outFitsPtr = fopen (fileNames->outFitsName,
"w");
425 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create output FITS file");
426 free (messageBuffer);
430 free (classification);
437 cpl_msg_info(cpl_func,
"Created Product FITS file: %s \n", fileNames->outFitsName);
438 fprintf (midiReportPtr,
"Created Product FITS file: %s \n", fileNames->outFitsName);
441 qfits_header_sort (&outFitsHeader);
442 qfits_header_dump (outFitsHeader, outFitsPtr);
444 qfits_header_destroy (outFitsHeader);
447 free (messageBuffer);
451 free (classification);
474 void createDspTrnQcLog (
482 const char routine[] =
"createDspTrnQcLog";
483 char *qfitsString, *emptyString, *cleanString;
487 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
488 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
494 emptyString = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
495 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
498 strcpy (emptyString,
"\"UNKNOWN\"");
501 qfitsString = qfits_query_hdr (inFitsName,
"ARCFILE");
502 if (qfitsString == NULL)
503 fprintf (midiQcLogPtr,
"ARCFILE %s \n", emptyString);
504 else {cleanUpString (qfitsString, cleanString);
505 fprintf (midiQcLogPtr,
"ARCFILE \"%s\" \n", cleanString);}
507 qfitsString = qfits_query_hdr (inFitsName,
"TELESCOP");
508 if (qfitsString == NULL)
509 fprintf (midiQcLogPtr,
"TELESCOP %s \n", emptyString);
510 else {cleanUpString (qfitsString, cleanString);
511 fprintf (midiQcLogPtr,
"TELESCOP \"%s\" \n", cleanString);}
513 qfitsString = qfits_query_hdr (inFitsName,
"INSTRUME");
514 if (qfitsString == NULL)
515 fprintf (midiQcLogPtr,
"INSTRUME %s \n", emptyString);
516 else {cleanUpString (qfitsString, cleanString);
517 fprintf (midiQcLogPtr,
"INSTRUME \"%s\" \n", cleanString);}
519 qfitsString = qfits_query_hdr (inFitsName,
"MJD-OBS");
520 if (qfitsString == NULL)
521 fprintf (midiQcLogPtr,
"MJD-OBS %s \n", emptyString);
522 else {cleanUpString (qfitsString, cleanString);
523 fprintf (midiQcLogPtr,
"MJD-OBS \"%s\" \n", cleanString);}
525 qfitsString = qfits_query_hdr (inFitsName,
"DATE-OBS");
526 if (qfitsString == NULL)
527 fprintf (midiQcLogPtr,
"DATE-OBS %s \n", emptyString);
528 else {cleanUpString (qfitsString, cleanString);
529 fprintf (midiQcLogPtr,
"DATE-OBS \"%s\" \n", cleanString);}
531 qfitsString = qfits_query_hdr (inFitsName,
"UTC");
532 if (qfitsString == NULL)
533 fprintf (midiQcLogPtr,
"UTC %s \n", emptyString);
534 else {cleanUpString (qfitsString, cleanString);
535 fprintf (midiQcLogPtr,
"UTC %s \n", cleanString);}
537 qfitsString = qfits_query_hdr (inFitsName,
"LST");
538 if (qfitsString == NULL)
539 fprintf (midiQcLogPtr,
"LST %s \n", emptyString);
540 else {cleanUpString (qfitsString, cleanString);
541 fprintf (midiQcLogPtr,
"LST %s \n", cleanString);}
543 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET CHIP NX");
544 if (qfitsString == NULL)
545 fprintf (midiQcLogPtr,
"DET.CHIP.NX %s \n", emptyString);
546 else {cleanUpString (qfitsString, cleanString);
547 fprintf (midiQcLogPtr,
"DET.CHIP.NX %s \n", cleanString);}
549 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET CHIP NY");
550 if (qfitsString == NULL)
551 fprintf (midiQcLogPtr,
"DET.CHIP.NY %s \n", emptyString);
552 else {cleanUpString (qfitsString, cleanString);
553 fprintf (midiQcLogPtr,
"DET.CHIP.NY %s \n", cleanString);}
555 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET DIT");
556 if (qfitsString == NULL)
557 fprintf (midiQcLogPtr,
"DET.DIT %s \n", emptyString);
558 else {cleanUpString (qfitsString, cleanString);
559 fprintf (midiQcLogPtr,
"DET.DIT %s \n", cleanString);}
561 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET DITDELAY");
562 if (qfitsString == NULL)
563 fprintf (midiQcLogPtr,
"DET.DITDELAY %s \n", emptyString);
564 else {cleanUpString (qfitsString, cleanString);
565 fprintf (midiQcLogPtr,
"DET.DITDELAY %s \n", cleanString);}
567 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET INT MODE");
568 if (qfitsString == NULL)
569 fprintf (midiQcLogPtr,
"DET.INT.MODE %s \n", emptyString);
570 else {cleanUpString (qfitsString, cleanString);
571 fprintf (midiQcLogPtr,
"DET.INT.MODE \"%s\" \n", cleanString);}
573 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET NDIT");
574 if (qfitsString == NULL)
575 fprintf (midiQcLogPtr,
"DET.NDIT %s \n", emptyString);
576 else {cleanUpString (qfitsString, cleanString);
577 fprintf (midiQcLogPtr,
"DET.NDIT %s \n", cleanString);}
579 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET NRTS MODE");
580 if (qfitsString == NULL)
581 fprintf (midiQcLogPtr,
"DET.NRTS.MODE %s \n", emptyString);
582 else {cleanUpString (qfitsString, cleanString);
583 fprintf (midiQcLogPtr,
"DET.NRTS.MODE \"%s\" \n", cleanString);}
585 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN1 NX");
586 if (qfitsString == NULL)
587 fprintf (midiQcLogPtr,
"DET.WIN1.NX %s \n", emptyString);
588 else {cleanUpString (qfitsString, cleanString);
589 fprintf (midiQcLogPtr,
"DET.WIN1.NX %s \n", cleanString);}
591 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN1 NY");
592 if (qfitsString == NULL)
593 fprintf (midiQcLogPtr,
"DET.WIN1.NY %s \n", emptyString);
594 else {cleanUpString (qfitsString, cleanString);
595 fprintf (midiQcLogPtr,
"DET.WIN1.NY %s \n", cleanString);}
597 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN2 NX");
598 if (qfitsString == NULL)
599 fprintf (midiQcLogPtr,
"DET.WIN2.NX %s \n", emptyString);
600 else {cleanUpString (qfitsString, cleanString);
601 fprintf (midiQcLogPtr,
"DET.WIN2.NX %s \n", cleanString);}
603 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DET WIN2 NY");
604 if (qfitsString == NULL)
605 fprintf (midiQcLogPtr,
"DET.WIN2.NY %s \n", emptyString);
606 else {cleanUpString (qfitsString, cleanString);
607 fprintf (midiQcLogPtr,
"DET.WIN2.NY %s \n", cleanString);}
609 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR CATG");
610 if (qfitsString == NULL)
611 fprintf (midiQcLogPtr,
"DPR.CATG %s \n", emptyString);
612 else {cleanUpString (qfitsString, cleanString);
613 fprintf (midiQcLogPtr,
"DPR.CATG \"%s\" \n", cleanString);}
615 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR TECH");
616 if (qfitsString == NULL)
617 fprintf (midiQcLogPtr,
"DPR.TECH %s \n", emptyString);
618 else {cleanUpString (qfitsString, cleanString);
619 fprintf (midiQcLogPtr,
"DPR.TECH \"%s\" \n", cleanString);}
621 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO DPR TYPE");
622 if (qfitsString == NULL)
623 fprintf (midiQcLogPtr,
"DPR.TYPE %s \n", emptyString);
624 else {cleanUpString (qfitsString, cleanString);
625 fprintf (midiQcLogPtr,
"DPR.TYPE \"%s\" \n", cleanString);}
627 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS CAM NAME");
628 if (qfitsString == NULL)
629 fprintf (midiQcLogPtr,
"INS.CAM.NAME %s \n", emptyString);
630 else {cleanUpString (qfitsString, cleanString);
631 fprintf (midiQcLogPtr,
"INS.CAM.NAME \"%s\" \n", cleanString);}
633 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS FIL NAME");
634 if (qfitsString == NULL)
635 fprintf (midiQcLogPtr,
"INS.FILT.NAME %s \n", emptyString);
636 else {cleanUpString (qfitsString, cleanString);
637 fprintf (midiQcLogPtr,
"INS.FILT.NAME \"%s\" \n", cleanString);}
639 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS GRIS NAME");
640 if (qfitsString == NULL)
641 fprintf (midiQcLogPtr,
"INS.GRIS.NAME %s \n", emptyString);
642 else {cleanUpString (qfitsString, cleanString);
643 fprintf (midiQcLogPtr,
"INS.GRIS.NAME \"%s\" \n", cleanString);}
645 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS MODE");
646 if (qfitsString == NULL)
647 fprintf (midiQcLogPtr,
"INS.MODE %s \n", emptyString);
648 else {cleanUpString (qfitsString, cleanString);
649 fprintf (midiQcLogPtr,
"INS.MODE \"%s\" \n", cleanString);}
651 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS OPT1 NAME");
652 if (qfitsString == NULL)
653 fprintf (midiQcLogPtr,
"INS.OPT1.NAME %s \n", emptyString);
654 else {cleanUpString (qfitsString, cleanString);
655 fprintf (midiQcLogPtr,
"INS.OPT1.NAME \"%s\" \n", cleanString);}
657 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS OPT1 TYPE");
658 if (qfitsString == NULL)
659 fprintf (midiQcLogPtr,
"INS.OPT1.TYPE %s \n", emptyString);
660 else {cleanUpString (qfitsString, cleanString);
661 fprintf (midiQcLogPtr,
"INS.OPT1.TYPE \"%s\" \n", cleanString);}
663 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS SHUT NAME");
664 if (qfitsString == NULL)
665 fprintf (midiQcLogPtr,
"INS.SHUT.NAME %s \n", emptyString);
666 else {cleanUpString (qfitsString, cleanString);
667 fprintf (midiQcLogPtr,
"INS.SHUT.NAME \"%s\" \n", cleanString);}
669 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO INS SLIT NAME");
670 if (qfitsString == NULL)
671 fprintf (midiQcLogPtr,
"INS.SLIT.NAME %s \n", emptyString);
672 else {cleanUpString (qfitsString, cleanString);
673 fprintf (midiQcLogPtr,
"INS.SLIT.NAME \"%s\" \n", cleanString);}
675 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS ID");
676 if (qfitsString == NULL)
677 fprintf (midiQcLogPtr,
"OBS.ID %s \n", emptyString);
678 else {cleanUpString (qfitsString, cleanString);
679 fprintf (midiQcLogPtr,
"OBS.ID \"%s\" \n", cleanString);}
681 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS NAME");
682 if (qfitsString == NULL)
683 fprintf (midiQcLogPtr,
"OBS.NAME %s \n", emptyString);
684 else {cleanUpString (qfitsString, cleanString);
685 fprintf (midiQcLogPtr,
"OBS.NAME \"%s\" \n", cleanString);}
687 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PI-COI ID");
688 if (qfitsString == NULL)
689 fprintf (midiQcLogPtr,
"OBS.PI-COI.ID %s \n", emptyString);
690 else {cleanUpString (qfitsString, cleanString);
691 fprintf (midiQcLogPtr,
"OBS.PI-COI.ID \"%s\" \n", cleanString);}
693 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PI-COI NAME");
694 if (qfitsString == NULL)
695 fprintf (midiQcLogPtr,
"OBS.PI-COI.NAME %s \n", emptyString);
696 else {cleanUpString (qfitsString, cleanString);
697 fprintf (midiQcLogPtr,
"OBS.PI-COI.NAME \"%s\" \n", cleanString);}
699 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS PROG ID");
700 if (qfitsString == NULL)
701 fprintf (midiQcLogPtr,
"OBS.PROG.ID %s \n", emptyString);
702 else {cleanUpString (qfitsString, cleanString);
703 fprintf (midiQcLogPtr,
"OBS.PROG.ID \"%s\" \n", cleanString);}
705 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS START");
706 if (qfitsString == NULL)
707 fprintf (midiQcLogPtr,
"OBS.START %s \n", emptyString);
708 else {cleanUpString (qfitsString, cleanString);
709 fprintf (midiQcLogPtr,
"OBS.START \"%s\" \n", cleanString);}
711 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OBS TARG NAME");
712 if (qfitsString == NULL)
713 fprintf (midiQcLogPtr,
"OBS.TARG.NAME %s \n", emptyString);
714 else {cleanUpString (qfitsString, cleanString);
715 fprintf (midiQcLogPtr,
"OBS.TARG.NAME \"%s\" \n", cleanString);}
717 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO OCS EXPO1 FNAME1");
718 if (qfitsString == NULL)
719 fprintf (midiQcLogPtr,
"OCS.EXPO1.FNAME1 %s \n", emptyString);
720 else {cleanUpString (qfitsString, cleanString);
721 fprintf (midiQcLogPtr,
"OCS.EXPO1.FNAME1 \"%s\" \n", cleanString);}
723 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO TPL ID");
724 if (qfitsString == NULL)
725 fprintf (midiQcLogPtr,
"TPL.ID %s \n", emptyString);
726 else {cleanUpString (qfitsString, cleanString);
727 fprintf (midiQcLogPtr,
"TPL.ID \"%s\" \n", cleanString);}
729 qfitsString = qfits_query_hdr (inFitsName,
"HIERARCH ESO TPL START");
730 if (qfitsString == NULL)
731 fprintf (midiQcLogPtr,
"TPL.START %s \n", emptyString);
732 else {cleanUpString (qfitsString, cleanString);
733 fprintf (midiQcLogPtr,
"TPL.START \"%s\" \n", cleanString);}
758 void addProdInfoToDspTrnQcLog (
760 MidiFiles *fileNames,
761 DispersiveTrans *trans,
767 const char routine[] =
"addProdInfoToDspTrnQcLog";
769 FILE *inFitsBatchPtr;
770 char *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
771 *stringTemp, *classification;
777 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
778 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
784 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
785 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
786 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
787 textBuff = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
788 messageBuffer = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
789 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
793 newTime = gmtime (&now);
794 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
797 fprintf (midiQcLogPtr,
"PRO.TYPE \"%s\" \n", format->obsType);
798 fprintf (midiQcLogPtr,
"PRO.CATG \"REDUCED_DSPTRN\" \n");
799 fprintf (midiQcLogPtr,
"PRO.ARCFILE \"%s\" \n", fileNames->archFileName);
800 fprintf (midiQcLogPtr,
"PRO.PIPEDATE \"%s\" \n", currentTime);
801 fprintf (midiQcLogPtr,
"PRO.VERSION \"%s\" \n", MIDI_PIPE_VERSION);
802 fprintf (midiQcLogPtr,
"PRO.PIPEFILE \"%s\" \n", fileNames->pipeFileName);
803 fprintf (midiQcLogPtr,
"PRO.DID \"%s\" \n", MIDI_QC_DIC_VERSION);
806 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
809 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
810 free (messageBuffer);
814 free (classification);
821 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
823 sprintf (classification,
"%s",
"");
824 sscanf (stringTemp,
"%s%s", messageBuffer, classification);
827 if (strcmp (classification,
"") == 0)
829 stringQfits = qfits_query_hdr (messageBuffer,
"HIERARCH ESO DPR CATG");
830 if (stringQfits == NULL)
832 sprintf (classification,
"%s",
"UNKNOWN");
833 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot get Observation Category");
837 cleanUpString (stringQfits, cleanString);
838 sprintf (classification,
"%s", cleanString);
841 removePathName (messageBuffer, midiReportPtr);
842 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.NAME \"%s\" \n", i, messageBuffer);
843 fprintf (midiQcLogPtr,
"PRO.REC1.RAW%d.CATG \"%s\" \n", i++, classification);
845 fclose (inFitsBatchPtr);
847 for (i = 0; i < trans->numOfFiles; i++)
849 if (strcmp (trans->grismId[i],
"OPEN") == 0)
851 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.NAME \"%s\" \n", i+1, trans->grismId[i]);
852 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.FIL \"%s\" \n", i+1, trans->filterName[i]);
853 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.X %0.2f \n", i+1, trans->target[i].xCoord);
854 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.Y %0.2f \n", i+1, trans->target[i].yCoord);
855 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.DX %0.2f \n", i+1, trans->target[i].dxCoord);
856 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.DY %0.2f \n", i+1, trans->target[i].dyCoord);
857 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.EXT %0.4f \n", i+1, trans->integTime[i]);
858 fprintf (midiQcLogPtr,
"QC.TRN.F%d.IM.CNT %0.2f \n", i+1, trans->meanFlux[i]);
860 else if (strcmp (trans->grismId[i],
"PRISM") == 0)
862 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.NAME \"%s\" \n", i+1, trans->grismId[i]);
863 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.FIL \"%s\" \n", i+1, trans->filterName[i]);
864 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.X %0.2f \n", i+1, trans->target[i].xCoord);
865 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.Y %0.2f \n", i+1, trans->target[i].yCoord);
866 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.DX %0.2f \n", i+1, trans->target[i].dxCoord);
867 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.DY %0.2f \n", i+1, trans->target[i].dyCoord);
868 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.EXT %0.4f \n", i+1, trans->integTime[i]);
869 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.CNT %0.2f \n", i+1, trans->meanFlux[i]);
870 if (i == 3 || i == 4 || i == 5)
871 fprintf (midiQcLogPtr,
"QC.TRN.F%d.PR.TRANS %0.6f \n", i+1, trans->transmission[i-3]);
873 else if (strcmp (trans->grismId[i],
"GRISM") == 0)
875 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.NAME \"%s\" \n", i+1, trans->grismId[i]);
876 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.FIL \"%s\" \n", i+1, trans->filterName[i]);
877 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.X %0.2f \n", i+1, trans->target[i].xCoord);
878 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.Y %0.2f \n", i+1, trans->target[i].yCoord);
879 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.DX %0.2f \n", i+1, trans->target[i].dxCoord);
880 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.DY %0.2f \n", i+1, trans->target[i].dyCoord);
881 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.EXT %0.4f \n", i+1, trans->integTime[i]);
882 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.CNT %0.2f \n", i+1, trans->meanFlux[i]);
883 if (i == 3 || i == 4 || i == 5)
884 fprintf (midiQcLogPtr,
"QC.TRN.F%d.GR.TRANS %0.6f \n", i+1, trans->transmission[i-3]);
888 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Unknown Dispersive element");
890 free (messageBuffer);
894 free (classification);
901 free (messageBuffer);
906 free (classification);