26 #include "midiGlobal.h"
29 #include "errorHandling.h"
30 #include "memoryHandling.h"
31 #include "midiFitsUtility.h"
32 #include "fitsAnalysisKappa.h"
58 void analyseFitsKappa (
60 ImageFormat *formatInterfA,
61 ImageFormat *formatInterfB,
62 ImageFormat *formatPhotomA,
63 ImageFormat *formatPhotomB,
69 const char routine[] =
"analyseFitsKappa";
70 char *fileTemp, *classification;
71 FILE *inFitsBatchPtr=NULL;
72 int extNumOfImagingDataFile, aprioriDataIsDisp=0;
73 ImageFormat *localFormat=NULL;
74 char *cleanString=NULL, *aprioriCatg=NULL;
75 unsigned int numOfPhotomA, numOfPhotomB;
79 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
80 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
82 cpl_msg_info(cpl_func,
"\nAnalysing batch %d \n", batchNumber);
83 cpl_msg_info(cpl_func,
"--------------- \n");
84 fprintf (midiReportPtr,
"\nAnalysing batch %d \n", batchNumber);
85 fprintf (midiReportPtr,
"--------------- \n");
91 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
92 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
93 fileTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
94 aprioriCatg = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
95 localFormat = callocImageFormat ();
98 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
100 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
101 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"No analysis has been carried out for this batch");
104 freeImageFormat (localFormat);
105 free (classification);
112 midiInitFormat (formatPhotomA);
114 midiInitFormat (formatPhotomB);
117 while (fgets (fileTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
119 sprintf (classification,
"%s",
"");
120 sscanf (fileTemp,
"%s%s", fileNames->inFitsName, classification);
121 if (diagnostic)cpl_msg_info(cpl_func,
"\nAnalysing file %s \n", fileNames->inFitsName);
122 fprintf(midiReportPtr,
"\nAnalysing file %s \n", fileNames->inFitsName);
125 extNumOfImagingDataFile = findImagingDataExtension (fileNames->inFitsName, TAB_IMAGING_DATA, error);
129 if (extNumOfImagingDataFile > 0)
131 getImageFormat (fileNames->inFitsName, extNumOfImagingDataFile, localFormat, error);
134 else localFormat->hasData = 0;
137 if (localFormat->hasData)
140 if (numOfPhotomA == 0 && numOfPhotomA == 0)
142 aprioriDataIsDisp = localFormat->isDisp;
143 sprintf (aprioriCatg,
"%s", localFormat->obsCatg);
147 if (localFormat->isDisp != aprioriDataIsDisp)
149 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Inconsistent Beam Combiner");
154 aprioriDataIsDisp = localFormat->isDisp;
157 if (strcmp (localFormat->obsCatg, aprioriCatg) != 0)
159 sprintf (midiMessage,
"Inconsistent Observation Category. Expected: %s", aprioriCatg);
160 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
165 sprintf (aprioriCatg,
"%s", localFormat->obsCatg);
168 if (strcmp (localFormat->obsTech,
"INTERFEROMETRY") == 0)
170 if (diagnostic > 1) midiReportInfo (midiReportPtr,
171 routine, __FILE__, __LINE__,
"The above Interferometry file will not be processed");
173 else if ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0) &&
174 (strcmp(localFormat->shutterId,
"AOPEN") == 0))
177 if (numOfPhotomA == 0)
179 formatPhotomA->hasData = 1;
180 formatPhotomA->chopped = 1;
181 midiCopyFormat (localFormat, formatPhotomA);
182 formatPhotomA->numOfRegionsToProcess = 1;
183 formatInterfA->hasData = 1;
184 formatInterfA->chopped = 1;
185 midiCopyFormat (localFormat, formatInterfA);
189 formatPhotomA->numOfFrames += localFormat->numOfFrames;
190 formatInterfA->numOfFrames += localFormat->numOfFrames;
195 else if ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0) &&
196 (strcmp(localFormat->shutterId,
"BOPEN") == 0))
199 if (numOfPhotomB == 0)
201 formatPhotomB->hasData = 1;
202 formatPhotomB->chopped = 1;
203 midiCopyFormat (localFormat, formatPhotomB);
204 formatPhotomB->numOfRegionsToProcess = 1;
205 formatInterfB->hasData = 1;
206 formatInterfB->chopped = 1;
207 midiCopyFormat (localFormat, formatInterfB);
211 formatPhotomB->numOfFrames += localFormat->numOfFrames;
212 formatInterfB->numOfFrames += localFormat->numOfFrames;
219 sprintf (midiMessage,
"Unknown Category, Tech or Type in ... %s. Not processed",
220 fileNames->inFitsName);
221 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
228 sprintf (midiMessage,
"No data tables in ... %s. Not processed", fileNames->inFitsName);
229 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
235 if (fclose (inFitsBatchPtr))
236 midiReportError (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot close batch file");
239 if (!(*error) && (numOfPhotomA > 0) && (numOfPhotomB > 0) && (numOfPhotomA == numOfPhotomB))
242 if ((formatInterfA->framesPerScan == 0) || (formatInterfB->framesPerScan == 0) ||
243 (formatPhotomA->framesPerScan == 0) || (formatPhotomB->framesPerScan == 0))
245 if (fileTemp) free (fileTemp);
246 if (localFormat) freeImageFormat (localFormat);
247 if (cleanString) free (cleanString);
248 if (classification) free (classification);
249 if (aprioriCatg) free (aprioriCatg);
250 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Potential singularity detected");
256 formatInterfA->numOfScans = formatInterfA->numOfFrames / formatInterfA->framesPerScan;
257 formatInterfB->numOfScans = formatInterfB->numOfFrames / formatInterfB->framesPerScan;
258 formatPhotomA->numOfScans = formatPhotomA->numOfFrames / formatPhotomA->framesPerScan;
259 formatPhotomB->numOfScans = formatPhotomB->numOfFrames / formatPhotomB->framesPerScan;
262 formatInterfA->numOfFrames = formatInterfA->numOfScans * formatInterfA->framesPerScan;
263 formatInterfB->numOfFrames = formatInterfB->numOfScans * formatInterfB->framesPerScan;
264 formatPhotomA->numOfFrames = formatPhotomA->numOfScans * formatPhotomA->framesPerScan;
265 formatPhotomB->numOfFrames = formatPhotomB->numOfScans * formatPhotomB->framesPerScan;
268 formatInterfA->fftsize = determineFFTsize (formatInterfA->framesPerScan);
269 formatInterfB->fftsize = determineFFTsize (formatInterfB->framesPerScan);
272 formatInterfA->allSpectrumLength = REGIONS_UNDISPERSED * formatInterfA->numOfScans * (formatInterfA->fftsize/2);
273 formatInterfB->allSpectrumLength = REGIONS_UNDISPERSED * formatInterfB->numOfScans * (formatInterfB->fftsize/2);
276 midiReportFormat (
"INTERFEROMETRY A", aprioriDataIsDisp, formatInterfA);
277 midiReportFormat (
"INTERFEROMETRY B", aprioriDataIsDisp, formatInterfB);
278 midiReportFormat (
"PHOTOMETRY A", aprioriDataIsDisp, formatPhotomA);
279 midiReportFormat (
"PHOTOMETRY B", aprioriDataIsDisp, formatPhotomB);
281 sprintf (midiMessage,
"%d useful Photometry A and %d useful Photometry B files detected",
282 numOfPhotomA, numOfPhotomB);
283 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
287 sprintf (fileTemp,
"%d", batchNumber);
288 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Inconsistent batch files");
295 if (!aprioriDataIsDisp)
297 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
298 "Data is UNDISPERSED\n Algorithm for processing this type of data is not ready");
304 if (fileTemp) free (fileTemp);
305 if (localFormat) freeImageFormat (localFormat);
306 if (cleanString) free (cleanString);
307 if (classification) free (classification);
308 if (aprioriCatg) free (aprioriCatg);