21 #include <sys/types.h>
27 #include "midiGlobal.h"
29 #include "memoryHandling.h"
30 #include "calibration.h"
31 #include "errorHandling.h"
32 #include "midiFitsUtility.h"
33 #include "fitsAnalysisFrgHS.h"
34 #include "imageProcessing.h"
35 #include "createProdFrg.h"
36 #include "createProdFrgUndisp.h"
37 #include "transferFunction.h"
38 #include "visibility.h"
39 #include "diagnostics.h"
40 #include "estimationFrg.h"
41 #include "estimationFrgHSUndisp.h"
42 #include "photometry.h"
43 #include "procFrgHS.h"
44 #include "preProcFrgHS.h"
80 cpl_parameterlist *parlist,
81 cpl_frameset *frameset)
86 const char routine[] =
"procFrgHS";
87 ImageFormat *formatInterf=NULL;
88 ImageFormat *formatPhotomA=NULL;
89 ImageFormat *formatPhotomB=NULL;
90 CompressedData *compressedInterf=NULL, *compressedPhotomA=NULL, *compressedPhotomB=NULL;
91 FilterData *filterInfo=NULL;
92 FILE *signaturePtr=NULL;
93 DispersedResult *dispResult=NULL;
94 CorrectedFrames *corrFrames=NULL;
97 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
98 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
101 if (strcmp (batchTemplate,
"HIGH_SENS_CALIB") == 0)
102 signaturePtr = fopen (
"MIDI_sig_hsc.log",
"w");
103 else if (strcmp (batchTemplate,
"HIGH_SENS_SCIENCE") == 0)
104 signaturePtr = fopen (
"MIDI_sig_hss.log",
"w");
107 sprintf (midiMessage,
"Invalid template ... %s", batchTemplate);
108 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
110 fclose (signaturePtr);
118 formatInterf = callocImageFormat ();
119 formatPhotomA = callocImageFormat ();
120 formatPhotomB = callocImageFormat ();
121 corrFrames = cpl_calloc (1,
sizeof (CorrectedFrames));
123 corrFrames->CorrInterf=0;
124 corrFrames->CorrPhotomA=0;
125 corrFrames->CorrPhotomB=0;
127 analyseFitsFrgHS (fileNames, formatInterf, formatPhotomA, formatPhotomB, error);
130 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot analyse FITS files");
131 freeImageFormat (formatInterf);
132 freeImageFormat (formatPhotomA);
133 freeImageFormat (formatPhotomB);
140 compressedInterf = callocMidiCompressed (formatInterf);
141 compressedPhotomA = callocMidiCompressed (formatPhotomA);
142 compressedPhotomB = callocMidiCompressed (formatPhotomB);
143 badChannelList = (
int *) calloc (formatInterf->iXWidth, sizeof (
int));
144 filterInfo = callocFilterInfo();
147 preProcFrgHS (options, filterInfo, fileNames, compressedInterf, compressedPhotomA,
148 compressedPhotomB, formatInterf, formatPhotomA, formatPhotomB, error);
152 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot compress FITS files");
153 freeCompressedData (formatInterf, compressedInterf);
154 freeCompressedData (formatPhotomA, compressedPhotomA);
155 freeCompressedData (formatPhotomB, compressedPhotomB);
156 free (badChannelList);
157 freeImageFormat (formatInterf);
158 freeImageFormat (formatPhotomA);
159 freeImageFormat (formatPhotomB);
160 freeFilterInfo (filterInfo);
165 checkDelayLineJumps (
"INTERF", formatInterf, compressedInterf);
168 checkDelayLineConsistencies (
"INTERF",
"PHOTOMA", compressedInterf, compressedPhotomA, formatInterf, formatPhotomA, error);
169 checkDelayLineConsistencies (
"INTERF",
"PHOTOMB", compressedInterf, compressedPhotomB, formatInterf, formatPhotomB, error);
172 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"HIGH_SENSE processing abandonned");
173 freeCompressedData (formatInterf, compressedInterf);
174 freeCompressedData (formatPhotomA, compressedPhotomA);
175 freeCompressedData (formatPhotomB, compressedPhotomB);
176 free (badChannelList);
177 freeImageFormat (formatInterf);
178 freeImageFormat (formatPhotomA);
179 freeImageFormat (formatPhotomB);
180 freeFilterInfo (filterInfo);
186 reportInterfChopping (
"INTERF", formatInterf, compressedInterf);
187 reportPhotomChopping (
"PHOTOMA", formatPhotomA, compressedPhotomA);
188 reportPhotomChopping (
"PHOTOMB", formatPhotomB, compressedPhotomB);
189 if (options->processing == DISPERSED)
191 displayInterfChoppingDisp (
"INTERF", formatInterf, compressedInterf);
192 displayPhotomChoppingDisp (
"PHOTOMA", formatPhotomA, compressedPhotomA);
193 displayPhotomChoppingDisp (
"PHOTOMB", formatPhotomB, compressedPhotomB);
197 dispResult = callocDispResult (formatInterf->iXWidth);
198 cleanupFrgHS (options->processing, formatInterf, formatPhotomA, formatPhotomB, compressedInterf,
199 compressedPhotomA, compressedPhotomB, dispResult, error, corrFrames);
202 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"HIGH_SENSE processing abandonned");
203 freeCompressedData (formatInterf, compressedInterf);
204 freeCompressedData (formatPhotomA, compressedPhotomA);
205 freeCompressedData (formatPhotomB, compressedPhotomB);
206 free (badChannelList);
207 freeImageFormat (formatInterf);
208 freeImageFormat (formatPhotomA);
209 freeImageFormat (formatPhotomB);
210 freeFilterInfo (filterInfo);
211 freeDispResult (dispResult);
215 prepareWaterfallDisplay (fileNames, formatInterf, compressedInterf);
219 if (strcmp (formatInterf->obsCatg,
"CALIB") == 0)
220 calibrateWaveUsingPolynom (fileNames, formatInterf);
224 getUndispersedPowerSpectrum (formatInterf, compressedInterf);
227 prepareWaterpowerDisplay (fileNames, formatInterf, compressedInterf->allSpectrum);
231 if (options->processing == DISPERSED)
233 postProcFringe (fileNames, filterInfo, compressedInterf,
234 compressedPhotomA, compressedPhotomB, formatInterf,
235 formatPhotomA, formatPhotomB, dispResult, error,
236 parlist, frameset, corrFrames);
239 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"HIGH_SENSE processing abandonned");
240 freeCompressedData (formatInterf, compressedInterf);
241 freeCompressedData (formatPhotomA, compressedPhotomA);
242 freeCompressedData (formatPhotomB, compressedPhotomB);
243 free (badChannelList);
244 freeImageFormat (formatInterf);
245 freeImageFormat (formatPhotomA);
246 freeImageFormat (formatPhotomB);
247 freeFilterInfo (filterInfo);
248 freeDispResult (dispResult);
252 else if (options->processing == UNDISPERSED)
254 postProcFrgHSUndisp (fileNames, compressedInterf, compressedPhotomA,
255 compressedPhotomB, filterInfo, formatInterf, formatPhotomA, formatPhotomB, error, parlist, frameset);
258 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"HIGH_SENSE processing abandonned");
259 freeCompressedData (formatInterf, compressedInterf);
260 freeCompressedData (formatPhotomA, compressedPhotomA);
261 freeCompressedData (formatPhotomB, compressedPhotomB);
262 free (badChannelList);
263 freeImageFormat (formatInterf);
264 freeImageFormat (formatPhotomA);
265 freeImageFormat (formatPhotomB);
266 freeFilterInfo (filterInfo);
267 freeDispResult (dispResult);
274 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Unknown processing mode requested");
275 freeCompressedData (formatInterf, compressedInterf);
276 freeCompressedData (formatPhotomA, compressedPhotomA);
277 freeCompressedData (formatPhotomB, compressedPhotomB);
278 free (badChannelList);
279 freeImageFormat (formatInterf);
280 freeImageFormat (formatPhotomA);
281 freeImageFormat (formatPhotomB);
282 freeFilterInfo (filterInfo);
283 freeDispResult (dispResult);
288 freeCompressedData (formatInterf, compressedInterf);
289 freeCompressedData (formatPhotomA, compressedPhotomA);
290 freeCompressedData (formatPhotomB, compressedPhotomB);
291 free (badChannelList);
292 freeImageFormat (formatInterf);
293 freeImageFormat (formatPhotomA);
294 freeImageFormat (formatPhotomB);
295 freeFilterInfo (filterInfo);
296 freeDispResult (dispResult);
297 cpl_free(corrFrames);
314 void postProcFringe (
315 MidiFiles *fileNames,
316 FilterData *filterInfo,
317 CompressedData *compressedInterf,
318 CompressedData *compressedPhotomA,
319 CompressedData *compressedPhotomB,
320 ImageFormat *formatInterf,
321 ImageFormat *formatPhotomA,
322 ImageFormat *formatPhotomB,
323 DispersedResult *dispResult,
325 cpl_parameterlist *parlist,
326 cpl_frameset *frameset,
327 CorrectedFrames *corrFrames)
332 const char routine[] =
"postProcFringe";
333 CalibratorParam *calibrator=NULL;
335 IauExchange *iauData=NULL;
339 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
340 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
342 cpl_msg_info(cpl_func,
"\nProcessing data in DISPERSED mode for batch %d \n", batchNumber);
343 cpl_msg_info(cpl_func,
"------------------------------------------- \n");
344 fprintf (midiReportPtr,
"\nProcessing data in DISPERSED mode for batch %d \n", batchNumber);
345 fprintf (midiReportPtr,
"------------------------------------------- \n");
348 formatInterf->fftsize = POST_FFT_SIZE;
349 calibrator = callocCalibrator ();
350 freqCal = (
float *) calloc (formatInterf->iXWidth, sizeof (
float));
354 dispResult->photomAExists = 0;
355 dispResult->photomBExists = 0;
356 dispResult->photomIExists = 0;
357 dispResult->calibVisExists = 0;
358 dispResult->trfExists = 0;
362 estimateFringe (fileNames, filterInfo, compressedInterf, formatInterf, freqCal,
363 dispResult->rawVis2, dispResult->rawVis2Err, error);
366 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot compute Raw Visibilities");
371 cpl_msg_info(cpl_func,
"\nRunning Photometry on photom A data: ");
372 fprintf (midiReportPtr,
"\nRunning Photometry on photom A data: ");
373 estimatePhotom (
'A', compressedPhotomA, formatPhotomA, dispResult->photomA, dispResult->photomAErr, error);
376 cpl_msg_info(cpl_func,
"%s \n", UNAV);
377 fprintf (midiReportPtr,
"%s \n", UNAV);
381 dispResult->photomAExists = 1;
382 cpl_msg_info(cpl_func,
"\n");
383 fprintf (midiReportPtr,
"\n");
386 cpl_msg_info(cpl_func,
"Running Photometry on Photom B data: ");
387 fprintf (midiReportPtr,
"Running Photometry on Photom B data: ");
388 estimatePhotom (
'B', compressedPhotomB, formatPhotomB, dispResult->photomB, dispResult->photomBErr, error);
391 cpl_msg_info(cpl_func,
"%s \n", UNAV);
392 fprintf (midiReportPtr,
"%s \n", UNAV);
396 dispResult->photomBExists = 1;
397 cpl_msg_info(cpl_func,
"\n");
398 fprintf (midiReportPtr,
"\n");
401 cpl_msg_info(cpl_func,
"Running Photometry on Interf data: ");
402 fprintf (midiReportPtr,
"Running Photometry on Interf data: ");
403 estimatePhotom (
'I', compressedInterf, formatInterf, dispResult->photomI, dispResult->photomIErr, error);
406 cpl_msg_info(cpl_func,
"%s \n", UNAV);
407 fprintf (midiReportPtr,
"%s \n", UNAV);
411 dispResult->photomIExists = 1;
412 cpl_msg_info(cpl_func,
"\n");
413 fprintf (midiReportPtr,
"\n");
418 computeUncalibVis (formatInterf, freqCal, dispResult, error);
420 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot compute Uncalibrated Visibility for this batch");
424 if (strcmp (formatInterf->obsCatg,
"CALIB") == 0)
426 estimateTransferFunction (formatInterf, fileNames, dispResult, calibrator, error, parlist, frameset);
428 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot compute Transfer Function for this batch");
433 if (strcmp (formatInterf->obsCatg,
"SCIENCE") == 0)
435 computeCalibVis (fileNames, formatInterf, dispResult, error, parlist, frameset);
437 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot compute Calibrated Visibility for this batch");
441 if (diagnostic) midiReportResultsFringe (freqCal, formatInterf, dispResult);
442 reportRejectList (formatInterf, compressedInterf);
446 iauData=createFrgProd (fileNames, formatInterf, freqCal, dispResult, calibrator,
451 midiSaveCorrelatedFlux(iauData, dispResult, parlist, frameset);
454 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create product files");
457 freeCalibrator (calibrator);
460 freeIauExchange (iauData);
479 void postProcFrgHSUndisp (
480 MidiFiles *fileNames,
481 CompressedData *compressedInterf,
482 CompressedData *compressedPhotomA,
483 CompressedData *compressedPhotomB,
484 FilterData *filterInfo,
485 ImageFormat *formatInterf,
486 ImageFormat *formatPhotomA,
487 ImageFormat *formatPhotomB,
489 cpl_parameterlist *parlist,
490 cpl_frameset *frameset)
495 const char routine[] =
"postProcFrgHSUndisp";
496 RawVisibility *rawVis=NULL;
497 PhotometryResult *photometry=NULL;
498 CalibratedVisibility *calibVis=NULL;
499 CalibratorParam *calibrator=NULL;
500 TransferFunction *trf=NULL;
505 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
506 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
508 cpl_msg_info(cpl_func,
"\nProcessing HIGH_SENS data in UNDISPERSED mode for batch %d \n", batchNumber);
509 cpl_msg_info(cpl_func,
"------------------------------------------------------- \n");
510 fprintf (midiReportPtr,
"\nProcessing HIGH_SENS data in UNDISPERSED mode for batch %d \n", batchNumber);
511 fprintf (midiReportPtr,
"------------------------------------------------------- \n");
517 getBadScansFromSpectrumUndisp (filterInfo, formatInterf, compressedInterf, error);
522 rawVis = callocRawVis ();
523 photometry = callocPhotometry ();
524 estimateFrgHSUndisp (compressedInterf, compressedPhotomA, compressedPhotomB, filterInfo,
525 formatInterf, formatPhotomA, formatPhotomB, rawVis, photometry);
529 computeUncalibVisHSUndisp (rawVis, photometry);
533 calibrator = callocCalibrator ();
534 trf = callocTrFunction (6);
535 if (strcmp (formatInterf->obsCatg,
"CALIB") == 0)
537 estimateTransferFunctionUndisp (fileNames, rawVis, trf, calibrator, error,parlist, frameset);
538 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
539 "Cannot compute Transfer Function for this batch");
544 calibVis = callocCalibVis ();
545 if (strcmp (formatInterf->obsCatg,
"SCIENCE") == 0)
547 computeCalibVisHSUndisp (fileNames, rawVis, trf, calibVis, error);
548 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
549 "Cannot compute Calibrated Visibility for this batch");
554 createFrgProdUndisp (fileNames, formatInterf, filterInfo, rawVis, trf,
555 calibrator, calibVis, photometry, error);
556 if (*error) midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot create product files");
560 freePhotometry (photometry);
561 freeTrFunction (trf);
562 freeCalibrator (calibrator);
563 freeCalibVis (calibVis);
582 enum ProcessingMode processing,
583 ImageFormat *formatInterf,
584 ImageFormat *formatPhotomA,
585 ImageFormat *formatPhotomB,
586 CompressedData *compressedInterf,
587 CompressedData *compressedPhotomA,
588 CompressedData *compressedPhotomB,
589 DispersedResult *dispResult,
591 CorrectedFrames *corrFrames)
596 const char routine[] =
"cleanupFrgHS";
597 int F, s, t, u, n, f, R, X, transitions, localError;
598 double *array, fluxAve;
600 char *fileName, *title;
604 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
605 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
607 cpl_msg_info(cpl_func,
"\nCleaning up HIGH_SENS files for batch %d \n", batchNumber);
608 cpl_msg_info(cpl_func,
"------------------------------------- \n");
609 fprintf (midiReportPtr,
"\nCleaning up HIGH_SENS files for batch %d \n", batchNumber);
610 fprintf (midiReportPtr,
"------------------------------------- \n");
620 for (F = 0; F < formatInterf->numOfFrames; F++)
622 if (compressedInterf->tarType[F] ==
'S') s++;
623 else if (compressedInterf->tarType[F] ==
'T') t++;
627 if (u || s || (t != formatInterf->numOfFrames))
629 sprintf (midiMessage,
"Interferometry data is chopped");
630 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
633 transitions = countTransitions (
'T', formatInterf->numOfFrames, compressedInterf->tarType);
634 sprintf (midiMessage,
"Target Transitions for Interf = %d", transitions);
635 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
636 formatInterf->numOfSkyScans = 0;
640 transitions = countTransitions (
'T', formatPhotomA->numOfFrames, compressedPhotomA->tarType);
641 sprintf (midiMessage,
"Target Transitions for Photom A = %d", transitions);
642 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
643 if (transitions < 10)
645 sprintf (midiMessage,
"Photometry A data is not chopped");
646 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
652 transitions = countTransitions (
'T', formatPhotomB->numOfFrames, compressedPhotomB->tarType);
653 sprintf (midiMessage,
"Target Transitions for Photom B = %d", transitions);
654 midiReportInfo (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
655 if (transitions < 10)
657 sprintf (midiMessage,
"Photometry B data is not chopped");
658 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
665 formatInterf->chopped = 0;
666 formatPhotomA->chopped = 1;
667 formatPhotomB->chopped = 1;
671 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot cleanup HIGH_SENS files");
678 corrFrames->CorrInterf=0;
679 corrFrames->CorrPhotomA = correctTarType (
"PHOTOMA",
680 compressedPhotomA->tarType, compressedPhotomA->time,
681 formatPhotomA->numOfFrames, &localError);
682 if (localError) *error = 1;
684 corrFrames->CorrPhotomB = correctTarType (
"PHOTOMB",
685 compressedPhotomB->tarType, compressedPhotomB->time,
686 formatPhotomB->numOfFrames, &localError);
687 if (*error || localError)
696 if (processing == DISPERSED && (strcmp(formatPhotomA->beamCombiner,
"HIGH_SENS") == 0))
698 computeBinnedPhotom (compressedPhotomA, compressedPhotomB, formatPhotomA,
699 &(dispResult->photomATotal1), &(dispResult->photomATotal2), &(dispResult->photomATotal3),
700 &(dispResult->photomBTotal1), &(dispResult->photomBTotal2), &(dispResult->photomBTotal3), error);
703 cpl_msg_info(cpl_func,
"\nBinned photometric measurements with background \n");
704 cpl_msg_info(cpl_func,
"----------------------------------------------- \n");
705 cpl_msg_info(cpl_func,
"Grism ID: %s \n", formatPhotomA->grismId);
706 fprintf(midiReportPtr,
"\nBinned photometric measurements with background QCLOG \n");
707 fprintf(midiReportPtr,
"----------------------------------------------- QCLOG \n");
708 fprintf(midiReportPtr,
"Grism ID: %s QCLOG \n", formatPhotomA->grismId);
709 if (strcmp(formatPhotomA->grismId,
"PRISM") == 0)
711 cpl_msg_info(cpl_func,
"ArIII (Channel 113 -> 121) Beam A = %0.2f Beam B = %0.2f \n",
712 dispResult->photomATotal1, dispResult->photomBTotal1);
713 cpl_msg_info(cpl_func,
" SIV (Channel 88 -> 98) Beam A = %0.2f Beam B = %0.2f \n",
714 dispResult->photomATotal2, dispResult->photomBTotal2);
715 cpl_msg_info(cpl_func,
" NeII (Channel 36 -> 50) Beam A = %0.2f Beam B = %0.2f \n\n",
716 dispResult->photomATotal3, dispResult->photomBTotal3);
718 fprintf(midiReportPtr,
"ArIII (Channel 113 -> 121) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
719 dispResult->photomATotal1, dispResult->photomBTotal1);
720 fprintf(midiReportPtr,
" SIV (Channel 88 -> 98) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
721 dispResult->photomATotal2, dispResult->photomBTotal2);
722 fprintf(midiReportPtr,
" NeII (Channel 36 -> 50) Beam A = %0.2f Beam B = %0.2f QCLOG \n\n",
723 dispResult->photomATotal3, dispResult->photomBTotal3);
727 cpl_msg_info(cpl_func,
"ArIII (Channel 52 -> 68) Beam A = %0.2f Beam B = %0.2f \n",
728 dispResult->photomATotal1, dispResult->photomBTotal1);
729 cpl_msg_info(cpl_func,
" SIV (Channel 116 -> 136) Beam A = %0.2f Beam B = %0.2f \n",
730 dispResult->photomATotal2, dispResult->photomBTotal2);
731 cpl_msg_info(cpl_func,
" NeII (Channel 217 -> 244) Beam A = %0.2f Beam B = %0.2f \n\n",
732 dispResult->photomATotal3, dispResult->photomBTotal3);
734 fprintf(midiReportPtr,
"ArIII (Channel 52 -> 68) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
735 dispResult->photomATotal1, dispResult->photomBTotal1);
736 fprintf(midiReportPtr,
" SIV (Channel 116 -> 136) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
737 dispResult->photomATotal2, dispResult->photomBTotal2);
738 fprintf(midiReportPtr,
" NeII (Channel 217 -> 244) Beam A = %0.2f Beam B = %0.2f QCLOG \n\n",
739 dispResult->photomATotal3, dispResult->photomBTotal3);
743 removeSkyBackground (
"PHOTOMA", processing, formatPhotomA, compressedPhotomA, &localError);
744 if (localError) *error = 1;
745 removeSkyBackground (
"PHOTOMB", processing, formatPhotomB, compressedPhotomB, &localError);
746 if (formatPhotomA->numOfFrames != formatPhotomA->numOfFrames || *error || localError)
748 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Unequal numOfFrames");
754 if (processing == DISPERSED && (strcmp(formatPhotomB->beamCombiner,
"HIGH_SENS") == 0))
756 computeBinnedPhotom (compressedPhotomA, compressedPhotomB, formatPhotomA,
757 &(dispResult->photomATarg1), &(dispResult->photomATarg2), &(dispResult->photomATarg3),
758 &(dispResult->photomBTarg1), &(dispResult->photomBTarg2), &(dispResult->photomBTarg3), error);
761 cpl_msg_info(cpl_func,
"\nBinned photometric measurements without background \n");
762 cpl_msg_info(cpl_func,
"-------------------------------------------------- \n");
763 cpl_msg_info(cpl_func,
"Grism ID: %s \n", formatPhotomA->grismId);
764 fprintf(midiReportPtr,
"\nBinned photometric measurements without background QCLOG \n");
765 fprintf(midiReportPtr,
"-------------------------------------------------- QCLOG \n");
766 fprintf(midiReportPtr,
"Grism ID: %s QCLOG \n", formatPhotomA->grismId);
767 if (strcmp(formatPhotomA->grismId,
"PRISM") == 0)
769 cpl_msg_info(cpl_func,
"ArIII (Channel 113 -> 121) Beam A = %0.2f Beam B = %0.2f \n",
770 dispResult->photomATarg1, dispResult->photomBTarg1);
771 cpl_msg_info(cpl_func,
" SIV (Channel 88 -> 98) Beam A = %0.2f Beam B = %0.2f \n",
772 dispResult->photomATarg2, dispResult->photomBTarg2);
773 cpl_msg_info(cpl_func,
" NeII (Channel 36 -> 50) Beam A = %0.2f Beam B = %0.2f \n\n",
774 dispResult->photomATarg3, dispResult->photomBTarg3);
776 fprintf(midiReportPtr,
"ArIII (Channel 113 -> 121) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
777 dispResult->photomATarg1, dispResult->photomBTarg1);
778 fprintf(midiReportPtr,
" SIV (Channel 88 -> 98) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
779 dispResult->photomATarg2, dispResult->photomBTarg2);
780 fprintf(midiReportPtr,
" NeII (Channel 36 -> 50) Beam A = %0.2f Beam B = %0.2f QCLOG \n\n",
781 dispResult->photomATarg3, dispResult->photomBTarg3);
785 cpl_msg_info(cpl_func,
"ArIII (Channel 52 -> 68) Beam A = %0.2f Beam B = %0.2f \n",
786 dispResult->photomATarg1, dispResult->photomBTarg1);
787 cpl_msg_info(cpl_func,
" SIV (Channel 116 -> 136) Beam A = %0.2f Beam B = %0.2f \n",
788 dispResult->photomATarg2, dispResult->photomBTarg2);
789 cpl_msg_info(cpl_func,
" NeII (Channel 217 -> 244) Beam A = %0.2f Beam B = %0.2f \n\n",
790 dispResult->photomATarg3, dispResult->photomBTarg3);
792 fprintf(midiReportPtr,
"ArIII (Channel 52 -> 68) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
793 dispResult->photomATarg1, dispResult->photomBTarg1);
794 fprintf(midiReportPtr,
" SIV (Channel 116 -> 136) Beam A = %0.2f Beam B = %0.2f QCLOG \n",
795 dispResult->photomATarg2, dispResult->photomBTarg2);
796 fprintf(midiReportPtr,
" NeII (Channel 217 -> 244) Beam A = %0.2f Beam B = %0.2f QCLOG \n\n",
797 dispResult->photomATarg3, dispResult->photomBTarg3);
802 for (R = 0; R < formatInterf->numOfRegionsToProcess; R++)
804 for (X = 0; X < formatInterf->iXWidth; X++)
806 if (badChannelList[X])
809 for (f = 0; f < formatInterf->numOfFrames; f++)
811 if ((compressedInterf->tarType[f] ==
'T') &&
812 (((compressedInterf->iDispFringe)[R])[X])[f] <= 0.0)
814 compressedInterf->rejectList[X][f] |= BSL_DATA_ERROR;
817 sprintf (midiMessage,
"Negative Flux at: R %d X %3d F %4d Interf %10.2f",
818 R, X, f, (((compressedInterf->iDispFringe)[R])[X])[f]);
819 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
823 if (compressedInterf->tarType[f] !=
'T')
824 compressedInterf->rejectList[X][f] |= BSL_SKY_SCAN;
829 for (R = 0; R < formatPhotomA->numOfRegionsToProcess; R++)
831 for (X = 0; X < formatPhotomA->iXWidth; X++)
833 if (badChannelList[X])
836 for (f = 0; f < formatPhotomA->numOfFrames; f++)
838 if ((compressedPhotomA->tarType[f] ==
'T') &&
839 (((compressedPhotomA->iDispFringe)[R])[X])[f] <= 0.0)
841 compressedPhotomA->rejectList[X][f] |= BSL_DATA_ERROR;
844 sprintf (midiMessage,
"Negative Flux at: R %d X %3d F %4d PhotomA %10.2f",
845 R, X, f, (((compressedPhotomA->iDispFringe)[R])[X])[f]);
846 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
850 if (compressedPhotomA->tarType[f] !=
'T')
851 compressedPhotomA->rejectList[X][f] |= BSL_SKY_SCAN;
856 for (R = 0; R < formatPhotomB->numOfRegionsToProcess; R++)
858 for (X = 0; X < formatPhotomB->iXWidth; X++)
860 if (badChannelList[X])
863 for (f = 0; f < formatPhotomB->numOfFrames; f++)
865 if ((compressedPhotomB->tarType[f] ==
'T') &&
866 (((compressedPhotomB->iDispFringe)[R])[X])[f] <= 0.0)
868 compressedPhotomB->rejectList[X][f] |= BSL_DATA_ERROR;
871 sprintf (midiMessage,
"Negative Flux at: R %d X %3d F %4d PhotomB %10.2f",
872 R, X, f, (((compressedPhotomB->iDispFringe)[R])[X])[f]);
873 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
877 if (compressedPhotomB->tarType[f] !=
'T')
878 compressedPhotomB->rejectList[X][f] |= BSL_SKY_SCAN;
886 array = (
double *) calloc (formatInterf->numOfFrames, sizeof (
double));
890 for (f = 0; f < formatInterf->numOfFrames; f++)
892 if (compressedInterf->tarType[f] ==
'T')
894 array[n] = compressedInterf->iFringe1[f];
900 cpl_msg_info(cpl_func,
"Interf DATA1 Average Flux = %f \n", fluxAve);
901 midiCreatePlotFileDouble2D (
"InterfCleanDATA1",
"Interferometry DATA1 (Sky Removed)",
902 "Frame",
"Flux", 0, array, 0, n, 1);
906 for (f = 0; f < formatInterf->numOfFrames; f++)
908 if (compressedInterf->tarType[f] ==
'T')
910 array[n] = compressedInterf->iFringe2[f];
916 cpl_msg_info(cpl_func,
"Interf DATA2 Average Flux = %f \n", fluxAve);
917 midiCreatePlotFileDouble2D (
"InterfCleanDATA2",
"Interferometry DATA2 (Sky Removed)",
918 "Frame",
"Flux", 0, array, 0, n, 1);
921 for (f = 0; f < formatInterf->numOfFrames; f++)
923 if (compressedInterf->tarType[f] ==
'T')
925 array[n] = compressedInterf->iFringe[f];
929 midiCreatePlotFileDouble2D (
"InterfCleanDATA1_DATA2",
"Interferometry DATA1-DATA2 (Sky Removed)",
930 "Frame",
"Flux", 0, array, 0, n, 1);
934 for (f = 0; f < formatPhotomA->numOfFrames; f++)
936 if (compressedPhotomA->tarType[f] ==
'T')
938 array[n] = compressedPhotomA->iFringe1[f];
944 cpl_msg_info(cpl_func,
"PhotomA DATA1 Average Flux = %f \n", fluxAve);
945 midiCreatePlotFileDouble2D (
"PhotomACleanDATA1",
"Photometry A DATA1 (Sky Removed)",
946 "Frame",
"Flux", 0, array, 0, n, 1);
950 for (f = 0; f < formatPhotomA->numOfFrames; f++)
952 if (compressedPhotomA->tarType[f] ==
'T')
954 array[n] = compressedPhotomA->iFringe2[f];
960 cpl_msg_info(cpl_func,
"PhotomA DATA2 Average Flux = %f \n", fluxAve);
961 midiCreatePlotFileDouble2D (
"PhotomACleanDATA2",
"Photometry A DATA2 (Sky Removed)",
962 "Frame",
"Flux", 0, array, 0, n, 1);
966 for (f = 0; f < formatPhotomB->numOfFrames; f++)
968 if (compressedPhotomB->tarType[f] ==
'T')
970 array[n] = compressedPhotomB->iFringe1[f];
976 cpl_msg_info(cpl_func,
"PhotomB DATA1 Average Flux = %f \n", fluxAve);
977 midiCreatePlotFileDouble2D (
"PhotomBCleanDATA1",
"Photometry B DATA1 (Sky Removed)",
978 "Frame",
"Flux", 0, array, 0, n, 1);
982 for (f = 0; f < formatPhotomB->numOfFrames; f++)
984 if (compressedPhotomB->tarType[f] ==
'T')
986 array[n] = compressedPhotomB->iFringe2[f];
992 cpl_msg_info(cpl_func,
"PhotomB DATA2 Average Flux = %f \n", fluxAve);
993 midiCreatePlotFileDouble2D (
"PhotomBCleanDATA2",
"Photometry B DATA2 (Sky Removed)",
994 "Frame",
"Flux", 0, array, 0, n, 1);
1000 if (plotFile && diagnostic > 4)
1002 arrayF = (
float *) calloc (formatInterf->numOfFrames, sizeof (
float));
1003 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1004 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1006 for (R = 0; R < formatInterf->numOfRegionsToProcess; R++)
1008 for (X = 0; X < formatInterf->iXWidth; X++)
1010 if (badChannelList[X])
1014 for (f = 0; f < formatInterf->numOfFrames; f++)
1016 if (compressedInterf->tarType[f] ==
'T' && !(compressedInterf->rejectList[X][f]))
1018 arrayF[n] = compressedInterf->iDispFringe[R][X][f];
1022 sprintf (fileName,
"InterfCleanDATA%d_X%d", R+1, X+1);
1023 sprintf (title,
"Interferometry DATA%d for Channel %d (Sky Removed)", R+1, X+1);
1024 midiCreatePlotFile2D (fileName, title,
"Frame",
"Flux", 0, arrayF, 0, n, 1, 0);
1027 for (R = 0; R < formatPhotomA->numOfRegionsToProcess; R++)
1029 for (X = 0; X < formatPhotomA->iXWidth; X++)
1031 if (badChannelList[X])
1035 for (f = 0; f < formatPhotomA->numOfFrames; f++)
1037 if (compressedPhotomA->tarType[f] ==
'T' && !(compressedPhotomA->rejectList[X][f]))
1039 arrayF[n] = compressedPhotomA->iDispFringe[R][X][f];
1043 sprintf (fileName,
"PhotomACleanDATA%d_X%d", R+1, X+1);
1044 sprintf (title,
"Photometry A DATA%d for Channel %d (Sky Removed)", R+1, X+1);
1045 midiCreatePlotFile2D (fileName, title,
"Frame",
"Flux", 0, arrayF, 0, n, 1, 0);
1048 for (R = 0; R < formatPhotomB->numOfRegionsToProcess; R++)
1050 for (X = 0; X < formatPhotomB->iXWidth; X++)
1052 if (badChannelList[X])
1056 for (f = 0; f < formatPhotomB->numOfFrames; f++)
1058 if (compressedPhotomB->tarType[f] ==
'T' && !(compressedPhotomB->rejectList[X][f]))
1060 arrayF[n] = compressedPhotomB->iDispFringe[R][X][f];
1064 sprintf (fileName,
"PhotomBCleanDATA%d_X%d", R+1, X+1);
1065 sprintf (title,
"Photometry B DATA%d for Channel %d (Sky Removed)", R+1, X+1);
1066 midiCreatePlotFile2D (fileName, title,
"Frame",
"Flux", 0, arrayF, 0, n, 1, 0);
1078 arrayF = (
float *) calloc (formatInterf->iXWidth, sizeof (
float));
1079 fileName = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1080 title = (
char *) calloc (MAX_STRING_LENGTH,
sizeof (
char));
1082 for (R = 0; R < formatInterf->numOfRegionsToProcess; R++)
1084 for (X = 0; X < formatInterf->iXWidth; X++)
1087 if (badChannelList[X])
1091 for (f = 0; f < formatInterf->numOfFrames; f++)
1093 if (compressedInterf->tarType[f] ==
'T' && !(compressedInterf->rejectList[X][f]))
1095 arrayF[X] += compressedInterf->iDispFringe[R][X][f];
1099 arrayF[X] /=(float)n;
1102 sprintf (fileName,
"MeanInterfCleanDATA%d", R+1);
1103 sprintf (title,
"Mean Interferometry DATA%d (Sky Removed)", R+1);
1104 midiCreatePlotFile2D (fileName, title,
"Channel",
"Flux", 0, arrayF, 0, formatInterf->iXWidth, 1, 0);
1113 finaliseRejectListInterf (
"Combined Interferometry", formatInterf, compressedInterf, error);
1115 finaliseRejectListPhotom (
"Combined Photometry A", formatPhotomA, compressedPhotomA, error);
1117 finaliseRejectListPhotom (
"Combined Photometry B", formatPhotomB, compressedPhotomB, error);
1137 void finaliseRejectListInterf (
1138 const char *dataKey,
1139 ImageFormat *format,
1140 CompressedData *compressed,
1145 const char routine[] =
"finaliseRejectListInterf";
1146 int i, f, s, x, numOfGoodFrames, numOfGoodChannels,
1147 numOfBadScans, minFrames;
1151 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1152 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1154 cpl_msg_info(cpl_func,
"\nFinalising Rejection List for %s data \n", dataKey);
1155 cpl_msg_info(cpl_func,
"-------------------------------------------------- \n");
1156 fprintf (midiReportPtr,
"\nFinalising Rejection List for %s data \n", dataKey);
1157 fprintf (midiReportPtr,
"-------------------------------------------------- \n");
1161 minFrames = MIN_FRAMES_PER_SCAN * format->framesPerScan;
1163 numOfGoodChannels = 0;
1164 for (x = 0; x < format->iXWidth; x++)
1166 if (badChannelList[x])
1168 for (f = 0; f < format->numOfFrames; f++)
1169 compressed->rejectList[x][f] |= badChannelList[x];
1174 for (s = 0; s < format->numOfScans; s++)
1176 numOfGoodFrames = 0;
1177 for (i = 0; i < format->framesPerScan; i++)
1179 f = i + s * format->framesPerScan;
1180 if (!(compressed->rejectList[x][f]))
1184 if (numOfGoodFrames < minFrames)
1187 if (numOfBadScans == format->numOfScans)
1188 badChannelList[x] |= BSL_DATA_ERROR;
1190 numOfGoodChannels++;
1194 if (!numOfGoodChannels)
1196 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"All channels have been rejected");
1218 void finaliseRejectListPhotom (
1219 const char *dataKey,
1220 ImageFormat *format,
1221 CompressedData *compressed,
1226 const char routine[] =
"finaliseRejectListPhotom";
1227 int f, x, numOfBadFrames, numOfGoodChannels;
1231 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
1232 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
1234 cpl_msg_info(cpl_func,
"\nFinalising Rejection List for %s data \n", dataKey);
1235 cpl_msg_info(cpl_func,
"-------------------------------------------------- \n");
1236 fprintf (midiReportPtr,
"\nFinalising Rejection List for %s data \n", dataKey);
1237 fprintf (midiReportPtr,
"-------------------------------------------------- \n");
1242 numOfGoodChannels = 0;
1243 for (x = 0; x < format->iXWidth; x++)
1245 if (badChannelList[x])
1247 for (f = 0; f < format->numOfFrames; f++)
1248 compressed->rejectList[x][f] |= badChannelList[x];
1253 for (f = 0; f < format->numOfFrames; f++)
1255 if (compressed->rejectList[x][f])
1258 if (numOfBadFrames == format->numOfFrames)
1259 badChannelList[x] |= BSL_DATA_ERROR;
1261 numOfGoodChannels++;
1265 if (!numOfGoodChannels)
1267 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"All channels have been rejected");
1284 cpl_error_code midiSaveCorrelatedFlux(IauExchange *iauData,
1285 DispersedResult *dispResult, cpl_parameterlist *parlist,
1286 cpl_frameset *frameset)
1288 cpl_table * table=NULL;
1289 cpl_propertylist * qclist=NULL;
1290 char * dataname=NULL;
1292 table=cpl_table_new(iauData->wavelength->nwave);
1294 cpl_table_new_column(table,
"Wavelength", CPL_TYPE_FLOAT);
1295 cpl_table_new_column(table,
"CorrelatedFlux", CPL_TYPE_FLOAT);
1296 cpl_table_new_column(table,
"CorrelatedFluxError", CPL_TYPE_FLOAT);
1297 cpl_table_new_column(table,
"Flag", CPL_TYPE_INT);
1299 cpl_table_set_column_unit(table ,
"Wavelength",
"m");
1300 cpl_table_set_column_unit(table,
"CorrelatedFlux",
"ADU");
1301 cpl_table_set_column_unit(table,
"CorrelatedFluxError",
"ADU");
1303 cpl_table_copy_data_float(table,
"Wavelength",iauData->wavelength->eff_wave);
1304 cpl_table_copy_data_float(table,
"CorrelatedFlux",dispResult->rawVis2);
1305 cpl_table_copy_data_float(table,
"CorrelatedFluxError",dispResult->rawVis2Err);
1306 cpl_table_copy_data_int(table,
"Flag",badChannelList);
1311 qclist=cpl_propertylist_new();
1313 cpl_propertylist_update_string(qclist, CPL_DFS_PRO_CATG,
"CORRELATED_FLUX");
1314 dataname=cpl_sprintf(
"MIDI_CorrelatedFlux.fits");
1316 cpl_dfs_save_table(frameset, NULL, parlist, frameset, NULL, table,
1317 qclist,
"midi_fringe_all",
1319 PACKAGE
"/" PACKAGE_VERSION,
1322 cpl_propertylist_delete(qclist);
1324 cpl_table_delete(table);
1326 if(cpl_error_get_code()!=CPL_ERROR_NONE)
1328 cpl_msg_error(cpl_func,
"Correlated flux can not be saved!");
1329 return cpl_error_set(cpl_func, CPL_ERROR_FILE_NOT_CREATED);
1332 return CPL_ERROR_NONE;