24 #include "midiGlobal.h"
27 #include "memoryHandling.h"
28 #include "errorHandling.h"
29 #include "midiFitsUtility.h"
30 #include "diagnostics.h"
31 #include "preProcFrgSP.h"
59 FilterData *filterInfo,
61 CompressedData *compressedInterf,
62 CompressedData *compressedPhotomA,
63 CompressedData *compressedPhotomB,
64 ImageFormat *formatInterf,
65 ImageFormat *formatPhotomA,
66 ImageFormat *formatPhotomB,
72 const char routine[] =
"preProcFrgSP";
73 FILE *inFitsBatchPtr=NULL;
74 int newFile, extNumOfImagingDataFile, extNumOfImagingDataMask, R;
75 char *maskFile, *cleanString, *classification, *stringTemp, *fileName, *title;
76 unsigned int loopCount = 0;
77 ImageFormat *localFormat;
78 enum ObsTechnique obsTech;
82 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
83 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
85 cpl_msg_info(cpl_func,
"\nReducing data of batch %d \n", batchNumber);
86 cpl_msg_info(cpl_func,
"---------------------- \n");
87 fprintf (midiReportPtr,
"\nReducing data of batch %d \n", batchNumber);
88 fprintf (midiReportPtr,
"---------------------- \n");
92 compressedInterf->exists = 0;
93 compressedPhotomA->exists = 0;
94 compressedPhotomB->exists = 0;
99 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
100 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
101 cleanString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
102 localFormat = callocImageFormat ();
103 maskFile = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
106 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
108 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
109 "Cannot open input FITS file list. No compression has been carried out for this batch");
113 free (classification);
114 freeImageFormat (localFormat);
120 while (fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
122 sprintf (classification,
"%s",
"");
123 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
124 cpl_msg_info(cpl_func,
"\nProcessing file %s \n", fileNames->inFitsName);
125 fprintf (midiReportPtr,
"\nProcessing 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;
142 getFilterData (fileNames->inFitsName, filterInfo, error);
144 else fprintf (midiReportPtr,
"First file of batch = %s (QCLOG)\n", fileNames->inFitsName);
147 selectMask (options->maskMode, fileNames, maskFile, error);
151 extNumOfImagingDataMask = findImagingDataExtension (maskFile, MASK_IMAGING_DATA, error);
154 cpl_msg_info(cpl_func,
"Mask File is %s\n", maskFile);
155 fprintf( midiReportPtr,
"Mask File is %s\n", maskFile);
159 if (localFormat->hasData)
162 if (strcmp (localFormat->obsTech,
"INTERFEROMETRY") == 0)
165 if (obsTech != INTERF) newFile = 1;
171 if ((formatInterf->numOfDetectorRegions != localFormat->numOfDetectorRegions) ||
172 (formatInterf->iXWidth != localFormat->iXWidth) || (formatInterf->iYWidth != localFormat->iYWidth))
174 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Expected format is incorrect");
180 organiseFrgSP (newFile, extNumOfImagingDataFile, fileNames, extNumOfImagingDataMask,
181 maskFile, localFormat, formatInterf, compressedInterf, compressedPhotomA,
182 compressedPhotomB, error);
187 else if ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0) &&
188 (strcmp(localFormat->shutterId,
"AOPEN") == 0))
190 if (diagnostic > 1) midiReportInfo (midiReportPtr,
191 routine, __FILE__, __LINE__,
"The above Photometry file will not be processed");
194 else if ((strcmp (localFormat->obsTech,
"IMAGE,WINDOW,CHOPNOD") == 0) &&
195 (strcmp(localFormat->shutterId,
"BOPEN") == 0))
197 if (diagnostic > 1) midiReportInfo (midiReportPtr,
198 routine, __FILE__, __LINE__,
"The above Photometry file will not be processed");
203 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Unknown Catg, Type or Tech");
210 sprintf (midiMessage,
"No data tables in %s. Not processed", fileNames->inFitsName);
211 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
217 fclose (inFitsBatchPtr);
220 free (classification);
221 freeImageFormat (localFormat);
225 cpl_msg_info(cpl_func,
"\nCompression status \n");
226 cpl_msg_info(cpl_func,
"------------------ \n");
227 if (compressedInterf->exists)cpl_msg_info(cpl_func,
"Created Compressed Interferometry Data\n");
228 if (compressedPhotomA->exists)cpl_msg_info(cpl_func,
"Created Compressed Photometry A Data\n");
229 if (compressedPhotomB->exists)cpl_msg_info(cpl_func,
"Created Compressed Photometry B Data\n");
230 cpl_msg_info(cpl_func,
"\n");
232 fprintf (midiReportPtr,
"\nCompression status \n");
233 fprintf (midiReportPtr,
"------------------ \n");
234 if (compressedInterf->exists) fprintf (midiReportPtr,
"Created Compressed Interferometry Data\n");
235 if (compressedPhotomA->exists) fprintf (midiReportPtr,
"Created Compressed Photometry A Data\n");
236 if (compressedPhotomB->exists) fprintf (midiReportPtr,
"Created Compressed Photometry B Data\n");
237 fprintf (midiReportPtr,
"\n");
239 if (!(compressedInterf->exists) ||
240 !(compressedPhotomA->exists) || !(compressedPhotomB->exists) || *error)
243 sprintf (midiMessage,
244 "Cannot continue. Need the following compressed data: Interf, PhotomA, PhotomB");
245 midiReportWarning (midiReportPtr,
246 routine, __FILE__, __LINE__, midiMessage);
252 if (diagnostic > 1 && plotFile)
254 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
255 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
257 for (R = 0; R < formatInterf->numOfRegionsToProcess; R++)
259 sprintf (fileName,
"3dInterfDATA%d", R+2);
260 sprintf (title,
"Interferometry DATA %d (Masked and Sky removed)", R+2);
261 midiCreatePlotFile3D (fileName, title,
"X",
"Y",
"Flux", 0,
262 compressedInterf->image[R], formatInterf->iXWidth, formatInterf->iYWidth,
"lines",
"3");
265 for (R = 0; R < formatPhotomA->numOfRegionsToProcess; R++)
267 sprintf (fileName,
"3dPhotomADATA%d", R+1);
268 sprintf (title,
"Photometry A DATA %d (Masked and Sky removed)", R+1);
269 midiCreatePlotFile3D (fileName, title,
"X",
"Y",
"Flux", 0,
270 compressedPhotomA->image[R], formatPhotomA->iXWidth, formatPhotomA->iYWidth,
"lines",
"3");
273 for (R = 0; R < formatPhotomB->numOfRegionsToProcess; R++)
275 sprintf (fileName,
"3dPhotomBDATA%d", R+4);
276 sprintf (title,
"Photometry B DATA %d (Masked and Sky removed)", R+4);
277 midiCreatePlotFile3D (fileName, title,
"X",
"Y",
"Flux", 0,
278 compressedPhotomB->image[R], formatPhotomB->iXWidth, formatPhotomB->iYWidth,
"lines",
"3");
305 int extNumOfImagingDataFile,
306 MidiFiles *fileNames,
307 int extNumOfImagingDataMask,
309 ImageFormat *localFormat,
310 ImageFormat *formatInterf,
311 CompressedData *compressedInterf,
312 CompressedData *compressedPhotomA,
313 CompressedData *compressedPhotomB,
319 const char routine[] =
"organiseFrgSP";
324 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
325 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
331 frame0 = compressFrgSP (fileNames->inFitsName, maskFile, extNumOfImagingDataFile,
332 extNumOfImagingDataMask, compressedInterf, compressedPhotomA, compressedPhotomB,
333 newFile, localFormat, formatInterf->numOfFrames, error);
339 sprintf (midiMessage,
"\nWrote %d frames into Interf and Photom, starting at frame %d\nThus now %d frames total,"
340 " expecting %d altogether. Error=%d \n\n", localFormat->numOfFrames, frame0,
341 localFormat->numOfFrames+frame0, formatInterf->numOfFrames, *error);
342 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
346 if ((frame0 + localFormat->numOfFrames) == formatInterf->numOfFrames)
348 compressedInterf->exists = 1;
349 compressedPhotomA->exists = 1;
350 compressedPhotomB->exists = 1;
353 if (plotFile && diagnostic)
355 midiCreatePlotFile2D (
"Time",
"TIME",
"Frame",
"Time", 0, compressedInterf->time, 0,
356 formatInterf->numOfFrames, 1, 0);
357 midiCreatePlotFile2D (
"BigDelayLine",
"Net VLTI Delay Line Positions",
"Frame",
358 "Net Position", 0, compressedInterf->bigDL, 0, formatInterf->numOfFrames, 1, 0);
359 midiCreatePlotFile2D (
"PiezoDelayLine",
"Net Piezo Delay Line Position",
"Frame",
"Net Delay", 0,
360 compressedInterf->localOPD, 0, formatInterf->numOfFrames, 1, 0);
397 int extNumOfImagingDataFile,
398 int extNumOfImagingDataMask,
399 CompressedData *compressedInterf,
400 CompressedData *compressedPhotomA,
401 CompressedData *compressedPhotomB,
403 ImageFormat *localFormat,
410 const char routine[] =
"compressFrgSP";
411 qfits_table *pTable = NULL, *pMask = NULL;
412 short int **inData, *inSteppingPhase;
413 float **inMask, accum, current,
416 char **inTARTYP = NULL, *tempStr, fitsColumnString[10], *dataName, *title=NULL, *fileString=NULL;
417 double *inTIME = NULL;
419 double (*inLOCALOPD)[2] = NULL, (*inOPD)[2] = NULL;
420 static int aprioriSteppingPhase, iF, channelSelected = 0;
421 static double zeroTime;
422 int i, k, *foundData, foundSteppingPhase = 0, indexSteppingPhase, scalingOffset, *indexData,
423 *indexMask, maskWidthX, maskWidthY, maskSubWindow, F, X, Y, R,
424 *indexTARTYP, *foundTARTYP, startframe=0, frameOffset, indexOPD= -1, indexLOCALOPD= -1,
425 indexTIME= -1, maxstep,
431 int i2, fst, snd, found;
436 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
437 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
441 if (localFormat->numOfDetectorRegions != 4)
444 sprintf (midiMessage,
"Incorrect number of regions. Expected 4, found %d", localFormat->numOfDetectorRegions);
445 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
450 inData = (
short int **) calloc (localFormat->numOfDetectorRegions, sizeof (
short int *));
451 inTARTYP = (
char **) calloc (localFormat->numOfDetectorRegions, sizeof (
char *));
452 inMask = (
float **) calloc (localFormat->numOfDetectorRegions, sizeof (
float *));
453 foundData = (
int *) calloc (localFormat->numOfDetectorRegions, sizeof (
int));
454 indexData = (
int *) calloc (localFormat->numOfDetectorRegions, sizeof (
int));
455 foundTARTYP = (
int *) calloc (localFormat->numOfDetectorRegions, sizeof (
int));
456 indexTARTYP = (
int *) calloc (localFormat->numOfDetectorRegions, sizeof (
int));
457 indexMask = (
int *) calloc (localFormat->numOfDetectorRegions, sizeof (
int));
458 normalization = (
float *) calloc (localFormat->iXWidth, sizeof (
float));
459 dataName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
465 aprioriSteppingPhase = 0;
470 if ((iF + localFormat->numOfFrames) > numOfFramesMax)
471 localFormat->numOfFrames = numOfFramesMax - iF;
474 pMask = qfits_table_open (maskFile, extNumOfImagingDataMask);
477 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load Mask's IMAGING_DATA");
486 free (normalization);
491 pTable = qfits_table_open (inFitsFile, extNumOfImagingDataFile);
494 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load Data's IMAGING_DATA");
495 qfits_table_close (pMask);
504 free (normalization);
511 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
516 for (i = 0; i < pTable->nc; i++)
518 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
520 sprintf (dataName,
"DATA%d", R+1);
521 if (strcmp (pTable->col[i].tlabel, dataName) == 0)
527 cpl_msg_info(cpl_func,
"Found 'DATA%d' at column %d in data file %s \n", R+1, i+1, inFitsFile);
528 fprintf(midiReportPtr,
"Found 'DATA%d' at column %d in data file %s \n", R+1, i+1, inFitsFile);
532 sprintf (dataName,
"TARTYP%d", R+1);
533 if (strcmp (pTable->col[i].tlabel, dataName) == 0)
539 cpl_msg_info(cpl_func,
"Found 'TARTYP%d' at column %d in data file %s \n", R+1, i+1, inFitsFile);
540 fprintf(midiReportPtr,
"Found 'TARTYP%d' at column %d in data file %s \n", R+1, i+1, inFitsFile);
544 if (strcmp (pTable->col[i].tlabel,
"STEPPING_PHASE") == 0)
546 foundSteppingPhase = 1;
547 indexSteppingPhase = i;
549 if (strcmp (pTable->col[i].tlabel,
"OPD") == 0)
553 if (strcmp (pTable->col[i].tlabel,
"LOCALOPD") == 0)
557 if (strcmp (pTable->col[i].tlabel,
"TIME") == 0)
564 if (foundSteppingPhase == 0)
566 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot find STEPPING_PHASE in data FITS file");
571 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot find column for OPD in data FITS file");
574 if (indexLOCALOPD < 0)
576 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot find column for LOCALOPD in data FITS file");
581 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot find column for TIME in data FITS file");
584 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
586 if (foundData[R] == 0)
588 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
589 "Cannot find requested DATA column in data FITS file");
592 if (foundTARTYP[R] == 0)
594 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
595 "Cannot find requested TARTYP column in data FITS file");
601 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
606 for (i = 0; i < pMask->nc; i++)
608 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
610 sprintf (dataName,
"DATA%d", R+1);
611 if (strcmp (pMask->col[i].tlabel, dataName) == 0)
617 cpl_msg_info(cpl_func,
"Found 'DATA%d' at column %d in mask file %s \n", R+1, i+1, maskFile);
618 fprintf(midiReportPtr,
"Found 'DATA%d' at column %d in mask file %s \n", R+1, i+1, maskFile);
625 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
627 if (foundData[R] == 0)
629 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
630 "Cannot find requested DATA column in mask FITS file");
636 sprintf (fitsColumnString,
"TDIM%d", indexMask[1]+1);
637 tempStr = qfits_query_ext (maskFile, fitsColumnString, extNumOfImagingDataMask);
638 sscanf (tempStr,
"'(%d,%d) '", &maskWidthX, &maskWidthY);
639 maskSubWindow = maskWidthX * maskWidthY;
640 if (diagnostic)cpl_msg_info(cpl_func,
"Mask sub-window size = %d\n", maskSubWindow);
641 if (diagnostic)cpl_msg_info(cpl_func,
"Data sub-window size = %d\n", localFormat->subWindowSize);
642 fprintf (midiReportPtr,
"Mask sub-window size = %d\n", maskSubWindow);
643 fprintf (midiReportPtr,
"Data sub-window size = %d\n", localFormat->subWindowSize);
644 if (maskSubWindow != localFormat->subWindowSize)
646 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Mask has incompatible sub window size");
651 tempStr = qfits_query_ext (inFitsFile,
"MAXSTEP", extNumOfImagingDataFile);
654 if (diagnostic)cpl_msg_info(cpl_func,
"MAXSTEP = %s\n", tempStr);
655 fprintf( midiReportPtr,
"MAXSTEP = %s\n", tempStr);
656 sscanf (tempStr,
"%d", &maxstep);
660 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read MAXSTEP");
665 inSteppingPhase = (
short int*)qfits_query_column (pTable, indexSteppingPhase, NULL);
666 if (inSteppingPhase[0] != ((aprioriSteppingPhase % localFormat->framesPerScan) + 1))
668 sprintf (midiMessage,
"Incorrect Stepping Phase. Expected %d to %d. Instead found %d to %d",
669 aprioriSteppingPhase+1, maxstep, inSteppingPhase[0], maxstep-1);
670 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
677 qfits_table_close (pTable);
678 qfits_table_close (pMask);
687 free (normalization);
688 free (inSteppingPhase);
694 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
696 inData[R] = (
short int*) qfits_query_column (pTable, indexData[R], NULL);
697 inTARTYP[R] = (
char *) qfits_query_column (pTable, indexTARTYP[R], NULL);
700 for (F = 0; F < localFormat->numOfFrames; F++)
705 if (inTARTYP[R][F*tartypMult] ==
'U')
708 inTARTYP[R][F*tartypMult] =
'U';
712 if (R == 0) (compressedPhotomA->tarType)[iF+F] = inTARTYP[R][F*tartypMult];
713 else if (R == 1) (compressedInterf->tarType)[iF+F] = inTARTYP[R][F*tartypMult];
716 if (inTARTYP[R][F*tartypMult] != inTARTYP[R-1][F*tartypMult])
719 for (i = 0; i < localFormat->iXWidth; i++)
721 compressedInterf->rejectList[i][iF+F] |= BSL_TARTYPE_CROSS;
723 sprintf (midiMessage,
"Incompatible Interferometry TARTYP2 & TARTYP3 at frame %d", iF+F);
724 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
729 (compressedPhotomB->tarType)[iF+F] = inTARTYP[R][F*tartypMult];
730 if (inTARTYP[R][F*tartypMult] != inTARTYP[R-3][F*tartypMult])
733 for (i = 0; i < localFormat->iXWidth; i++)
735 compressedPhotomA->rejectList[i][iF+F] |= BSL_TARTYPE_CROSS;
736 compressedPhotomB->rejectList[i][iF+F] |= BSL_TARTYPE_CROSS;
738 sprintf (midiMessage,
"Incompatible Photometry TARTYP1 & TARTYP4 at frame %d", iF+F);
739 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
749 inTIME = (
double *) qfits_query_column (pTable, indexTIME, NULL);
751 if (iF == 0) zeroTime = inTIME[0];
756 for (startframe = 0; startframe < ARB_NUM_OF_FRAMES; startframe++)
758 if ((zeroTime = inTIME[startframe]) > 1.0)
766 cpl_msg_info(cpl_func,
"\nLOOK: frames 0 - %d had ZERO for their time field!!\n", startframe-1);
767 fprintf(midiReportPtr,
"\nLOOK: frames 0 - %d had ZERO for their time field!!\n", startframe-1);
771 for (F = startframe; F < localFormat->numOfFrames; F++)
773 compressedInterf->time[iF+F] = (float)(inTIME[F] - zeroTime);
774 compressedPhotomA->time[iF+F] = (float)(inTIME[F] - zeroTime);
775 compressedPhotomB->time[iF+F] = (float)(inTIME[F] - zeroTime);
776 if (isnan (compressedInterf->time[iF+F]) ||
777 isnan (compressedPhotomA->time[iF+F]) ||
778 isnan (compressedPhotomB->time[iF+F]))
781 for (i = 0; i < localFormat->iXWidth; i++)
783 compressedInterf->rejectList[i][iF+F] |= BSL_TIME_ERROR;
784 compressedPhotomA->rejectList[i][iF+F] |= BSL_TIME_ERROR;
785 compressedPhotomB->rejectList[i][iF+F] |= BSL_TIME_ERROR;
787 sprintf (midiMessage,
"inTIME has an INVALID value at frame %d", iF+F);
788 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
794 if (indexLOCALOPD >= 0)
796 inLOCALOPD = (double (*)[2]) qfits_query_column (pTable, indexLOCALOPD, NULL);
798 for (F = 0; F < localFormat->numOfFrames; F++)
800 compressedInterf->localOPD[iF+F] = (float)(inLOCALOPD[F][0] + inLOCALOPD[F][1]);
801 compressedPhotomA->localOPD[iF+F] = (float)(inLOCALOPD[F][0] + inLOCALOPD[F][1]);
802 compressedPhotomB->localOPD[iF+F] = (float)(inLOCALOPD[F][0] + inLOCALOPD[F][1]);
803 if (isnan (compressedInterf->localOPD[iF+F]) ||
804 isnan (compressedPhotomA->localOPD[iF+F]) ||
805 isnan (compressedPhotomB->localOPD[iF+F]))
808 for (i = 0; i < localFormat->iXWidth; i++)
810 compressedInterf->rejectList[i][iF+F] |= BSL_LOCALOPD_ERROR;
811 compressedPhotomA->rejectList[i][iF+F] |= BSL_LOCALOPD_ERROR;
812 compressedPhotomB->rejectList[i][iF+F] |= BSL_LOCALOPD_ERROR;
814 sprintf (midiMessage,
"localOPD has an INVALID value at frame %d", iF+F);
815 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
823 inOPD = (double (*)[2]) qfits_query_column (pTable, indexOPD, NULL);
825 for (F = 0; F < localFormat->numOfFrames; F++)
827 (compressedInterf->bigDL)[iF+F] = (
float)(inOPD[F][0] + inOPD[F][1]);
828 (compressedPhotomA->bigDL)[iF+F] = (
float)(inOPD[F][0] + inOPD[F][1]);
829 (compressedPhotomB->bigDL)[iF+F] = (
float)(inOPD[F][0] + inOPD[F][1]);
830 if (isnan (compressedInterf->bigDL[iF+F]) ||
831 isnan (compressedPhotomA->bigDL[iF+F]) ||
832 isnan (compressedPhotomB->bigDL[iF+F]))
835 for (i = 0; i < localFormat->iXWidth; i++)
837 compressedInterf->rejectList[i][iF+F] |= BSL_OPD_ERROR;
838 compressedPhotomA->rejectList[i][iF+F] |= BSL_OPD_ERROR;
839 compressedPhotomB->rejectList[i][iF+F] |= BSL_OPD_ERROR;
841 sprintf (midiMessage,
"bigDL has an INVALID value at frame %d", iF+F);
842 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
848 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
850 inMask[R] = (
float*) qfits_query_column (pMask, indexMask[R], NULL);
853 if (diagnostic > 1 && plotFile && newSet)
855 fileString = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
856 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
857 sprintf (fileString,
"3dMaskDATA%d", R+1);
858 sprintf (title,
"3D Mask DATA %d", R+1);
859 midiCreatePlotFile3D (fileString, title,
"X",
"Y",
"Flux", 0,
860 inMask[R], localFormat->iXWidth, localFormat->iYWidth,
"lines",
"3");
867 if (newSet || !channelSelected)
869 selectChannels (0, localFormat->numOfDetectorRegions, localFormat, inMask);
874 for (i = 14; i < 25; i++)
876 sprintf (dataName,
"TZERO%d", i);
877 tempStr = qfits_query_ext (inFitsFile, dataName, extNumOfImagingDataFile);
880 if (diagnostic)cpl_msg_info(cpl_func,
"Scaling Offset = %s\n", tempStr);
881 if (diagnostic) fprintf (midiReportPtr,
"Scaling Offset = %s\n", tempStr);
882 sscanf (tempStr,
"%d", &scalingOffset);
889 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read Scaling Offset. It is set to 0");
893 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
896 for (X = 0; X < localFormat->iXWidth; X++)
899 for (Y = 0; Y < localFormat->iYWidth; Y++)
900 accum += inMask[R][Y * localFormat->iXWidth + X];
903 normalization[X] = 1.F/accum;
905 normalization[X] = 1.F;
908 for (F = 0; F < localFormat->numOfFrames; F++)
910 frameOffset = F * localFormat->subWindowSize;
911 for (X = 0; X < localFormat->iXWidth; X++)
914 for (Y = 0; Y < localFormat->iYWidth; Y++)
916 k = Y * localFormat->iXWidth + X;
920 if (isnan (inData[R][i]))
922 compressedInterf->rejectList[X][iF+F] |= BSL_DATA_ERROR;
923 compressedPhotomA->rejectList[X][iF+F] |= BSL_DATA_ERROR;
924 compressedPhotomB->rejectList[X][iF+F] |= BSL_DATA_ERROR;
925 sprintf (midiMessage,
"inData has an INVALID value at frame %d", (iF+F));
926 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
930 current = (inData[R][i] + scalingOffset) * inMask[R][k];
938 (((compressedPhotomA->iDispFringe)[R])[X])[iF+F] =
939 accum * normalization[X];
940 (compressedPhotomA->iFringe1)[iF+F] += accum;
944 (((compressedInterf->iDispFringe)[R-1])[X])[iF+F] =
945 accum * normalization[X];
946 (compressedInterf->iFringe1)[iF+F] += accum;
947 (compressedInterf->iFringe)[iF+F] += accum;
951 (((compressedInterf->iDispFringe)[R-1])[X])[iF+F] =
952 accum * normalization[X];
953 (compressedInterf->iFringe2)[iF+F] += accum;
954 (compressedInterf->iFringe)[iF+F] -= accum;
958 (((compressedPhotomB->iDispFringe)[R-3])[X])[iF+F] =
959 accum * normalization[X];
960 (compressedPhotomB->iFringe1)[iF+F] += accum;
968 for (F = 0; F < localFormat->numOfFrames-maxstep; F++)
970 fst = F * localFormat->subWindowSize;
971 snd = (F+maxstep) * localFormat->subWindowSize;
972 if (compressedInterf->tarType[F] !=
'U')
974 for (Y = 0; Y < localFormat->iYWidth; Y++)
976 for (X = 0; X < localFormat->iXWidth; X++)
978 k = X * localFormat->iYWidth + Y;
981 if ((compressedInterf->tarType[F] ==
'T') && (compressedInterf->tarType[F+maxstep] ==
'S'))
982 current = (inData[R][i] + scalingOffset) - (inData[R][i2] + scalingOffset);
983 else if ((compressedInterf->tarType[F] ==
'S') && (compressedInterf->tarType[F+maxstep] ==
'T'))
984 current = (inData[R][i2] + scalingOffset) - (inData[R][i] + scalingOffset);
988 compressedPhotomA->image[R][k] += (current * inMask[R][k]);
989 if (R == 1 || R == 2)
990 compressedInterf->image[R-1][k] += (current * inMask[R][k]);
992 compressedPhotomB->image[R-3][k] += (current * inMask[R][k]);
1002 aprioriSteppingPhase = inSteppingPhase[F-1];
1003 if (aprioriSteppingPhase == localFormat->framesPerScan) aprioriSteppingPhase = 0;
1006 iF += localFormat->numOfFrames;
1009 for (R = 0; R < localFormat->numOfDetectorRegions; R++)
1015 if (pMask) qfits_table_close (pMask);
1016 if (pTable) qfits_table_close (pTable);
1017 if (inLOCALOPD) free(inLOCALOPD);
1018 if (inOPD) free(inOPD);
1019 if (inTIME) free(inTIME);
1023 free (inSteppingPhase);
1029 free (normalization);