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