00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <sys/stat.h>
00023 #include <stdio.h>
00024 #include <cpl.h>
00025 #include <time.h>
00026 #include "midiGlobal.h"
00027 #include "midiLib.h"
00028 #include "errorHandling.h"
00029 #include "midiFitsUtility.h"
00030 #include "fileHandling.h"
00031 #include "createProdDetRon.h"
00032 #include "qfits.h"
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 void createDetRonProd (
00054 MidiFiles *fileNames,
00055 ImageFormat *size,
00056 DetRonNoise *noise,
00057 int *error)
00058 {
00059
00060
00061
00062 const char routine[] = "createDetRonProd";
00063 qfitsdumper qdNoisePattern;
00064
00065
00066
00067 if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking routine '%s' \n", routine);
00068 if (diagnostic > 4) fprintf(midiReportPtr, "Invoking routine '%s' \n", routine);
00069
00070 cpl_msg_info(cpl_func,"\nCreating Product files for DET_RON from batch %d \n", batchNumber);
00071 cpl_msg_info(cpl_func,"--------------------------------------------- \n");
00072 fprintf (midiReportPtr, "\nCreating Product files for DET_RON from batch %d \n", batchNumber);
00073 fprintf (midiReportPtr, "--------------------------------------------- \n");
00074
00075
00076 *error = 0;
00077
00078
00079 createDetRonPrimHead (fileNames, size, noise, error);
00080 if (*error)
00081 {
00082 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot create Primary Header extension");
00083 return;
00084 }
00085
00086
00087 qdNoisePattern.filename = fileNames->outFitsName;
00088 qdNoisePattern.npix = size->iXWidth * size->iYWidth;
00089 qdNoisePattern.ptype = PTYPE_FLOAT;
00090 qdNoisePattern.fbuf = noise->pattern;
00091 qdNoisePattern.out_ptype = BPP_IEEE_FLOAT;
00092
00093 qfits_pixdump (&qdNoisePattern);
00094
00095
00096 createDetRonQcLog (fileNames->inFitsName, error);
00097 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot copy keywords to QC log");
00098
00099
00100 addProdInfoToDetRonQcLog (size, fileNames, noise->median, error);
00101
00102 return;
00103 }
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 void createDetRonPrimHead (
00121 MidiFiles *fileNames,
00122 ImageFormat *size,
00123 DetRonNoise *noise,
00124 int *error)
00125 {
00126
00127
00128
00129 const char routine[] = "createDetRonPrimHead";
00130 qfits_header *outFitsHeader;
00131 FILE *inFitsBatchPtr=NULL, *outFitsPtr;
00132 int i;
00133 char *textBuff, *stringQfits, *messageBuffer, *currentTime, *cleanString,
00134 *stringTemp, *classification, *sWidthX, *sWidthY;
00135 time_t now;
00136 struct tm *newTime;
00137 struct stat buf;
00138
00139
00140
00141 if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking routine '%s' \n", routine);
00142 if (diagnostic > 4) fprintf(midiReportPtr, "Invoking routine '%s' \n", routine);
00143
00144
00145 *error = 0;
00146 if (diagnostic)cpl_msg_info(cpl_func,"Creating Primary FITS Header \n");
00147 fprintf (midiReportPtr, "Creating Primary FITS Header \n");
00148
00149
00150 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch, "r")) == NULL)
00151 {
00152 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot open input FITS file list");
00153 *error = 1;
00154 return;
00155 }
00156
00157
00158 textBuff = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00159 classification = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00160 stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00161 cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00162 messageBuffer = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00163 currentTime = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00164 sWidthX = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00165 sWidthY = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00166
00167
00168 now = time(NULL);
00169 newTime = gmtime (&now);
00170 strftime (currentTime, MIN_STRING_LENGTH, "%a %d %b %Y at %H:%M:%S", newTime);
00171
00172
00173 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
00174 sprintf (classification, "%s", "");
00175 sscanf (stringTemp, "%s%s", fileNames->inFitsName, classification);
00176
00177
00178 outFitsHeader = qfits_header_read (fileNames->inFitsName);
00179 if (outFitsHeader == NULL)
00180 {
00181 *error = 1;
00182 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot load header from the input FITS file");
00183 free (messageBuffer);
00184 free (currentTime);
00185 free (cleanString);
00186 free (stringTemp);
00187 free (classification);
00188 free (textBuff);
00189 free (sWidthX);
00190 free (sWidthY);
00191 return;
00192 }
00193
00194
00195 sprintf (sWidthY, "%d", size->iYWidth);
00196 sprintf (sWidthX, "%d", size->iXWidth);
00197
00198
00199 qfits_header_mod (outFitsHeader, "BITPIX", "-32", "number of bits per pixel");
00200 qfits_header_mod (outFitsHeader, "NAXIS", "2", "number of data axes");
00201 qfits_header_add (outFitsHeader, "NAXIS1", sWidthX, "", NULL);
00202 qfits_header_add (outFitsHeader, "NAXIS2", sWidthY, "", NULL);
00203 qfits_header_mod (outFitsHeader, "INSTRUME", "MIDI", "MIDI Raw Data Display FITS created by DRS pipeline" );
00204
00205
00206
00207 qfits_header_add (outFitsHeader, "HIERARCH ESO PRO TYPE", size->obsType, "MIDI pipeline product type", NULL);
00208 qfits_header_add (outFitsHeader, "HIERARCH ESO PRO CATG", "REDUCED_DETRON", "Pipeline product category", NULL);
00209 qfits_header_add (outFitsHeader, "HIERARCH ESO PRO ARCFILE", fileNames->archFileName, "Arcfile name of first raw file", NULL);
00210 qfits_header_add (outFitsHeader, "HIERARCH ESO PRO PIPEDATE", currentTime, "Pipeline run date", "");
00211 qfits_header_add (outFitsHeader, "HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION, "Pipeline version", NULL);
00212 qfits_header_add (outFitsHeader, "PIPEFILE", fileNames->pipeFileName, "Pipeline product file name", NULL);
00213 qfits_header_add (outFitsHeader, "HIERARCH ESO PRO DID", MIDI_QC_DIC_VERSION, "QC dictionary version", NULL);
00214
00215
00216 rewind (inFitsBatchPtr);
00217
00218
00219 i = 1;
00220 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
00221 {
00222 sprintf (classification, "%s", "");
00223 sscanf (stringTemp, "%s%s", messageBuffer, classification);
00224
00225
00226 if (strcmp (classification, "") == 0)
00227 {
00228 stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR CATG");
00229 if (stringQfits == NULL)
00230 {
00231 sprintf (classification, "%s", "UNKNOWN");
00232 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Category");
00233 }
00234 else
00235 {
00236 cleanUpString (stringQfits, cleanString);
00237 sprintf (classification, "%s", cleanString);
00238 }
00239 }
00240 removePathName (messageBuffer, midiReportPtr);
00241 sprintf (textBuff, "HIERARCH ESO PRO REC1 RAW%d NAME", i);
00242 qfits_header_add (outFitsHeader, textBuff, messageBuffer, "FITS file name", "");
00243 sprintf (textBuff, "HIERARCH ESO PRO REC1 RAW%d CATG", i++);
00244 qfits_header_add (outFitsHeader, textBuff, classification, "Observation Categoty", "");
00245 }
00246 fclose (inFitsBatchPtr);
00247
00248
00249 sprintf (messageBuffer, "%f", noise->median);
00250 qfits_header_add (outFitsHeader, "HIERARCH ESO QC DETRON MEDIAN", messageBuffer, "Median of noise pattern", "");
00251
00252
00253 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH1", "TBD", "TBD", "");
00254 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH2", "TBD", "TBD", "");
00255 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH3", "TBD", "TBD", "");
00256 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH4", "TBD", "TBD", "");
00257 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH5", "TBD", "TBD", "");
00258 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH6", "TBD", "TBD", "");
00259 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH7", "TBD", "TBD", "");
00260 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH8", "TBD", "TBD", "");
00261 qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH9", "TBD", "TBD", "");
00262
00263
00264 if (diagnostic)cpl_msg_info(cpl_func,"Creating Product FITS file %s \n", fileNames->outFitsName);
00265 fprintf (midiReportPtr, "Creating Product FITS file %s \n", fileNames->outFitsName);
00266 if (stat (fileNames->outFitsName, &buf) == 0) remove (fileNames->outFitsName);
00267 outFitsPtr = fopen (fileNames->outFitsName, "w");
00268 if (!outFitsPtr)
00269 {
00270 *error = 1;
00271 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot create output FITS file");
00272 free (messageBuffer);
00273 free (currentTime);
00274 free (cleanString);
00275 free (stringTemp);
00276 free (classification);
00277 free (textBuff);
00278 free (sWidthX);
00279 free (sWidthY);
00280 return;
00281 }
00282
00283 cpl_msg_info(cpl_func,"Created Product FITS file: %s \n", fileNames->outFitsName);
00284 fprintf (midiReportPtr, "Created Product FITS file: %s \n", fileNames->outFitsName);
00285
00286
00287 qfits_header_sort (&outFitsHeader);
00288 qfits_header_dump (outFitsHeader, outFitsPtr);
00289 fclose (outFitsPtr);
00290 qfits_header_destroy (outFitsHeader);
00291
00292
00293 free (messageBuffer);
00294 free (currentTime);
00295 free (cleanString);
00296 free (stringTemp);
00297 free (classification);
00298 free (textBuff);
00299 free (sWidthX);
00300 free (sWidthY);
00301
00302 return;
00303 }
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321 void createDetRonQcLog (
00322 char *inFitsName,
00323 int *error)
00324
00325 {
00326
00327
00328
00329 const char routine[] = "createDetRonQcLog";
00330 char *qfitsString, *emptyString, *cleanString;
00331
00332
00333
00334 if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking routine '%s' \n", routine);
00335 if (diagnostic > 4) fprintf(midiReportPtr, "Invoking routine '%s' \n", routine);
00336
00337
00338 *error = 0;
00339
00340
00341 emptyString = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00342 cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00343
00344
00345 strcpy (emptyString, "\"UNKNOWN\"");
00346
00347
00348 qfitsString = qfits_query_hdr (inFitsName, "ARCFILE");
00349 if (qfitsString == NULL)
00350 fprintf (midiQcLogPtr, "ARCFILE %s \n", emptyString);
00351 else {cleanUpString (qfitsString, cleanString);
00352 fprintf (midiQcLogPtr, "ARCFILE \"%s\" \n", cleanString);}
00353
00354 qfitsString = qfits_query_hdr (inFitsName, "TELESCOP");
00355 if (qfitsString == NULL)
00356 fprintf (midiQcLogPtr, "TELESCOP %s \n", emptyString);
00357 else {cleanUpString (qfitsString, cleanString);
00358 fprintf (midiQcLogPtr, "TELESCOP \"%s\" \n", cleanString);}
00359
00360 qfitsString = qfits_query_hdr (inFitsName, "INSTRUME");
00361 if (qfitsString == NULL)
00362 fprintf (midiQcLogPtr, "INSTRUME %s \n", emptyString);
00363 else {cleanUpString (qfitsString, cleanString);
00364 fprintf (midiQcLogPtr, "INSTRUME \"%s\" \n", cleanString);}
00365
00366 qfitsString = qfits_query_hdr (inFitsName, "MJD-OBS");
00367 if (qfitsString == NULL)
00368 fprintf (midiQcLogPtr, "MJD-OBS %s \n", emptyString);
00369 else {cleanUpString (qfitsString, cleanString);
00370 fprintf (midiQcLogPtr, "MJD-OBS \"%s\" \n", cleanString);}
00371
00372 qfitsString = qfits_query_hdr (inFitsName, "DATE-OBS");
00373 if (qfitsString == NULL)
00374 fprintf (midiQcLogPtr, "DATE-OBS %s \n", emptyString);
00375 else {cleanUpString (qfitsString, cleanString);
00376 fprintf (midiQcLogPtr, "DATE-OBS \"%s\" \n", cleanString);}
00377
00378 qfitsString = qfits_query_hdr (inFitsName, "UTC");
00379 if (qfitsString == NULL)
00380 fprintf (midiQcLogPtr, "UTC %s \n", emptyString);
00381 else {cleanUpString (qfitsString, cleanString);
00382 fprintf (midiQcLogPtr, "UTC %s \n", cleanString);}
00383
00384 qfitsString = qfits_query_hdr (inFitsName, "LST");
00385 if (qfitsString == NULL)
00386 fprintf (midiQcLogPtr, "LST %s \n", emptyString);
00387 else {cleanUpString (qfitsString, cleanString);
00388 fprintf (midiQcLogPtr, "LST %s \n", cleanString);}
00389
00390 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET CHIP NX");
00391 if (qfitsString == NULL)
00392 fprintf (midiQcLogPtr, "DET.CHIP.NX %s \n", emptyString);
00393 else {cleanUpString (qfitsString, cleanString);
00394 fprintf (midiQcLogPtr, "DET.CHIP.NX %s \n", cleanString);}
00395
00396 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET CHIP NY");
00397 if (qfitsString == NULL)
00398 fprintf (midiQcLogPtr, "DET.CHIP.NY %s \n", emptyString);
00399 else {cleanUpString (qfitsString, cleanString);
00400 fprintf (midiQcLogPtr, "DET.CHIP.NY %s \n", cleanString);}
00401
00402 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET DIT");
00403 if (qfitsString == NULL)
00404 fprintf (midiQcLogPtr, "DET.DIT %s \n", emptyString);
00405 else {cleanUpString (qfitsString, cleanString);
00406 fprintf (midiQcLogPtr, "DET.DIT %s \n", cleanString);}
00407
00408 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET DITDELAY");
00409 if (qfitsString == NULL)
00410 fprintf (midiQcLogPtr, "DET.DITDELAY %s \n", emptyString);
00411 else {cleanUpString (qfitsString, cleanString);
00412 fprintf (midiQcLogPtr, "DET.DITDELAY %s \n", cleanString);}
00413
00414 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET INT MODE");
00415 if (qfitsString == NULL)
00416 fprintf (midiQcLogPtr, "DET.INT.MODE %s \n", emptyString);
00417 else {cleanUpString (qfitsString, cleanString);
00418 fprintf (midiQcLogPtr, "DET.INT.MODE \"%s\" \n", cleanString);}
00419
00420 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET NDIT");
00421 if (qfitsString == NULL)
00422 fprintf (midiQcLogPtr, "DET.NDIT %s \n", emptyString);
00423 else {cleanUpString (qfitsString, cleanString);
00424 fprintf (midiQcLogPtr, "DET.NDIT %s \n", cleanString);}
00425
00426 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET NRTS MODE");
00427 if (qfitsString == NULL)
00428 fprintf (midiQcLogPtr, "DET.NRTS.MODE %s \n", emptyString);
00429 else {cleanUpString (qfitsString, cleanString);
00430 fprintf (midiQcLogPtr, "DET.NRTS.MODE \"%s\" \n", cleanString);}
00431
00432 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN1 NX");
00433 if (qfitsString == NULL)
00434 fprintf (midiQcLogPtr, "DET.WIN1.NX %s \n", emptyString);
00435 else {cleanUpString (qfitsString, cleanString);
00436 fprintf (midiQcLogPtr, "DET.WIN1.NX %s \n", cleanString);}
00437
00438 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN1 NY");
00439 if (qfitsString == NULL)
00440 fprintf (midiQcLogPtr, "DET.WIN1.NY %s \n", emptyString);
00441 else {cleanUpString (qfitsString, cleanString);
00442 fprintf (midiQcLogPtr, "DET.WIN1.NY %s \n", cleanString);}
00443
00444 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN2 NX");
00445 if (qfitsString == NULL)
00446 fprintf (midiQcLogPtr, "DET.WIN2.NX %s \n", emptyString);
00447 else {cleanUpString (qfitsString, cleanString);
00448 fprintf (midiQcLogPtr, "DET.WIN2.NX %s \n", cleanString);}
00449
00450 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN2 NY");
00451 if (qfitsString == NULL)
00452 fprintf (midiQcLogPtr, "DET.WIN2.NY %s \n", emptyString);
00453 else {cleanUpString (qfitsString, cleanString);
00454 fprintf (midiQcLogPtr, "DET.WIN2.NY %s \n", cleanString);}
00455
00456 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR CATG");
00457 if (qfitsString == NULL)
00458 fprintf (midiQcLogPtr, "DPR.CATG %s \n", emptyString);
00459 else {cleanUpString (qfitsString, cleanString);
00460 fprintf (midiQcLogPtr, "DPR.CATG \"%s\" \n", cleanString);}
00461
00462 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR TECH");
00463 if (qfitsString == NULL)
00464 fprintf (midiQcLogPtr, "DPR.TECH %s \n", emptyString);
00465 else {cleanUpString (qfitsString, cleanString);
00466 fprintf (midiQcLogPtr, "DPR.TECH \"%s\" \n", cleanString);}
00467
00468 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR TYPE");
00469 if (qfitsString == NULL)
00470 fprintf (midiQcLogPtr, "DPR.TYPE %s \n", emptyString);
00471 else {cleanUpString (qfitsString, cleanString);
00472 fprintf (midiQcLogPtr, "DPR.TYPE \"%s\" \n", cleanString);}
00473
00474 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS CAM NAME");
00475 if (qfitsString == NULL)
00476 fprintf (midiQcLogPtr, "INS.CAM.NAME %s \n", emptyString);
00477 else {cleanUpString (qfitsString, cleanString);
00478 fprintf (midiQcLogPtr, "INS.CAM.NAME \"%s\" \n", cleanString);}
00479
00480 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS FILT NAME");
00481 if (qfitsString == NULL)
00482 fprintf (midiQcLogPtr, "INS.FILT.NAME %s \n", emptyString);
00483 else {cleanUpString (qfitsString, cleanString);
00484 fprintf (midiQcLogPtr, "INS.FILT.NAME \"%s\" \n", cleanString);}
00485
00486 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS GRIS NAME");
00487 if (qfitsString == NULL)
00488 fprintf (midiQcLogPtr, "INS.GRIS.NAME %s \n", emptyString);
00489 else {cleanUpString (qfitsString, cleanString);
00490 fprintf (midiQcLogPtr, "INS.GRIS.NAME \"%s\" \n", cleanString);}
00491
00492 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS MODE");
00493 if (qfitsString == NULL)
00494 fprintf (midiQcLogPtr, "INS.MODE %s \n", emptyString);
00495 else {cleanUpString (qfitsString, cleanString);
00496 fprintf (midiQcLogPtr, "INS.MODE \"%s\" \n", cleanString);}
00497
00498 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS OPT1 NAME");
00499 if (qfitsString == NULL)
00500 fprintf (midiQcLogPtr, "INS.OPT1.NAME %s \n", emptyString);
00501 else {cleanUpString (qfitsString, cleanString);
00502 fprintf (midiQcLogPtr, "INS.OPT1.NAME \"%s\" \n", cleanString);}
00503
00504 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS OPT1 TYPE");
00505 if (qfitsString == NULL)
00506 fprintf (midiQcLogPtr, "INS.OPT1.TYPE %s \n", emptyString);
00507 else {cleanUpString (qfitsString, cleanString);
00508 fprintf (midiQcLogPtr, "INS.OPT1.TYPE \"%s\" \n", cleanString);}
00509
00510 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS SHUT NAME");
00511 if (qfitsString == NULL)
00512 fprintf (midiQcLogPtr, "INS.SHUT.NAME %s \n", emptyString);
00513 else {cleanUpString (qfitsString, cleanString);
00514 fprintf (midiQcLogPtr, "INS.SHUT.NAME \"%s\" \n", cleanString);}
00515
00516 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS SLIT NAME");
00517 if (qfitsString == NULL)
00518 fprintf (midiQcLogPtr, "INS.SLIT.NAME %s \n", emptyString);
00519 else {cleanUpString (qfitsString, cleanString);
00520 fprintf (midiQcLogPtr, "INS.SLIT.NAME \"%s\" \n", cleanString);}
00521
00522 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS ID");
00523 if (qfitsString == NULL)
00524 fprintf (midiQcLogPtr, "OBS.ID %s \n", emptyString);
00525 else {cleanUpString (qfitsString, cleanString);
00526 fprintf (midiQcLogPtr, "OBS.ID \"%s\" \n", cleanString);}
00527
00528 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS NAME");
00529 if (qfitsString == NULL)
00530 fprintf (midiQcLogPtr, "OBS.NAME %s \n", emptyString);
00531 else {cleanUpString (qfitsString, cleanString);
00532 fprintf (midiQcLogPtr, "OBS.NAME \"%s\" \n", cleanString);}
00533
00534 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PI-COI ID");
00535 if (qfitsString == NULL)
00536 fprintf (midiQcLogPtr, "OBS.PI-COI.ID %s \n", emptyString);
00537 else {cleanUpString (qfitsString, cleanString);
00538 fprintf (midiQcLogPtr, "OBS.PI-COI.ID \"%s\" \n", cleanString);}
00539
00540 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PI-COI NAME");
00541 if (qfitsString == NULL)
00542 fprintf (midiQcLogPtr, "OBS.PI-COI.NAME %s \n", emptyString);
00543 else {cleanUpString (qfitsString, cleanString);
00544 fprintf (midiQcLogPtr, "OBS.PI-COI.NAME \"%s\" \n", cleanString);}
00545
00546 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PROG ID");
00547 if (qfitsString == NULL)
00548 fprintf (midiQcLogPtr, "OBS.PROG.ID %s \n", emptyString);
00549 else {cleanUpString (qfitsString, cleanString);
00550 fprintf (midiQcLogPtr, "OBS.PROG.ID \"%s\" \n", cleanString);}
00551
00552 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS START");
00553 if (qfitsString == NULL)
00554 fprintf (midiQcLogPtr, "OBS.START %s \n", emptyString);
00555 else {cleanUpString (qfitsString, cleanString);
00556 fprintf (midiQcLogPtr, "OBS.START \"%s\" \n", cleanString);}
00557
00558 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS TARG NAME");
00559 if (qfitsString == NULL)
00560 fprintf (midiQcLogPtr, "OBS.TARG.NAME %s \n", emptyString);
00561 else {cleanUpString (qfitsString, cleanString);
00562 fprintf (midiQcLogPtr, "OBS.TARG.NAME \"%s\" \n", cleanString);}
00563
00564 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OCS EXPO1 FNAME1");
00565 if (qfitsString == NULL)
00566 fprintf (midiQcLogPtr, "OCS.EXPO1.FNAME1 %s \n", emptyString);
00567 else {cleanUpString (qfitsString, cleanString);
00568 fprintf (midiQcLogPtr, "OCS.EXPO1.FNAME1 \"%s\" \n", cleanString);}
00569
00570 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO TPL ID");
00571 if (qfitsString == NULL)
00572 fprintf (midiQcLogPtr, "TPL.ID %s \n", emptyString);
00573 else {cleanUpString (qfitsString, cleanString);
00574 fprintf (midiQcLogPtr, "TPL.ID \"%s\" \n", cleanString);}
00575
00576 qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO TPL START");
00577 if (qfitsString == NULL)
00578 fprintf (midiQcLogPtr, "TPL.START %s \n", emptyString);
00579 else {cleanUpString (qfitsString, cleanString);
00580 fprintf (midiQcLogPtr, "TPL.START \"%s\" \n", cleanString);}
00581
00582
00583
00584 free (emptyString);
00585 free (cleanString);
00586
00587 return;
00588 }
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604 void addProdInfoToDetRonQcLog (
00605 ImageFormat *format,
00606 MidiFiles *fileNames,
00607 float median,
00608 int *error)
00609 {
00610
00611
00612
00613 const char routine[] = "addProdInfoToDetRonQcLog";
00614 int i;
00615 FILE *inFitsBatchPtr;
00616 char *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
00617 *stringTemp, *classification;
00618 time_t now;
00619 struct tm *newTime;
00620
00621
00622
00623 if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking routine '%s' \n", routine);
00624 if (diagnostic > 4) fprintf (midiReportPtr, "Invoking routine '%s' \n", routine);
00625
00626
00627 *error = 0;
00628
00629
00630 classification = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00631 stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00632 cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00633 textBuff = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00634 messageBuffer = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00635 currentTime = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00636
00637
00638 now = time(NULL);
00639 newTime = gmtime (&now);
00640 strftime (currentTime, MIN_STRING_LENGTH, "%a %d %b %Y at %H:%M:%S", newTime);
00641
00642
00643 fprintf (midiQcLogPtr, "PRO.TYPE \"%s\" \n", format->obsType);
00644 fprintf (midiQcLogPtr, "PRO.CATG \"REDUCED_DETRON\" \n");
00645 fprintf (midiQcLogPtr, "PRO.ARCFILE \"%s\" \n", fileNames->archFileName);
00646 fprintf (midiQcLogPtr, "PRO.PIPEDATE \"%s\" \n", currentTime);
00647 fprintf (midiQcLogPtr, "PRO.VERSION \"%s\" \n", MIDI_PIPE_VERSION);
00648 fprintf (midiQcLogPtr, "PRO.PIPEFILE \"%s\" \n", fileNames->pipeFileName);
00649 fprintf (midiQcLogPtr, "PRO.DID \"%s\" \n", MIDI_QC_DIC_VERSION);
00650
00651
00652 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch, "r")) == NULL)
00653 {
00654 *error = 1;
00655 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot open input FITS file list");
00656 free (messageBuffer);
00657 free (currentTime);
00658 free (cleanString);
00659 free (stringTemp);
00660 free (classification);
00661 free (textBuff);
00662 return;
00663 }
00664
00665
00666 i = 1;
00667 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
00668 {
00669 sprintf (classification, "%s", "");
00670 sscanf (stringTemp, "%s%s", messageBuffer, classification);
00671
00672
00673 if (strcmp (classification, "") == 0)
00674 {
00675 stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR CATG");
00676 if (stringQfits == NULL)
00677 {
00678 sprintf (classification, "%s", "UNKNOWN");
00679 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Category");
00680 }
00681 else
00682 {
00683 cleanUpString (stringQfits, cleanString);
00684 sprintf (classification, "%s", cleanString);
00685 }
00686 }
00687 removePathName (messageBuffer, midiReportPtr);
00688 fprintf (midiQcLogPtr, "PRO.REC1.RAW%d.NAME \"%s\" \n", i, messageBuffer);
00689 fprintf (midiQcLogPtr, "PRO.REC1.RAW%d.CATG \"%s\" \n", i++, classification);
00690 }
00691 fclose (inFitsBatchPtr);
00692
00693 fprintf (midiQcLogPtr, "QC.DETRON.MEDIAN %f \n", median);
00694
00695
00696 free (messageBuffer);
00697 free (currentTime);
00698 free (textBuff);
00699 free (cleanString);
00700 free (stringTemp);
00701 free (classification);
00702
00703 return;
00704 }
00705
00706