diff --git a/doc/BOZ analysis part I parameters determination.ipynb b/doc/BOZ analysis part I parameters determination.ipynb index 82f8741b4c106321dbadebfe1404186de0fdafb1..0ccc5807432373fe9ff6c5d60aa996794f337ddc 100644 --- a/doc/BOZ analysis part I parameters determination.ipynb +++ b/doc/BOZ analysis part I parameters determination.ipynb @@ -48,7 +48,9 @@ "darkrun = 478\n", "run = 477\n", "module = 15\n", - "gain = 0.5" + "gain = 0.5\n", + "sat_level = 500\n", + "rois_th = 1" ] }, { @@ -174,9 +176,11 @@ "metadata": {}, "outputs": [], "source": [ - "h, f = boz.inspect_histogram(params.proposal, params.run, params.module,\n", + "h, f = boz.inspect_histogram(params.arr,\n", + " params.arr_dark,\n", " mask=params.get_mask() #, extra_lines=True\n", " )\n", + "f.suptitle(f'p:{params.proposal} r:{params.run} d:{params.darkrun}')\n", "f.savefig(path+f'p{params.proposal}-r{params.run}-d{params.darkrun}-histogram.png', dpi=300)" ] }, @@ -187,18 +191,6 @@ "adding guide to the eye" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax = f.gca()\n", - "pf = np.polyfit([60, 220], [7, 4], 1)\n", - "ax.plot([40, 400], 2*10**np.polyval(pf, [40, 400]))\n", - "ax.plot([40, 400], 0.25*2*10**np.polyval(pf, [40, 400]))" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -212,7 +204,7 @@ "metadata": {}, "outputs": [], "source": [ - "params.rois_th = 4\n", + "params.rois_th = rois_th\n", "params.rois = boz.find_rois_from_params(params)" ] }, @@ -265,7 +257,7 @@ "metadata": {}, "outputs": [], "source": [ - "params.sat_level = 511\n", + "params.sat_level = sat_level\n", "res = boz.average_module(params.arr, dark=dark,\n", " ret='mean', mask=params.get_mask(), sat_roi=params.rois['sat'],\n", " sat_level=params.sat_level)\n", diff --git a/scripts/boz_parameters_job.sh b/scripts/boz_parameters_job.sh index a8c8013f123d31420b0a4f9f3c4d4e3f13d86edc..0d6dbedef745aa4f30c3923fb7d1571852ea2ce5 100644 --- a/scripts/boz_parameters_job.sh +++ b/scripts/boz_parameters_job.sh @@ -9,6 +9,7 @@ PROPOSAL=2619 DARK=$1 RUN=$2 GAIN=$3 +ROISTH=${4:-1} MODULE=15 source /etc/profile.d/modules.sh @@ -16,7 +17,7 @@ module load exfel module load exfel_anaconda3/1.1 echo processing run $RUN -mkdir r$RUN -papermill 'BOZ analysis part I parameters determination.ipynb' r$RUN/output.ipynb \ +mkdir ../../processed_runs/r$RUN +papermill 'BOZ analysis part I parameters determination.ipynb' ../../processed_runs/r$RUN/output.ipynb \ -p proposal $PROPOSAL -p darkrun $DARK -p run $RUN -p module $MODULE \ - -p gain $GAIN -k xfel + -p gain $GAIN -p rois_th $ROISTH -k xfel diff --git a/src/toolbox_scs/routines/boz.py b/src/toolbox_scs/routines/boz.py index 398dc703e9d649359566fad9b4ccc82bc7e3bbab..e208e61347800c610086d1a978d4d7d0c825fe06 100644 --- a/src/toolbox_scs/routines/boz.py +++ b/src/toolbox_scs/routines/boz.py @@ -497,29 +497,18 @@ def inspect_rois(data_mean, rois, threshold=None, allrois=False): return fig -def histogram_module(proposalNB, runNB, moduleNB, mask=None): +def histogram_module(arr, mask=None): """Compute a histogram of the 9 bits raw pixel values over a module. Inputs ------ - proposalNB: proposal number - runNB: run number - moduleNB: module number + arr: dask array of reshaped dssc data (trainId, pulseId, x, y) mask: optional bad pixel mask Returns ------- histogram """ - run = open_run(proposal=proposalNB, run=runNB) - - # DSSC - source = f'SCS_DET_DSSC1M-1/DET/{moduleNB}CH0:xtdf' - key = 'image.data' - - arr = run[source, key].dask_array() - arr = arr.rechunk((100, -1, -1, -1)) - if mask is not None: w = da.repeat(da.repeat(da.array(mask[None, None, :, :]), arr.shape[1], axis=1), arr.shape[0], axis=0) @@ -529,30 +518,37 @@ def histogram_module(proposalNB, runNB, moduleNB, mask=None): return da.bincount(arr.ravel(), minlength=512).compute() -def inspect_histogram(proposalNB, runNB, moduleNB, - mask=None, extra_lines=False): +def inspect_histogram(arr, arr_dark=None, mask=None, extra_lines=False): """Compute and plot a histogram of the 9 bits raw pixel values. Inputs ------ - proposalNB: proposal number - runNB: run number - moduleNB: module number + arr: dask array of reshaped dssc data (trainId, pulseId, x, y) + arr: dask array of reshaped dssc dark data (trainId, pulseId, x, y) mask: optional bad pixel mask extra_lines: boolean, default False, plot extra lines at period values Returns ------- - histogram + (h, hd): histogram of arr, arr_dark figure """ - h = histogram_module(proposalNB, runNB, moduleNB, mask=mask) from matplotlib.ticker import MultipleLocator f = plt.figure(figsize=(6, 3)) - plt.plot(np.arange(2**9), h, marker='o', + h = histogram_module(arr, mask=mask) + Sum_h = np.sum(h) + plt.plot(np.arange(2**9), h/Sum_h, marker='o', ms=3, markerfacecolor='none', lw=1) + if arr_dark is not None: + hd = histogram_module(arr_dark, mask=mask) + Sum_hd = np.sum(hd) + plt.plot(np.arange(2**9), hd/Sum_hd, marker='o', + ms=3, markerfacecolor='none', lw=1, c='k', alpha=.5) + else: + hd = None + if extra_lines: for k in range(50, 271): if not (k - 2) % 8: @@ -563,17 +559,14 @@ def inspect_histogram(proposalNB, runNB, moduleNB, plt.axvline(k, c='r', alpha=0.3, ls='--') plt.axvline(271, c='C1', alpha=0.5, ls='--') - plt.fill_between(np.arange(2**9)[30:51], h[30:51], 1, alpha=0.5) - plt.ylim([1, None]) plt.xlim([0, 2**9-1]) plt.yscale('log') plt.axes().xaxis.set_minor_locator(MultipleLocator(10)) plt.xlabel('DSSC pixel value') - plt.ylabel('counts') - plt.title(f'p{proposalNB} run {runNB}') + plt.ylabel('count frequency') - return h, f + return (h, hd), f def load_dssc_module(proposalNB, runNB, moduleNB=15,