@@ -487,16 +487,16 @@ __host__ void readMS(const char* MS_name,
487487 casacore::Table maxuv_metres_tab (
488488 casacore::tableCommand (maxuv_metres_query.c_str ()));
489489
490- casacore::ROScalarColumn<casacore::Double > max_blength_col (
490+ casacore::ROScalarColumn<double > max_blength_col (
491491 maxmin_baseline_tab, " MAX_BLENGTH" );
492- casacore::ROScalarColumn<casacore::Double > min_blength_col (
492+ casacore::ROScalarColumn<double > min_blength_col (
493493 maxmin_baseline_tab, " MIN_BLENGTH" );
494- casacore::ROScalarColumn<casacore::Double > maxuv_metres_col (maxuv_metres_tab,
494+ casacore::ROScalarColumn<double > maxuv_metres_col (maxuv_metres_tab,
495495 " MAXUV" );
496496
497- casacore::ROScalarColumn<casacore::Double > min_freq_col (freq_tab, " MIN_FREQ" );
498- casacore::ROScalarColumn<casacore::Double > max_freq_col (freq_tab, " MAX_FREQ" );
499- casacore::ROScalarColumn<casacore::Double > ref_freq_col (freq_tab, " REF_FREQ" );
497+ casacore::ROScalarColumn<double > min_freq_col (freq_tab, " MIN_FREQ" );
498+ casacore::ROScalarColumn<double > max_freq_col (freq_tab, " MAX_FREQ" );
499+ casacore::ROScalarColumn<double > ref_freq_col (freq_tab, " REF_FREQ" );
500500
501501 data->nantennas = antenna_tab.nrow ();
502502 data->nbaselines = (data->nantennas ) * (data->nantennas - 1 ) / 2 ;
@@ -509,9 +509,9 @@ __host__ void readMS(const char* MS_name,
509509
510510 float max_wavelength = freq_to_wavelength (data->min_freq );
511511
512- casacore::ROArrayColumn<casacore::Double > dishposition_col (antenna_tab,
512+ casacore::ROArrayColumn<double > dishposition_col (antenna_tab,
513513 " POSITION" );
514- casacore::ROScalarColumn<casacore::Double > dishdiameter_col (antenna_tab,
514+ casacore::ROScalarColumn<double > dishdiameter_col (antenna_tab,
515515 " DISH_DIAMETER" );
516516 casacore::ROScalarColumn<casacore::String> dishname_col (antenna_tab, " NAME" );
517517 casacore::ROScalarColumn<casacore::String> dishstation_col (antenna_tab,
@@ -584,7 +584,7 @@ __host__ void readMS(const char* MS_name,
584584
585585 data->n_internal_frequencies = spectral_window_tab.nrow ();
586586
587- casacore::ROArrayColumn<casacore::Float > chan_freq_col (spectral_window_tab,
587+ casacore::ROArrayColumn<double > chan_freq_col (spectral_window_tab,
588588 " CHAN_FREQ" );
589589
590590 casacore::ROScalarColumn<casacore::Int64> n_chan_freq (spectral_window_tab,
@@ -609,7 +609,7 @@ __host__ void readMS(const char* MS_name,
609609
610610 for (int f = 0 ; f < data->nfields ; f++) {
611611 for (int i = 0 ; i < data->n_internal_frequencies ; i++) {
612- casacore::Vector<float > chan_freq_vector;
612+ casacore::Vector<double > chan_freq_vector;
613613 chan_freq_vector = chan_freq_col (i);
614614 for (int j = 0 ; j < data->channels [i]; j++) {
615615 fields[f].nu .push_back (chan_freq_vector[j]);
@@ -837,16 +837,16 @@ __host__ void readMS(const char* MS_name,
837837 casacore::Table maxuv_metres_tab (
838838 casacore::tableCommand (maxuv_metres_query.c_str ()));
839839
840- casacore::ROScalarColumn<casacore::Double > max_blength_col (
840+ casacore::ROScalarColumn<double > max_blength_col (
841841 maxmin_baseline_tab, " MAX_BLENGTH" );
842- casacore::ROScalarColumn<casacore::Double > min_blength_col (
842+ casacore::ROScalarColumn<double > min_blength_col (
843843 maxmin_baseline_tab, " MIN_BLENGTH" );
844- casacore::ROScalarColumn<casacore::Double > maxuv_metres_col (maxuv_metres_tab,
844+ casacore::ROScalarColumn<double > maxuv_metres_col (maxuv_metres_tab,
845845 " MAXUV" );
846846
847- casacore::ROScalarColumn<casacore::Double > min_freq_col (freq_tab, " MIN_FREQ" );
848- casacore::ROScalarColumn<casacore::Double > max_freq_col (freq_tab, " MAX_FREQ" );
849- casacore::ROScalarColumn<casacore::Double > ref_freq_col (freq_tab, " REF_FREQ" );
847+ casacore::ROScalarColumn<double > min_freq_col (freq_tab, " MIN_FREQ" );
848+ casacore::ROScalarColumn<double > max_freq_col (freq_tab, " MAX_FREQ" );
849+ casacore::ROScalarColumn<double > ref_freq_col (freq_tab, " REF_FREQ" );
850850
851851 data->nantennas = antenna_tab.nrow ();
852852 data->nbaselines = (data->nantennas ) * (data->nantennas - 1 ) / 2 ;
@@ -859,9 +859,9 @@ __host__ void readMS(const char* MS_name,
859859
860860 float max_wavelength = freq_to_wavelength (data->min_freq );
861861
862- casacore::ROArrayColumn<casacore::Double > dishposition_col (antenna_tab,
862+ casacore::ROArrayColumn<double > dishposition_col (antenna_tab,
863863 " POSITION" );
864- casacore::ROScalarColumn<casacore::Double > dishdiameter_col (antenna_tab,
864+ casacore::ROScalarColumn<double > dishdiameter_col (antenna_tab,
865865 " DISH_DIAMETER" );
866866 casacore::ROScalarColumn<casacore::String> dishname_col (antenna_tab, " NAME" );
867867 casacore::ROScalarColumn<casacore::String> dishstation_col (antenna_tab,
@@ -934,7 +934,7 @@ __host__ void readMS(const char* MS_name,
934934
935935 data->n_internal_frequencies = spectral_window_tab.nrow ();
936936
937- casacore::ROArrayColumn<casacore::Float > chan_freq_col (spectral_window_tab,
937+ casacore::ROArrayColumn<float > chan_freq_col (spectral_window_tab,
938938 " CHAN_FREQ" );
939939
940940 casacore::ROScalarColumn<casacore::Int64> n_chan_freq (spectral_window_tab,
@@ -1114,7 +1114,8 @@ __host__ void MScopy(const char* in_dir, const char* in_dir_dest) {
11141114__host__ void modelToHost (std::vector<Field>& fields,
11151115 MSData data,
11161116 int num_gpus,
1117- int firstgpu) {
1117+ int firstgpu,
1118+ bool apply_hermitian_conjugation) {
11181119 for (int f = 0 ; f < data.nfields ; f++) {
11191120 for (int i = 0 ; i < data.total_frequencies ; i++) {
11201121 cudaSetDevice ((i % num_gpus) + firstgpu);
@@ -1125,11 +1126,17 @@ __host__ void modelToHost(std::vector<Field>& fields,
11251126 sizeof (cufftComplex) *
11261127 fields[f].numVisibilitiesPerFreqPerStoke [i][s],
11271128 cudaMemcpyDeviceToHost));
1128- for (int j = 0 ; j < fields[f].numVisibilitiesPerFreqPerStoke [i][s];
1129- j++) {
1130- if (fields[f].visibilities [i][s].uvw [j].x > 0 ) {
1131- fields[f].visibilities [i][s].Vm [j] =
1132- cuConjf (fields[f].visibilities [i][s].Vm [j]);
1129+
1130+ // Apply conjugation only if Hermitian symmetry was applied to coordinates
1131+ // (e.g., via hermitianSymmetry kernel). If degriddingGPU was used, it already
1132+ // handles Hermitian symmetry internally, so no conjugation needed here.
1133+ if (apply_hermitian_conjugation) {
1134+ for (int j = 0 ; j < fields[f].numVisibilitiesPerFreqPerStoke [i][s];
1135+ j++) {
1136+ if (fields[f].visibilities [i][s].uvw [j].x > 0 ) {
1137+ fields[f].visibilities [i][s].Vm [j] =
1138+ cuConjf (fields[f].visibilities [i][s].Vm [j]);
1139+ }
11331140 }
11341141 }
11351142 }
0 commit comments