24 #include "midiGlobal.h"
27 #include "errorHandling.h"
28 #include "memoryHandling.h"
29 #include "midiFitsUtility.h"
30 #include "fitsAnalysisFrgHS.h"
55 void analyseFitsFrgHS (
57 ImageFormat *formatInterf,
58 ImageFormat *formatPhotomA,
59 ImageFormat *formatPhotomB,
65 const char routine[] =
"analyseFitsFrgHS";
66 char *fileTemp, *classification;
67 FILE *inFitsBatchPtr=NULL;
68 int extNumOfImagingDataFile, aprioriDataIsDisp=0;
69 ImageFormat *localFormat=NULL;
70 char *cleanString=NULL, *aprioriCatg=NULL;
71 unsigned int numOfInterf, numOfPhotomA, numOfPhotomB, numOfAcq;
72 ImageFormat *formatAcq;
76 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
77 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
79 cpl_msg_info(cpl_func,
"\nAnalysing batch %d \n", batchNumber);
80 cpl_msg_info(cpl_func,
"--------------- \n");
81 fprintf (midiReportPtr,
"\nAnalysing batch %d \n", batchNumber);
82 fprintf (midiReportPtr,
"--------------- \n");
88 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
89 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
90 fileTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
91 aprioriCatg = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
92 localFormat = callocImageFormat ();
93 formatAcq = callocImageFormat ();
96 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
98 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
99 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"No analysis has been carried out for this batch");
102 freeImageFormat (localFormat);
103 freeImageFormat (formatAcq);
104 free (classification);
111 midiInitFormat (formatInterf);
113 midiInitFormat (formatPhotomA);
115 midiInitFormat (formatPhotomB);
117 midiInitFormat (formatAcq);
120 while (fgets (fileTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
122 sprintf (classification,
"%s",
"");
123 sscanf (fileTemp,
"%s%s", fileNames->inFitsName, classification);
124 if (diagnostic)cpl_msg_info(cpl_func,
"\nAnalysing file %s \n", fileNames->inFitsName);
125 fprintf(midiReportPtr,
"\nAnalysing file %s \n", fileNames->inFitsName);
128 extNumOfImagingDataFile = findImagingDataExtension (fileNames->inFitsName, TAB_IMAGING_DATA, error);
132 if (extNumOfImagingDataFile > 0)
134 getImageFormat (fileNames->inFitsName, extNumOfImagingDataFile, localFormat, error);
137 else localFormat->hasData = 0;
140 if (localFormat->hasData)
143 if (((strcmp (localFormat->obsCatg,
"CALIB") == 0) ||
144 (strcmp (localFormat->obsCatg,
"SCIENCE") == 0)) &&
145 ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW") == 0) ||
146 (strcmp (localFormat->obsType,
"COARSE,OBJECT") == 0)))
149 formatAcq->hasData = 1;
150 formatAcq->chopped = 0;
151 midiCopyFormat (localFormat, formatAcq);
154 formatAcq->numOfFrames += localFormat->numOfFrames;
162 if (numOfPhotomA == 0 && numOfPhotomA == 0 && numOfInterf == 0)
164 aprioriDataIsDisp = localFormat->isDisp;
165 sprintf (aprioriCatg,
"%s", localFormat->obsCatg);
169 if (localFormat->isDisp != aprioriDataIsDisp)
171 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Inconsistent Beam Combiner");
176 aprioriDataIsDisp = localFormat->isDisp;
179 if (strcmp (localFormat->obsCatg, aprioriCatg) != 0)
181 sprintf (midiMessage,
"Inconsistent Observation Category. Expected: %s", aprioriCatg);
182 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
187 sprintf (aprioriCatg,
"%s", localFormat->obsCatg);
190 if (strcmp (localFormat->obsTech,
"INTERFEROMETRY") == 0)
193 if (numOfInterf == 0)
195 formatInterf->hasData = 1;
196 formatInterf->chopped = 0;
197 midiCopyFormat (localFormat, formatInterf);
201 formatInterf->numOfFrames += localFormat->numOfFrames;
207 else if ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0) &&
208 (strcmp(localFormat->shutterId,
"AOPEN") == 0))
211 if (numOfPhotomA == 0)
213 formatPhotomA->hasData = 1;
214 formatPhotomA->chopped = 1;
215 midiCopyFormat (localFormat, formatPhotomA);
219 formatPhotomA->numOfFrames += localFormat->numOfFrames;
224 else if ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0) &&
225 (strcmp(localFormat->shutterId,
"BOPEN") == 0))
228 if (numOfPhotomB == 0)
230 formatPhotomB->hasData = 1;
231 formatPhotomB->chopped = 1;
232 midiCopyFormat (localFormat, formatPhotomB);
236 formatPhotomB->numOfFrames += localFormat->numOfFrames;
243 sprintf (midiMessage,
"Unknown Category, Tech or Type in ... %s. Not processed", fileNames->inFitsName);
244 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
251 sprintf (midiMessage,
"No data tables in ... %s. Not processed", fileNames->inFitsName);
252 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
258 if (fclose (inFitsBatchPtr))
259 midiReportError (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot close batch file");
262 if (!(*error) && (numOfPhotomA > 0) &&
263 (numOfPhotomB > 0) && (numOfInterf > 0) &&
264 (numOfPhotomA == numOfPhotomB))
267 formatInterf->numOfScans = formatInterf->numOfFrames / formatInterf->framesPerScan;
270 formatInterf->fftsize = determineFFTsize (formatInterf->framesPerScan);
273 formatInterf->allSpectrumLength = REGIONS_UNDISPERSED * formatInterf->numOfScans * (formatInterf->fftsize/2);
276 midiReportFormat (
"INTERFEROMETRY", aprioriDataIsDisp, formatInterf);
277 midiReportFormat (
"PHOTOMETRY A", aprioriDataIsDisp, formatPhotomA);
278 midiReportFormat (
"PHOTOMETRY B", aprioriDataIsDisp, formatPhotomB);
280 sprintf (midiMessage,
"%d useful Photometry and %d useful Interferometry files detected",
281 numOfPhotomA+numOfPhotomB, numOfInterf);
282 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
284 else if (!(*error) && (numOfAcq > 0))
287 formatAcq->numOfScans = formatAcq->numOfFrames / formatAcq->framesPerScan;
290 midiReportAcqFormat (formatAcq);
294 sprintf (fileTemp,
"%d", batchNumber);
295 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Inconsistent batch files");
304 if (!aprioriDataIsDisp)
306 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
307 "Data is UNDISPERSED\n Algorithm for processing this type of data is not ready");
314 if (fileTemp) free (fileTemp);
315 if (localFormat) freeImageFormat (localFormat);
316 if (formatAcq) freeImageFormat (formatAcq);
317 if (cleanString) free (cleanString);
318 if (classification) free (classification);
319 if (aprioriCatg) free (aprioriCatg);
338 void midiReportAcqFormat (
339 ImageFormat *formatAcq)
344 const char routine[] =
"midiReportAcqFormat";
348 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
349 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
351 cpl_msg_info(cpl_func,
"ACQUISITION FORMAT \n");
352 cpl_msg_info(cpl_func,
"------------------ \n");
353 cpl_msg_info(cpl_func,
"FITS Template Name = %s \n", formatAcq->tplName);
354 cpl_msg_info(cpl_func,
"Batch Template Name = %s \n", batchTemplate);
355 cpl_msg_info(cpl_func,
"Observation Category = %s \n", formatAcq->obsCatg);
356 cpl_msg_info(cpl_func,
"Observation Technique = %s \n", formatAcq->obsTech);
357 cpl_msg_info(cpl_func,
"Observation Type = %s \n", formatAcq->obsType);
358 cpl_msg_info(cpl_func,
"Camera ID = %s \n", formatAcq->cameraId);
359 cpl_msg_info(cpl_func,
"Beam Combiner = %s \n", formatAcq->beamCombiner);
360 cpl_msg_info(cpl_func,
"Filter ID = %s \n", formatAcq->filterName);
361 cpl_msg_info(cpl_func,
"Shutter ID = %s \n", formatAcq->shutterId);
362 cpl_msg_info(cpl_func,
"Grism ID = %s \n", formatAcq->grismId);
363 cpl_msg_info(cpl_func,
"Slit Name = %s \n", formatAcq->slitName);
364 cpl_msg_info(cpl_func,
"Target Name = %s \n", formatAcq->targetName);
365 cpl_msg_info(cpl_func,
"TPL Start = %s \n", formatAcq->tplStart);
366 cpl_msg_info(cpl_func,
"Number of Frames = %d \n", formatAcq->numOfFrames);
367 cpl_msg_info(cpl_func,
"Frames per scan = %d \n", formatAcq->framesPerScan);
368 cpl_msg_info(cpl_func,
"Number of Scans = %d \n", formatAcq->numOfScans);
369 cpl_msg_info(cpl_func,
"X, Column dimension = %d \n", formatAcq->iXWidth);
370 cpl_msg_info(cpl_func,
"Y, Column dimension = %d \n", formatAcq->iYWidth);
371 cpl_msg_info(cpl_func,
"Sub-window size = %d \n", formatAcq->subWindowSize);
372 cpl_msg_info(cpl_func,
"Number of Pinholes = %d \n", formatAcq->numOfPinholes);
373 cpl_msg_info(cpl_func,
"Number of Detector Regions = %d \n", formatAcq->numOfDetectorRegions);
374 cpl_msg_info(cpl_func,
"\n");
376 fprintf (midiReportPtr,
"ACQUISITION FORMAT \n");
377 fprintf (midiReportPtr,
"------------------ \n");
378 fprintf (midiReportPtr,
"FITS Template Name = %s \n", formatAcq->tplName);
379 fprintf (midiReportPtr,
"Batch Template Name = %s \n", batchTemplate);
380 fprintf (midiReportPtr,
"Observation Category = %s \n", formatAcq->obsCatg);
381 fprintf (midiReportPtr,
"Observation Technique = %s \n", formatAcq->obsTech);
382 fprintf (midiReportPtr,
"Observation Type = %s \n", formatAcq->obsType);
383 fprintf (midiReportPtr,
"Camera ID = %s \n", formatAcq->cameraId);
384 fprintf (midiReportPtr,
"Beam Combiner = %s \n", formatAcq->beamCombiner);
385 fprintf (midiReportPtr,
"Filter ID = %s \n", formatAcq->filterName);
386 fprintf (midiReportPtr,
"Shutter ID = %s \n", formatAcq->shutterId);
387 fprintf (midiReportPtr,
"Grism ID = %s \n", formatAcq->grismId);
388 fprintf (midiReportPtr,
"Slit Name = %s \n", formatAcq->slitName);
389 fprintf (midiReportPtr,
"Target Name = %s \n", formatAcq->targetName);
390 fprintf (midiReportPtr,
"TPL Start = %s \n", formatAcq->tplStart);
391 fprintf (midiReportPtr,
"Number of Frames = %d \n", formatAcq->numOfFrames);
392 fprintf (midiReportPtr,
"Frames per scan = %d \n", formatAcq->framesPerScan);
393 fprintf (midiReportPtr,
"Number of Scans = %d \n", formatAcq->numOfScans);
394 fprintf (midiReportPtr,
"X, Column dimension = %d \n", formatAcq->iXWidth);
395 fprintf (midiReportPtr,
"Y, Column dimension = %d \n", formatAcq->iYWidth);
396 fprintf (midiReportPtr,
"Sub-window size = %d \n", formatAcq->subWindowSize);
397 fprintf (midiReportPtr,
"Number of Pinholes = %d \n", formatAcq->numOfPinholes);
398 fprintf (midiReportPtr,
"Number of Detector Regions = %d \n", formatAcq->numOfDetectorRegions);
399 fprintf (midiReportPtr,
"\n");