uk.ac.diamond.scisoft.ncd.core.data.DataSliceIdentifiers.java Source code

Java tutorial

Introduction

Here is the source code for uk.ac.diamond.scisoft.ncd.core.data.DataSliceIdentifiers.java

Source

/*
 * Copyright 2012 Diamond Light Source Ltd.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package uk.ac.diamond.scisoft.ncd.core.data;

import java.util.Arrays;

import org.apache.commons.beanutils.ConvertUtils;

import ncsa.hdf.hdf5lib.H5;
import ncsa.hdf.hdf5lib.exceptions.HDF5LibraryException;

public class DataSliceIdentifiers {

    public int datagroup_id = -1;
    public int dataset_id = -1;
    public int dataspace_id = -1;
    public int dataclass_id = -1;
    public int datatype_id = -1;
    public int datasize_id = -1;
    public long[] start, stride, count, block;

    public DataSliceIdentifiers() {
        super();
    }

    public DataSliceIdentifiers(DataSliceIdentifiers ids) {
        super();
        if (ids != null) {
            this.datagroup_id = ids.datagroup_id;
            this.dataset_id = ids.dataset_id;
            this.dataspace_id = ids.dataspace_id;
            this.dataclass_id = ids.dataclass_id;
            this.datatype_id = ids.datatype_id;
            this.datasize_id = ids.datasize_id;
            if (ids.start != null) {
                this.start = Arrays.copyOf(ids.start, ids.start.length);
            }
            if (ids.stride != null) {
                this.stride = Arrays.copyOf(ids.stride, ids.stride.length);
            }
            if (ids.count != null) {
                this.count = Arrays.copyOf(ids.count, ids.count.length);
            }
            if (ids.block != null) {
                this.block = Arrays.copyOf(ids.block, ids.block.length);
            }
        }
    }

    public void setIDs(int datagroup_id, int dataset_id) throws HDF5LibraryException {
        this.datagroup_id = datagroup_id;
        this.dataset_id = dataset_id;
        if (dataset_id != -1) {
            dataspace_id = H5.H5Dget_space(dataset_id);
            datatype_id = H5.H5Dget_type(dataset_id);
            dataclass_id = H5.H5Tget_class(datatype_id);
            datasize_id = H5.H5Tget_size(datatype_id);
        }
    }

    public void setSlice(SliceSettings slice) {
        long[] frames = slice.getFrames();
        long[] start_pos = (long[]) ConvertUtils.convert(slice.getStart(), long[].class);
        int sliceDim = slice.getSliceDim();
        int sliceSize = slice.getSliceSize();

        long[] start_data = Arrays.copyOf(start_pos, frames.length);

        long[] block_data = Arrays.copyOf(frames, frames.length);
        Arrays.fill(block_data, 0, slice.getSliceDim(), 1);
        block_data[sliceDim] = Math.min(frames[sliceDim] - start_pos[sliceDim], sliceSize);

        long[] count_data = new long[frames.length];
        Arrays.fill(count_data, 1);

        setSlice(start_data, block_data, count_data, block_data);
    }

    public void setSlice(long[] start, long[] stride, long[] count, long[] block) {
        this.start = Arrays.copyOf(start, start.length);
        this.stride = Arrays.copyOf(stride, stride.length);
        this.count = Arrays.copyOf(count, count.length);
        this.block = Arrays.copyOf(block, block.length);
    }
}