22 #include <sys/types.h>
30 #include "midiGlobal.h"
32 #include "errorHandling.h"
33 #include "diagnostics.h"
58 void midiCreatePlotFileDouble3D (
59 const char *plotFileName,
74 const char routine[] =
"midiCreatePlotFileDouble3D";
75 int i, j, frame, zero = 0;
76 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
77 char *dataFilePath, *cmdFileName, *argument;
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 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
86 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
87 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
90 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
91 dataFilePtr = fopen (dataFilePath,
"w");
93 for (i = 0; i < sizeY; i++)
96 for (j = 0; j < sizeX; j++)
98 if (isnan (image[frame + j])) fprintf (dataFilePtr,
"%d \n", zero);
99 else fprintf (dataFilePtr,
"%8.4f ", image[frame + j]);
102 fprintf (dataFilePtr,
"\n");
104 fclose (dataFilePtr);
109 sprintf (cmdFileName,
"plotCmdFile.log");
110 cmdFilePtr = fopen (cmdFileName,
"w");
111 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
112 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
113 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
114 fprintf (cmdFilePtr,
"set zlabel \'%s\' \n", zLabel);
115 fprintf (cmdFilePtr,
"set xrange [0:%d] \n", sizeX);
116 fprintf (cmdFilePtr,
"set yrange [0:%d] \n", sizeY);
117 fprintf (cmdFilePtr,
"set ticslevel 0 \n");
118 fprintf (cmdFilePtr,
"splot \'%s\' matrix with %s %s \n", dataFilePath, style, lineType);
120 if (plotDuration == -1)
122 cpl_msg_info(cpl_func,
"\n");
123 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", plotDuration);
126 fprintf (cmdFilePtr,
"pause %d \n", plotDuration);
131 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 900x900+0+0 %s", cmdFileName);
135 remove (cmdFileName);
139 if (deletePlot || plotFile == 3)
remove (dataFilePath);
164 void midiCreatePlotFile3D (
165 const char *plotFileName,
175 const char *lineType)
180 const char routine[] =
"midiCreatePlotFile3D";
181 int i, j, frame, zero = 0;
182 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
183 char *dataFilePath, *cmdFileName, *argument;
187 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
188 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
191 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
192 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
193 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
196 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
197 dataFilePtr = fopen (dataFilePath,
"w");
199 for (i = 0; i < sizeY; i++)
202 for (j = 0; j < sizeX; j++)
204 if (isnan (image[frame + j])) fprintf (dataFilePtr,
"%d \n", zero);
205 else fprintf (dataFilePtr,
"%8.4f ", image[frame + j]);
208 fprintf (dataFilePtr,
"\n");
210 fclose (dataFilePtr);
215 sprintf (cmdFileName,
"plotCmdFile.log");
216 cmdFilePtr = fopen (cmdFileName,
"w");
217 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
218 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
219 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
220 fprintf (cmdFilePtr,
"set zlabel \'%s\' \n", zLabel);
221 fprintf (cmdFilePtr,
"set xrange [0:%d] \n", sizeX);
222 fprintf (cmdFilePtr,
"set yrange [0:%d] \n", sizeY);
223 fprintf (cmdFilePtr,
"set ticslevel 0 \n");
224 fprintf (cmdFilePtr,
"splot \'%s\' matrix with %s %s \n", dataFilePath, style, lineType);
226 if (plotDuration == -1)
228 cpl_msg_info(cpl_func,
"\n");
229 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", plotDuration);
232 fprintf (cmdFilePtr,
"pause %d \n", plotDuration);
237 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 900x900+0+0 %s", cmdFileName);
241 remove (cmdFileName);
245 if (deletePlot || plotFile == 3)
remove (dataFilePath);
269 void midiCreatePlotFileDouble2D (
270 const char *plotFileName,
283 const char routine[] =
"midiCreatePlotFileDouble2D";
285 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
286 char *dataFilePath, *cmdFileName, *argument;
290 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
291 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
294 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
295 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
296 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
299 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
300 dataFilePtr = fopen (dataFilePath,
"w");
301 for (i = begin; i < end; i += interval)
303 if (isnan (array[i])) fprintf (dataFilePtr,
"%d \n", zero);
304 else fprintf (dataFilePtr,
"%f \n", array[i]);
306 fclose (dataFilePtr);
311 sprintf (cmdFileName,
"plotCmdFile.grb");
312 cmdFilePtr = fopen (cmdFileName,
"w");
313 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
314 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
315 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
316 fprintf (cmdFilePtr,
"plot \'%s\' with lines 1\n", dataFilePath);
317 if (plotDuration == -1)
319 cpl_msg_info(cpl_func,
"\n");
320 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", plotDuration);
323 fprintf (cmdFilePtr,
"pause %d \n", plotDuration);
329 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 600x600+0+0 %s", cmdFileName);
333 remove (cmdFileName);
337 if (deletePlot || plotFile == 3)
remove (dataFilePath);
360 void midiCreateReplotFileDouble2D2P (
376 const char routine[] =
"midiCreateReplotFileDouble2D2P";
378 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
379 char *dataFilePath, *cmdFileName, *argument;
383 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
384 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
387 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
388 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
389 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
392 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
393 dataFilePtr = fopen (dataFilePath,
"w");
394 for (i = begin; i < end; i += interval)
396 if (isnan (arrayX[i]) || isnan (arrayY[i])) fprintf (dataFilePtr,
"%d %d \n", zero, zero);
397 else fprintf (dataFilePtr,
"%f %f \n", arrayX[i], arrayY[i]);
399 fclose (dataFilePtr);
404 sprintf (cmdFileName,
"plotCmdFile.grb");
405 cmdFilePtr = fopen (cmdFileName,
"w");
406 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
407 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
408 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
409 fprintf (cmdFilePtr,
"replot \'%s\' with %s\n", dataFilePath, lineType);
410 if (plotDuration == -1)
412 cpl_msg_info(cpl_func,
"\n");
413 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", plotDuration);
416 fprintf (cmdFilePtr,
"pause %d \n", plotDuration);
422 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 600x600+0+0 %s", cmdFileName);
426 remove (cmdFileName);
430 if (deletePlot || plotFile == 3)
remove (dataFilePath);
453 void midiCreatePlotFileDouble2D2P (
454 const char *plotFileName,
464 const char *lineType)
469 const char routine[] =
"midiCreatePlotFileDouble2D2P";
471 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
472 char *dataFilePath, *cmdFileName, *argument;
476 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
477 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
480 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
481 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
482 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
485 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
486 dataFilePtr = fopen (dataFilePath,
"w");
487 for (i = begin; i < end; i += interval)
489 if (isnan (arrayX[i]) || isnan (arrayY[i])) fprintf (dataFilePtr,
"%d %d \n", zero, zero);
490 else fprintf (dataFilePtr,
"%f %f \n", arrayX[i], arrayY[i]);
492 fclose (dataFilePtr);
497 sprintf (cmdFileName,
"plotCmdFile.grb");
498 cmdFilePtr = fopen (cmdFileName,
"w");
499 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
500 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
501 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
502 fprintf (cmdFilePtr,
"plot \'%s\' with %s\n", dataFilePath, lineType);
503 if (plotDuration == -1)
505 cpl_msg_info(cpl_func,
"\n");
506 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", plotDuration);
509 fprintf (cmdFilePtr,
"pause %d \n", plotDuration);
515 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 600x600+0+0 %s", cmdFileName);
519 remove (cmdFileName);
523 if (deletePlot || plotFile == 3)
remove (dataFilePath);
546 void midiCreatePlotFile2D2P (
547 const char *plotFileName,
561 const char routine[] =
"midiCreatePlotFile2D2P";
563 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
564 char *dataFilePath, *cmdFileName, *argument;
568 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
569 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
572 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
573 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
574 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
577 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
578 dataFilePtr = fopen (dataFilePath,
"w");
579 for (i = begin; i < end; i += interval)
581 if (isnan (arrayX[i]) || isnan (arrayY[i])) fprintf (dataFilePtr,
"%d %d \n", zero, zero);
582 else fprintf (dataFilePtr,
"%f %f \n", arrayX[i], arrayY[i]);
584 fclose (dataFilePtr);
589 sprintf (cmdFileName,
"plotCmdFile.grb");
590 cmdFilePtr = fopen (cmdFileName,
"w");
591 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
592 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
593 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
594 fprintf (cmdFilePtr,
"plot \'%s\' with lines 1\n", dataFilePath);
595 if (plotDuration == -1)
597 cpl_msg_info(cpl_func,
"\n");
598 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", plotDuration);
601 fprintf (cmdFilePtr,
"pause %d \n", plotDuration);
607 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 600x600+0+0 %s", cmdFileName);
611 remove (cmdFileName);
615 if (deletePlot || plotFile == 3)
remove (dataFilePath);
638 void midiCreatePlotFile2D (
639 const char *plotFileName,
653 const char routine[] =
"midiCreatePlotFile2D";
654 int i, zero = 0, duration;
655 FILE *dataFilePtr=NULL, *cmdFilePtr=NULL;
656 char *dataFilePath, *cmdFileName, *argument;
660 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
661 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
664 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
665 cmdFileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
666 argument = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
672 duration = plotDuration;
675 sprintf (dataFilePath,
"%s%s.%s.plt", outFileDir, outRootName, plotFileName);
676 dataFilePtr = fopen (dataFilePath,
"w");
677 for (i = begin; i < end; i += interval)
679 if (isnan (array[i])) fprintf (dataFilePtr,
"%d \n", zero);
680 else fprintf (dataFilePtr,
"%f \n", array[i]);
682 fclose (dataFilePtr);
687 sprintf (cmdFileName,
"plotCmdFile.grb");
688 cmdFilePtr = fopen (cmdFileName,
"w");
689 fprintf (cmdFilePtr,
"set title \'%s\' \n", title);
690 fprintf (cmdFilePtr,
"set xlabel \'%s\' \n", xLabel);
691 fprintf (cmdFilePtr,
"set ylabel \'%s\' \n", yLabel);
692 fprintf (cmdFilePtr,
"plot \'%s\' with lines 1\n", dataFilePath);
695 cpl_msg_info(cpl_func,
"\n");
696 fprintf (cmdFilePtr,
"pause %d \" ***** Hit Return to continue *****\" \n", duration);
699 fprintf (cmdFilePtr,
"pause %d \n", duration);
705 sprintf (argument,
"gnuplot -title \"MIDI DRS\" -geometry 600x600+0+0 %s", cmdFileName);
709 remove (cmdFileName);
713 if (deletePlot || plotFile == 3)
remove (dataFilePath);
737 void getVersions (
void)
745 cpl_msg_info(cpl_func,
"\nIntegrated Versions \n");
746 cpl_msg_info(cpl_func,
"------------------- \n");
747 cpl_msg_info(cpl_func,
"MIDI DRS Pipeline = %s \n", MIDI_PIPE_VERSION);
748 cpl_msg_info(cpl_func,
"Iau Exchange = %s \n", IAUEXCHANGE_VERSION);
749 cpl_msg_info(cpl_func,
"QC Dictionary = %s \n", MIDI_QC_DIC_VERSION);
750 cpl_msg_info(cpl_func,
"\n");
768 void prepareWaterfallDisplay (
769 MidiFiles *fileNames,
770 ImageFormat *imageSize,
771 CompressedData *compressed)
776 const char routine[] =
"prepareWaterfallDisplay";
777 qfits_header *pHeaderOut;
779 qfitsdumper qdFringe;
780 char *sFramesPerScan, *sNumOfScans, *classification, *stringTemp,
781 *currentTime, *sNumOfChannels, *sNumOfFreqBins;
782 FILE *inFitsBatchPtr = NULL;
784 char *fileName, *title;
785 int f, fs, s, numOfScans, framesPerScan, numOfFrames, scanMax, frameStart,
786 numOfFreqBins, frameEnd;
787 double *cleanArray, dcLevel, accum, fluxMax;
793 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
794 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
796 cpl_msg_info(cpl_func,
"\nCreating Waterfall Display Data for batch %d \n", batchNumber);
797 cpl_msg_info(cpl_func,
"----------------------------------------- \n");
798 fprintf (midiReportPtr,
"\nCreating Waterfall Display Data for batch %d \n", batchNumber);
799 fprintf (midiReportPtr,
"----------------------------------------- \n");
802 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
803 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
804 sNumOfScans = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
805 sFramesPerScan = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
806 sNumOfFreqBins = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
807 sNumOfChannels = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
808 cleanArray = (
double *) calloc (imageSize->numOfFrames, sizeof (
double));
809 currentTime = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
813 newTime = gmtime (&now);
814 strftime (currentTime, MIN_STRING_LENGTH,
"%a %d %b %Y at %H:%M:%S", newTime);
818 for (f = 0; f < imageSize->numOfFrames; f++)
820 if (compressed->tarType[f] ==
'T')
822 cleanArray[numOfFrames] = compressed->iFringe[f];
827 if (strcmp (imageSize->beamCombiner,
"SCI_PHOT") == 0)
829 numOfScans = countTransitions (
'T', imageSize->numOfFrames, compressed->tarType) + 1;
830 framesPerScan = numOfFrames / numOfScans;
834 numOfScans = imageSize->numOfScans;
835 framesPerScan = imageSize->framesPerScan;
839 for (s = 0; s < numOfScans; s++)
842 for (fs = 0; fs < framesPerScan; fs++)
844 f = fs + s * framesPerScan;
845 accum += cleanArray[f];
847 dcLevel = accum/framesPerScan;
848 for (fs = 0; fs < framesPerScan; fs++)
850 f = fs + s * framesPerScan;
851 cleanArray[f] -= dcLevel;
858 for (f = 0; f < numOfFrames; f++)
860 if (fabs(cleanArray[f]) > fluxMax)
862 fluxMax = fabs(cleanArray[f]);
866 scanMax = scanMax / framesPerScan + 1;
869 numOfFreqBins = POST_FFT_SIZE/2;
870 sprintf (sNumOfScans,
"%d", numOfScans);
871 sprintf (sFramesPerScan,
"%d", framesPerScan);
872 sprintf (sNumOfFreqBins,
"%d", numOfFreqBins);
873 sprintf (sNumOfChannels,
"%d", imageSize->iXWidth);
876 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
878 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
879 cpl_msg_info(cpl_func,
"\nCannot Create Waterfall Display Data for batch %d \n", batchNumber);
880 fprintf (midiReportPtr,
"\nCannot Create Waterfall Display Data for batch %d \n", batchNumber);
882 free (sFramesPerScan);
883 free (classification);
886 free (sNumOfFreqBins);
887 free (sNumOfChannels);
893 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
894 sprintf (classification,
"%s",
"");
895 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
898 if (diagnostic)cpl_msg_info(cpl_func,
"Extracting primary header from input FITS file %s \n", fileNames->inFitsName);
899 if (diagnostic) fprintf(midiReportPtr,
"Extracting primary header from input FITS file %s \n", fileNames->inFitsName);
900 pHeaderOut = qfits_header_read (fileNames->inFitsName);
901 if (pHeaderOut == NULL)
903 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot extract primary header from input FITS file");
904 cpl_msg_info(cpl_func,
"\nCannot Create Waterfall Display Data for batch %d \n", batchNumber);
905 fprintf (midiReportPtr,
"\nCannot Create Waterfall Display Data for batch %d \n", batchNumber);
907 free (sFramesPerScan);
908 free (classification);
911 free (sNumOfFreqBins);
912 free (sNumOfChannels);
917 qfits_header_mod (pHeaderOut,
"BITPIX",
"-64",
"number of bits per pixel");
918 qfits_header_mod (pHeaderOut,
"NAXIS",
"2",
"number of data axes");
919 qfits_header_add (pHeaderOut,
"NAXIS1", sFramesPerScan,
"",
"");
920 qfits_header_add (pHeaderOut,
"NAXIS2", sNumOfScans,
"",
"");
921 qfits_header_add (pHeaderOut,
"FREQBIN", sNumOfFreqBins,
"",
"");
922 qfits_header_add (pHeaderOut,
"NUMCHAN", sNumOfChannels,
"",
"");
923 qfits_header_mod (pHeaderOut,
"INSTRUME",
"MIDI",
"MIDI Raw Data Display FITS created by DRS pipeline" );
924 qfits_header_add (pHeaderOut,
"HIERARCH ESO PRO CATG",
"WATERFALL",
"Pipeline product category", NULL);
925 qfits_header_add (pHeaderOut,
"HIERARCH ESO PRO ARCFILE", fileNames->archFileName,
"Arcfile name of first raw file",
"");
926 qfits_header_add (pHeaderOut,
"HIERARCH ESO PRO PIPEDATE", currentTime,
"Pipeline run date",
"");
927 qfits_header_add (pHeaderOut,
"HIERARCH ESO PRO VERSION", MIDI_PIPE_VERSION,
"Pipeline version",
"");
928 qfits_header_add (pHeaderOut,
"PIPEFILE", fileNames->pipeFileName,
"Pipeline product file name",
"");
931 if (stat (fileNames->outWaterfallName, &buf) == 0)
remove (fileNames->outWaterfallName);
932 if ((waterfallPtr = fopen (fileNames->outWaterfallName,
"w")) == NULL)
934 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create Waterfall FITS file");
936 free (sFramesPerScan);
937 free (classification);
939 qfits_header_destroy (pHeaderOut);
941 free (sNumOfFreqBins);
942 free (sNumOfChannels);
946 if (diagnostic)cpl_msg_info(cpl_func,
"Created Waterfall FITS file: %s \n", fileNames->outWaterfallName);
947 fprintf (midiReportPtr,
"Created Waterfall FITS file: %s \n", fileNames->outWaterfallName);
949 qfits_header_dump (pHeaderOut, waterfallPtr);
950 fclose (waterfallPtr);
953 qfits_header_destroy (pHeaderOut);
956 qdFringe.filename = fileNames->outWaterfallName;
957 qdFringe.npix = framesPerScan * numOfScans;
958 qdFringe.ptype = PTYPE_DOUBLE;
959 qdFringe.dbuf = cleanArray;
960 qdFringe.out_ptype = BPP_IEEE_DOUBLE;
962 qfits_pixdump (&qdFringe);
963 qfits_zeropad (fileNames->outWaterfallName);
966 fclose (inFitsBatchPtr);
968 free (sFramesPerScan);
969 free (sNumOfFreqBins);
970 free (sNumOfChannels);
971 free (classification);
979 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
980 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
983 sprintf (fileName,
"FringeAtScan%d", scanMax-1);
984 sprintf (title,
"Fringe at scan %d", scanMax-1);
988 frameEnd = framesPerScan;
991 frameStart = (scanMax - 2) * framesPerScan;
992 frameEnd = (scanMax - 1) * framesPerScan;
994 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux (dc removed)", 0, cleanArray, frameStart, frameEnd, 1);
996 sprintf (fileName,
"FringeStrongest");
997 sprintf (title,
"Strongest fringe found at scan %d", scanMax);
998 frameStart = (scanMax - 1) * framesPerScan;
999 frameEnd = scanMax * framesPerScan;
1000 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux (dc removed)", 0, cleanArray, frameStart, frameEnd, 1);
1002 sprintf (fileName,
"FringeAtScan%d", scanMax+1);
1003 sprintf (title,
"Fringe at scan %d", scanMax+1);
1004 frameStart = scanMax * framesPerScan;
1005 frameEnd = (scanMax + 1) * framesPerScan;
1006 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux (dc removed)", 0, cleanArray, frameStart, frameEnd, 1);
1029 void prepareWaterpowerDisplay (
1030 MidiFiles *fileNames,
1031 ImageFormat *imageSize,
1036 const char routine[] =
"prepareWaterpowerDisplay";
1037 qfits_header *pHeaderOut;
1038 FILE *waterpowerPtr;
1039 qfitsdumper qdEachSpectrum;
1040 char *sFramesPerScan, *sNumOfScans, *classification, *stringTemp;
1041 FILE *inFitsBatchPtr = NULL;
1046 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1047 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1049 cpl_msg_info(cpl_func,
"\nCreating Waterpower Display Data for batch %d \n", batchNumber);
1050 cpl_msg_info(cpl_func,
"------------------------------------------ \n");
1051 fprintf (midiReportPtr,
"\nCreating Waterpower Display Data for batch %d \n", batchNumber);
1052 fprintf (midiReportPtr,
"------------------------------------------ \n");
1055 stringTemp = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1056 classification = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1057 sNumOfScans = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
1058 sFramesPerScan = (
char *) calloc (MIN_STRING_LENGTH,
sizeof (
char));
1061 sprintf (sNumOfScans,
"%d", imageSize->numOfScans);
1062 sprintf (sFramesPerScan,
"%d", imageSize->fftsize/2);
1065 if ((inFitsBatchPtr = fopen (fileNames->inFitsBatch,
"r")) == NULL)
1067 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open input FITS file list");
1068 cpl_msg_info(cpl_func,
"\nCannot Create Waterpower Display Data for batch %d \n", batchNumber);
1069 fprintf (midiReportPtr,
"\nCannot Create Waterpower Display Data for batch %d \n", batchNumber);
1071 free (sFramesPerScan);
1072 free (classification);
1077 fgets (stringTemp, MAX_STRING_LENGTH, inFitsBatchPtr);
1078 sprintf (classification,
"%s",
"");
1079 sscanf (stringTemp,
"%s%s", fileNames->inFitsName, classification);
1082 if (diagnostic)cpl_msg_info(cpl_func,
"Extracting primary header from input FITS file %s \n", fileNames->inFitsName);
1083 if (diagnostic) fprintf(midiReportPtr,
"Extracting primary header from input FITS file %s \n", fileNames->inFitsName);
1084 pHeaderOut = qfits_header_read (fileNames->inFitsName);
1085 if (pHeaderOut == NULL)
1087 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot extract header from input FITS file");
1088 cpl_msg_info(cpl_func,
"\nCannot Create Waterpower Display Data for batch %d \n", batchNumber);
1089 fprintf (midiReportPtr,
"\nCannot Create Waterpower Display Data for batch %d \n", batchNumber);
1091 free (sFramesPerScan);
1092 free (classification);
1098 qfits_header_mod (pHeaderOut,
"BITPIX",
"-64",
"number of bits per pixel");
1099 qfits_header_mod (pHeaderOut,
"NAXIS",
"2",
"number of data axes");
1100 qfits_header_add (pHeaderOut,
"NAXIS1", sFramesPerScan,
"",
"");
1101 qfits_header_add (pHeaderOut,
"NAXIS2", sNumOfScans,
"",
"");
1102 qfits_header_mod (pHeaderOut,
"INSTRUME",
"MIDI",
"MIDI Raw Data Display FITS created by DRS pipeline" );
1105 if (stat (fileNames->outWaterpowerName, &buf) == 0)
remove (fileNames->outWaterpowerName);
1106 if ((waterpowerPtr = fopen (fileNames->outWaterpowerName,
"w")) == NULL)
1108 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create Waterpower FITS file");
1110 free (sFramesPerScan);
1111 free (classification);
1113 qfits_header_destroy (pHeaderOut);
1117 if (diagnostic)cpl_msg_info(cpl_func,
"Created Waterpower FITS file: %s \n", fileNames->outWaterpowerName);
1118 fprintf (midiReportPtr,
"Created Waterpower FITS file: %s \n", fileNames->outWaterpowerName);
1120 qfits_header_dump (pHeaderOut, waterpowerPtr);
1121 fclose (waterpowerPtr);
1124 qfits_header_destroy (pHeaderOut);
1127 qdEachSpectrum.filename = fileNames->outWaterpowerName;
1128 qdEachSpectrum.npix = imageSize->allSpectrumLength;
1129 qdEachSpectrum.ptype = PTYPE_FLOAT;
1130 qdEachSpectrum.fbuf = allSpectrum;
1131 qdEachSpectrum.out_ptype = BPP_IEEE_FLOAT;
1133 qfits_pixdump (&qdEachSpectrum);
1134 qfits_zeropad (fileNames->outWaterpowerName);
1137 fclose (inFitsBatchPtr);
1141 free (sFramesPerScan);
1142 free (classification);
1162 void reportInterfChopping (
1163 const char *dataKey,
1164 ImageFormat *format,
1165 CompressedData *compressed)
1170 const char routine[] =
"reportInterfChopping";
1171 int f, s, u, n, fps;
1172 char *fileName, *title, *dataFilePath;
1173 FILE *dataFilePtr=NULL;
1178 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1179 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
1182 fps = format->framesPerScan;
1185 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1188 sprintf (dataFilePath,
"%s%s.Compressed%s.qc.dummy", outFileDir, outRootName, dataKey);
1189 dataFilePtr = fopen (dataFilePath,
"w");
1191 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
1192 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
1194 fprintf (dataFilePtr,
"Frame TarType DATA1 DATA2 DATA1-DATA2 \n");
1195 fprintf (dataFilePtr,
"================================================================= \n");
1199 fprintf (dataFilePtr,
"Frame TarType DATA2 DATA3 DATA2-DATA3 \n");
1200 fprintf (dataFilePtr,
"================================================================= \n");
1202 for (f = 0; f < format->numOfFrames; f++)
1204 fprintf (dataFilePtr,
"%5d %c %f %f %f\n", f, compressed->tarType[f],
1205 compressed->iFringe1[f], compressed->iFringe2[f], compressed->iFringe[f]);
1207 fclose (dataFilePtr);
1210 s = u = compressed->numOfTargetChops = 0;
1211 for (f = 0; f < format->numOfFrames; f++)
1213 if (compressed->tarType[f] ==
'S') s++;
1214 else if (compressed->tarType[f] ==
'T') (compressed->numOfTargetChops)++;
1218 cpl_msg_info(cpl_func,
"\n%s Chopping Statistics QCLOG \n", dataKey);
1219 cpl_msg_info(cpl_func,
"--------------------------------- QCLOG \n");
1220 cpl_msg_info(cpl_func,
"Number of Target chops = %d QCLOG \n", compressed->numOfTargetChops);
1221 cpl_msg_info(cpl_func,
"Number of Sky chops = %d QCLOG \n", s);
1222 cpl_msg_info(cpl_func,
"Number of Undefined chops = %d QCLOG \n", u);
1223 fprintf (midiReportPtr,
"\n%s Chopping Statistics QCLOG \n", dataKey);
1224 fprintf (midiReportPtr,
"--------------------------------- QCLOG \n");
1225 fprintf (midiReportPtr,
"Number of Target chops = %d QCLOG \n", compressed->numOfTargetChops);
1226 fprintf (midiReportPtr,
"Number of Sky chops = %d QCLOG \n", s);
1227 fprintf (midiReportPtr,
"Number of Undefined chops = %d QCLOG \n", u);
1229 if (plotFile && diagnostic > 1)
1231 array = (
double *) calloc (format->numOfFrames, sizeof (
double));
1232 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1233 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1235 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
1236 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
1239 for (f = 0; f < format->numOfFrames; f++)
1241 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1243 array[n] = compressed->iFringe1[f];
1247 sprintf (fileName,
"%sCompressedDATA1", dataKey);
1248 sprintf (title,
"Compressed %s DATA1", dataKey);
1249 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1252 for (f = 0; f < format->numOfFrames; f++)
1254 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe2[f]))))
1256 array[n] = compressed->iFringe2[f];
1260 sprintf (fileName,
"%sCompressedDATA2", dataKey);
1261 sprintf (title,
"Compressed %s DATA2", dataKey);
1262 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1265 for (f = 0; f < format->numOfFrames; f++)
1267 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe[f]))))
1269 array[n] = compressed->iFringe[f];
1273 sprintf (fileName,
"%sCompressedDATA1_DATA2", dataKey);
1274 sprintf (title,
"Compressed %s DATA1-DATA2", dataKey);
1275 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1280 for (f = 0; f < format->numOfFrames; f++)
1282 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1284 array[n] = compressed->iFringe1[f];
1288 sprintf (fileName,
"%sCompressedDATA2", dataKey);
1289 sprintf (title,
"Compressed %s DATA2", dataKey);
1290 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1293 for (f = 0; f < format->numOfFrames; f++)
1295 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe2[f]))))
1297 array[n] = compressed->iFringe2[f];
1301 sprintf (fileName,
"%sCompressedDATA3", dataKey);
1302 sprintf (title,
"Compressed %s DATA3", dataKey);
1303 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1306 for (f = 0; f < format->numOfFrames; f++)
1308 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe[f]))))
1310 array[n] = compressed->iFringe[f];
1314 sprintf (fileName,
"%sCompressedDATA2_DATA3", dataKey);
1315 sprintf (title,
"Compressed %s DATA2-DATA3", dataKey);
1316 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1324 free (dataFilePath);
1343 void displayInterfChoppingDisp (
1344 const char *dataKey,
1345 ImageFormat *format,
1346 CompressedData *compressed)
1351 const char routine[] =
"displayInterfChoppingDisp";
1353 char *fileName, *title;
1358 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1359 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
1362 if (plotFile && diagnostic > 4)
1364 arrayF = (
float *) calloc (format->numOfFrames, sizeof (
float));
1365 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1366 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1368 for (R = 0; R < format->numOfRegionsToProcess; R++)
1370 for (X = 0; X < format->iXWidth; X++)
1372 if (badChannelList[X])
1376 for (f = 0; f < format->numOfFrames; f++)
1378 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iDispFringe[R][X][f]))))
1380 arrayF[n] = compressed->iDispFringe[R][X][f];
1384 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
1385 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
1387 sprintf (fileName,
"%sCompressedDATA%d_X%d", dataKey, R+1, X+1);
1388 sprintf (title,
"Compressed %s DATA%d for Channel %d", dataKey, R+1, X+1);
1392 sprintf (fileName,
"%sCompressedDATA%d_X%d", dataKey, R+2, X+1);
1393 sprintf (title,
"Compressed %s DATA%d for Channel %d", dataKey, R+2, X+1);
1395 midiCreatePlotFile2D (fileName, title,
"Frame",
"Flux", 0, arrayF, 0, n, 1, 0);
1419 void reportPhotomChopping (
1420 const char *dataKey,
1421 ImageFormat *format,
1422 CompressedData *compressed)
1427 const char routine[] =
"reportPhotomChopping";
1428 int f, s, t, u, n, fps;
1429 char *fileName, *title, *dataFilePath;
1430 FILE *dataFilePtr=NULL;
1435 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1436 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
1439 fps = format->framesPerScan;
1442 dataFilePath = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1445 sprintf (dataFilePath,
"%s%s.Compressed%s.qc.dummy", outFileDir, outRootName, dataKey);
1446 dataFilePtr = fopen (dataFilePath,
"w");
1448 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
1449 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
1451 fprintf (dataFilePtr,
"Frame TarType DATA1 DATA2 \n");
1452 fprintf (dataFilePtr,
"======================================== \n");
1453 for (f = 0; f < format->numOfFrames; f++)
1455 fprintf (dataFilePtr,
"%5d %c %f %f \n", f, compressed->tarType[f],
1456 compressed->iFringe1[f], compressed->iFringe2[f]);
1461 if (strcmp (format->shutterId,
"AOPEN") == 0)
1463 fprintf (dataFilePtr,
"Frame TarType DATA1 \n");
1464 fprintf (dataFilePtr,
"===================== \n");
1465 for (f = 0; f < format->numOfFrames; f++)
1467 fprintf (dataFilePtr,
"%5d %c %f \n", f, compressed->tarType[f],
1468 compressed->iFringe1[f]);
1471 else if (strcmp (format->shutterId,
"BOPEN") == 0)
1473 fprintf (dataFilePtr,
"Frame TarType DATA4 \n");
1474 fprintf (dataFilePtr,
"===================== \n");
1475 for (f = 0; f < format->numOfFrames; f++)
1477 fprintf (dataFilePtr,
"%5d %c %f \n", f, compressed->tarType[f],
1478 compressed->iFringe1[f]);
1481 else if (strcmp (format->shutterId,
"ABOPEN") == 0)
1483 fprintf (dataFilePtr,
"Frame TarType DATA1 or DATA4 \n");
1484 fprintf (dataFilePtr,
"============================== \n");
1485 for (f = 0; f < format->numOfFrames; f++)
1487 fprintf (dataFilePtr,
"%5d %c %f \n", f, compressed->tarType[f],
1488 compressed->iFringe1[f]);
1492 fclose (dataFilePtr);
1496 for (f = 0; f < format->numOfFrames; f++)
1498 if (compressed->tarType[f] ==
'S') s++;
1499 else if (compressed->tarType[f] ==
'T') t++;
1503 cpl_msg_info(cpl_func,
"\n%s Chopping Statistics QCLOG \n", dataKey);
1504 cpl_msg_info(cpl_func,
"--------------------------------- QCLOG \n");
1505 cpl_msg_info(cpl_func,
"Number of Target chops = %d QCLOG \n", t);
1506 cpl_msg_info(cpl_func,
"Number of Sky chops = %d QCLOG \n", s);
1507 cpl_msg_info(cpl_func,
"Number of Undefined chops = %d QCLOG \n", u);
1508 fprintf (midiReportPtr,
"\n%s Chopping Statistics QCLOG \n", dataKey);
1509 fprintf (midiReportPtr,
"--------------------------------- QCLOG \n");
1510 fprintf (midiReportPtr,
"Number of Target chops = %d QCLOG \n", t);
1511 fprintf (midiReportPtr,
"Number of Sky chops = %d QCLOG \n", s);
1512 fprintf (midiReportPtr,
"Number of Undefined chops = %d QCLOG \n", u);
1514 if (plotFile && diagnostic > 1)
1516 array = (
double *) calloc (format->numOfFrames, sizeof (
double));
1517 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1518 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1520 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
1521 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
1524 for (f = 0; f < format->numOfFrames; f++)
1526 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1528 array[n] = compressed->iFringe1[f];
1532 sprintf (fileName,
"%sCompressedDATA1", dataKey);
1533 sprintf (title,
"Compressed %s DATA1", dataKey);
1534 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1537 for (f = 0; f < format->numOfFrames; f++)
1539 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe2[f]))))
1541 array[n] = compressed->iFringe2[f];
1545 sprintf (fileName,
"%sCompressedDATA2", dataKey);
1546 sprintf (title,
"Compressed %s DATA2", dataKey);
1547 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1551 if (strcmp (format->shutterId,
"AOPEN") == 0)
1554 for (f = 0; f < format->numOfFrames; f++)
1556 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1558 array[n] = compressed->iFringe1[f];
1562 sprintf (fileName,
"%sCompressedDATA1", dataKey);
1563 sprintf (title,
"Compressed %s DATA1", dataKey);
1564 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1566 else if (strcmp (format->shutterId,
"BOPEN") == 0)
1569 for (f = 0; f < format->numOfFrames; f++)
1571 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1573 array[n] = compressed->iFringe1[f];
1577 sprintf (fileName,
"%sCompressedDATA4", dataKey);
1578 sprintf (title,
"Compressed %s DATA4", dataKey);
1579 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1583 if (strcmp (dataKey,
"PHOTOMA") == 0)
1586 for (f = 0; f < format->numOfFrames; f++)
1588 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1590 array[n] = compressed->iFringe1[f];
1594 sprintf (fileName,
"%sCompressedDATA1", dataKey);
1595 sprintf (title,
"Compressed %s DATA1", dataKey);
1596 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1601 for (f = 0; f < format->numOfFrames; f++)
1603 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iFringe1[f]))))
1605 array[n] = compressed->iFringe1[f];
1609 sprintf (fileName,
"%sCompressedDATA4", dataKey);
1610 sprintf (title,
"Compressed %s DATA4", dataKey);
1611 midiCreatePlotFileDouble2D (fileName, title,
"Frame",
"Flux", 0, array, 0, n, 1);
1621 free (dataFilePath);
1639 void displayPhotomChoppingDisp (
1640 const char *dataKey,
1641 ImageFormat *format,
1642 CompressedData *compressed)
1647 const char routine[] =
"displayPhotomChoppingDisp";
1649 char *fileName, *title;
1654 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1655 if (diagnostic > 4) fprintf (midiReportPtr,
"Invoking routine '%s' \n", routine);
1659 if (plotFile && diagnostic > 4)
1661 arrayF = (
float *) calloc (format->numOfFrames, sizeof (
float));
1662 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1663 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1665 for (R = 0; R < format->numOfRegionsToProcess; R++)
1667 for (X = 0; X < format->iXWidth; X++)
1670 for (f = 0; f < format->numOfFrames; f++)
1672 if ((compressed->tarType[f] !=
'U') && (!(isnan (compressed->iDispFringe[R][X][f]))))
1674 arrayF[n] = compressed->iDispFringe[R][X][f];
1678 if ((strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0) ||
1679 (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0))
1681 sprintf (fileName,
"%sCompressedDATA%d_X%d", dataKey, R+1, X+1);
1682 sprintf (title,
"Compressed %s DATA%d for Channel %d", dataKey, R+1, X+1);
1686 if (strcmp (dataKey,
"PHOTOMA") == 0)
1688 sprintf (fileName,
"%sCompressedDATA%d_X%d", dataKey, R+1, X+1);
1689 sprintf (title,
"Compressed %s DATA%d for Channel %d", dataKey, R+1, X+1);
1693 sprintf (fileName,
"%sCompressedDATA%d_X%d", dataKey, R+4, X+1);
1694 sprintf (title,
"Compressed %s DATA%d for Channel %d", dataKey, R+4, X+1);
1697 midiCreatePlotFile2D (fileName, title,
"Frame",
"Flux", 0, arrayF, 0, n, 1, 0);
1721 int countTransitions (
1729 const char routine[] =
"countTransitions";
1730 int i, transitions, sighting;
1735 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1736 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1741 lastTarTyp = tarType[0];
1744 if (lastTarTyp == key) sighting++;
1745 for (i = 1; i < length; i++)
1747 if (tarType[i] == key)
1749 if (sighting && tarType[i] != lastTarTyp)
1755 lastTarTyp = tarType[i];
1757 if (!sighting) transitions = - 1;
1759 return (transitions);
1775 void midiReportResultsFringe (
1777 ImageFormat *format,
1778 DispersedResult *dispResult)
1783 const char routine[] =
"midiReportResultsFringe";
1788 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1789 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1792 cpl_msg_info(cpl_func,
"\nReporting the results for batch %d \n", batchNumber);
1793 cpl_msg_info(cpl_func,
"------------------------------- \n");
1794 fprintf (midiReportPtr,
"\nReporting the results for batch %d \n", batchNumber);
1795 fprintf (midiReportPtr,
"------------------------------- \n");
1798 format->numOfChannelsProcessed = 0;
1799 for (X = 0; X < format->iXWidth; X++)
1801 if (!(badChannelList[X]))
1802 (format->numOfChannelsProcessed)++;
1804 format->numOfChannelsRejected = format->iXWidth - format->numOfChannelsProcessed;
1806 cpl_msg_info(cpl_func,
"Observation Category = %s \n", format->obsCatg);
1807 cpl_msg_info(cpl_func,
"\nResult Abbreviation \n");
1808 cpl_msg_info(cpl_func,
"------------------- \n");
1809 cpl_msg_info(cpl_func,
"X = Channel Number \n");
1810 cpl_msg_info(cpl_func,
"F = Channel Frequency in THz \n");
1811 cpl_msg_info(cpl_func,
"W = Channel Wavelength in microns \n");
1812 cpl_msg_info(cpl_func,
"RVis = Raw Visibility \n");
1813 cpl_msg_info(cpl_func,
"RVisEr = Raw Visibility Error (Standard deviation) \n");
1814 cpl_msg_info(cpl_func,
"NVis = Normalised Visibility \n");
1815 cpl_msg_info(cpl_func,
"NVisEr = Normalised Visibility Error (Standard deviation) \n");
1816 cpl_msg_info(cpl_func,
"PhNe = \'Net\' Photometry \n");
1817 cpl_msg_info(cpl_func,
"PhNeEr = \'Net\' Photometry Error (Standard deviation) \n");
1818 cpl_msg_info(cpl_func,
"TF = Transfer Function \n");
1819 cpl_msg_info(cpl_func,
"TFEr = Transfer Function Error (Standard deviation) \n");
1820 cpl_msg_info(cpl_func,
"CVis = Calibrated Visibility \n");
1821 cpl_msg_info(cpl_func,
"CVisEr = Calibrated Visibility Error (Standard deviation) \n");
1823 fprintf (midiReportPtr,
"Observation Category = %s QCLOG \n", format->obsCatg);
1824 fprintf (midiReportPtr,
"\nResult Abbreviation QCLOG \n");
1825 fprintf (midiReportPtr,
"------------------- QCLOG \n");
1826 fprintf (midiReportPtr,
"X = Channel Number QCLOG \n");
1827 fprintf (midiReportPtr,
"F = Channel Frequency in THz QCLOG \n");
1828 fprintf (midiReportPtr,
"W = Channel Wavelength in microns QCLOG \n");
1829 fprintf (midiReportPtr,
"RVis = Raw Visibility QCLOG \n");
1830 fprintf (midiReportPtr,
"RVisEr = Raw Visibility Error (Standard deviation) QCLOG \n");
1831 fprintf (midiReportPtr,
"NVis = Normalised Visibility QCLOG \n");
1832 fprintf (midiReportPtr,
"NVisEr = Normalised Visibility Error (Standard deviation) QCLOG \n");
1833 fprintf (midiReportPtr,
"PhNe = \'Net\' Photometry QCLOG \n");
1834 fprintf (midiReportPtr,
"PhNeEr = \'Net\' Photometry Error (Standard deviation) QCLOG \n");
1835 fprintf (midiReportPtr,
"TF = Transfer Function QCLOG \n");
1836 fprintf (midiReportPtr,
"TFEr = Transfer Function Error (Standard deviation) QCLOG \n");
1837 fprintf (midiReportPtr,
"CVis = Calibrated Visibility QCLOG \n");
1838 fprintf (midiReportPtr,
"CVisEr = Calibrated Visibility Error (Standard deviation) QCLOG \n");
1840 cpl_msg_info(cpl_func,
"\nX W F RVis RVisEr NVis NVisEr ");
1841 cpl_msg_info(cpl_func,
"PhNe PhNeEr TF TFEr CVis CVisEr \n");
1842 fprintf (midiReportPtr,
"\nX W F RVis RVisEr NVis NVisEr ");
1843 fprintf (midiReportPtr,
"PhNe PhNeEr TF TFEr CVis CVisEr QCLOG \n");
1845 for (X = 0; X < format->iXWidth; X++)
1847 if (badChannelList[X])
1849 cpl_msg_info(cpl_func,
"%3d %5.2f %5.2f <-- %s --> \n",
1850 X, freqCal[X], SPEED_OF_LIGHT/freqCal[X], UNAV);
1851 fprintf (midiReportPtr,
"%3d %5.2f %5.2f <-- %s --> QCLOG \n",
1852 X, freqCal[X], SPEED_OF_LIGHT/freqCal[X], UNAV);
1856 cpl_msg_info(cpl_func,
"%3d %5.2f %5.2f %11.5f %9.4f %6.4f %8.4f %9.1f %7.2f %6.4f %6.4f %5.3f %5.3f \n",
1857 X, freqCal[X], SPEED_OF_LIGHT/freqCal[X],
1858 dispResult->rawVis2[X], dispResult->rawVis2Err[X],
1859 dispResult->normVis2[X], dispResult->normVis2Err[X],
1860 dispResult->photomNet2[X], dispResult->photomNet2Err[X],
1861 dispResult->trf[X], dispResult->trfErr[X],
1862 dispResult->calibVis2[X], dispResult->calibVis2Err[X]);
1864 fprintf (midiReportPtr,
"%3d %5.2f %5.2f %11.4f %9.4f %6.4f %8.4f %9.1f %7.2f %6.4f %6.4f %5.3f %5.3f QCLOG\n",
1865 X, freqCal[X], SPEED_OF_LIGHT/freqCal[X],
1866 dispResult->rawVis2[X], dispResult->rawVis2Err[X],
1867 dispResult->normVis2[X], dispResult->normVis2Err[X],
1868 dispResult->photomNet2[X], dispResult->photomNet2Err[X],
1869 dispResult->trf[X], dispResult->trfErr[X],
1870 dispResult->calibVis2[X], dispResult->calibVis2Err[X]);
1888 void reportRejectList (
1889 ImageFormat *format,
1890 CompressedData *compressed)
1894 const char routine[] =
"reportRejectList";
1895 int f, x, numOfFramesProcessed, numOfFramesRejected, frameFailureId;
1899 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1900 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1902 cpl_msg_info(cpl_func,
"\nFinalising Scan, Frame and Channel rejection \n");
1903 cpl_msg_info(cpl_func,
"-------------------------------------------- \n");
1904 fprintf (midiReportPtr,
"\nFinalising Scan, Frame and Channel rejection \n");
1905 fprintf (midiReportPtr,
"-------------------------------------------- \n");
1907 if (diagnostic)cpl_msg_info(cpl_func,
"\nChannel Number of Frames Number of Frames Frame Failure ID Channel Failure ID \n");
1908 if (diagnostic)cpl_msg_info(cpl_func,
" Processed Rejected \n");
1909 if (diagnostic)cpl_msg_info(cpl_func,
"------------------------------------------------------------------------------------- \n");
1910 fprintf (midiReportPtr,
"\nChannel Number of Frames Number of Frames Frame Failure ID Channel Failure ID \n");
1911 fprintf (midiReportPtr,
" Processed Rejected \n");
1912 fprintf (midiReportPtr,
"------------------------------------------------------------------------------------- \n");
1914 format->numOfChannelsRejected = 0;
1915 for (x = 0; x < format->iXWidth; x++)
1918 numOfFramesProcessed = 0;
1921 for (f = 0; f < format->numOfFrames; f++)
1923 if (!(compressed->rejectList[x][f]))
1924 numOfFramesProcessed++;
1926 frameFailureId |= compressed->rejectList[x][f];
1930 if (!numOfFramesProcessed || (badChannelList[x]))
1931 (format->numOfChannelsRejected)++;
1934 numOfFramesRejected = format->numOfFrames - numOfFramesProcessed;
1936 if (badChannelList[x])
1938 if (diagnostic)cpl_msg_info(cpl_func,
1939 "%3d %4d %4d %4d %4d REJECTED\n",
1940 x, numOfFramesProcessed, numOfFramesRejected, frameFailureId, badChannelList[x]);
1941 fprintf (midiReportPtr,
1942 "%3d %4d %4d %4d %4d REJECTED QCLOG \n",
1943 x, numOfFramesProcessed, numOfFramesRejected, frameFailureId, badChannelList[x]);
1947 if (diagnostic)cpl_msg_info(cpl_func,
1948 "%3d %4d %4d %4d %4d \n",
1949 x, numOfFramesProcessed, numOfFramesRejected, frameFailureId, badChannelList[x]);
1950 fprintf (midiReportPtr,
1951 "%3d %4d %4d %4d %4d QCLOG \n",
1952 x, numOfFramesProcessed, numOfFramesRejected, frameFailureId, badChannelList[x]);
1957 format->numOfChannelsProcessed = format->iXWidth - format->numOfChannelsRejected;
1959 cpl_msg_info(cpl_func,
"Number of channels processed = %3d \n", format->numOfChannelsProcessed);
1960 cpl_msg_info(cpl_func,
"Number of channels rejected = %3d \n", format->numOfChannelsRejected);
1961 fprintf (midiReportPtr,
"Number of channels processed = %3d QCLOG \n", format->numOfChannelsProcessed);
1962 fprintf (midiReportPtr,
"Number of channels rejected = %3d QCLOG \n", format->numOfChannelsRejected);
1966 cpl_msg_info(cpl_func,
"Failure ID \n");
1967 cpl_msg_info(cpl_func,
"---------- \n");
1968 cpl_msg_info(cpl_func,
" 1 = Bit 1, indicates a TIME error \n");
1969 cpl_msg_info(cpl_func,
" 2 = Bit 2, indicates an LOCALOPD error \n");
1970 cpl_msg_info(cpl_func,
" 4 = Bit 3, indicates an OPD error \n");
1971 cpl_msg_info(cpl_func,
" 8 = Bit 4, indicates a Bad DATA \n");
1972 cpl_msg_info(cpl_func,
" 16 = Bit 5, indicates a chopping problem (TARTYPE2) \n");
1973 cpl_msg_info(cpl_func,
" 32 = Bit 6, indicates a Delay Line Jump \n");
1974 cpl_msg_info(cpl_func,
" 64 = Bit 7, indicates an Unwanted Region \n");
1975 cpl_msg_info(cpl_func,
" 128 = Bit 8, indicates a Weak Signal/Noise \n");
1976 cpl_msg_info(cpl_func,
" 256 = Bit 9, indicates a SKY or Undefined \n");
1977 cpl_msg_info(cpl_func,
" 512 = Bit 10, indicates a TARTYPE Cross error. e.g. region 0 different to region 1 \n");
1978 cpl_msg_info(cpl_func,
"1024 = Bit 11, indicates a Masked Channel \n");
1979 cpl_msg_info(cpl_func,
"\nHence a number such as 168 indicates bits 4, 6 and 8 were set \n\n");
1982 fprintf (midiReportPtr,
"Failure ID QCLOG \n");
1983 fprintf (midiReportPtr,
"---------- QCLOG \n");
1984 fprintf (midiReportPtr,
" 1 = Bit 1, indicates a TIME error QCLOG \n");
1985 fprintf (midiReportPtr,
" 2 = Bit 2, indicates an LOCALOPD error QCLOG \n");
1986 fprintf (midiReportPtr,
" 4 = Bit 3, indicates an OPD error QCLOG \n");
1987 fprintf (midiReportPtr,
" 8 = Bit 4, indicates a Bad DATA QCLOG \n");
1988 fprintf (midiReportPtr,
" 16 = Bit 5, indicates a chopping problem (TARTYPE2) QCLOG \n");
1989 fprintf (midiReportPtr,
" 32 = Bit 6, indicates a Delay Line Jump QCLOG \n");
1990 fprintf (midiReportPtr,
" 64 = Bit 7, indicates an Unwanted Region QCLOG \n");
1991 fprintf (midiReportPtr,
" 128 = Bit 8, indicates a Weak Signal/Noise QCLOG \n");
1992 fprintf (midiReportPtr,
" 256 = Bit 9, indicates a SKY or Undefined QCLOG \n");
1993 fprintf (midiReportPtr,
" 512 = Bit 10, indicates a TARTYPE Cross error. e.g. region 0 different to region 1 QCLOG \n");
1994 fprintf (midiReportPtr,
"1024 = Bit 11, indicates a Masked Channel QCLOG \n");
1995 fprintf (midiReportPtr,
"\nHence a number such as 168 indicates bits 4, 6 and 8 were set QCLOG \n\n");