//# AsdmIndex.cc: Index for the ASDM Storage Manager //# Copyright (C) 2012 //# Associated Universities, Inc. Washington DC, USA. //# (c) European Southern Observatory, 2012 //# Copyright by ESO (in the framework of the ALMA collaboration) //# //# 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 receied 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: AsdmColumn.h 19324 2011-11-21 07:29:55Z diepen $ //# Includes #include <asdmstman/AsdmIndex.h> #include <casacore/tables/DataMan/DataManError.h> #include <casacore/casa/IO/AipsIO.h> using namespace casacore; namespace casa { uInt AsdmIndex::dataSize() const { int polSize; switch (dataType) { case 0: //polSize = 2*2*nPol; polSize = 2*2; // cross complex short break; case 1: //polSize = 2*4*nPol; polSize = 2*4; // cross complex int break; case 3: //polSize = 2*4*nPol; polSize = 2*4; // cross complex float break; case 10: // For autocorr, the nr of pol values is special (see getAuto). /* if (nPol == 3) { polSize = 4*4; } else if (nPol == 4) { polSize = 4*6; } else { polSize = 4*nPol; } */ polSize = 4; break; default: throw DataManError ("AsdmStMan: unknown datatype " + String::toString(dataType)); } return nBl * stepBl * polSize; } AipsIO& operator<< (AipsIO& os, const AsdmIndex& ix) { // This is version 1 of the index. os << Short(1) << ix.dataType << ix.fileNr << ix.nBl << ix.nSpw << ix.nChan << ix.nPol << ix.stepBl << ix.iSpw << ix.row << ix.fileOffset << ix.blockOffset; os.put (ix.scaleFactors); return os; } AipsIO& operator>> (AipsIO& os, AsdmIndex& ix) { Short version; os >> version >> ix.dataType >> ix.fileNr; os >> ix.nBl >> ix.nSpw >> ix.nChan >> ix.nPol >> ix.stepBl >> ix.iSpw >> ix.row >> ix.fileOffset >> ix.blockOffset; os.get (ix.scaleFactors); return os; } std::ostream& operator<<(std::ostream& os, const AsdmIndex& ix) { cout << Short(1) <<":" << ix.dataType << ":" << ix.fileNr << ":" << ix.nBl << ":" << ix.nSpw << ":" << ix.nChan << ":" << ix.nPol << ":" << ix.stepBl << ":" << ix.iSpw << ":" << ix.row << ":" << ix.fileOffset << ":" << ix.blockOffset; cout << ":"; for (unsigned int i = 0; i < ix.scaleFactors.size(); i++) cout << ix.scaleFactors[i] << " "; return os; } } //# end namespace