createProdRefPix.c

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

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