PURIFY
Next-generation radio interferometric imaging
Functions
purify::casa::details Namespace Reference

Functions

template<class C >
Matrix< C > get_taql_array (::casacore::TaQLResult const &taql)
 
template<class C >
Matrix< C > get_taql_scalar (::casacore::TaQLResult const &taql)
 
template<class T >
Matrix< T > table_column (::casacore::Table const &table, std::string const &column, std::string const &filter, std::integral_constant< bool, true > const &)
 
template<class T >
Matrix< T > table_column (::casacore::Table const &table, std::string const &column, std::string const &filter, std::integral_constant< bool, false > const &)
 

Function Documentation

◆ get_taql_array()

template<class C >
Matrix<C> purify::casa::details::get_taql_array ( ::casacore::TaQLResult const &  taql)

Definition at line 110 of file casacore.h.

110  {
111  auto const col = ::casacore::ArrayColumn<C>(taql.table(), "R");
112  auto const data_column = col.getColumn();
113  auto const shape = col.shape(0);
114  auto nsize =
115  std::accumulate(shape.begin(), shape.end(), 1, [](ssize_t a, ssize_t b) { return a * b; });
116  typedef Eigen::Matrix<C, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix;
117  return Matrix::Map(data_column.data(), col.nrow(), nsize);
118 }

◆ get_taql_scalar()

template<class C >
Matrix<C> purify::casa::details::get_taql_scalar ( ::casacore::TaQLResult const &  taql)

Definition at line 120 of file casacore.h.

120  {
121  auto const col = ::casacore::ScalarColumn<C>(taql.table(), "R");
122  auto const data_column = col.getColumn();
123  typedef Eigen::Matrix<C, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> Matrix;
124  return Matrix::Map(data_column.data(), col.nrow(), 1);
125 }

◆ table_column() [1/2]

template<class T >
Matrix<T> purify::casa::details::table_column ( ::casacore::Table const &  table,
std::string const &  column,
std::string const &  filter,
std::integral_constant< bool, false > const &   
)

Definition at line 158 of file casacore.h.

159  {
160  if (table.nrow() == 0) return Matrix<T>::Zero(0, 1);
161  auto const taql_table = ::casacore::tableCommand(
162  "USING STYLE PYTHON SELECT " + column + " as R FROM $1 " + filter, table);
163  auto const vtable = taql_table.table();
164  if (vtable.nrow() == 0) return Matrix<T>(0, 1);
165 
166  switch (vtable.tableDesc().columnDesc("R").trueDataType()) {
167 #define PURIFY_MACRO(NAME, TYPE) \
168  case ::casacore::Tp##NAME: \
169  return details::get_taql_scalar<::casacore::TYPE>(taql_table).template cast<T>();
170  PURIFY_MACRO(Bool, Bool);
171  PURIFY_MACRO(Char, Char);
172  PURIFY_MACRO(UChar, uChar);
173  PURIFY_MACRO(Short, Short);
174  PURIFY_MACRO(UShort, uShort);
175  PURIFY_MACRO(Int, Int);
176  PURIFY_MACRO(UInt, uInt);
177  PURIFY_MACRO(Float, Float);
178  PURIFY_MACRO(Double, Double);
179 #undef PURIFY_MACRO
180 #define PURIFY_MACRO(NAME, TYPE) \
181  case ::casacore::TpArray##NAME: \
182  return details::get_taql_array<::casacore::TYPE>(taql_table).template cast<T>();
183  PURIFY_MACRO(Bool, Bool);
184  PURIFY_MACRO(Char, Char);
185  PURIFY_MACRO(UChar, uChar);
186  PURIFY_MACRO(Short, Short);
187  PURIFY_MACRO(UShort, uShort);
188  PURIFY_MACRO(Int, Int);
189  PURIFY_MACRO(UInt, uInt);
190  PURIFY_MACRO(Float, Float);
191  PURIFY_MACRO(Double, Double);
192 #undef PURIFY_MACRO
193  default:
194  break;
195  }
196 
197  throw std::runtime_error("Array type is not handled");
198  return Matrix<T>::Zero(0, 1);
199 }
#define PURIFY_MACRO(NAME, TYPE)
Definition: casacore.h:251

References PURIFY_MACRO.

◆ table_column() [2/2]

template<class T >
Matrix<T> purify::casa::details::table_column ( ::casacore::Table const &  table,
std::string const &  column,
std::string const &  filter,
std::integral_constant< bool, true > const &   
)

Definition at line 128 of file casacore.h.

129  {
130  if (table.nrow() == 0) return Matrix<T>::Zero(0, 1);
131  auto const taql_table = ::casacore::tableCommand(
132  "USING STYLE PYTHON SELECT " + column + " as R FROM $1 " + filter, table);
133  auto const vtable = taql_table.table();
134  if (vtable.nrow() == 0) return Matrix<T>(0, 1);
135 
136  switch (vtable.tableDesc().columnDesc("R").trueDataType()) {
137 #define PURIFY_MACRO(NAME, TYPE) \
138  case ::casacore::Tp##NAME: \
139  return details::get_taql_scalar<::casacore::TYPE>(taql_table).template cast<T>();
140  PURIFY_MACRO(Complex, Complex);
141  PURIFY_MACRO(DComplex, DComplex);
142 #undef PURIFY_MACRO
143 #define PURIFY_MACRO(NAME, TYPE) \
144  case ::casacore::TpArray##NAME: \
145  return details::get_taql_array<::casacore::TYPE>(taql_table).template cast<T>();
146  PURIFY_MACRO(Complex, Complex);
147  PURIFY_MACRO(DComplex, DComplex);
148 #undef PURIFY_MACRO
149  default:
150  break;
151  }
152 
153  throw std::runtime_error("Array type is not handled");
154  return Matrix<T>::Zero(0, 1);
155 }

References PURIFY_MACRO.