25 #include "midiGlobal.h"
28 #include "errorHandling.h"
29 #include "memoryHandling.h"
30 #include "midiFitsUtility.h"
31 #include "fitsAnalysisFrgSP.h"
57 void analyseFitsFrgSP (
59 ImageFormat *formatInterf,
60 ImageFormat *formatPhotomA,
61 ImageFormat *formatPhotomB,
67 const char routine[] =
"analyseFitsFrgSP";
68 char *fileTemp, *classification;
69 FILE *inFitsBatchPtr=NULL;
70 int extNumOfImagingDataFile, aprioriDataIsDisp=0;
71 ImageFormat *localFormat=NULL;
72 char *cleanString=NULL, *aprioriCatg=NULL;
73 unsigned int numOfInterf;
77 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
78 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
80 cpl_msg_info(cpl_func,
"\nAnalysing batch %d \n", batchNumber);
81 cpl_msg_info(cpl_func,
"--------------- \n");
82 fprintf (midiReportPtr,
"\nAnalysing batch %d \n", batchNumber);
83 fprintf (midiReportPtr,
"--------------- \n");
89 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
90 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
91 fileTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
92 aprioriCatg = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
93 localFormat = 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 free (classification);
110 midiInitFormat (formatInterf);
113 while (fgets (fileTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
115 sprintf (classification,
"%s",
"");
116 sscanf (fileTemp,
"%s%s", fileNames->inFitsName, classification);
117 if (diagnostic)cpl_msg_info(cpl_func,
"\nAnalysing file %s \n", fileNames->inFitsName);
118 fprintf(midiReportPtr,
"\nAnalysing file %s \n", fileNames->inFitsName);
121 extNumOfImagingDataFile = findImagingDataExtension (fileNames->inFitsName, TAB_IMAGING_DATA, error);
125 if (extNumOfImagingDataFile > 0)
127 getImageFormat (fileNames->inFitsName, extNumOfImagingDataFile, localFormat, error);
130 else localFormat->hasData = 0;
133 if (localFormat->hasData)
136 if (numOfInterf == 0)
138 aprioriDataIsDisp = localFormat->isDisp;
139 sprintf (aprioriCatg,
"%s", localFormat->obsCatg);
143 if (localFormat->isDisp != aprioriDataIsDisp)
145 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Inconsistent Beam Combiner");
150 aprioriDataIsDisp = localFormat->isDisp;
153 if (strcmp (localFormat->obsCatg, aprioriCatg) != 0)
155 sprintf (midiMessage,
"Inconsistent Observation Category. Expected: %s", aprioriCatg);
156 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
161 sprintf (aprioriCatg,
"%s", localFormat->obsCatg);
164 if (strcmp (localFormat->obsTech,
"INTERFEROMETRY") == 0)
167 if (numOfInterf == 0)
169 formatInterf->hasData = 1;
170 formatInterf->chopped = 1;
171 midiCopyFormat (localFormat, formatInterf);
173 formatPhotomA->hasData = 1;
174 formatPhotomA->chopped = 1;
175 midiCopyFormat (localFormat, formatPhotomA);
176 formatPhotomA->numOfRegionsToProcess = 1;
178 formatPhotomB->hasData = 1;
179 formatPhotomB->chopped = 1;
180 midiCopyFormat (localFormat, formatPhotomB);
181 formatPhotomB->numOfRegionsToProcess = 1;
185 formatInterf->numOfFrames += localFormat->numOfFrames;
186 formatPhotomA->numOfFrames += localFormat->numOfFrames;
187 formatPhotomB->numOfFrames += localFormat->numOfFrames;
192 else if (strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0)
194 if (diagnostic > 1) midiReportInfo (midiReportPtr,
195 routine, __FILE__, __LINE__,
"The above Photometry file will not be processed");
199 sprintf (midiMessage,
"Unknown Category, Tech or Type in ... %s. Not processed",
200 fileNames->inFitsName);
201 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
208 sprintf (midiMessage,
"No data tables in ... %s. Not processed", fileNames->inFitsName);
209 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
215 if (fclose (inFitsBatchPtr))
216 midiReportError (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot close batch file");
219 if (!(*error) && (numOfInterf > 0))
222 if ((formatInterf->framesPerScan == 0) || (formatPhotomA->framesPerScan == 0) ||
223 (formatPhotomB->framesPerScan == 0))
225 if (fileTemp) free (fileTemp);
226 if (localFormat) freeImageFormat (localFormat);
227 if (cleanString) free (cleanString);
228 if (classification) free (classification);
229 if (aprioriCatg) free (aprioriCatg);
230 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Potential singularity detected");
236 formatInterf->numOfScans = formatInterf->numOfFrames / formatInterf->framesPerScan;
237 formatPhotomA->numOfScans = formatPhotomA->numOfFrames / formatPhotomA->framesPerScan;
238 formatPhotomB->numOfScans = formatPhotomB->numOfFrames / formatPhotomB->framesPerScan;
241 formatInterf->numOfFrames = formatInterf->numOfScans * formatInterf->framesPerScan;
242 formatPhotomA->numOfFrames = formatPhotomA->numOfScans * formatPhotomA->framesPerScan;
243 formatPhotomB->numOfFrames = formatPhotomB->numOfScans * formatPhotomB->framesPerScan;
246 formatInterf->fftsize = determineFFTsize (formatInterf->framesPerScan);
249 formatInterf->allSpectrumLength = REGIONS_UNDISPERSED * formatInterf->numOfScans * (formatInterf->fftsize/2);
252 midiReportFormat (
"INTERFEROMETRY", aprioriDataIsDisp, formatInterf);
253 midiReportFormat (
"PHOTOMETRY A", aprioriDataIsDisp, formatPhotomA);
254 midiReportFormat (
"PHOTOMETRY B", aprioriDataIsDisp, formatPhotomB);
256 sprintf (midiMessage,
"Detected %d Interferometry files", numOfInterf);
257 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
261 sprintf (fileTemp,
"%d", batchNumber);
262 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Inconsistent batch files");
269 if (!aprioriDataIsDisp)
271 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
272 "Data is UNDISPERSED\n Algorithm for processing this type of data is not ready");
278 if (fileTemp) free (fileTemp);
279 if (localFormat) freeImageFormat (localFormat);
280 if (cleanString) free (cleanString);
281 if (classification) free (classification);
282 if (aprioriCatg) free (aprioriCatg);