diff --git a/examples/MapPixelIDToUniqueID_FSD.ipynb b/examples/MapPixelIDToUniqueID_FSD.ipynb index 00301124..00d067d7 100644 --- a/examples/MapPixelIDToUniqueID_FSD.ipynb +++ b/examples/MapPixelIDToUniqueID_FSD.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "478b8b65-d1d8-44e1-b5c4-6d6906219e6f", "metadata": {}, "outputs": [], @@ -24,13 +24,13 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "id": "28c4f9ba-ab0e-4970-903f-4e57194a412d", "metadata": {}, "outputs": [], "source": [ "def unique_channel_id(d):\n", - " return ((d['io_group'].astype(int)*1000+d['io_channel'].astype(int))*1000 \\\n", + " return ((d['io_group'].astype(int)*10000+d['io_channel'].astype(int))*1000 \\\n", " + d['chip_id'].astype(int))*100 + d['channel_id'].astype(int)\n", "\n", "def unique_to_channel_id(unique):\n", @@ -46,18 +46,18 @@ " return ( (unique_to_io_channel(unique)-1) // 4) + 1\n", "\n", "def unique_to_io_group(unique):\n", - " return(unique // (100*1000*1000)) % 1000\n", + " return(unique // (100*1000*10000)) % 10000\n", "\n" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "d8203da9-f296-4598-a4da-873bdc3ee8c1", "metadata": {}, "outputs": [], "source": [ - "_default_geometry_yaml = '../larndsim/pixel_layouts/multi_tile_layout-3.0.40_NDLArModule_v3.yaml'\n", + "_default_geometry_yaml = '../larndsim/pixel_layouts/multi_tile_layout-3.0.40_fsd_v3.yaml'\n", "\n", "def _default_pxy():\n", " return (0., 0.)\n", @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "id": "98f48b43-86f1-4cc9-94e4-9c93f124e630", "metadata": {}, "outputs": [], @@ -185,20 +185,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "e4672705-1f56-4c88-a4c6-3e8e72f714dd", "metadata": { "scrolled": true }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 4/4 [00:04<00:00, 1.21s/it]\n" - ] - } - ], + "outputs": [], "source": [ "pixelid_to_uniqueid = dict()\n", "uniqueid_to_pixelid = dict()\n", @@ -208,7 +200,7 @@ " for chip_id in range(11, 171):\n", " for channel_id in range(64):\n", "\n", - " unique_id = ((io_group*1000+tile)*1000 + chip_id)*100 + channel_id\n", + " unique_id = ((io_group*10000+tile)*1000 + chip_id)*100 + channel_id\n", " pixel_id = unique_id_to_pixel_id(unique_id)\n", "\n", " if pixel_id in pixelid_to_uniqueid.keys():\n", @@ -225,149 +217,6 @@ "with open(\"uniqueid_to_pixelid_fsd.json\", \"w\") as f:\n", " json.dump(uniqueid_to_pixelid, f)\n" ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "770ef0e7-38f3-4045-8e2f-69cb3a7d8c48", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(-1.8600000000000136, 1471.26)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "geometry[(1, 1, 11, 0)]" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "191b7d04-4d2c-48fb-8524-1a9948c367cf", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(-474.3, 1471.26)" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "geometry[(3, 21, 11, 0)]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "id": "f698aa52-7fb0-47fc-9852-eee4a479dbbe", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Here\n", - "(4, 31, 11, 0)\n" - ] - } - ], - "source": [ - "for k in geometry.keys():\n", - " if k[0] == 4:\n", - " print('Here')\n", - " print(k)\n", - " break" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "id": "5f8d999b-3759-4a88-ab10-97786f25bbc0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "301007332" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pixelid_to_uniqueid[220215]" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "f82e9e0f-c54c-43c4-a411-793ad34afac9", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "307200" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "64*10*16*30" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "id": "50ead493-57ff-4417-b628-35b18568075b", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "5" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "unique_id_to_pixel_id(301002021)" - ] - }, - { - "cell_type": "markdown", - "id": "b0e8e763-ae24-4eb4-9bb9-e144dc57e898", - "metadata": {}, - "source": [ - "**\n", - "238389\n", - "3-35-74\n", - "20\n", - "**\n", - "220215\n", - "3-39-73\n", - "32" - ] } ], "metadata": { diff --git a/examples/create_pedestals_file_FSD.ipynb b/examples/create_pedestals_file_FSD.ipynb new file mode 100644 index 00000000..a04511cd --- /dev/null +++ b/examples/create_pedestals_file_FSD.ipynb @@ -0,0 +1,182 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "99296be1-7d4b-4989-9648-f6cfeda72fb3", + "metadata": {}, + "outputs": [], + "source": [ + "# It looks like the pedestal file I'm using is using tile number instead of io_channel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef8ab2b2-60dd-4533-be2f-195c0b9e3db8", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import numpy as np\n", + "import tqdm\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7b6865d8-ca8d-4c4f-a3e8-a70551c6fc71", + "metadata": {}, + "outputs": [], + "source": [ + "with open('/global/common/software/dune/inputs/FSD/pedestals/FSD_pedestals_20241112.json', 'r') as f:\n", + " data = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "037aad55-af7a-4976-ab16-2d893c142dfe", + "metadata": {}, + "outputs": [], + "source": [ + "def unique_channel_id(d):\n", + " return ((d['io_group'].astype(int)*10000+((d['io_channel'].astype(int)-1)//4)+1)*1000 \\\n", + " + d['chip_id'].astype(int))*100 + d['channel_id'].astype(int)\n", + "\n", + "def unique_to_channel_id(unique):\n", + " return unique % 100\n", + "\n", + "def unique_to_chip_id(unique):\n", + " return (unique// 100) % 1000\n", + "\n", + "def unique_to_io_channel(unique):\n", + " # Will instead extract tile number from pedestal file\n", + " return(unique//(100*1000)) % 1000\n", + "\n", + "def unique_to_tiles(unique):\n", + " return ( (unique_to_io_channel(unique)-1) // 4) + 1\n", + "\n", + "def unique_to_io_group(unique):\n", + " return(unique // (100*1000*10000)) % 10000" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b22f7176-b65a-4756-893b-8e6c4d430cca", + "metadata": {}, + "outputs": [], + "source": [ + "def convert_unique_id(unique_id):\n", + " io_group = (unique_to_io_group(unique_id) - 1) % 4 + 1\n", + " tile_id = (unique_to_io_channel(unique_id) - 1) % 10 + 1\n", + " chip_id = unique_to_chip_id(unique_id)\n", + " channel_id = unique_to_channel_id(unique_id)\n", + "\n", + " convert = (\n", + " (io_group*10000+tile_id)*1000 \\\n", + " + chip_id)*100 + channel_id\n", + "\n", + " return convert" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "96d4e347-18fd-4108-aae3-79a83f090bd2", + "metadata": {}, + "outputs": [], + "source": [ + "with open('uniqueid_to_pixelid_fsd.json', 'r') as file:\n", + " unique_id_to_pixel_id_fsd = json.load(file)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "026544f0-780e-4d1e-9d21-f8afbbda60fe", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "pixel_ids = [] \n", + "pedestals = []\n", + "\n", + "for k, v in data.items():\n", + " \n", + " pedestal = v['pedestal_mv']\n", + "\n", + " unique_id = int(k)\n", + "\n", + " converted_unique_id = convert_unique_id(unique_id)\n", + " \n", + " pixel_id = unique_id_to_pixel_id_fsd[str(converted_unique_id)]\n", + " \n", + " pixel_ids.append(pixel_id)\n", + " pedestals.append(pedestal)\n", + "\n", + "\n", + "out_file = 'pedestals_fsd.npz'\n", + "keys = np.array(pixel_ids, dtype='int64')\n", + "values = np.array(pedestals, dtype='float64')\n", + "default = np.array([580.])\n", + "np.savez(out_file, keys=keys, values=values, default=default)\n", + "# print(pixel_ids)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28c86ef7-634a-40d4-a5cc-7a05622a2b10", + "metadata": {}, + "outputs": [], + "source": [ + "len(pixel_ids)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aa9a194", + "metadata": {}, + "outputs": [], + "source": [ + "len(list(data.keys()))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a7f40406-65f1-46af-8849-7efbba246ee5", + "metadata": {}, + "outputs": [], + "source": [ + "print( np.array(pixel_ids).min(), np.array(pixel_ids).max())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "NERSC Python", + "language": "python", + "name": "python3" + }, + "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.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/larndsim/bin/pedestals_fsd.npz b/larndsim/bin/pedestals_fsd.npz new file mode 100644 index 00000000..dfd3afe3 Binary files /dev/null and b/larndsim/bin/pedestals_fsd.npz differ diff --git a/larndsim/config/config.yaml b/larndsim/config/config.yaml index d15995bd..dd790f6a 100644 --- a/larndsim/config/config.yaml +++ b/larndsim/config/config.yaml @@ -92,7 +92,10 @@ fsd: PIXEL_LAYOUT: multi_tile_layout-3.0.40_fsd_v3.yaml DET_PROPERTIES: fsd.yaml RESPONSE: response_37_v2d_fsd_ndlar_full.npz - PIXEL_THRESHOLDS_FILE: thresholds_fsd.npz + PIXEL_THRESHOLDS_FILE: [thresholds_fsd.npz] + PIXEL_THRESHOLDS_ID: [0] + PIXEL_PEDESTALS_FILE: [pedestals_fsd.npz] + PIXEL_PEDESTALS_ID: [0] #LIGHT_LUT: /sdf/data/neutrino/2x2/light_lut/lightLUT_FSD_250123_time_norm.npz LIGHT_LUT: /dvs_ro/cfs/cdirs/dune/www/data/2x2/simulation/larndsim_data/light_LUT/lightLUT_FSD_250123_time_norm.npz LIGHT_DET_NOISE: FSD_v01_bin06_larndsim_noise.npy diff --git a/larndsim/detector_properties/fsd.yaml b/larndsim/detector_properties/fsd.yaml index e6137ec5..3a8b31c6 100644 --- a/larndsim/detector_properties/fsd.yaml +++ b/larndsim/detector_properties/fsd.yaml @@ -17,8 +17,8 @@ module_to_io_groups: module_to_tpcs: {1: [0, 1]} discrimination_threshold: 5.0e3 # e- -v_cm: 478 # mV -v_ref: 1568 # mV +v_cm: 458.7 # mV ; based on data-taking conditions +v_ref: 1504.2 # mV ; based on data-taking conditions larpix_gain: 2.46e-3 # preliminary measurement by Stephen: https://indico.fnal.gov/event/71610 ## Light geometry parameters