From 0925cf63b6daadefcef1ea380e42f32fc12857da Mon Sep 17 00:00:00 2001 From: Gao Date: Fri, 5 May 2023 18:25:03 +0200 Subject: [PATCH] not finished --- Analyser/FitAnalyser.py | 14 +- ToolFunction/HomeMadeXarrayFunction.py | 246 +++++ ToolFunction/ToolFunction.py | 10 +- test.ipynb | 1328 +++++++----------------- 4 files changed, 618 insertions(+), 980 deletions(-) create mode 100644 ToolFunction/HomeMadeXarrayFunction.py diff --git a/Analyser/FitAnalyser.py b/Analyser/FitAnalyser.py index 52ed310..a04e237 100644 --- a/Analyser/FitAnalyser.py +++ b/Analyser/FitAnalyser.py @@ -293,13 +293,13 @@ class FitAnalyser(): x = dataArray['x'].to_numpy() else: if isinstance(x, str): - x = dataArray[x].to_numpy() if input_core_dims is None: kwargs.update( { "input_core_dims": [[x]], } ) + x = dataArray[x].to_numpy() if self.fitDim == 1: @@ -327,8 +327,8 @@ class FitAnalyser(): ) else: if isinstance(y, str): - y = dataArray[y].to_numpy() kwargs["input_core_dims"][0] = np.append(kwargs["input_core_dims"][0], y) + y = dataArray[y].to_numpy() elif input_core_dims is None: kwargs.update( { @@ -386,13 +386,13 @@ class FitAnalyser(): x = dataArray['x'].to_numpy() else: if isinstance(x, str): - x = dataArray[x].to_numpy() if input_core_dims is None: kwargs.update( { "input_core_dims": [[x], []], } ) + x = dataArray[x].to_numpy() if isinstance(paramsArray, type(self.fitModel.make_params())): @@ -414,8 +414,8 @@ class FitAnalyser(): ) else: if isinstance(y, str): - y = dataArray[y].to_numpy() kwargs["input_core_dims"][0] = np.append(kwargs["input_core_dims"][0], y) + y = dataArray[y].to_numpy() elif input_core_dims is None: kwargs.update( { @@ -492,8 +492,7 @@ class FitAnalyser(): if output_core_dims is None: kwargs.update( { - "output_core_dims": [[prefix+'x']], - "output_dtypes": float, + "output_core_dims": prefix+'x', } ) output_core_dims = [prefix+'x'] @@ -527,6 +526,7 @@ class FitAnalyser(): output_core_dims[0]: np.size(x), output_core_dims[1]: np.size(y), }, + # 'output_dtypes': float, # 'output_dtypes': { # output_core_dims[0]: float, # output_core_dims[1]: float, @@ -534,6 +534,8 @@ class FitAnalyser(): }, } ) + + # del kwargs['output_dtypes'] _x, _y = np.meshgrid(x, y) _x = _x.flatten() diff --git a/ToolFunction/HomeMadeXarrayFunction.py b/ToolFunction/HomeMadeXarrayFunction.py new file mode 100644 index 0000000..508fb81 --- /dev/null +++ b/ToolFunction/HomeMadeXarrayFunction.py @@ -0,0 +1,246 @@ +from __future__ import annotations + +from xarray.plot.dataarray_plot import _infer_line_data, _infer_xy_labels, _assert_valid_xy +from xarray.plot.facetgrid import _easy_facetgrid +from xarray.plot.utils import ( + _LINEWIDTH_RANGE, + _MARKERSIZE_RANGE, + _ensure_plottable, + _resolve_intervals_1dplot, + _update_axes, + get_axis, + label_from_attrs, +) + +from matplotlib.axes import Axes +from mpl_toolkits.mplot3d.art3d import Line3D +import numpy as np +from numpy.typing import ArrayLike + +from xarray.core.dataarray import DataArray +from xarray.core.types import ( + AspectOptions, + ScaleOptions, +) +from xarray.plot.facetgrid import FacetGrid + + +def _infer_errorbar_data( + darray: DataArray, + xerrdarray: DataArray | None, + yerrdarray: DataArray | None, + x: Hashable | None, + y: Hashable | None, + hue: Hashable | None +) -> tuple[DataArray, DataArray, DataArray | None, str]: + ndims = len(darray.dims) + + if x is not None and y is not None: + raise ValueError("Cannot specify both x and y kwargs for line plots.") + + if x is not None: + _assert_valid_xy(darray, x, "x") + + if y is not None: + _assert_valid_xy(darray, y, "y") + + if ndims == 1: + huename = None + hueplt = None + huelabel = "" + xerrplt = None + yerrplt = None + + if x is not None: + xplt = darray[x] + if xerrdarray is not None: + xerrplt = xerrdarray[x] + yplt = darray + if yerrdarray is not None: + yerrplt = yerrdarray + + elif y is not None: + xplt = darray + if xerrdarray is not None: + xerrplt = xerrdarray + yplt = darray[y] + if yerrdarray is not None: + yerrplt = yerrdarray[y] + + else: # Both x & y are None + dim = darray.dims[0] + xplt = darray[dim] + yplt = darray + if xerrdarray is not None: + xerrplt = xerrdarray[dim] + if yerrdarray is not None: + yerrplt = yerrdarray + + else: + if x is None and y is None and hue is None: + raise ValueError("For 2D inputs, please specify either hue, x or y.") + + if y is None: + if hue is not None: + _assert_valid_xy(darray, hue, "hue") + xname, huename = _infer_xy_labels(darray=darray, x=x, y=hue) + xplt = darray[xname] + if xerrdarray is not None: + xerrplt = xerrdarray[xname] + if xplt.ndim > 1: + if huename in darray.dims: + otherindex = 1 if darray.dims.index(huename) == 0 else 0 + otherdim = darray.dims[otherindex] + yplt = darray.transpose(otherdim, huename, transpose_coords=False) + if yerrdarray is not None: + yerrplt = yerrdarray.transpose(otherdim, huename, transpose_coords=False) + xplt = xplt.transpose(otherdim, huename, transpose_coords=False) + if xerrdarray is not None: + xerrplt = xerrplt.transpose(otherdim, huename, transpose_coords=False) + else: + raise ValueError( + "For 2D inputs, hue must be a dimension" + " i.e. one of " + repr(darray.dims) + ) + + else: + (xdim,) = darray[xname].dims + (huedim,) = darray[huename].dims + yplt = darray.transpose(xdim, huedim) + if yerrdarray is not None: + yerrplt = yerrdarray.transpose(xdim, huedim) + + else: + yname, huename = _infer_xy_labels(darray=darray, x=y, y=hue) + yplt = darray[yname] + if yerrdarray is not None: + yerrplt = yerrdarray[yname] + if yplt.ndim > 1: + if huename in darray.dims: + otherindex = 1 if darray.dims.index(huename) == 0 else 0 + otherdim = darray.dims[otherindex] + xplt = darray.transpose(otherdim, huename, transpose_coords=False) + if xerrdarray is not None: + xerrplt = xerrdarray.transpose(otherdim, huename, transpose_coords=False) + yplt = yplt.transpose(otherdim, huename, transpose_coords=False) + if yerrdarray is not None: + yerrplt = yerrplt.transpose(otherdim, huename, transpose_coords=False) + else: + raise ValueError( + "For 2D inputs, hue must be a dimension" + " i.e. one of " + repr(darray.dims) + ) + + else: + (ydim,) = darray[yname].dims + (huedim,) = darray[huename].dims + xplt = darray.transpose(ydim, huedim) + if xerrdarray is not None: + xerrplt = xerrdarray.transpose(ydim, huedim) + + huelabel = label_from_attrs(darray[huename]) + hueplt = darray[huename] + + return xplt, yplt, xerrplt, yerrplt, hueplt, huelabel + + +def errorbar( + darray: DataArray, + *args: Any, + xerr: Hashable | DataArray | None = None, + yerr: Hashable | DataArray | None = None, + row: Hashable | None = None, + col: Hashable | None = None, + figsize: Iterable[float] | None = None, + aspect: AspectOptions = None, + size: float | None = None, + ax: Axes | None = None, + hue: Hashable | None = None, + x: Hashable | None = None, + y: Hashable | None = None, + xincrease: bool | None = None, + yincrease: bool | None = None, + xscale: ScaleOptions = None, + yscale: ScaleOptions = None, + xticks: ArrayLike | None = None, + yticks: ArrayLike | None = None, + xlim: ArrayLike | None = None, + ylim: ArrayLike | None = None, + add_legend: bool = True, + _labels: bool = True, + **kwargs: Any, +) -> list[Line3D] | FacetGrid[DataArray]: + # Handle facetgrids first + if row or col: + allargs = locals().copy() + allargs.update(allargs.pop("kwargs")) + allargs.pop("darray") + return _easy_facetgrid(darray, line, kind="line", **allargs) + + ndims = len(darray.dims) + if ndims == 0 or darray.size == 0: + # TypeError to be consistent with pandas + raise TypeError("No numeric data to plot.") + if ndims > 2: + raise ValueError( + "Line plots are for 1- or 2-dimensional DataArrays. " + "Passed DataArray has {ndims} " + "dimensions".format(ndims=ndims) + ) + + # The allargs dict passed to _easy_facetgrid above contains args + if args == (): + args = kwargs.pop("args", ()) + else: + assert "args" not in kwargs + + ax = get_axis(figsize, size, aspect, ax) + + if isinstance(xerr, DataArray) or isinstance(yerr, DataArray): + xplt, yplt, xerr, yerr, hueplt, hue_label = _infer_errorbar_data(darray, xerr, yerr, x, y, hue) + else: + xplt, yplt, hueplt, hue_label = _infer_line_data(darray, x, y, hue) + + # Remove pd.Intervals if contained in xplt.values and/or yplt.values. + xplt_val, yplt_val, x_suffix, y_suffix, kwargs = _resolve_intervals_1dplot( + xplt.to_numpy(), yplt.to_numpy(), kwargs + ) + xlabel = label_from_attrs(xplt, extra=x_suffix) + ylabel = label_from_attrs(yplt, extra=y_suffix) + + _ensure_plottable(xplt_val, yplt_val) + + primitive = ax.errorbar(xplt_val, yplt_val, *args, xerr=xerr, yerr=yerr, **kwargs) + + if _labels: + if xlabel is not None: + ax.set_xlabel(xlabel) + + if ylabel is not None: + ax.set_ylabel(ylabel) + + ax.set_title(darray._title_for_slice()) + + if darray.ndim == 2 and add_legend: + assert hueplt is not None + ax.legend(handles=primitive, labels=list(hueplt.to_numpy()), title=hue_label) + + # Rotate dates on xlabels + # Do this without calling autofmt_xdate so that x-axes ticks + # on other subplots (if any) are not deleted. + # https://stackoverflow.com/questions/17430105/autofmt-xdate-deletes-x-axis-labels-of-all-subplots + if np.issubdtype(xplt.dtype, np.datetime64): + for xlabels in ax.get_xticklabels(): + xlabels.set_rotation(30) + xlabels.set_horizontalalignment("right") + + _update_axes(ax, xincrease, yincrease, xscale, yscale, xticks, yticks, xlim, ylim) + + return primitive + + +from xarray.plot.accessor import DataArrayPlotAccessor +# from xarray.plot.accessor import DatasetPlotAccessor + +def dataarray_plot_errorbar(DataArrayPlotAccessor, *args, **kwargs) -> list[Line3D] | FacetGrid[DataArray]: + return errorbar(DataArrayPlotAccessor._da, *args, **kwargs) \ No newline at end of file diff --git a/ToolFunction/ToolFunction.py b/ToolFunction/ToolFunction.py index f4ef047..241148f 100644 --- a/ToolFunction/ToolFunction.py +++ b/ToolFunction/ToolFunction.py @@ -14,7 +14,7 @@ def remove_bad_shots(dataArray, **kwargs): def auto_rechunk(dataSet): kwargs = { key: "auto" - for key in dataSet.dims.keys() + for key in dataSet.dims } return dataSet.chunk(**kwargs) @@ -29,4 +29,10 @@ def get_h5_file_path(folderpath, maxFileNum=None, filename='*.h5',): def get_date(): today = date.today() - return today.strftime("%y/%m/%d") \ No newline at end of file + return today.strftime("%y/%m/%d") + +def resolve_fit_result(fitResult): + + + + return \ No newline at end of file diff --git a/test.ipynb b/test.ipynb index ca14bdd..5267f6a 100644 --- a/test.ipynb +++ b/test.ipynb @@ -17,11 +17,20 @@ "import xarray as xr\n", "import numpy as np\n", "\n", + "from uncertainties import ufloat\n", + "from uncertainties import unumpy as unp\n", + "from uncertainties import umath\n", + "\n", "import matplotlib.pyplot as plt\n", "\n", "from DataContainer.ReadData import read_hdf5_file\n", "from Analyser.ImagingAnalyser import ImageAnalyser\n", "from Analyser.FitAnalyser import FitAnalyser\n", + "from ToolFunction.ToolFunction import *\n", + "\n", + "from ToolFunction.HomeMadeXarrayFunction import errorbar, dataarray_plot_errorbar\n", + "xr.plot.dataarray_plot.errorbar = errorbar\n", + "xr.plot.accessor.DataArrayPlotAccessor.errorbar = dataarray_plot_errorbar\n", "\n", "imageAnalyser = ImageAnalyser()" ] @@ -46,7 +55,7 @@ "
\n", "
\n", "

Client

\n", - "

Client-1a44c769-ea9b-11ed-88cc-80e82ce2fa8e

\n", + "

Client-40fde82e-eb61-11ed-b5b8-80e82ce2fa8e

\n", " \n", "\n", " \n", @@ -77,7 +86,7 @@ " \n", "
\n", "

LocalCluster

\n", - "

b16f0063

\n", + "

59371be7

\n", "
\n", " \n", "
\n", @@ -114,11 +123,11 @@ "
\n", "
\n", "

Scheduler

\n", - "

Scheduler-8571d7e2-e6e5-4263-a9ed-50018e90379b

\n", + "

Scheduler-7426a0dc-a821-4183-aff9-f5e87cca3088

\n", " \n", " \n", " \n", "
\n", - " Comm: tcp://127.0.0.1:55356\n", + " Comm: tcp://127.0.0.1:63721\n", " \n", " Workers: 6\n", @@ -160,7 +169,7 @@ " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -205,7 +214,7 @@ "
\n", - " Comm: tcp://127.0.0.1:55387\n", + " Comm: tcp://127.0.0.1:63745\n", " \n", " Total threads: 10\n", @@ -168,7 +177,7 @@ "
\n", - " Dashboard: http://127.0.0.1:55388/status\n", + " Dashboard: http://127.0.0.1:63749/status\n", " \n", " Memory: 9.31 GiB\n", @@ -176,13 +185,13 @@ "
\n", - " Nanny: tcp://127.0.0.1:55359\n", + " Nanny: tcp://127.0.0.1:63724\n", "
\n", - " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-646bafev\n", + " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-0sq_olis\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -250,7 +259,7 @@ "
\n", - " Comm: tcp://127.0.0.1:55374\n", + " Comm: tcp://127.0.0.1:63751\n", " \n", " Total threads: 10\n", @@ -213,7 +222,7 @@ "
\n", - " Dashboard: http://127.0.0.1:55385/status\n", + " Dashboard: http://127.0.0.1:63753/status\n", " \n", " Memory: 9.31 GiB\n", @@ -221,13 +230,13 @@ "
\n", - " Nanny: tcp://127.0.0.1:55360\n", + " Nanny: tcp://127.0.0.1:63725\n", "
\n", - " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-i7cnpql6\n", + " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-4q4rmsbv\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -295,7 +304,7 @@ "
\n", - " Comm: tcp://127.0.0.1:55390\n", + " Comm: tcp://127.0.0.1:63752\n", " \n", " Total threads: 10\n", @@ -258,7 +267,7 @@ "
\n", - " Dashboard: http://127.0.0.1:55392/status\n", + " Dashboard: http://127.0.0.1:63756/status\n", " \n", " Memory: 9.31 GiB\n", @@ -266,13 +275,13 @@ "
\n", - " Nanny: tcp://127.0.0.1:55361\n", + " Nanny: tcp://127.0.0.1:63726\n", "
\n", - " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-cm12p6g3\n", + " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-b4p4jg9b\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -340,7 +349,7 @@ "
\n", - " Comm: tcp://127.0.0.1:55391\n", + " Comm: tcp://127.0.0.1:63761\n", " \n", " Total threads: 10\n", @@ -303,7 +312,7 @@ "
\n", - " Dashboard: http://127.0.0.1:55393/status\n", + " Dashboard: http://127.0.0.1:63762/status\n", " \n", " Memory: 9.31 GiB\n", @@ -311,13 +320,13 @@ "
\n", - " Nanny: tcp://127.0.0.1:55362\n", + " Nanny: tcp://127.0.0.1:63727\n", "
\n", - " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-ift1r1_n\n", + " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-a20xylwp\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -385,7 +394,7 @@ "
\n", - " Comm: tcp://127.0.0.1:55396\n", + " Comm: tcp://127.0.0.1:63760\n", " \n", " Total threads: 10\n", @@ -348,7 +357,7 @@ "
\n", - " Dashboard: http://127.0.0.1:55397/status\n", + " Dashboard: http://127.0.0.1:63763/status\n", " \n", " Memory: 9.31 GiB\n", @@ -356,13 +365,13 @@ "
\n", - " Nanny: tcp://127.0.0.1:55363\n", + " Nanny: tcp://127.0.0.1:63728\n", "
\n", - " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-n0ircagt\n", + " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-00umhxwt\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", @@ -434,7 +443,7 @@ "" ], "text/plain": [ - "" + "" ] }, "execution_count": 2, @@ -473,11 +482,13 @@ "# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/05/03/0043/*.h5\"\n", "# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/04/18/0003/2023-04-18_0003_Evaporative_Cooling_000.h5\"\n", "\n", - "filepath = \"//DyLabNAS/Data/Repetition_scan/2023/04/21/0002/*.h5\"\n", + "# filepath = \"//DyLabNAS/Data/Repetition_scan/2023/04/21/0002/*.h5\"\n", "\n", "# filepath = r\"./testData/0000/*.h5\"\n", "\n", - "# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/04/18/0003/*.h5\"" + "# filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/04/18/0003/*.h5\"\n", + "\n", + "filepath = \"//DyLabNAS/Data/Evaporative_Cooling/2023/05/04/0000/*.h5\"" ] }, { @@ -502,32 +513,6 @@ "}" ] }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Today's date: 2023-05-04\n", - "d3 = 23/05/04\n", - "True\n" - ] - } - ], - "source": [ - "from datetime import date\n", - "\n", - "today = date.today()\n", - "print(\"Today's date:\", today)\n", - "\n", - "d3 = today.strftime(\"%y/%m/%d\")\n", - "print(\"d3 =\", d3)\n", - "print(isinstance(d3, str))" - ] - }, { "attachments": {}, "cell_type": "markdown", @@ -557,27 +542,6 @@ "# )" ] }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "final_amp\n", - "runs\n", - "x\n", - "y\n" - ] - } - ], - "source": [ - "for key in dataset.dims.keys():\n", - " print(key)" - ] - }, { "attachments": {}, "cell_type": "markdown", @@ -596,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -966,32 +930,30 @@ " fill: currentColor;\n", "}\n", "
<xarray.Dataset>\n",
-       "Dimensions:     (final_amp: 11, runs: 3, x: 1200, y: 1920)\n",
+       "Dimensions:     (runs: 3, x: 1200, y: 1920)\n",
        "Coordinates:\n",
-       "  * final_amp   (final_amp) float64 3e-05 5.5e-05 8e-05 ... 0.000255 0.00028\n",
        "  * runs        (runs) float64 0.0 1.0 2.0\n",
        "Dimensions without coordinates: x, y\n",
        "Data variables:\n",
-       "    atoms       (final_amp, runs, x, y) uint16 dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>\n",
-       "    background  (final_amp, runs, x, y) uint16 dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>\n",
-       "    dark        (final_amp, runs, x, y) uint16 dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>\n",
-       "    shotNum     (final_amp, runs) <U2 '00' '11' '22' '01' ... '10' '21' '32'\n",
-       "    OD          (final_amp, runs, x, y) float64 dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>\n",
-       "Attributes: (12/96)\n",
-       "    TOF_free:                          0.01\n",
+       "    atoms       (runs, x, y) uint16 dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>\n",
+       "    background  (runs, x, y) uint16 dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>\n",
+       "    dark        (runs, x, y) uint16 dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>\n",
+       "    shotNum     (runs) <U1 '0' '1' '2'\n",
+       "    OD          (runs, x, y) float64 dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>\n",
+       "Attributes: (12/101)\n",
+       "    TOF_free:                          0.015\n",
        "    abs_img_freq:                      110.858\n",
        "    absorption_imaging_flag:           True\n",
        "    backup_data:                       True\n",
        "    blink_off_time:                    nan\n",
        "    blink_on_time:                     nan\n",
        "    ...                                ...\n",
+       "    y_offset_img:                      0\n",
        "    z_offset:                          0.189\n",
        "    z_offset_img:                      0.189\n",
-       "    final_amp:                         [3.00e-05 5.50e-05 8.00e-05 1.05e-04 1...\n",
-       "    runs:                              [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1...\n",
-       "    scanAxis:                          ['final_amp', 'runs']\n",
-       "    scanAxisLength:                    [33. 33.]
\n", - " Comm: tcp://127.0.0.1:55399\n", + " Comm: tcp://127.0.0.1:63755\n", " \n", " Total threads: 10\n", @@ -393,7 +402,7 @@ "
\n", - " Dashboard: http://127.0.0.1:55400/status\n", + " Dashboard: http://127.0.0.1:63758/status\n", " \n", " Memory: 9.31 GiB\n", @@ -401,13 +410,13 @@ "
\n", - " Nanny: tcp://127.0.0.1:55364\n", + " Nanny: tcp://127.0.0.1:63729\n", "
\n", - " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-tym7j5xi\n", + " Local directory: C:\\Users\\data\\AppData\\Local\\Temp\\dask-worker-space\\worker-m7f8f51i\n", "
\n", + " runs: [0. 1. 2.]\n", + " scanAxis: ['runs']\n", + " scanAxisLength: [3.]
\n", " \n", " \n", " \n", " \n", - "
\n", " \n", @@ -1006,18 +968,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1027,79 +989,53 @@ "
Bytes 145.02 MiB 13.18 MiB 4.39 MiB
Shape (11, 3, 1200, 1920) (1, 1, 1200, 1920) (3, 1200, 1920) (1, 1200, 1920)
Dask graph 33 chunks in 103 graph layers 3 chunks in 10 graph layers
Data type
\n", "
\n", - " \n", - "\n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - "\n", - " \n", - " 11\n", - " 1\n", - "\n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " 1920\n", - " 1200\n", - " 3\n", + " 1920\n", + " 1200\n", + " 3\n", "\n", "
  • background
    (final_amp, runs, x, y)
    uint16
    dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>
    IMAGE_SUBCLASS :
    IMAGE_GRAYSCALE
    IMAGE_VERSION :
    1.2
    IMAGE_WHITE_IS_ZERO :
    0
    \n", + "
  • background
    (runs, x, y)
    uint16
    dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>
    IMAGE_SUBCLASS :
    IMAGE_GRAYSCALE
    IMAGE_VERSION :
    1.2
    IMAGE_WHITE_IS_ZERO :
    0
    \n", " \n", " \n", " \n", " \n", - "
    \n", " \n", @@ -1114,18 +1050,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1135,79 +1071,53 @@ "
    Bytes 145.02 MiB 13.18 MiB 4.39 MiB
    Shape (11, 3, 1200, 1920) (1, 1, 1200, 1920) (3, 1200, 1920) (1, 1200, 1920)
    Dask graph 33 chunks in 103 graph layers 3 chunks in 10 graph layers
    Data type
    \n", "
    \n", - " \n", - "\n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - "\n", - " \n", - " 11\n", - " 1\n", - "\n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " 1920\n", - " 1200\n", - " 3\n", + " 1920\n", + " 1200\n", + " 3\n", "\n", "
  • dark
    (final_amp, runs, x, y)
    uint16
    dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>
    IMAGE_SUBCLASS :
    IMAGE_GRAYSCALE
    IMAGE_VERSION :
    1.2
    IMAGE_WHITE_IS_ZERO :
    0
    \n", + "
  • dark
    (runs, x, y)
    uint16
    dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>
    IMAGE_SUBCLASS :
    IMAGE_GRAYSCALE
    IMAGE_VERSION :
    1.2
    IMAGE_WHITE_IS_ZERO :
    0
    \n", " \n", " \n", " \n", " \n", - "
    \n", " \n", @@ -1222,18 +1132,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1243,89 +1153,53 @@ "
    Bytes 145.02 MiB 13.18 MiB 4.39 MiB
    Shape (11, 3, 1200, 1920) (1, 1, 1200, 1920) (3, 1200, 1920) (1, 1200, 1920)
    Dask graph 33 chunks in 103 graph layers 3 chunks in 10 graph layers
    Data type
    \n", "
    \n", - " \n", - "\n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - "\n", - " \n", - " 11\n", - " 1\n", - "\n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " 1920\n", - " 1200\n", - " 3\n", + " 1920\n", + " 1200\n", + " 3\n", "\n", "
  • shotNum
    (final_amp, runs)
    <U2
    '00' '11' '22' ... '10' '21' '32'
    array([['00', '11', '22'],\n",
    -       "       ['01', '12', '23'],\n",
    -       "       ['02', '13', '24'],\n",
    -       "       ['03', '14', '25'],\n",
    -       "       ['04', '15', '26'],\n",
    -       "       ['05', '16', '27'],\n",
    -       "       ['06', '17', '28'],\n",
    -       "       ['07', '18', '29'],\n",
    -       "       ['08', '19', '30'],\n",
    -       "       ['09', '20', '31'],\n",
    -       "       ['10', '21', '32']], dtype='<U2')
  • OD
    (final_amp, runs, x, y)
    float64
    dask.array<chunksize=(1, 1, 1200, 1920), meta=np.ndarray>
    IMAGE_SUBCLASS :
    IMAGE_GRAYSCALE
    IMAGE_VERSION :
    1.2
    IMAGE_WHITE_IS_ZERO :
    0
    \n", + "
  • shotNum
    (runs)
    <U1
    '0' '1' '2'
    array(['0', '1', '2'], dtype='<U1')
  • OD
    (runs, x, y)
    float64
    dask.array<chunksize=(1, 1200, 1920), meta=np.ndarray>
    IMAGE_SUBCLASS :
    IMAGE_GRAYSCALE
    IMAGE_VERSION :
    1.2
    IMAGE_WHITE_IS_ZERO :
    0
    \n", " \n", " \n", " \n", " \n", - "
    \n", " \n", @@ -1340,18 +1214,18 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -1361,117 +1235,83 @@ "
    Bytes 580.08 MiB 52.73 MiB 17.58 MiB
    Shape (11, 3, 1200, 1920) (1, 1, 1200, 1920) (3, 1200, 1920) (1, 1200, 1920)
    Dask graph 33 chunks in 319 graph layers 3 chunks in 40 graph layers
    Data type
    \n", "
    \n", - " \n", - "\n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "\n", - " \n", - " \n", - "\n", - " \n", - " 11\n", - " 1\n", - "\n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", - " \n", + " \n", + " \n", "\n", " \n", - " \n", + " \n", "\n", " \n", - " 1920\n", - " 1200\n", - " 3\n", + " 1920\n", + " 1200\n", + " 3\n", "\n", "
    • final_amp
      PandasIndex
      PandasIndex(Float64Index([   3e-05,  5.5e-05,    8e-05, 0.000105,  0.00013, 0.000155,\n",
      -       "               0.00018, 0.000205,  0.00023, 0.000255,  0.00028],\n",
      -       "             dtype='float64', name='final_amp'))
    • runs
      PandasIndex
      PandasIndex(Float64Index([0.0, 1.0, 2.0], dtype='float64', name='runs'))
  • TOF_free :
    0.01
    abs_img_freq :
    110.858
    absorption_imaging_flag :
    True
    backup_data :
    True
    blink_off_time :
    nan
    blink_on_time :
    nan
    c_duration :
    0.2
    cmot_final_current :
    0.65
    cmot_hold :
    0.06
    cmot_initial_current :
    0.18
    compX_current :
    0.005
    compX_current_sg :
    0
    compX_final_current :
    0.002
    compX_initial_current :
    0.005
    compY_current :
    0
    compY_current_sg :
    0
    compY_final_current :
    0
    compY_initial_current :
    0
    compZ_current :
    0
    compZ_current_sg :
    0.189
    compZ_final_current :
    0.285
    compZ_initial_current :
    0
    default_camera :
    1
    evap_1_arm_1_final_pow :
    0.35
    evap_1_arm_1_mod_depth_final :
    0
    evap_1_arm_1_mod_depth_initial :
    1.0
    evap_1_arm_1_mod_ramp_duration :
    1.15
    evap_1_arm_1_pow_ramp_duration :
    1.65
    evap_1_arm_1_start_pow :
    7
    evap_1_arm_2_final_pow :
    5
    evap_1_arm_2_ramp_duration :
    0.5
    evap_1_arm_2_start_pow :
    0
    evap_1_mod_ramp_trunc_value :
    1
    evap_1_pow_ramp_trunc_value :
    1.0
    evap_1_rate_constant_1 :
    0.525
    evap_1_rate_constant_2 :
    0.51
    evap_2_arm_1_final_pow :
    0.037
    evap_2_arm_1_start_pow :
    0.35
    evap_2_arm_2_final_pow :
    0.09
    evap_2_arm_2_start_pow :
    5
    evap_2_ramp_duration :
    1.0
    evap_2_ramp_trunc_value :
    1.0
    evap_2_rate_constant_1 :
    0.37
    evap_2_rate_constant_2 :
    0.71
    evap_3_arm_1_final_pow :
    0.1038
    evap_3_arm_1_mod_depth_final :
    0.43
    evap_3_arm_1_mod_depth_initial :
    0
    evap_3_arm_1_start_pow :
    0.037
    evap_3_ramp_duration :
    0.1
    evap_3_ramp_trunc_value :
    1.0
    evap_3_rate_constant_1 :
    -0.879
    evap_3_rate_constant_2 :
    -0.297
    final_freq :
    104
    gradCoil_current :
    0.18
    gradCoil_current_sg :
    0
    imaging_method :
    in_situ_absorption
    imaging_pulse_duration :
    2.5e-05
    imaging_wavelength :
    4.21291e-07
    initial_amp :
    0.62
    initial_freq :
    101.896
    mod_depth_initial :
    1.0
    mot_3d_amp :
    0.62
    mot_3d_camera_exposure_time :
    0.002
    mot_3d_camera_trigger_duration :
    0.00025
    mot_3d_freq :
    101.896
    mot_load_duration :
    4
    odt_axis_camera_trigger_duration :
    0.002
    odt_hold_time_1 :
    0.01
    odt_hold_time_2 :
    0.1
    odt_hold_time_3 :
    0.1
    odt_hold_time_4 :
    1
    pow_arm_1 :
    7
    pow_arm_2 :
    0
    pulse_delay :
    8e-05
    push_amp :
    0.16
    push_freq :
    102.95
    ramp_duration :
    1
    recomp_ramp_duration :
    0.5
    recomp_ramp_pow_fin_arm_1 :
    0.1038
    recomp_ramp_pow_fin_arm_2 :
    0.09
    recomp_ramp_pow_ini_arm_1 :
    0.1038
    recomp_ramp_pow_ini_arm_2 :
    0.09
    save_results :
    False
    stern_gerlach_duration :
    0.001
    wait_after_2dmot_off :
    0
    wait_time_between_images :
    0.22
    x_offset :
    0
    x_offset_img :
    0
    y_offset :
    0
    y_offset_img :
    0
    z_offset :
    0.189
    z_offset_img :
    0.189
    final_amp :
    [3.00e-05 5.50e-05 8.00e-05 1.05e-04 1.30e-04 1.55e-04 1.80e-04 2.05e-04\n", - " 2.30e-04 2.55e-04 2.80e-04 3.00e-05 5.50e-05 8.00e-05 1.05e-04 1.30e-04\n", - " 1.55e-04 1.80e-04 2.05e-04 2.30e-04 2.55e-04 2.80e-04 3.00e-05 5.50e-05\n", - " 8.00e-05 1.05e-04 1.30e-04 1.55e-04 1.80e-04 2.05e-04 2.30e-04 2.55e-04\n", - " 2.80e-04]
    runs :
    [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 2. 2.\n", - " 2. 2. 2. 2. 2. 2. 2. 2. 2.]
    scanAxis :
    ['final_amp', 'runs']
    scanAxisLength :
    [33. 33.]
  • " + "
    • runs
      PandasIndex
      PandasIndex(Float64Index([0.0, 1.0, 2.0], dtype='float64', name='runs'))
  • TOF_free :
    0.015
    abs_img_freq :
    110.858
    absorption_imaging_flag :
    True
    backup_data :
    True
    blink_off_time :
    nan
    blink_on_time :
    nan
    c_duration :
    0.2
    cmot_final_current :
    0.65
    cmot_hold :
    0.06
    cmot_initial_current :
    0.18
    compX_current :
    0.005
    compX_current_sg :
    0
    compX_final_current :
    0.005
    compX_initial_current :
    0.005
    compY_current :
    0
    compY_current_sg :
    0
    compY_final_current :
    0.0
    compY_initial_current :
    0
    compZ_current :
    0
    compZ_current_sg :
    0.189
    compZ_final_current :
    0.275
    compZ_initial_current :
    0
    default_camera :
    0
    evap_1_arm_1_final_pow :
    0.35
    evap_1_arm_1_mod_depth_final :
    0
    evap_1_arm_1_mod_depth_initial :
    1.0
    evap_1_arm_1_mod_ramp_duration :
    1.15
    evap_1_arm_1_pow_ramp_duration :
    1.65
    evap_1_arm_1_start_pow :
    7
    evap_1_arm_2_final_pow :
    5
    evap_1_arm_2_ramp_duration :
    0.5
    evap_1_arm_2_start_pow :
    0
    evap_1_mod_ramp_trunc_value :
    1
    evap_1_pow_ramp_trunc_value :
    1.0
    evap_1_rate_constant_1 :
    0.525
    evap_1_rate_constant_2 :
    0.51
    evap_2_arm_1_final_pow :
    0.037
    evap_2_arm_1_start_pow :
    0.35
    evap_2_arm_2_final_pow :
    0.09
    evap_2_arm_2_start_pow :
    5
    evap_2_ramp_duration :
    1.0
    evap_2_ramp_trunc_value :
    1
    evap_2_rate_constant_1 :
    0.37
    evap_2_rate_constant_2 :
    0.71
    evap_3_arm_1_final_pow :
    0.1038
    evap_3_arm_1_mod_depth_final :
    0.43
    evap_3_arm_1_mod_depth_initial :
    0
    evap_3_arm_1_start_pow :
    0.037
    evap_3_ramp_duration :
    0.1
    evap_3_ramp_trunc_value :
    1
    evap_3_rate_constant_1 :
    -0.879
    evap_3_rate_constant_2 :
    -0.297
    final_amp :
    0.000105
    final_freq :
    104.0
    gradCoil_current :
    0.18
    gradCoil_current_sg :
    0
    imaging_method :
    in_situ_absorption
    imaging_pulse_duration :
    2.5e-05
    imaging_wavelength :
    4.21291e-07
    initial_amp :
    0.62
    initial_freq :
    102.0
    mod_depth_initial :
    1.0
    mot_3d_amp :
    0.62
    mot_3d_camera_exposure_time :
    0.002
    mot_3d_camera_trigger_duration :
    0.00025
    mot_3d_freq :
    102.0
    mot_load_duration :
    2
    odt_axis_camera_trigger_duration :
    0.002
    odt_hold_time_1 :
    0.01
    odt_hold_time_2 :
    0.1
    odt_hold_time_3 :
    0.1
    odt_hold_time_4 :
    0.5
    pow_arm_1 :
    7
    pow_arm_2 :
    0
    pulse_delay :
    8e-05
    push_amp :
    0.16
    push_freq :
    102.6
    ramp_duration :
    1
    recomp_ramp_duration :
    0.5
    recomp_ramp_pow_fin_arm_1 :
    0.1038
    recomp_ramp_pow_fin_arm_2 :
    0.09
    recomp_ramp_pow_ini_arm_1 :
    0.1038
    recomp_ramp_pow_ini_arm_2 :
    0.09
    save_results :
    False
    sin_mod_amplitude :
    0.0405
    sin_mod_dc_offset :
    0.09
    sin_mod_duration :
    nan
    sin_mod_freq :
    nan
    sin_mod_phase :
    0.0
    stern_gerlach_duration :
    0.001
    wait_after_2dmot_off :
    0
    wait_time_between_images :
    0.22
    x_offset :
    0
    x_offset_img :
    0
    y_offset :
    0
    y_offset_img :
    0
    z_offset :
    0.189
    z_offset_img :
    0.189
    runs :
    [0. 1. 2.]
    scanAxis :
    ['runs']
    scanAxisLength :
    [3.]
  • " ], "text/plain": [ "\n", - "Dimensions: (final_amp: 11, runs: 3, x: 1200, y: 1920)\n", + "Dimensions: (runs: 3, x: 1200, y: 1920)\n", "Coordinates:\n", - " * final_amp (final_amp) float64 3e-05 5.5e-05 8e-05 ... 0.000255 0.00028\n", " * runs (runs) float64 0.0 1.0 2.0\n", "Dimensions without coordinates: x, y\n", "Data variables:\n", - " atoms (final_amp, runs, x, y) uint16 dask.array\n", - " background (final_amp, runs, x, y) uint16 dask.array\n", - " dark (final_amp, runs, x, y) uint16 dask.array\n", - " shotNum (final_amp, runs) \n", - "Attributes: (12/96)\n", - " TOF_free: 0.01\n", + " atoms (runs, x, y) uint16 dask.array\n", + " background (runs, x, y) uint16 dask.array\n", + " dark (runs, x, y) uint16 dask.array\n", + " shotNum (runs) \n", + "Attributes: (12/101)\n", + " TOF_free: 0.015\n", " abs_img_freq: 110.858\n", " absorption_imaging_flag: True\n", " backup_data: True\n", " blink_off_time: nan\n", " blink_on_time: nan\n", " ... ...\n", + " y_offset_img: 0\n", " z_offset: 0.189\n", " z_offset_img: 0.189\n", - " final_amp: [3.00e-05 5.50e-05 8.00e-05 1.05e-04 1...\n", - " runs: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1...\n", - " scanAxis: ['final_amp', 'runs']\n", - " scanAxisLength: [33. 33.]" + " runs: [0. 1. 2.]\n", + " scanAxis: ['runs']\n", + " scanAxisLength: [3.]" ] }, - "execution_count": 13, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1482,620 +1322,64 @@ "dataSet" ] }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Select region of interests" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "imageAnalyser.center = (529, 962)\n", + "imageAnalyser.span = (100,100)\n", + "imageAnalyser.fraction = (0.1, 0.1)\n", + "\n", + "# imageAnalyser.center = (890, 1150)\n", + "# imageAnalyser.span = (600,600)\n", + "# imageAnalyser.fraction = (0.1, 0.1)\n", + "\n", + "# imageAnalyser.center = (890, 950)\n", + "# imageAnalyser.span = (100,100)\n", + "# imageAnalyser.fraction = (0.1, 0.1)\n", + "\n", + "dataSet_crop = imageAnalyser.crop_image(dataSet)" + ] + }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
    \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
    <xarray.Dataset>\n",
    -       "Dimensions:     (final_amp: 11, runs: 3, x: 1200, y: 1920)\n",
    -       "Coordinates:\n",
    -       "  * final_amp   (final_amp) float64 3e-05 5.5e-05 8e-05 ... 0.000255 0.00028\n",
    -       "  * runs        (runs) float64 0.0 1.0 2.0\n",
    -       "Dimensions without coordinates: x, y\n",
    -       "Data variables:\n",
    -       "    atoms       (final_amp, runs, x, y) uint16 98 101 109 106 ... 146 140 140\n",
    -       "    background  (final_amp, runs, x, y) uint16 99 101 113 103 ... 147 137 137\n",
    -       "    dark        (final_amp, runs, x, y) uint16 50 51 51 50 50 ... 50 51 50 49 49\n",
    -       "    shotNum     (final_amp, runs) <U2 '00' '11' '22' '01' ... '10' '21' '32'\n",
    -       "    OD          (final_amp, runs, x, y) float64 nan nan ... -0.03352 -0.03352\n",
    -       "Attributes: (12/96)\n",
    -       "    TOF_free:                          0.01\n",
    -       "    abs_img_freq:                      110.858\n",
    -       "    absorption_imaging_flag:           True\n",
    -       "    backup_data:                       True\n",
    -       "    blink_off_time:                    nan\n",
    -       "    blink_on_time:                     nan\n",
    -       "    ...                                ...\n",
    -       "    z_offset:                          0.189\n",
    -       "    z_offset_img:                      0.189\n",
    -       "    final_amp:                         [3.00e-05 5.50e-05 8.00e-05 1.05e-04 1...\n",
    -       "    runs:                              [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1...\n",
    -       "    scanAxis:                          ['final_amp', 'runs']\n",
    -       "    scanAxisLength:                    [33. 33.]
    " - ], "text/plain": [ - "\n", - "Dimensions: (final_amp: 11, runs: 3, x: 1200, y: 1920)\n", - "Coordinates:\n", - " * final_amp (final_amp) float64 3e-05 5.5e-05 8e-05 ... 0.000255 0.00028\n", - " * runs (runs) float64 0.0 1.0 2.0\n", - "Dimensions without coordinates: x, y\n", - "Data variables:\n", - " atoms (final_amp, runs, x, y) uint16 98 101 109 106 ... 146 140 140\n", - " background (final_amp, runs, x, y) uint16 99 101 113 103 ... 147 137 137\n", - " dark (final_amp, runs, x, y) uint16 50 51 51 50 50 ... 50 51 50 49 49\n", - " shotNum (final_amp, runs) " ] }, - "execution_count": 18, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA5EAAAEiCAYAAABgE1ZNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOx9e7xWU/7/+6mmhFQ0EsXpK5JkRIPGpNNXLg0h+rpOOWiGMigMNcYktzCuY9QwjEOuv8m1MQ0yHRNiXGIMuU6HcIyJVGhK9fz+2J/P2u+9ns9ZZz+nQ6X1fr3Oa+1nrbXXXnvttdbe5/P+XArFYrGIiIiIiIiIiIiIiIiIiIgcaLamOxARERERERERERERERGx7iD+ExkRERERERERERERERGRG/GfyIiIiIiIiIiIiIiIiIjciP9ERkRERERERERERERERORG/CcyIiIiIiIiIiIiIiIiIjfiP5ERERERERERERERERERuRH/iYyIiIiIiIiIiIiIiIjIjfhPZERERERERERERERERERuxH8iIyIiIiIiIiIiIiIiInIj/hMZERERERERERERERERkRvxn8iI9RLFYhHnn38+ttxyS7Ru3RqVlZV49dVXGzzv3nvvxY477ohWrVphxx13xP333/8N9DYiImJ1cN9992H//fdHhw4dUCgU8NJLL+U6L673iIh1B1999RXOOecc9OrVCxtttBG23HJLDB8+HB9++GGD58a1HhFRPuI/kRGNxvLly9d0FxqNyy+/HFdddRV++9vf4rnnnsMWW2yBfffdF0uWLKn3nNmzZ+PII4/EsGHD8PLLL2PYsGE44ogj8Oyzz36DPY+IWDNYl9f7F198gb322guXXnpp7nPieo9YX7GurvUvv/wSL774Is477zy8+OKLuO+++/Dmm2/i4IMPDp4X13pERCNRjIjIif79+xdPOeWU4pgxY4qbbbZZce+99y7OmzevCKA4Z84cV2/hwoVFAMWZM2cWi8VicebMmUUAxRkzZhR32223YuvWrYt9+/Ytvv766+6cl156qVhZWVnceOONi23atCnuuuuuxeeee+5ruY9Vq1YVt9hii+Kll17q8v773/8W27ZtW/zd735X73lHHHFE8YADDsjk7b///sWjjjrqa+lnRMSaxLdlvTOs/teHuN4j1hd8G9e64u9//3sRQPHdd9+tt05c6xERjUNkIiPKwq233ooWLVrgqaeewg033FDWueeeey6uvPJKPP/882jRogVOOOEEV3bssceic+fOeO655/DCCy9g7Nix+M53vlNvW4MGDcLGG28c/KsP8+bNw0cffYT99tvP5bVq1Qr9+/fH008/Xe95s2fPzpwDAPvvv3/wnIiIdRnfhvXeWMT1HrE+4du61hctWoRCoYB27drVWyeu9YiIxqHFmu5AxLqFbt264fLLL3e/a2trc5978cUXo3///gCAsWPH4sADD8R///tfbLDBBnjvvffw85//HDvssAMAYLvttgu2ddNNN2Hp0qXl3wCAjz76CADQsWPHTH7Hjh3x7rvvBs+zztH2IiK+bfg2rPfGIq73iPUJ38a1/t///hdjx47FMcccg0022aTeenGtR0Q0DvGfyIiy0KdPn0afu/POO7vjTp06AQA+/vhjbL311jjjjDMwYsQITJkyBQMHDsT//d//Ydttt623ra222qrR/VAUCoXM72KxWJLXFOdERKyr+Dat98YgrveI9QXftrX+1Vdf4aijjsKqVaswadKkBuvHtR4RUT6iOmtEWdhoo40yv5s1S6ZQsVh0eV999ZV5Lquw6Oa8atUqAMD555+PV199FQceeCD++te/NugdbXVUXrbYYgsAKJEyfvzxxyXSSP+8cs+JiFiX8W1Y741FXO8R6xO+TWv9q6++whFHHIF58+bhscceC7KQQFzrERGNRWQiI1YL3/3udwEAdXV16N27NwDkdp/vY/vtt8f222+PMWPG4Oijj8Ytt9yCIUOGmHVXR+Wla9eu2GKLLfDYY4+5Pi9fvhxPPPEELrvssnrP69u3Lx577DGMGTPG5T366KP4wQ9+0Kh+RESsa1gX13tjEdd7xPqMdXWt6z+Qb731FmbOnInNNtuswXPiWo+IaBziP5ERq4XWrVtjzz33xKWXXoqKigosWLAAv/zlL8tqY+nSpfj5z3+OoUOHomvXrnj//ffx3HPP4fDDD6/3nNVReSkUChg9ejQuueQSbLfddthuu+1wySWXYMMNN8Qxxxzj6g0fPhxbbbUVJk6cCAA4/fTTsffee+Oyyy7DIYccggcffBAzZszAk08+2ei+RESsS1gX1zsAfPrpp3jvvfdcvLg33ngDQMJAqGZCXO8RESnWxbW+YsUKDB06FC+++CL+9Kc/YeXKlY5h3HTTTdGyZUsAca1HRDQVojprxGrjD3/4A7766iv06dMHp59+Oi666KKyzm/evDk++eQTDB8+HNtvvz2OOOIIDBo0CBMmTPiaegycffbZGD16NEaNGoU+ffrggw8+wKOPPoo2bdq4Ou+99x7q6urc7x/84Ae4++67ccstt2DnnXdGdXU17rnnHuyxxx5fWz8jItY2rIvr/aGHHkLv3r1x4IEHAgCOOuoo9O7dG7/73e9cnbjeIyKyWNfW+vvvv4+HHnoI77//PnbZZRd06tTJ/bGn1bjWIyKaBoUiK7xHRERERERERERERERERAQQmciIiIiIiIiIiIiIiIiI3Ij/REZERERERERERERERETkRvwnMiIiIiIiIiIiIiIiIiI34j+REREREREREREREREREbkR/4mMiIiIiIiIiIiIiIiIyI34T2REREREREREREREREREbrRY0x34urFq1Sp8+OGHaNOmDQqFwpruTkRERADFYhFLlizBlltuiWbNypNxxbUeEbHuYHXWOhDXe0TEuoLVXetrErW1tZmYoiHsvvvuaN68+dfco7UL3/o4ke+//z66dOmyprsRERFRBubPn4/OnTuXdU5c6xER6x4as9aBuN4jItY1NHatr0lssskmWLVkSYNqm0sBXPWb3+DUU0/9Jrq11uBbz0S2adNGjsYAOJRKpns1TzLOvoGOT5T05sDVtM4GadY2myTpu88nabs+adkjku4x0WjrfyT9l6SD06INdkrS/95L9beR9DH5OS4tetdq38fWct6xdN49Xh/4ctL+u4sp8/okGShlM/i62p88fQmgOd3Xysa2FejL/0jZv8pte2sj7z1tlPKMsXTQOajzjtt8D/nxQzru6bXJ8OfY6sBvK+89D5f0NkmXAbia1m1+ZNd6KwD7yu/HqJb/7E9Mi3bePEn/YT17fRaVkrZOi/5n0yTVOfPPn6dlOz0oB2/W3/G+NKdnSxubSt6nZc7DreS8D4zzdpayzP0NknR6A/UU8lxPOrK06AbdL3Qv2p4L6+sx0r1tGuXtKekzRv1jJL2z/ibd/hQaP3r2bl/XZ8HXlX9Ujt0qzbrjY+88fn9499qOnu9n8h5wc5LP0zkyU9J9qYznsIdDpP0HjXsNlR0gZX+x9uk7JC1n3wHS+QSkc6q+fabxax2w1rtA19Pscvdw2Yv6yXOelfd84/7ukj4c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hd72ZcuWYdiwYfja176Grl27YsiQIfjZz37mthdy+0eNGoXf//73eOeddwAAf/rTn/Diiy/irLPOAlDYbW9uinWsAzbeWwsb6wcGNtZbFxvrrY+Nd6NYaN/WDWhJtm3bhn379qFbt26x+m7dumHLli1t1KowURRh1qxZGDVqFAYPHgwArq3aebz33nut3kafxx57DKtWrcJrr72W2Fbobf/rX/+KxYsXY9asWfj2t7+NV199Fddddx1KS0sxefLkgm7/jTfeiB07duCEE05Au3btsG/fPtx22224+OKLARR+3zcnxTjWARvvrYmN9QMDG+uth431tsHGu1EsHNA/IpmSkpLY/1EUJeoKhWuvvRZvvPEGXnzxxcS2QjyPjRs3Yvr06Vi+fDkOP/zwBvcrxLYDwP79+zFs2DDMmzcPADBkyBC89dZbWLx4MSZPnuz2K8T2P/744/jFL36BRx55BCeeeCLWrFmDGTNmoGfPnrj88svdfoXY9pai2M7VxnvrYWP9wKLYztXGeutRzGMdsPFuFA8H9HLWLl26oF27dgnr5NatWxMWnEJg2rRpWLZsGZ5//nn06tXL1Xfv3h0ACvI8Vq1aha1bt2Lo0KFo37492rdvj5UrV+JHP/oR2rdv79pXiG0HgB49emDQoEGxuoEDB+L9998HUNh9/+///u+YPXs2LrroIpx00km47LLLMHPmTMyfPx9AYbe9uSm2sQ7YeG9tbKwfGNhYbx1srLcdNt6NYuGA/hF52GGHYejQoVixYkWsfsWKFfjSl77URq1KEkURrr32Wjz11FP4r//6L/Tr1y+2vV+/fujevXvsPPbu3YuVK1e2+Xl8+ctfxtq1a7FmzRr3N2zYMFx66aVYs2YNjjvuuIJtOwCMHDkyEXL9nXfeQd++fQEUdt9/8sknOOSQ+BBu166dCwNeyG1vboplrAM23tsKG+sHBjbWWwcb622HjXejaGjVMD5tAIcCv//++6N169ZFM2bMiDp06BDV1ta2ddMcV199ddSpU6eopqYm2rx5s/v75JNP3D6333571KlTp+ipp56K1q5dG1188cUFG85ZRnCLosJu+6uvvhq1b98+uu2226I///nP0cMPPxwdccQR0S9+8Qu3T6G2//LLL4+OPfZYFwb8qaeeirp06RLdcMMNbp9CbXtLUAxjPYpsvLcVNtYPHGystw021lsHG+9GsXDA/4iMoii6++67o759+0aHHXZYdOqpp7rw2oUCAPVvyZIlbp/9+/dHc+fOjbp37x6VlpZGZ5xxRrR27dq2a3QA/0FT6G1/5plnosGDB0elpaXRCSecEN17772x7YXa/rq6umj69OlRnz59osMPPzw67rjjojlz5kR79uxx+xRq21uKQh/rUWTjvS2xsX7gYGO99bGx3jrYeDeKhZIoiqLWVj8NwzAMwzAMwzCM4uSA9ok0DMMwDMMwDMMwmhf7EWkYhmEYhmEYhmGkxn5EGoZhGIZhGIZhGKmxH5GGYRiGYRiGYRhGauxHpGEYhmEYhmEYhpEa+xFpGIZhGIZhGIZhpMZ+RBqGYRiGYRiGYRipsR+RhmEYhmEYhmEYRmrsR6RhGIZhGIZhGIaRGvsRaRiGYRiGYRiGYaTGfkQahmEYhmEYhmEYqbEfkUbR8NBDD6Fz587Ys2dPrP7888/H5MmT26hVhmG0BDbeDePgwMa6YRQn9iPSKBq+9rWvYd++fVi2bJmr27ZtG5599llcccUVbdgywzCaGxvvhnFwYGPdMIoT+xFpFA1lZWW45JJLsGTJElf38MMPo1evXqioqGi7hhmG0ezYeDeMgwMb64ZRnNiPSKOo+MY3voHly5dj06ZNAIAlS5agsrISJSUlbdwywzCaGxvvhnFwYGPdMIqPkiiKorZuhGHkw9ChQ3HBBRdg/PjxOO2001BbW4vevXu3dbMMw2gBbLwbxsGBjXXDKC7at3UDDCNfpkyZggULFmDTpk0YO3asPWQM4wDGxrthHBzYWDeM4sKUSKPoqKurQ48ePVBfX4+HHnoIF154YVs3yTCMFsLGu2EcHNhYN4ziwnwijaLjqKOOwvnnn48jjzwSEydObOvmGIbRgth4N4yDAxvrhlFc2I9IoyjZvHkzLr30UpSWlrZ1UwzDaGFsvBvGwYGNdcMoHmw5q1FUfPTRR1i+fDkuvfRSrFu3Dl/84hfbukmGYbQQNt4N4+DAxrphFB8WWMcoKk499VRs374dd9xxhz1kDOMAx8a7YRwc2Fg3jOLDlEjDMAzDMAzDMAwjNeYTaRiGYRiGYRiGYaTGfkQahmEYhmEYhmEYqbEfkYZhGIZhGIZhGEZq7EekYRiGYRiGYRiGkRr7EWkYhmEYhmEYhmGkxn5EGoZhGIZhGIZhGKmxH5GGYRiGYRiGYRhGauxHpGEYhmEYhmEYhpEa+xFpGIZhGIZhGIZhpOb/A9Oc76yRrVLNAAAAAElFTkSuQmCC", + "text/plain": [ + "
    " + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "from ToolFunction.ToolFunction import *\n", - "\n", - "remove_bad_shots(dataSet['OD'], runs=0)" + "# dataSet_crop.OD.isel(runs=[0]).plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])\n", + "dataSet_crop.OD.plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0])" ] }, { @@ -2103,38 +1387,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Select region of interests" + "## Remove the background" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ - "imageAnalyser.center = (529, 962)\n", - "imageAnalyser.span = (100,100)\n", - "imageAnalyser.fraction = (0.1, 0.1)\n", - "\n", - "# imageAnalyser.center = (890, 1150)\n", - "# imageAnalyser.span = (600,600)\n", - "# imageAnalyser.fraction = (0.1, 0.1)\n", - "\n", - "# imageAnalyser.center = (890, 950)\n", - "# imageAnalyser.span = (100,100)\n", - "# imageAnalyser.fraction = (0.1, 0.1)\n", - "\n", - "dataSet_crop = imageAnalyser.crop_image(dataSet)" + "dataSet_crop['OD'] = dataSet_crop['OD'] + 500" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ - "dataSet_crop.OD.isel(runs=[0]).plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])\n", - "# dataSet_crop.OD.plot()" + "dataSet_crop['OD'] = imageAnalyser.substract_offset(dataSet_crop['OD'])" ] }, { @@ -2142,16 +1413,36 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Remove the background" + "# Test Fit" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "dataSet_crop['OD'] = dataSet_crop['OD'] + 500" + "fitAnalyser = FitAnalyser(\"Two Gaussian-2D\", fitDim=2)\n", + "\n", + "params = fitAnalyser.guess(dataSet_crop.OD, dask=\"parallelized\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "fitResult = fitAnalyser.fit(dataSet_crop.OD, params, dask=\"parallelized\")# .load()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "fitCurve = fitAnalyser.eval(fitResult, x=np.arange(100), y=np.arange(100), dask=\"parallelized\").load()" ] }, { @@ -2160,15 +1451,51 @@ "metadata": {}, "outputs": [], "source": [ - "dataSet_crop['OD'] = imageAnalyser.substract_offset(dataSet_crop['OD'])" + "fitCurve" ] }, { - "attachments": {}, - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 14, "metadata": {}, + "outputs": [], "source": [ - "# Test Fit" + "fitResult = fitAnalyser.fit(dataSet_crop.OD, params, dask=\"parallelized\").load()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "f:\\Jianshun\\analyseScript\\Analyser\\FitAnalyser.py:544: FutureWarning: ``meta`` should be given in the ``dask_gufunc_kwargs`` parameter. It will be removed as direct parameter in a future version.\n", + " return xr.apply_ufunc(self._eval_2D, fitResultArray, kwargs={\"x\":_x, \"y\":_y, \"shape\":(len(x), len(y))}, **kwargs)\n" + ] + }, + { + "ename": "ValueError", + "evalue": "Invalid otype specification", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32mf:\\Jianshun\\analyseScript\\test.ipynb Cell 25\u001b[0m in \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m fitCurve \u001b[39m=\u001b[39m fitAnalyser\u001b[39m.\u001b[39;49meval(fitResult, x\u001b[39m=\u001b[39;49mnp\u001b[39m.\u001b[39;49marange(\u001b[39m100\u001b[39;49m), y\u001b[39m=\u001b[39;49mnp\u001b[39m.\u001b[39;49marange(\u001b[39m100\u001b[39;49m), dask\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mparallelized\u001b[39;49m\u001b[39m\"\u001b[39;49m, meta \u001b[39m=\u001b[39;49m np\u001b[39m.\u001b[39;49mndarray((\u001b[39m0\u001b[39;49m,\u001b[39m0\u001b[39;49m), dtype\u001b[39m=\u001b[39;49m\u001b[39mfloat\u001b[39;49m))\u001b[39m.\u001b[39mload()\n", + "File \u001b[1;32mf:\\Jianshun\\analyseScript\\Analyser\\FitAnalyser.py:544\u001b[0m, in \u001b[0;36mFitAnalyser.eval\u001b[1;34m(self, fitResultArray, x, y, output_core_dims, prefix, dask, vectorize, **kwargs)\u001b[0m\n\u001b[0;32m 541\u001b[0m _x \u001b[39m=\u001b[39m _x\u001b[39m.\u001b[39mflatten()\n\u001b[0;32m 542\u001b[0m _y \u001b[39m=\u001b[39m _y\u001b[39m.\u001b[39mflatten()\n\u001b[1;32m--> 544\u001b[0m \u001b[39mreturn\u001b[39;00m xr\u001b[39m.\u001b[39mapply_ufunc(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_eval_2D, fitResultArray, kwargs\u001b[39m=\u001b[39m{\u001b[39m\"\u001b[39m\u001b[39mx\u001b[39m\u001b[39m\"\u001b[39m:_x, \u001b[39m\"\u001b[39m\u001b[39my\u001b[39m\u001b[39m\"\u001b[39m:_y, \u001b[39m\"\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m\"\u001b[39m:(\u001b[39mlen\u001b[39m(x), \u001b[39mlen\u001b[39m(y))}, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs)\n", + "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\xarray\\core\\computation.py:1196\u001b[0m, in \u001b[0;36mapply_ufunc\u001b[1;34m(func, input_core_dims, output_core_dims, exclude_dims, vectorize, join, dataset_join, dataset_fill_value, keep_attrs, kwargs, dask, output_dtypes, output_sizes, meta, dask_gufunc_kwargs, *args)\u001b[0m\n\u001b[0;32m 1194\u001b[0m \u001b[39m# feed DataArray apply_variable_ufunc through apply_dataarray_vfunc\u001b[39;00m\n\u001b[0;32m 1195\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(a, DataArray) \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m args):\n\u001b[1;32m-> 1196\u001b[0m \u001b[39mreturn\u001b[39;00m apply_dataarray_vfunc(\n\u001b[0;32m 1197\u001b[0m variables_vfunc,\n\u001b[0;32m 1198\u001b[0m \u001b[39m*\u001b[39;49margs,\n\u001b[0;32m 1199\u001b[0m signature\u001b[39m=\u001b[39;49msignature,\n\u001b[0;32m 1200\u001b[0m join\u001b[39m=\u001b[39;49mjoin,\n\u001b[0;32m 1201\u001b[0m exclude_dims\u001b[39m=\u001b[39;49mexclude_dims,\n\u001b[0;32m 1202\u001b[0m keep_attrs\u001b[39m=\u001b[39;49mkeep_attrs,\n\u001b[0;32m 1203\u001b[0m )\n\u001b[0;32m 1204\u001b[0m \u001b[39m# feed Variables directly through apply_variable_ufunc\u001b[39;00m\n\u001b[0;32m 1205\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39many\u001b[39m(\u001b[39misinstance\u001b[39m(a, Variable) \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m args):\n", + "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\xarray\\core\\computation.py:303\u001b[0m, in \u001b[0;36mapply_dataarray_vfunc\u001b[1;34m(func, signature, join, exclude_dims, keep_attrs, *args)\u001b[0m\n\u001b[0;32m 298\u001b[0m result_coords, result_indexes \u001b[39m=\u001b[39m build_output_coords_and_indexes(\n\u001b[0;32m 299\u001b[0m args, signature, exclude_dims, combine_attrs\u001b[39m=\u001b[39mkeep_attrs\n\u001b[0;32m 300\u001b[0m )\n\u001b[0;32m 302\u001b[0m data_vars \u001b[39m=\u001b[39m [\u001b[39mgetattr\u001b[39m(a, \u001b[39m\"\u001b[39m\u001b[39mvariable\u001b[39m\u001b[39m\"\u001b[39m, a) \u001b[39mfor\u001b[39;00m a \u001b[39min\u001b[39;00m args]\n\u001b[1;32m--> 303\u001b[0m result_var \u001b[39m=\u001b[39m func(\u001b[39m*\u001b[39;49mdata_vars)\n\u001b[0;32m 305\u001b[0m out: \u001b[39mtuple\u001b[39m[DataArray, \u001b[39m.\u001b[39m\u001b[39m.\u001b[39m\u001b[39m.\u001b[39m] \u001b[39m|\u001b[39m DataArray\n\u001b[0;32m 306\u001b[0m \u001b[39mif\u001b[39;00m signature\u001b[39m.\u001b[39mnum_outputs \u001b[39m>\u001b[39m \u001b[39m1\u001b[39m:\n", + "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\xarray\\core\\computation.py:756\u001b[0m, in \u001b[0;36mapply_variable_ufunc\u001b[1;34m(func, signature, exclude_dims, dask, output_dtypes, vectorize, keep_attrs, dask_gufunc_kwargs, *args)\u001b[0m\n\u001b[0;32m 754\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 755\u001b[0m \u001b[39mif\u001b[39;00m vectorize:\n\u001b[1;32m--> 756\u001b[0m func \u001b[39m=\u001b[39m _vectorize(\n\u001b[0;32m 757\u001b[0m func, signature, output_dtypes\u001b[39m=\u001b[39;49moutput_dtypes, exclude_dims\u001b[39m=\u001b[39;49mexclude_dims\n\u001b[0;32m 758\u001b[0m )\n\u001b[0;32m 760\u001b[0m result_data \u001b[39m=\u001b[39m func(\u001b[39m*\u001b[39minput_data)\n\u001b[0;32m 762\u001b[0m \u001b[39mif\u001b[39;00m signature\u001b[39m.\u001b[39mnum_outputs \u001b[39m==\u001b[39m \u001b[39m1\u001b[39m:\n", + "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python39\\site-packages\\xarray\\core\\computation.py:637\u001b[0m, in \u001b[0;36m_vectorize\u001b[1;34m(func, signature, output_dtypes, exclude_dims)\u001b[0m\n\u001b[0;32m 635\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_vectorize\u001b[39m(func, signature, output_dtypes, exclude_dims):\n\u001b[0;32m 636\u001b[0m \u001b[39mif\u001b[39;00m signature\u001b[39m.\u001b[39mall_core_dims:\n\u001b[1;32m--> 637\u001b[0m func \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39;49mvectorize(\n\u001b[0;32m 638\u001b[0m func,\n\u001b[0;32m 639\u001b[0m otypes\u001b[39m=\u001b[39;49moutput_dtypes,\n\u001b[0;32m 640\u001b[0m signature\u001b[39m=\u001b[39;49msignature\u001b[39m.\u001b[39;49mto_gufunc_string(exclude_dims),\n\u001b[0;32m 641\u001b[0m )\n\u001b[0;32m 642\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 643\u001b[0m func \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mvectorize(func, otypes\u001b[39m=\u001b[39moutput_dtypes)\n", + "File \u001b[1;32mc:\\ProgramData\\Anaconda3\\envs\\py39\\lib\\site-packages\\numpy\\lib\\function_base.py:2122\u001b[0m, in \u001b[0;36mvectorize.__init__\u001b[1;34m(self, pyfunc, otypes, doc, excluded, cache, signature)\u001b[0m\n\u001b[0;32m 2120\u001b[0m otypes \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39m'\u001b[39m\u001b[39m.\u001b[39mjoin([_nx\u001b[39m.\u001b[39mdtype(x)\u001b[39m.\u001b[39mchar \u001b[39mfor\u001b[39;00m x \u001b[39min\u001b[39;00m otypes])\n\u001b[0;32m 2121\u001b[0m \u001b[39melif\u001b[39;00m otypes \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m-> 2122\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\u001b[39m\"\u001b[39m\u001b[39mInvalid otype specification\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m 2123\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39motypes \u001b[39m=\u001b[39m otypes\n\u001b[0;32m 2125\u001b[0m \u001b[39m# Excluded variable support\u001b[39;00m\n", + "\u001b[1;31mValueError\u001b[0m: Invalid otype specification" + ] + } + ], + "source": [ + "fitCurve = fitAnalyser.eval(fitResult, x=np.arange(100), y=np.arange(100), dask=\"parallelized\", meta = np.ndarray((0,0), dtype=float)).load()" ] }, { @@ -2177,9 +1504,8 @@ "metadata": {}, "outputs": [], "source": [ - "fitAnalyser = FitAnalyser(\"Two Gaussian-2D\", fitDim=2)\n", - "\n", - "params = fitAnalyser.guess(dataSet_crop.OD, dask=\"parallelized\")" + "auto_rechunk(fitResult)\n", + "fitResult" ] }, { @@ -2188,7 +1514,9 @@ "metadata": {}, "outputs": [], "source": [ - "fitResult = fitAnalyser.fit(dataSet_crop.OD, params, dask=\"parallelized\")" + "# fitCurve.isel(**{scanAxis[0]:np.arange(30), 'runs':range(dataSet_crop.OD['runs'].size)}).plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])\n", + "\n", + "fitCurve.plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0])" ] }, { @@ -2197,7 +1525,7 @@ "metadata": {}, "outputs": [], "source": [ - "fitCurve = fitAnalyser.eval(fitResult, x=np.arange(100), y=np.arange(100)).load()" + "fitResult.load()" ] }, { @@ -2206,7 +1534,11 @@ "metadata": {}, "outputs": [], "source": [ - "fitCurve.isel(**{scanAxis[0]:np.arange(30), 'runs':range(dataSet_crop.OD['runs'].size)}).plot.pcolormesh(cmap='jet', vmin=0, col=scanAxis[0], row=scanAxis[1])" + "def resolve_fit_result(fitResult):\n", + " \n", + " \n", + " \n", + " return" ] }, { @@ -2232,8 +1564,60 @@ "metadata": {}, "outputs": [], "source": [ + "Ncount.load()\n", + "\n", "fig = plt.figure()\n", - "Ncount.plot(fig=fig)" + "ax = fig.gca()\n", + "Ncount.plot(ax=ax)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fitAnalyser = FitAnalyser(\"Lorentzian With Offset\")\n", + "params = fitAnalyser.guess(Ncount, x='sin_mod_freq', dask=\"parallelized\", guess_kwargs=dict(negative=True))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fitResult = fitAnalyser.fit(Ncount, params, x='sin_mod_freq', dask=\"parallelized\")\n", + "fitCurve = fitAnalyser.eval(fitResult, x=np.arange(40), dask=\"parallelized\").load()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fig = plt.figure()\n", + "ax = fig.gca()\n", + "plt.errorbar([1], [1], yerr=[1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fitCurve.plot.errorbar(yerr=fitCurve)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "np.ufunc(fitCurve)" ] }, {