<!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.Serializable;<a name="line.15"></a>
<span class="sourceLineNo">016</span>import java.util.ArrayList;<a name="line.16"></a>
<span class="sourceLineNo">017</span>import java.util.List;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.eclipse.january.DatasetException;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.eclipse.january.IMonitor;<a name="line.20"></a>
<span class="sourceLineNo">021</span><a name="line.21"></a>
<span class="sourceLineNo">022</span>/**<a name="line.22"></a>
<span class="sourceLineNo">023</span> * Class to aggregate a set of lazy datasets and present them as a single lazy dataset where<a name="line.23"></a>
<span class="sourceLineNo">024</span> * the first position value accesses the aggregation<a name="line.24"></a>
<span class="sourceLineNo">025</span> */<a name="line.25"></a>
<span class="sourceLineNo">026</span>public class AggregateDataset extends LazyDatasetBase implements ILazyDataset {<a name="line.26"></a>
<span class="sourceLineNo">027</span><a name="line.27"></a>
<span class="sourceLineNo">028</span>        /**<a name="line.28"></a>
<span class="sourceLineNo">029</span>         * Update this when there are any serious changes to API<a name="line.29"></a>
<span class="sourceLineNo">030</span>         */<a name="line.30"></a>
<span class="sourceLineNo">031</span>        private static final long serialVersionUID = -5523566223386837581L;<a name="line.31"></a>
<span class="sourceLineNo">032</span><a name="line.32"></a>
<span class="sourceLineNo">033</span>        private ILazyDataset[] data = null; // array of lazy datasets<a name="line.33"></a>
<span class="sourceLineNo">034</span>        private int[] map = null;    // map first dimension to index of dataset<a name="line.34"></a>
<span class="sourceLineNo">035</span>        private int[] offset = null; // cumulative first dimension lengths used as slice offsets<a name="line.35"></a>
<span class="sourceLineNo">036</span>        private int size;<a name="line.36"></a>
<span class="sourceLineNo">037</span>        private int dtype = -1;<a name="line.37"></a>
<span class="sourceLineNo">038</span>        private int isize; // number of elements per item<a name="line.38"></a>
<span class="sourceLineNo">039</span>        protected AggregateDataset base = null;<a name="line.39"></a>
<span class="sourceLineNo">040</span>        private int[] sliceStart = null;<a name="line.40"></a>
<span class="sourceLineNo">041</span>        private int[] sliceStep  = null;<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>        /**<a name="line.43"></a>
<span class="sourceLineNo">044</span>         * Calculate (possibly extended) shapes from given datasets<a name="line.44"></a>
<span class="sourceLineNo">045</span>         * @param extend if true, extend rank by one<a name="line.45"></a>
<span class="sourceLineNo">046</span>         * @param datasets<a name="line.46"></a>
<span class="sourceLineNo">047</span>         * @return array of shapes<a name="line.47"></a>
<span class="sourceLineNo">048</span>         */<a name="line.48"></a>
<span class="sourceLineNo">049</span>        public static int[][] calcShapes(boolean extend, ILazyDataset... datasets) {<a name="line.49"></a>
<span class="sourceLineNo">050</span>                if (datasets.length == 0)<a name="line.50"></a>
<span class="sourceLineNo">051</span>                        throw new IllegalArgumentException("No datasets given");<a name="line.51"></a>
<span class="sourceLineNo">052</span><a name="line.52"></a>
<span class="sourceLineNo">053</span>                int maxRank = -1;<a name="line.53"></a>
<span class="sourceLineNo">054</span>                for (ILazyDataset d : datasets) {<a name="line.54"></a>
<span class="sourceLineNo">055</span>                        if (d == null)<a name="line.55"></a>
<span class="sourceLineNo">056</span>                                throw new IllegalArgumentException("Null dataset given");<a name="line.56"></a>
<span class="sourceLineNo">057</span><a name="line.57"></a>
<span class="sourceLineNo">058</span>                        int r = d.getRank();<a name="line.58"></a>
<span class="sourceLineNo">059</span>                        if (r &gt; maxRank)<a name="line.59"></a>
<span class="sourceLineNo">060</span>                                maxRank = r;<a name="line.60"></a>
<span class="sourceLineNo">061</span>                }<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>                if (extend)<a name="line.63"></a>
<span class="sourceLineNo">064</span>                        maxRank++;<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>                int[][] shapes = new int[datasets.length][];<a name="line.66"></a>
<span class="sourceLineNo">067</span>                for (int j = 0; j &lt; datasets.length; j++) {<a name="line.67"></a>
<span class="sourceLineNo">068</span>                        ILazyDataset d = datasets[j];<a name="line.68"></a>
<span class="sourceLineNo">069</span>                        int[] s = d.getShape();<a name="line.69"></a>
<span class="sourceLineNo">070</span>                        if (s.length &lt; maxRank) {<a name="line.70"></a>
<span class="sourceLineNo">071</span>                                int[] ns = new int[maxRank];<a name="line.71"></a>
<span class="sourceLineNo">072</span>                                int start = maxRank - s.length;<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
<span class="sourceLineNo">074</span>                                for (int i = 0; i &lt; start; i++) { // prepend ones as necessary<a name="line.74"></a>
<span class="sourceLineNo">075</span>                                        ns[i] = 1;<a name="line.75"></a>
<span class="sourceLineNo">076</span>                                }<a name="line.76"></a>
<span class="sourceLineNo">077</span>                                for (int i = 0; i &lt; s.length; i++) {<a name="line.77"></a>
<span class="sourceLineNo">078</span>                                        ns[i+start] = s[i];<a name="line.78"></a>
<span class="sourceLineNo">079</span>                                }<a name="line.79"></a>
<span class="sourceLineNo">080</span>                                s = ns;<a name="line.80"></a>
<span class="sourceLineNo">081</span>                        }<a name="line.81"></a>
<span class="sourceLineNo">082</span>                        shapes[j] = s;<a name="line.82"></a>
<span class="sourceLineNo">083</span>                }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>                return shapes;<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>        AggregateDataset(int itemSize, int[] shape, int dtype) {<a name="line.88"></a>
<span class="sourceLineNo">089</span>                isize = itemSize;<a name="line.89"></a>
<span class="sourceLineNo">090</span>                this.shape = shape.clone();<a name="line.90"></a>
<span class="sourceLineNo">091</span>                try {<a name="line.91"></a>
<span class="sourceLineNo">092</span>                        size = ShapeUtils.calcSize(shape);<a name="line.92"></a>
<span class="sourceLineNo">093</span>                } catch (IllegalArgumentException e) {<a name="line.93"></a>
<span class="sourceLineNo">094</span>                        size = Integer.MAX_VALUE; // this indicates that the entire dataset cannot be read in! <a name="line.94"></a>
<span class="sourceLineNo">095</span>                }<a name="line.95"></a>
<span class="sourceLineNo">096</span>                this.dtype = dtype;<a name="line.96"></a>
<span class="sourceLineNo">097</span>        }<a name="line.97"></a>
<span class="sourceLineNo">098</span><a name="line.98"></a>
<span class="sourceLineNo">099</span>        /**<a name="line.99"></a>
<span class="sourceLineNo">100</span>         * Create an aggregate dataset<a name="line.100"></a>
<span class="sourceLineNo">101</span>         * @param extend if true, extend rank by one<a name="line.101"></a>
<span class="sourceLineNo">102</span>         * @param datasets<a name="line.102"></a>
<span class="sourceLineNo">103</span>         */<a name="line.103"></a>
<span class="sourceLineNo">104</span>        public AggregateDataset(boolean extend, ILazyDataset... datasets) {<a name="line.104"></a>
<span class="sourceLineNo">105</span><a name="line.105"></a>
<span class="sourceLineNo">106</span>                final int[][] shapes = calcShapes(extend, datasets);<a name="line.106"></a>
<span class="sourceLineNo">107</span><a name="line.107"></a>
<span class="sourceLineNo">108</span>                // check for same (sub-)shape<a name="line.108"></a>
<span class="sourceLineNo">109</span>                final int[] s = shapes[0];<a name="line.109"></a>
<span class="sourceLineNo">110</span>                final int axis = extend ? -1 : 0;<a name="line.110"></a>
<span class="sourceLineNo">111</span>                for (int j = 1; j &lt; shapes.length; j++) {<a name="line.111"></a>
<span class="sourceLineNo">112</span>                        if (!ShapeUtils.areShapesCompatible(s, shapes[j], axis))<a name="line.112"></a>
<span class="sourceLineNo">113</span>                                throw new IllegalArgumentException("Dataset '" + datasets[j].getName() + "' has wrong shape");<a name="line.113"></a>
<span class="sourceLineNo">114</span>                }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span>                // set shapes of datasets<a name="line.116"></a>
<span class="sourceLineNo">117</span>                final int maxRank = s.length;<a name="line.117"></a>
<span class="sourceLineNo">118</span>                data = new ILazyDataset[datasets.length];<a name="line.118"></a>
<span class="sourceLineNo">119</span>                isize = datasets[0].getElementsPerItem();<a name="line.119"></a>
<span class="sourceLineNo">120</span>                for (int j = 0; j &lt; datasets.length; j++) {<a name="line.120"></a>
<span class="sourceLineNo">121</span>                        ILazyDataset d = datasets[j];<a name="line.121"></a>
<span class="sourceLineNo">122</span>                        int[] ds = d.getShape();<a name="line.122"></a>
<span class="sourceLineNo">123</span>                        if (ds.length &lt; maxRank) {<a name="line.123"></a>
<span class="sourceLineNo">124</span>                                d = d.clone();<a name="line.124"></a>
<span class="sourceLineNo">125</span>                                d.setShape(shapes[j]);<a name="line.125"></a>
<span class="sourceLineNo">126</span>                        }<a name="line.126"></a>
<span class="sourceLineNo">127</span>                        data[j] = d;<a name="line.127"></a>
<span class="sourceLineNo">128</span>                        if (d.getElementsPerItem() != isize) {<a name="line.128"></a>
<span class="sourceLineNo">129</span>                                throw new IllegalArgumentException("All datasets must have the same number of elements");<a name="line.129"></a>
<span class="sourceLineNo">130</span>                        }<a name="line.130"></a>
<span class="sourceLineNo">131</span>                }<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span>                // calculate new shape<a name="line.133"></a>
<span class="sourceLineNo">134</span>                shape = new int[maxRank];<a name="line.134"></a>
<span class="sourceLineNo">135</span>                for (int i = 1; i &lt; shape.length; i++) {<a name="line.135"></a>
<span class="sourceLineNo">136</span>                        shape[i] = s[i];<a name="line.136"></a>
<span class="sourceLineNo">137</span>                }<a name="line.137"></a>
<span class="sourceLineNo">138</span>                if (extend) {<a name="line.138"></a>
<span class="sourceLineNo">139</span>                        shape[0] = data.length;<a name="line.139"></a>
<span class="sourceLineNo">140</span>                } else {<a name="line.140"></a>
<span class="sourceLineNo">141</span>                        for (int j = 0; j &lt; datasets.length; j++) {<a name="line.141"></a>
<span class="sourceLineNo">142</span>                                shape[0] += shapes[j][0];<a name="line.142"></a>
<span class="sourceLineNo">143</span>                        }<a name="line.143"></a>
<span class="sourceLineNo">144</span>                }<a name="line.144"></a>
<span class="sourceLineNo">145</span>                try {<a name="line.145"></a>
<span class="sourceLineNo">146</span>                        size = ShapeUtils.calcSize(shape);<a name="line.146"></a>
<span class="sourceLineNo">147</span>                } catch (IllegalArgumentException e) {<a name="line.147"></a>
<span class="sourceLineNo">148</span>                        size = Integer.MAX_VALUE; // this indicates that the entire dataset cannot be read in! <a name="line.148"></a>
<span class="sourceLineNo">149</span>                }<a name="line.149"></a>
<span class="sourceLineNo">150</span><a name="line.150"></a>
<span class="sourceLineNo">151</span>                // work out offsets from cumulative lengths<a name="line.151"></a>
<span class="sourceLineNo">152</span>                offset = new int[data.length];<a name="line.152"></a>
<span class="sourceLineNo">153</span>                int cd = 0;<a name="line.153"></a>
<span class="sourceLineNo">154</span>                for (int i = 0; i &lt; data.length; i++) {<a name="line.154"></a>
<span class="sourceLineNo">155</span>                        offset[i] = cd;<a name="line.155"></a>
<span class="sourceLineNo">156</span>                        cd += data[i].getShape()[0];<a name="line.156"></a>
<span class="sourceLineNo">157</span>                }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span>                // calculate mapping from aggregate dimension to dataset array index<a name="line.159"></a>
<span class="sourceLineNo">160</span>                map = new int[shape[0]];<a name="line.160"></a>
<span class="sourceLineNo">161</span>                int k = 0;<a name="line.161"></a>
<span class="sourceLineNo">162</span>                for (int i = 0; i &lt; data.length; i++) {<a name="line.162"></a>
<span class="sourceLineNo">163</span>                        int jmax = data[i].getShape()[0];<a name="line.163"></a>
<span class="sourceLineNo">164</span>                        for (int j = 0; j &lt; jmax; j++)<a name="line.164"></a>
<span class="sourceLineNo">165</span>                                map[k++] = i;<a name="line.165"></a>
<span class="sourceLineNo">166</span>                }<a name="line.166"></a>
<span class="sourceLineNo">167</span><a name="line.167"></a>
<span class="sourceLineNo">168</span>                for (ILazyDataset d : data) {<a name="line.168"></a>
<span class="sourceLineNo">169</span>                        if (d instanceof LazyDatasetBase) {<a name="line.169"></a>
<span class="sourceLineNo">170</span>                                dtype = DTypeUtils.getBestDType(dtype, ((LazyDatasetBase) d).getDType());<a name="line.170"></a>
<span class="sourceLineNo">171</span>                        } else {<a name="line.171"></a>
<span class="sourceLineNo">172</span>                                dtype = DTypeUtils.getBestDType(dtype, DTypeUtils.getDTypeFromClass(d.getElementClass(), d.getElementsPerItem()));<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><a name="line.175"></a>
<span class="sourceLineNo">176</span>                for (ILazyDataset d : data) {<a name="line.176"></a>
<span class="sourceLineNo">177</span>                        String n = d.getName();<a name="line.177"></a>
<span class="sourceLineNo">178</span>                        if (n != null) {<a name="line.178"></a>
<span class="sourceLineNo">179</span>                                name = n;<a name="line.179"></a>
<span class="sourceLineNo">180</span>                                break;<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>        }<a name="line.183"></a>
<span class="sourceLineNo">184</span><a name="line.184"></a>
<span class="sourceLineNo">185</span>        @Override<a name="line.185"></a>
<span class="sourceLineNo">186</span>        public Class&lt;?&gt; getElementClass() {<a name="line.186"></a>
<span class="sourceLineNo">187</span>                return DTypeUtils.getElementClass(dtype);<a name="line.187"></a>
<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>        @Override<a name="line.190"></a>
<span class="sourceLineNo">191</span>        public int getElementsPerItem() {<a name="line.191"></a>
<span class="sourceLineNo">192</span>                return isize;<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 int getDType() {<a name="line.196"></a>
<span class="sourceLineNo">197</span>                return dtype;<a name="line.197"></a>
<span class="sourceLineNo">198</span>        }<a name="line.198"></a>
<span class="sourceLineNo">199</span><a name="line.199"></a>
<span class="sourceLineNo">200</span>        @Override<a name="line.200"></a>
<span class="sourceLineNo">201</span>        public int getSize() {<a name="line.201"></a>
<span class="sourceLineNo">202</span>                return size;<a name="line.202"></a>
<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
<span class="sourceLineNo">204</span><a name="line.204"></a>
<span class="sourceLineNo">205</span>        @Override<a name="line.205"></a>
<span class="sourceLineNo">206</span>        public void setShape(int... shape) {<a name="line.206"></a>
<span class="sourceLineNo">207</span>                throw new UnsupportedOperationException("Not implemented");<a name="line.207"></a>
<span class="sourceLineNo">208</span>        }<a name="line.208"></a>
<span class="sourceLineNo">209</span><a name="line.209"></a>
<span class="sourceLineNo">210</span>        @Override<a name="line.210"></a>
<span class="sourceLineNo">211</span>        public ILazyDataset squeezeEnds() {<a name="line.211"></a>
<span class="sourceLineNo">212</span>                throw new UnsupportedOperationException("Not implemented");<a name="line.212"></a>
<span class="sourceLineNo">213</span>        }<a name="line.213"></a>
<span class="sourceLineNo">214</span><a name="line.214"></a>
<span class="sourceLineNo">215</span>        @Override<a name="line.215"></a>
<span class="sourceLineNo">216</span>        public Dataset getSlice(int[] start, int[] stop, int[] step) throws DatasetException {<a name="line.216"></a>
<span class="sourceLineNo">217</span>                return getSlice(null, new SliceND(shape, start, stop, step));<a name="line.217"></a>
<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
<span class="sourceLineNo">219</span><a name="line.219"></a>
<span class="sourceLineNo">220</span>        @Override<a name="line.220"></a>
<span class="sourceLineNo">221</span>        public Dataset getSlice(IMonitor monitor, int[] start, int[] stop, int[] step) throws DatasetException {<a name="line.221"></a>
<span class="sourceLineNo">222</span>                return getSlice(monitor, new SliceND(shape, start, stop, step));<a name="line.222"></a>
<span class="sourceLineNo">223</span>        }<a name="line.223"></a>
<span class="sourceLineNo">224</span><a name="line.224"></a>
<span class="sourceLineNo">225</span>        @Override<a name="line.225"></a>
<span class="sourceLineNo">226</span>        public Dataset getSlice(IMonitor monitor, SliceND slice) throws DatasetException {<a name="line.226"></a>
<span class="sourceLineNo">227</span>                int[] start = slice.getStart();<a name="line.227"></a>
<span class="sourceLineNo">228</span>                int[] stop  = slice.getStop();<a name="line.228"></a>
<span class="sourceLineNo">229</span>                int[] step  = slice.getStep();<a name="line.229"></a>
<span class="sourceLineNo">230</span><a name="line.230"></a>
<span class="sourceLineNo">231</span>                if (base != null) {<a name="line.231"></a>
<span class="sourceLineNo">232</span>                        for (int i = 0; i &lt; shape.length; i++) {<a name="line.232"></a>
<span class="sourceLineNo">233</span>                                start[i] = sliceStart[i] + start[i] * sliceStep[i];<a name="line.233"></a>
<span class="sourceLineNo">234</span>                                stop[i]  = sliceStart[i] + (stop[i] - 1) * sliceStep[i] + 1;<a name="line.234"></a>
<span class="sourceLineNo">235</span>                                step[i]  = step[i] * sliceStep[i];<a name="line.235"></a>
<span class="sourceLineNo">236</span>                        }<a name="line.236"></a>
<span class="sourceLineNo">237</span>                        return base.getSlice(monitor, start, stop, step);<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>                // convert first dimension's slice to individual slices per stored dataset<a name="line.240"></a>
<span class="sourceLineNo">241</span>                int fb = start[0];<a name="line.241"></a>
<span class="sourceLineNo">242</span>                int fe = stop[0];<a name="line.242"></a>
<span class="sourceLineNo">243</span>                int fs = step[0];<a name="line.243"></a>
<span class="sourceLineNo">244</span><a name="line.244"></a>
<span class="sourceLineNo">245</span>                List&lt;Dataset&gt; sliced = new ArrayList&lt;Dataset&gt;();<a name="line.245"></a>
<span class="sourceLineNo">246</span>                int op = fb;<a name="line.246"></a>
<span class="sourceLineNo">247</span>                int p = op;<a name="line.247"></a>
<span class="sourceLineNo">248</span>                ILazyDataset od = data[map[op]];<a name="line.248"></a>
<span class="sourceLineNo">249</span>                ILazyDataset nd; <a name="line.249"></a>
<span class="sourceLineNo">250</span>                while (p &lt; fe) {<a name="line.250"></a>
<span class="sourceLineNo">251</span>                        <a name="line.251"></a>
<span class="sourceLineNo">252</span>                        if (monitor!=null &amp;&amp; monitor.isCancelled()) throw new DatasetException("Slice cancelled");<a name="line.252"></a>
<span class="sourceLineNo">253</span>                        nd = data[map[p]];<a name="line.253"></a>
<span class="sourceLineNo">254</span>                        if (nd != od) {<a name="line.254"></a>
<span class="sourceLineNo">255</span>                                start[0] = op - offset[map[op]];<a name="line.255"></a>
<span class="sourceLineNo">256</span>                                stop[0] = p - offset[map[op]];<a name="line.256"></a>
<span class="sourceLineNo">257</span>                                Dataset a = DatasetUtils.convertToDataset(od.getSlice(monitor, start, stop, step));<a name="line.257"></a>
<span class="sourceLineNo">258</span>                                sliced.add(a.cast(dtype));<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>                                od = nd;<a name="line.260"></a>
<span class="sourceLineNo">261</span>                                op = p;<a name="line.261"></a>
<span class="sourceLineNo">262</span>                        }<a name="line.262"></a>
<span class="sourceLineNo">263</span>                        p += fs;<a name="line.263"></a>
<span class="sourceLineNo">264</span>                }<a name="line.264"></a>
<span class="sourceLineNo">265</span>                start[0] = op - offset[map[op]];<a name="line.265"></a>
<span class="sourceLineNo">266</span>                stop[0] = p - offset[map[op]];<a name="line.266"></a>
<span class="sourceLineNo">267</span>                Dataset a = DatasetUtils.convertToDataset(od.getSlice(monitor, start, stop, step));<a name="line.267"></a>
<span class="sourceLineNo">268</span>                sliced.add(a.cast(dtype));<a name="line.268"></a>
<span class="sourceLineNo">269</span><a name="line.269"></a>
<span class="sourceLineNo">270</span>                Dataset d = DatasetUtils.concatenate(sliced.toArray(new Dataset[0]), 0);<a name="line.270"></a>
<span class="sourceLineNo">271</span>                d.setName(name);<a name="line.271"></a>
<span class="sourceLineNo">272</span>                return d;<a name="line.272"></a>
<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
<span class="sourceLineNo">274</span><a name="line.274"></a>
<span class="sourceLineNo">275</span>        @Override<a name="line.275"></a>
<span class="sourceLineNo">276</span>        public Dataset getSlice(Slice... slice) throws DatasetException {<a name="line.276"></a>
<span class="sourceLineNo">277</span>                return getSlice(null, slice);<a name="line.277"></a>
<span class="sourceLineNo">278</span>        }<a name="line.278"></a>
<span class="sourceLineNo">279</span><a name="line.279"></a>
<span class="sourceLineNo">280</span>        @Override<a name="line.280"></a>
<span class="sourceLineNo">281</span>        public Dataset getSlice(SliceND slice) throws DatasetException {<a name="line.281"></a>
<span class="sourceLineNo">282</span>                return getSlice(null, slice);<a name="line.282"></a>
<span class="sourceLineNo">283</span>        }<a name="line.283"></a>
<span class="sourceLineNo">284</span><a name="line.284"></a>
<span class="sourceLineNo">285</span>        @Override<a name="line.285"></a>
<span class="sourceLineNo">286</span>        public Dataset getSlice(IMonitor monitor, Slice... slice) throws DatasetException {<a name="line.286"></a>
<span class="sourceLineNo">287</span>                return getSlice(monitor, new SliceND(shape, slice));<a name="line.287"></a>
<span class="sourceLineNo">288</span>        }<a name="line.288"></a>
<span class="sourceLineNo">289</span><a name="line.289"></a>
<span class="sourceLineNo">290</span>        @Override<a name="line.290"></a>
<span class="sourceLineNo">291</span>        public AggregateDataset getSliceView(Slice... slice) {<a name="line.291"></a>
<span class="sourceLineNo">292</span>                return getSliceView(new SliceND(shape, slice));<a name="line.292"></a>
<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
<span class="sourceLineNo">294</span><a name="line.294"></a>
<span class="sourceLineNo">295</span>        @Override<a name="line.295"></a>
<span class="sourceLineNo">296</span>        public AggregateDataset getSliceView(int[] start, int[] stop, int[] step) {<a name="line.296"></a>
<span class="sourceLineNo">297</span>                return getSliceView(new SliceND(shape, start, stop, step));<a name="line.297"></a>
<span class="sourceLineNo">298</span>        }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>        @Override<a name="line.300"></a>
<span class="sourceLineNo">301</span>        public AggregateDataset getSliceView(SliceND slice) {<a name="line.301"></a>
<span class="sourceLineNo">302</span>                AggregateDataset lazy = new AggregateDataset(isize, slice.getShape(), dtype);<a name="line.302"></a>
<span class="sourceLineNo">303</span>                lazy.sliceStart = slice.getStart();<a name="line.303"></a>
<span class="sourceLineNo">304</span>                lazy.sliceStep  = slice.getStep();<a name="line.304"></a>
<span class="sourceLineNo">305</span>                lazy.name = name + "[" + slice + "]";<a name="line.305"></a>
<span class="sourceLineNo">306</span>                lazy.base = base == null ? this : base;<a name="line.306"></a>
<span class="sourceLineNo">307</span>                return lazy;<a name="line.307"></a>
<span class="sourceLineNo">308</span>        }<a name="line.308"></a>
<span class="sourceLineNo">309</span><a name="line.309"></a>
<span class="sourceLineNo">310</span>        @Override<a name="line.310"></a>
<span class="sourceLineNo">311</span>        public AggregateDataset getTransposedView(int... axes) {<a name="line.311"></a>
<span class="sourceLineNo">312</span>                throw new UnsupportedOperationException("Not implemented");<a name="line.312"></a>
<span class="sourceLineNo">313</span>        }<a name="line.313"></a>
<span class="sourceLineNo">314</span><a name="line.314"></a>
<span class="sourceLineNo">315</span>        @Override<a name="line.315"></a>
<span class="sourceLineNo">316</span>        public AggregateDataset clone() {<a name="line.316"></a>
<span class="sourceLineNo">317</span>                throw new UnsupportedOperationException("Not implemented");<a name="line.317"></a>
<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
<span class="sourceLineNo">319</span><a name="line.319"></a>
<span class="sourceLineNo">320</span>        @Override<a name="line.320"></a>
<span class="sourceLineNo">321</span>        public String toString() {<a name="line.321"></a>
<span class="sourceLineNo">322</span>                StringBuilder out = new StringBuilder();<a name="line.322"></a>
<span class="sourceLineNo">323</span><a name="line.323"></a>
<span class="sourceLineNo">324</span>                if (name != null &amp;&amp; name.length() &gt; 0) {<a name="line.324"></a>
<span class="sourceLineNo">325</span>                        out.append("Aggregate dataset '");<a name="line.325"></a>
<span class="sourceLineNo">326</span>                        out.append(name);<a name="line.326"></a>
<span class="sourceLineNo">327</span>                        out.append("' has shape [");<a name="line.327"></a>
<span class="sourceLineNo">328</span>                } else {<a name="line.328"></a>
<span class="sourceLineNo">329</span>                        out.append("Aggregate dataset shape is [");<a name="line.329"></a>
<span class="sourceLineNo">330</span>                }<a name="line.330"></a>
<span class="sourceLineNo">331</span>                int rank = shape == null ? 0 : shape.length;<a name="line.331"></a>
<span class="sourceLineNo">332</span><a name="line.332"></a>
<span class="sourceLineNo">333</span>                if (rank &gt; 0 &amp;&amp; shape[0] &gt; 0) {<a name="line.333"></a>
<span class="sourceLineNo">334</span>                        out.append(shape[0]);<a name="line.334"></a>
<span class="sourceLineNo">335</span>                }<a name="line.335"></a>
<span class="sourceLineNo">336</span>                for (int i = 1; i &lt; rank; i++) {<a name="line.336"></a>
<span class="sourceLineNo">337</span>                        out.append(", " + shape[i]);<a name="line.337"></a>
<span class="sourceLineNo">338</span>                }<a name="line.338"></a>
<span class="sourceLineNo">339</span>                out.append(']');<a name="line.339"></a>
<span class="sourceLineNo">340</span><a name="line.340"></a>
<span class="sourceLineNo">341</span>                return out.toString();<a name="line.341"></a>
<span class="sourceLineNo">342</span>        }<a name="line.342"></a>
<span class="sourceLineNo">343</span>        <a name="line.343"></a>
<span class="sourceLineNo">344</span>        @Override<a name="line.344"></a>
<span class="sourceLineNo">345</span>        public void setErrors(Serializable errors) {<a name="line.345"></a>
<span class="sourceLineNo">346</span>                throw new RuntimeException("setLazyErrors is unimplemented for "+getClass().getSimpleName());<a name="line.346"></a>
<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
<span class="sourceLineNo">348</span>        <a name="line.348"></a>
<span class="sourceLineNo">349</span>        @Override<a name="line.349"></a>
<span class="sourceLineNo">350</span>        public ILazyDataset getErrors() {<a name="line.350"></a>
<span class="sourceLineNo">351</span>                return null;<a name="line.351"></a>
<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
<span class="sourceLineNo">353</span><a name="line.353"></a>
<span class="sourceLineNo">354</span>}<a name="line.354"></a>




























































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