#include <casacore/casa/Logging/LogIO.h>
#include <msvis/MSVis/MSUVWGenerator.h>
#include <casacore/measures/Measures/MEpoch.h>
#include <casacore/measures/Measures/MFrequency.h>
#include <casacore/measures/Measures/MPosition.h>
#include <casacore/ms/MeasurementSets/MSColumns.h>
#include <casacore/ms/MeasurementSets/MSAntennaColumns.h>
#include <casacore/measures/Measures/MCBaseline.h>
#include <casacore/casa/Utilities/GenSort.h>
using namespace casacore;
MSUVWGenerator::MSUVWGenerator(MSColumns &msc_ref, const MBaseline::Types bltype,
bl_csys_p(MBaseline::Ref(bltype)),
antColumns_p(msc_p.antenna()),
antPositions_p(antColumns_p.positionMeas()),
antOffset_p(antColumns_p.offsetMeas()),
refpos_p(antPositions_p(0)),
feedOffset_p(msc_p.feed().positionMeas())
MBaseline::getType(refposref_p,
MPosition::showType(refpos_p.getRef().getType()));
MSUVWGenerator::~MSUVWGenerator(){
void MSUVWGenerator::fill_bl_an(Vector<MVBaseline>& bl_an_p)
nant_p = antPositions_p.table().nrow();
logSink() << LogIO::DEBUG1 << "nant_p: " << nant_p << LogIO::POST;
Double max_baseline = -1.0;
const ScalarColumn<Double>& antDiams = antColumns_p.dishDiameter();
Double smallestDiam = antDiams(0);
Double secondSmallestDiam = antDiams(0);
for(uInt an = 0; an < nant_p; ++an){
bl_an_p[an] = MVBaseline(refpos_p.getValue(), antPositions_p(an).getValue());
Vector<Double> bluvw(bl_an_p[an].getValue());
bl_len = fabs(bluvw[0]) + fabs(bluvw[1]) + fabs(bluvw[2]);
if(bl_len > max_baseline)
if(antDiams(an) < secondSmallestDiam){
if(antDiams(an) < smallestDiam){
secondSmallestDiam = smallestDiam;
smallestDiam = antDiams(an);
secondSmallestDiam = antDiams(an);
timeRes_p = 0.0025 * 24.0 * 3600.0 / (6.283 * 2.44) *
sqrt(smallestDiam * secondSmallestDiam) / max_baseline;