//# TimeVarVJMCol.h: TimeVarVisJones cal_main table column access
//# Copyright (C) 1996,1997,1998,2001,2003
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be adressed as follows:
//#        Internet email: aips2-request@nrao.edu.
//#        Postal address: AIPS++ Project Office
//#                        National Radio Astronomy Observatory
//#                        520 Edgemont Road
//#                        Charlottesville, VA 22903-2475 USA
//#
//#
//# $Id$

#ifndef CALIBRATION_TIMEVARVJMCOL_H
#define CALIBRATION_TIMEVARVJMCOL_H

#include <synthesis/CalTables/VisJonesMCol.h>
#include <synthesis/CalTables/TimeVarVJTable.h>

namespace casa { //# NAMESPACE CASA - BEGIN

// <summary> 
// ROTimeVarVisJonesMCol: Read-only TimeVarVisJones cal_main column access
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="" tests="" demos="">

// <prerequisite>
//   <li> <linkto class="ROCalMainColumns">ROCalMainColumns</linkto> module
//   <li> <linkto class="ROVisJonesMCol">ROVisJonesMCol</linkto> module
// </prerequisite>
//
// <etymology>
// From "read-only","time-variable visibility Jones","cal main" and "columns".
// </etymology>
//
// <synopsis>
// The ROTimeVarVisJonesMCol class allows read-only access to columns in the
// TimeVarVisJones main calibration table. Specializations for solvable 
// VisJones calibration table column access are provided through inheritance.
// </etymology>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
// Encapsulate read-only access to TVVJ calibration table columns.
// </motivation>
//
// <todo asof="01/07/01">
// (i) Deal with non-standard columns.
// </todo>

class ROTimeVarVisJonesMCol : public ROVisJonesMCol
{
 public:
  // Construct from a calibration table
  ROTimeVarVisJonesMCol (const TimeVarVisJonesTable& tvvjTable);

  // Default destructor
  virtual ~ROTimeVarVisJonesMCol() {};

 protected:
  // Prohibit public use of the null constructor, which
  // does not produce a usable object.
  ROTimeVarVisJonesMCol() {};

 private:
  // Prohibit copy constructor and assignment operator 
  ROTimeVarVisJonesMCol (const ROTimeVarVisJonesMCol&);
  ROTimeVarVisJonesMCol& operator= (const ROTimeVarVisJonesMCol&);
};

// <summary> 
// TimeVarVisJonesMCol: RW TimeVarVisJones cal_main column access
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="" tests="" demos="">

// <prerequisite>
//   <li> <linkto class="CalMainColumns">CalMainColumns</linkto> module
//   <li> <linkto class="VisJonesMCol">VisJonesMCol</linkto> module
// </prerequisite>
//
// <etymology>
// From "time-variable visibility Jones","cal main table" and "columns".
// </etymology>
//
// <synopsis>
// The TimeVarVisJonesMCol class allows read-write access to columns in the
// TimeVarVisJones main calibration table. Specializations for solvable 
// VisJones calibration table types are provided through inheritance.
// </etymology>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
// Encapsulate read-write access to TVVJ calibration table columns.
// </motivation>
//
// <todo asof="01/07/01">
// (i) Deal with non-standard columns.
// </todo>

class TimeVarVisJonesMCol : public VisJonesMCol
{
 public:
  // Construct from a calibration table
  TimeVarVisJonesMCol (TimeVarVisJonesTable& tvvjTable);

  // Default destructor
  virtual ~TimeVarVisJonesMCol() {};

 protected:
  // Prohibit public use of the null constructor, which
  // does not produce a usable object.
  TimeVarVisJonesMCol() {};

 private:
  // Prohibit copy constructor and assignment operator 
  TimeVarVisJonesMCol (const TimeVarVisJonesMCol&);
  TimeVarVisJonesMCol& operator= (const TimeVarVisJonesMCol&);
};

// <summary> 
// ROPJonesMCol: Read-only PJones cal_main column access
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="" tests="" demos="">

// <prerequisite>
//  <li> <linkto class="ROCalMainColumns">ROCalMainColumns</linkto> module
//  <li> <linkto class="ROVisJonesMCol">ROVisJonesMCol</linkto> module
// </prerequisite>
//
// <etymology>
// From "read-only","PJones","cal main" and "columns".
// </etymology>
//
// <synopsis>
// The ROPJonesMCol class allows read-only access to columns in the
// PJones main calibration table. PJones matrices are used to store
// parallactic angle information in the Measurement Equation formalism.
// </etymology>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
// Encapsulate read-only access to PJones calibration table columns.
// </motivation>
//
// <todo asof="01/07/01">
// (i) Deal with non-standard columns.
// </todo>

class ROPJonesMCol : public ROTimeVarVisJonesMCol
{
 public:
  // Construct from a calibration table
  ROPJonesMCol (const PJonesTable& pjTable);

