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