//#--------------------------------------------------------------------------- //# PKSreader.h: Class to read Parkes multibeam data. //#--------------------------------------------------------------------------- //# Copyright (C) 2000-2006 //# 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 addressed 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: PKSreader.h,v 19.11 2006/07/05 05:00:21 mcalabre Exp $ //#--------------------------------------------------------------------------- //# Original: 2000/08/02, Mark Calabretta, ATNF //#--------------------------------------------------------------------------- #ifndef ATNF_PKSREADER_H #define ATNF_PKSREADER_H #include #include #include #include #include // // Class to read Parkes multibeam data. // #include // Open an appropriate PKSreader for a Parkes Multibeam dataset. class PKSreader* getPKSreader( const String name, const Int retry, const Int interpolate, String &format, Vector &beams, Vector &IFs, Vector &nChan, Vector &nPol, Vector &haveXPol, Bool &haveBase, Bool &haveSpectra); // As above, but search a list of directories for it. class PKSreader* getPKSreader( const String name, const Vector directories, const Int retry, const Int interpolate, Int &iDir, String &format, Vector &beams, Vector &IFs, Vector &nChan, Vector &nPol, Vector &haveXPol, Bool &haveBase, Bool &haveSpectra); class PKSreader { public: // Destructor. virtual ~PKSreader() {}; // Open the dataset. virtual Int open( const String inName, Vector &beams, Vector &IFs, Vector &nChan, Vector &nPol, Vector &haveXPol, Bool &haveBase, Bool &haveSpectra) = 0; // Get parameters describing the data. virtual Int getHeader( String &observer, String &project, String &antName, Vector &antPosition, String &obsType, Float &equinox, String &dopplerFrame, Double &mjd, Double &refFreq, Double &bandwidth) = 0; // Get frequency parameters for each IF. virtual Int getFreqInfo( Vector &startFreq, Vector &endFreq) = 0; // Set data selection criteria. Channel numbering is 1-relative, zero or // negative channel numbers are taken to be offsets from the last channel. virtual uInt select( const Vector beamSel, const Vector IFsel, const Vector startChan, const Vector endChan, const Vector refChan, const Bool getSpectra = True, const Bool getXPol = False, const Bool getFeedPos = False) = 0; // Find the range of the data selected in time and position. virtual Int findRange( Int &nRow, Int &nSel, Vector &timeSpan, Matrix &positions) = 0; // Read the next data record. virtual Int read( Int &scanNo, Int &cycleNo, Double &mjd, Double &interval, String &fieldName, String &srcName, Vector &srcDir, Vector &srcPM, Double &srcVel, String &obsType, Int &IFno, Double &refFreq, Double &bandwidth, Double &freqInc, Double &restFreq, Vector &tcal, String &tcalTime, Float &azimuth, Float &elevation, Float &parAngle, Float &focusAxi, Float &focusTan, Float &focusRot, Float &temperature, Float &pressure, Float &humidity, Float &windSpeed, Float &windAz, Int &refBeam, Int &beamNo, Vector &direction, Vector &scanRate, Vector &tsys, Vector &sigma, Vector &calFctr, Matrix &baseLin, Matrix &baseSub, Matrix &spectra, Matrix &flagged, Complex &xCalFctr, Vector &xPol) = 0; // Read the next data record, just the basics. virtual Int read( Int &IFno, Vector &tsys, Vector &calFctr, Matrix &baseLin, Matrix &baseSub, Matrix &spectra, Matrix &flagged) = 0; // Close the input file. virtual void close() = 0; protected: Bool cGetFeedPos, cGetSpectra, cGetXPol; Vector cNChan, cNPol; Vector cHaveXPol; }; #endif