def testVolume(self): qpd = NumpyData(self.floats4d, grid=self.grid, name="test") for idx in range(NVOLS): self.assertTrue(np.allclose(qpd.volume(idx), self.floats4d[..., idx]))
def run(self, options): self.debug("Run") method_name = options.pop("method") mode = options.pop("mode", "reg") self._save_transform = options.pop("save-transform", None) # Registration data. Need to know the reg data grid and number of volumes so progress # and output data can be interpreted correctly regdata_name = options.pop("reg", options.pop("data", None)) if not regdata_name: raise QpException("No registration data specified") elif regdata_name not in self.ivm.data: raise QpException("Registration data not found: %s" % regdata_name) regdata = self.ivm.data[regdata_name] reg_grid = regdata.grid reg_data = [ regdata, ] self._output_name = options.pop( "output-name", regdata.name + options.get("output-suffix", "_reg")) # Reference data. Defaults to same as reg data so MoCo can be # supported as self-registration refdata_name = options.pop("ref", regdata_name) ref_data = self.ivm.data[refdata_name] if ref_data.nvols > 1: refvol = options.pop("ref-vol", "median") if refvol == "median": refidx = int(ref_data.nvols / 2) elif refvol == "mean": raise NotImplementedError("Not yet implemented") else: refidx = refvol ref_data = NumpyData(ref_data.volume(refidx), ref_data.grid, "refdata") # Additional registration targets can be specified which will be transformed # in the same way as the main registration data. # # Useful for masks defined on an unregistered volume. add_reg = options.pop( "add-reg", options.pop("warp-rois", options.pop("warp-roi", ()))) # Handle case where additional registation targets are given as a string if isinstance(add_reg, six.string_types): add_reg = (add_reg, ) for name in add_reg: qpdata = self.ivm.data.get(name, None) if not qpdata: self.warn( "Removing non-existant data set from additional registration list: %s" % name) else: reg_data.append(qpdata.resample(reg_grid, suffix="")) self.debug("Have %i registration targets" % len(reg_data)) # Function input data must be passed as list of arguments for multiprocessingmethod = get_reg_method(method_name) options_pass = dict(options) options.clear() self.start_bg([method_name, mode, reg_data, ref_data, options_pass])