createProdAcq.c

00001 
00002 /******************************************************************************
00003 *******************************************************************************
00004 *               European Southern Observatory
00005 *          VLTI MIDI Maintenance Templates Software
00006 *
00007 * Module name:  createProdAcq.c
00008 * Description:  Contains routines for the product files handling
00009 *
00010 * History:      
00011 * 02-May-05     (csabet)
00012 *******************************************************************************
00013 ******************************************************************************/
00014 
00015 /******************************************************************************
00016 *   Compiler directives
00017 ******************************************************************************/
00018 
00019 /******************************************************************************
00020 *   Include files
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 "fileHandling.h"
00030 #include "createProdAcq.h"
00031 #include "qfits.h"
00032 
00033 /**********************************************************
00034 *   Global Variables 
00035 **********************************************************/
00036 
00037 /*============================ C O D E    A R E A ===========================*/
00038 
00039 
00040 
00041 /******************************************************************************
00042 *               European Southern Observatory
00043 *          VLTI MIDI Maintenance Templates Software
00044 *
00045 * Module name:  createAcqProd
00046 * Input/Output: See function arguments to avoid duplication
00047 * Description:  Creates output products
00048 *
00049 * History:      
00050 * 25-Apr-05     (csabet) Created
00051 ******************************************************************************/
00052 void createAcqProd (
00053     MidiFiles        *fileNames,    // In: Pointer to the file structure
00054     ImageFormat        *format,    // In: Pointer to the image format structure
00055     ImageQuality    *acqImage,    // In: Pointer to the image data structure
00056     int                *error)        // Ou: Error status
00057 {
00058 
00059     //    Local Declarations
00060     //    ------------------
00061     const char      routine[] = "createAcqProd";
00062     qfitsdumper     qdAcqImage;
00063     int                region, stringLength, i, length;
00064     char            *stringTemp=NULL, *localOutName=NULL;
00065     
00066     //    Algorithm
00067     //    ---------
00068     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
00069     if (diagnostic > 4) fprintf(midiReportPtr, "Invoking      routine   '%s' \n", routine);
00070 
00071    cpl_msg_info(cpl_func,"\nCreating Product files for Image Quality from batch  %d \n", batchNumber);
00072    cpl_msg_info(cpl_func,"--------------------------------------------------- \n");
00073     fprintf (midiReportPtr, "\nCreating Product files for Image Quality from batch  %d \n", batchNumber);
00074     fprintf (midiReportPtr, "--------------------------------------------------- \n");
00075     
00076     //    Reset parameters
00077     *error = 0;
00078 
00079     //    Allocate memory
00080     stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00081     localOutName = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00082 
00083     //    Modify output name
00084     stringLength = strlen (fileNames->outFitsName);
00085     strncpy (stringTemp, fileNames->outFitsName, stringLength-9);
00086 
00087     length = format->iXWidth * format->iYWidth;
00088     
00089     for (region = 0; region < format->numOfDetectorRegions; region++)
00090     {
00091         //    Create a local output name
00092         sprintf (localOutName, "%s_DATA%d.pro.fits", stringTemp, region+1);
00093         
00094         //    Create the primary header extension
00095         createAcqPrimHead (region, localOutName, fileNames, format, acqImage, error);
00096         if (*error)
00097         {
00098             free (stringTemp);
00099             free (localOutName);
00100             midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot create Primary Header extension");
00101             return;
00102         }
00103 
00104         //    Re-scale image
00105         for (i = 0; i < length; i++)
00106             acqImage->aveImage[region][i] += 0.0;
00107     
00108         //    Dumps data into the FITS file
00109         qdAcqImage.filename  = localOutName;
00110         qdAcqImage.npix      = format->iXWidth * format->iYWidth;
00111         qdAcqImage.ptype     = PTYPE_FLOAT;
00112         qdAcqImage.fbuf      = acqImage->aveImage[region];
00113         qdAcqImage.out_ptype = BPP_IEEE_FLOAT;
00114 
00115         qfits_pixdump (&qdAcqImage);
00116     }
00117 
00118     //    Copy keywords from the raw FITS file into the QC log
00119     createAcqQcLog (fileNames->inFitsName, error);
00120     if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot copy keywords to QC log");
00121 
00122     //    Add output product to QC log
00123     addProdInfoToAcqQcLog (format, fileNames, acqImage, error);
00124 
00125     //    Release memory
00126     free (stringTemp);
00127     free (localOutName);
00128     
00129     return; 
00130 }
00131 /*****************************************************************************/
00132 
00133 
00134 
00135 /******************************************************************************
00136 *               European Southern Observatory
00137 *            VLTI MIDI Data Reduction Software
00138 *
00139 * Module name:  createAcqPrimHead
00140 * Input/Output: See function arguments to avoid duplication
00141 * Description:  Creates the primary header
00142 *
00143 *
00144 * History:
00145 * 10-Mar-05     (csabet) Created
00146 ******************************************************************************/
00147 void createAcqPrimHead (
00148     int                region,
00149     char            *outFitsName,
00150     MidiFiles        *fileNames,
00151     ImageFormat        *size,
00152     ImageQuality    *acqImage,
00153     int                *error)
00154 {
00155 
00156     //    Local Declarations
00157     //    ------------------
00158     const char      routine[] = "createAcqPrimHead";
00159     qfits_header    *outFitsHeader;
00160     FILE            *inFitsBatchPtr=NULL, *outFitsPtr;
00161     int             i, stringLength;
00162     char            *textBuff, *stringQfits, *messageBuffer, *currentTime, *cleanString,
00163                     *stringTemp, *classification, *sWidthX, *sWidthY, *localPipeName=NULL;
00164     time_t          now;
00165     struct tm       *newTime;
00166     struct stat     buf;
00167 
00168     //    Algorithm
00169     //    ---------
00170     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
00171     if (diagnostic > 4) fprintf(midiReportPtr, "Invoking      routine   '%s' \n", routine);
00172 
00173     //    Reset parameters
00174     *error = 0;
00175 
00176     //    Open list of files
00177     if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch, "r")) == NULL)
00178     {
00179         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot open input FITS file list");
00180         *error = 1;
00181         return;
00182     }
00183 
00184     //    Allocate memory
00185     textBuff = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00186     classification = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00187     stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00188     cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00189     messageBuffer = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00190     currentTime = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00191     sWidthX = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00192     sWidthY = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00193     localPipeName = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00194 
00195     //    Get current time/date
00196     now = time(NULL);
00197     newTime = gmtime (&now);
00198     strftime (currentTime, MIN_STRING_LENGTH, "%a %d %b %Y at %H:%M:%S", newTime);
00199 
00200     //    Read the name of the first file in the list and get it's full path name
00201     fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
00202     sprintf (classification, "%s", "");
00203     sscanf (stringTemp, "%s%s", fileNames->inFitsName, classification);
00204 
00205     //    Copy primary header from the raw file to the output header
00206     outFitsHeader = qfits_header_read (fileNames->inFitsName);
00207     if (outFitsHeader == NULL)
00208     {
00209         *error = 1;
00210         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot load header from the input FITS file");
00211         free (messageBuffer);
00212         free (currentTime);
00213         free (cleanString);
00214         free (stringTemp);
00215         free (classification);
00216         free (textBuff);
00217         free (sWidthX);
00218         free (sWidthY);
00219         free (localPipeName);
00220         return;
00221     }
00222 
00223     //    Write all NAXIS values as character strings
00224     sprintf (sWidthY, "%d", size->iYWidth);
00225     sprintf (sWidthX, "%d", size->iXWidth);
00226 
00227     //    Updates header for the DetRon output file
00228     qfits_header_mod (outFitsHeader, "BITPIX", "-32", "number of bits per pixel"); 
00229     qfits_header_mod (outFitsHeader, "NAXIS", "2", "number of data axes"); 
00230     qfits_header_add (outFitsHeader, "NAXIS1", sWidthX, "", NULL);
00231     qfits_header_add (outFitsHeader, "NAXIS2", sWidthY, "", NULL);
00232     qfits_header_mod (outFitsHeader, "INSTRUME", "MIDI", "MIDI Raw Data Display FITS created by DRS pipeline" );  
00233 
00234     //    Modify pipeFileName name
00235     free (stringTemp);
00236     stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00237     stringLength = strlen (fileNames->pipeFileName);
00238     strncpy (stringTemp, fileNames->pipeFileName, stringLength-7);
00239     sprintf (localPipeName, "%s%d.fits", stringTemp, region+1);
00240 
00241     //    Now write all the required product keaywords to the output header
00242     //    -----------------------------------------------------------------
00243     qfits_header_add (outFitsHeader, "HIERARCH ESO PRO TYPE", size->obsType, "MIDI pipeline product type", NULL);
00244     qfits_header_add (outFitsHeader, "HIERARCH ESO PRO CATG", "IMAGE_QUALITY", "Pipeline product category", NULL);
00245     qfits_header_add (outFitsHeader, "HIERARCH ESO PRO ARCFILE", fileNames->archFileName, "Arcfile name of first raw file", NULL);
00246     qfits_header_add (outFitsHeader, "HIERARCH ESO PRO PIPEDATE", currentTime, "Pipeline run date", "");
00247     qfits_header_add (outFitsHeader, "HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION, "Pipeline version", NULL);
00248     qfits_header_add (outFitsHeader, "PIPEFILE", localPipeName, "Pipeline product file name", NULL);
00249     qfits_header_add (outFitsHeader, "HIERARCH ESO PRO DID", MIDI_QC_DIC_VERSION, "QC dictionary version", NULL);
00250 
00251     //    Rewind the list of files
00252     rewind (inFitsBatchPtr);
00253     
00254     //    Loop through the list of files and write into the primary header
00255     i = 1;
00256     while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
00257     {
00258         sprintf (classification, "%s", "");
00259         sscanf (stringTemp, "%s%s", messageBuffer, classification);
00260 
00261         //    If classification is not given get it from the raw file
00262         if (strcmp (classification, "") == 0)
00263         {
00264             stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR CATG");
00265             if (stringQfits == NULL)
00266             {
00267                 sprintf (classification, "%s", "UNKNOWN");
00268                 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Category");
00269             }
00270             else
00271             {
00272                 cleanUpString (stringQfits, cleanString);
00273                 sprintf (classification, "%s", cleanString);
00274             }
00275         }
00276         removePathName (messageBuffer, midiReportPtr);
00277         sprintf (textBuff, "HIERARCH ESO PRO REC1 RAW%d NAME", i);
00278         qfits_header_add (outFitsHeader, textBuff, messageBuffer, "FITS file name", "");
00279         sprintf (textBuff, "HIERARCH ESO PRO REC1 RAW%d CATG", i++);
00280         qfits_header_add (outFitsHeader, textBuff, classification, "Observation Categoty", "");
00281     }
00282     fclose (inFitsBatchPtr);
00283 
00284     //    Add Image parameters
00285     sprintf (messageBuffer, "%0.2f", (acqImage->coordX)[region]);
00286     sprintf (textBuff, "HIERARCH ESO QC ACQ TARX%d", region+1);
00287     qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Target X", "");
00288     sprintf (messageBuffer, "%0.2f", (acqImage->coordY)[region]);
00289     sprintf (textBuff, "HIERARCH ESO QC ACQ TARY%d", region+1);
00290     qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Target Y", "");
00291     sprintf (messageBuffer, "%0.2f", (acqImage->sizeX)[region]);
00292     sprintf (textBuff, "HIERARCH ESO QC ACQ TARSIZEX%d", region+1);
00293     qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Target X-Width", "");
00294     sprintf (messageBuffer, "%0.2f", (acqImage->sizeY)[region]);
00295     sprintf (textBuff, "HIERARCH ESO QC ACQ TARSIZEY%d", region+1);
00296     qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Target Y-Width", "");
00297     sprintf (messageBuffer, "%0.2f", (acqImage->targetFlux)[region]);
00298     sprintf (textBuff, "HIERARCH ESO QC ACQ TARFLUX%d", region+1);
00299     qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Target Intensity", "");
00300 
00301 
00302     //    Place Holders
00303     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH1", "TBD", "TBD", "");
00304     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH2", "TBD", "TBD", "");
00305     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH3", "TBD", "TBD", "");
00306     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH4", "TBD", "TBD", "");
00307     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH5", "TBD", "TBD", "");
00308     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH6", "TBD", "TBD", "");
00309     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH7", "TBD", "TBD", "");
00310     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH8", "TBD", "TBD", "");
00311     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH9", "TBD", "TBD", "");
00312     
00313     //    Create the output fits file. If the file exist delete it
00314     if (stat (outFitsName, &buf) == 0) remove (outFitsName);
00315 
00316     outFitsPtr = fopen (outFitsName, "w");
00317     if (!outFitsPtr)
00318     {
00319         *error = 1;
00320         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot create output FITS file");
00321         free (messageBuffer);
00322         free (currentTime);
00323         free (cleanString);
00324         free (stringTemp);
00325         free (classification);
00326         free (textBuff);
00327         free (sWidthX);
00328         free (sWidthY);        
00329         free (localPipeName);
00330         return;
00331     }
00332 
00333    cpl_msg_info(cpl_func,"Created Product FITS file: %s \n", outFitsName);
00334     fprintf (midiReportPtr, "Created Product FITS file: %s \n", outFitsName);
00335 
00336     //    Write header into the output file
00337     qfits_header_sort (&outFitsHeader);
00338     qfits_header_dump (outFitsHeader, outFitsPtr);
00339     fclose (outFitsPtr);
00340     qfits_header_destroy (outFitsHeader);
00341 
00342     //    release memory
00343     free (messageBuffer);
00344     free (currentTime);
00345     free (cleanString);
00346     free (stringTemp);
00347     free (classification);
00348     free (textBuff);
00349     free (sWidthX);    
00350     free (sWidthY);
00351     free (localPipeName);
00352 
00353     return;
00354 }
00355 /*****************************************************************************/
00356 
00357 
00358 
00359 
00360 /******************************************************************************
00361 *                European Southern Observatory
00362 *              VLTI MIDI Data Reduction Software 
00363 *
00364 * Module name:    createAcqQcLog
00365 * Input/Output:    See function arguments to avoid duplication
00366 * Description:    Copies keywords from the raw input FITS primary header to the 
00367 *               QC log and adds additional product keywords
00368 *
00369 * History:        
00370 * 30-Aug-04        (csabet) Created
00371 ******************************************************************************/
00372 void createAcqQcLog (
00373     char    *inFitsName,
00374     int        *error)
00375     
00376 {
00377 
00378     /*    Local Declarations
00379     --------------------*/
00380     const char    routine[] = "createAcqQcLog";
00381     char        *qfitsString, *emptyString, *cleanString;
00382 
00383     /*    Algorithm
00384     -----------*/
00385     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
00386     if (diagnostic > 4) fprintf(midiReportPtr, "Invoking      routine   '%s' \n", routine);
00387 
00388     /* Reset status */
00389     *error = 0;
00390 
00391     /* Allocate memory */
00392     emptyString = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00393     cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00394 
00395     /*    Initialise empty string */
00396     strcpy (emptyString, "\"UNKNOWN\"");
00397 
00398     /* Get all the keywords */
00399     qfitsString = qfits_query_hdr (inFitsName, "ARCFILE");
00400     if (qfitsString == NULL) 
00401         fprintf (midiQcLogPtr, "ARCFILE             %s \n", emptyString);
00402     else {cleanUpString (qfitsString, cleanString); 
00403         fprintf (midiQcLogPtr, "ARCFILE             \"%s\" \n", cleanString);}
00404 
00405     qfitsString = qfits_query_hdr (inFitsName, "TELESCOP");
00406     if (qfitsString == NULL) 
00407         fprintf (midiQcLogPtr, "TELESCOP            %s \n", emptyString);
00408     else {cleanUpString (qfitsString, cleanString); 
00409         fprintf (midiQcLogPtr, "TELESCOP            \"%s\" \n", cleanString);}
00410     
00411     qfitsString = qfits_query_hdr (inFitsName, "INSTRUME");
00412     if (qfitsString == NULL) 
00413         fprintf (midiQcLogPtr, "INSTRUME            %s \n", emptyString);
00414     else {cleanUpString (qfitsString, cleanString); 
00415         fprintf (midiQcLogPtr, "INSTRUME            \"%s\" \n", cleanString);}
00416     
00417     qfitsString = qfits_query_hdr (inFitsName, "MJD-OBS");
00418     if (qfitsString == NULL) 
00419         fprintf (midiQcLogPtr, "MJD-OBS             %s \n", emptyString);
00420     else {cleanUpString (qfitsString, cleanString); 
00421         fprintf (midiQcLogPtr, "MJD-OBS             \"%s\" \n", cleanString);}
00422     
00423     qfitsString = qfits_query_hdr (inFitsName, "DATE-OBS");
00424     if (qfitsString == NULL) 
00425         fprintf (midiQcLogPtr, "DATE-OBS            %s \n", emptyString);
00426     else {cleanUpString (qfitsString, cleanString); 
00427         fprintf (midiQcLogPtr, "DATE-OBS            \"%s\" \n", cleanString);}
00428     
00429     qfitsString = qfits_query_hdr (inFitsName, "UTC");
00430     if (qfitsString == NULL) 
00431         fprintf (midiQcLogPtr, "UTC                 %s \n", emptyString);
00432     else {cleanUpString (qfitsString, cleanString); 
00433         fprintf (midiQcLogPtr, "UTC                 %s \n", cleanString);}
00434     
00435     qfitsString = qfits_query_hdr (inFitsName, "LST");
00436     if (qfitsString == NULL) 
00437         fprintf (midiQcLogPtr, "LST                 %s \n", emptyString);
00438     else {cleanUpString (qfitsString, cleanString); 
00439         fprintf (midiQcLogPtr, "LST                 %s \n", cleanString);}
00440     
00441     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU GUID DEC");
00442     if (qfitsString == NULL) 
00443         fprintf (midiQcLogPtr, "COU.GUID.DEC        %s \n", emptyString);
00444     else {cleanUpString (qfitsString, cleanString); 
00445         fprintf (midiQcLogPtr, "COU.GUID.DEC        %s \n", cleanString);}
00446     
00447     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU GUID RA");
00448     if (qfitsString == NULL) 
00449         fprintf (midiQcLogPtr, "COU.GUID.RA         %s \n", emptyString);
00450     else {cleanUpString (qfitsString, cleanString); 
00451         fprintf (midiQcLogPtr, "COU.GUID.RA         %s \n", cleanString);}
00452 
00453     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU GUID MAG");
00454     if (qfitsString == NULL) 
00455         fprintf (midiQcLogPtr, "COU.GUID.MAG        %s \n", emptyString);
00456     else {cleanUpString (qfitsString, cleanString); 
00457         fprintf (midiQcLogPtr, "COU.GUID.MAG        %s \n", cleanString);}
00458 
00459     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 STREHL_MEAN");
00460     if (qfitsString == NULL)
00461         fprintf (midiQcLogPtr, "COU.AO1.STREHL_MEAN %s \n", emptyString);
00462     else {cleanUpString (qfitsString, cleanString);
00463         fprintf (midiQcLogPtr, "COU.AO1.STREHL_MEAN %s \n", cleanString);}
00464 
00465     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 STREHL_MEAN");
00466     if (qfitsString == NULL)
00467         fprintf (midiQcLogPtr, "COU.AO2.STREHL_MEAN %s \n", emptyString);
00468     else {cleanUpString (qfitsString, cleanString);
00469         fprintf (midiQcLogPtr, "COU.AO2.STREHL_MEAN %s \n", cleanString);}
00470 
00471     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 STREHL_RMS");
00472     if (qfitsString == NULL)
00473         fprintf (midiQcLogPtr, "COU.AO1.STREHL_RMS  %s \n", emptyString);
00474     else {cleanUpString (qfitsString, cleanString);
00475         fprintf (midiQcLogPtr, "COU.AO1.STREHL_RMS  %s \n", cleanString);}
00476 
00477     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 STREHL_RMS");
00478     if (qfitsString == NULL)
00479         fprintf (midiQcLogPtr, "COU.AO2.STREHL_RMS  %s \n", emptyString);
00480     else {cleanUpString (qfitsString, cleanString);
00481         fprintf (midiQcLogPtr, "COU.AO2.STREHL_RMS  %s \n", cleanString);}
00482 
00483     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 WFE_MEAN");
00484     if (qfitsString == NULL)
00485         fprintf (midiQcLogPtr, "COU.AO1.WFE_MEAN    %s \n", emptyString);
00486     else {cleanUpString (qfitsString, cleanString);
00487         fprintf (midiQcLogPtr, "COU.AO1.WFE_MEAN    %s \n", cleanString);}
00488 
00489     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 WFE_MEAN");
00490     if (qfitsString == NULL)
00491         fprintf (midiQcLogPtr, "COU.AO2.WFE_MEAN    %s \n", emptyString);
00492     else {cleanUpString (qfitsString, cleanString);
00493         fprintf (midiQcLogPtr, "COU.AO2.WFE_MEAN    %s \n", cleanString);}
00494 
00495     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 WFE_RMS");
00496     if (qfitsString == NULL)
00497         fprintf (midiQcLogPtr, "COU.AO1.WFE_RMS     %s \n", emptyString);
00498     else {cleanUpString (qfitsString, cleanString);
00499         fprintf (midiQcLogPtr, "COU.AO1.WFE_RMS     %s \n", cleanString);}
00500 
00501     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 WFE_RMS");
00502     if (qfitsString == NULL)
00503         fprintf (midiQcLogPtr, "COU.AO2.WFE_RMS     %s \n", emptyString);
00504     else {cleanUpString (qfitsString, cleanString);
00505         fprintf (midiQcLogPtr, "COU.AO2.WFE_RMS     %s \n", cleanString);}
00506 
00507     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 ENC_MEAN");
00508     if (qfitsString == NULL)
00509         fprintf (midiQcLogPtr, "COU.AO1.ENC_MEAN    %s \n", emptyString);
00510     else {cleanUpString (qfitsString, cleanString);
00511         fprintf (midiQcLogPtr, "COU.AO1.ENC_MEAN    %s \n", cleanString);}
00512 
00513     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 ENC_MEAN");
00514     if (qfitsString == NULL)
00515         fprintf (midiQcLogPtr, "COU.AO2.ENC_MEAN    %s \n", emptyString);
00516     else {cleanUpString (qfitsString, cleanString);
00517         fprintf (midiQcLogPtr, "COU.AO2.ENC_MEAN    %s \n", cleanString);}
00518 
00519     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 ENC_RMS");
00520     if (qfitsString == NULL)
00521         fprintf (midiQcLogPtr, "COU.AO1.ENC_RMS     %s \n", emptyString);
00522     else {cleanUpString (qfitsString, cleanString);
00523         fprintf (midiQcLogPtr, "COU.AO1.ENC_RMS     %s \n", cleanString);}
00524 
00525     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 ENC_RMS");
00526     if (qfitsString == NULL)
00527         fprintf (midiQcLogPtr, "COU.AO2.ENC_RMS     %s \n", emptyString);
00528     else {cleanUpString (qfitsString, cleanString);
00529         fprintf (midiQcLogPtr, "COU.AO2.ENC_RMS     %s \n", cleanString);}
00530 
00531     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 FWHM_MEAN");
00532     if (qfitsString == NULL)
00533         fprintf (midiQcLogPtr, "COU.AO1.FWHM_MEAN   %s \n", emptyString);
00534     else {cleanUpString (qfitsString, cleanString);
00535         fprintf (midiQcLogPtr, "COU.AO1.FWHM_MEAN   %s \n", cleanString);}
00536 
00537     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 FWHM_MEAN");
00538     if (qfitsString == NULL)
00539         fprintf (midiQcLogPtr, "COU.AO2.FWHM_MEAN   %s \n", emptyString);
00540     else {cleanUpString (qfitsString, cleanString);
00541         fprintf (midiQcLogPtr, "COU.AO2.FWHM_MEAN   %s \n", cleanString);}
00542 
00543     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 FWHM_RMS");
00544     if (qfitsString == NULL)
00545         fprintf (midiQcLogPtr, "COU.AO1.FWHM_RMS    %s \n", emptyString);
00546     else {cleanUpString (qfitsString, cleanString);
00547         fprintf (midiQcLogPtr, "COU.AO1.FWHM_RMS    %s \n", cleanString);}
00548 
00549     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 FWHM_RMS");
00550     if (qfitsString == NULL)
00551         fprintf (midiQcLogPtr, "COU.AO2.FWHM_RMS    %s \n", emptyString);
00552     else {cleanUpString (qfitsString, cleanString);
00553         fprintf (midiQcLogPtr, "COU.AO2.FWHM_RMS    %s \n", cleanString);}
00554 
00555     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 L0_MEAN");
00556     if (qfitsString == NULL)
00557         fprintf (midiQcLogPtr, "COU.AO1.L0_MEAN     %s \n", emptyString);
00558     else {cleanUpString (qfitsString, cleanString);
00559         fprintf (midiQcLogPtr, "COU.AO1.L0_MEAN     %s \n", cleanString);}
00560 
00561     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 L0_MEAN");
00562     if (qfitsString == NULL)
00563         fprintf (midiQcLogPtr, "COU.AO2.L0_MEAN     %s \n", emptyString);
00564     else {cleanUpString (qfitsString, cleanString);
00565         fprintf (midiQcLogPtr, "COU.AO2.L0_MEAN     %s \n", cleanString);}
00566 
00567     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 L0_RMS");
00568     if (qfitsString == NULL)
00569         fprintf (midiQcLogPtr, "COU.AO1.L0_RMS      %s \n", emptyString);
00570     else {cleanUpString (qfitsString, cleanString);
00571         fprintf (midiQcLogPtr, "COU.AO1.L0_RMS      %s \n", cleanString);}
00572 
00573     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 L0_RMS");
00574     if (qfitsString == NULL)
00575         fprintf (midiQcLogPtr, "COU.AO2.L0_RMS      %s \n", emptyString);
00576     else {cleanUpString (qfitsString, cleanString);
00577         fprintf (midiQcLogPtr, "COU.AO2.L0_RMS      %s \n", cleanString);}
00578 
00579     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 R0_MEAN");
00580     if (qfitsString == NULL)
00581         fprintf (midiQcLogPtr, "COU.AO1.R0_MEAN     %s \n", emptyString);
00582     else {cleanUpString (qfitsString, cleanString);
00583         fprintf (midiQcLogPtr, "COU.AO1.R0_MEAN     %s \n", cleanString);}
00584 
00585     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 R0_MEAN");
00586     if (qfitsString == NULL)
00587         fprintf (midiQcLogPtr, "COU.AO2.R0_MEAN     %s \n", emptyString);
00588     else {cleanUpString (qfitsString, cleanString);
00589         fprintf (midiQcLogPtr, "COU.AO2.R0_MEAN     %s \n", cleanString);}
00590 
00591     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 R0_RMS");
00592     if (qfitsString == NULL)
00593         fprintf (midiQcLogPtr, "COU.AO1.R0_RMS      %s \n", emptyString);
00594     else {cleanUpString (qfitsString, cleanString);
00595         fprintf (midiQcLogPtr, "COU.AO1.R0_RMS      %s \n", cleanString);}
00596 
00597     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 R0_RMS");
00598     if (qfitsString == NULL)
00599         fprintf (midiQcLogPtr, "COU.AO2.R0_RMS      %s \n", emptyString);
00600     else {cleanUpString (qfitsString, cleanString);
00601         fprintf (midiQcLogPtr, "COU.AO2.R0_RMS      %s \n", cleanString);}
00602 
00603     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 T0_MEAN");
00604     if (qfitsString == NULL)
00605         fprintf (midiQcLogPtr, "COU.AO1.T0_MEAN     %s \n", emptyString);
00606     else {cleanUpString (qfitsString, cleanString);
00607         fprintf (midiQcLogPtr, "COU.AO1.T0_MEAN     %s \n", cleanString);}
00608 
00609     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 T0_MEAN");
00610     if (qfitsString == NULL)
00611         fprintf (midiQcLogPtr, "COU.AO2.T0_MEAN     %s \n", emptyString);
00612     else {cleanUpString (qfitsString, cleanString);
00613         fprintf (midiQcLogPtr, "COU.AO2.T0_MEAN     %s \n", cleanString);}
00614 
00615     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO1 T0_RMS");
00616     if (qfitsString == NULL)
00617         fprintf (midiQcLogPtr, "COU.AO1.T0_RMS      %s \n", emptyString);
00618     else {cleanUpString (qfitsString, cleanString);
00619         fprintf (midiQcLogPtr, "COU.AO1.T0_RMS      %s \n", cleanString);}
00620 
00621     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO COU AO2 T0_RMS");
00622     if (qfitsString == NULL)
00623         fprintf (midiQcLogPtr, "COU.AO2.T0_RMS      %s \n", emptyString);
00624     else {cleanUpString (qfitsString, cleanString);
00625         fprintf (midiQcLogPtr, "COU.AO2.T0_RMS      %s \n", cleanString);}
00626     
00627     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET CHIP NX");
00628     if (qfitsString == NULL) 
00629         fprintf (midiQcLogPtr, "DET.CHIP.NX         %s \n", emptyString);
00630     else {cleanUpString (qfitsString, cleanString); 
00631         fprintf (midiQcLogPtr, "DET.CHIP.NX         %s \n", cleanString);}
00632     
00633     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET CHIP NY");
00634     if (qfitsString == NULL) 
00635         fprintf (midiQcLogPtr, "DET.CHIP.NY         %s \n", emptyString);
00636     else {cleanUpString (qfitsString, cleanString); 
00637         fprintf (midiQcLogPtr, "DET.CHIP.NY         %s \n", cleanString);}
00638     
00639     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET DIT");
00640     if (qfitsString == NULL) 
00641         fprintf (midiQcLogPtr, "DET.DIT             %s \n", emptyString);
00642     else {cleanUpString (qfitsString, cleanString); 
00643         fprintf (midiQcLogPtr, "DET.DIT             %s \n", cleanString);}
00644     
00645     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET DITDELAY");
00646     if (qfitsString == NULL) 
00647         fprintf (midiQcLogPtr, "DET.DITDELAY        %s \n", emptyString);
00648     else {cleanUpString (qfitsString, cleanString); 
00649         fprintf (midiQcLogPtr, "DET.DITDELAY        %s \n", cleanString);}
00650     
00651     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET INT MODE");
00652     if (qfitsString == NULL) 
00653         fprintf (midiQcLogPtr, "DET.INT.MODE        %s \n", emptyString);
00654     else {cleanUpString (qfitsString, cleanString); 
00655         fprintf (midiQcLogPtr, "DET.INT.MODE        \"%s\" \n", cleanString);}
00656     
00657     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET NDIT");
00658     if (qfitsString == NULL) 
00659         fprintf (midiQcLogPtr, "DET.NDIT            %s \n", emptyString);
00660     else {cleanUpString (qfitsString, cleanString); 
00661         fprintf (midiQcLogPtr, "DET.NDIT            %s \n", cleanString);}
00662     
00663     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET NRTS MODE");
00664     if (qfitsString == NULL) 
00665         fprintf (midiQcLogPtr, "DET.NRTS.MODE       %s \n", emptyString);
00666     else {cleanUpString (qfitsString, cleanString); 
00667         fprintf (midiQcLogPtr, "DET.NRTS.MODE       \"%s\" \n", cleanString);}
00668     
00669     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN1 NX");
00670     if (qfitsString == NULL) 
00671         fprintf (midiQcLogPtr, "DET.WIN1.NX         %s \n", emptyString);
00672     else {cleanUpString (qfitsString, cleanString); 
00673         fprintf (midiQcLogPtr, "DET.WIN1.NX         %s \n", cleanString);}
00674     
00675     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN1 NY");
00676     if (qfitsString == NULL) 
00677         fprintf (midiQcLogPtr, "DET.WIN1.NY         %s \n", emptyString);
00678     else {cleanUpString (qfitsString, cleanString); 
00679         fprintf (midiQcLogPtr, "DET.WIN1.NY         %s \n", cleanString);}
00680     
00681     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN2 NX");
00682     if (qfitsString == NULL) 
00683         fprintf (midiQcLogPtr, "DET.WIN2.NX         %s \n", emptyString);
00684     else {cleanUpString (qfitsString, cleanString); 
00685         fprintf (midiQcLogPtr, "DET.WIN2.NX         %s \n", cleanString);}
00686     
00687     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN2 NY");
00688     if (qfitsString == NULL) 
00689         fprintf (midiQcLogPtr, "DET.WIN2.NY         %s \n", emptyString);
00690     else {cleanUpString (qfitsString, cleanString); 
00691         fprintf (midiQcLogPtr, "DET.WIN2.NY         %s \n", cleanString);}
00692     
00693     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR CATG");
00694     if (qfitsString == NULL) 
00695         fprintf (midiQcLogPtr, "DPR.CATG            %s \n", emptyString);
00696     else {cleanUpString (qfitsString, cleanString); 
00697         fprintf (midiQcLogPtr, "DPR.CATG            \"%s\" \n", cleanString);}
00698     
00699     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR TECH");
00700     if (qfitsString == NULL) 
00701         fprintf (midiQcLogPtr, "DPR.TECH            %s \n", emptyString);
00702     else {cleanUpString (qfitsString, cleanString); 
00703         fprintf (midiQcLogPtr, "DPR.TECH            \"%s\" \n", cleanString);}
00704     
00705     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR TYPE");
00706     if (qfitsString == NULL) 
00707         fprintf (midiQcLogPtr, "DPR.TYPE            %s \n", emptyString);
00708     else {cleanUpString (qfitsString, cleanString); 
00709         fprintf (midiQcLogPtr, "DPR.TYPE            \"%s\" \n", cleanString);}
00710     
00711     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS CAM NAME");
00712     if (qfitsString == NULL) 
00713         fprintf (midiQcLogPtr, "INS.CAM.NAME        %s \n", emptyString);
00714     else {cleanUpString (qfitsString, cleanString); 
00715         fprintf (midiQcLogPtr, "INS.CAM.NAME        \"%s\" \n", cleanString);}
00716     
00717     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS FILT NAME");
00718     if (qfitsString == NULL) 
00719         fprintf (midiQcLogPtr, "INS.FILT.NAME       %s \n", emptyString);
00720     else {cleanUpString (qfitsString, cleanString); 
00721         fprintf (midiQcLogPtr, "INS.FILT.NAME       \"%s\" \n", cleanString);}
00722     
00723     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS GRIS NAME");
00724     if (qfitsString == NULL) 
00725         fprintf (midiQcLogPtr, "INS.GRIS.NAME       %s \n", emptyString);
00726     else {cleanUpString (qfitsString, cleanString); 
00727         fprintf (midiQcLogPtr, "INS.GRIS.NAME       \"%s\" \n", cleanString);}
00728     
00729     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS MODE");
00730     if (qfitsString == NULL) 
00731         fprintf (midiQcLogPtr, "INS.MODE            %s \n", emptyString);
00732     else {cleanUpString (qfitsString, cleanString); 
00733         fprintf (midiQcLogPtr, "INS.MODE            \"%s\" \n", cleanString);}
00734     
00735     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS OPT1 NAME");
00736     if (qfitsString == NULL) 
00737         fprintf (midiQcLogPtr, "INS.OPT1.NAME       %s \n", emptyString);
00738     else {cleanUpString (qfitsString, cleanString); 
00739         fprintf (midiQcLogPtr, "INS.OPT1.NAME       \"%s\" \n", cleanString);}
00740     
00741     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS OPT1 TYPE");
00742     if (qfitsString == NULL) 
00743         fprintf (midiQcLogPtr, "INS.OPT1.TYPE       %s \n", emptyString);
00744     else {cleanUpString (qfitsString, cleanString); 
00745         fprintf (midiQcLogPtr, "INS.OPT1.TYPE       \"%s\" \n", cleanString);}
00746     
00747     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS SHUT NAME");
00748     if (qfitsString == NULL) 
00749         fprintf (midiQcLogPtr, "INS.SHUT.NAME       %s \n", emptyString);
00750     else {cleanUpString (qfitsString, cleanString); 
00751         fprintf (midiQcLogPtr, "INS.SHUT.NAME       \"%s\" \n", cleanString);}
00752     
00753     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS SLIT NAME");
00754     if (qfitsString == NULL) 
00755         fprintf (midiQcLogPtr, "INS.SLIT.NAME       %s \n", emptyString);
00756     else {cleanUpString (qfitsString, cleanString); 
00757         fprintf (midiQcLogPtr, "INS.SLIT.NAME       \"%s\" \n", cleanString);}
00758     
00759     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AIRM END");
00760     if (qfitsString == NULL) 
00761         fprintf (midiQcLogPtr, "ISS.AIRM.END        %s \n", emptyString);
00762     else {cleanUpString (qfitsString, cleanString); 
00763         fprintf (midiQcLogPtr, "ISS.AIRM.END        %s \n", cleanString);}
00764     
00765     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AIRM START");
00766     if (qfitsString == NULL) 
00767         fprintf (midiQcLogPtr, "ISS.AIRM.START      %s \n", emptyString);
00768     else {cleanUpString (qfitsString, cleanString); 
00769         fprintf (midiQcLogPtr, "ISS.AIRM.START      %s \n", cleanString);}
00770     
00771     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS ALT");
00772     if (qfitsString == NULL) 
00773         fprintf (midiQcLogPtr, "ISS.ALT             %s \n", emptyString);
00774     else {cleanUpString (qfitsString, cleanString); 
00775         fprintf (midiQcLogPtr, "ISS.ALT             %s \n", cleanString);}
00776     
00777     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI FWHM END");
00778     if (qfitsString == NULL) 
00779         fprintf (midiQcLogPtr, "ISS.AMBI.FWHM.END   %s \n", emptyString);
00780     else {cleanUpString (qfitsString, cleanString); 
00781         fprintf (midiQcLogPtr, "ISS.AMBI.FWHM.END   %s \n", cleanString);}
00782     
00783     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI FWHM START");
00784     if (qfitsString == NULL) 
00785         fprintf (midiQcLogPtr, "ISS.AMBI.FWHM.START %s \n", emptyString);
00786     else {cleanUpString (qfitsString, cleanString); 
00787         fprintf (midiQcLogPtr, "ISS.AMBI.FWHM.START %s \n", cleanString);}
00788     
00789     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI PRES");
00790     if (qfitsString == NULL) 
00791         fprintf (midiQcLogPtr, "ISS.AMBI.PRES       %s \n", emptyString);
00792     else {cleanUpString (qfitsString, cleanString); 
00793         fprintf (midiQcLogPtr, "ISS.AMBI.PRES       %s \n", cleanString);}
00794     
00795     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI RHUM");
00796     if (qfitsString == NULL) 
00797         fprintf (midiQcLogPtr, "ISS.AMBI.RHUM       %s \n", emptyString);
00798     else {cleanUpString (qfitsString, cleanString); 
00799         fprintf (midiQcLogPtr, "ISS.AMBI.RHUM       %s \n", cleanString);}
00800     
00801     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI TAU0 END");
00802     if (qfitsString == NULL) 
00803         fprintf (midiQcLogPtr, "ISS.AMBI.TAU0.END   %s \n", emptyString);
00804     else {cleanUpString (qfitsString, cleanString); 
00805         fprintf (midiQcLogPtr, "ISS.AMBI.TAU0.END   %s \n", cleanString);}
00806     
00807     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI TAU0 START");
00808     if (qfitsString == NULL) 
00809         fprintf (midiQcLogPtr, "ISS.AMBI.TAU0.START %s \n", emptyString);
00810     else {cleanUpString (qfitsString, cleanString); 
00811         fprintf (midiQcLogPtr, "ISS.AMBI.TAU0.START %s \n", cleanString);}
00812     
00813     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI TEMP");
00814     if (qfitsString == NULL) 
00815         fprintf (midiQcLogPtr, "ISS.AMBI.TEMP       %s \n", emptyString);
00816     else {cleanUpString (qfitsString, cleanString); 
00817         fprintf (midiQcLogPtr, "ISS.AMBI.TEMP       %s \n", cleanString);}
00818     
00819     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI WINDDIR");
00820     if (qfitsString == NULL) 
00821         fprintf (midiQcLogPtr, "ISS.AMBI.WINDDIR    %s \n", emptyString);
00822     else {cleanUpString (qfitsString, cleanString); 
00823         fprintf (midiQcLogPtr, "ISS.AMBI.WINDDIR    %s \n", cleanString);}
00824 
00825     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AMBI WINDSP");
00826     if (qfitsString == NULL) 
00827         fprintf (midiQcLogPtr, "ISS.AMBI.WINDSP     %s \n", emptyString);
00828     else {cleanUpString (qfitsString, cleanString); 
00829         fprintf (midiQcLogPtr, "ISS.AMBI.WINDSP     %s \n", cleanString);}
00830     
00831     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS AZ");
00832     if (qfitsString == NULL) 
00833         fprintf (midiQcLogPtr, "ISS.AZ              %s \n", emptyString);
00834     else {cleanUpString (qfitsString, cleanString); 
00835         fprintf (midiQcLogPtr, "ISS.AZ              %s \n", cleanString);}
00836     
00837     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF STATION1");
00838     if (qfitsString == NULL) 
00839         fprintf (midiQcLogPtr, "ISS.CONF.STATION1   %s \n", emptyString);
00840     else {cleanUpString (qfitsString, cleanString); 
00841         fprintf (midiQcLogPtr, "ISS.CONF.STATION1   \"%s\" \n", cleanString);}
00842     
00843     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF STATION2");
00844     if (qfitsString == NULL) 
00845         fprintf (midiQcLogPtr, "ISS.CONF.STATION2   %s \n", emptyString);
00846     else {cleanUpString (qfitsString, cleanString); 
00847         fprintf (midiQcLogPtr, "ISS.CONF.STATION2   \"%s\" \n", cleanString);}
00848     
00849     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF T1X");
00850     if (qfitsString == NULL) 
00851         fprintf (midiQcLogPtr, "ISS.CONF.T1X        %s \n", emptyString);
00852     else {cleanUpString (qfitsString, cleanString); 
00853         fprintf (midiQcLogPtr, "ISS.CONF.T1X        %s \n", cleanString);}
00854     
00855     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF T1Y");
00856     if (qfitsString == NULL) 
00857         fprintf (midiQcLogPtr, "ISS.CONF.T1Y        %s \n", emptyString);
00858     else {cleanUpString (qfitsString, cleanString); 
00859         fprintf (midiQcLogPtr, "ISS.CONF.T1Y        %s \n", cleanString);}
00860     
00861     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF T1Z");
00862     if (qfitsString == NULL) 
00863         fprintf (midiQcLogPtr, "ISS.CONF.T1Z        %s \n", emptyString);
00864     else {cleanUpString (qfitsString, cleanString); 
00865         fprintf (midiQcLogPtr, "ISS.CONF.T1Z        %s \n", cleanString);}
00866     
00867     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF T2X");
00868     if (qfitsString == NULL) 
00869         fprintf (midiQcLogPtr, "ISS.CONF.T2X        %s \n", emptyString);
00870     else {cleanUpString (qfitsString, cleanString); 
00871         fprintf (midiQcLogPtr, "ISS.CONF.T2X        %s \n", cleanString);}
00872     
00873     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF T2Y");
00874     if (qfitsString == NULL) 
00875         fprintf (midiQcLogPtr, "ISS.CONF.T2Y        %s \n", emptyString);
00876     else {cleanUpString (qfitsString, cleanString); 
00877         fprintf (midiQcLogPtr, "ISS.CONF.T2Y        %s \n", cleanString);}
00878     
00879     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS CONF T2Z");
00880     if (qfitsString == NULL) 
00881         fprintf (midiQcLogPtr, "ISS.CONF.T2Z        %s \n", emptyString);
00882     else {cleanUpString (qfitsString, cleanString); 
00883         fprintf (midiQcLogPtr, "ISS.CONF.T2Z        %s \n", cleanString);}
00884     
00885     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS PARANG END");
00886     if (qfitsString == NULL) 
00887         fprintf (midiQcLogPtr, "ISS.PARANG.END      %s \n", emptyString);
00888     else {cleanUpString (qfitsString, cleanString); 
00889         fprintf (midiQcLogPtr, "ISS.PARANG.END      %s \n", cleanString);}
00890     
00891     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS PARANG START");
00892     if (qfitsString == NULL) 
00893         fprintf (midiQcLogPtr, "ISS.PARANG.START    %s \n", emptyString);
00894     else {cleanUpString (qfitsString, cleanString); 
00895         fprintf (midiQcLogPtr, "ISS.PARANG.START    %s \n", cleanString);}
00896     
00897     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS PBL12 END");
00898     if (qfitsString == NULL) 
00899         fprintf (midiQcLogPtr, "ISS.PBL12.END       %s \n", emptyString);
00900     else {cleanUpString (qfitsString, cleanString); 
00901         fprintf (midiQcLogPtr, "ISS.PBL12.END       %s \n", cleanString);}
00902     
00903     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO ISS PBL12 START");
00904     if (qfitsString == NULL) 
00905         fprintf (midiQcLogPtr, "ISS.PBL12.START     %s \n", emptyString);
00906     else {cleanUpString (qfitsString, cleanString); 
00907         fprintf (midiQcLogPtr, "ISS.PBL12.START     %s \n", cleanString);}
00908     
00909     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS ID");
00910     if (qfitsString == NULL) 
00911         fprintf (midiQcLogPtr, "OBS.ID              %s \n", emptyString);
00912     else {cleanUpString (qfitsString, cleanString); 
00913         fprintf (midiQcLogPtr, "OBS.ID              \"%s\" \n", cleanString);}
00914     
00915     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS NAME");
00916     if (qfitsString == NULL) 
00917         fprintf (midiQcLogPtr, "OBS.NAME            %s \n", emptyString);
00918     else {cleanUpString (qfitsString, cleanString); 
00919         fprintf (midiQcLogPtr, "OBS.NAME            \"%s\" \n", cleanString);}
00920     
00921     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PI-COI ID");
00922     if (qfitsString == NULL) 
00923         fprintf (midiQcLogPtr, "OBS.PI-COI.ID       %s \n", emptyString);
00924     else {cleanUpString (qfitsString, cleanString); 
00925         fprintf (midiQcLogPtr, "OBS.PI-COI.ID       \"%s\" \n", cleanString);}
00926     
00927     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PI-COI NAME");
00928     if (qfitsString == NULL) 
00929         fprintf (midiQcLogPtr, "OBS.PI-COI.NAME     %s \n", emptyString);
00930     else {cleanUpString (qfitsString, cleanString); 
00931         fprintf (midiQcLogPtr, "OBS.PI-COI.NAME     \"%s\" \n", cleanString);}
00932     
00933     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PROG ID");
00934     if (qfitsString == NULL) 
00935         fprintf (midiQcLogPtr, "OBS.PROG.ID         %s \n", emptyString);
00936     else {cleanUpString (qfitsString, cleanString); 
00937         fprintf (midiQcLogPtr, "OBS.PROG.ID         \"%s\" \n", cleanString);}
00938     
00939     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS START");
00940     if (qfitsString == NULL) 
00941         fprintf (midiQcLogPtr, "OBS.START           %s \n", emptyString);
00942     else {cleanUpString (qfitsString, cleanString); 
00943         fprintf (midiQcLogPtr, "OBS.START           \"%s\" \n", cleanString);}
00944     
00945     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS TARG NAME");
00946     if (qfitsString == NULL) 
00947         fprintf (midiQcLogPtr, "OBS.TARG.NAME       %s \n", emptyString);
00948     else {cleanUpString (qfitsString, cleanString); 
00949         fprintf (midiQcLogPtr, "OBS.TARG.NAME       \"%s\" \n", cleanString);}
00950     
00951     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OCS EXPO1 FNAME1");
00952     if (qfitsString == NULL) 
00953         fprintf (midiQcLogPtr, "OCS.EXPO1.FNAME1    %s \n", emptyString);
00954     else {cleanUpString (qfitsString, cleanString); 
00955         fprintf (midiQcLogPtr, "OCS.EXPO1.FNAME1    \"%s\" \n", cleanString);}
00956     
00957     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO TPL ID");
00958     if (qfitsString == NULL) 
00959         fprintf (midiQcLogPtr, "TPL.ID              %s \n", emptyString);
00960     else {cleanUpString (qfitsString, cleanString); 
00961         fprintf (midiQcLogPtr, "TPL.ID              \"%s\" \n", cleanString);}
00962     
00963     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO TPL START");
00964     if (qfitsString == NULL) 
00965         fprintf (midiQcLogPtr, "TPL.START           %s \n", emptyString);
00966     else {cleanUpString (qfitsString, cleanString); 
00967         fprintf (midiQcLogPtr, "TPL.START           \"%s\" \n", cleanString);}
00968     
00969     
00970     /* Release memory */
00971     free (emptyString);
00972     free (cleanString);
00973     
00974     return;
00975 }
00976 /*****************************************************************************/
00977 
00978 
00979 /******************************************************************************
00980 *                European Southern Observatory
00981 *              VLTI MIDI Data Reduction Software 
00982 *
00983 * Module name:    addProdInfoToAcqQcLog
00984 * Input/Output:    See function arguments to avoid duplication
00985 * Description:    Adds product information to QC log
00986 *
00987 *
00988 * History:        
00989 * 16-Jan-04        (csabet) Created
00990 ******************************************************************************/
00991 void addProdInfoToAcqQcLog (
00992     ImageFormat        *format,
00993     MidiFiles        *fileNames,
00994     ImageQuality    *acqImage,
00995     int                *error)
00996 {
00997 
00998     /*    Local Declarations
00999     --------------------*/
01000     const char         routine[] = "addProdInfoToAcqQcLog";
01001     int             i;
01002     FILE            *inFitsBatchPtr;
01003     char            *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
01004                     *stringTemp, *classification;
01005     time_t          now;
01006     struct tm        *newTime;
01007     
01008     /*    Algorithm
01009     -----------*/
01010     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
01011     if (diagnostic > 4) fprintf (midiReportPtr, "Invoking      routine   '%s' \n", routine);
01012 
01013     /* Reset parameters */
01014     *error = 0;
01015 
01016     /*    Allocate memory */
01017     classification = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
01018     stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
01019     cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
01020     textBuff = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
01021     messageBuffer = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
01022     currentTime = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
01023     
01024     /*    Get current time/date */
01025     now = time(NULL);
01026     newTime = gmtime (&now);
01027     strftime (currentTime, MIN_STRING_LENGTH, "%a %d %b %Y at %H:%M:%S", newTime);
01028 
01029     //    Add keyword to QC log file
01030     fprintf (midiQcLogPtr, "PRO.TYPE            \"%s\" \n", format->obsType);
01031     fprintf (midiQcLogPtr, "PRO.CATG            \"IMAGE_QUALITY\" \n");
01032     fprintf (midiQcLogPtr, "PRO.ARCFILE         \"%s\" \n", fileNames->archFileName);
01033     fprintf (midiQcLogPtr, "PRO.PIPEDATE        \"%s\" \n", currentTime);
01034     fprintf (midiQcLogPtr, "PRO.VERSION         \"%s\" \n", MIDI_PIPE_VERSION);
01035     fprintf (midiQcLogPtr, "PRO.PIPEFILE        \"%s\" \n", fileNames->pipeFileName);
01036     fprintf (midiQcLogPtr, "PRO.DID             \"%s\" \n", MIDI_QC_DIC_VERSION);
01037 
01038     /*  Open the list of files */
01039     if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch, "r")) == NULL)
01040     {
01041         *error = 1;
01042         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot open input FITS file list");
01043         free (messageBuffer);
01044         free (currentTime);
01045         free (cleanString);
01046         free (stringTemp);
01047         free (classification);
01048         free (textBuff);
01049         return;
01050     }
01051 
01052     /* Loop through the list of files and write into the QC log */
01053     i = 1;
01054     while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
01055     {
01056         sprintf (classification, "%s", "");
01057         sscanf (stringTemp, "%s%s", messageBuffer, classification);
01058         
01059         /* If classification is not given get it from the raw file */
01060         if (strcmp (classification, "") == 0)
01061         {
01062             stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR CATG");
01063             if (stringQfits == NULL) 
01064             {
01065                 sprintf (classification, "%s", "UNKNOWN");
01066                 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Category");
01067             }
01068             else
01069             {
01070                 cleanUpString (stringQfits, cleanString);
01071                 sprintf (classification, "%s", cleanString);
01072             }
01073         }
01074         removePathName (messageBuffer, midiReportPtr);
01075         fprintf (midiQcLogPtr, "PRO.REC1.RAW%d.NAME  \"%s\" \n", i, messageBuffer);
01076         fprintf (midiQcLogPtr, "PRO.REC1.RAW%d.CATG  \"%s\" \n", i++, classification);
01077     }
01078     fclose (inFitsBatchPtr);
01079 
01080     //    Add Image parameters
01081     for (i = 0; i < format->numOfDetectorRegions; i++)
01082     {
01083         fprintf (midiQcLogPtr, "QC.ACQ.TARX%d            %0.2f \n", i+1, (acqImage->coordX)[i]);
01084         fprintf (midiQcLogPtr, "QC.ACQ.TARY%d            %0.2f \n", i+1, (acqImage->coordY)[i]);
01085         fprintf (midiQcLogPtr, "QC.ACQ.TARSIZEX%d        %0.2f \n", i+1, (acqImage->sizeX)[i]);
01086         fprintf (midiQcLogPtr, "QC.ACQ.TARSIZEY%d        %0.2f \n", i+1, (acqImage->sizeY)[i]);
01087         fprintf (midiQcLogPtr, "QC.ACQ.TARFLUX%d         %0.2f \n", i+1, (acqImage->targetFlux)[i]);
01088     }
01089 
01090     //    Release memory
01091     free (messageBuffer);
01092     free (currentTime);
01093     free (textBuff);
01094     free (cleanString);
01095     free (stringTemp);
01096     free (classification);
01097         
01098     return;
01099 }
01100 /*****************************************************************************/
01101 

Generated on 11 Feb 2011 for MIDI Pipeline Reference Manual by  doxygen 1.6.1