26 #include "midiGlobal.h"
28 #include "visibility.h"
29 #include "errorHandling.h"
30 #include "diagnostics.h"
51 void computeCalibVis (
54 DispersedResult *dispResult,
56 cpl_parameterlist *parlist,
57 cpl_frameset *frameset)
62 const char routine[] =
"computeCalibVis";
71 cpl_frame * cur_frame=NULL;
72 cpl_table * table=NULL;
73 cpl_errorstate prestate = cpl_errorstate_get();
76 cpl_frame * local_trf_frame=NULL;
77 cpl_propertylist * dummy_propertylist = NULL;
78 cpl_propertylist * qclist=NULL;
82 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
83 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
85 cpl_msg_info(cpl_func,
"\nComputing Calibrated Visibility for batch %d \n", batchNumber);
86 cpl_msg_info(cpl_func,
"----------------------------------------- \n");
87 fprintf (midiReportPtr,
"\nComputing Calibrated Visibility for batch %d \n", batchNumber);
88 fprintf (midiReportPtr,
"----------------------------------------- \n");
92 dispResult->trfExists = 0;
93 dispResult->calibVisExists = 0;
96 prestate = cpl_errorstate_get();
99 if (strcmp(format->grismId,
"GRISM")==0){
100 softag = cpl_sprintf(
"%s", MIDI_TRF_GRISM);
102 else if (strcmp(format->grismId,
"PRISM")==0){
103 softag = cpl_sprintf(
"%s", MIDI_TRF_PRISM);
106 cpl_msg_warning(cpl_func,
"No GRISM or PRISM found");
107 cpl_msg_warning(cpl_func,
"No transfer function applied");
108 cpl_errorstate_set(prestate);
113 cur_frame = cpl_frameset_find( frameset, softag );
122 dummy_propertylist=cpl_propertylist_load(
"/tmp/MIDI_trf.fits", 0);
123 if (dummy_propertylist != NULL)
125 local_trf_frame=cpl_frame_new();
126 cpl_frame_set_filename (local_trf_frame,
"/tmp/MIDI_trf.fits");
127 cpl_frame_set_group (local_trf_frame, CPL_FRAME_GROUP_CALIB);
128 cpl_frame_set_level (local_trf_frame, CPL_FRAME_LEVEL_FINAL);
129 cpl_frame_set_tag (local_trf_frame, cpl_propertylist_get_string(dummy_propertylist,
"ESO PRO CATG"));
130 cpl_frame_set_type (local_trf_frame, CPL_FRAME_TYPE_TABLE);
131 cpl_frameset_insert(frameset, local_trf_frame);
132 cpl_propertylist_delete(dummy_propertylist);
136 cur_frame = cpl_frameset_find( frameset, softag );
140 cpl_msg_info(cpl_func,
"Transfer function found in the SOF: %s\n",cpl_frame_get_filename(cur_frame));
145 cpl_msg_warning(cpl_func,
"No siutable transfer function found!");
146 cpl_msg_warning(cpl_func,
"No transfer function applied to the data");
148 cpl_errorstate_set(prestate);
157 prestate = cpl_errorstate_get();
159 ext_trf=cpl_fits_find_extension(cpl_frame_get_filename(cur_frame),
"TRANSFER_FUNCTION");
161 if((table = cpl_table_load(cpl_frame_get_filename(cur_frame), ext_trf, 1))==NULL)
163 cpl_msg_info(cpl_func,
"No siutable table found in the file %s\n",cpl_frame_get_filename(cur_frame));
164 cpl_msg_warning(cpl_func,
"No transfer function applied");
165 cpl_errorstate_set(prestate);
171 dimentrf=cpl_table_get_nrow(table);
172 if ( dimentrf != format->iXWidth)
174 cpl_msg_warning(cpl_func,
"Inconsistent Number of Records found");
175 cpl_msg_warning(cpl_func,
"No transfer function applied");
176 cpl_errorstate_set(prestate);
177 cpl_table_delete(table);
184 if (cpl_table_has_column(table,
"TRF") && cpl_table_has_column(table,
"TRF_ERROR") )
187 for (X=0; X<dimentrf;X++){
188 dispResult->trf[X]=cpl_table_get_float(table,
"TRF", X, NULL);
189 dispResult->trfErr[X]=cpl_table_get_float(table,
"TRF_ERROR", X, NULL);
193 cpl_msg_info(cpl_func,
"No siutable table column found in the file %s\n",cpl_frame_get_filename(cur_frame));
194 cpl_msg_warning(cpl_func,
"No transfer function applied");
195 cpl_table_delete(table);
202 qclist=cpl_propertylist_new();
205 dummy_propertylist = cpl_propertylist_load(cpl_frame_get_filename(cur_frame), 0);
206 cpl_propertylist_copy_property_regexp(qclist, dummy_propertylist,
"^ESO QC",0);
207 cpl_propertylist_delete(dummy_propertylist);
209 if (strcmp(format->grismId,
"GRISM")==0) {
210 cpl_propertylist_update_string(qclist, CPL_DFS_PRO_CATG,
"TRF_GRISM");
211 dataname=cpl_sprintf(
"MIDI_trf_grism.fits");
213 if (strcmp(format->grismId,
"PRISM")==0) {
214 cpl_propertylist_update_string(qclist, CPL_DFS_PRO_CATG,
"TRF_PRISM");
215 dataname=cpl_sprintf(
"MIDI_trf_prism.fits");
217 cpl_propertylist_append_string(qclist,
"EXTNAME",
"TRANSFER_FUNCTION");
220 cpl_dfs_save_table(frameset, NULL, parlist, frameset, NULL, table,
221 qclist,
"midi_fringe_all",
223 PACKAGE
"/" PACKAGE_VERSION,
226 cpl_propertylist_delete(qclist);
228 cpl_table_delete(table);
328 if (diagnostic)cpl_msg_info(cpl_func,
"\nChannel Calibrated Visibility Calibrated Visibility Error \n");
329 if (diagnostic)cpl_msg_info(cpl_func,
"------------------------------------------------------------- \n");
330 fprintf (midiReportPtr,
"\nChannel Calibrated Visibility Calibrated Visibility Error QCLOG \n");
331 fprintf (midiReportPtr,
"------------------------------------------------------------- QCLOG\n");
332 for (X = 0; X < format->iXWidth; X++)
334 if (badChannelList[X] || (dispResult->trf[X] <= 0.0))
336 badChannelList[X] |= BSL_DATA_ERROR;
337 if (diagnostic)cpl_msg_info(cpl_func,
"%3d <-- %s --> \n", X, UNAV);
338 fprintf (midiReportPtr,
"%3d <-- %s --> \n", X, UNAV);
342 (dispResult->calibVis2)[X] = (dispResult->normVis2)[X] / (dispResult->trf)[X];
343 (dispResult->calibVis2Err)[X] = (dispResult->normVis2Err)[X] / (fabs ((dispResult->trf)[X])) +
344 (dispResult->trfErr)[X] * (fabs ((dispResult->normVis2)[X]) / ((dispResult->trf)[X] * (dispResult->trf)[X]));
346 if (diagnostic)cpl_msg_info(cpl_func,
"%3d %5.4f %5.4f \n",
347 X, (dispResult->calibVis2)[X], (dispResult->calibVis2Err)[X]);
348 fprintf (midiReportPtr,
"%3d %5.4f %5.4f QCLOG \n",
349 X, (dispResult->calibVis2)[X], (dispResult->calibVis2Err)[X]);
354 midiCreatePlotFile2D (
"CalibVisCombined",
"Combined Calibrated Visibility",
355 "Channale",
"Visibility", 0, dispResult->calibVis2, 0, format->iXWidth, 1, 0);
357 midiCreatePlotFile2D (
"CalibVisErrCombined",
"Combined Calibrated Visibility Error",
358 "Channel",
"Visibility Error", 0, dispResult->calibVis2Err, 0, format->iXWidth, 1, 0);
360 midiCreatePlotFile2D (
"NormalizedUncalibVisCombined",
"Combined Calibrated Visibility",
361 "Channale",
"Visibility", 0, dispResult->calibVis2, 0, format->iXWidth, 1, 0);
363 midiCreatePlotFile2D (
"NormalizedUncalibVisErrCombined",
"Combined Calibrated Visibility Error",
364 "Channel",
"Visibility Error", 0, dispResult->calibVis2Err, 0, format->iXWidth, 1, 0);
368 dispResult->trfExists = 1;
369 dispResult->calibVisExists = 1;
389 void computeUncalibVisHSUndisp (
390 RawVisibility *rawVis,
391 PhotometryResult *photom)
396 const char routine[] =
"computeUncalibVisHSUndisp";
400 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
401 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
403 cpl_msg_info(cpl_func,
"\nComputing Uncalibrated Visibilities for batch %d \n", batchNumber);
404 cpl_msg_info(cpl_func,
"--------------------------------------------- \n");
405 fprintf (midiReportPtr,
"\nComputing Uncalibrated Visibilities for batch %d \n", batchNumber);
406 fprintf (midiReportPtr,
"--------------------------------------------- \n");
408 rawVis->visErr = fabs (rawVis->vis * (photom->chop2ChopAErr[0] + photom->chop2ChopAErr[1] +
409 photom->chop2ChopBErr[0] + photom->chop2ChopBErr[1]) / (8.0 * sqrt(2.0)));
410 rawVis->vis1Err = fabs (rawVis->vis1 * (photom->chop2ChopAErr[0] + photom->chop2ChopAErr[1] +
411 photom->chop2ChopBErr[0] + photom->chop2ChopBErr[1]) / 8.0);
412 rawVis->vis2Err = fabs (rawVis->vis2 * (photom->chop2ChopAErr[0] + photom->chop2ChopAErr[1] +
413 photom->chop2ChopBErr[0] + photom->chop2ChopBErr[1]) / 8.0);
414 rawVis->visSqrdErr = 2.0 * (rawVis->visErr * fabs (rawVis->vis));
415 rawVis->visSqrd1Err = 2.0 * (rawVis->vis1Err * fabs (rawVis->vis1));
416 rawVis->visSqrd2Err = 2.0 * (rawVis->vis2Err * fabs (rawVis->vis2));
418 cpl_msg_info(cpl_func,
"Uncalibrated Visibility region 0 = %f \n", rawVis->vis);
419 cpl_msg_info(cpl_func,
"Uncalibrated Visibility region 0 Error = %f \n", rawVis->visErr);
420 cpl_msg_info(cpl_func,
"Uncalibrated Visibility region 1 = %f \n", rawVis->vis1);
421 cpl_msg_info(cpl_func,
"Uncalibrated Visibility region 1 Error = %f \n", rawVis->vis1Err);
422 cpl_msg_info(cpl_func,
"Uncalibrated Visibility region 2 = %f \n", rawVis->vis2);
423 cpl_msg_info(cpl_func,
"Uncalibrated Visibility region 2 Error = %f \n", rawVis->vis2Err);
424 cpl_msg_info(cpl_func,
"Uncalibrated Squared Visibility region 0 = %f \n", rawVis->visSqrd);
425 cpl_msg_info(cpl_func,
"Uncalibrated Squared Visibility region 0 Error = %f \n", rawVis->visSqrdErr);
426 cpl_msg_info(cpl_func,
"Uncalibrated Squared Visibility region 1 = %f \n", rawVis->visSqrd1);
427 cpl_msg_info(cpl_func,
"Uncalibrated Squared Visibility region 1 Error = %f \n", rawVis->visSqrd1Err);
428 cpl_msg_info(cpl_func,
"Uncalibrated Squared Visibility region 2 = %f \n", rawVis->visSqrd2);
429 cpl_msg_info(cpl_func,
"Uncalibrated Squared Visibility region 2 Error = %f \n", rawVis->visSqrd2Err);
431 fprintf (midiReportPtr,
"Uncalibrated Visibility region 0 = %f \n", rawVis->vis);
432 fprintf (midiReportPtr,
"Uncalibrated Visibility region 0 Error = %f \n", rawVis->visErr);
433 fprintf (midiReportPtr,
"Uncalibrated Visibility region 1 = %f \n", rawVis->vis1);
434 fprintf (midiReportPtr,
"Uncalibrated Visibility region 1 Error = %f \n", rawVis->vis1Err);
435 fprintf (midiReportPtr,
"Uncalibrated Visibility region 2 = %f \n", rawVis->vis2);
436 fprintf (midiReportPtr,
"Uncalibrated Visibility region 2 Error = %f \n", rawVis->vis2Err);
437 fprintf (midiReportPtr,
"Uncalibrated Squared Visibility region 0 = %f \n", rawVis->visSqrd);
438 fprintf (midiReportPtr,
"Uncalibrated Squared Visibility region 0 Error = %f \n", rawVis->visSqrdErr);
439 fprintf (midiReportPtr,
"Uncalibrated Squared Visibility region 1 = %f \n", rawVis->visSqrd1);
440 fprintf (midiReportPtr,
"Uncalibrated Squared Visibility region 1 Error = %f \n", rawVis->visSqrd1Err);
441 fprintf (midiReportPtr,
"Uncalibrated Squared Visibility region 2 = %f \n", rawVis->visSqrd2);
442 fprintf (midiReportPtr,
"Uncalibrated Squared Visibility region 2 Error = %f \n", rawVis->visSqrd2Err);
462 void computeCalibVisHSUndisp (
463 MidiFiles *fileNames,
464 RawVisibility *rawVis,
465 TransferFunction *trf,
466 CalibratedVisibility *calibVis,
472 const char routine[] =
"computeCalibVisHSUndisp";
478 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
479 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
481 cpl_msg_info(cpl_func,
"\nComputing Calibrated Visibility for batch %d \n", batchNumber);
482 cpl_msg_info(cpl_func,
"----------------------------------------- \n");
483 fprintf (midiReportPtr,
"\nComputing Calibrated Visibility for batch %d \n", batchNumber);
484 fprintf (midiReportPtr,
"----------------------------------------- \n");
489 calibVis->exists = 0;
492 if ((trfPtr = fopen (fileNames->trfNameRead,
"r")) == NULL)
494 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot open Transfer Functions file");
500 for (i = 0; i < 6; i++)
502 if (fscanf (trfPtr,
"%f\n", &(trf->trf[i])) == EOF)
504 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read Transfer Functions");
508 if (fscanf (trfPtr,
"%f\n", &(trf->trfErr[i])) == EOF)
510 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot read Transfer Functions");
517 if (trf->trf[0] == 0 || trf->trfErr[0] == 0 ||
518 trf->trf[1] == 0 || trf->trfErr[1] == 0 ||
519 trf->trf[2] == 0 || trf->trfErr[2] == 0 ||
520 trf->trf[3] == 0 || trf->trfErr[3] == 0 ||
521 trf->trf[4] == 0 || trf->trfErr[4] == 0 ||
522 trf->trf[5] == 0 || trf->trfErr[5] == 0)
524 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
525 "A singularity encountered. Cannot compute Calibrated Visibilities");
531 calibVis->vis[0] = rawVis->vis / trf->trf[0];
532 calibVis->visErr[0] = rawVis->visErr / (fabs (trf->trf[0])) +
533 trf->trfErr[0] * (fabs (rawVis->vis) / (trf->trf[0] * trf->trf[0]));
535 calibVis->vis[1] = rawVis->vis1 / trf->trf[1];
536 calibVis->visErr[1] = rawVis->vis1Err / (fabs (trf->trf[1])) +
537 trf->trfErr[1] * (fabs (rawVis->vis1) / (trf->trf[1] * trf->trf[1]));
539 calibVis->vis[2] = rawVis->vis2 / trf->trf[2];
540 calibVis->visErr[2] = rawVis->vis2Err / (fabs (trf->trf[2])) +
541 trf->trfErr[2] * (fabs (rawVis->vis2) / (trf->trf[2] * trf->trf[2]));
543 calibVis->visSqrd[0] = rawVis->visSqrd / trf->trf[3];
544 calibVis->visSqrdErr[0] = rawVis->visSqrdErr / (fabs (trf->trf[3])) +
545 trf->trfErr[3] * (fabs (rawVis->visSqrd) / (trf->trf[3] * trf->trf[3]));
547 calibVis->visSqrd[1] = rawVis->visSqrd1 / trf->trf[4];
548 calibVis->visSqrdErr[1] = rawVis->visSqrd1Err / (fabs (trf->trf[4])) +
549 trf->trfErr[4] * (fabs (rawVis->visSqrd1) / (trf->trf[4] * trf->trf[4]));
551 calibVis->visSqrd[2] = rawVis->visSqrd2 / trf->trf[5];
552 calibVis->visSqrdErr[2] = rawVis->visSqrd2Err / (fabs (trf->trf[5])) +
553 trf->trfErr[5] * (fabs (rawVis->visSqrd2) / (trf->trf[5] * trf->trf[5]));
557 cpl_msg_info(cpl_func,
"Calibrated Visibility region 0 = %f \n", calibVis->vis[0]);
558 cpl_msg_info(cpl_func,
"Calibrated Visibility region 0 Error = %f \n", calibVis->visErr[0]);
559 cpl_msg_info(cpl_func,
"Calibrated Visibility region 1 = %f \n", calibVis->vis[1]);
560 cpl_msg_info(cpl_func,
"Calibrated Visibility region 1 Error = %f \n", calibVis->visErr[1]);
561 cpl_msg_info(cpl_func,
"Calibrated Visibility region 2 = %f \n", calibVis->vis[2]);
562 cpl_msg_info(cpl_func,
"Calibrated Visibility region 2 Error = %f \n", calibVis->visErr[2]);
563 cpl_msg_info(cpl_func,
"Calibrated Squared Visibility region 0 = %f \n", calibVis->visSqrd[0]);
564 cpl_msg_info(cpl_func,
"Calibrated Squared Visibility region 0 Error = %f \n", calibVis->visSqrdErr[0]);
565 cpl_msg_info(cpl_func,
"Calibrated Squared Visibility region 1 = %f \n", calibVis->visSqrd[1]);
566 cpl_msg_info(cpl_func,
"Calibrated Squared Visibility region 1 Error = %f \n", calibVis->visSqrdErr[1]);
567 cpl_msg_info(cpl_func,
"Calibrated Squared Visibility region 2 = %f \n", calibVis->visSqrd[2]);
568 cpl_msg_info(cpl_func,
"Calibrated Squared Visibility region 2 Error = %f \n", calibVis->visSqrdErr[2]);
570 fprintf (midiReportPtr,
"Calibrated Visibility region 0 = %f (QCLOG)\n", calibVis->vis[0]);
571 fprintf (midiReportPtr,
"Calibrated Visibility region 0 Error = %f (QCLOG)\n", calibVis->visErr[0]);
572 fprintf (midiReportPtr,
"Calibrated Visibility region 1 = %f (QCLOG)\n", calibVis->vis[1]);
573 fprintf (midiReportPtr,
"Calibrated Visibility region 1 Error = %f (QCLOG)\n", calibVis->visErr[1]);
574 fprintf (midiReportPtr,
"Calibrated Visibility region 2 = %f (QCLOG)\n", calibVis->vis[2]);
575 fprintf (midiReportPtr,
"Calibrated Visibility region 2 Error = %f (QCLOG)\n", calibVis->visErr[2]);
576 fprintf (midiReportPtr,
"Calibrated Squared Visibility region 0 = %f (QCLOG)\n", calibVis->visSqrd[0]);
577 fprintf (midiReportPtr,
"Calibrated Squared Visibility region 0 Error = %f (QCLOG)\n", calibVis->visSqrdErr[0]);
578 fprintf (midiReportPtr,
"Calibrated Squared Visibility region 1 = %f (QCLOG)\n", calibVis->visSqrd[1]);
579 fprintf (midiReportPtr,
"Calibrated Squared Visibility region 1 Error = %f (QCLOG)\n", calibVis->visSqrdErr[1]);
580 fprintf (midiReportPtr,
"Calibrated Squared Visibility region 2 = %f (QCLOG)\n", calibVis->visSqrd[2]);
581 fprintf (midiReportPtr,
"Calibrated Squared Visibility region 2 Error = %f (QCLOG)\n", calibVis->visSqrdErr[2]);
584 remove (fileNames->trfNameRead);
586 calibVis->exists = 1;
605 void computeUncalibVis (
608 DispersedResult *dispResult,
614 const char routine[] =
"computeUncalibVis";
616 float errfromvis, neterr;
617 double phot, photA, photB;
621 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
622 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
623 cpl_msg_info(cpl_func,
"\nComputing Normalized Uncalibrated Visibility for batch %d \n", batchNumber);
624 cpl_msg_info(cpl_func,
"------------------------------------------------------ \n");
625 fprintf (midiReportPtr,
"\nComputing Normalized Uncalibrated Visibility for batch %d \n", batchNumber);
626 fprintf (midiReportPtr,
"------------------------------------------------------ \n");
632 for (X = 0; X < format->iXWidth; X++)
634 if (badChannelList[X])
637 if (strcmp (format->beamCombiner,
"SCI_PHOT") == 0)
639 phot = 4.F * (dispResult->photomA)[0][X] * (dispResult->photomB)[0][X];
640 (dispResult->photomNet2Err)[X] = sqrt(sqr((dispResult->photomAErr)[0][X] /
641 (dispResult->photomA)[0][X]) + sqr((dispResult->photomBErr)[0][X] /
642 (dispResult->photomB)[0][X]));
646 photA = (dispResult->photomA)[0][X] + (dispResult->photomA)[1][X];
647 photB = (dispResult->photomB)[0][X] + (dispResult->photomB)[1][X];
648 phot = 4.F*photA*photB;
649 (dispResult->photomNet2Err)[X] = sqrt((sqr((dispResult->photomAErr)[0][X]) +
650 sqr((dispResult->photomAErr)[1][X])) / sqr(photA) +
651 (sqr((dispResult->photomBErr)[0][X]) +
652 sqr((dispResult->photomBErr)[1][X])) / sqr(photB));
656 dispResult->photomNet2[X] = phot;
658 dispResult->photomNet2Err[X] = 0.F;
663 for (X = 0; X < format->iXWidth; X++)
665 if (badChannelList[X])
668 if ((dispResult->photomNet2)[X] > 0.F)
669 (dispResult->normVis2)[X] = (dispResult->rawVis2)[X] / (dispResult->photomNet2)[X];
671 (dispResult->normVis2)[X] = 0.F;
673 if ((dispResult->normVis2)[X] <= 0.0)
675 (dispResult->normVis2)[X] = 0.F;
676 badChannelList[X] |= BSL_DATA_ERROR;
684 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot find any good visibility range");
689 if (diagnostic)cpl_msg_info(cpl_func,
"\nChannel Freq / Wave Net photometry Visibility^2 RMS Photometry Errors percent \n");
690 fprintf (midiReportPtr,
"\nChannel Freq / Wave Net photometry Visibility^2 RMS Photometry Errors percent QCLOG \n");
691 if (diagnostic)cpl_msg_info(cpl_func,
" THz micron ADU/frame normalized Error percent from Vis Net \n");
692 fprintf (midiReportPtr,
" THz micron ADU/frame normalized Error percent from Vis Net QCLOG \n");
694 for (X = 0; X < format->iXWidth; X++)
696 if (badChannelList[X])
698 if (diagnostic) cpl_msg_info(cpl_func,
"%3d %6.3f %6.3f <-- %s --> \n",
699 X, 299.8F/freqFound[X], freqFound[X], UNAV);
700 fprintf (midiReportPtr,
"%3d %6.3f %6.3f <-- %s --> QCLOG \n",
701 X, 299.8F/freqFound[X], freqFound[X], UNAV);
705 if (diagnostic) cpl_msg_info(cpl_func,
"%3d ", X);
706 fprintf (midiReportPtr,
"%3d ", X);
709 if (diagnostic)cpl_msg_info(cpl_func,
" %6.3f %6.3f", 299.8F/freqFound[X], freqFound[X]);
710 if (diagnostic)cpl_msg_info(cpl_func,
" %9.3f", sqrt((dispResult->photomNet2)[X]));
711 if (diagnostic)cpl_msg_info(cpl_func,
" %7.4f", (dispResult->normVis2)[X]);
712 if (diagnostic)cpl_msg_info(cpl_func,
" %7.2f", 100.F*(dispResult->photomNet2Err)[X]);
713 fprintf (midiReportPtr,
" %6.3f %6.3f", 299.8F/freqFound[X], freqFound[X]);
714 fprintf (midiReportPtr,
" %9.3f", sqrt((dispResult->photomNet2)[X]));
715 fprintf (midiReportPtr,
" %7.4f", (dispResult->normVis2)[X]);
716 fprintf (midiReportPtr,
" %7.2f", 100.F*(dispResult->photomNet2Err)[X]);
717 errfromvis = (dispResult->rawVis2Err)[X] / (dispResult->rawVis2)[X];
718 neterr = sqrt(sqr(errfromvis) + sqr((dispResult->photomNet2Err)[X]));
719 (dispResult->normVis2Err)[X] = neterr;
720 if (diagnostic)cpl_msg_info(cpl_func,
" %8.2f", 100.F*errfromvis);
721 if (diagnostic)cpl_msg_info(cpl_func,
" %8.2f", 100.F*neterr);
722 fprintf (midiReportPtr,
" %8.2f", 100.F*errfromvis);
723 fprintf (midiReportPtr,
" %8.2f", 100.F*neterr);
725 if (diagnostic)cpl_msg_info(cpl_func,
"\n");
726 fprintf (midiReportPtr,
" QCLOG \n");
731 midiCreatePlotFile2D (
"PhotomNetCombined",
"Combined Net Photometry",
732 "Channel",
"Photometry", 0, dispResult->photomNet2, 0, format->iXWidth, 1, 0);
733 midiCreatePlotFile2D (
"PhotomNetErrCombined",
"Combined Net Photometry Error",
734 "Channel",
"Photometry Error", 0, dispResult->photomNet2Err, 0, format->iXWidth, 1, 0);
735 midiCreatePlotFile2D (
"NormalizedUncalibVisCombined",
"Combined Normalized Uncalibrated Visibility",
736 "Channel",
"Visibility", 0, dispResult->normVis2, 0, format->iXWidth, 1, 0);
737 midiCreatePlotFile2D (
"NormalizedUncalibVisErrCombined",
"Combined Normalized Uncalibrated Visibility Error",
738 "Channel",
"Visibility Error", 0, dispResult->normVis2Err, 0, format->iXWidth, 1, 0);
742 computeBinnedUncalibVis (format, dispResult, error);
745 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__,
"Cannot compute Binned Uncalibrated visibilities");
767 RawVisibility *rawVis,
773 const char routine[] =
"normalizeVis";
777 if (diagnostic > 4)cpl_msg_info(cpl_func,
"Invoking routine '%s' \n", routine);
778 if (diagnostic > 4) fprintf(midiReportPtr,
"Invoking routine '%s' \n", routine);
781 if (((photomA[0] + photomA[1]) * (photomB[0] + photomB[1])) != 0)
782 rawVis->visSqrd /= (photomA[0] + photomA[1])*(photomB[0] + photomB[1]) ;
784 rawVis->visSqrd = NOT_A_NUMBER;
786 if ((photomA[0] * photomB[0]) != 0)
787 rawVis->visSqrd1 /= (photomA[0]*photomB[0]) ;
789 rawVis->visSqrd1 = NOT_A_NUMBER;
791 if ((photomA[1] * photomB[1]) != 0)
792 rawVis->visSqrd2 /= (photomA[1]*photomB[1]) ;
794 rawVis->visSqrd2 = NOT_A_NUMBER;
796 if (((photomA[0] + photomA[1]) * (photomB[0] + photomB[1])) > 0)
797 rawVis->vis /= (
float) sqrt((photomA[0] + photomA[1])*(photomB[0] + photomB[1])) ;
799 rawVis->vis = NOT_A_NUMBER;
801 if ((photomA[0] * photomB[0]) > 0)
802 rawVis->vis1 /= (float) sqrt(photomA[0]*photomB[0]) ;
804 rawVis->vis1 = NOT_A_NUMBER;
806 if ((photomA[1] * photomB[1]) > 0)
807 rawVis->vis2 /= (
float) sqrt(photomA[1]*photomB[1]) ;
809 rawVis->vis2 = NOT_A_NUMBER;
812 cpl_msg_info(cpl_func,
813 "Visibilities combined I1 I2 \n"
814 "--------------------------------------------- \n"
815 "Vis amplitude: %5.4f %5.4f %5.4f \n"
816 "Vis^2: %5.4f %5.4f %5.4f \n"
817 "sqrt(Vis^2): %5.4f %5.4f %5.4f \n",
818 rawVis->vis, rawVis->vis1, rawVis->vis2,
819 rawVis->visSqrd, rawVis->visSqrd1, rawVis->visSqrd2,
820 sqrtp(rawVis->visSqrd), sqrtp(rawVis->visSqrd1), sqrtp(rawVis->visSqrd2));
822 fprintf (midiReportPtr,
823 "Visibilities combined I1 I2 QCLOG \n"
824 "--------------------------------------------- \n"
825 "Vis amplitude: %5.4f %5.4f %5.4f QCLOG \n"
826 "Vis^2: %5.4f %5.4f %5.4f QCLOG \n"
827 "sqrt(Vis^2): %5.4f %5.4f %5.4f QCLOG \n",
828 rawVis->vis, rawVis->vis1, rawVis->vis2,
829 rawVis->visSqrd, rawVis->visSqrd1, rawVis->visSqrd2,
830 sqrtp(rawVis->visSqrd), sqrtp(rawVis->visSqrd1), sqrtp(rawVis->visSqrd2));
832 if ((rawVis->vis == NOT_A_NUMBER) || (rawVis->vis1 == NOT_A_NUMBER) || (rawVis->vis2 == NOT_A_NUMBER) ||
833 (rawVis->visSqrd == NOT_A_NUMBER) || (rawVis->visSqrd1 == NOT_A_NUMBER) || (rawVis->visSqrd2 == NOT_A_NUMBER) )
835 sprintf (midiMessage,
"A value of %.4f is a reject result. QCLOG", (
float)NOT_A_NUMBER);
836 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
867 void computeBinnedUncalibVis (
869 DispersedResult *dispResult,
875 const char routine[] =
"computeBinnedUncalibVis";
880 cpl_msg_info(cpl_func,
"\nBinned Uncalibrated Visibilities for batch %d \n", batchNumber);
881 cpl_msg_info(cpl_func,
"------------------------------------------ \n");
882 fprintf (midiReportPtr,
"\nBinned Uncalibrated Visibilities for batch %d QCLOG \n", batchNumber);
883 fprintf (midiReportPtr,
"------------------------------------------ QCLOG \n");
889 dispResult->uncalVisBinned1 = 0.0;
890 dispResult->uncalVisBinned2 = 0.0;
891 dispResult->uncalVisBinned3 = 0.0;
892 dispResult->uncalVisBinned4 = 0.0;
893 dispResult->uncalVisBinned5 = 0.0;
895 if (strcmp(format->grismId,
"PRISM") == 0)
898 for (i = 36; i < 51; i++)
900 if (badChannelList[i])
903 dispResult->uncalVisBinned5 += (dispResult->normVis2)[i];
906 dispResult->uncalVisBinned5 /= n;
908 for (i = 60; i < 73; i++)
910 if (badChannelList[i])
913 dispResult->uncalVisBinned4 += (dispResult->normVis2)[i];
916 dispResult->uncalVisBinned4 /= n;
918 for (i = 88; i < 99; i++)
920 if (badChannelList[i])
923 dispResult->uncalVisBinned3 += (dispResult->normVis2)[i];
926 dispResult->uncalVisBinned3 /= n;
928 for (i = 113; i < 122; i++)
930 if (badChannelList[i])
933 dispResult->uncalVisBinned2 += (dispResult->normVis2)[i];
936 dispResult->uncalVisBinned2 /= n;
938 for (i = 120; i < 127; i++)
940 if (badChannelList[i])
943 dispResult->uncalVisBinned1 += (dispResult->normVis2)[i];
946 dispResult->uncalVisBinned1 /= n;
948 else if (strcmp(format->grismId,
"GRISM") == 0)
951 for (i = 38; i < 51; i++)
953 if (badChannelList[i])
956 dispResult->uncalVisBinned1 += (dispResult->normVis2)[i];
959 dispResult->uncalVisBinned1 /= n;
961 for (i = 52; i < 69; i++)
963 if (badChannelList[i])
966 dispResult->uncalVisBinned2 += (dispResult->normVis2)[i];
969 dispResult->uncalVisBinned2 /= n;
971 for (i = 116; i < 137; i++)
973 if (badChannelList[i])
976 dispResult->uncalVisBinned3 += (dispResult->normVis2)[i];
979 dispResult->uncalVisBinned3 /= n;
981 for (i = 176; i < 201; i++)
983 if (badChannelList[i])
986 dispResult->uncalVisBinned4 += (dispResult->normVis2)[i];
989 dispResult->uncalVisBinned4 /= n;
991 for (i = 217; i < 246; i++)
993 if (badChannelList[i])
996 dispResult->uncalVisBinned5 += (dispResult->normVis2)[i];
999 dispResult->uncalVisBinned5 /= n;
1003 sprintf (midiMessage,
"Unknown GRISM ID ... %s", format->grismId);
1004 midiReportWarning (midiReportPtr, routine, __FILE__, __LINE__, midiMessage);
1010 cpl_msg_info(cpl_func,
"Grism ID: %s \n", format->grismId);
1011 fprintf (midiReportPtr,
"Grism ID: %s QCLOG \n", format->grismId);
1012 if (strcmp(format->grismId,
"PRISM") == 0)
1014 cpl_msg_info(cpl_func,
" 8.64 micron (Channel 120 -> 126) = %0.4f \n", dispResult->uncalVisBinned1);
1015 cpl_msg_info(cpl_func,
" 9.00 micron (Channel 113 -> 121) = %0.4f \n", dispResult->uncalVisBinned2);
1016 cpl_msg_info(cpl_func,
"10.46 micron (Channel 88 -> 98) = %0.4f \n", dispResult->uncalVisBinned3);
1017 cpl_msg_info(cpl_func,
"11.79 micron (Channel 60 -> 72) = %0.4f \n", dispResult->uncalVisBinned4);
1018 cpl_msg_info(cpl_func,
"12.80 micron (Channel 36 -> 50) = %0.4f \n", dispResult->uncalVisBinned5);
1020 fprintf (midiReportPtr,
" 8.64 micron (Channel 120 -> 126) = %0.4f QCLOG \n", dispResult->uncalVisBinned1);
1021 fprintf (midiReportPtr,
" 9.00 micron (Channel 113 -> 121) = %0.4f QCLOG \n", dispResult->uncalVisBinned2);
1022 fprintf (midiReportPtr,
"10.46 micron (Channel 88 -> 98) = %0.4f QCLOG \n", dispResult->uncalVisBinned3);
1023 fprintf (midiReportPtr,
"11.79 micron (Channel 60 -> 72) = %0.4f QCLOG \n", dispResult->uncalVisBinned4);
1024 fprintf (midiReportPtr,
"12.80 micron (Channel 36 -> 50) = %0.4f QCLOG \n", dispResult->uncalVisBinned5);
1028 cpl_msg_info(cpl_func,
" 8.64 micron (Channel 38 -> 50) = %0.4f \n", dispResult->uncalVisBinned1);
1029 cpl_msg_info(cpl_func,
" 9.00 micron (Channel 52 -> 68) = %0.4f \n", dispResult->uncalVisBinned2);
1030 cpl_msg_info(cpl_func,
"10.46 micron (Channel 116 -> 136) = %0.4f \n", dispResult->uncalVisBinned3);
1031 cpl_msg_info(cpl_func,
"11.79 micron (Channel 176 -> 200) = %0.4f \n", dispResult->uncalVisBinned4);
1032 cpl_msg_info(cpl_func,
"12.80 micron (Channel 217 -> 245) = %0.4f \n", dispResult->uncalVisBinned5);
1034 fprintf (midiReportPtr,
" 8.64 micron (Channel 38 -> 50) = %0.4f QCLOG \n", dispResult->uncalVisBinned1);
1035 fprintf (midiReportPtr,
" 9.00 micron (Channel 52 -> 68) = %0.4f QCLOG \n", dispResult->uncalVisBinned2);
1036 fprintf (midiReportPtr,
"10.46 micron (Channel 116 -> 136) = %0.4f QCLOG \n", dispResult->uncalVisBinned3);
1037 fprintf (midiReportPtr,
"11.79 micron (Channel 176 -> 200) = %0.4f QCLOG \n", dispResult->uncalVisBinned4);
1038 fprintf (midiReportPtr,
"12.80 micron (Channel 217 -> 245) = %0.4f QCLOG \n", dispResult->uncalVisBinned5);