<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*-<a name="line.1"></a>
<span class="sourceLineNo">002</span> *******************************************************************************<a name="line.2"></a>
<span class="sourceLineNo">003</span> * Copyright (c) 2011, 2016 Diamond Light Source Ltd.<a name="line.3"></a>
<span class="sourceLineNo">004</span> * All rights reserved. This program and the accompanying materials<a name="line.4"></a>
<span class="sourceLineNo">005</span> * are made available under the terms of the Eclipse Public License v1.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * which accompanies this distribution, and is available at<a name="line.6"></a>
<span class="sourceLineNo">007</span> * http://www.eclipse.org/legal/epl-v10.html<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> * Contributors:<a name="line.9"></a>
<span class="sourceLineNo">010</span> *    Peter Chang - initial API and implementation and/or initial documentation<a name="line.10"></a>
<span class="sourceLineNo">011</span> *******************************************************************************/<a name="line.11"></a>
<span class="sourceLineNo">012</span><a name="line.12"></a>
<span class="sourceLineNo">013</span>package org.eclipse.january.dataset;<a name="line.13"></a>
<span class="sourceLineNo">014</span><a name="line.14"></a>
<span class="sourceLineNo">015</span>import java.io.IOException;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import java.io.Serializable;<a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.lang.annotation.Annotation;<a name="line.17"></a>
<span class="sourceLineNo">018</span>import java.lang.reflect.Field;<a name="line.18"></a>
<span class="sourceLineNo">019</span>import java.util.ArrayList;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.util.Arrays;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.HashMap;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.Map;<a name="line.23"></a>
<span class="sourceLineNo">024</span><a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.eclipse.january.DatasetException;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.eclipse.january.IMonitor;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.eclipse.january.io.ILazyLoader;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.eclipse.january.metadata.MetadataFactory;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.eclipse.january.metadata.MetadataType;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.eclipse.january.metadata.OriginMetadata;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.eclipse.january.metadata.Reshapeable;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.eclipse.january.metadata.Sliceable;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.eclipse.january.metadata.Transposable;<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>public class LazyDataset extends LazyDatasetBase implements Serializable, Cloneable {<a name="line.35"></a>
<span class="sourceLineNo">036</span>        private static final long serialVersionUID = 2467865859867440242L;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>        protected int[]     oShape; // original shape<a name="line.38"></a>
<span class="sourceLineNo">039</span>        protected long      size;   // number of items<a name="line.39"></a>
<span class="sourceLineNo">040</span>        protected int       dtype;  // dataset type<a name="line.40"></a>
<span class="sourceLineNo">041</span>        protected int       isize;  // number of elements per item<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>        protected ILazyLoader loader;<a name="line.43"></a>
<span class="sourceLineNo">044</span>        protected LazyDataset base = null; // used for transpose<a name="line.44"></a>
<span class="sourceLineNo">045</span><a name="line.45"></a>
<span class="sourceLineNo">046</span>        // relative to loader or base<a name="line.46"></a>
<span class="sourceLineNo">047</span>        protected int         prepShape = 0; // prepending and post-pending <a name="line.47"></a>
<span class="sourceLineNo">048</span>        protected int         postShape = 0; // changes to shape<a name="line.48"></a>
<span class="sourceLineNo">049</span>        protected int[]       begSlice = null; // slice begin<a name="line.49"></a>
<span class="sourceLineNo">050</span>        protected int[]       delSlice = null; // slice delta<a name="line.50"></a>
<span class="sourceLineNo">051</span>        protected int[]       map; // transposition map (same length as current shape)<a name="line.51"></a>
<span class="sourceLineNo">052</span>        protected Map&lt;Class&lt;? extends MetadataType&gt;, List&lt;MetadataType&gt;&gt; oMetadata = null;<a name="line.52"></a>
<span class="sourceLineNo">053</span><a name="line.53"></a>
<span class="sourceLineNo">054</span>        /**<a name="line.54"></a>
<span class="sourceLineNo">055</span>         * Create a lazy dataset<a name="line.55"></a>
<span class="sourceLineNo">056</span>         * @param name<a name="line.56"></a>
<span class="sourceLineNo">057</span>         * @param dtype dataset type<a name="line.57"></a>
<span class="sourceLineNo">058</span>         * @param elements<a name="line.58"></a>
<span class="sourceLineNo">059</span>         * @param shape<a name="line.59"></a>
<span class="sourceLineNo">060</span>         * @param loader<a name="line.60"></a>
<span class="sourceLineNo">061</span>         */<a name="line.61"></a>
<span class="sourceLineNo">062</span>        public LazyDataset(String name, int dtype, int elements, int[] shape, ILazyLoader loader) {<a name="line.62"></a>
<span class="sourceLineNo">063</span>                this.name = name;<a name="line.63"></a>
<span class="sourceLineNo">064</span>                this.shape = shape.clone();<a name="line.64"></a>
<span class="sourceLineNo">065</span>                this.oShape = this.shape;<a name="line.65"></a>
<span class="sourceLineNo">066</span>                this.loader = loader;<a name="line.66"></a>
<span class="sourceLineNo">067</span>                this.dtype = dtype;<a name="line.67"></a>
<span class="sourceLineNo">068</span>                this.isize = elements;<a name="line.68"></a>
<span class="sourceLineNo">069</span>                try {<a name="line.69"></a>
<span class="sourceLineNo">070</span>                        size = ShapeUtils.calcLongSize(shape);<a name="line.70"></a>
<span class="sourceLineNo">071</span>                } catch (IllegalArgumentException e) {<a name="line.71"></a>
<span class="sourceLineNo">072</span>                        size = Long.MAX_VALUE; // this indicates that the entire dataset cannot be read in! <a name="line.72"></a>
<span class="sourceLineNo">073</span>                }<a name="line.73"></a>
<span class="sourceLineNo">074</span>        }<a name="line.74"></a>
<span class="sourceLineNo">075</span><a name="line.75"></a>
<span class="sourceLineNo">076</span>        /**<a name="line.76"></a>
<span class="sourceLineNo">077</span>         * Create a lazy dataset<a name="line.77"></a>
<span class="sourceLineNo">078</span>         * @param name<a name="line.78"></a>
<span class="sourceLineNo">079</span>         * @param dtype dataset type<a name="line.79"></a>
<span class="sourceLineNo">080</span>         * @param shape<a name="line.80"></a>
<span class="sourceLineNo">081</span>         * @param loader<a name="line.81"></a>
<span class="sourceLineNo">082</span>         */<a name="line.82"></a>
<span class="sourceLineNo">083</span>        public LazyDataset(String name, int dtype, int[] shape, ILazyLoader loader) {<a name="line.83"></a>
<span class="sourceLineNo">084</span>                this(name, dtype, 1, shape, loader);<a name="line.84"></a>
<span class="sourceLineNo">085</span>        }<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>        /**<a name="line.87"></a>
<span class="sourceLineNo">088</span>         * Create a lazy dataset based on in-memory data (handy for testing)<a name="line.88"></a>
<span class="sourceLineNo">089</span>         * @param dataset<a name="line.89"></a>
<span class="sourceLineNo">090</span>         */<a name="line.90"></a>
<span class="sourceLineNo">091</span>        public static LazyDataset createLazyDataset(final Dataset dataset) {<a name="line.91"></a>
<span class="sourceLineNo">092</span>                return new LazyDataset(dataset.getName(), dataset.getDType(), dataset.getElementsPerItem(), dataset.getShape(),<a name="line.92"></a>
<span class="sourceLineNo">093</span>                new ILazyLoader() {<a name="line.93"></a>
<span class="sourceLineNo">094</span>                        private static final long serialVersionUID = -6725268922780517523L;<a name="line.94"></a>
<span class="sourceLineNo">095</span><a name="line.95"></a>
<span class="sourceLineNo">096</span>                        final Dataset d = dataset;<a name="line.96"></a>
<span class="sourceLineNo">097</span>                        @Override<a name="line.97"></a>
<span class="sourceLineNo">098</span>                        public boolean isFileReadable() {<a name="line.98"></a>
<span class="sourceLineNo">099</span>                                return true;<a name="line.99"></a>
<span class="sourceLineNo">100</span>                        }<a name="line.100"></a>
<span class="sourceLineNo">101</span><a name="line.101"></a>
<span class="sourceLineNo">102</span>                        @Override<a name="line.102"></a>
<span class="sourceLineNo">103</span>                        public Dataset getDataset(IMonitor mon, SliceND slice) throws IOException {<a name="line.103"></a>
<span class="sourceLineNo">104</span>                                return d.getSlice(mon, slice);<a name="line.104"></a>
<span class="sourceLineNo">105</span>                        }<a name="line.105"></a>
<span class="sourceLineNo">106</span>                });<a name="line.106"></a>
<span class="sourceLineNo">107</span>        }<a name="line.107"></a>
<span class="sourceLineNo">108</span><a name="line.108"></a>
<span class="sourceLineNo">109</span>        /**<a name="line.109"></a>
<span class="sourceLineNo">110</span>         * Can return -1 for unknown<a name="line.110"></a>
<span class="sourceLineNo">111</span>         */<a name="line.111"></a>
<span class="sourceLineNo">112</span>        @Override<a name="line.112"></a>
<span class="sourceLineNo">113</span>        public int getDType() {<a name="line.113"></a>
<span class="sourceLineNo">114</span>                return dtype;<a name="line.114"></a>
<span class="sourceLineNo">115</span>        }<a name="line.115"></a>
<span class="sourceLineNo">116</span><a name="line.116"></a>
<span class="sourceLineNo">117</span>        /**<a name="line.117"></a>
<span class="sourceLineNo">118</span>         * Can return -1 for unknown<a name="line.118"></a>
<span class="sourceLineNo">119</span>         */<a name="line.119"></a>
<span class="sourceLineNo">120</span>        @Override<a name="line.120"></a>
<span class="sourceLineNo">121</span>        public int getElementsPerItem() {<a name="line.121"></a>
<span class="sourceLineNo">122</span>                return isize;<a name="line.122"></a>
<span class="sourceLineNo">123</span>        }<a name="line.123"></a>
<span class="sourceLineNo">124</span><a name="line.124"></a>
<span class="sourceLineNo">125</span>        @Override<a name="line.125"></a>
<span class="sourceLineNo">126</span>        public int getSize() {<a name="line.126"></a>
<span class="sourceLineNo">127</span>                return (int) size;<a name="line.127"></a>
<span class="sourceLineNo">128</span>        }<a name="line.128"></a>
<span class="sourceLineNo">129</span><a name="line.129"></a>
<span class="sourceLineNo">130</span>        @Override<a name="line.130"></a>
<span class="sourceLineNo">131</span>        public String toString() {<a name="line.131"></a>
<span class="sourceLineNo">132</span>                StringBuilder out = new StringBuilder();<a name="line.132"></a>
<span class="sourceLineNo">133</span><a name="line.133"></a>
<span class="sourceLineNo">134</span>                if (name != null &amp;&amp; name.length() &gt; 0) {<a name="line.134"></a>
<span class="sourceLineNo">135</span>                        out.append("Lazy dataset '");<a name="line.135"></a>
<span class="sourceLineNo">136</span>                        out.append(name);<a name="line.136"></a>
<span class="sourceLineNo">137</span>                        out.append("' has shape [");<a name="line.137"></a>
<span class="sourceLineNo">138</span>                } else {<a name="line.138"></a>
<span class="sourceLineNo">139</span>                        out.append("Lazy dataset shape is [");<a name="line.139"></a>
<span class="sourceLineNo">140</span>                }<a name="line.140"></a>
<span class="sourceLineNo">141</span>                int rank = shape == null ? 0 : shape.length;<a name="line.141"></a>
<span class="sourceLineNo">142</span><a name="line.142"></a>
<span class="sourceLineNo">143</span>                if (rank &gt; 0 &amp;&amp; shape[0] &gt;= 0) {<a name="line.143"></a>
<span class="sourceLineNo">144</span>                        out.append(shape[0]);<a name="line.144"></a>
<span class="sourceLineNo">145</span>                }<a name="line.145"></a>
<span class="sourceLineNo">146</span>                for (int i = 1; i &lt; rank; i++) {<a name="line.146"></a>
<span class="sourceLineNo">147</span>                        out.append(", " + shape[i]);<a name="line.147"></a>
<span class="sourceLineNo">148</span>                }<a name="line.148"></a>
<span class="sourceLineNo">149</span>                out.append(']');<a name="line.149"></a>
<span class="sourceLineNo">150</span><a name="line.150"></a>
<span class="sourceLineNo">151</span>                return out.toString();<a name="line.151"></a>
<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
<span class="sourceLineNo">153</span><a name="line.153"></a>
<span class="sourceLineNo">154</span>        @Override<a name="line.154"></a>
<span class="sourceLineNo">155</span>        public boolean equals(Object obj) {<a name="line.155"></a>
<span class="sourceLineNo">156</span>                if (!super.equals(obj))<a name="line.156"></a>
<span class="sourceLineNo">157</span>                        return false;<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>                LazyDataset other = (LazyDataset) obj;<a name="line.159"></a>
<span class="sourceLineNo">160</span>                if (dtype != other.dtype) {<a name="line.160"></a>
<span class="sourceLineNo">161</span>                        return false;<a name="line.161"></a>
<span class="sourceLineNo">162</span>                }<a name="line.162"></a>
<span class="sourceLineNo">163</span>                if (isize != other.isize) {<a name="line.163"></a>
<span class="sourceLineNo">164</span>                        return false;<a name="line.164"></a>
<span class="sourceLineNo">165</span>                }<a name="line.165"></a>
<span class="sourceLineNo">166</span><a name="line.166"></a>
<span class="sourceLineNo">167</span>                if (!Arrays.equals(shape, other.shape)) {<a name="line.167"></a>
<span class="sourceLineNo">168</span>                        return false;<a name="line.168"></a>
<span class="sourceLineNo">169</span>                }<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>                if (loader != other.loader) {<a name="line.171"></a>
<span class="sourceLineNo">172</span>                        return false;<a name="line.172"></a>
<span class="sourceLineNo">173</span>                }<a name="line.173"></a>
<span class="sourceLineNo">174</span><a name="line.174"></a>
<span class="sourceLineNo">175</span>                if (prepShape != other.prepShape) {<a name="line.175"></a>
<span class="sourceLineNo">176</span>                        return false;<a name="line.176"></a>
<span class="sourceLineNo">177</span>                }<a name="line.177"></a>
<span class="sourceLineNo">178</span><a name="line.178"></a>
<span class="sourceLineNo">179</span>                if (postShape != other.postShape) {<a name="line.179"></a>
<span class="sourceLineNo">180</span>                        return false;<a name="line.180"></a>
<span class="sourceLineNo">181</span>                }<a name="line.181"></a>
<span class="sourceLineNo">182</span><a name="line.182"></a>
<span class="sourceLineNo">183</span>                if (!Arrays.equals(begSlice, other.begSlice)) {<a name="line.183"></a>
<span class="sourceLineNo">184</span>                        return false;<a name="line.184"></a>
<span class="sourceLineNo">185</span>                }<a name="line.185"></a>
<span class="sourceLineNo">186</span>                if (!Arrays.equals(delSlice, other.delSlice)) {<a name="line.186"></a>
<span class="sourceLineNo">187</span>                        return false;<a name="line.187"></a>
<span class="sourceLineNo">188</span>                }<a name="line.188"></a>
<span class="sourceLineNo">189</span>                if (!Arrays.equals(map, other.map)) {<a name="line.189"></a>
<span class="sourceLineNo">190</span>                        return false;<a name="line.190"></a>
<span class="sourceLineNo">191</span>                }<a name="line.191"></a>
<span class="sourceLineNo">192</span>                return true;<a name="line.192"></a>
<span class="sourceLineNo">193</span>        }<a name="line.193"></a>
<span class="sourceLineNo">194</span><a name="line.194"></a>
<span class="sourceLineNo">195</span>        @Override<a name="line.195"></a>
<span class="sourceLineNo">196</span>        public LazyDataset clone() {<a name="line.196"></a>
<span class="sourceLineNo">197</span>                LazyDataset ret = new LazyDataset(new String(name), dtype, isize, oShape, loader);<a name="line.197"></a>
<span class="sourceLineNo">198</span>                ret.shape = shape;<a name="line.198"></a>
<span class="sourceLineNo">199</span>                ret.size = size;<a name="line.199"></a>
<span class="sourceLineNo">200</span>                ret.prepShape = prepShape;<a name="line.200"></a>
<span class="sourceLineNo">201</span>                ret.postShape = postShape;<a name="line.201"></a>
<span class="sourceLineNo">202</span>                ret.begSlice = begSlice;<a name="line.202"></a>
<span class="sourceLineNo">203</span>                ret.delSlice = delSlice;<a name="line.203"></a>
<span class="sourceLineNo">204</span>                ret.map = map;<a name="line.204"></a>
<span class="sourceLineNo">205</span>                ret.base = base;<a name="line.205"></a>
<span class="sourceLineNo">206</span>                ret.metadata = copyMetadata();<a name="line.206"></a>
<span class="sourceLineNo">207</span>                ret.oMetadata = oMetadata;<a name="line.207"></a>
<span class="sourceLineNo">208</span>                return ret;<a name="line.208"></a>
<span class="sourceLineNo">209</span>        }<a name="line.209"></a>
<span class="sourceLineNo">210</span><a name="line.210"></a>
<span class="sourceLineNo">211</span>        @Override<a name="line.211"></a>
<span class="sourceLineNo">212</span>        public void setShape(int... shape) {<a name="line.212"></a>
<span class="sourceLineNo">213</span>                setShapeInternal(shape);<a name="line.213"></a>
<span class="sourceLineNo">214</span>        }<a name="line.214"></a>
<span class="sourceLineNo">215</span><a name="line.215"></a>
<span class="sourceLineNo">216</span>        @Override<a name="line.216"></a>
<span class="sourceLineNo">217</span>        public LazyDataset squeezeEnds() {<a name="line.217"></a>
<span class="sourceLineNo">218</span>                setShapeInternal(ShapeUtils.squeezeShape(shape, true));<a name="line.218"></a>
<span class="sourceLineNo">219</span>                return this;<a name="line.219"></a>
<span class="sourceLineNo">220</span>        }<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>        @Override<a name="line.222"></a>
<span class="sourceLineNo">223</span>        public Dataset getSlice(int[] start, int[] stop, int[] step) throws DatasetException {<a name="line.223"></a>
<span class="sourceLineNo">224</span>                return getSlice(null, start, stop, step);<a name="line.224"></a>
<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>        @Override<a name="line.227"></a>
<span class="sourceLineNo">228</span>        public Dataset getSlice(Slice... slice) throws DatasetException {<a name="line.228"></a>
<span class="sourceLineNo">229</span>                if (slice == null || slice.length == 0) {<a name="line.229"></a>
<span class="sourceLineNo">230</span>                        return getSlice(null, new SliceND(shape));<a name="line.230"></a>
<span class="sourceLineNo">231</span>                }<a name="line.231"></a>
<span class="sourceLineNo">232</span>                return getSlice(null, new SliceND(shape, slice));<a name="line.232"></a>
<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
<span class="sourceLineNo">234</span><a name="line.234"></a>
<span class="sourceLineNo">235</span>        @Override<a name="line.235"></a>
<span class="sourceLineNo">236</span>        public Dataset getSlice(SliceND slice) throws DatasetException {<a name="line.236"></a>
<span class="sourceLineNo">237</span>                return getSlice(null, slice);<a name="line.237"></a>
<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
<span class="sourceLineNo">239</span><a name="line.239"></a>
<span class="sourceLineNo">240</span>        @Override<a name="line.240"></a>
<span class="sourceLineNo">241</span>        public Dataset getSlice(IMonitor monitor, Slice... slice) throws DatasetException {<a name="line.241"></a>
<span class="sourceLineNo">242</span>                if (slice == null || slice.length == 0) {<a name="line.242"></a>
<span class="sourceLineNo">243</span>                        return getSlice(monitor, new SliceND(shape));<a name="line.243"></a>
<span class="sourceLineNo">244</span>                }<a name="line.244"></a>
<span class="sourceLineNo">245</span>                return getSlice(monitor, new SliceND(shape, slice));<a name="line.245"></a>
<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
<span class="sourceLineNo">247</span><a name="line.247"></a>
<span class="sourceLineNo">248</span>        @Override<a name="line.248"></a>
<span class="sourceLineNo">249</span>        public LazyDataset getSliceView(Slice... slice) {<a name="line.249"></a>
<span class="sourceLineNo">250</span>                if (slice == null || slice.length == 0) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>                        return getSliceView(new SliceND(shape));<a name="line.251"></a>
<span class="sourceLineNo">252</span>                }<a name="line.252"></a>
<span class="sourceLineNo">253</span>                return getSliceView(new SliceND(shape, slice));<a name="line.253"></a>
<span class="sourceLineNo">254</span>        }<a name="line.254"></a>
<span class="sourceLineNo">255</span><a name="line.255"></a>
<span class="sourceLineNo">256</span>        /**<a name="line.256"></a>
<span class="sourceLineNo">257</span>         * @param nShape<a name="line.257"></a>
<span class="sourceLineNo">258</span>         */<a name="line.258"></a>
<span class="sourceLineNo">259</span>        private void setShapeInternal(int... nShape) {<a name="line.259"></a>
<span class="sourceLineNo">260</span>                <a name="line.260"></a>
<span class="sourceLineNo">261</span>                long nsize = ShapeUtils.calcLongSize(nShape);<a name="line.261"></a>
<span class="sourceLineNo">262</span>                if (nsize != size) {<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        throw new IllegalArgumentException("Size of new shape is not equal to current size");<a name="line.263"></a>
<span class="sourceLineNo">264</span>                }<a name="line.264"></a>
<span class="sourceLineNo">265</span><a name="line.265"></a>
<span class="sourceLineNo">266</span>                if (nsize == 1) {<a name="line.266"></a>
<span class="sourceLineNo">267</span>                        shape = nShape.clone();<a name="line.267"></a>
<span class="sourceLineNo">268</span>                        return;<a name="line.268"></a>
<span class="sourceLineNo">269</span>                }<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
<span class="sourceLineNo">271</span>                int ob = -1; // first non-unit dimension<a name="line.271"></a>
<span class="sourceLineNo">272</span>                int or = shape.length;<a name="line.272"></a>
<span class="sourceLineNo">273</span>                for (int i = 0; i &lt; or; i++) {<a name="line.273"></a>
<span class="sourceLineNo">274</span>                        if (shape[i] != 1) {<a name="line.274"></a>
<span class="sourceLineNo">275</span>                                ob = i;<a name="line.275"></a>
<span class="sourceLineNo">276</span>                                break;<a name="line.276"></a>
<span class="sourceLineNo">277</span>                        }<a name="line.277"></a>
<span class="sourceLineNo">278</span>                }<a name="line.278"></a>
<span class="sourceLineNo">279</span>                assert ob &gt;= 0;<a name="line.279"></a>
<span class="sourceLineNo">280</span>                int oe = -1; // last non-unit dimension<a name="line.280"></a>
<span class="sourceLineNo">281</span>                for (int i = or - 1; i &gt;= ob; i--) {<a name="line.281"></a>
<span class="sourceLineNo">282</span>                        if (shape[i] != 1) {<a name="line.282"></a>
<span class="sourceLineNo">283</span>                                oe = i;<a name="line.283"></a>
<span class="sourceLineNo">284</span>                                break;<a name="line.284"></a>
<span class="sourceLineNo">285</span>                        }<a name="line.285"></a>
<span class="sourceLineNo">286</span>                }<a name="line.286"></a>
<span class="sourceLineNo">287</span>                assert oe &gt;= 0;<a name="line.287"></a>
<span class="sourceLineNo">288</span>                oe++;<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>                int nb = -1; // first non-unit dimension<a name="line.290"></a>
<span class="sourceLineNo">291</span>                int nr = nShape.length;<a name="line.291"></a>
<span class="sourceLineNo">292</span>                for (int i = 0; i &lt; nr; i++) {<a name="line.292"></a>
<span class="sourceLineNo">293</span>                        if (nShape[i] != 1) {<a name="line.293"></a>
<span class="sourceLineNo">294</span>                                nb = i;<a name="line.294"></a>
<span class="sourceLineNo">295</span>                                break;<a name="line.295"></a>
<span class="sourceLineNo">296</span>                        }<a name="line.296"></a>
<span class="sourceLineNo">297</span>                }<a name="line.297"></a>
<span class="sourceLineNo">298</span><a name="line.298"></a>
<span class="sourceLineNo">299</span>                int i = ob;<a name="line.299"></a>
<span class="sourceLineNo">300</span>                int j = nb;<a name="line.300"></a>
<span class="sourceLineNo">301</span>                if (begSlice == null) {<a name="line.301"></a>
<span class="sourceLineNo">302</span>                        for (; i &lt; oe &amp;&amp; j &lt; nr; i++, j++) {<a name="line.302"></a>
<span class="sourceLineNo">303</span>                                if (shape[i] != nShape[j]) {<a name="line.303"></a>
<span class="sourceLineNo">304</span>                                        throw new IllegalArgumentException("New shape not allowed - can only change shape by adding or removing ones to ends of old shape");<a name="line.304"></a>
<span class="sourceLineNo">305</span>                                }<a name="line.305"></a>
<span class="sourceLineNo">306</span>                        }<a name="line.306"></a>
<span class="sourceLineNo">307</span>                } else {<a name="line.307"></a>
<span class="sourceLineNo">308</span>                        int[] nBegSlice = new int[nr];<a name="line.308"></a>
<span class="sourceLineNo">309</span>                        int[] nDelSlice = new int[nr];<a name="line.309"></a>
<span class="sourceLineNo">310</span>                        Arrays.fill(nDelSlice, 1);<a name="line.310"></a>
<span class="sourceLineNo">311</span>                        for (; i &lt; oe &amp;&amp; j &lt; nr; i++, j++) {<a name="line.311"></a>
<span class="sourceLineNo">312</span>                                if (shape[i] != nShape[j]) {<a name="line.312"></a>
<span class="sourceLineNo">313</span>                                        throw new IllegalArgumentException("New shape not allowed - can only change shape by adding or removing ones to ends of old shape");<a name="line.313"></a>
<span class="sourceLineNo">314</span>                                }<a name="line.314"></a>
<span class="sourceLineNo">315</span>                                nBegSlice[j] = begSlice[i];<a name="line.315"></a>
<span class="sourceLineNo">316</span>                                nDelSlice[j] = delSlice[i];<a name="line.316"></a>
<span class="sourceLineNo">317</span>                        }<a name="line.317"></a>
<span class="sourceLineNo">318</span>        <a name="line.318"></a>
<span class="sourceLineNo">319</span>                        begSlice = nBegSlice;<a name="line.319"></a>
<span class="sourceLineNo">320</span>                        delSlice = nDelSlice;<a name="line.320"></a>
<span class="sourceLineNo">321</span>                }<a name="line.321"></a>
<span class="sourceLineNo">322</span>                prepShape += nb - ob;<a name="line.322"></a>
<span class="sourceLineNo">323</span>                postShape += nr - oe;<a name="line.323"></a>
<span class="sourceLineNo">324</span><a name="line.324"></a>
<span class="sourceLineNo">325</span>                storeMetadata(metadata, Reshapeable.class);<a name="line.325"></a>
<span class="sourceLineNo">326</span>                metadata = copyMetadata();<a name="line.326"></a>
<span class="sourceLineNo">327</span>                reshapeMetadata(shape, nShape);<a name="line.327"></a>
<span class="sourceLineNo">328</span>                shape = nShape;<a name="line.328"></a>
<span class="sourceLineNo">329</span>        }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
<span class="sourceLineNo">331</span>        @Override<a name="line.331"></a>
<span class="sourceLineNo">332</span>        public LazyDataset getSliceView(int[] start, int[] stop, int[] step) {<a name="line.332"></a>
<span class="sourceLineNo">333</span>                return getSliceView(new SliceND(shape, start, stop, step));<a name="line.333"></a>
<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
<span class="sourceLineNo">335</span><a name="line.335"></a>
<span class="sourceLineNo">336</span>        @Override<a name="line.336"></a>
<span class="sourceLineNo">337</span>        public LazyDataset getSliceView(SliceND slice) {<a name="line.337"></a>
<span class="sourceLineNo">338</span>                LazyDataset view = clone();<a name="line.338"></a>
<span class="sourceLineNo">339</span>                if (slice.isAll())<a name="line.339"></a>
<span class="sourceLineNo">340</span>                        return view;<a name="line.340"></a>
<span class="sourceLineNo">341</span><a name="line.341"></a>
<span class="sourceLineNo">342</span>                int[] lstart = slice.getStart();<a name="line.342"></a>
<span class="sourceLineNo">343</span>                int[] lstep  = slice.getStep();<a name="line.343"></a>
<span class="sourceLineNo">344</span>                final int rank = shape.length;<a name="line.344"></a>
<span class="sourceLineNo">345</span><a name="line.345"></a>
<span class="sourceLineNo">346</span>                int[] nShape = slice.getShape();<a name="line.346"></a>
<span class="sourceLineNo">347</span>                view.shape = nShape;<a name="line.347"></a>
<span class="sourceLineNo">348</span>                view.size = ShapeUtils.calcLongSize(nShape);<a name="line.348"></a>
<span class="sourceLineNo">349</span>                if (begSlice == null) {<a name="line.349"></a>
<span class="sourceLineNo">350</span>                        view.begSlice = lstart.clone();<a name="line.350"></a>
<span class="sourceLineNo">351</span>                        view.delSlice = lstep.clone();<a name="line.351"></a>
<span class="sourceLineNo">352</span>                } else {<a name="line.352"></a>
<span class="sourceLineNo">353</span>                        view.begSlice = new int[rank];<a name="line.353"></a>
<span class="sourceLineNo">354</span>                        view.delSlice = new int[rank];<a name="line.354"></a>
<span class="sourceLineNo">355</span>                        for (int i = 0; i &lt; rank; i++) {<a name="line.355"></a>
<span class="sourceLineNo">356</span>                                view.begSlice[i] = begSlice[i] + lstart[i] * delSlice[i];<a name="line.356"></a>
<span class="sourceLineNo">357</span>                                view.delSlice[i] = delSlice[i] * lstep[i];<a name="line.357"></a>
<span class="sourceLineNo">358</span>                        }<a name="line.358"></a>
<span class="sourceLineNo">359</span>                }<a name="line.359"></a>
<span class="sourceLineNo">360</span>                view.storeMetadata(metadata, Sliceable.class);<a name="line.360"></a>
<span class="sourceLineNo">361</span>                <a name="line.361"></a>
<span class="sourceLineNo">362</span>                view.sliceMetadata(true, slice);<a name="line.362"></a>
<span class="sourceLineNo">363</span>                return view;<a name="line.363"></a>
<span class="sourceLineNo">364</span>        }<a name="line.364"></a>
<span class="sourceLineNo">365</span><a name="line.365"></a>
<span class="sourceLineNo">366</span>        @Override<a name="line.366"></a>
<span class="sourceLineNo">367</span>        public LazyDataset getTransposedView(int... axes) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>                LazyDataset view = clone();<a name="line.368"></a>
<span class="sourceLineNo">369</span><a name="line.369"></a>
<span class="sourceLineNo">370</span>                // everything now is seen through a map<a name="line.370"></a>
<span class="sourceLineNo">371</span>                axes = checkPermutatedAxes(shape, axes);<a name="line.371"></a>
<span class="sourceLineNo">372</span>                if (axes == null)<a name="line.372"></a>
<span class="sourceLineNo">373</span>                        return view;<a name="line.373"></a>
<span class="sourceLineNo">374</span><a name="line.374"></a>
<span class="sourceLineNo">375</span>                int r = shape.length;<a name="line.375"></a>
<span class="sourceLineNo">376</span>                view.shape = new int[r];<a name="line.376"></a>
<span class="sourceLineNo">377</span>                for (int i = 0; i &lt; r; i++) {<a name="line.377"></a>
<span class="sourceLineNo">378</span>                        view.shape[i] = shape[axes[i]];<a name="line.378"></a>
<span class="sourceLineNo">379</span>                }<a name="line.379"></a>
<span class="sourceLineNo">380</span><a name="line.380"></a>
<span class="sourceLineNo">381</span>                view.prepShape = 0;<a name="line.381"></a>
<span class="sourceLineNo">382</span>                view.postShape = 0;<a name="line.382"></a>
<span class="sourceLineNo">383</span>                view.begSlice = null;<a name="line.383"></a>
<span class="sourceLineNo">384</span>                view.delSlice = null;<a name="line.384"></a>
<span class="sourceLineNo">385</span>                view.map = axes;<a name="line.385"></a>
<span class="sourceLineNo">386</span>                view.base = this;<a name="line.386"></a>
<span class="sourceLineNo">387</span>                view.storeMetadata(metadata, Transposable.class);<a name="line.387"></a>
<span class="sourceLineNo">388</span>                view.transposeMetadata(axes);<a name="line.388"></a>
<span class="sourceLineNo">389</span>                return view;<a name="line.389"></a>
<span class="sourceLineNo">390</span>        }<a name="line.390"></a>
<span class="sourceLineNo">391</span><a name="line.391"></a>
<span class="sourceLineNo">392</span>        @Override<a name="line.392"></a>
<span class="sourceLineNo">393</span>        public Dataset getSlice(IMonitor monitor, int[] start, int[] stop, int[] step) throws DatasetException {<a name="line.393"></a>
<span class="sourceLineNo">394</span>                return getSlice(monitor, new SliceND(shape, start, stop, step));<a name="line.394"></a>
<span class="sourceLineNo">395</span>        }<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>        @Override<a name="line.397"></a>
<span class="sourceLineNo">398</span>        public Dataset getSlice(IMonitor monitor, SliceND slice) throws DatasetException {<a name="line.398"></a>
<span class="sourceLineNo">399</span><a name="line.399"></a>
<span class="sourceLineNo">400</span>                if (loader != null &amp;&amp; !loader.isFileReadable())<a name="line.400"></a>
<span class="sourceLineNo">401</span>                        return null; // TODO add interaction to use plot (or remote) server to load dataset<a name="line.401"></a>
<span class="sourceLineNo">402</span><a name="line.402"></a>
<span class="sourceLineNo">403</span>                SliceND nslice = calcTrueSlice(slice);<a name="line.403"></a>
<span class="sourceLineNo">404</span><a name="line.404"></a>
<span class="sourceLineNo">405</span>                Dataset a;<a name="line.405"></a>
<span class="sourceLineNo">406</span>                if (base != null) {<a name="line.406"></a>
<span class="sourceLineNo">407</span>                        a = base.getSlice(monitor, nslice);<a name="line.407"></a>
<span class="sourceLineNo">408</span>                } else {<a name="line.408"></a>
<span class="sourceLineNo">409</span>                        try {<a name="line.409"></a>
<span class="sourceLineNo">410</span>                                a = DatasetUtils.convertToDataset(loader.getDataset(monitor, nslice));<a name="line.410"></a>
<span class="sourceLineNo">411</span>                        } catch (IOException e) {<a name="line.411"></a>
<span class="sourceLineNo">412</span>                                logger.error("Problem getting {}: {}", String.format("slice %s %s %s from %s", Arrays.toString(slice.getStart()), Arrays.toString(slice.getStop()),<a name="line.412"></a>
<span class="sourceLineNo">413</span>                                                                Arrays.toString(slice.getStep()), loader), e);<a name="line.413"></a>
<span class="sourceLineNo">414</span>                                throw new DatasetException(e);<a name="line.414"></a>
<span class="sourceLineNo">415</span>                        }<a name="line.415"></a>
<span class="sourceLineNo">416</span>                        a.setName(name + AbstractDataset.BLOCK_OPEN + nslice.toString() + AbstractDataset.BLOCK_CLOSE);<a name="line.416"></a>
<span class="sourceLineNo">417</span>                        if (metadata != null &amp;&amp; a instanceof LazyDatasetBase) {<a name="line.417"></a>
<span class="sourceLineNo">418</span>                                LazyDatasetBase ba = (LazyDatasetBase) a;<a name="line.418"></a>
<span class="sourceLineNo">419</span>                                ba.metadata = copyMetadata();<a name="line.419"></a>
<span class="sourceLineNo">420</span>                                if (oMetadata != null)<a name="line.420"></a>
<span class="sourceLineNo">421</span>                                        ba.restoreMetadata(oMetadata);<a name="line.421"></a>
<span class="sourceLineNo">422</span>                                //metadata axis may be larger than data<a name="line.422"></a>
<span class="sourceLineNo">423</span>                                if (!nslice.isAll() || nslice.getMaxShape() != nslice.getShape())<a name="line.423"></a>
<span class="sourceLineNo">424</span>                                        ba.sliceMetadata(true, nslice);<a name="line.424"></a>
<span class="sourceLineNo">425</span>                        }<a name="line.425"></a>
<span class="sourceLineNo">426</span>                }<a name="line.426"></a>
<span class="sourceLineNo">427</span>                if (map != null) {<a name="line.427"></a>
<span class="sourceLineNo">428</span>                        a = a.getTransposedView(map);<a name="line.428"></a>
<span class="sourceLineNo">429</span>                }<a name="line.429"></a>
<span class="sourceLineNo">430</span>                if (slice != null)<a name="line.430"></a>
<span class="sourceLineNo">431</span>                        a.setShape(slice.getShape());<a name="line.431"></a>
<span class="sourceLineNo">432</span>                a.addMetadata(MetadataFactory.createMetadata(OriginMetadata.class, this, nslice.convertToSlice(), oShape, null, name));<a name="line.432"></a>
<span class="sourceLineNo">433</span>                <a name="line.433"></a>
<span class="sourceLineNo">434</span>                return a;<a name="line.434"></a>
<span class="sourceLineNo">435</span>        }<a name="line.435"></a>
<span class="sourceLineNo">436</span><a name="line.436"></a>
<span class="sourceLineNo">437</span>        // reverse transform<a name="line.437"></a>
<span class="sourceLineNo">438</span>        private int[] getOriginal(int[] values) {<a name="line.438"></a>
<span class="sourceLineNo">439</span>                if (values == null)<a name="line.439"></a>
<span class="sourceLineNo">440</span>                        return null;<a name="line.440"></a>
<span class="sourceLineNo">441</span>                int r = values.length;<a name="line.441"></a>
<span class="sourceLineNo">442</span>                if (map == null || r &lt; 2)<a name="line.442"></a>
<span class="sourceLineNo">443</span>                        return values;<a name="line.443"></a>
<span class="sourceLineNo">444</span>                int[] ovalues = new int[r];<a name="line.444"></a>
<span class="sourceLineNo">445</span>                for (int i = 0; i &lt; r; i++) {<a name="line.445"></a>
<span class="sourceLineNo">446</span>                        ovalues[map[i]] = values[i];<a name="line.446"></a>
<span class="sourceLineNo">447</span>                }<a name="line.447"></a>
<span class="sourceLineNo">448</span>                return ovalues;<a name="line.448"></a>
<span class="sourceLineNo">449</span>        }<a name="line.449"></a>
<span class="sourceLineNo">450</span><a name="line.450"></a>
<span class="sourceLineNo">451</span>        protected final SliceND calcTrueSlice(SliceND slice) {<a name="line.451"></a>
<span class="sourceLineNo">452</span>                if (slice == null) {<a name="line.452"></a>
<span class="sourceLineNo">453</span>                        slice = new SliceND(shape);<a name="line.453"></a>
<span class="sourceLineNo">454</span>                }<a name="line.454"></a>
<span class="sourceLineNo">455</span>                int[] lstart = slice.getStart();<a name="line.455"></a>
<span class="sourceLineNo">456</span>                int[] lstop  = slice.getStop();<a name="line.456"></a>
<span class="sourceLineNo">457</span>                int[] lstep  = slice.getStep();<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>                int[] nstart;<a name="line.459"></a>
<span class="sourceLineNo">460</span>                int[] nstop;<a name="line.460"></a>
<span class="sourceLineNo">461</span>                int[] nstep;<a name="line.461"></a>
<span class="sourceLineNo">462</span><a name="line.462"></a>
<span class="sourceLineNo">463</span>                int r = base == null ? oShape.length : base.shape.length;<a name="line.463"></a>
<span class="sourceLineNo">464</span>                nstart = new int[r];<a name="line.464"></a>
<span class="sourceLineNo">465</span>                nstop = new int[r];<a name="line.465"></a>
<span class="sourceLineNo">466</span>                nstep = new int[r];<a name="line.466"></a>
<span class="sourceLineNo">467</span>                Arrays.fill(nstop, 1);<a name="line.467"></a>
<span class="sourceLineNo">468</span>                Arrays.fill(nstep, 1);<a name="line.468"></a>
<span class="sourceLineNo">469</span>                {<a name="line.469"></a>
<span class="sourceLineNo">470</span>                        int i = 0;<a name="line.470"></a>
<span class="sourceLineNo">471</span>                        int j = 0;<a name="line.471"></a>
<span class="sourceLineNo">472</span>                        if (prepShape &lt; 0) { // ignore entries from new slice <a name="line.472"></a>
<span class="sourceLineNo">473</span>                                i = -prepShape;<a name="line.473"></a>
<span class="sourceLineNo">474</span>                        } else if (prepShape &gt; 0) {<a name="line.474"></a>
<span class="sourceLineNo">475</span>                                j = prepShape;<a name="line.475"></a>
<span class="sourceLineNo">476</span>                        }<a name="line.476"></a>
<span class="sourceLineNo">477</span>                        if (begSlice == null) {<a name="line.477"></a>
<span class="sourceLineNo">478</span>                                for (; i &lt; r &amp;&amp; j &lt; shape.length; i++, j++) {<a name="line.478"></a>
<span class="sourceLineNo">479</span>                                        nstart[i] = lstart[j];<a name="line.479"></a>
<span class="sourceLineNo">480</span>                                        nstop[i]  = lstop[j];<a name="line.480"></a>
<span class="sourceLineNo">481</span>                                        int d = lstep[j];<a name="line.481"></a>
<span class="sourceLineNo">482</span>                                        if (d &lt; 0 &amp;&amp; nstop[i] &lt; 0) { // need to wrap around further<a name="line.482"></a>
<span class="sourceLineNo">483</span>                                                int l = base == null ? oShape[j]: base.shape[j];<a name="line.483"></a>
<span class="sourceLineNo">484</span>                                                nstop[i] -= l;<a name="line.484"></a>
<span class="sourceLineNo">485</span>                                        }<a name="line.485"></a>
<span class="sourceLineNo">486</span>                                        nstep[i]  = d;<a name="line.486"></a>
<span class="sourceLineNo">487</span>                                }<a name="line.487"></a>
<span class="sourceLineNo">488</span>                        } else {<a name="line.488"></a>
<span class="sourceLineNo">489</span>                                for (; i &lt; r &amp;&amp; j &lt; shape.length; i++, j++) {<a name="line.489"></a>
<span class="sourceLineNo">490</span>                                        int b = begSlice[j];<a name="line.490"></a>
<span class="sourceLineNo">491</span>                                        int d = delSlice[j];<a name="line.491"></a>
<span class="sourceLineNo">492</span>                                        nstart[i] = b + lstart[j] * d;<a name="line.492"></a>
<span class="sourceLineNo">493</span>                                        nstop[i]  = b + (lstop[j] - 1) * d + (d &gt;= 0 ? 1 : -1);<a name="line.493"></a>
<span class="sourceLineNo">494</span>                                        if (d &lt; 0 &amp;&amp; nstop[i] &lt; 0) { // need to wrap around further<a name="line.494"></a>
<span class="sourceLineNo">495</span>                                                int l = base == null ? oShape[j]: base.shape[j];<a name="line.495"></a>
<span class="sourceLineNo">496</span>                                                nstop[i] -= l;<a name="line.496"></a>
<span class="sourceLineNo">497</span>                                        }<a name="line.497"></a>
<span class="sourceLineNo">498</span>                                        nstep[i]  = lstep[j] * d;<a name="line.498"></a>
<span class="sourceLineNo">499</span>                                }<a name="line.499"></a>
<span class="sourceLineNo">500</span>                        }<a name="line.500"></a>
<span class="sourceLineNo">501</span>                        if (map != null) {<a name="line.501"></a>
<span class="sourceLineNo">502</span>                                nstart = getOriginal(nstart);<a name="line.502"></a>
<span class="sourceLineNo">503</span>                                nstop  = getOriginal(nstop);<a name="line.503"></a>
<span class="sourceLineNo">504</span>                                nstep  = getOriginal(nstep);<a name="line.504"></a>
<span class="sourceLineNo">505</span>                        }<a name="line.505"></a>
<span class="sourceLineNo">506</span>                }<a name="line.506"></a>
<span class="sourceLineNo">507</span><a name="line.507"></a>
<span class="sourceLineNo">508</span>                return createSlice(nstart, nstop, nstep);<a name="line.508"></a>
<span class="sourceLineNo">509</span>        }<a name="line.509"></a>
<span class="sourceLineNo">510</span><a name="line.510"></a>
<span class="sourceLineNo">511</span>        protected final IDataset transformInput(IDataset data) {<a name="line.511"></a>
<span class="sourceLineNo">512</span>                if (map == null)<a name="line.512"></a>
<span class="sourceLineNo">513</span>                        return data;<a name="line.513"></a>
<span class="sourceLineNo">514</span>                return data.getTransposedView(map);<a name="line.514"></a>
<span class="sourceLineNo">515</span>        }<a name="line.515"></a>
<span class="sourceLineNo">516</span><a name="line.516"></a>
<span class="sourceLineNo">517</span>        protected SliceND createSlice(int[] nstart, int[] nstop, int[] nstep) {<a name="line.517"></a>
<span class="sourceLineNo">518</span>                return new SliceND(base == null ? oShape : base.shape, nstart, nstop, nstep);<a name="line.518"></a>
<span class="sourceLineNo">519</span>        }<a name="line.519"></a>
<span class="sourceLineNo">520</span><a name="line.520"></a>
<span class="sourceLineNo">521</span>        /**<a name="line.521"></a>
<span class="sourceLineNo">522</span>         * Store metadata items that has given annotation<a name="line.522"></a>
<span class="sourceLineNo">523</span>         * @param origMetadata<a name="line.523"></a>
<span class="sourceLineNo">524</span>         * @param aclazz<a name="line.524"></a>
<span class="sourceLineNo">525</span>         */<a name="line.525"></a>
<span class="sourceLineNo">526</span>        private void storeMetadata(Map&lt;Class&lt;? extends MetadataType&gt;, List&lt;MetadataType&gt;&gt; origMetadata, Class&lt;? extends Annotation&gt; aclazz) {<a name="line.526"></a>
<span class="sourceLineNo">527</span>                List&lt;Class&lt;? extends MetadataType&gt;&gt; mclazzes = findAnnotatedMetadata(aclazz);<a name="line.527"></a>
<span class="sourceLineNo">528</span>                if (mclazzes.size() == 0)<a name="line.528"></a>
<span class="sourceLineNo">529</span>                        return;<a name="line.529"></a>
<span class="sourceLineNo">530</span><a name="line.530"></a>
<span class="sourceLineNo">531</span>                if (oMetadata == null) {<a name="line.531"></a>
<span class="sourceLineNo">532</span>                        oMetadata = new HashMap&lt;Class&lt;? extends MetadataType&gt;, List&lt;MetadataType&gt;&gt;();<a name="line.532"></a>
<span class="sourceLineNo">533</span>                }<a name="line.533"></a>
<span class="sourceLineNo">534</span>                for (Class&lt;? extends MetadataType&gt; mc : mclazzes) {<a name="line.534"></a>
<span class="sourceLineNo">535</span>                        if (oMetadata.containsKey(mc))<a name="line.535"></a>
<span class="sourceLineNo">536</span>                                continue; // do not overwrite original<a name="line.536"></a>
<span class="sourceLineNo">537</span><a name="line.537"></a>
<span class="sourceLineNo">538</span>                        List&lt;MetadataType&gt; l = origMetadata.get(mc);<a name="line.538"></a>
<span class="sourceLineNo">539</span>                        List&lt;MetadataType&gt; nl = new ArrayList&lt;MetadataType&gt;(l.size());<a name="line.539"></a>
<span class="sourceLineNo">540</span>                        for (MetadataType m : l) {<a name="line.540"></a>
<span class="sourceLineNo">541</span>                                nl.add(m.clone());<a name="line.541"></a>
<span class="sourceLineNo">542</span>                        }<a name="line.542"></a>
<span class="sourceLineNo">543</span>                        oMetadata.put(mc, nl);<a name="line.543"></a>
<span class="sourceLineNo">544</span>                }<a name="line.544"></a>
<span class="sourceLineNo">545</span>        }<a name="line.545"></a>
<span class="sourceLineNo">546</span><a name="line.546"></a>
<span class="sourceLineNo">547</span>        @SuppressWarnings("unchecked")<a name="line.547"></a>
<span class="sourceLineNo">548</span>        private List&lt;Class&lt;? extends MetadataType&gt;&gt; findAnnotatedMetadata(Class&lt;? extends Annotation&gt; aclazz) {<a name="line.548"></a>
<span class="sourceLineNo">549</span>                List&lt;Class&lt;? extends MetadataType&gt;&gt; mclazzes = new ArrayList&lt;Class&lt;? extends MetadataType&gt;&gt;();<a name="line.549"></a>
<span class="sourceLineNo">550</span>                if (metadata == null)<a name="line.550"></a>
<span class="sourceLineNo">551</span>                        return mclazzes;<a name="line.551"></a>
<span class="sourceLineNo">552</span><a name="line.552"></a>
<span class="sourceLineNo">553</span>                for (Class&lt;? extends MetadataType&gt; c : metadata.keySet()) {<a name="line.553"></a>
<span class="sourceLineNo">554</span>                        boolean hasAnn = false;<a name="line.554"></a>
<span class="sourceLineNo">555</span>                        for (MetadataType m : metadata.get(c)) {<a name="line.555"></a>
<span class="sourceLineNo">556</span>                                if (m == null)<a name="line.556"></a>
<span class="sourceLineNo">557</span>                                        continue;<a name="line.557"></a>
<span class="sourceLineNo">558</span><a name="line.558"></a>
<span class="sourceLineNo">559</span>                                Class&lt;? extends MetadataType&gt; mc = m.getClass();<a name="line.559"></a>
<span class="sourceLineNo">560</span>                                do { // iterate over super-classes<a name="line.560"></a>
<span class="sourceLineNo">561</span>                                        for (Field f : mc.getDeclaredFields()) {<a name="line.561"></a>
<span class="sourceLineNo">562</span>                                                if (f.isAnnotationPresent(aclazz)) {<a name="line.562"></a>
<span class="sourceLineNo">563</span>                                                        hasAnn = true;<a name="line.563"></a>
<span class="sourceLineNo">564</span>                                                        break;<a name="line.564"></a>
<span class="sourceLineNo">565</span>                                                }<a name="line.565"></a>
<span class="sourceLineNo">566</span>                                        }<a name="line.566"></a>
<span class="sourceLineNo">567</span>                                        Class&lt;?&gt; sclazz = mc.getSuperclass();<a name="line.567"></a>
<span class="sourceLineNo">568</span>                                        if (!MetadataType.class.isAssignableFrom(sclazz))<a name="line.568"></a>
<span class="sourceLineNo">569</span>                                                break;<a name="line.569"></a>
<span class="sourceLineNo">570</span>                                        mc = (Class&lt;? extends MetadataType&gt;) sclazz;<a name="line.570"></a>
<span class="sourceLineNo">571</span>                                } while (!hasAnn);<a name="line.571"></a>
<span class="sourceLineNo">572</span>                                if (hasAnn)<a name="line.572"></a>
<span class="sourceLineNo">573</span>                                        break;<a name="line.573"></a>
<span class="sourceLineNo">574</span>                        }<a name="line.574"></a>
<span class="sourceLineNo">575</span>                        if (hasAnn) {<a name="line.575"></a>
<span class="sourceLineNo">576</span>                                mclazzes.add(c);<a name="line.576"></a>
<span class="sourceLineNo">577</span>                        }<a name="line.577"></a>
<span class="sourceLineNo">578</span>                }<a name="line.578"></a>
<span class="sourceLineNo">579</span>                return mclazzes;<a name="line.579"></a>
<span class="sourceLineNo">580</span>        }<a name="line.580"></a>
<span class="sourceLineNo">581</span><a name="line.581"></a>
<span class="sourceLineNo">582</span>        /**<a name="line.582"></a>
<span class="sourceLineNo">583</span>         * Gets the maximum size of a slice of a dataset in a given dimension<a name="line.583"></a>
<span class="sourceLineNo">584</span>         * which should normally fit in memory. Note that it might be possible<a name="line.584"></a>
<span class="sourceLineNo">585</span>         * to get more in memory, this is a conservative estimate and seems to<a name="line.585"></a>
<span class="sourceLineNo">586</span>         * almost always work at the size returned; providing Xmx is less than<a name="line.586"></a>
<span class="sourceLineNo">587</span>         * the physical memory.<a name="line.587"></a>
<span class="sourceLineNo">588</span>         * <a name="line.588"></a>
<span class="sourceLineNo">589</span>         * To get more in memory increase -Xmx setting or use an expression<a name="line.589"></a>
<span class="sourceLineNo">590</span>         * which calls a rolling function (like rmean) instead of slicing directly<a name="line.590"></a>
<span class="sourceLineNo">591</span>         * to memory.<a name="line.591"></a>
<span class="sourceLineNo">592</span>         * <a name="line.592"></a>
<span class="sourceLineNo">593</span>         * @param lazySet<a name="line.593"></a>
<span class="sourceLineNo">594</span>         * @param dimension<a name="line.594"></a>
<span class="sourceLineNo">595</span>         * @return maximum size of dimension that can be sliced.<a name="line.595"></a>
<span class="sourceLineNo">596</span>         */<a name="line.596"></a>
<span class="sourceLineNo">597</span>        public static int getMaxSliceLength(ILazyDataset lazySet, int dimension) {<a name="line.597"></a>
<span class="sourceLineNo">598</span>                // size in bytes of each item<a name="line.598"></a>
<span class="sourceLineNo">599</span>                final double size = DTypeUtils.getItemBytes(DTypeUtils.getDTypeFromClass(lazySet.getElementClass()), lazySet.getElementsPerItem());<a name="line.599"></a>
<span class="sourceLineNo">600</span>                <a name="line.600"></a>
<span class="sourceLineNo">601</span>                // Max in bytes takes into account our minimum requirement<a name="line.601"></a>
<span class="sourceLineNo">602</span>                final double max  = Math.max(Runtime.getRuntime().totalMemory(), Runtime.getRuntime().maxMemory());<a name="line.602"></a>
<span class="sourceLineNo">603</span>                <a name="line.603"></a>
<span class="sourceLineNo">604</span>        // Firstly if the whole dataset it likely to fit in memory, then we allow it.<a name="line.604"></a>
<span class="sourceLineNo">605</span>                // Space specified in bytes per item available<a name="line.605"></a>
<span class="sourceLineNo">606</span>                final double space = max/lazySet.getSize();<a name="line.606"></a>
<span class="sourceLineNo">607</span><a name="line.607"></a>
<span class="sourceLineNo">608</span>                // If we have room for this whole dataset, then fine<a name="line.608"></a>
<span class="sourceLineNo">609</span>                int[] shape = lazySet.getShape();<a name="line.609"></a>
<span class="sourceLineNo">610</span>                if (space &gt;= size)<a name="line.610"></a>
<span class="sourceLineNo">611</span>                        return shape[dimension];<a name="line.611"></a>
<span class="sourceLineNo">612</span>                <a name="line.612"></a>
<span class="sourceLineNo">613</span>                // Otherwise estimate what we can fit in, conservatively.<a name="line.613"></a>
<span class="sourceLineNo">614</span>                // First get size of one slice, see it that fits, if not, still return 1<a name="line.614"></a>
<span class="sourceLineNo">615</span>                double sizeOneSlice = size; // in bytes<a name="line.615"></a>
<span class="sourceLineNo">616</span>                for (int dim = 0; dim &lt; shape.length; dim++) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>                        if (dim == dimension)<a name="line.617"></a>
<span class="sourceLineNo">618</span>                                continue;<a name="line.618"></a>
<span class="sourceLineNo">619</span>                        sizeOneSlice *= shape[dim];<a name="line.619"></a>
<span class="sourceLineNo">620</span>                }<a name="line.620"></a>
<span class="sourceLineNo">621</span>                double avail = max / sizeOneSlice;<a name="line.621"></a>
<span class="sourceLineNo">622</span>                if (avail &lt; 1)<a name="line.622"></a>
<span class="sourceLineNo">623</span>                        return 1;<a name="line.623"></a>
<span class="sourceLineNo">624</span><a name="line.624"></a>
<span class="sourceLineNo">625</span>                // We fudge this to leave some room<a name="line.625"></a>
<span class="sourceLineNo">626</span>                return (int) Math.floor(avail/4d);<a name="line.626"></a>
<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
<span class="sourceLineNo">628</span>}<a name="line.628"></a>




























































</pre>
</div>
</body>
</html>
