    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         * @param rank to set
    026         */
    027        void initialize(int rank);
    028
    029        /**
    030         * Get axis datasets
    031         * @return all axis datasets, any nulls represent default integer indexes,
    032         * each axis is the main specified axis. i.e the result of getAxis(n)[0]
    033         */
    034        public ILazyDataset[] getAxes();
    035
    036        /**
    037         * Get all axis datasets for the given dimension
    038         * @param axisDim dimension (n.b. this is zero-based)
    039         * @return axis datasets, null represent default integer indexes, the order is in inverse importance.
    040         */
    041        public ILazyDataset[] getAxis(int axisDim);
    042
    043        /**
    044         * Set axis datasets for given dimension. These datasets must be one dimensional or match rank
    045         * with the associating dataset
    046         * @param axisDim dimension (n.b. this is zero-based)
    047         * @param axisData to set
    048         */
    049        public void setAxis(int axisDim, ILazyDataset... axisData);
    050
    051        /**
    052         * Add axis data to given dimension. This dataset must be one dimensional or match rank
    053         * with the associating dataset
    054         * @param axisDim dimension (n.b. this is zero-based)
    055         * @param axisData dataset for axis
    056         */
    057        public void addAxis(int axisDim, ILazyDataset axisData);
    058
    059        /**
    060         * Add axis data to given dimension. This dataset must be one dimensional or match rank
    061         * with the associating dataset
    062         * @param primaryAxisDim dimension (n.b. this is zero-based)
    063         * @param axisData dataset for axis
    064         * @param dimMapping indicates where each axis dimension maps to in the dataset dimensions
    065         */
    066        public void addAxis(int primaryAxisDim, ILazyDataset axisData, int... dimMapping);
    067
    068        /**
    069         * Refresh with given shape
    070         * @param shape to set
    071         * @return new shape
    072         */
    073        int[] refresh(int[] shape);
    074}