diff --git a/notebooks/.gitignore b/notebooks/.gitignore new file mode 100644 index 00000000..4e38c559 --- /dev/null +++ b/notebooks/.gitignore @@ -0,0 +1,4 @@ +.ipynb_checkpoints +resource_cache +strax_data +*.csv \ No newline at end of file diff --git a/notebooks/Advanced_tricks.ipynb b/notebooks/Advanced_tricks.ipynb index 0189a7c2..2512a1cf 100644 --- a/notebooks/Advanced_tricks.ipynb +++ b/notebooks/Advanced_tricks.ipynb @@ -384,7 +384,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -398,7 +398,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.9.17" }, "latex_envs": { "LaTeX_envs_menu_present": true, diff --git a/notebooks/Getting_started_wfsim.ipynb b/notebooks/Getting_started_wfsim.ipynb index d93f4ea5..c50c3281 100644 --- a/notebooks/Getting_started_wfsim.ipynb +++ b/notebooks/Getting_started_wfsim.ipynb @@ -50,6 +50,110 @@ "import json" ] }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ntauxfiles is not installed\n" + ] + }, + { + "data": { + "text/html": [ + "
\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", + "
moduleversionpathgit
0python3.9.17/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/b...None
1strax1.5.2/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
2straxen2.1.1/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
3cutax1.15.1/home/shenyangshi/cutax/cutaxbranch:bdt_ms | 277f174
4wfsim1.0.2/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
\n", + "
" + ], + "text/plain": [ + " module version path \\\n", + "0 python 3.9.17 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/b... \n", + "1 strax 1.5.2 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "2 straxen 2.1.1 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "3 cutax 1.15.1 /home/shenyangshi/cutax/cutax \n", + "4 wfsim 1.0.2 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "\n", + " git \n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 branch:bdt_ms | 277f174 \n", + "4 None " + ] + }, + "execution_count": 79, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "straxen.print_versions(modules=('strax', 'straxen', 'cutax', 'wfsim', 'ntauxfiles'))" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -67,7 +171,7 @@ "* `RawRecordsFromFaxOptical`\n", "* `RawRecordsFromFaxNveto`\n", "\n", - "The main difference is the way you specify instructions. The NT(1T) simulator depends on either a csv file or a defaul/user specified function to generate instructions. Epix takes input from G4 processed with epix. Optical takes optical input from G4 for photon channels and timings. And Nveto is a small modification to optical to provide nveto data" + "The main difference is the way you specify instructions. The NT(1T) simulator depends on either a csv file or a default/user specified function to generate instructions. Epix takes input from G4 processed with epix. Optical takes optical input from G4 for photon channels and timings. And Nveto is a small modification to optical to provide nveto data" ] }, { @@ -114,14 +218,23 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.567075Z", "start_time": "2021-05-10T12:46:14.546391Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/straxen/url_config.py:711: UserWarning: From straxen version 2.1.0 onward, URLConfig parameterswill be sorted alphabetically before being passed to the plugins, this will change the lineage hash for non-sorted URLs. To load data processed with non-sorted URLs, you will need to use an older version.\n", + " warnings.warn(\"From straxen version 2.1.0 onward, URLConfig parameters\"\n" + ] + } + ], "source": [ "st = straxen.contexts.xenonnt_simulation(cmt_run_id_sim='00001')" ] @@ -136,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.573720Z", @@ -164,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.580781Z", @@ -213,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.646190Z", @@ -230,30 +343,21 @@ "\u001b[0;34m\u001b[0m \u001b[0;34m\"\"\"Random instruction generator function. This will be called by wfsim if you do not specify \u001b[0m\n", "\u001b[0;34m specific instructions.\u001b[0m\n", "\u001b[0;34m :params c: wfsim configuration dict\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'nevents'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'event_rate'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'chunk_size'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'nchunk'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'total_time'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'chunk_size'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'nchunk'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzeros\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minstruction_dtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0muniform_times\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'total_time'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;36m1.\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m/\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0muniform_times\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1e9\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'event_number'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdigitize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;36m1e9\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'nchunk'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'chunk_size'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'recoil'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Use nest ids for ER\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqrt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tpc_radius'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'x'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcos\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'y'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mr\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'z'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrepeat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'tpc_length'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mnphotons\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m2000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2050\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0mnelectrons\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m10\u001b[0m \u001b[0;34m**\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'amp'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvstack\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnphotons\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnelectrons\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mT\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflatten\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mastype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\n", - "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minstructions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mFile:\u001b[0m ~/.local/lib/python3.8/site-packages/wfsim/strax_interface.py\n", - "\u001b[0;31mType:\u001b[0m function\n" + "\u001b[0;34m\u001b[0m \u001b[0mlog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwarning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'rand_instructions is deprecated, please use wfsim.random_instructions'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'drift_field'\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mc\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mlog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwarning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'drift field not specified!'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;31m# Do the conversion for now, don't break everything all at once\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0m_rand_instructions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mevent_rate\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'event_rate'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mchunk_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'chunk_size'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mn_chunk\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'n_chunk'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0menergy_range\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;31m# keV\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdrift_field\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'drift_field'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;31m# V/cm\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtpc_radius\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tpc_radius'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstraxen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtpc_r\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtpc_length\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tpc_length'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstraxen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtpc_z\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mnest_inst_types\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mFile:\u001b[0m /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/wfsim/strax_interface.py\n", + "\u001b[0;31mType:\u001b[0m function" ] }, "metadata": {}, @@ -274,7 +378,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.657185Z", @@ -288,19 +392,22 @@ "[(('Waveform simulator event number.', 'event_number'), numpy.int32),\n", " (('Quanta type (S1 photons or S2 electrons)', 'type'), numpy.int8),\n", " (('Time of the interaction [ns]', 'time'), numpy.int64),\n", - " (('X position of the cluster[cm]', 'x'), numpy.float32),\n", - " (('Y position of the cluster[cm]', 'y'), numpy.float32),\n", - " (('Z position of the cluster[cm]', 'z'), numpy.float32),\n", + " (('X position of the cluster [cm]', 'x'), numpy.float32),\n", + " (('Y position of the cluster [cm]', 'y'), numpy.float32),\n", + " (('Z position of the cluster [cm]', 'z'), numpy.float32),\n", " (('Number of quanta', 'amp'), numpy.int32),\n", " (('Recoil type of interaction.', 'recoil'), numpy.int8),\n", " (('Energy deposit of interaction', 'e_dep'), numpy.float32),\n", " (('Eventid like in geant4 output rootfile', 'g4id'), numpy.int32),\n", " (('Volume id giving the detector subvolume', 'vol_id'), numpy.int32),\n", " (('Local field [ V / cm ]', 'local_field'), numpy.float64),\n", - " (('Number of excitons', 'n_excitons'), numpy.int32)]" + " (('Number of excitons', 'n_excitons'), numpy.int32),\n", + " (('X position of the primary particle [cm]', 'x_pri'), numpy.float32),\n", + " (('Y position of the primary particle [cm]', 'y_pri'), numpy.float32),\n", + " (('Z position of the primary particle [cm]', 'z_pri'), numpy.float32)]" ] }, - "execution_count": 7, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -327,7 +434,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 80, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.670469Z", @@ -341,12 +448,11 @@ " half_life = 156.94e-9 #Kr intermediate state half-life in ns\n", " decay_energies = [32.2,9.4] # Decay energies in kev\n", " \n", - " n = c['nevents'] = c['event_rate'] * c['chunk_size'] * c['nchunk']\n", - " c['total_time'] = c['chunk_size'] * c['nchunk']\n", + " n = c['nevents'] = c['event_rate'] * c['chunk_size']\n", + " c['total_time'] = c['chunk_size']\n", "\n", " instructions = np.zeros(4 * n, dtype=wfsim.instruction_dtype)\n", - " instructions['event_number'] = np.digitize(instructions['time'],\n", - " 1e9 * np.arange(c['nchunk']) * c['chunk_size']) - 1\n", + " instructions['event_number'] = np.repeat(np.arange(n), 4)\n", " \n", " instructions['type'] = np.tile([1, 2], 2 * n)\n", " instructions['recoil'] = [7 for i in range(4 * n)]\n", @@ -405,7 +511,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 81, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.677858Z", @@ -435,7 +541,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 82, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.684799Z", @@ -464,7 +570,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 83, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.693993Z", @@ -494,7 +600,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 84, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.702591Z", @@ -518,7 +624,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 85, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.711697Z", @@ -549,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 86, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.742336Z", @@ -588,6 +694,14 @@ " \n", " \n", " 0\n", + " gain_model_mc\n", + " cmt://to_pe_model?version=ONLINE&run_id=plugin...\n", + " cmt://to_pe_model?run_id=00001&version=ONLINE\n", + " (raw_records, raw_records_he, raw_records_aqmo...\n", + " PMT gain model. Specify as (model_type, model_...\n", + " \n", + " \n", + " 1\n", " detector\n", " XENONnT\n", " XENONnT\n", @@ -595,7 +709,7 @@ " \n", " \n", " \n", - " 1\n", + " 2\n", " event_rate\n", " 1000\n", " 5\n", @@ -603,23 +717,31 @@ " Average number of events per second\n", " \n", " \n", - " 2\n", + " 3\n", " chunk_size\n", " 100\n", - " 10\n", + " 1\n", " (raw_records, raw_records_he, raw_records_aqmo...\n", " Duration of each chunk in seconds\n", " \n", " \n", - " 3\n", - " nchunk\n", + " 4\n", + " n_chunk\n", " 10\n", - " 1\n", + " <OMITTED>\n", " (raw_records, raw_records_he, raw_records_aqmo...\n", " Number of chunks to simulate\n", " \n", " \n", - " 4\n", + " 5\n", + " per_pmt_truth\n", + " False\n", + " <OMITTED>\n", + " (raw_records, raw_records_he, raw_records_aqmo...\n", + " Store the info per channel in the truth file\n", + " \n", + " \n", + " 6\n", " fax_file\n", " None\n", " path_to_g4_file\n", @@ -627,7 +749,7 @@ " Directory with fax instructions\n", " \n", " \n", - " 5\n", + " 7\n", " fax_config\n", " fax_config_nt_design.json\n", " fax_config_nt_design.json\n", @@ -635,7 +757,7 @@ " \n", " \n", " \n", - " 6\n", + " 8\n", " fax_config_override\n", " None\n", " <OMITTED>\n", @@ -643,7 +765,7 @@ " Dictionary with configuration option overrides\n", " \n", " \n", - " 7\n", + " 9\n", " fax_config_override_from_cmt\n", " None\n", " {'drift_time_gate': ('cmt_run_id', '00001', 'e...\n", @@ -651,15 +773,7 @@ " Dictionary of fax parameter names (key) mapped...\n", " \n", " \n", - " 8\n", - " gain_model_mc\n", - " (to_pe_per_run, to_pe_nt.npy)\n", - " (cmt_run_id, 00001, to_pe_model, v4, True)\n", - " (raw_records, raw_records_he, raw_records_aqmo...\n", - " PMT gain model. Specify as (model_type, model_...\n", - " \n", - " \n", - " 9\n", + " 10\n", " channel_map\n", " <OMITTED>\n", " (tpc, he, aqmon, aqmon_nv, tpc_blank, mv, aux_...\n", @@ -667,7 +781,7 @@ " immutabledict mapping subdetector to (min, max...\n", " \n", " \n", - " 10\n", + " 11\n", " n_tpc_pmts\n", " <OMITTED>\n", " 494\n", @@ -675,7 +789,7 @@ " Number of pmts in tpc. Provided by context\n", " \n", " \n", - " 11\n", + " 12\n", " n_top_pmts\n", " <OMITTED>\n", " 253\n", @@ -683,7 +797,7 @@ " Number of pmts in top array. Provided by context\n", " \n", " \n", - " 12\n", + " 13\n", " right_raw_extension\n", " 100000\n", " <OMITTED>\n", @@ -691,7 +805,7 @@ " \n", " \n", " \n", - " 13\n", + " 14\n", " seed\n", " False\n", " <OMITTED>\n", @@ -699,15 +813,15 @@ " Option for setting the seed of the random numb...\n", " \n", " \n", - " 14\n", - " neutron_veto\n", - " False\n", + " 15\n", + " gain_model_nv\n", " <OMITTED>\n", + " cmt://to_pe_model_nv?run_id=00001&version=ONLINE\n", " (raw_records, raw_records_he, raw_records_aqmo...\n", - " Flag for nVeto optical simulation instead of TPC\n", + " nveto gain model, provided by context\n", " \n", " \n", - " 15\n", + " 16\n", " epix_config\n", " {}\n", " path_to_config\n", @@ -715,7 +829,7 @@ " Dict with epix configuration\n", " \n", " \n", - " 16\n", + " 17\n", " entry_start\n", " 0\n", " <OMITTED>\n", @@ -723,7 +837,7 @@ " \n", " \n", " \n", - " 17\n", + " 18\n", " entry_stop\n", " None\n", " <OMITTED>\n", @@ -731,7 +845,7 @@ " G4 id event number to stop at. If -1 process t...\n", " \n", " \n", - " 18\n", + " 19\n", " fax_config_nveto\n", " None\n", " path_to_nveto_config_file\n", @@ -739,7 +853,7 @@ " \n", " \n", " \n", - " 19\n", + " 20\n", " fax_config_override_nveto\n", " None\n", " <OMITTED>\n", @@ -747,14 +861,6 @@ " Dictionary with configuration option overrides\n", " \n", " \n", - " 20\n", - " gain_model_nv\n", - " <OMITTED>\n", - " (cmt_run_id, 00001, to_pe_model_nv, v2, True)\n", - " (raw_records, raw_records_he, raw_records_aqmo...\n", - " nveto gain model, provided by context\n", - " \n", - " \n", " 21\n", " targets\n", " (tpc,)\n", @@ -767,52 +873,76 @@ "" ], "text/plain": [ - " option default \\\n", - "0 detector XENONnT \n", - "1 event_rate 1000 \n", - "2 chunk_size 100 \n", - "3 nchunk 10 \n", - "4 fax_file None \n", - "5 fax_config fax_config_nt_design.json \n", - "6 fax_config_override None \n", - "7 fax_config_override_from_cmt None \n", - "8 gain_model_mc (to_pe_per_run, to_pe_nt.npy) \n", - "9 channel_map \n", - "10 n_tpc_pmts \n", - "11 n_top_pmts \n", - "12 right_raw_extension 100000 \n", - "13 seed False \n", - "14 neutron_veto False \n", - "15 epix_config {} \n", - "16 entry_start 0 \n", - "17 entry_stop None \n", - "18 fax_config_nveto None \n", - "19 fax_config_override_nveto None \n", - "20 gain_model_nv \n", - "21 targets (tpc,) \n", + " option \\\n", + "0 gain_model_mc \n", + "1 detector \n", + "2 event_rate \n", + "3 chunk_size \n", + "4 n_chunk \n", + "5 per_pmt_truth \n", + "6 fax_file \n", + "7 fax_config \n", + "8 fax_config_override \n", + "9 fax_config_override_from_cmt \n", + "10 channel_map \n", + "11 n_tpc_pmts \n", + "12 n_top_pmts \n", + "13 right_raw_extension \n", + "14 seed \n", + "15 gain_model_nv \n", + "16 epix_config \n", + "17 entry_start \n", + "18 entry_stop \n", + "19 fax_config_nveto \n", + "20 fax_config_override_nveto \n", + "21 targets \n", + "\n", + " default \\\n", + "0 cmt://to_pe_model?version=ONLINE&run_id=plugin... \n", + "1 XENONnT \n", + "2 1000 \n", + "3 100 \n", + "4 10 \n", + "5 False \n", + "6 None \n", + "7 fax_config_nt_design.json \n", + "8 None \n", + "9 None \n", + "10 \n", + "11 \n", + "12 \n", + "13 100000 \n", + "14 False \n", + "15 \n", + "16 {} \n", + "17 0 \n", + "18 None \n", + "19 None \n", + "20 None \n", + "21 (tpc,) \n", "\n", " current \\\n", - "0 XENONnT \n", - "1 5 \n", - "2 10 \n", + "0 cmt://to_pe_model?run_id=00001&version=ONLINE \n", + "1 XENONnT \n", + "2 5 \n", "3 1 \n", - "4 path_to_g4_file \n", - "5 fax_config_nt_design.json \n", - "6 \n", - "7 {'drift_time_gate': ('cmt_run_id', '00001', 'e... \n", - "8 (cmt_run_id, 00001, to_pe_model, v4, True) \n", - "9 (tpc, he, aqmon, aqmon_nv, tpc_blank, mv, aux_... \n", - "10 494 \n", - "11 253 \n", - "12 \n", + "4 \n", + "5 \n", + "6 path_to_g4_file \n", + "7 fax_config_nt_design.json \n", + "8 \n", + "9 {'drift_time_gate': ('cmt_run_id', '00001', 'e... \n", + "10 (tpc, he, aqmon, aqmon_nv, tpc_blank, mv, aux_... \n", + "11 494 \n", + "12 253 \n", "13 \n", "14 \n", - "15 path_to_config \n", - "16 \n", + "15 cmt://to_pe_model_nv?run_id=00001&version=ONLINE \n", + "16 path_to_config \n", "17 \n", - "18 path_to_nveto_config_file \n", - "19 \n", - "20 (cmt_run_id, 00001, to_pe_model_nv, v2, True) \n", + "18 \n", + "19 path_to_nveto_config_file \n", + "20 \n", "21 \n", "\n", " applies_to \\\n", @@ -840,31 +970,31 @@ "21 (raw_records, raw_records_he, raw_records_aqmo... \n", "\n", " help \n", - "0 \n", - "1 Average number of events per second \n", - "2 Duration of each chunk in seconds \n", - "3 Number of chunks to simulate \n", - "4 Directory with fax instructions \n", - "5 \n", - "6 Dictionary with configuration option overrides \n", - "7 Dictionary of fax parameter names (key) mapped... \n", - "8 PMT gain model. Specify as (model_type, model_... \n", - "9 immutabledict mapping subdetector to (min, max... \n", - "10 Number of pmts in tpc. Provided by context \n", - "11 Number of pmts in top array. Provided by context \n", - "12 \n", - "13 Option for setting the seed of the random numb... \n", - "14 Flag for nVeto optical simulation instead of TPC \n", - "15 Dict with epix configuration \n", - "16 \n", - "17 G4 id event number to stop at. If -1 process t... \n", - "18 \n", - "19 Dictionary with configuration option overrides \n", - "20 nveto gain model, provided by context \n", + "0 PMT gain model. Specify as (model_type, model_... \n", + "1 \n", + "2 Average number of events per second \n", + "3 Duration of each chunk in seconds \n", + "4 Number of chunks to simulate \n", + "5 Store the info per channel in the truth file \n", + "6 Directory with fax instructions \n", + "7 \n", + "8 Dictionary with configuration option overrides \n", + "9 Dictionary of fax parameter names (key) mapped... \n", + "10 immutabledict mapping subdetector to (min, max... \n", + "11 Number of pmts in tpc. Provided by context \n", + "12 Number of pmts in top array. Provided by context \n", + "13 \n", + "14 Option for setting the seed of the random numb... \n", + "15 nveto gain model, provided by context \n", + "16 Dict with epix configuration \n", + "17 \n", + "18 G4 id event number to stop at. If -1 process t... \n", + "19 \n", + "20 Dictionary with configuration option overrides \n", "21 tuple with what data to simulate (tpc, nveto o... " ] }, - "execution_count": 14, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } @@ -882,7 +1012,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 87, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:14.750813Z", @@ -896,7 +1026,7 @@ "'fax_config_nt_design.json'" ] }, - "execution_count": 15, + "execution_count": 87, "metadata": {}, "output_type": "execute_result" } @@ -914,7 +1044,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 88, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:15.048319Z", @@ -925,10 +1055,10 @@ { "data": { "text/plain": [ - "dict_keys(['s1_model_type', 's2_luminescence_model', 'enable_gas_gap_warping', 'enable_pmt_afterpulses', 'enable_electron_afterpulses', 'enable_noise', 'field_distortion_on', 'enable_field_dependencies', 'url_base', 'photon_area_distribution', 's1_pattern_map', 's2_pattern_map', 'photon_ap_cdfs', 's2_luminescence', 'gas_gap_map', 'temperature', 'pressure', 'lxe_dielectric_constant', 'tpc_length', 'tpc_radius', 'anode_wire_radius', 'anode_field_domination_distance', 'elr_gas_gap_length', 'gate_to_anode_distance', 'drift_field', 'anode_voltage', 'diffusion_constant_longitudinal', 'diffusion_constant_transverse', 'drift_time_gate', 'drift_velocity_liquid', 'singlet_fraction_gas', 'singlet_lifetime_gas', 'singlet_lifetime_liquid', 'triplet_lifetime_gas', 'triplet_lifetime_liquid', 's1_ER_alpha_singlet_fraction', 's1_ER_primary_singlet_fraction', 's1_ER_recombination_fraction', 's1_ER_recombination_time', 's1_ER_secondary_singlet_fraction', 's1_NR_singlet_fraction', 'maximum_recombination_time', 's1_decay_spread', 's1_decay_time', 's1_detection_efficiency', 's2_mean_area_fraction_top', 's2_secondary_sc_gain', 's2_time_spread', 'electron_extraction_yield', 'electron_lifetime_liquid', 'electron_trapping_time', 'gas_drift_velocity_slope', 'p_double_pe_emision', 'pe_pulse_ts', 'pe_pulse_ys', 'pmt_ap_modifier', 'pmt_ap_t_modifier', 'pmt_pulse_time_rounding', 'pmt_transit_time_mean', 'pmt_transit_time_spread', 'photoelectric_modifier', 'photoelectric_p', 'photoelectric_t_center', 'photoelectric_t_spread', 'photoionization_modifier', 'sample_duration', 'samples_after_pulse_center', 'samples_before_pulse_center', 'samples_to_store_after', 'samples_to_store_before', 'pmt_circuit_load_resistor', 'external_amplification', 'high_energy_deamplification_factor', 'trigger_window', 'digitizer_bits', 'digitizer_reference_baseline', 'digitizer_voltage_range', 'special_thresholds', 'zle_threshold'])" + "dict_keys(['s1_model_type', 's2_time_model', 's2_luminescence_model', 's2_garfield_confine_position', 'se_gain_from_map', 'ext_eff_from_map', 'enable_gas_gap_warping', 'enable_pmt_afterpulses', 'enable_electron_afterpulses', 'enable_noise', 'field_distortion_on', 'field_distortion_model', 'enable_field_dependencies', 'url_base', 'photon_area_distribution', 's1_pattern_map', 's2_pattern_map', 's1_lce_correction_map', 's2_correction_map', 'se_gain_map', 's1_time_spline', 's2_time_spline', 'field_distortion_comsol_map', 'photon_ap_cdfs', 'noise_file', 's2_luminescence_gg', 's2_luminescence', 'gas_gap_map', 'garfield_gas_gap_map', 'field_dependencies_map', 'temperature', 'pressure', 'lxe_dielectric_constant', 'tpc_length', 'tpc_radius', 'anode_wire_radius', 'anode_field_domination_distance', 'elr_gas_gap_length', 'gate_to_anode_distance', 'drift_field', 'anode_voltage', 'diffusion_constant_longitudinal', 'diffusion_constant_transverse', 'drift_time_gate', 'drift_velocity_liquid', 'singlet_fraction_gas', 'singlet_lifetime_gas', 'singlet_lifetime_liquid', 'triplet_lifetime_gas', 'triplet_lifetime_liquid', 's1_ER_alpha_singlet_fraction', 's1_ER_primary_singlet_fraction', 's1_ER_recombination_fraction', 's1_ER_recombination_time', 's1_ER_secondary_singlet_fraction', 's1_NR_singlet_fraction', 'maximum_recombination_time', 's1_decay_spread', 's1_decay_time', 's1_detection_efficiency', 's2_mean_area_fraction_top', 's2_aft_sigma', 's2_aft_skewness', 's2_secondary_sc_gain', 's2_time_spread', 'electron_extraction_yield', 'electron_lifetime_liquid', 'electron_trapping_time', 'gas_drift_velocity_slope', 'g2_mean', 'p_double_pe_emision', 'pe_pulse_ts', 'pe_pulse_ys', 'pmt_ap_modifier', 'pmt_ap_t_modifier', 'pmt_pulse_time_rounding', 'pmt_transit_time_mean', 'pmt_transit_time_spread', 'photoelectric_modifier', 'photoelectric_p', 'photoelectric_t_center', 'photoelectric_t_spread', 'photoionization_modifier', 'sample_duration', 'samples_after_pulse_center', 'samples_before_pulse_center', 'samples_to_store_after', 'samples_to_store_before', 'pmt_circuit_load_resistor', 'external_amplification', 'high_energy_deamplification_factor', 'trigger_window', 'digitizer_bits', 'digitizer_reference_baseline', 'digitizer_voltage_range', 'special_thresholds', 'zle_threshold'])" ] }, - "execution_count": 16, + "execution_count": 88, "metadata": {}, "output_type": "execute_result" } @@ -947,7 +1077,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 89, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:15.055554Z", @@ -976,7 +1106,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 90, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:15.063269Z", @@ -1036,7 +1166,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 91, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:15.088492Z", @@ -1046,12 +1176,12 @@ "outputs": [], "source": [ "st = straxen.contexts.xenonnt_simulation(cmt_run_id_sim='00001')\n", - "st.set_config(dict(nchunk=1, event_rate=5, chunk_size=5, fax_file=None))" + "st.set_config(dict(event_rate=5, chunk_size=1, fax_file=None))" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 92, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:48.016971Z", @@ -1063,7 +1193,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "369591f713184bd3b1ebffec562ecc5d", + "model_id": "de3ee32e0c354d6ba875c1855eb5d05e", "version_major": 2, "version_minor": 0 }, @@ -1077,7 +1207,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7e690535c119454eb967a508ddc2c1e0", + "model_id": "fa9964d51b74435691e1df2f49253f04", "version_major": 2, "version_minor": 0 }, @@ -1109,7 +1239,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 93, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:55.867868Z", @@ -1120,7 +1250,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "809fba5e30704dfb9293479dd4037abd", + "model_id": "37817cd1ea694f1ba80da900b7c911fb", "version_major": 2, "version_minor": 0 }, @@ -1138,7 +1268,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 94, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:55.889545Z", @@ -1171,9 +1301,11 @@ " endtime\n", " center_time\n", " area\n", + " n_hits\n", " n_channels\n", " max_pmt\n", " max_pmt_area\n", + " n_saturated_channels\n", " range_50p_area\n", " range_90p_area\n", " area_fraction_top\n", @@ -1182,232 +1314,286 @@ " rise_time\n", " tight_coincidence\n", " type\n", + " max_diff\n", + " min_diff\n", " \n", " \n", " \n", " \n", " 0\n", " 100000030\n", - " 100000340\n", - " 100000116\n", - " 6.008117\n", + " 100000670\n", + " 100000205\n", + " 45.194511\n", + " 14\n", + " 13\n", + " 345\n", + " 5.892519\n", + " 0\n", + " 198.728180\n", + " 327.420563\n", + " 0.138998\n", + " 64\n", + " 10\n", + " 94.678757\n", + " 7\n", " 2\n", - " 487\n", - " 3.396131\n", - " 84.658058\n", - " 139.222778\n", - " 0.434743\n", - " 31\n", + " 80\n", " 10\n", - " 72.558640\n", - " 1\n", - " 0\n", " \n", " \n", " 1\n", - " 100085020\n", - " 100090330\n", - " 100086781\n", - " 6050.895996\n", - " 135\n", - " 138\n", - " 1673.483521\n", - " 805.982056\n", - " 2172.673828\n", - " 0.933084\n", - " 177\n", - " 30\n", - " 786.898987\n", - " 34\n", + " 100622470\n", + " 100626210\n", + " 100624258\n", + " 143.898376\n", + " 41\n", + " 17\n", + " 50\n", + " 45.115543\n", + " 0\n", + " 1164.394287\n", + " 2533.276855\n", + " 0.875330\n", + " 187\n", + " 20\n", + " 930.115356\n", + " 7\n", " 2\n", + " 500\n", + " 0\n", " \n", " \n", " 2\n", - " 300000050\n", - " 300000360\n", - " 300000139\n", - " 9.503628\n", - " 2\n", - " 111\n", - " 5.884011\n", - " 71.074753\n", - " 175.408966\n", - " 0.619133\n", - " 31\n", + " 300000020\n", + " 300000410\n", + " 300000128\n", + " 22.863621\n", + " 7\n", + " 6\n", + " 483\n", + " 5.560007\n", + " 0\n", + " 73.276711\n", + " 153.896225\n", + " 0.276379\n", + " 39\n", " 10\n", - " 59.963516\n", + " 53.755302\n", + " 5\n", " 1\n", - " 0\n", + " 40\n", + " 10\n", " \n", " \n", " 3\n", - " 300028280\n", - " 300032720\n", - " 300029916\n", - " 11545.807617\n", - " 181\n", - " 32\n", - " 2268.296875\n", - " 636.287964\n", - " 1483.845093\n", - " 0.900317\n", - " 148\n", - " 30\n", - " 584.498291\n", - " 61\n", + " 300724040\n", + " 300724470\n", + " 300724142\n", + " 7.752567\n", + " 3\n", + " 3\n", + " 461\n", + " 3.555671\n", + " 0\n", + " 92.052193\n", + " 296.905457\n", + " 0.000000\n", + " 43\n", + " 10\n", + " 25.530293\n", " 2\n", + " 1\n", + " 180\n", + " 10\n", " \n", " \n", " 4\n", - " 300035520\n", - " 300037250\n", - " 300036432\n", - " 17.388079\n", - " 7\n", - " 134\n", - " 3.215723\n", - " 884.486389\n", - " 1485.202148\n", - " 1.000000\n", - " 173\n", + " 500000050\n", + " 500000560\n", + " 500000248\n", + " 51.385868\n", + " 11\n", + " 11\n", + " 408\n", + " 20.320269\n", + " 0\n", + " 166.012741\n", + " 310.153564\n", + " 0.129670\n", + " 51\n", " 10\n", - " 934.491943\n", + " 142.900955\n", " 2\n", " 2\n", + " 90\n", + " 0\n", " \n", " \n", " 5\n", - " 500000040\n", - " 500000570\n", - " 500000244\n", - " 19.048435\n", - " 5\n", - " 375\n", - " 5.513971\n", - " 220.591858\n", - " 359.682007\n", - " 0.000000\n", - " 53\n", + " 500589980\n", + " 500593580\n", + " 500591982\n", + " 37.373817\n", + " 15\n", " 10\n", - " 149.986282\n", - " 2\n", + " 241\n", + " 8.749174\n", + " 0\n", + " 1940.112183\n", + " 3275.072021\n", + " 0.688202\n", + " 180\n", + " 20\n", + " 2096.490967\n", + " 3\n", " 2\n", + " -1\n", + " -1\n", " \n", " \n", " 6\n", - " 500960650\n", - " 500960920\n", - " 500960710\n", - " 6.818991\n", - " 2\n", - " 128\n", - " 4.352914\n", - " 43.098900\n", - " 83.738449\n", - " 0.638352\n", - " 27\n", + " 700000040\n", + " 700000610\n", + " 700000139\n", + " 15.011408\n", + " 4\n", + " 4\n", + " 324\n", + " 4.820670\n", + " 0\n", + " 57.526924\n", + " 345.084930\n", + " 0.000000\n", + " 57\n", " 10\n", - " 30.770397\n", - " 2\n", + " 49.048229\n", + " 3\n", " 1\n", + " 270\n", + " 20\n", " \n", " \n", " 7\n", - " 700000050\n", - " 700000420\n", - " 700000145\n", - " 18.850853\n", - " 6\n", - " 373\n", - " 4.941594\n", - " 102.237549\n", - " 178.564667\n", - " 0.105509\n", - " 37\n", - " 10\n", - " 38.637653\n", + " 700699840\n", + " 700706240\n", + " 700703462\n", + " 102.122833\n", + " 25\n", + " 14\n", + " 129\n", + " 33.482544\n", + " 0\n", + " 3729.012451\n", + " 5596.686035\n", + " 0.880986\n", + " 160\n", + " 40\n", + " 2050.706543\n", " 4\n", - " 1\n", + " 2\n", + " -1\n", + " -1\n", " \n", " \n", " 8\n", - " 700001130\n", - " 700001520\n", - " 700001257\n", - " 4.998666\n", - " 2\n", - " 423\n", - " 2.648085\n", - " 145.234467\n", - " 272.601288\n", - " 0.000000\n", - " 39\n", + " 900000050\n", + " 900000720\n", + " 900000210\n", + " 28.657455\n", + " 8\n", + " 8\n", + " 346\n", + " 7.821901\n", + " 0\n", + " 151.675720\n", + " 443.599609\n", + " 0.229542\n", + " 67\n", " 10\n", - " 79.824738\n", + " 58.658257\n", + " 5\n", " 1\n", + " 290\n", " 0\n", " \n", " \n", " 9\n", - " 700599860\n", - " 700606020\n", - " 700602521\n", - " 110.203194\n", - " 15\n", - " 99\n", - " 37.721416\n", - " 3226.068115\n", - " 5537.778809\n", - " 0.930984\n", - " 154\n", - " 40\n", - " 2111.939453\n", + " 900703540\n", + " 900707830\n", + " 900705461\n", + " 99.501129\n", + " 24\n", + " 16\n", + " 64\n", + " 27.903099\n", + " 0\n", + " 1144.565796\n", + " 3354.698730\n", + " 0.942021\n", + " 143\n", + " 30\n", + " 838.284546\n", " 2\n", " 2\n", + " 610\n", + " 10\n", " \n", " \n", "\n", "" ], "text/plain": [ - " time endtime center_time area n_channels max_pmt \\\n", - "0 100000030 100000340 100000116 6.008117 2 487 \n", - "1 100085020 100090330 100086781 6050.895996 135 138 \n", - "2 300000050 300000360 300000139 9.503628 2 111 \n", - "3 300028280 300032720 300029916 11545.807617 181 32 \n", - "4 300035520 300037250 300036432 17.388079 7 134 \n", - "5 500000040 500000570 500000244 19.048435 5 375 \n", - "6 500960650 500960920 500960710 6.818991 2 128 \n", - "7 700000050 700000420 700000145 18.850853 6 373 \n", - "8 700001130 700001520 700001257 4.998666 2 423 \n", - "9 700599860 700606020 700602521 110.203194 15 99 \n", + " time endtime center_time area n_hits n_channels max_pmt \\\n", + "0 100000030 100000670 100000205 45.194511 14 13 345 \n", + "1 100622470 100626210 100624258 143.898376 41 17 50 \n", + "2 300000020 300000410 300000128 22.863621 7 6 483 \n", + "3 300724040 300724470 300724142 7.752567 3 3 461 \n", + "4 500000050 500000560 500000248 51.385868 11 11 408 \n", + "5 500589980 500593580 500591982 37.373817 15 10 241 \n", + "6 700000040 700000610 700000139 15.011408 4 4 324 \n", + "7 700699840 700706240 700703462 102.122833 25 14 129 \n", + "8 900000050 900000720 900000210 28.657455 8 8 346 \n", + "9 900703540 900707830 900705461 99.501129 24 16 64 \n", + "\n", + " max_pmt_area n_saturated_channels range_50p_area range_90p_area \\\n", + "0 5.892519 0 198.728180 327.420563 \n", + "1 45.115543 0 1164.394287 2533.276855 \n", + "2 5.560007 0 73.276711 153.896225 \n", + "3 3.555671 0 92.052193 296.905457 \n", + "4 20.320269 0 166.012741 310.153564 \n", + "5 8.749174 0 1940.112183 3275.072021 \n", + "6 4.820670 0 57.526924 345.084930 \n", + "7 33.482544 0 3729.012451 5596.686035 \n", + "8 7.821901 0 151.675720 443.599609 \n", + "9 27.903099 0 1144.565796 3354.698730 \n", "\n", - " max_pmt_area range_50p_area range_90p_area area_fraction_top length \\\n", - "0 3.396131 84.658058 139.222778 0.434743 31 \n", - "1 1673.483521 805.982056 2172.673828 0.933084 177 \n", - "2 5.884011 71.074753 175.408966 0.619133 31 \n", - "3 2268.296875 636.287964 1483.845093 0.900317 148 \n", - "4 3.215723 884.486389 1485.202148 1.000000 173 \n", - "5 5.513971 220.591858 359.682007 0.000000 53 \n", - "6 4.352914 43.098900 83.738449 0.638352 27 \n", - "7 4.941594 102.237549 178.564667 0.105509 37 \n", - "8 2.648085 145.234467 272.601288 0.000000 39 \n", - "9 37.721416 3226.068115 5537.778809 0.930984 154 \n", + " area_fraction_top length dt rise_time tight_coincidence type \\\n", + "0 0.138998 64 10 94.678757 7 2 \n", + "1 0.875330 187 20 930.115356 7 2 \n", + "2 0.276379 39 10 53.755302 5 1 \n", + "3 0.000000 43 10 25.530293 2 1 \n", + "4 0.129670 51 10 142.900955 2 2 \n", + "5 0.688202 180 20 2096.490967 3 2 \n", + "6 0.000000 57 10 49.048229 3 1 \n", + "7 0.880986 160 40 2050.706543 4 2 \n", + "8 0.229542 67 10 58.658257 5 1 \n", + "9 0.942021 143 30 838.284546 2 2 \n", "\n", - " dt rise_time tight_coincidence type \n", - "0 10 72.558640 1 0 \n", - "1 30 786.898987 34 2 \n", - "2 10 59.963516 1 0 \n", - "3 30 584.498291 61 2 \n", - "4 10 934.491943 2 2 \n", - "5 10 149.986282 2 2 \n", - "6 10 30.770397 2 1 \n", - "7 10 38.637653 4 1 \n", - "8 10 79.824738 1 0 \n", - "9 40 2111.939453 2 2 " + " max_diff min_diff \n", + "0 80 10 \n", + "1 500 0 \n", + "2 40 10 \n", + "3 180 10 \n", + "4 90 0 \n", + "5 -1 -1 \n", + "6 270 20 \n", + "7 -1 -1 \n", + "8 290 0 \n", + "9 610 10 " ] }, - "execution_count": 22, + "execution_count": 94, "metadata": {}, "output_type": "execute_result" } @@ -1427,14 +1613,33 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 95, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:55.899433Z", "start_time": "2021-05-10T12:46:55.893984Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/jobs/29284557/ipykernel_277/3800134942.py:6: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.\n", + "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", + " dtype = [('time', np.int),\n", + "/tmp/jobs/29284557/ipykernel_277/3800134942.py:7: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.\n", + "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", + " ('endtime', np.int),\n", + "/tmp/jobs/29284557/ipykernel_277/3800134942.py:8: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.\n", + "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", + " ('area', np.int),\n", + "/tmp/jobs/29284557/ipykernel_277/3800134942.py:9: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.\n", + "Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations\n", + " ('n_photon', np.int)]\n" + ] + } + ], "source": [ "class MatchedPeaks(strax.LoopPlugin):\n", " depends_on = ('peak_basics', 'truth')\n", @@ -1476,7 +1681,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 96, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:55.909437Z", @@ -1490,7 +1695,7 @@ "__main__.MatchedPeaks" ] }, - "execution_count": 24, + "execution_count": 96, "metadata": {}, "output_type": "execute_result" } @@ -1501,7 +1706,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 97, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:56.084892Z", @@ -1512,7 +1717,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "f26814e5d6f742eb8d5bab33abb21dc8", + "model_id": "88b268d26cd140889140d333ba1155b2", "version_major": 2, "version_minor": 0 }, @@ -1553,93 +1758,93 @@ " \n", " \n", " 0\n", - " 100000026\n", - " 100000603\n", - " 6\n", - " 219\n", + " 100000029\n", + " 100000630\n", + " 45\n", + " 251\n", " \n", " \n", " 1\n", - " 100000337\n", - " 100000841\n", - " 6\n", - " 70\n", + " 100000333\n", + " 100000791\n", + " 45\n", + " 69\n", " \n", " \n", " 2\n", - " 100084342\n", - " 100089998\n", - " 6050\n", - " 15593\n", + " 100620431\n", + " 100627474\n", + " 143\n", + " 856\n", " \n", " \n", " 3\n", - " 100091453\n", - " 100095505\n", - " 0\n", - " 392\n", + " 100622911\n", + " 100627768\n", + " 143\n", + " 211\n", " \n", " \n", " 4\n", - " 100184771\n", - " 100186098\n", - " 0\n", - " 58\n", + " 300000006\n", + " 300000565\n", + " 22\n", + " 255\n", " \n", " \n", " 5\n", - " 300000026\n", - " 300000831\n", - " 9\n", - " 176\n", + " 300000067\n", + " 300000556\n", + " 22\n", + " 69\n", " \n", " \n", " 6\n", - " 300000248\n", - " 300000759\n", - " 9\n", - " 71\n", + " 300723015\n", + " 300728784\n", + " 7\n", + " 186\n", " \n", " \n", " 7\n", - " 300028152\n", - " 300032297\n", - " 11545\n", - " 23189\n", + " 300723660\n", + " 300727606\n", + " 7\n", + " 128\n", " \n", " \n", " 8\n", - " 300035169\n", - " 300039343\n", - " 17\n", - " 545\n", + " 500000003\n", + " 500000619\n", + " 51\n", + " 235\n", " \n", " \n", " 9\n", - " 300051579\n", - " 300054633\n", - " 0\n", - " 59\n", + " 500000111\n", + " 500000642\n", + " 51\n", + " 49\n", " \n", " \n", "\n", "" ], "text/plain": [ - " time endtime area n_photon\n", - "0 100000026 100000603 6 219\n", - "1 100000337 100000841 6 70\n", - "2 100084342 100089998 6050 15593\n", - "3 100091453 100095505 0 392\n", - "4 100184771 100186098 0 58\n", - "5 300000026 300000831 9 176\n", - "6 300000248 300000759 9 71\n", - "7 300028152 300032297 11545 23189\n", - "8 300035169 300039343 17 545\n", - "9 300051579 300054633 0 59" + " time endtime area n_photon\n", + "0 100000029 100000630 45 251\n", + "1 100000333 100000791 45 69\n", + "2 100620431 100627474 143 856\n", + "3 100622911 100627768 143 211\n", + "4 300000006 300000565 22 255\n", + "5 300000067 300000556 22 69\n", + "6 300723015 300728784 7 186\n", + "7 300723660 300727606 7 128\n", + "8 500000003 500000619 51 235\n", + "9 500000111 500000642 51 49" ] }, - "execution_count": 25, + "execution_count": 97, "metadata": {}, "output_type": "execute_result" } @@ -1664,7 +1869,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 98, "metadata": { "ExecuteTime": { "end_time": "2021-05-10T12:46:56.093761Z", @@ -1681,7 +1886,119 @@ } ], "source": [ - "wfsim.core.S1.get_n_photons?" + "st = straxen.contexts.xenonnt_simulation(cmt_run_id_sim='00001')" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": {}, + "outputs": [], + "source": [ + "config = straxen.get_resource('fax_config_nt_sr0_v4.json', fmt='json')\n", + "config.update({'detector':'XENONnT', 'right_raw_extension':50000})\n", + "st.config['gains'] = [1 for _ in range(straxen.n_tpc_pmts)]\n", + "config.update(st.config)" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:wfsim.resource:Loading XENONnT_SR0_spe_distributions_20210713_no_noise_scaled.csv from mongo downloader to /dali/lgrandi/strax/resource_cache/99c2cbc580cfa8eeebe831456076e136\n", + "WARNING:wfsim.resource:Loading XENONnT_s1_xyz_patterns_LCE_MCvf051911_wires.pkl from mongo downloader to /dali/lgrandi/strax/resource_cache/02ed2634596793f6e7aa13783745089a\n", + "WARNING:wfsim.resource:A file has value False, assuming this is intentional.\n", + "WARNING:wfsim.resource:Loading XENONnT_s2_xy_patterns_GXe_LCE_corrected_qes_MCv4.3.0_wires.pkl from mongo downloader to /dali/lgrandi/strax/resource_cache/6639b01b73d4fdbb703174ad424801f5\n", + "WARNING:wfsim.resource:Loading XENONnT_s2_xy_map_v4_210503_mlp_3_in_1_iterated.json from mongo downloader to /dali/lgrandi/strax/resource_cache/ca348171778ae5cdb5de6c1f5814f156\n", + "WARNING:wfsim.resource:Loading XENONnT_se_xy_map_v1_mlp.json from mongo downloader to /dali/lgrandi/strax/resource_cache/4ed37f1d06853503899ac37a0a2237ba\n", + "WARNING:wfsim.resource:Loading XENONnT_pmt_afterpulse_config_018435.json.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/a38b18cd61ca67a065a3a32d9b57c2b2\n", + "WARNING:wfsim.resource:Loading XENONnT_GARFIELD_SR0_B2d75n_C2d75n_G0d3p_A4d9p_T0d9n_PMTs1d3n_FSR0d65p.npz from mongo downloader to /dali/lgrandi/strax/resource_cache/42d87bc750ceb2f3c0491a586e016341\n", + "WARNING:wfsim.resource:Loading garfield_timing_map_gas_gap_sr0.npy from mongo downloader to /dali/lgrandi/strax/resource_cache/803c5f08cb89063a9671ac8da5cb7e75\n", + "WARNING:wfsim.resource:Loading gas_gap_warping_map_January_2021.pkl from mongo downloader to /dali/lgrandi/strax/resource_cache/d37b34dda3e865ef607b0bee2057772c\n", + "WARNING:wfsim.resource:Loading garfield_gas_gap_map_sr0.json from mongo downloader to /dali/lgrandi/strax/resource_cache/d39d7eda03373635c60e209067470dc8\n", + "WARNING:wfsim.resource:Loading x1t_se_afterpulse_delaytime.pkl.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/014aa048758a51f154cdc3b32dac2773\n", + "WARNING:wfsim.resource:Loading XENONnT_noise_tpc_only_2ms_25118.npz from mongo downloader to /dali/lgrandi/strax/resource_cache/e560759e28f74d5c049425c25e5ae0d5\n", + "WARNING:wfsim.resource:Loading XnT_3D_FDC_xyt_dummy_all_zeros_v0.1.json.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/55b30b2d26d151ae8e2aa55ffe6693ad\n", + "WARNING:wfsim.resource:Loading field_dependent_radius_depth_maps_B2d75n_C2d75n_G0d3p_A4d9p_T0d9n_PMTs1d3n_FSR0d65p_QPTFE_0d5n_0d4p.json.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/487272e33b4c832ae715350b6275ba0b\n", + "WARNING:wfsim.resource:Loading data_driven_diffusion_map_XENONnTSR0V2.json.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/8a6c6dc1bfe5380f48e96462161a3313\n", + "WARNING:wfsim.resource:Loading XENONnT_s1_proponly_pc_reflection_optPhot_perPMT_S1_local_20220510.json.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/91f4a6162d5e335c4416165349222061\n", + "WARNING:wfsim.resource:Loading XENONnT_s2_opticalprop_time_v0.json.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/1d257e215e00873e37ae49f16a04d717\n", + "WARNING:wfsim.resource:Using json for unspecified XENONnT_se_xy_map_v1_mlp.json\n", + "/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/wfsim/load_resource.py:262: RuntimeWarning: invalid value encountered in true_divide\n", + " orig_aft_=np.mean((s2map_topeff_/s2map_toteff_)[s2map_toteff_>0.0])\n", + "WARNING:wfsim.resource:Using json.gz for unspecified XENONnT_s2_opticalprop_time_v0.json.gz\n", + "WARNING:wfsim.resource:Using noise data XENONnT_noise_tpc_only_2ms_25118.npz with 494 channels for XENONnT\n" + ] + } + ], + "source": [ + "s2 = wfsim.core.s2.S2(config)" + ] + }, + { + "cell_type": "code", + "execution_count": 124, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[0;31mSignature:\u001b[0m \n", + "\u001b[0ms2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melectron_timings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mn_electron\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdrift_time_mean\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mdrift_time_spread\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0msc_gain\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mtimings\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0mgains\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m \u001b[0melectron_trapping_time\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", + "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mCall signature:\u001b[0m \u001b[0ms2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0melectron_timings\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mType:\u001b[0m CPUDispatcher\n", + "\u001b[0;31mString form:\u001b[0m CPUDispatcher()\n", + "\u001b[0;31mFile:\u001b[0m /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/wfsim/core/s2.py\n", + "\u001b[0;31mDocstring:\u001b[0m \n", + "Calculate arrival times of the electrons. Data is written to the timings and gains arrays\n", + ":param t: 1d array of ints\n", + ":param n_electron:1 d array of ints\n", + ":param drift_time_mean: 1d array of floats\n", + ":param drift_time_spread: 1d array of floats\n", + ":param sc_gain: secondary scintillation gain \n", + ":param timings: empty array with length sum(n_electron)\n", + ":param gains: empty array with length sum(n_electron)\n", + ":param electron_trapping_time: configuration values\n", + "\u001b[0;31mClass docstring:\u001b[0m\n", + "Implementation of user-facing dispatcher objects (i.e. created using\n", + "the @jit decorator).\n", + "This is an abstract base class. Subclasses should define the targetdescr\n", + "class attribute.\n", + "\u001b[0;31mInit docstring:\u001b[0m \n", + "Parameters\n", + "----------\n", + "py_func: function object to be compiled\n", + "locals: dict, optional\n", + " Mapping of local variable names to Numba types. Used to override\n", + " the types deduced by the type inference engine.\n", + "targetoptions: dict, optional\n", + " Target-specific config options.\n", + "impl_kind: str\n", + " Select the compiler mode for `@jit` and `@generated_jit`\n", + "pipeline_class: type numba.compiler.CompilerBase\n", + " The compiler pipeline type." + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "s2.electron_timings?" ] }, { @@ -1708,7 +2025,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.11" + "version": "3.9.17" }, "latex_envs": { "LaTeX_envs_menu_present": true, diff --git a/notebooks/Simulate_WIMP_and_CEvNS.ipynb b/notebooks/Simulate_WIMP_and_CEvNS.ipynb new file mode 100644 index 00000000..1d67bd03 --- /dev/null +++ b/notebooks/Simulate_WIMP_and_CEvNS.ipynb @@ -0,0 +1,664 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "a69806b2-4010-4e93-818e-1747b18ccee5", + "metadata": {}, + "source": [ + "In this notebook we show how to simulate WIMP and CEvNS signal with wfsim" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1a68a610-9718-4bfe-902e-b9487b6deb9e", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Detector definition message ***\n", + "You are currently using the default XENON10 template detector.\n", + "\n", + "/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/wimprates/__init__.py:6: UserWarning: Default WIMP parameters are changed in accordance with https://arxiv.org/abs/2105.00599 (github.com/JelleAalbers/wimprates/pull/14)\n", + " warnings.warn(\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import strax\n", + "import straxen\n", + "import wfsim\n", + "import cutax\n", + "\n", + "import matplotlib.pyplot as plt\n", + "from matplotlib.colors import LogNorm\n", + "from multihist import Histdd, Hist1d\n", + "from scipy import stats\n", + "from scipy.interpolate import UnivariateSpline, interp1d\n", + "\n", + "import wimprates\n", + "import numericalunits as nu\n", + "import nestpy\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "c37583f7-1a1d-4cd5-a3b9-c92e33e25508", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
moduleversionpathgit
0python3.9.17/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/b...None
1strax1.5.2/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
2straxen2.1.1/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
3cutax1.15.1/home/shenyangshi/cutax/cutaxbranch:bdt_ms | 277f174
4wfsim1.0.2/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
5nestpy2.0.0/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
6ntauxfiles0.3.0/project2/lgrandi/shenyangshi/home/private_nt_...branch:AmBe_ms_fit | 3555246
7wimprates0.5.0/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
\n", + "
" + ], + "text/plain": [ + " module version path \\\n", + "0 python 3.9.17 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/b... \n", + "1 strax 1.5.2 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "2 straxen 2.1.1 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "3 cutax 1.15.1 /home/shenyangshi/cutax/cutax \n", + "4 wfsim 1.0.2 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "5 nestpy 2.0.0 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "6 ntauxfiles 0.3.0 /project2/lgrandi/shenyangshi/home/private_nt_... \n", + "7 wimprates 0.5.0 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "\n", + " git \n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 branch:bdt_ms | 277f174 \n", + "4 None \n", + "5 None \n", + "6 branch:AmBe_ms_fit | 3555246 \n", + "7 None " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "straxen.print_versions(modules=('strax', 'straxen', 'cutax', 'wfsim', 'nestpy', 'ntauxfiles', 'wimprates'))" + ] + }, + { + "cell_type": "markdown", + "id": "fca229ad-849f-4a63-b1ab-e722884ee10d", + "metadata": {}, + "source": [ + "First see the WIMP differential rate as a function of recoil energy" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "68ced9f9-3ab8-4938-bbfc-27e6f2514272", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "energies = np.linspace(0.01, 40, 100)\n", + "dr = wimprates.rate_wimp_std(energies, mw=50, sigma_nucleon=1e-45, material='Xe')\n", + "\n", + "plt.plot(energies, dr)\n", + "\n", + "plt.xlabel(\"Recoil energy [keV]\")\n", + "plt.ylabel(\"Rate [events per (keV ton year)]\")\n", + "plt.title(\"$m_\\chi = 50$ GeV/c${}^2$, $\\sigma_\\chi = 10^{-45}$ cm${}^2$\")\n", + "plt.xlim(0, energies.max())\n", + "plt.ylim(0, None);" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "ca2e1e5e-bff2-4b5a-a3fb-3c27fb3a0b5c", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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c/vtt5t9+/YFuqw6W79+vZF01paammqM+edXjR977DETHR1tHA6HGTJkiCkoKAhs0bV0vjF+//33ZujQoaZdu3amWbNmpmPHjmbixImNLlDXND5JZuHChb42P/zwg7nvvvvMZZddZlq2bGn+7d/+zRw+fDhwRdfCz42vqKjIDBo0yERGRhqHw2GuuOIKM23aNFNWVhbYwmthwoQJpmPHjiYsLMy0a9fODBkyxBdOjGnc83fG+cbYFObwXH4aUC71XAYZY0zDrM0AAADUDfegAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAA8HPgwAEFBQX5fk8kJydHQUFBZ/1IWFN2ZsxBQUEaPXq0b//gwYM1ZcqUBr/+mWv/9KftgV8SAgpgkfHjx/v+ODVr1kzx8fF6+OGHVVFRcclqiIuL0+HDh9WzZ89Ldk1bFRQUaNGiRfXS1/33368ePXrUeKyoqEghISF67733JEmHDx/Wc889Vy/XBRorAgpgmWHDhunw4cP6+uuvNXfuXL388suaOXPmJbt+SEiI3G63QkNDL9k168IYo1OnTjXoNaKiouptFSMtLU179uzRpk2bzjq2aNEiRUVF6eabb5Ykud1uuVyuerku0FgRUADLOBwOud1uxcXFafTo0UpKStKaNWt8x6urq5Wdna34+Hi1aNFCffr00TvvvOPXx+7du3XLLbfI6XQqPDxc119/vfbv3+87f9asWWrfvr0cDof69u2r1atX+8796Uc8F+LYsWP67W9/q3bt2snpdOqmm27S559/7jv+xBNPqG/fvnr99dfVqVMnuVwujR07VsePH7/gcZ352GXVqlXq37+/HA6HPvnkEx0/flzjxo1Tq1atFBMTo7lz5/p9FDNr1qwaV4P69u2rxx577ILHWJP3339fLpdLb7zxhiTp4MGD+vd//3dFREQoMjJSo0aN0oEDB3zX69evn1555RW/PowxWrRokVJTU60PhcClREABLPbFF19o06ZNCgsL8+3Lzs7Wa6+9pgULFmj37t2aOnWqfvOb3yg3N1eS9H//938aNGiQHA6H1q1bp/z8fE2YMMG32vD888/rmWee0dNPP62dO3cqOTlZ//qv/6q9e/fWuc7bbrtNpaWlWrVqlfLz89WvXz8NGTJER48e9bXZv3+/li9frpUr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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# How to bootstrap the energies?\n", + "dm_energies = np.linspace(0.01, 40, 100)\n", + "dr = wimprates.rate_wimp_std(energies, mw=50, sigma_nucleon=1e-45, material='Xe')\n", + "cumsum = np.cumsum(dr) \n", + "cumsum = (cumsum - cumsum[0]) / (cumsum[-1] - cumsum[0])\n", + "plt.hist(interp1d(cumsum, dm_energies)(np.random.uniform(size=1000)))\n", + "plt.xlabel('Recoil energy [keV]')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ab0e51a9-4a7d-450a-8c18-83d2b6751e00", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "5c78a5b2-13d9-4e36-8c1d-9aa8eac00d8b", + "metadata": {}, + "outputs": [], + "source": [ + "def wimp_instruction(energies=np.linspace(0.01,40,100),\n", + " mw=50,\n", + " sigma_nucleon=1e-45,\n", + " n_events=100,\n", + " event_rate=10):\n", + "\n", + " tpc_radius = straxen.tpc_r\n", + " tpc_length = straxen.tpc_z\n", + " n = int(n_events)\n", + " total_time = int(n_events / event_rate)\n", + "\n", + " instructions = np.zeros(2 * n, dtype=wfsim.instruction_dtype)\n", + " instructions['event_number'] = np.repeat(np.arange(n), 2)\n", + "\n", + " r = np.sqrt(np.random.uniform(0, tpc_radius ** 2, n))\n", + " theta = np.random.uniform(-np.pi, np.pi, n)\n", + " instructions['x'] = np.repeat(r * np.cos(theta), 2)\n", + " instructions['y'] = np.repeat(r * np.sin(theta), 2)\n", + " instructions['z'] = np.repeat(np.random.uniform(-tpc_length, 0, n), 2)\n", + " instructions['time'] = np.repeat(np.sort(np.random.uniform(low=0, high=total_time, size=n)),\n", + " 2) * straxen.units.s\n", + "\n", + " density = 2.81\n", + " drift_field = 21.3\n", + " recoil = 0 # NR\n", + " instructions['type'] = np.tile([1, 2], n)\n", + " instructions['recoil'] = np.full(2 * n, recoil)\n", + "\n", + " dm_energies = energies\n", + " dr = wimprates.rate_wimp_std(energies, mw=mw, sigma_nucleon=sigma_nucleon, material='Xe')\n", + " \n", + " cumsum = np.cumsum(dr)\n", + " cumsum = (cumsum - cumsum[0]) / (cumsum[-1] - cumsum[0])\n", + " energy = interp1d(cumsum, dm_energies)(np.random.uniform(size=n))\n", + "\n", + " nph = np.empty(n, int)\n", + " ne = np.empty(n, int)\n", + "\n", + " nc = nestpy.NESTcalc(nestpy.VDetector())\n", + " interaction = nestpy.INTERACTION_TYPE(0)\n", + " \n", + " for i in range(n):\n", + " y = nc.GetYields(interaction,\n", + " energy[i],\n", + " density,\n", + " drift_field, # Drift field, V/cm \n", + " 131.293,\n", + " 54,\n", + " # (1,1)\n", + " )\n", + " nph[i], ne[i] = y.PhotonYield, y.ElectronYield\n", + " \n", + " \n", + " instructions['amp'] = np.vstack([nph, ne]).T.flatten()\n", + " instructions['n_excitons'] = np.vstack([nph, np.zeros_like(ne)]).T.flatten()\n", + " instructions['local_field'] = drift_field\n", + " instructions['e_dep'] = np.repeat(energy, 2)\n", + " return instructions\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e00cb87a-2954-4522-8494-da80512f4b6d", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/shenyangshi/cutax/cutax/contexts.py:107: UserWarning: WARNING! You are using SR0_V0 simulation context! Consider updating to a newer/pinned version (SR0_V4)!\n", + " warnings.warn(f'WARNING! You are using {faxconf_version.upper()} simulation context!'\n", + "/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/straxen/url_config.py:711: UserWarning: From straxen version 2.1.0 onward, URLConfig parameterswill be sorted alphabetically before being passed to the plugins, this will change the lineage hash for non-sorted URLs. To load data processed with non-sorted URLs, you will need to use an older version.\n", + " warnings.warn(\"From straxen version 2.1.0 onward, URLConfig parameters\"\n", + "/home/shenyangshi/cutax/cutax/contexts.py:132: UserWarning: WARNING! [ FAX_CONFIG_NT_SR0_V0.JSON ] does not contain \"field_distortion_correction_map\" key!\n", + " warnings.warn(f'WARNING! [ {fax_conf.upper()} ] does not contain \"{fax_config_fdc_key}\" key!')\n" + ] + } + ], + "source": [ + "st = cutax.xenonnt_sim_base()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "31979d6b-f9e8-420a-88ed-67725a14ba84", + "metadata": {}, + "outputs": [], + "source": [ + "run_id = '026000'\n", + "instruction = wimp_instruction(energies=np.linspace(0.01,40,100),\n", + " mw=50,\n", + " sigma_nucleon=1e-45,\n", + " n_events=1000,\n", + " event_rate=10)\n", + "\n", + "instruction = instruction[instruction['amp'] > 0]\n", + "pd.DataFrame(instruction).to_csv(f'./026000.csv', index=False)\n", + "\n", + "config_instruction = dict(event_rate=10,\n", + " chunk_size=10000,\n", + " nchunk=1,\n", + " peak_min_pmts=2,\n", + " fax_file=f'./026000.csv')\n", + "\n", + "st.set_config(config_instruction)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7bef2db-6c29-4df3-87fc-357bac8e0c9f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0c30ba74-fdd1-44ba-9b73-c53dadb9e5be", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:strax:Option nchunk not taken by any registered plugin\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removing old incomplete data in ./strax_data/026000-raw_records_aqmon-gkhxdhlrrd\n", + "Removing old incomplete data in ./strax_data/026000-truth-gkhxdhlrrd\n", + "Removing old incomplete data in ./strax_data/026000-raw_records-gkhxdhlrrd\n", + "Removing old incomplete data in ./strax_data/026000-raw_records_he-gkhxdhlrrd\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:wfsim.interface:Replacing drift_time_gate with CMT option ('cmt_run_id', '026000', 'electron_drift_time_gate', 'v2', True) to 4500.0\n", + "WARNING:wfsim.interface:Replacing drift_velocity_liquid with CMT option ('cmt_run_id', '026000', 'electron_drift_velocity', 'v3', True) to 6.75e-05\n", + "WARNING:wfsim.interface:Replacing electron_lifetime_liquid with CMT option ('cmt_run_id', '026000', 'elife', 'v6', True) to 14943515.44396\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_SR0_spe_distributions_20210713_no_noise_scaled.csv locally\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_s1_xyz_patterns_LCE_MCvf051911_wires.pkl locally\n", + "WARNING:wfsim.resource:A file has value False, assuming this is intentional.\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_s2_xy_patterns_GXe_LCE_corrected_qes_MCv4.3.0_wires.pkl locally\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_s2_xy_map_v4_210503_mlp_3_in_1_iterated.json locally\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_se_xy_map_v1_mlp.json locally\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_pmt_afterpulse_config_018435.json.gz locally\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_GARFIELD_SR0_B2d75n_C2d75n_G0d3p_A4d9p_T0d9n_PMTs1d3n_FSR0d65p.npz locally\n", + "WARNING:wfsim.resource:Using the private repo to load garfield_timing_map_gas_gap_sr0.npy locally\n", + "WARNING:wfsim.resource:Using the private repo to load gas_gap_warping_map_January_2021.pkl locally\n", + "WARNING:wfsim.resource:Using the private repo to load garfield_gas_gap_map_sr0.json locally\n", + "WARNING:wfsim.resource:Loading x1t_se_afterpulse_delaytime.pkl.gz from mongo downloader to /dali/lgrandi/strax/resource_cache/014aa048758a51f154cdc3b32dac2773\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_noise_tpc_only_2ms_25118.npz locally\n", + "WARNING:wfsim.resource:Using the private repo to load XnT_3D_FDC_xyt_dummy_all_zeros_v0.1.json.gz locally\n", + "WARNING:wfsim.resource:Using the private repo to load field_dependent_radius_depth_maps_B2d75n_C2d75n_G0d3p_A4d9p_T0d9n_PMTs1d3n_FSR0d65p_QPTFE_0d5n_0d4p.json.gz locally\n", + "WARNING:wfsim.resource:diffusion_longitudinal_map has no path so this config file is set to None\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_s1_proponly_va43fa9b_wires_20200625.json.gz locally\n", + "WARNING:wfsim.resource:Using the private repo to load XENONnT_s2_opticalprop_time_v0.json.gz locally\n", + "WARNING:wfsim.resource:Using json for unspecified /project2/lgrandi/shenyangshi/home/private_nt_aux_files/ntauxfiles/../strax_files/XENONnT_se_xy_map_v1_mlp.json\n", + "/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/lib/python3.9/site-packages/wfsim/load_resource.py:262: RuntimeWarning: invalid value encountered in true_divide\n", + " orig_aft_=np.mean((s2map_topeff_/s2map_toteff_)[s2map_toteff_>0.0])\n", + "WARNING:wfsim.resource:Using json.gz for unspecified /project2/lgrandi/shenyangshi/home/private_nt_aux_files/ntauxfiles/../sim_files/XENONnT_s2_opticalprop_time_v0.json.gz\n", + "WARNING:wfsim.resource:Using noise data /project2/lgrandi/shenyangshi/home/private_nt_aux_files/ntauxfiles/../sim_files/XENONnT_noise_tpc_only_2ms_25118.npz with 494 channels for XENONnT\n", + "*** Detector definition message ***\n", + "You are currently using the default XENON10 template detector.\n", + "\n", + "WARNING:strax:Could not estimate run start and end time from run metadata: assuming it is 0 and inf\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1fb2965b5eea4b5fa9bdf7d993e57c2e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Simulating Raw Records: 0%| | 0/1893 [00:00" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(event_info['cs1'], event_info['cs2'])\n", + "plt.xlabel('cs1')\n", + "plt.ylabel('cs2')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "22b7e958-776c-48d5-8bdb-e6accbfe671a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.scatter(event_info['drift_time'], event_info['s2_range_50p_area'])\n", + "plt.xlabel('drift_time')\n", + "plt.ylabel('s2_range_50p_area')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7ba2c0e-4468-44a3-879f-376c5ed32add", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b9429328-d706-43d3-a646-042e4377b3fb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "07208ed6-407f-4c57-b05d-979ffba3fb90", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "64dac611-b607-4980-8df6-459a498d6f57", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cffc11f-647a-4a32-8591-552aabb3a669", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a91f67a8-98c5-47ed-b00c-c5e57d2c4eee", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ba12eabe-c1c2-43ff-a3db-f4be24d3e63f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:XENONnT_2023.07.1] *", + "language": "python", + "name": "conda-env-XENONnT_2023.07.1-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.17" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/StorePulseInstructionsAsType.ipynb b/notebooks/StorePulseInstructionsAsType.ipynb index 65ab3458..ee895b3c 100644 --- a/notebooks/StorePulseInstructionsAsType.ipynb +++ b/notebooks/StorePulseInstructionsAsType.ipynb @@ -88,7 +88,7 @@ " is_ready=True\n", " max_chunks=1\n", " _source_finished=False\n", - " \n", + "\n", " def setup(self,):\n", " if self.config['instructions_per_chunk']:\n", " self.max_chunks= np.ceil(len(self.config['instructions'])/self.config['instructions_per_chunk'])\n", @@ -392,7 +392,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.9.17" } }, "nbformat": 4, diff --git a/notebooks/Understanding_WFSim_P1.ipynb b/notebooks/Understanding_WFSim_P1.ipynb index 8af08be9..b0cee880 100644 --- a/notebooks/Understanding_WFSim_P1.ipynb +++ b/notebooks/Understanding_WFSim_P1.ipynb @@ -13,7 +13,17 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "*** Detector definition message ***\n", + "You are currently using the default XENON10 template detector.\n", + "\n" + ] + } + ], "source": [ "import strax, straxen, wfsim\n", "import numpy as np\n", @@ -24,10 +34,115 @@ "cell_type": "code", "execution_count": 2, "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\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", + "
moduleversionpathgit
0python3.9.17/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/b...None
1strax1.5.2/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
2straxen2.1.1/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
3cutax1.15.1/home/shenyangshi/cutax/cutaxbranch:bdt_ms | 277f174
4wfsim1.0.2/opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l...None
5ntauxfiles0.3.0/project2/lgrandi/shenyangshi/home/private_nt_...branch:AmBe_ms_fit | 3555246
\n", + "
" + ], + "text/plain": [ + " module version path \\\n", + "0 python 3.9.17 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/b... \n", + "1 strax 1.5.2 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "2 straxen 2.1.1 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "3 cutax 1.15.1 /home/shenyangshi/cutax/cutax \n", + "4 wfsim 1.0.2 /opt/XENONnT/anaconda/envs/XENONnT_2023.07.1/l... \n", + "5 ntauxfiles 0.3.0 /project2/lgrandi/shenyangshi/home/private_nt_... \n", + "\n", + " git \n", + "0 None \n", + "1 None \n", + "2 None \n", + "3 branch:bdt_ms | 277f174 \n", + "4 None \n", + "5 branch:AmBe_ms_fit | 3555246 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "straxen.print_versions(modules=('strax', 'straxen', 'cutax', 'wfsim', 'ntauxfiles'))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, "outputs": [], "source": [ - "config = straxen.get_resource('https://raw.githubusercontent.com/XENONnT/'\n", - " 'strax_auxiliary_files/master/fax_files/fax_config_nt.json', fmt='json')\n", + "config = straxen.get_resource('fax_config_nt_sr0_dev.json', fmt='json')\n", "config.update({'detector':'XENONnT', 'right_raw_extension':50000})" ] }, @@ -76,9 +191,45 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 5, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:wfsim.interface:rand_instructions is deprecated, please use wfsim.random_instructions\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5c95225017ed428e9366f0bfc5578b12", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "generating instructions from nest: 0%| | 0/6 [00:00z\n", " amp\n", " recoil\n", + " e_dep\n", + " g4id\n", + " vol_id\n", + " local_field\n", + " n_excitons\n", + " x_pri\n", + " y_pri\n", + " z_pri\n", " \n", " \n", " \n", @@ -116,96 +275,284 @@ " 0\n", " 1\n", " 166666666\n", - " -12.444336\n", - " 35.394833\n", - " -36.326618\n", - " 2019\n", - " er\n", + " 32.122543\n", + " -22.621212\n", + " -43.662350\n", + " 818\n", + " 7\n", + " 13.101433\n", + " -1\n", + " -1\n", + " 22.92\n", + " 113\n", + " 32.122543\n", + " -22.621212\n", + " -43.662350\n", " \n", " \n", " 1\n", " 0\n", " 2\n", " 166666666\n", - " -12.444336\n", - " 35.394833\n", - " -36.326618\n", - " 4018\n", - " er\n", + " 32.122543\n", + " -22.621212\n", + " -43.662350\n", + " 145\n", + " 7\n", + " 13.101433\n", + " -1\n", + " -1\n", + " 22.92\n", + " 0\n", + " 32.122543\n", + " -22.621212\n", + " -43.662350\n", " \n", " \n", " 2\n", " 0\n", " 1\n", " 500000000\n", - " -57.106525\n", - " -18.970032\n", - " -29.390602\n", - " 2002\n", - " er\n", + " 7.289836\n", + " -28.672121\n", + " -58.539639\n", + " 3675\n", + " 7\n", + " 57.908840\n", + " -1\n", + " -1\n", + " 22.92\n", + " 670\n", + " 7.289836\n", + " -28.672121\n", + " -58.539639\n", " \n", " \n", " 3\n", " 0\n", " 2\n", " 500000000\n", - " -57.106525\n", - " -18.970032\n", - " -29.390602\n", - " 2100\n", - " er\n", + " 7.289836\n", + " -28.672121\n", + " -58.539639\n", + " 609\n", + " 7\n", + " 57.908840\n", + " -1\n", + " -1\n", + " 22.92\n", + " 0\n", + " 7.289836\n", + " -28.672121\n", + " -58.539639\n", " \n", " \n", " 4\n", " 0\n", " 1\n", " 833333333\n", - " 12.810806\n", - " -20.407909\n", - " -122.853485\n", - " 2046\n", - " er\n", + " 36.476028\n", + " -32.952290\n", + " -136.419952\n", + " 4234\n", + " 7\n", + " 65.917046\n", + " -1\n", + " -1\n", + " 22.92\n", + " 755\n", + " 36.476028\n", + " -32.952290\n", + " -136.419952\n", " \n", " \n", " 5\n", " 0\n", " 2\n", " 833333333\n", - " 12.810806\n", - " -20.407909\n", - " -122.853485\n", - " 7966\n", - " er\n", + " 36.476028\n", + " -32.952290\n", + " -136.419952\n", + " 625\n", + " 7\n", + " 65.917046\n", + " -1\n", + " -1\n", + " 22.92\n", + " 0\n", + " 36.476028\n", + " -32.952290\n", + " -136.419952\n", + " \n", + " \n", + " 6\n", + " 1\n", + " 1\n", + " 1166666666\n", + " -13.274544\n", + " -16.667040\n", + " -7.988991\n", + " 1040\n", + " 7\n", + " 16.401899\n", + " -1\n", + " -1\n", + " 22.92\n", + " 159\n", + " -13.274544\n", + " -16.667040\n", + " -7.988991\n", + " \n", + " \n", + " 7\n", + " 1\n", + " 2\n", + " 1166666666\n", + " -13.274544\n", + " -16.667040\n", + " -7.988991\n", + " 164\n", + " 7\n", + " 16.401899\n", + " -1\n", + " -1\n", + " 22.92\n", + " 0\n", + " -13.274544\n", + " -16.667040\n", + " -7.988991\n", + " \n", + " \n", + " 8\n", + " 1\n", + " 1\n", + " 1500000000\n", + " -6.285732\n", + " 65.843475\n", + " -28.266441\n", + " 2797\n", + " 7\n", + " 43.466827\n", + " -1\n", + " -1\n", + " 22.92\n", + " 486\n", + " -6.285732\n", + " 65.843475\n", + " -28.266441\n", + " \n", + " \n", + " 9\n", + " 1\n", + " 2\n", + " 1500000000\n", + " -6.285732\n", + " 65.843475\n", + " -28.266441\n", + " 383\n", + " 7\n", + " 43.466827\n", + " -1\n", + " -1\n", + " 22.92\n", + " 0\n", + " -6.285732\n", + " 65.843475\n", + " -28.266441\n", + " \n", + " \n", + " 10\n", + " 1\n", + " 1\n", + " 1833333333\n", + " -45.993202\n", + " -14.296285\n", + " -122.466698\n", + " 346\n", + " 7\n", + " 5.972553\n", + " -1\n", + " -1\n", + " 22.92\n", + " 24\n", + " -45.993202\n", + " -14.296285\n", + " -122.466698\n", + " \n", + " \n", + " 11\n", + " 1\n", + " 2\n", + " 1833333333\n", + " -45.993202\n", + " -14.296285\n", + " -122.466698\n", + " 102\n", + " 7\n", + " 5.972553\n", + " -1\n", + " -1\n", + " 22.92\n", + " 0\n", + " -45.993202\n", + " -14.296285\n", + " -122.466698\n", " \n", " \n", "\n", "" ], "text/plain": [ - " event_number type time x y z amp \\\n", - "0 0 1 166666666 -12.444336 35.394833 -36.326618 2019 \n", - "1 0 2 166666666 -12.444336 35.394833 -36.326618 4018 \n", - "2 0 1 500000000 -57.106525 -18.970032 -29.390602 2002 \n", - "3 0 2 500000000 -57.106525 -18.970032 -29.390602 2100 \n", - "4 0 1 833333333 12.810806 -20.407909 -122.853485 2046 \n", - "5 0 2 833333333 12.810806 -20.407909 -122.853485 7966 \n", + " event_number type time x y z amp \\\n", + "0 0 1 166666666 32.122543 -22.621212 -43.662350 818 \n", + "1 0 2 166666666 32.122543 -22.621212 -43.662350 145 \n", + "2 0 1 500000000 7.289836 -28.672121 -58.539639 3675 \n", + "3 0 2 500000000 7.289836 -28.672121 -58.539639 609 \n", + "4 0 1 833333333 36.476028 -32.952290 -136.419952 4234 \n", + "5 0 2 833333333 36.476028 -32.952290 -136.419952 625 \n", + "6 1 1 1166666666 -13.274544 -16.667040 -7.988991 1040 \n", + "7 1 2 1166666666 -13.274544 -16.667040 -7.988991 164 \n", + "8 1 1 1500000000 -6.285732 65.843475 -28.266441 2797 \n", + "9 1 2 1500000000 -6.285732 65.843475 -28.266441 383 \n", + "10 1 1 1833333333 -45.993202 -14.296285 -122.466698 346 \n", + "11 1 2 1833333333 -45.993202 -14.296285 -122.466698 102 \n", + "\n", + " recoil e_dep g4id vol_id local_field n_excitons x_pri \\\n", + "0 7 13.101433 -1 -1 22.92 113 32.122543 \n", + "1 7 13.101433 -1 -1 22.92 0 32.122543 \n", + "2 7 57.908840 -1 -1 22.92 670 7.289836 \n", + "3 7 57.908840 -1 -1 22.92 0 7.289836 \n", + "4 7 65.917046 -1 -1 22.92 755 36.476028 \n", + "5 7 65.917046 -1 -1 22.92 0 36.476028 \n", + "6 7 16.401899 -1 -1 22.92 159 -13.274544 \n", + "7 7 16.401899 -1 -1 22.92 0 -13.274544 \n", + "8 7 43.466827 -1 -1 22.92 486 -6.285732 \n", + "9 7 43.466827 -1 -1 22.92 0 -6.285732 \n", + "10 7 5.972553 -1 -1 22.92 24 -45.993202 \n", + "11 7 5.972553 -1 -1 22.92 0 -45.993202 \n", "\n", - " recoil \n", - "0 er \n", - "1 er \n", - "2 er \n", - "3 er \n", - "4 er \n", - "5 er " + " y_pri z_pri \n", + "0 -22.621212 -43.662350 \n", + "1 -22.621212 -43.662350 \n", + "2 -28.672121 -58.539639 \n", + "3 -28.672121 -58.539639 \n", + "4 -32.952290 -136.419952 \n", + "5 -32.952290 -136.419952 \n", + "6 -16.667040 -7.988991 \n", + "7 -16.667040 -7.988991 \n", + "8 65.843475 -28.266441 \n", + "9 65.843475 -28.266441 \n", + "10 -14.296285 -122.466698 \n", + "11 -14.296285 -122.466698 " ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "instructions = inst_array = wfsim.rand_instructions(c={'event_rate':3, 'chunk_size':1, 'nchunk':1, **config})\n", + "instructions = inst_array = wfsim.strax_interface.rand_instructions(c={'event_rate':3, 'chunk_size':1, 'nchunk':1, **config})\n", "inst_df = pd.DataFrame(inst_array)\n", "inst_df" ] @@ -226,7 +573,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -278,9 +625,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'right' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# !!! Do not run this cell\u001b[39;00m\n\u001b[0;32m----> 3\u001b[0m pulse_length \u001b[38;5;241m=\u001b[39m \u001b[43mright\u001b[49m \u001b[38;5;241m-\u001b[39m left \u001b[38;5;241m+\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 4\u001b[0m records_needed \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(np\u001b[38;5;241m.\u001b[39mceil(pulse_length \u001b[38;5;241m/\u001b[39m samples_per_record))\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# WARNING baseline and area fields are zeros before finish_results\u001b[39;00m\n", + "\u001b[0;31mNameError\u001b[0m: name 'right' is not defined" + ] + } + ], "source": [ "# !!! Do not run this cell\n", "\n", @@ -311,9 +670,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "NameError", + "evalue": "name '_pulses_cache' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[8], line 8\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# !!! Do not run this cell\u001b[39;00m\n\u001b[1;32m 4\u001b[0m current_2_adc \u001b[38;5;241m=\u001b[39m config[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpmt_circuit_load_resistor\u001b[39m\u001b[38;5;124m'\u001b[39m] \\\n\u001b[1;32m 5\u001b[0m \u001b[38;5;241m*\u001b[39m config[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexternal_amplification\u001b[39m\u001b[38;5;124m'\u001b[39m] \\\n\u001b[1;32m 6\u001b[0m \u001b[38;5;241m/\u001b[39m (config[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdigitizer_voltage_range\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m/\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m (config[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdigitizer_bits\u001b[39m\u001b[38;5;124m'\u001b[39m]))\n\u001b[0;32m----> 8\u001b[0m left \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mmin([p[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mleft\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m \u001b[43m_pulses_cache\u001b[49m]) \u001b[38;5;241m-\u001b[39m config[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtrigger_window\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 9\u001b[0m right \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mmax([p[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mright\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m p \u001b[38;5;129;01min\u001b[39;00m _pulses_cache]) \u001b[38;5;241m+\u001b[39m config[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtrigger_window\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m right \u001b[38;5;241m-\u001b[39m left \u001b[38;5;241m<\u001b[39m \u001b[38;5;241m200000\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPulse cache too long\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "\u001b[0;31mNameError\u001b[0m: name '_pulses_cache' is not defined" + ] + } + ], "source": [ "# !!! Do not run this cell\n", "\n", @@ -396,7 +767,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -410,7 +781,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.12" + "version": "3.9.17" } }, "nbformat": 4, diff --git a/notebooks/Understanding_WFSim_P2.ipynb b/notebooks/Understanding_WFSim_P2.ipynb index 066bb978..d8477992 100644 --- a/notebooks/Understanding_WFSim_P2.ipynb +++ b/notebooks/Understanding_WFSim_P2.ipynb @@ -444,7 +444,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -458,7 +458,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.12" + "version": "3.9.17" } }, "nbformat": 4,