createProdDspTrn.c

00001 
00002 /******************************************************************************
00003 *******************************************************************************
00004 *               European Southern Observatory
00005 *          VLTI MIDI Maintenance Templates Software
00006 *
00007 * Module name:  createProdDspTrn.c
00008 * Description:  Contains routines for the 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 "fileHandling.h"
00031 #include "createProdDspTrn.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 
00045 /******************************************************************************
00046 *               European Southern Observatory
00047 *          VLTI MIDI Maintenance Templates Software
00048 *
00049 * Module name:  createDspTrnProd
00050 * Input/Output: See function arguments to avoid duplication
00051 * Description:  Creates MIDI product files
00052 *
00053 * History:      
00054 * 15-Jun-04     (csabet) Created
00055 ******************************************************************************/
00056 void createDspTrnProd (
00057     MidiFiles       *fileNames,    // In: Pointer to the file structure
00058     ImageFormat        *format,    // In: Image format
00059     DispersiveTrans *trans,     // In: Dispersive transmission data structure
00060     int                *error)    // Ou: Error status
00061 {
00062   
00063     /*  Local Declarations
00064     --------------------*/
00065     const char  routine[] = "createDspTrnProd";
00066     char    *classification, *stringTemp;
00067     FILE    *inFitsBatchPtr;
00068     float    *dspTrnImage;
00069     int        i, j, k, l, arraySize;
00070     qfitsdumper    qdDspTrn;
00071    
00072     //  Algorithm
00073     //    ---------
00074     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
00075     if (diagnostic > 4) fprintf (midiReportPtr, "Invoking      routine   '%s' \n", routine);
00076 
00077    cpl_msg_info(cpl_func,"\nCreating Product files for DSP_TRN from batch  %d \n", batchNumber);
00078    cpl_msg_info(cpl_func,"--------------------------------------------- \n");
00079     fprintf (midiReportPtr, "\nCreating Product for DSP_TRN from batch  %d \n", batchNumber);
00080     fprintf (midiReportPtr, "--------------------------------------- \n");
00081 
00082     // Reset status
00083     *error = 0;
00084     arraySize = 300;
00085     
00086     //    Create the primary header extension
00087     createDspTrnPrimHead (fileNames, format, arraySize, trans, error);
00088     if (*error)
00089     {
00090     midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot create Primary Header extension");
00091     return;
00092     }
00093 
00094     //    Allocate memory
00095     stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00096     classification = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00097     dspTrnImage = (float *) calloc (arraySize * arraySize, sizeof (float));
00098 
00099     //    Convert Transmissivity vector into an image and write into the FITS file
00100     for (i = 0; i < 3; i++)
00101     {
00102         for (j = 0; j < 100; j++)
00103         {
00104             for (k = 0; k < arraySize; k++)
00105             {
00106                 l = (i * 100 + j) * arraySize + k;
00107                 dspTrnImage[l] = trans->transmission[i];
00108             }
00109         }
00110     }
00111     
00112     qdDspTrn.filename  = fileNames->outFitsName;
00113     qdDspTrn.npix      = arraySize * arraySize;
00114     qdDspTrn.ptype     = PTYPE_FLOAT;
00115     qdDspTrn.fbuf      = dspTrnImage;
00116     qdDspTrn.out_ptype = BPP_IEEE_FLOAT;
00117     qfits_pixdump (&qdDspTrn);
00118 
00119     free (dspTrnImage);
00120 
00121     //  Open the list of files
00122     if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch, "r")) == NULL)
00123     {
00124         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot open input FITS file list");
00125         *error = 1;
00126         return;
00127     }
00128 
00129 
00130     //  Read the name of the first file in the list and get it's full path name
00131     fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
00132     sprintf (classification, "%s", "");
00133     sscanf (stringTemp, "%s%s", fileNames->inFitsName, classification);
00134 
00135     // Copy keywords from the raw FITS file into the QC log
00136     createDspTrnQcLog (fileNames->inFitsName, error);
00137     if (*error)
00138         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot copy keywords to QC log");
00139 
00140     //    Add product info to QC log
00141     addProdInfoToDspTrnQcLog (format, fileNames, trans, error);
00142 
00143     //  Close files
00144     fclose (inFitsBatchPtr);
00145 
00146     //  Release memory
00147     free (classification);
00148     free (stringTemp);
00149  
00150     return; 
00151 }
00152 /*****************************************************************************/
00153 
00154 
00155 /******************************************************************************
00156 *               European Southern Observatory
00157 *            VLTI MIDI Data Reduction Software
00158 *
00159 * Module name:  createDspTrnPrimHead
00160 * Input/Output: See function arguments to avoid duplication
00161 * Description:  Creates the primary header
00162 *
00163 *
00164 * History:
00165 * 24-Aug-06     (csabet) Created
00166 ******************************************************************************/
00167 void createDspTrnPrimHead (
00168     MidiFiles       *fileNames,    // In: Pointer to the file structure
00169     ImageFormat        *format,    // In: Image format
00170     int                arraySize,    // In: size of the image
00171     DispersiveTrans    *trans,// In: Dispersive transmission data structure
00172     int                *error)        // Ou: Error status
00173 {
00174 
00175     //    Local Declarations
00176     //    ------------------
00177     const char      routine[] = "createDspTrnPrimHead";
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", arraySize);
00243     sprintf (sWidthX, "%d", arraySize);
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_DSPTRN", "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     //    Rewind the list of files
00263     rewind (inFitsBatchPtr);
00264     
00265     //    Loop through the list of files and write into the primary header
00266     i = 0;
00267     while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
00268     {
00269         sprintf (classification, "%s", "");
00270         sscanf (stringTemp, "%s%s", messageBuffer, classification);
00271 
00272         //    Get Technique
00273         stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR TECH");
00274         if (stringQfits == NULL)
00275         {
00276             sprintf (tech, "%s", "UNKNOWN");
00277             midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Technique");
00278         }
00279         else
00280         {
00281             cleanUpString (stringQfits, cleanString);
00282             sprintf (tech, "%s", cleanString);
00283         }
00284         
00285         //    If classification is not given get it from the raw file
00286         if (strcmp (classification, "") == 0)
00287         {
00288             stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR CATG");
00289             if (stringQfits == NULL)
00290             {
00291                 sprintf (classification, "%s", "UNKNOWN");
00292                 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Category");
00293             }
00294             else
00295             {
00296                 cleanUpString (stringQfits, cleanString);
00297                 sprintf (classification, "%s", cleanString);
00298             }
00299         }
00300         removePathName (messageBuffer, midiReportPtr);
00301         sprintf (textBuff, "HIERARCH ESO PRO REC1 RAW%d NAME", i+1);
00302         qfits_header_add (outFitsHeader, textBuff, messageBuffer, "FITS file name", "");
00303         sprintf (textBuff, "HIERARCH ESO PRO REC1 RAW%d CATG", i+1);
00304         qfits_header_add (outFitsHeader, textBuff, classification, "Observation Categoty", "");
00305         i++;
00306     }
00307     fclose (inFitsBatchPtr);
00308 
00309     //    Add Image parameters
00310     for (i = 0; i < trans->numOfFiles; i++)
00311     {
00312         if (strcmp (trans->grismId[i], "OPEN") == 0)
00313         {
00314             sprintf (messageBuffer, "%s", trans->grismId[i]);
00315             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM NAME", i+1);
00316             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Grism Name", "");
00317             sprintf (messageBuffer, "%s", trans->filterName[i]);
00318             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM FIL", i+1);
00319             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Filter Name", "");
00320             sprintf (messageBuffer, "%0.2f", trans->target[i].xCoord);
00321             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM X", i+1);
00322             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "x coordinate", "");
00323             sprintf (messageBuffer, "%0.2f", trans->target[i].yCoord);
00324             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM Y", i+1);
00325             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "y coordinate", "");
00326             sprintf (messageBuffer, "%0.2f", trans->target[i].dxCoord);
00327             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM DX", i+1);
00328             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Shift x coordinate", "");
00329             sprintf (messageBuffer, "%0.2f", trans->target[i].dyCoord);
00330             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM DY", i+1);
00331             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Shift y coordinate", "");
00332             sprintf (messageBuffer, "%0.4f", trans->integTime[i]);
00333             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM EXT", i+1);
00334             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Integration time", "");
00335             sprintf (messageBuffer, "%0.2f", trans->meanFlux[i]);
00336             sprintf (textBuff, "HIERARCH ESO QC TRN F%d IM CNT", i+1);
00337             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Mean flux", "");
00338         }
00339         else if (strcmp (trans->grismId[i], "GRISM") == 0)
00340         {
00341             sprintf (messageBuffer, "%s", trans->grismId[i]);
00342             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR NAME", i+1);
00343             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Grism Name", "");
00344             sprintf (messageBuffer, "%s", trans->filterName[i]);
00345             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR FIL", i+1);
00346             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Filter Name", "");
00347             sprintf (messageBuffer, "%0.2f", trans->target[i].xCoord);
00348             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR X", i+1);
00349             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "x coordinate", "");
00350             sprintf (messageBuffer, "%0.2f", trans->target[i].yCoord);
00351             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR Y", i+1);
00352             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "y coordinate", "");
00353             sprintf (messageBuffer, "%0.2f", trans->target[i].dxCoord);
00354             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR DX", i+1);
00355             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Shift x coordinate", "");
00356             sprintf (messageBuffer, "%0.2f", trans->target[i].dyCoord);
00357             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR DY", i+1);
00358             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Shift y coordinate", "");
00359             sprintf (messageBuffer, "%0.4f", trans->integTime[i]);
00360             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR EXT", i+1);
00361             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Integration time", "");
00362             sprintf (messageBuffer, "%0.2f", trans->meanFlux[i]);
00363             sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR CNT", i+1);
00364             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Mean flux", "");
00365             if (i == 3 || i == 4 || i == 5)
00366             {
00367                 sprintf (messageBuffer, "%0.6f", trans->transmission[i-3]);
00368                 sprintf (textBuff, "HIERARCH ESO QC TRN F%d GR TRANS", i+1);
00369                 qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Transmissivity", "");
00370             }
00371         }
00372         else if (strcmp (trans->grismId[i], "PRISM") == 0)
00373         {
00374             sprintf (messageBuffer, "%s", trans->grismId[i]);
00375             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR NAME", i+1);
00376             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Grism Name", "");
00377             sprintf (messageBuffer, "%s", trans->filterName[i]);
00378             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR FIL", i+1);
00379             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Filter Name", "");
00380             sprintf (messageBuffer, "%0.2f", trans->target[i].xCoord);
00381             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR X", i+1);
00382             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "x coordinate", "");
00383             sprintf (messageBuffer, "%0.2f", trans->target[i].yCoord);
00384             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR Y", i+1);
00385             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "y coordinate", "");
00386             sprintf (messageBuffer, "%0.2f", trans->target[i].dxCoord);
00387             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR DX", i+1);
00388             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Shift x coordinate", "");
00389             sprintf (messageBuffer, "%0.2f", trans->target[i].dyCoord);
00390             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR DY", i+1);
00391             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Shift y coordinate", "");
00392             sprintf (messageBuffer, "%0.4f", trans->integTime[i]);
00393             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR EXT", i+1);
00394             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Integration time", "");
00395             sprintf (messageBuffer, "%0.2f", trans->meanFlux[i]);
00396             sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR CNT", i+1);
00397             qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Mean flux", "");
00398             if (i == 3 || i == 4 || i == 5)
00399             {
00400                 sprintf (messageBuffer, "%0.6f", trans->transmission[i-3]);
00401                 sprintf (textBuff, "HIERARCH ESO QC TRN F%d PR TRANS", i+1);
00402                 qfits_header_add (outFitsHeader, textBuff, messageBuffer, "Transmissivity", "");
00403             }
00404         }
00405     }
00406 
00407     //    Place Holders
00408     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH1", "TBD", "TBD", "");
00409     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH2", "TBD", "TBD", "");
00410     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH3", "TBD", "TBD", "");
00411     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH4", "TBD", "TBD", "");
00412     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH5", "TBD", "TBD", "");
00413     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH6", "TBD", "TBD", "");
00414     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH7", "TBD", "TBD", "");
00415     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH8", "TBD", "TBD", "");
00416     qfits_header_add (outFitsHeader, "HIERARCH ESO QC PLACEH9", "TBD", "TBD", "");
00417     
00418     //    Create the output fits file. If the file exist delete it
00419     if (stat (fileNames->outFitsName, &buf) == 0) remove (fileNames->outFitsName);
00420 
00421     outFitsPtr = fopen (fileNames->outFitsName, "w");
00422     if (!outFitsPtr)
00423     {
00424         *error = 1;
00425         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot create output FITS file");
00426         free (messageBuffer);
00427         free (currentTime);
00428         free (cleanString);
00429         free (stringTemp);
00430         free (classification);
00431         free (textBuff);
00432         free (sWidthX);
00433         free (sWidthY);        
00434         return;
00435     }
00436 
00437    cpl_msg_info(cpl_func,"Created Product FITS file: %s \n", fileNames->outFitsName);
00438     fprintf (midiReportPtr, "Created Product FITS file: %s \n", fileNames->outFitsName);
00439 
00440     //    Write header into the output file
00441     qfits_header_sort (&outFitsHeader);
00442     qfits_header_dump (outFitsHeader, outFitsPtr);
00443     fclose (outFitsPtr);
00444     qfits_header_destroy (outFitsHeader);
00445 
00446     //    release memory
00447     free (messageBuffer);
00448     free (currentTime);
00449     free (cleanString);
00450     free (stringTemp);
00451     free (classification);
00452     free (tech);
00453     free (textBuff);
00454     free (sWidthX);    
00455     free (sWidthY);
00456 
00457     return;
00458 }
00459 /*****************************************************************************/
00460 
00461 
00462 /******************************************************************************
00463 *                European Southern Observatory
00464 *              VLTI MIDI Data Reduction Software 
00465 *
00466 * Module name:    createDspTrnQcLog
00467 * Input/Output:    See function arguments to avoid duplication
00468 * Description:    Copies keywords from the raw input FITS primary header to the 
00469 *               QC log and adds additional product keywords
00470 *
00471 * History:        
00472 * 30-Aug-04        (csabet) Created
00473 ******************************************************************************/
00474 void createDspTrnQcLog (
00475     char    *inFitsName,
00476     int      *error)
00477     
00478 {
00479 
00480     /*    Local Declarations
00481     --------------------*/
00482     const char         routine[] = "createDspTrnQcLog";
00483     char            *qfitsString, *emptyString, *cleanString;
00484 
00485     /*    Algorithm
00486     -----------*/
00487     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
00488     if (diagnostic > 4) fprintf(midiReportPtr, "Invoking      routine   '%s' \n", routine);
00489 
00490     /* Reset status */
00491     *error = 0;
00492 
00493     /* Allocate memory */
00494     emptyString = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00495     cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00496 
00497     /*    Initialise empty string */
00498     strcpy (emptyString, "\"UNKNOWN\"");
00499 
00500     /* Get all the keywords */
00501     qfitsString = qfits_query_hdr (inFitsName, "ARCFILE");
00502     if (qfitsString == NULL) 
00503         fprintf (midiQcLogPtr, "ARCFILE             %s \n", emptyString);
00504     else {cleanUpString (qfitsString, cleanString); 
00505         fprintf (midiQcLogPtr, "ARCFILE             \"%s\" \n", cleanString);}
00506 
00507     qfitsString = qfits_query_hdr (inFitsName, "TELESCOP");
00508     if (qfitsString == NULL) 
00509         fprintf (midiQcLogPtr, "TELESCOP            %s \n", emptyString);
00510     else {cleanUpString (qfitsString, cleanString); 
00511         fprintf (midiQcLogPtr, "TELESCOP            \"%s\" \n", cleanString);}
00512     
00513     qfitsString = qfits_query_hdr (inFitsName, "INSTRUME");
00514     if (qfitsString == NULL) 
00515         fprintf (midiQcLogPtr, "INSTRUME            %s \n", emptyString);
00516     else {cleanUpString (qfitsString, cleanString); 
00517         fprintf (midiQcLogPtr, "INSTRUME            \"%s\" \n", cleanString);}
00518     
00519     qfitsString = qfits_query_hdr (inFitsName, "MJD-OBS");
00520     if (qfitsString == NULL) 
00521         fprintf (midiQcLogPtr, "MJD-OBS             %s \n", emptyString);
00522     else {cleanUpString (qfitsString, cleanString); 
00523         fprintf (midiQcLogPtr, "MJD-OBS             \"%s\" \n", cleanString);}
00524     
00525     qfitsString = qfits_query_hdr (inFitsName, "DATE-OBS");
00526     if (qfitsString == NULL) 
00527         fprintf (midiQcLogPtr, "DATE-OBS            %s \n", emptyString);
00528     else {cleanUpString (qfitsString, cleanString); 
00529         fprintf (midiQcLogPtr, "DATE-OBS            \"%s\" \n", cleanString);}
00530     
00531     qfitsString = qfits_query_hdr (inFitsName, "UTC");
00532     if (qfitsString == NULL) 
00533         fprintf (midiQcLogPtr, "UTC                 %s \n", emptyString);
00534     else {cleanUpString (qfitsString, cleanString); 
00535         fprintf (midiQcLogPtr, "UTC                 %s \n", cleanString);}
00536     
00537     qfitsString = qfits_query_hdr (inFitsName, "LST");
00538     if (qfitsString == NULL) 
00539         fprintf (midiQcLogPtr, "LST                 %s \n", emptyString);
00540     else {cleanUpString (qfitsString, cleanString); 
00541         fprintf (midiQcLogPtr, "LST                 %s \n", cleanString);}
00542     
00543     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET CHIP NX");
00544     if (qfitsString == NULL) 
00545         fprintf (midiQcLogPtr, "DET.CHIP.NX         %s \n", emptyString);
00546     else {cleanUpString (qfitsString, cleanString); 
00547         fprintf (midiQcLogPtr, "DET.CHIP.NX         %s \n", cleanString);}
00548     
00549     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET CHIP NY");
00550     if (qfitsString == NULL) 
00551         fprintf (midiQcLogPtr, "DET.CHIP.NY         %s \n", emptyString);
00552     else {cleanUpString (qfitsString, cleanString); 
00553         fprintf (midiQcLogPtr, "DET.CHIP.NY         %s \n", cleanString);}
00554     
00555     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET DIT");
00556     if (qfitsString == NULL) 
00557         fprintf (midiQcLogPtr, "DET.DIT             %s \n", emptyString);
00558     else {cleanUpString (qfitsString, cleanString); 
00559         fprintf (midiQcLogPtr, "DET.DIT             %s \n", cleanString);}
00560     
00561     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET DITDELAY");
00562     if (qfitsString == NULL) 
00563         fprintf (midiQcLogPtr, "DET.DITDELAY        %s \n", emptyString);
00564     else {cleanUpString (qfitsString, cleanString); 
00565         fprintf (midiQcLogPtr, "DET.DITDELAY        %s \n", cleanString);}
00566     
00567     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET INT MODE");
00568     if (qfitsString == NULL) 
00569         fprintf (midiQcLogPtr, "DET.INT.MODE        %s \n", emptyString);
00570     else {cleanUpString (qfitsString, cleanString); 
00571         fprintf (midiQcLogPtr, "DET.INT.MODE        \"%s\" \n", cleanString);}
00572     
00573     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET NDIT");
00574     if (qfitsString == NULL) 
00575         fprintf (midiQcLogPtr, "DET.NDIT            %s \n", emptyString);
00576     else {cleanUpString (qfitsString, cleanString); 
00577         fprintf (midiQcLogPtr, "DET.NDIT            %s \n", cleanString);}
00578     
00579     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET NRTS MODE");
00580     if (qfitsString == NULL) 
00581         fprintf (midiQcLogPtr, "DET.NRTS.MODE       %s \n", emptyString);
00582     else {cleanUpString (qfitsString, cleanString); 
00583         fprintf (midiQcLogPtr, "DET.NRTS.MODE       \"%s\" \n", cleanString);}
00584     
00585     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN1 NX");
00586     if (qfitsString == NULL) 
00587         fprintf (midiQcLogPtr, "DET.WIN1.NX         %s \n", emptyString);
00588     else {cleanUpString (qfitsString, cleanString); 
00589         fprintf (midiQcLogPtr, "DET.WIN1.NX         %s \n", cleanString);}
00590     
00591     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN1 NY");
00592     if (qfitsString == NULL) 
00593         fprintf (midiQcLogPtr, "DET.WIN1.NY         %s \n", emptyString);
00594     else {cleanUpString (qfitsString, cleanString); 
00595         fprintf (midiQcLogPtr, "DET.WIN1.NY         %s \n", cleanString);}
00596     
00597     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN2 NX");
00598     if (qfitsString == NULL) 
00599         fprintf (midiQcLogPtr, "DET.WIN2.NX         %s \n", emptyString);
00600     else {cleanUpString (qfitsString, cleanString); 
00601         fprintf (midiQcLogPtr, "DET.WIN2.NX         %s \n", cleanString);}
00602     
00603     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DET WIN2 NY");
00604     if (qfitsString == NULL) 
00605         fprintf (midiQcLogPtr, "DET.WIN2.NY         %s \n", emptyString);
00606     else {cleanUpString (qfitsString, cleanString); 
00607         fprintf (midiQcLogPtr, "DET.WIN2.NY         %s \n", cleanString);}
00608     
00609     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR CATG");
00610     if (qfitsString == NULL) 
00611         fprintf (midiQcLogPtr, "DPR.CATG            %s \n", emptyString);
00612     else {cleanUpString (qfitsString, cleanString); 
00613         fprintf (midiQcLogPtr, "DPR.CATG            \"%s\" \n", cleanString);}
00614     
00615     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR TECH");
00616     if (qfitsString == NULL) 
00617         fprintf (midiQcLogPtr, "DPR.TECH            %s \n", emptyString);
00618     else {cleanUpString (qfitsString, cleanString); 
00619         fprintf (midiQcLogPtr, "DPR.TECH            \"%s\" \n", cleanString);}
00620     
00621     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO DPR TYPE");
00622     if (qfitsString == NULL) 
00623         fprintf (midiQcLogPtr, "DPR.TYPE            %s \n", emptyString);
00624     else {cleanUpString (qfitsString, cleanString); 
00625         fprintf (midiQcLogPtr, "DPR.TYPE            \"%s\" \n", cleanString);}
00626     
00627     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS CAM NAME");
00628     if (qfitsString == NULL) 
00629         fprintf (midiQcLogPtr, "INS.CAM.NAME        %s \n", emptyString);
00630     else {cleanUpString (qfitsString, cleanString); 
00631         fprintf (midiQcLogPtr, "INS.CAM.NAME        \"%s\" \n", cleanString);}
00632     
00633     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS FIL NAME");
00634     if (qfitsString == NULL) 
00635         fprintf (midiQcLogPtr, "INS.FILT.NAME       %s \n", emptyString);
00636     else {cleanUpString (qfitsString, cleanString); 
00637         fprintf (midiQcLogPtr, "INS.FILT.NAME       \"%s\" \n", cleanString);}
00638     
00639     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS GRIS NAME");
00640     if (qfitsString == NULL) 
00641         fprintf (midiQcLogPtr, "INS.GRIS.NAME       %s \n", emptyString);
00642     else {cleanUpString (qfitsString, cleanString); 
00643         fprintf (midiQcLogPtr, "INS.GRIS.NAME       \"%s\" \n", cleanString);}
00644     
00645     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS MODE");
00646     if (qfitsString == NULL) 
00647         fprintf (midiQcLogPtr, "INS.MODE            %s \n", emptyString);
00648     else {cleanUpString (qfitsString, cleanString); 
00649         fprintf (midiQcLogPtr, "INS.MODE            \"%s\" \n", cleanString);}
00650     
00651     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS OPT1 NAME");
00652     if (qfitsString == NULL) 
00653         fprintf (midiQcLogPtr, "INS.OPT1.NAME       %s \n", emptyString);
00654     else {cleanUpString (qfitsString, cleanString); 
00655         fprintf (midiQcLogPtr, "INS.OPT1.NAME       \"%s\" \n", cleanString);}
00656     
00657     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS OPT1 TYPE");
00658     if (qfitsString == NULL) 
00659         fprintf (midiQcLogPtr, "INS.OPT1.TYPE       %s \n", emptyString);
00660     else {cleanUpString (qfitsString, cleanString); 
00661         fprintf (midiQcLogPtr, "INS.OPT1.TYPE       \"%s\" \n", cleanString);}
00662     
00663     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS SHUT NAME");
00664     if (qfitsString == NULL) 
00665         fprintf (midiQcLogPtr, "INS.SHUT.NAME       %s \n", emptyString);
00666     else {cleanUpString (qfitsString, cleanString); 
00667         fprintf (midiQcLogPtr, "INS.SHUT.NAME       \"%s\" \n", cleanString);}
00668     
00669     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO INS SLIT NAME");
00670     if (qfitsString == NULL) 
00671         fprintf (midiQcLogPtr, "INS.SLIT.NAME       %s \n", emptyString);
00672     else {cleanUpString (qfitsString, cleanString); 
00673         fprintf (midiQcLogPtr, "INS.SLIT.NAME       \"%s\" \n", cleanString);}
00674 
00675     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS ID");
00676     if (qfitsString == NULL) 
00677         fprintf (midiQcLogPtr, "OBS.ID              %s \n", emptyString);
00678     else {cleanUpString (qfitsString, cleanString); 
00679         fprintf (midiQcLogPtr, "OBS.ID              \"%s\" \n", cleanString);}
00680     
00681     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS NAME");
00682     if (qfitsString == NULL) 
00683         fprintf (midiQcLogPtr, "OBS.NAME            %s \n", emptyString);
00684     else {cleanUpString (qfitsString, cleanString); 
00685         fprintf (midiQcLogPtr, "OBS.NAME            \"%s\" \n", cleanString);}
00686     
00687     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PI-COI ID");
00688     if (qfitsString == NULL) 
00689         fprintf (midiQcLogPtr, "OBS.PI-COI.ID       %s \n", emptyString);
00690     else {cleanUpString (qfitsString, cleanString); 
00691         fprintf (midiQcLogPtr, "OBS.PI-COI.ID       \"%s\" \n", cleanString);}
00692     
00693     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PI-COI NAME");
00694     if (qfitsString == NULL) 
00695         fprintf (midiQcLogPtr, "OBS.PI-COI.NAME     %s \n", emptyString);
00696     else {cleanUpString (qfitsString, cleanString); 
00697         fprintf (midiQcLogPtr, "OBS.PI-COI.NAME     \"%s\" \n", cleanString);}
00698     
00699     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS PROG ID");
00700     if (qfitsString == NULL) 
00701         fprintf (midiQcLogPtr, "OBS.PROG.ID         %s \n", emptyString);
00702     else {cleanUpString (qfitsString, cleanString); 
00703         fprintf (midiQcLogPtr, "OBS.PROG.ID         \"%s\" \n", cleanString);}
00704     
00705     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS START");
00706     if (qfitsString == NULL) 
00707         fprintf (midiQcLogPtr, "OBS.START           %s \n", emptyString);
00708     else {cleanUpString (qfitsString, cleanString); 
00709         fprintf (midiQcLogPtr, "OBS.START           \"%s\" \n", cleanString);}
00710     
00711     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OBS TARG NAME");
00712     if (qfitsString == NULL) 
00713         fprintf (midiQcLogPtr, "OBS.TARG.NAME       %s \n", emptyString);
00714     else {cleanUpString (qfitsString, cleanString); 
00715         fprintf (midiQcLogPtr, "OBS.TARG.NAME       \"%s\" \n", cleanString);}
00716     
00717     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO OCS EXPO1 FNAME1");
00718     if (qfitsString == NULL) 
00719         fprintf (midiQcLogPtr, "OCS.EXPO1.FNAME1    %s \n", emptyString);
00720     else {cleanUpString (qfitsString, cleanString); 
00721         fprintf (midiQcLogPtr, "OCS.EXPO1.FNAME1    \"%s\" \n", cleanString);}
00722     
00723     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO TPL ID");
00724     if (qfitsString == NULL) 
00725         fprintf (midiQcLogPtr, "TPL.ID              %s \n", emptyString);
00726     else {cleanUpString (qfitsString, cleanString); 
00727         fprintf (midiQcLogPtr, "TPL.ID              \"%s\" \n", cleanString);}
00728     
00729     qfitsString = qfits_query_hdr (inFitsName, "HIERARCH ESO TPL START");
00730     if (qfitsString == NULL) 
00731         fprintf (midiQcLogPtr, "TPL.START           %s \n", emptyString);
00732     else {cleanUpString (qfitsString, cleanString); 
00733         fprintf (midiQcLogPtr, "TPL.START           \"%s\" \n", cleanString);}
00734     
00735     
00736     /* Release memory */
00737     free (emptyString);
00738     free (cleanString);
00739     
00740     return;
00741 }
00742 /*****************************************************************************/
00743 
00744 
00745 
00746 /******************************************************************************
00747 *                European Southern Observatory
00748 *              VLTI MIDI Data Reduction Software 
00749 *
00750 * Module name:    addProdInfoToDspTrnQcLog
00751 * Input/Output:    See function arguments to avoid duplication
00752 * Description:    Adds product information to QC log
00753 *
00754 *
00755 * History:        
00756 * 16-Jan-04        (csabet) Created
00757 ******************************************************************************/
00758 void addProdInfoToDspTrnQcLog (
00759     ImageFormat        *format,    // In: Image format
00760     MidiFiles        *fileNames,
00761     DispersiveTrans    *trans,// In: Dispersive transmission data structure
00762     int                *error)
00763 {
00764 
00765     /*    Local Declarations
00766     --------------------*/
00767     const char         routine[] = "addProdInfoToDspTrnQcLog";
00768     int             i;
00769     FILE            *inFitsBatchPtr;
00770     char            *stringQfits, *messageBuffer, *currentTime, *textBuff, *cleanString,
00771                     *stringTemp, *classification;
00772     time_t          now;
00773     struct tm        *newTime;
00774     
00775     /*    Algorithm
00776     -----------*/
00777     if (diagnostic > 4)cpl_msg_info(cpl_func,"Invoking      routine   '%s' \n", routine);
00778     if (diagnostic > 4) fprintf (midiReportPtr, "Invoking      routine   '%s' \n", routine);
00779 
00780     /* Reset parameters */
00781     *error = 0;
00782 
00783     /*    Allocate memory */
00784     classification = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00785     stringTemp = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00786     cleanString = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00787     textBuff = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00788     messageBuffer = (char *) calloc (MAX_STRING_LENGTH, sizeof (char));
00789     currentTime = (char *) calloc (MIN_STRING_LENGTH, sizeof (char));
00790     
00791     /*    Get current time/date */
00792     now = time(NULL);
00793     newTime = gmtime (&now);
00794     strftime (currentTime, MIN_STRING_LENGTH, "%a %d %b %Y at %H:%M:%S", newTime);
00795 
00796     //    Add keyword to QC log file
00797     fprintf (midiQcLogPtr, "PRO.TYPE            \"%s\" \n", format->obsType);
00798     fprintf (midiQcLogPtr, "PRO.CATG            \"REDUCED_DSPTRN\" \n");
00799     fprintf (midiQcLogPtr, "PRO.ARCFILE         \"%s\" \n", fileNames->archFileName);
00800     fprintf (midiQcLogPtr, "PRO.PIPEDATE        \"%s\" \n", currentTime);
00801     fprintf (midiQcLogPtr, "PRO.VERSION         \"%s\" \n", MIDI_PIPE_VERSION);
00802     fprintf (midiQcLogPtr, "PRO.PIPEFILE        \"%s\" \n", fileNames->pipeFileName);
00803     fprintf (midiQcLogPtr, "PRO.DID             \"%s\" \n", MIDI_QC_DIC_VERSION);
00804 
00805     /*  Open the list of files */
00806     if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch, "r")) == NULL)
00807     {
00808         *error = 1;
00809         midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot open input FITS file list");
00810         free (messageBuffer);
00811         free (currentTime);
00812         free (cleanString);
00813         free (stringTemp);
00814         free (classification);
00815         free (textBuff);
00816         return;
00817     }
00818 
00819     /* Loop through the list of files and write into the QC log */
00820     i = 1;
00821     while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
00822     {
00823         sprintf (classification, "%s", "");
00824         sscanf (stringTemp, "%s%s", messageBuffer, classification);
00825         
00826         /* If classification is not given get it from the raw file */
00827         if (strcmp (classification, "") == 0)
00828         {
00829             stringQfits = qfits_query_hdr (messageBuffer, "HIERARCH ESO DPR CATG");
00830             if (stringQfits == NULL) 
00831             {
00832                 sprintf (classification, "%s", "UNKNOWN");
00833                 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Cannot get Observation Category");
00834             }
00835             else
00836             {
00837                 cleanUpString (stringQfits, cleanString);
00838                 sprintf (classification, "%s", cleanString);
00839             }
00840         }
00841         removePathName (messageBuffer, midiReportPtr);
00842         fprintf (midiQcLogPtr, "PRO.REC1.RAW%d.NAME  \"%s\" \n", i, messageBuffer);
00843         fprintf (midiQcLogPtr, "PRO.REC1.RAW%d.CATG  \"%s\" \n", i++, classification);
00844     }
00845     fclose (inFitsBatchPtr);
00846 
00847     for (i = 0; i < trans->numOfFiles; i++)
00848     {
00849         if (strcmp (trans->grismId[i], "OPEN") == 0)
00850         {
00851             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.NAME \"%s\" \n", i+1, trans->grismId[i]);
00852             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.FIL \"%s\" \n", i+1, trans->filterName[i]);
00853             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.X   %0.2f \n", i+1, trans->target[i].xCoord);
00854             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.Y   %0.2f \n", i+1, trans->target[i].yCoord);
00855             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.DX  %0.2f \n", i+1, trans->target[i].dxCoord);
00856             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.DY  %0.2f \n", i+1, trans->target[i].dyCoord);
00857             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.EXT %0.4f \n", i+1, trans->integTime[i]);
00858             fprintf (midiQcLogPtr, "QC.TRN.F%d.IM.CNT %0.2f \n", i+1, trans->meanFlux[i]);
00859         }
00860         else if (strcmp (trans->grismId[i], "PRISM") == 0)
00861         {
00862             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.NAME \"%s\" \n", i+1, trans->grismId[i]);
00863             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.FIL \"%s\" \n", i+1, trans->filterName[i]);
00864             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.X   %0.2f \n", i+1, trans->target[i].xCoord);
00865             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.Y   %0.2f \n", i+1, trans->target[i].yCoord);
00866             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.DX  %0.2f \n", i+1, trans->target[i].dxCoord);
00867             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.DY  %0.2f \n", i+1, trans->target[i].dyCoord);
00868             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.EXT %0.4f \n", i+1, trans->integTime[i]);
00869             fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.CNT %0.2f \n", i+1, trans->meanFlux[i]);
00870             if (i == 3 || i == 4 || i == 5) 
00871                 fprintf (midiQcLogPtr, "QC.TRN.F%d.PR.TRANS %0.6f \n", i+1, trans->transmission[i-3]);
00872         }
00873         else if (strcmp (trans->grismId[i], "GRISM") == 0)
00874         {
00875             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.NAME \"%s\" \n", i+1, trans->grismId[i]);
00876             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.FIL \"%s\" \n", i+1, trans->filterName[i]);
00877             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.X   %0.2f \n", i+1, trans->target[i].xCoord);
00878             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.Y   %0.2f \n", i+1, trans->target[i].yCoord);
00879             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.DX  %0.2f \n", i+1, trans->target[i].dxCoord);
00880             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.DY  %0.2f \n", i+1, trans->target[i].dyCoord);
00881             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.EXT %0.4f \n", i+1, trans->integTime[i]);
00882             fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.CNT %0.2f \n", i+1, trans->meanFlux[i]);
00883             if (i == 3 || i == 4 || i == 5) 
00884                 fprintf (midiQcLogPtr, "QC.TRN.F%d.GR.TRANS %0.6f \n", i+1, trans->transmission[i-3]);
00885         }
00886         else
00887         {
00888             midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, "Unknown Dispersive element");
00889             *error = 1;
00890             free (messageBuffer);
00891             free (currentTime);
00892             free (cleanString);
00893             free (stringTemp);
00894             free (classification);
00895             free (textBuff);
00896             return;
00897         }
00898     }
00899 
00900     /*    release memory */
00901     free (messageBuffer);
00902     free (currentTime);
00903     free (textBuff);
00904     free (cleanString);
00905     free (stringTemp);
00906     free (classification);
00907         
00908     return;
00909 }
00910 /*****************************************************************************/
00911 

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