001/*-
002 *******************************************************************************
003 * Copyright (c) 2011, 2016 Diamond Light Source Ltd.
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *    Peter Chang - initial API and implementation and/or initial documentation
011 *******************************************************************************/
012
013package org.eclipse.january.metadata;
014
015import org.eclipse.january.dataset.ILazyDataset;
016
017/**
018 * This metadata describes any axis information associated with a dataset.
019 * Dimension numbers are zero-based, i.e. the first dimension is numbered
020 * zero.
021 */
022public interface AxesMetadata extends MetadataType {
023
024        /**
025         * 
026         * @param rank
027         */
028        void initialize(int rank);
029
030        /**
031         * Get axis datasets
032         * @return all axis datasets, any nulls represent default integer indexes, 
033         * each axis is the main specified axis. i.e the result of getAxis(n)[0]
034         */
035        public ILazyDataset[] getAxes();
036
037        /**
038         * Get all axis datasets for the given dimension
039         * @param axisDim dimension (n.b. this is zero-based)
040         * @return axis datasets, null represent default integer indexes, the order is in inverse importance.
041         */
042        public ILazyDataset[] getAxis(int axisDim);
043
044        /**
045         * Set axis datasets for given dimension. These datasets must be one dimensional or match rank
046         * with the associating dataset
047         * @param axisDim
048         * @param axisData
049         */
050        public void setAxis(int axisDim, ILazyDataset... axisData);
051        
052        /**
053         * Add axis data to given dimension. This dataset must be one dimensional or match rank
054         * with the associating dataset
055         * @param axisDim dimension (n.b. this is zero-based)
056         * @param axisData dataset for axis
057         */
058        public void addAxis(int i, ILazyDataset lazyDataset);
059
060        public void addAxis(int primary, ILazyDataset iLazyDataset, int... axisDims);
061
062        int[] refresh(int[] shape);
063}