createProdKappa.c

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

Generated on 15 Mar 2012 for MIDI Pipeline Reference Manual by  doxygen 1.6.1