All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ncsa.hdf.object.fits.FitsDataset Maven / Gradle / Ivy

The newest version!
/*****************************************************************************
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of the HDF Java Products distribution.                  *
 * The full copyright notice, including terms governing use, modification,   *
 * and redistribution, is contained in the files COPYING and Copyright.html. *
 * COPYING can be found at the root of the source code distribution tree.    *
 * Or, see http://hdfgroup.org/products/hdf-java/doc/Copyright.html.         *
 * If you do not have access to either file, you may request a copy from     *
 * [email protected].                                                        *
 ****************************************************************************/

package ncsa.hdf.object.fits;

import java.lang.reflect.Array;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import ncsa.hdf.object.Attribute;
import ncsa.hdf.object.Dataset;
import ncsa.hdf.object.Datatype;
import ncsa.hdf.object.FileFormat;
import ncsa.hdf.object.Group;
import ncsa.hdf.object.HObject;
import ncsa.hdf.object.ScalarDS;
import nom.tam.fits.BasicHDU;
import nom.tam.fits.Header;
import nom.tam.fits.HeaderCard;

/**
 * FitsDataset describes an multi-dimension array of HDF5 scalar or atomic data
 * types, such as byte, int, short, long, float, double and string,
 * and operations performed on the scalar dataset
 * 

* The library predefines a modest number of datatypes. For details, read * * The Datatype Interface (H5T) *

* @version 1.1 9/4/2007 * @author Peter X. Cao */ public class FitsDataset extends ScalarDS { private static final long serialVersionUID = 3944770379558335171L; /** * The list of attributes of this data object. Members of the list are * instance of Attribute. */ private List attributeList; private BasicHDU nativeDataset; /** * Constructs an FitsDataset object with specific netcdf variable. *

* @param fileFormat the netcdf file. * @param ncDataset the netcdf variable. * @param oid the unique identifier for this dataset. */ public FitsDataset( FileFormat fileFormat, BasicHDU hdu, String dName, long[] oid) { super (fileFormat, dName, HObject.separator, oid); unsignedConverted = false; nativeDataset = hdu; } /* * (non-Javadoc) * @see ncsa.hdf.object.DataFormat#hasAttribute() */ public boolean hasAttribute () { return false; } /* * (non-Javadoc) * @see ncsa.hdf.object.Dataset#copy(ncsa.hdf.object.Group, java.lang.String, long[], java.lang.Object) */ @Override public Dataset copy(Group pgroup, String dstName, long[] dims, Object buff) throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } /* * (non-Javadoc) * @see ncsa.hdf.object.Dataset#readBytes() */ @Override public byte[] readBytes() throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } /* * (non-Javadoc) * @see ncsa.hdf.object.Dataset#read() */ @Override public Object read() throws Exception { Object theData = null; Object fitsData = null; if (nativeDataset == null) { return null; } try { fitsData = nativeDataset.getData().getData(); } catch (Exception ex) { throw new UnsupportedOperationException("This implementation only supports integer and float dataset. " + "It may not work for other datatypes. \n"+ex); } int n = get1DLength(fitsData); theData = FitsDatatype.allocateArray(nativeDataset.getBitPix(), n); to1Darray(fitsData, theData, 0); return theData; } /* * (non-Javadoc) * @see ncsa.hdf.object.Dataset#write(java.lang.Object) */ @Override public void write(Object buf) throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } /* * (non-Javadoc) * @see ncsa.hdf.object.DataFormat#getMetadata() */ public List getMetadata() throws Exception { if (attributeList != null) { return attributeList; } if (nativeDataset == null) { return null; } Header header = nativeDataset.getHeader(); if (header == null) { return null; } attributeList = new Vector(); HeaderCard hc = null; Iterator it = header.iterator(); Attribute attr = null; Datatype dtype = new FitsDatatype(Datatype.CLASS_STRING, 80, 0, 0); long[] dims = {1}; String value = null; while (it.hasNext()) { value = ""; hc = (HeaderCard)it.next(); attr = new Attribute(hc.getKey(), dtype, dims); String tvalue = hc.getValue(); if (tvalue != null) { value += tvalue; } tvalue = hc.getComment(); if (tvalue != null) { value += " / " + tvalue; } attr.setValue(value); attributeList.add(attr); } return attributeList; } /* * (non-Javadoc) * @see ncsa.hdf.object.DataFormat#writeMetadata(java.lang.Object) */ public void writeMetadata(Object info) throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } /* * (non-Javadoc) * @see ncsa.hdf.object.DataFormat#removeMetadata(java.lang.Object) */ public void removeMetadata(Object info) throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } /* * (non-Javadoc) * @see ncsa.hdf.object.HObject#open() */ @Override public int open() { return -1;} /* * (non-Javadoc) * @see ncsa.hdf.object.HObject#close(int) */ @Override public void close(int did) {} /* * (non-Javadoc) * @see ncsa.hdf.object.Dataset#init() */ @Override public void init() { if (nativeDataset == null) { return; } if (rank>0) { return; // already called. Initialize only once } int[] axes= null; try { axes = nativeDataset.getAxes(); } catch (Exception ex) {} if (axes == null) { return; } rank = axes.length; if (rank == 0) { // a scalar data point rank = 1; dims = new long[1]; dims[0] = 1; } else { dims = new long[rank]; for (int i=0; i 2) { selectedIndex[0] = 0; selectedIndex[1] = 1; selectedIndex[2] = 2; selectedDims[0] = dims[0]; selectedDims[1] = dims[1]; } if ((rank > 1) && isText) { selectedDims[1] = 1; } } /* * (non-Javadoc) * @see ncsa.hdf.object.ScalarDS#getPalette() */ @Override public byte[][] getPalette() { if (palette == null) { palette = readPalette(0); } return palette; } /* * (non-Javadoc) * @see ncsa.hdf.object.ScalarDS#readPalette(int) */ @Override public byte[][] readPalette(int idx) { return null; } /** * Creates a new dataset. * @param name the name of the dataset to create. * @param pgroup the parent group of the new dataset. * @param type the datatype of the dataset. * @param dims the dimension size of the dataset. * @param maxdims the max dimension size of the dataset. * @param chunk the chunk size of the dataset. * @param gzip the level of the gzip compression. * @param data the array of data values. * @return the new dataset if successful. Otherwise returns null. */ public static FitsDataset create( String name, Group pgroup, Datatype type, long[] dims, long[] maxdims, long[] chunks, int gzip, Object data) throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } /* * (non-Javadoc) * @see ncsa.hdf.object.ScalarDS#getPaletteRefs() */ @Override public byte[] getPaletteRefs() { return null; } /* * (non-Javadoc) * @see ncsa.hdf.object.Dataset#getDatatype() */ @Override public Datatype getDatatype() { if (datatype == null) { try {datatype = new FitsDatatype(nativeDataset.getBitPix());} catch (Exception ex) {} } return datatype; } /* * (non-Javadoc) * @see ncsa.hdf.object.HObject#setName(java.lang.String) */ @Override public void setName (String newName) throws Exception { // not supported throw new UnsupportedOperationException("Unsupported operation for NetCDF."); } private int get1DLength(Object data) throws Exception { if (!data.getClass().isArray()) { return 1; } int len = Array.getLength(data); int total = 0; for (int i = 0; i < len; i++) { total += get1DLength(Array.get(data, i)); } return total; } /** copy multi-dimension array of fits data into 1D array */ private int to1Darray(Object dataIn, Object dataOut, int offset) throws Exception { Class component = dataIn.getClass().getComponentType(); if (component == null) { return offset; } int size = Array.getLength(dataIn); if (!component.isArray()) { System.arraycopy(dataIn, 0, dataOut, offset, size); return offset+size; } for (int i = size - 1; i >= 0; i--) { offset = to1Darray(Array.get(dataIn, i), dataOut, offset); } return offset; } //Implementing DataFormat public List getMetadata(int... attrPropList) throws Exception { throw new UnsupportedOperationException("getMetadata(int... attrPropList) is not supported"); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy