25 #include "midiGlobal.h"
27 #include "imageProcessing.h"
28 #include "memoryHandling.h"
29 #include "errorHandling.h"
30 #include "createProdDetLin.h"
31 #include "midiFitsUtility.h"
32 #include "fitsAnalysisTec.h"
33 #include "procDetLin.h"
34 #include "statistics.h"
35 #include "diagnostics.h"
36 #include "cpl_polynomial.h"
38 #include "midi_cplutils.h"
39 #include "midi_cplupgrade.h"
73 const char routine[] =
"procDetLin";
74 ImageFormat *format=NULL;
75 DetLinearity *linearity=NULL;
77 FILE *signaturePtr=NULL;
81 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
82 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
85 signaturePtr = fopen (
"MIDI_sig_lin.log",
"w");
86 fclose (signaturePtr);
93 format = callocImageFormat ();
95 analyseFitsDetLin (fileNames, format, &numOfFiles, error);
98 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot analyse DETLIN");
99 freeImageFormat (format);
103 linearity = callocDetLin (numOfFiles, format);
104 computeDetLin (numOfFiles, fileNames, format, linearity, error);
107 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot process DETLIN");
108 freeDetLin (linearity);
109 freeImageFormat (format);
113 createDetLinProd (fileNames, format, numOfFiles, linearity, error);
114 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create DETLIN products");
117 freeDetLin (linearity);
118 freeImageFormat (format);
142 MidiFiles *fileNames,
144 DetLinearity *linearity,
150 const char routine[] =
"computeDetLin";
151 char *fileTemp, *classification, *firstFitsFile;
152 FILE *inFitsBatchPtr;
153 ImageFormat *formatLocal;
154 int localError, fileNumber, extNumOfImagingDataFile;
158 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
159 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
162 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
163 firstFitsFile = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
164 fileTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
165 formatLocal = callocImageFormat ();
171 linearity->exists = 0;
172 formatLocal->hasData = 0;
175 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
177 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
178 "Cannot open input FITS file list\n No compression has been carried out for this batch");
179 freeImageFormat (formatLocal);
181 free (classification);
187 while (fgets (fileTemp, MAX_STRING_LENGTH, inFitsBatchPtr) != NULL)
189 sprintf (classification,
"%s",
"");
190 sscanf (fileTemp,
"%s%s", fileNames->inFitsName, classification);
191 if (diagnostic)cpl_msg_info(cpl_func,
"\n Processing file %s \n", fileNames->inFitsName);
192 fprintf(midiReportPtr,
"\n Processing file %s \n", fileNames->inFitsName);
195 extNumOfImagingDataFile = findImagingDataExtension (fileNames->inFitsName, TAB_IMAGING_DATA, &localError);
203 if (extNumOfImagingDataFile > 0)
205 getImageFormat (fileNames->inFitsName, extNumOfImagingDataFile, formatLocal, &localError);
212 else formatLocal->hasData = 0;
215 if (formatLocal->hasData)
218 if ((strcmp (formatLocal->obsCatg,
"CALIB") == 0) &&
219 ((strcmp (formatLocal->obsTech,
"IMAGE") == 0) ||
220 (strcmp (formatLocal->obsTech,
"SPECTRUM") == 0)) &&
221 (strcmp (formatLocal->obsType,
"FLAT") == 0))
224 sprintf (linearity->grismId,
"%s", formatLocal->grismId);
225 if (diagnostic)cpl_msg_info(cpl_func,
" Grism ID for file %d = %s\n", fileNumber+1, formatLocal->grismId);
226 fprintf (midiReportPtr,
" Grism ID for file %d = %s\n", fileNumber+1, formatLocal->grismId);
229 createAndDisplayImageDetLin (fileNumber, fileNames->inFitsName, extNumOfImagingDataFile,
230 format, linearity, &localError);
231 if (localError) *error = 1;
234 getIntegrationTime (fileNumber, fileNames->inFitsName, linearity, &localError);
235 if (localError) *error = 1;
238 linearity->exists = 1;
242 if (fileNumber > numOfFiles)
249 if (fileNumber == 1) sprintf (firstFitsFile,
"%s", fileNames->inFitsName);
252 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__,
"The above file is not suitable for this task");
258 sprintf (midiMessage,
"No data tables in %s. Not processed", fileNames->inFitsName);
259 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
266 if ((linearity->exists) && !(*error) && (fileNumber == numOfFiles))
268 cpl_msg_info(cpl_func,
"\nDetector Linearity Inventry: \n");
269 cpl_msg_info(cpl_func,
"=========================== \n");
270 cpl_msg_info(cpl_func,
" Expected number of data files = %d\n", numOfFiles);
271 cpl_msg_info(cpl_func,
" Number of data files processed = %d\n", fileNumber);
272 cpl_msg_info(cpl_func,
"\n");
274 fprintf (midiReportPtr,
"\nDetector Linearity Inventry: \n");
275 fprintf (midiReportPtr,
"=========================== \n");
276 fprintf (midiReportPtr,
" Expected number of data files = %d\n", numOfFiles);
277 fprintf (midiReportPtr,
" Number of data files processed = %d\n", fileNumber);
278 fprintf (midiReportPtr,
"\n");
282 assessLinearity (format, firstFitsFile, linearity, error);
285 if (*error || localError)
286 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot assess Detector Linearity");
289 fclose (inFitsBatchPtr);
292 freeImageFormat (formatLocal);
294 free (classification);
295 free (firstFitsFile);
314 void createAndDisplayImageDetLin (
319 DetLinearity *linearity,
326 const char routine[] =
"createAndDisplayImageDetLin";
327 qfits_table *pTable = NULL;
329 char *tempStr, *string, *title, *dataName;
330 int i, foundData = 0, scalingOffset,
335 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
336 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
340 linearity->saturated[fileNumber] = 0;
343 pTable = qfits_table_open (fileName, extensionNumber);
346 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot load IMAGING_DATA");
352 for (i = 0; i < pTable->nc; i++)
354 if (strcmp (pTable->col[i].tlabel,
"DATA1") == 0)
362 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot find requested columns in data FITS file");
363 qfits_table_close (pTable);
369 inData = (
short int*) qfits_query_column (pTable, indexData, NULL);
372 dataName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
373 for (i = 14; i < 25; i++)
375 sprintf (dataName,
"TZERO%d", i);
376 tempStr = qfits_query_ext (fileName, dataName, extensionNumber);
379 if (diagnostic)cpl_msg_info(cpl_func,
"Scaling Offset = %s\n", tempStr);
380 if (diagnostic) fprintf (midiReportPtr,
"Scaling Offset = %s\n", tempStr);
381 sscanf (tempStr,
"%d", &scalingOffset);
388 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read Scaling Offset. It is set to 0");
393 createAveragedImage (inData, scalingOffset, format, linearity->aveImage[fileNumber]);
396 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
397 string = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
398 sprintf (title,
"AveImg%d", fileNumber+1);
399 sprintf (
string,
"file %d", fileNumber+1);
400 createFitsImage (
string, title, fileName, format->iXWidth, format->iYWidth, linearity->aveImage[fileNumber]);
405 sprintf (
string,
"3dAveImg%d", fileNumber+1);
406 sprintf (title,
"Averaged Image, file %d", fileNumber+1);
407 midiCreatePlotFile3D (
string, title,
"X",
"Y",
"Flux",
408 0, linearity->aveImage[fileNumber], format->iXWidth, format->iYWidth,
"lines",
"3");
412 checkSaturationDetLin (inData, scalingOffset, format, linearity->aveImage[fileNumber],
413 &(linearity->saturated[fileNumber]));
418 sprintf (
string,
"3dAveImgClean%d", fileNumber+1);
419 sprintf (title,
"Averaged Image. Excluding saturated pixels, file %d", fileNumber+1);
420 if (plotFile) midiCreatePlotFile3D (
string, title,
"X",
"Y",
"Flux",
421 0, linearity->aveImage[fileNumber], format->iXWidth, format->iYWidth,
"lines",
"3");
427 qfits_table_close (pTable);
446 void getIntegrationTime (
449 DetLinearity *linearity,
456 const char routine[] =
"getIntegrationTime";
458 float numOfSubInteg, subIntegTime;
462 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
463 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
469 tempStr = qfits_query_hdr (fileName,
"HIERARCH ESO DET DIT");
471 sscanf(tempStr,
"%f", &subIntegTime);
474 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read Integration time");
478 tempStr = qfits_query_hdr (fileName,
"HIERARCH ESO DET NDIT");
480 sscanf(tempStr,
"%f", &numOfSubInteg);
483 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read Number of Integrations");
487 linearity->integTime[fileNumber] = numOfSubInteg * subIntegTime;
538 void assessLinearity (
541 DetLinearity *linearity,
546 const char routine[] =
"assessLinearity";
547 cpl_polynomial *coefficients;
548 cpl_vector *xPosition, *values;
549 int j, f, x, y, p, xLength, yLength, xCoord, dxCoord, yCoord, dyCoord,
550 polyDeg = 3, numOfUnsatImages, imageSize, subImageSize;
552 double *integTime, *pixel, *cA0, *cA1, *cA2, *cA3, *linFit;
553 char *fileName, *title;
557 float sigData = 0.0, coeff1, coeff2, siga, sigb, chi2, q;
558 int sigDataAvailable = 0;
562 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
563 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
569 numOfUnsatImages = 0;
570 for (j = 0; j < linearity->size; j++)
572 if (!(linearity->saturated[j])) numOfUnsatImages++;
577 xLength = DET_LIN_WIN_PU * format->iXWidth;
578 if (xLength < DET_LIN_WIN_MIN) xLength = format->iXWidth;
579 xCoord = (format->iXWidth - xLength) / 2;
580 dxCoord = format->iXWidth - xCoord;
581 xLength = dxCoord - xCoord;
583 yLength = DET_LIN_WIN_PU * format->iYWidth;
584 if (yLength < DET_LIN_WIN_MIN) yLength = format->iYWidth;
585 yCoord = (format->iYWidth - yLength) / 2;
586 dyCoord = format->iYWidth - yCoord;
587 yLength = dyCoord - yCoord;
589 imageSize = format->iXWidth * format->iYWidth;
592 linearity->winx = xCoord;
593 linearity->windx = dxCoord;
594 linearity->winy = yCoord;
595 linearity->windy = dyCoord;
598 cpl_msg_info(cpl_func,
"\nSelected window size \n");
599 cpl_msg_info(cpl_func,
"-------------------- \n");
600 cpl_msg_info(cpl_func,
"xCoord = %3d \n", linearity->winx);
601 cpl_msg_info(cpl_func,
"dxCoord = %3d \n", linearity->windx);
602 cpl_msg_info(cpl_func,
"yCoord = %3d \n", linearity->winy);
603 cpl_msg_info(cpl_func,
"dyCoord = %3d \n", linearity->windy);
605 fprintf (midiReportPtr,
"\nSelected window size QCLOG \n");
606 fprintf (midiReportPtr,
"-------------------- QCLOG \n");
607 fprintf (midiReportPtr,
"xCoord = %3d QCLOG \n", linearity->winx);
608 fprintf (midiReportPtr,
"dxCoord = %3d QCLOG \n", linearity->windx);
609 fprintf (midiReportPtr,
"yCoord = %3d QCLOG \n", linearity->winy);
610 fprintf (midiReportPtr,
"dyCoord = %3d QCLOG \n", linearity->windy);
613 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
614 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
615 buffer = (
float *) calloc (imageSize,
sizeof (
float));
616 cA0 = (
double *) calloc (imageSize,
sizeof (
double));
617 cA1 = (
double *) calloc (imageSize,
sizeof (
double));
618 cA2 = (
double *) calloc (imageSize,
sizeof (
double));
619 cA3 = (
double *) calloc (imageSize,
sizeof (
double));
620 linFit = (
double *) calloc (numOfUnsatImages,
sizeof (
double));
623 for (j = 0; j < numOfUnsatImages; j++)
625 for (y = 0; y < format->iYWidth; y++)
627 f = y * format->iXWidth;
628 for (x = 0; x < format->iXWidth; x++)
630 if (!((x >= xCoord) && (x < dxCoord) && (y >= yCoord) && (y < dyCoord)))
633 linearity->aveImage[j][p] = 0.0;
637 if (plotFile && diagnostic)
639 sprintf (fileName,
"3dCentralImage%d", j+1);
640 sprintf (title,
"Averaged central image, file %d", j+1);
641 midiCreatePlotFile3D (fileName, title,
"X",
"Y",
"Flux", 0, linearity->aveImage[j],
642 format->iXWidth, format->iYWidth,
"lines",
"3");
647 pixel = (
double *) calloc (numOfUnsatImages,
sizeof (
double));
648 integTime = (
double *) calloc (numOfUnsatImages,
sizeof (
double));
651 for (j = 0; j < numOfUnsatImages; j++)
652 integTime[j] = (
double) (linearity->integTime[j]);
654 for (y = 0; y < format->iYWidth; y++)
656 f = y * format->iXWidth;
657 for (x = 0; x < format->iXWidth; x++)
660 if ((x >= xCoord) && (x < dxCoord) &&
661 (y >= yCoord) && (y < dyCoord))
664 for (j = 0; j < numOfUnsatImages; j++)
665 pixel[j] = (
double) (linearity->aveImage[j][p]);
668 if (plotFile && diagnostic > 2)
670 sprintf (title,
"Flux versus integration time. Pixel %d, %d", x, y);
671 midiCreatePlotFileDouble2D2P (
"temp1", title,
"Integration time",
"Pixel flux",
672 1, integTime, pixel, 0, numOfUnsatImages, 1,
"lines 3");
676 xPosition = cpl_vector_wrap (numOfUnsatImages, integTime);
677 values = cpl_vector_wrap (numOfUnsatImages, pixel);
678 coefficients = cpl_polynomial_fit_1d_create (xPosition, values, polyDeg, NULL);
680 cA0[p] = cpl_polynomial_get_coeff (coefficients, &power);
682 cA1[p] = cpl_polynomial_get_coeff (coefficients, &power);
684 cA2[p] = cpl_polynomial_get_coeff (coefficients, &power);
686 cA3[p] = cpl_polynomial_get_coeff (coefficients, &power);
687 cpl_vector_unwrap (xPosition);
688 cpl_vector_unwrap (values);
689 cpl_polynomial_delete (coefficients);
692 if (plotFile && diagnostic > 2)
695 for (j = 0; j < numOfUnsatImages; j++)
696 linFit[j] = cA0[p] + cA1[p] * j + cA2[p] * (j * j) + cA3[p] * (j * j * j);
698 sprintf (title,
"Flux versus integration time (polynomial fit). Pixel %d, %d", x, y);
699 midiCreatePlotFileDouble2D2P (
"temp1", title,
"Integration time",
"Pixel flux",
700 1, integTime, linFit, 0, numOfUnsatImages, 1,
"lines 1");
704 midiGetLinearFit (integTime, pixel, numOfUnsatImages, sigData, sigDataAvailable,
705 &coeff1, &coeff2, &siga, &sigb, &chi2, &q, error);
709 linearity->deviation[p] = sqrt ((siga+sigb)/2.0);
713 cpl_msg_info(cpl_func,
"\nPixel (%d, %d) statistics \n", x, y);
714 cpl_msg_info(cpl_func,
"------------------------- \n");
715 cpl_msg_info(cpl_func,
"coeff1 = %f \n", coeff1);
716 cpl_msg_info(cpl_func,
"coeff2 = %f \n", coeff2);
717 cpl_msg_info(cpl_func,
"siga = %f \n", siga);
718 cpl_msg_info(cpl_func,
"sigb = %f \n", sigb);
719 cpl_msg_info(cpl_func,
"chi2 = %f \n", chi2);
720 cpl_msg_info(cpl_func,
"q = %f \n", q);
721 fprintf (midiReportPtr,
"\nPixel (%d, %d) statistics \n", x, y);
722 fprintf (midiReportPtr,
"------------------------- \n");
723 fprintf (midiReportPtr,
"coeff1 = %f \n", coeff1);
724 fprintf (midiReportPtr,
"coeff2 = %f \n", coeff2);
725 fprintf (midiReportPtr,
"siga = %f \n", siga);
726 fprintf (midiReportPtr,
"sigb = %f \n", sigb);
727 fprintf (midiReportPtr,
"chi2 = %f \n", chi2);
728 fprintf (midiReportPtr,
"q = %f \n", q);
735 if (plotFile && diagnostic)
737 midiCreatePlotFileDouble3D (
"3dCoefficientMapA0",
"Map of A0 coefficients",
"X",
"Y",
"Coefficient value",
738 0, cA0, format->iXWidth, format->iYWidth,
"points",
"1");
739 midiCreatePlotFileDouble3D (
"3dCoefficientMapA1",
"Map of A1 coefficients",
"X",
"Y",
"Coefficient value",
740 0, cA1, format->iXWidth, format->iYWidth,
"points",
"1");
741 midiCreatePlotFileDouble3D (
"3dCoefficientMapA2",
"Map of A2 coefficients",
"X",
"Y",
"Coefficient value",
742 0, cA2, format->iXWidth, format->iYWidth,
"points",
"1");
743 midiCreatePlotFileDouble3D (
"3dCoefficientMapA3",
"Map of A3 coefficients",
"X",
"Y",
"Coefficient value",
744 0, cA3, format->iXWidth, format->iYWidth,
"points",
"1");
746 for (p = 0; p < imageSize; p++) buffer[p] = (
float) (cA0[p]);
747 removeDc (imageSize, buffer, buffer);
748 createFitsImage (
"Coefficients A0",
"CoefficientMapA0", firstFitsFile, format->iXWidth, format->iYWidth, buffer);
749 for (p = 0; p < imageSize; p++) buffer[p] = (
float) (cA1[p]);
750 removeDc (imageSize, buffer, buffer);
751 createFitsImage (
"Coefficients A1",
"CoefficientMapA1", firstFitsFile, format->iXWidth, format->iYWidth, buffer);
752 for (p = 0; p < imageSize; p++) buffer[p] = (
float) (cA2[p]);
753 removeDc (imageSize, buffer, buffer);
754 createFitsImage (
"Coefficients A2",
"CoefficientMapA2", firstFitsFile, format->iXWidth, format->iYWidth, buffer);
755 for (p = 0; p < imageSize; p++) buffer[p] = (
float) (cA3[p]);
756 removeDc (imageSize, buffer, buffer);
757 createFitsImage (
"Coefficients A3",
"CoefficientMapA3", firstFitsFile, format->iXWidth, format->iYWidth, buffer);
760 if (plotFile) midiCreatePlotFile3D (
"3dLinearitySigmaMap",
"Map of Linearity Standard Deviation",
"X",
"Y",
"Sigma",
761 0, linearity->deviation, format->iXWidth, format->iYWidth,
"lines",
"1");
764 removeDc (imageSize, linearity->deviation, buffer);
765 createFitsImage (
"Map of Linearity Standard Deviation",
"LinearitySigmaMap", firstFitsFile, format->iXWidth,
766 format->iYWidth, buffer);
769 linearity->meanCoeffA0 = 0.0;
770 linearity->meanCoeffA1 = 0.0;
771 linearity->meanCoeffA2 = 0.0;
772 linearity->meanCoeffA3 = 0.0;
774 for (y = 0; y < format->iYWidth; y++)
776 f = y * format->iXWidth;
777 for (x = 0; x < format->iXWidth; x++)
779 if ((x >= xCoord) && (x < dxCoord) && (y >= yCoord) && (y < dyCoord))
782 linearity->meanCoeffA0 += cA0[p];
783 linearity->meanCoeffA1 += cA1[p];
784 linearity->meanCoeffA2 += cA2[p];
785 linearity->meanCoeffA3 += cA3[p];
786 linearity->meanSigma += linearity->deviation[p];
793 linearity->meanCoeffA0 /= subImageSize;
794 linearity->meanCoeffA1 /= subImageSize;
795 linearity->meanCoeffA2 /= subImageSize;
796 linearity->meanCoeffA3 /= subImageSize;
797 linearity->meanSigma /= subImageSize;
800 cpl_msg_info(cpl_func,
"\nMean coefficients for polynomial fit: y = a0 + a1 * t + a2 * t^2 + a3 * t^3 \n");
801 cpl_msg_info(cpl_func,
"--------------------------------------------------------------------------- \n");
802 cpl_msg_info(cpl_func,
"a0, a1, a2, a3 = %f, %f, %f, %f \n",
803 linearity->meanCoeffA0, linearity->meanCoeffA1, linearity->meanCoeffA2, linearity->meanCoeffA3);
804 fprintf (midiReportPtr,
"\nMean coefficients for polynomial fit: y = a0 + a1 * t + a2 * t^2 + a3 * t^3 (QCLOG) \n");
805 fprintf (midiReportPtr,
"--------------------------------------------------------------------------- (QCLOG) \n");
806 fprintf (midiReportPtr,
"a0, a1, a2, a3 = %f, %f, %f, %f (QCLOG) \n",
807 linearity->meanCoeffA0, linearity->meanCoeffA1, linearity->meanCoeffA2, linearity->meanCoeffA3);
809 cpl_msg_info(cpl_func,
"\nMean linearity standard deviation = %f \n\n", linearity->meanSigma);
810 fprintf (midiReportPtr,
"\nMean linearity standard deviation = %f (QCLOG) \n\n", linearity->meanSigma);
813 for (j = 0; j < numOfUnsatImages; j++)
815 linFit[j] = linearity->meanCoeffA0 + linearity->meanCoeffA1 * j + linearity->meanCoeffA2 * (j * j) +
816 linearity->meanCoeffA3 * (j * j * j);
817 linearity->mean[j] = (float) linFit[j];
820 midiCreatePlotFileDouble2D2P (
"MeanFluxVersusTimePolyFit",
"Meam flux versus time (polynomial fit)",
821 "Integration time",
"Mean flux", 0, integTime, linFit, 0, numOfUnsatImages, 1,
"lines 1");
854 void checkSaturationDetLin (
864 const char routine[] =
"checkSaturationDetLin";
865 int i, count, pixel, frame, imageSize;
869 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
870 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
873 imageSize = format->iXWidth * format->iYWidth;
876 for (pixel = 0; pixel < imageSize; pixel++)
881 for (frame = 0; frame < format->numOfFrames; frame++)
884 i = frame * imageSize + pixel;
885 if (isnan (inData[i]))
887 sprintf (midiMessage,
"Found bad pixel %d on frame %d", frame, pixel);
888 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
890 else if (((
float) (inData[i] + scalingOffset)) >= PIXEL_SATURATION)
894 sprintf (midiMessage,
"Found saturated pixel %d on frame %d", frame, pixel);
895 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
902 image[pixel] += (float) (inData[i] + scalingOffset);
907 if (count) image[pixel] /= count;
912 sprintf (midiMessage,
"Found saturated pixels in this image");
913 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);