  // Default destructor
  virtual ~ROPJonesMCol() {};

 protected:
  // Prohibit public use of the null constructor, which
  // does not produce a usable object.
  ROPJonesMCol() {};

 private:
  // Prohibit copy constructor and assignment operator 
  ROPJonesMCol (const ROPJonesMCol&);
  ROPJonesMCol& operator= (const ROPJonesMCol&);
};

// <summary> 
// PJonesMCol: RW PJones cal_main column access
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="" tests="" demos="">

// <prerequisite>
//   <li> <linkto class="CalMainColumns">CalMainColumns</linkto> module
//   <li> <linkto class="VisJonesMCol">VisJonesMCol</linkto> module
// </prerequisite>
//
// <etymology>
// From "PJones","cal main table" and "columns".
// </etymology>
//
// <synopsis>
// The PJonesMCol class allows read-write access to columns in the
// PJones main calibration table. PJones matrices are used to store
// parallactic angle information in the Measurement Equation formalism.
// </etymology>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
// Encapsulate read-write access to PJones calibration table columns.
// </motivation>
//
// <todo asof="01/07/01">
// (i) Deal with non-standard columns.
// </todo>

class PJonesMCol : public TimeVarVisJonesMCol
{
 public:
  // Construct from a calibration table
  PJonesMCol (PJonesTable& pjTable);

  // Default destructor
  virtual ~PJonesMCol() {};

 protected:
  // Prohibit public use of the null constructor, which
  // does not produce a usable object.
  PJonesMCol() {};

 private:
  // Prohibit copy constructor and assignment operator 
  PJonesMCol (const PJonesMCol&);
  PJonesMCol& operator= (const PJonesMCol&);
};

// <summary> 
// ROCJonesMCol: Read-only CJones cal_main column access
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="" tests="" demos="">

// <prerequisite>
//  <li> <linkto class="ROCalMainColumns">ROCalMainColumns</linkto> module
//  <li> <linkto class="ROVisJonesMCol">ROVisJonesMCol</linkto> module
// </prerequisite>
//
// <etymology>
// From "read-only","CJones","cal main" and "columns".
// </etymology>
//
// <synopsis>
// The ROCJonesMCol class allows read-only access to columns in the
// CJones main calibration table. CJones matrices are used to store
// polarization configuration information in the Measurement Equation 
// formalism.
// </etymology>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
// Encapsulate read-only access to CJones calibration table columns.
// </motivation>
//
// <todo asof="01/07/01">
// (i) Deal with non-standard columns.
// </todo>

class ROCJonesMCol : public ROTimeVarVisJonesMCol
{
 public:
  // Construct from a calibration table
  ROCJonesMCol (const CJonesTable& cjTable);

  // Default destructor
  virtual ~ROCJonesMCol() {};

 protected:
  // Prohibit public use of the null constructor, which
  // does not produce a usable object.
  ROCJonesMCol() {};

 private:
  // Prohibit copy constructor and assignment operator 
  ROCJonesMCol (const ROCJonesMCol&);
  ROCJonesMCol& operator= (const ROCJonesMCol&);
};

// <summary> 
// CJonesMCol: RW CJones cal_main column access
// </summary>

// <use visibility=export>

// <reviewed reviewer="" date="" tests="" demos="">

// <prerequisite>
//   <li> <linkto class="CalMainColumns">CalMainColumns</linkto> module
//   <li> <linkto class="VisJonesMCol">VisJonesMCol</linkto> module
// </prerequisite>
//
// <etymology>
// From "CJones","cal main table" and "columns".
// </etymology>
//
// <synopsis>
// The CJonesMCol class allows read-write access to columns in the
// CJones main calibration table. CJones matrices are used to store
// polarization configuration information in the Measurement 
// Equation formalism.
// </etymology>
//
// <example>
// <srcblock>
// </srcblock>
// </example>
//
// <motivation>
// Encapsulate read-write access to CJones calibration table columns.
// </motivation>
//
// <todo asof="01/07/01">
// (i) Deal with non-standard columns.
// </todo>

class CJonesMCol : public TimeVarVisJonesMCol
{
 public:
  // Construct from a calibration table
  CJonesMCol (CJonesTable& cjTable);

  // Default destructor
  virtual ~CJonesMCol() {};

 protected:
  // Prohibit public use of the null constructor, which
  // does not produce a usable object.
  CJonesMCol() {};

 private:
  // Prohibit copy constructor and assignment operator 
  CJonesMCol (const CJonesMCol&);
  CJonesMCol& operator= (const CJonesMCol&);
};


} //# NAMESPACE CASA - END

#endif