diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..486a232 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.zip filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index be91fdb..24b0b62 100644 --- a/.gitignore +++ b/.gitignore @@ -169,3 +169,5 @@ servicex.yaml *.pstats servicex/test.py *.html +.DS_Store +figures/ diff --git a/README.md b/README.md index 951c1b1..e39dba9 100644 --- a/README.md +++ b/README.md @@ -36,13 +36,15 @@ with additional files: * `input_files/container_list.txt`: list of containers to run over * `input_files/produce_container_metadata.py`: query metadata for containers: number of files / events, size * `input_files/container_metadata.json`: output of `input_files/produce_container_metadata.py` with container metadata -* `input_files/get_file_list.py`: for a given dataset creates a txt file listing file access paths that include apropriate xcache. The same kind of output can be obtained by doing: +* `input_files/get_file_list.py`: for a given dataset creates a txt file listing file access paths that include appropriate xcache. The same kind of output can be obtained by doing: ``` export SITE_NAME=AF_200 rucio list-file-replicas mc20_13TeV:mc20_13TeV.364126.Sherpa_221_NNPDF30NNLO_Zee_MAXHTPTV500_1000.deriv.DAOD_PHYSLITE.e5299_s3681_r13145_p6026 --protocol root --pfns --rses MWT2_UC_LOCALGROUPDISK ``` +* `input_files/containers_to_files.py`: process the list of containers into a list of files per container with hardcoded xcache instances, writes to `input_files/file_lists/*`. + ### Branch list determination Branches to be read are determined with a 2018 data file. diff --git a/input_files/containers_to_files.py b/input_files/containers_to_files.py new file mode 100644 index 0000000..b46af86 --- /dev/null +++ b/input_files/containers_to_files.py @@ -0,0 +1,30 @@ +# process list of containers into list of files with hardcoded xcache instances + +# to run get_file_list.py, use e.g. a venv on uchicago via ssh +# python3 -m venv venv +# source venv/bin/activate +# pip install xmltodict +# (assuming setupATLAS / lsetup rucio + proxy present) + +import os +import shutil + +if __name__ == "__main__": + with open("container_list.txt") as f: + containers = f.readlines() + + for container in containers: + container = container.strip() + + if "#" in container: + continue # skip comments + + cmd = f"python get_file_list.py {container}" + print(cmd) + os.system(cmd) # produce file list + + # create zipped version of folder with file lists + shutil.make_archive("file_lists", "zip", "file_lists") + + # cleanup: delete non-zipped version + shutil.rmtree("file_lists") diff --git a/input_files/file_lists.zip b/input_files/file_lists.zip new file mode 100644 index 0000000..017e112 --- /dev/null +++ b/input_files/file_lists.zip @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2515a94ccf91973c779c4bcdfd1f857d1314643d320e7dab33a2d3c4b6735b4 +size 2243080 diff --git a/input_files/get_file_list.py b/input_files/get_file_list.py index eb88cfe..19fe463 100644 --- a/input_files/get_file_list.py +++ b/input_files/get_file_list.py @@ -13,6 +13,7 @@ import logging import xmltodict import hashlib +import os from rucio.common.exception import DataIdentifierNotFound from rucio.client.scopeclient import ScopeClient @@ -140,12 +141,16 @@ def hash_string(input_string): return int_value +output_directory = "file_lists" +if not os.path.exists(output_directory): + os.mkdir(output_directory) + cf = [] for f in files: c = hash_string(f) % len(caches) cf.append(f'root://{caches[c]}//{f}') print(f) -with open(f'{did}.txt', 'w') as file: +with open(f'{output_directory}/{did.replace(":", "-")}.txt', 'w') as file: for f in cf: file.write(f + '\n') diff --git a/input_files/utils.py b/input_files/utils.py new file mode 100644 index 0000000..4fab071 --- /dev/null +++ b/input_files/utils.py @@ -0,0 +1,69 @@ +from collections import defaultdict +import json +from pathlib import Path +import zipfile + +from . import find_containers + +DIR = Path(__file__).parent.resolve() + + +def get_dsids(process): + if "data" not in process: + return find_containers.container_dict[process] + else: + return [process] + + +def get_fileset(processes_to_use, max_files_per_container=None): + with open(DIR / "container_metadata.json") as f: + container_metadata = json.load(f) # name -> metadata + + container_to_file_list = {} # container name -> list of files + + # read from zipped file + with zipfile.ZipFile(DIR / "file_lists.zip") as z: + for filename in sorted(z.namelist()): + container_name = filename.split("/")[-1:][0].replace("-", ":").replace(".txt", "") + with z.open(filename) as f: + file_list = f.readlines() + + # limit amount of files per container + if max_files_per_container is not None: + file_list = file_list[:max_files_per_container] + + container_to_file_list[container_name] = [p.decode("utf-8").strip() for p in file_list] + + fileset = defaultdict(lambda: defaultdict(dict)) # process -> list of files + total_nfiles = 0 + total_size_TB = 0 + total_nevts = 0 + for process in processes_to_use: + dsids = get_dsids(process) + for dsid in dsids: + # find matching containers + matching_containers = [c for c in list(container_to_file_list.keys()) if str(dsid) in c] + # for each container, add full list of files + for container in matching_containers: + file_list = container_to_file_list[container] + total_nfiles += len(file_list) + if max_files_per_container is None: + assert len(file_list) == container_metadata[container]["nfiles"] + total_size_TB += container_metadata[container]["size_TB"] + total_nevts += container_metadata[container]["nevts"] + fileset[process]["files"].update(dict(zip(file_list, ["CollectionTree"]*len(file_list)))) + + print("fileset summary") + print(f" - number of files: {total_nfiles:,}") + if max_files_per_container is None: + print(f" - total size: {total_size_TB:.3f} TB") + print(f" - number of nevts: {total_nevts:,}") + else: + print("cannot determine total size / number of events when max_files_per_container is being used") + + return fileset + + +if __name__ == "__main__": + processes = ["db", "zjets", "wjets", "ttV", "othertop", "ttbar", "data15_13TeV", "data16_13TeV", "data17_13TeV", "data18_13TeV"] + get_fileset(processes) diff --git a/materialize_branches.ipynb b/materialize_branches.ipynb index 6eccbe6..69524ff 100644 --- a/materialize_branches.ipynb +++ b/materialize_branches.ipynb @@ -21,7 +21,10 @@ } ], "source": [ + "import glob\n", + "import json\n", "import os\n", + "from collections import defaultdict\n", "from pathlib import Path\n", "\n", "import awkward as ak\n", @@ -44,14 +47,19 @@ "\n", "warnings.filterwarnings(\"ignore\")\n", "\n", + "from input_files import utils\n", + "\n", "from dask.distributed import LocalCluster, Client, progress, performance_report\n", "\n", "# local: single thread, single worker\n", - "cluster = LocalCluster(n_workers=1, processes=False, threads_per_worker=1)\n", - "client = Client(cluster)\n", + "# cluster = LocalCluster(n_workers=1, processes=False, threads_per_worker=1)\n", + "# client = Client(cluster)\n", "\n", "# for UChicago\n", - "# client = Client(\"tcp://dask-alheld-a76c9434-b.af-jupyter:8786\")\n", + "client = Client(\"tcp://dask-alheld-f730f827-a.af-jupyter:8786\") # update this to point to your own client!\n", + "\n", + "figures_dir = Path.cwd() / \"figures\"\n", + "figures_dir.mkdir(exist_ok=True)\n", "\n", "print(f\"awkward: {ak.__version__}\")\n", "print(f\"dask-awkward: {dak.__version__}\")\n", @@ -75,9 +83,9 @@ "metadata": {}, "outputs": [], "source": [ - "fname = \"/data/alheld/200gbps-atlas/data18_13TeV.periodAllYear.physics_Main.PhysCont.DAOD_PHYSLITE.grp18_v01_p6026/DAOD_PHYSLITE.37021624._000036.pool.root.1\"\n", - "treename = \"CollectionTree\"\n", - "events = NanoEventsFactory.from_root({fname: treename}, schemaclass=PHYSLITESchema).events()" + "# fname = \"/data/alheld/200gbps-atlas/data18_13TeV.periodAllYear.physics_Main.PhysCont.DAOD_PHYSLITE.grp18_v01_p6026/DAOD_PHYSLITE.37021624._000036.pool.root.1\"\n", + "# treename = \"CollectionTree\"\n", + "# events = NanoEventsFactory.from_root({fname: treename}, schemaclass=PHYSLITESchema).events()" ] }, { @@ -88,9 +96,75 @@ "### distributed coffea" ] }, + { + "cell_type": "markdown", + "id": "f7f24e12-3fd8-481c-8318-7f9277f72c50", + "metadata": {}, + "source": [ + "build a `fileset` using the list of files corresponding to some selected containers" + ] + }, { "cell_type": "code", "execution_count": 3, + "id": "0ef7dd8d-68e5-43fa-b8bf-5d8f972520c5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "fileset summary\n", + " - number of files: 3\n", + "cannot determine total size / number of events when max_files_per_container is being used\n" + ] + } + ], + "source": [ + "# -------------\n", + "# CONFIGURATION\n", + "# -------------\n", + "# modify this to change how many files are being processed\n", + "# full list is list(find_containers.container_dict.keys()) + [\"data15_13TeV\", \"data16_13TeV\", \"data17_13TeV\", \"data18_13TeV\"]\n", + "\n", + "PROCESSES_TO_USE = [\"ttbar\"] # 6.7 TB\n", + "# PROCESSES_TO_USE = [\"db\", \"zjets\", \"wjets\", \"ttV\", \"othertop\", \"ttbar\"] # all simulation, 48.4 TB\n", + "# PROCESSES_TO_USE = [\"db\", \"zjets\", \"wjets\", \"ttV\", \"othertop\", \"ttbar\", \"data15_13TeV\", \"data16_13TeV\", \"data17_13TeV\", \"data18_13TeV\"] # 191 TB\n", + "\n", + "fileset = utils.get_fileset(PROCESSES_TO_USE, max_files_per_container=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ff312282-a87b-4394-aff4-6acc12d27c67", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "files at MWT2: 3, elsewhere: 0\n" + ] + } + ], + "source": [ + "# check for files not yet replicated to MWT2\n", + "files_at_mwt2 = 0\n", + "files_elsewhere = 0\n", + "for process in fileset.keys():\n", + " for file in fileset[process][\"files\"]:\n", + " if \"mwt2\" in file:\n", + " files_at_mwt2 += 1\n", + " else:\n", + " files_elsewhere += 1\n", + "\n", + "print(f\"files at MWT2: {files_at_mwt2}, elsewhere: {files_elsewhere}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "id": "0a38efe4-8024-422c-ba42-12bd3a3b44cd", "metadata": { "tags": [] @@ -190,41 +264,9 @@ " return {\"nevts\": num_events, \"_counter\": _counter}" ] }, - { - "cell_type": "markdown", - "id": "f7f24e12-3fd8-481c-8318-7f9277f72c50", - "metadata": {}, - "source": [ - "just run over a local data file here as an example" - ] - }, { "cell_type": "code", - "execution_count": 4, - "id": "684f1240-a754-4dd1-b861-1bfac65ec288", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'data': {'files': {'/data/alheld/200gbps-atlas/data18_13TeV.periodAllYear.physics_Main.PhysCont.DAOD_PHYSLITE.grp18_v01_p6026/DAOD_PHYSLITE.37021624._000036.pool.root.1': 'CollectionTree'}}}" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fileset = {\"data\": {\"files\": {fname: treename}}}\n", - "fileset" - ] - }, - { - "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "ed1ecc41-0a72-44ec-a8b8-654286a02196", "metadata": { "tags": [] @@ -234,20 +276,34 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.17 s, sys: 25.1 ms, total: 1.2 s\n", - "Wall time: 1.18 s\n" + "CPU times: user 62.8 ms, sys: 14.3 ms, total: 77.1 ms\n", + "Wall time: 2.36 s\n" ] } ], "source": [ "%%time\n", "# pre-process\n", - "samples, _ = dataset_tools.preprocess(fileset, step_size=1_000_000)" + "samples, report = dataset_tools.preprocess(fileset, skip_bad_files=True, uproot_options={\"allow_read_errors_with_report\": True})" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, + "id": "a7cf89ae-569f-4191-963d-d0e122eaf7ea", + "metadata": {}, + "outputs": [], + "source": [ + "# find issues where access did not work\n", + "for process in report:\n", + " for k, v in report[process][\"files\"].items():\n", + " if v[\"steps\"] is None:\n", + " print(f\"could not read {k}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, "id": "dca7b2ea-ae18-41ac-a4a8-cf257621dd10", "metadata": {}, "outputs": [], @@ -342,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "id": "15835a57-1182-4efb-8306-07f36af7a5b2", "metadata": { "tags": [] @@ -352,8 +408,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 2.15 s, sys: 34.3 ms, total: 2.18 s\n", - "Wall time: 2.16 s\n" + "CPU times: user 3.96 s, sys: 111 ms, total: 4.07 s\n", + "Wall time: 4.09 s\n" ] } ], @@ -377,7 +433,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "6b6dfb17-6806-46c8-aa59-cd475e40cf64", "metadata": { "tags": [] @@ -387,10 +443,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "total time spent in uproot reading data: 65.92 s\n", - "wall time: 69.24s\n", - "CPU times: user 30.3 s, sys: 40.3 s, total: 1min 10s\n", - "Wall time: 1min 9s\n" + "total time spent in uproot reading data: 40.30 s\n", + "wall time: 20.30s\n", + "CPU times: user 550 ms, sys: 73.8 ms, total: 624 ms\n", + "Wall time: 20.3 s\n" ] } ], @@ -408,7 +464,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "id": "bb47e9e5-57ea-4385-b8f8-b2a22ded030e", "metadata": {}, "outputs": [ @@ -416,11 +472,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "output: {'data': {'nevts': 127482, '_counter': 97995532}}\n", + "output: {'ttbar': {'nevts': 80000, '_counter': 53556499}}\n", "\n", "performance metrics:\n", - " - event rate: 1.84 kHz\n", - " - read 409.56 MB in 69.24 s -> 5.92 MBps (need to scale by x4226 to reach 200 Gbps)\n" + " - event rate: 3.94 kHz\n", + " - read 261.50 MB in 20.30 s -> 12.88 MBps (need to scale by x1941 to reach 200 Gbps)\n" ] } ], @@ -429,25 +485,26 @@ "\n", "print(\"\\nperformance metrics:\")\n", "\n", - "event_rate = out[\"data\"][\"nevts\"] / (t1-t0)\n", + "event_rate = sum([out[process][\"nevts\"] for process in out.keys()]) / (t1-t0)\n", "print(f\" - event rate: {event_rate / 1_000:.2f} kHz\")\n", "\n", "# need uproot>=5.3.2 to get these useful performance stats\n", - "read_MB = sum(report['data']['performance_counters']['num_requested_bytes']) / 1_000**2\n", + "num_bytes = ak.sum([report[process][\"performance_counters\"][\"num_requested_bytes\"] for process in out.keys()])\n", + "read_MB = num_bytes / 1_000**2\n", "rate_Mbs = read_MB / (t1-t0)\n", "print(f\" - read {read_MB:.2f} MB in {t1-t0:.2f} s -> {rate_Mbs:.2f} MBps (need to scale by x{200/8/rate_Mbs*1000:.0f} to reach 200 Gbps)\")" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "id": "51fb1ab6-0be4-4b99-942a-c1b53eda5639", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'from-uproot-a425e4500d963f22bf8285371d571b32': frozenset({'AnalysisElectronsAuxDyn.DFCommonElectronsECIDSResult',\n", + "{'from-uproot-08c819d5b3e2667624a7b22c8e1cbdd5': frozenset({'AnalysisElectronsAuxDyn.DFCommonElectronsECIDSResult',\n", " 'AnalysisElectronsAuxDyn.ambiguityLink',\n", " 'AnalysisElectronsAuxDyn.eta',\n", " 'AnalysisElectronsAuxDyn.f1',\n", @@ -531,7 +588,7 @@ " 'PrimaryVerticesAuxDyn.z'})}" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -546,12 +603,14 @@ "id": "5e95cec3-d919-4973-9989-e343f6745199", "metadata": {}, "source": [ - "## sanity check: read those columns without any Dask / coffea, compare footprint" + "## sanity check: read those columns without any Dask / coffea, compare footprint\n", + "\n", + "this does not scale and uses a single hardcoded file" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "id": "49190b2a-0953-48b1-b56a-83b6e8298cfd", "metadata": {}, "outputs": [ @@ -566,7 +625,9 @@ "source": [ "branches_touched = list(list(dak.report_necessary_columns(tasks).values())[0])\n", "\n", - "t = uproot.open({fname: \"CollectionTree\"})\n", + "fname = \"/data/alheld/200gbps-atlas/data18_13TeV.periodAllYear.physics_Main.PhysCont.DAOD_PHYSLITE.grp18_v01_p6026/DAOD_PHYSLITE.37021624._000036.pool.root.1\"\n", + "treename = \"CollectionTree\"\n", + "t = uproot.open({fname: treename})\n", "\n", "initial_size_in_MB = t.file.source.num_requested_bytes/1000**2 # non-zero at the start (some metadata read)\n", "\n", @@ -594,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "id": "5acaa518-16e2-444b-b086-d778fb096163", "metadata": {}, "outputs": [ @@ -602,88 +663,88 @@ "name": "stdout", "output_type": "stream", "text": [ - "AnalysisJetsAuxDyn.pt : 249 ms\t\t 5.03 MB\t\t 20.2 MB/s\n", - "AnalysisJetsAuxDyn.eta : 251 ms\t\t 5.25 MB\t\t 20.9 MB/s\n", - "AnalysisJetsAuxDyn.phi : 248 ms\t\t 5.24 MB\t\t 21.1 MB/s\n", - "AnalysisJetsAuxDyn.m : 248 ms\t\t 5.05 MB\t\t 20.4 MB/s\n", - "AnalysisElectronsAuxDyn.pt : 367 ms\t\t 0.67 MB\t\t 1.8 MB/s\n", - "AnalysisElectronsAuxDyn.eta : 371 ms\t\t 0.68 MB\t\t 1.8 MB/s\n", - "AnalysisElectronsAuxDyn.phi : 372 ms\t\t 0.68 MB\t\t 1.8 MB/s\n", - "AnalysisElectronsAuxDyn.m : 373 ms\t\t 0.43 MB\t\t 1.2 MB/s\n", - "AnalysisMuonsAuxDyn.pt : 377 ms\t\t 0.74 MB\t\t 2.0 MB/s\n", - "AnalysisMuonsAuxDyn.eta : 377 ms\t\t 0.75 MB\t\t 2.0 MB/s\n", - "AnalysisMuonsAuxDyn.phi : 374 ms\t\t 0.75 MB\t\t 2.0 MB/s\n", - "AnalysisJetsAuxDyn.EnergyPerSampling : 1982 ms\t\t38.83 MB\t\t 19.6 MB/s\n", - "AnalysisJetsAuxDyn.SumPtTrkPt500 : 2107 ms\t\t30.52 MB\t\t 14.5 MB/s\n", - "AnalysisJetsAuxDyn.TrackWidthPt1000 : 1999 ms\t\t17.00 MB\t\t 8.5 MB/s\n", - "PrimaryVerticesAuxDyn.z : 324 ms\t\t13.11 MB\t\t 40.4 MB/s\n", - "PrimaryVerticesAuxDyn.x : 322 ms\t\t10.82 MB\t\t 33.6 MB/s\n", - "PrimaryVerticesAuxDyn.y : 323 ms\t\t10.53 MB\t\t 32.6 MB/s\n", - "AnalysisJetsAuxDyn.NumTrkPt500 : 2279 ms\t\t10.36 MB\t\t 4.5 MB/s\n", - "AnalysisJetsAuxDyn.NumTrkPt1000 : 1987 ms\t\t 7.63 MB\t\t 3.8 MB/s\n", - "AnalysisJetsAuxDyn.SumPtChargedPFOPt500 : 1945 ms\t\t 5.96 MB\t\t 3.1 MB/s\n", - "AnalysisJetsAuxDyn.Timing : 293 ms\t\t 5.31 MB\t\t 18.1 MB/s\n", - "AnalysisJetsAuxDyn.JetConstitScaleMomentum_eta : 292 ms\t\t 5.26 MB\t\t 18.0 MB/s\n", - "AnalysisJetsAuxDyn.ActiveArea4vec_eta : 293 ms\t\t 5.25 MB\t\t 18.0 MB/s\n", - "AnalysisJetsAuxDyn.DetectorEta : 293 ms\t\t 5.25 MB\t\t 17.9 MB/s\n", - "AnalysisJetsAuxDyn.JetConstitScaleMomentum_phi : 295 ms\t\t 5.25 MB\t\t 17.8 MB/s\n", - "AnalysisJetsAuxDyn.ActiveArea4vec_phi : 598 ms\t\t 5.24 MB\t\t 8.8 MB/s\n", - "AnalysisJetsAuxDyn.JetConstitScaleMomentum_m : 292 ms\t\t 5.13 MB\t\t 17.6 MB/s\n", - "AnalysisJetsAuxDyn.JetConstitScaleMomentum_pt : 292 ms\t\t 5.07 MB\t\t 17.4 MB/s\n", - "AnalysisJetsAuxDyn.EMFrac : 292 ms\t\t 5.04 MB\t\t 17.3 MB/s\n", - "AnalysisJetsAuxDyn.Width : 291 ms\t\t 5.01 MB\t\t 17.2 MB/s\n", - "AnalysisJetsAuxDyn.ActiveArea4vec_m : 292 ms\t\t 4.90 MB\t\t 16.8 MB/s\n", - "AnalysisJetsAuxDyn.ActiveArea4vec_pt : 293 ms\t\t 4.85 MB\t\t 16.5 MB/s\n", - "AnalysisJetsAuxDyn.DFCommonJets_QGTagger_TracksWidth : 295 ms\t\t 3.78 MB\t\t 12.8 MB/s\n", - "AnalysisJetsAuxDyn.PSFrac : 294 ms\t\t 3.67 MB\t\t 12.5 MB/s\n", - "AnalysisJetsAuxDyn.JVFCorr : 297 ms\t\t 3.49 MB\t\t 11.7 MB/s\n", - "AnalysisJetsAuxDyn.DFCommonJets_QGTagger_TracksC1 : 292 ms\t\t 3.39 MB\t\t 11.6 MB/s\n", - "AnalysisJetsAuxDyn.DFCommonJets_fJvt : 291 ms\t\t 1.67 MB\t\t 5.7 MB/s\n", - "AnalysisJetsAuxDyn.DFCommonJets_QGTagger_NTracks : 291 ms\t\t 1.50 MB\t\t 5.2 MB/s\n", - "AnalysisJetsAuxDyn.GhostMuonSegmentCount : 293 ms\t\t 1.24 MB\t\t 4.2 MB/s\n", - "AnalysisMuonsAuxDyn.muonSegmentLinks : 566 ms\t\t 0.82 MB\t\t 1.5 MB/s\n", - "AnalysisMuonsAuxDyn.msOnlyExtrapolatedMuonSpectrometerTrackParticleLink : 1102 ms\t\t 0.46 MB\t\t 0.4 MB/s\n", - "AnalysisMuonsAuxDyn.extrapolatedMuonSpectrometerTrackParticleLink : 817 ms\t\t 0.44 MB\t\t 0.5 MB/s\n", - "AnalysisMuonsAuxDyn.inDetTrackParticleLink : 1092 ms\t\t 0.44 MB\t\t 0.4 MB/s\n", - "AnalysisMuonsAuxDyn.muonSpectrometerTrackParticleLink : 819 ms\t\t 0.44 MB\t\t 0.5 MB/s\n", - "AnalysisMuonsAuxDyn.momentumBalanceSignificance : 454 ms\t\t 0.77 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.topoetcone20_CloseByCorr : 453 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.scatteringCurvatureSignificance : 452 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.scatteringNeighbourSignificance : 454 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.neflowisol20_CloseByCorr : 455 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.topoetcone20 : 458 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.topoetcone30 : 452 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.topoetcone40 : 453 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.neflowisol20 : 451 ms\t\t 0.75 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.segmentDeltaEta : 451 ms\t\t 0.75 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.DFCommonJetDr : 449 ms\t\t 0.75 MB\t\t 1.7 MB/s\n", - "AnalysisMuonsAuxDyn.combinedTrackParticleLink : 815 ms\t\t 0.41 MB\t\t 0.5 MB/s\n", - "AnalysisMuonsAuxDyn.InnerDetectorPt : 452 ms\t\t 0.74 MB\t\t 1.6 MB/s\n", - "AnalysisMuonsAuxDyn.MuonSpectrometerPt : 450 ms\t\t 0.74 MB\t\t 1.6 MB/s\n", - "AnalysisMuonsAuxDyn.clusterLink : 819 ms\t\t 0.39 MB\t\t 0.5 MB/s\n", - "AnalysisMuonsAuxDyn.spectrometerFieldIntegral : 450 ms\t\t 0.72 MB\t\t 1.6 MB/s\n", - "AnalysisElectronsAuxDyn.ambiguityLink : 820 ms\t\t 0.39 MB\t\t 0.5 MB/s\n", - "AnalysisMuonsAuxDyn.EnergyLoss : 781 ms\t\t 0.72 MB\t\t 0.9 MB/s\n", - "AnalysisJetsAuxDyn.NNJvtPass : 452 ms\t\t 0.70 MB\t\t 1.6 MB/s\n", - "AnalysisElectronsAuxDyn.topoetcone20_CloseByCorr : 451 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", - "AnalysisElectronsAuxDyn.topoetcone20ptCorrection : 452 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", - "AnalysisElectronsAuxDyn.topoetcone20 : 451 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", - "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr : 453 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", - "AnalysisElectronsAuxDyn.DFCommonElectronsECIDSResult : 453 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", - "AnalysisElectronsAuxDyn.neflowisol20 : 451 ms\t\t 0.68 MB\t\t 1.5 MB/s\n", - "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 : 450 ms\t\t 0.68 MB\t\t 1.5 MB/s\n", - "AnalysisMuonsAuxDyn.ptcone40 : 453 ms\t\t 0.66 MB\t\t 1.5 MB/s\n", - "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr : 450 ms\t\t 0.66 MB\t\t 1.5 MB/s\n", - "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 : 457 ms\t\t 0.65 MB\t\t 1.4 MB/s\n", - "AnalysisMuonsAuxDyn.ptvarcone40 : 453 ms\t\t 0.65 MB\t\t 1.4 MB/s\n", + "AnalysisJetsAuxDyn.pt : 341 ms\t\t 5.03 MB\t\t 14.7 MB/s\n", + "AnalysisJetsAuxDyn.eta : 341 ms\t\t 5.25 MB\t\t 15.4 MB/s\n", + "AnalysisJetsAuxDyn.phi : 341 ms\t\t 5.24 MB\t\t 15.4 MB/s\n", + "AnalysisJetsAuxDyn.m : 338 ms\t\t 5.05 MB\t\t 15.0 MB/s\n", + "AnalysisElectronsAuxDyn.pt : 455 ms\t\t 0.67 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.eta : 456 ms\t\t 0.68 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.phi : 457 ms\t\t 0.68 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.m : 461 ms\t\t 0.43 MB\t\t 0.9 MB/s\n", + "AnalysisMuonsAuxDyn.pt : 456 ms\t\t 0.74 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.eta : 457 ms\t\t 0.75 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.phi : 459 ms\t\t 0.75 MB\t\t 1.6 MB/s\n", + "AnalysisJetsAuxDyn.EnergyPerSampling : 2277 ms\t\t38.83 MB\t\t 17.0 MB/s\n", + "AnalysisJetsAuxDyn.SumPtTrkPt500 : 2439 ms\t\t30.52 MB\t\t 12.5 MB/s\n", + "AnalysisJetsAuxDyn.TrackWidthPt1000 : 2141 ms\t\t17.00 MB\t\t 7.9 MB/s\n", + "PrimaryVerticesAuxDyn.z : 372 ms\t\t13.11 MB\t\t 35.3 MB/s\n", + "PrimaryVerticesAuxDyn.x : 376 ms\t\t10.82 MB\t\t 28.8 MB/s\n", + "PrimaryVerticesAuxDyn.y : 378 ms\t\t10.53 MB\t\t 27.8 MB/s\n", + "AnalysisJetsAuxDyn.NumTrkPt500 : 2412 ms\t\t10.36 MB\t\t 4.3 MB/s\n", + "AnalysisJetsAuxDyn.NumTrkPt1000 : 2120 ms\t\t 7.63 MB\t\t 3.6 MB/s\n", + "AnalysisJetsAuxDyn.SumPtChargedPFOPt500 : 2071 ms\t\t 5.96 MB\t\t 2.9 MB/s\n", + "AnalysisJetsAuxDyn.Timing : 341 ms\t\t 5.31 MB\t\t 15.6 MB/s\n", + "AnalysisJetsAuxDyn.JetConstitScaleMomentum_eta : 338 ms\t\t 5.26 MB\t\t 15.5 MB/s\n", + "AnalysisJetsAuxDyn.ActiveArea4vec_eta : 336 ms\t\t 5.25 MB\t\t 15.6 MB/s\n", + "AnalysisJetsAuxDyn.DetectorEta : 336 ms\t\t 5.25 MB\t\t 15.6 MB/s\n", + "AnalysisJetsAuxDyn.JetConstitScaleMomentum_phi : 336 ms\t\t 5.25 MB\t\t 15.6 MB/s\n", + "AnalysisJetsAuxDyn.ActiveArea4vec_phi : 559 ms\t\t 5.24 MB\t\t 9.4 MB/s\n", + "AnalysisJetsAuxDyn.JetConstitScaleMomentum_m : 338 ms\t\t 5.13 MB\t\t 15.2 MB/s\n", + "AnalysisJetsAuxDyn.JetConstitScaleMomentum_pt : 336 ms\t\t 5.07 MB\t\t 15.1 MB/s\n", + "AnalysisJetsAuxDyn.EMFrac : 338 ms\t\t 5.04 MB\t\t 14.9 MB/s\n", + "AnalysisJetsAuxDyn.Width : 341 ms\t\t 5.01 MB\t\t 14.7 MB/s\n", + "AnalysisJetsAuxDyn.ActiveArea4vec_m : 337 ms\t\t 4.90 MB\t\t 14.5 MB/s\n", + "AnalysisJetsAuxDyn.ActiveArea4vec_pt : 336 ms\t\t 4.85 MB\t\t 14.5 MB/s\n", + "AnalysisJetsAuxDyn.DFCommonJets_QGTagger_TracksWidth : 340 ms\t\t 3.78 MB\t\t 11.1 MB/s\n", + "AnalysisJetsAuxDyn.PSFrac : 340 ms\t\t 3.67 MB\t\t 10.8 MB/s\n", + "AnalysisJetsAuxDyn.JVFCorr : 336 ms\t\t 3.49 MB\t\t 10.4 MB/s\n", + "AnalysisJetsAuxDyn.DFCommonJets_QGTagger_TracksC1 : 338 ms\t\t 3.39 MB\t\t 10.0 MB/s\n", + "AnalysisJetsAuxDyn.DFCommonJets_fJvt : 335 ms\t\t 1.67 MB\t\t 5.0 MB/s\n", + "AnalysisJetsAuxDyn.DFCommonJets_QGTagger_NTracks : 338 ms\t\t 1.50 MB\t\t 4.4 MB/s\n", + "AnalysisJetsAuxDyn.GhostMuonSegmentCount : 342 ms\t\t 1.24 MB\t\t 3.6 MB/s\n", + "AnalysisMuonsAuxDyn.muonSegmentLinks : 662 ms\t\t 0.82 MB\t\t 1.2 MB/s\n", + "AnalysisMuonsAuxDyn.msOnlyExtrapolatedMuonSpectrometerTrackParticleLink : 819 ms\t\t 0.46 MB\t\t 0.6 MB/s\n", + "AnalysisMuonsAuxDyn.extrapolatedMuonSpectrometerTrackParticleLink : 815 ms\t\t 0.44 MB\t\t 0.5 MB/s\n", + "AnalysisMuonsAuxDyn.inDetTrackParticleLink : 809 ms\t\t 0.44 MB\t\t 0.5 MB/s\n", + "AnalysisMuonsAuxDyn.muonSpectrometerTrackParticleLink : 811 ms\t\t 0.44 MB\t\t 0.5 MB/s\n", + "AnalysisMuonsAuxDyn.momentumBalanceSignificance : 457 ms\t\t 0.77 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.topoetcone20_CloseByCorr : 457 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.scatteringCurvatureSignificance : 456 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.scatteringNeighbourSignificance : 457 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.neflowisol20_CloseByCorr : 460 ms\t\t 0.76 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.topoetcone20 : 457 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.topoetcone30 : 456 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.topoetcone40 : 457 ms\t\t 0.76 MB\t\t 1.7 MB/s\n", + "AnalysisMuonsAuxDyn.neflowisol20 : 461 ms\t\t 0.75 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.segmentDeltaEta : 459 ms\t\t 0.75 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.DFCommonJetDr : 456 ms\t\t 0.75 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.combinedTrackParticleLink : 811 ms\t\t 0.41 MB\t\t 0.5 MB/s\n", + "AnalysisMuonsAuxDyn.InnerDetectorPt : 460 ms\t\t 0.74 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.MuonSpectrometerPt : 460 ms\t\t 0.74 MB\t\t 1.6 MB/s\n", + "AnalysisMuonsAuxDyn.clusterLink : 811 ms\t\t 0.39 MB\t\t 0.5 MB/s\n", + "AnalysisMuonsAuxDyn.spectrometerFieldIntegral : 456 ms\t\t 0.72 MB\t\t 1.6 MB/s\n", + "AnalysisElectronsAuxDyn.ambiguityLink : 808 ms\t\t 0.39 MB\t\t 0.5 MB/s\n", + "AnalysisMuonsAuxDyn.EnergyLoss : 460 ms\t\t 0.72 MB\t\t 1.6 MB/s\n", + "AnalysisJetsAuxDyn.NNJvtPass : 462 ms\t\t 0.70 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.topoetcone20_CloseByCorr : 685 ms\t\t 0.69 MB\t\t 1.0 MB/s\n", + "AnalysisElectronsAuxDyn.topoetcone20ptCorrection : 462 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.topoetcone20 : 457 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", + "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500_CloseByCorr : 463 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.DFCommonElectronsECIDSResult : 455 ms\t\t 0.69 MB\t\t 1.5 MB/s\n", + "AnalysisElectronsAuxDyn.neflowisol20 : 460 ms\t\t 0.68 MB\t\t 1.5 MB/s\n", + "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt500 : 458 ms\t\t 0.68 MB\t\t 1.5 MB/s\n", + "AnalysisMuonsAuxDyn.ptcone40 : 458 ms\t\t 0.66 MB\t\t 1.4 MB/s\n", + "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000_CloseByCorr : 458 ms\t\t 0.66 MB\t\t 1.4 MB/s\n", + "AnalysisMuonsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVA_pt1000 : 682 ms\t\t 0.65 MB\t\t 1.0 MB/s\n", + "AnalysisMuonsAuxDyn.ptvarcone40 : 455 ms\t\t 0.65 MB\t\t 1.4 MB/s\n", "AnalysisElectronsAuxDyn.f1 : 455 ms\t\t 0.65 MB\t\t 1.4 MB/s\n", - "AnalysisMuonsAuxDyn.ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 : 453 ms\t\t 0.65 MB\t\t 1.4 MB/s\n", - "PrimaryVerticesAuxDyn.vertexType : 288 ms\t\t 0.64 MB\t\t 2.2 MB/s\n", - "AnalysisMuonsAuxDyn.ptvarcone30 : 452 ms\t\t 0.64 MB\t\t 1.4 MB/s\n", - "AnalysisMuonsAuxDyn.ptcone30 : 455 ms\t\t 0.64 MB\t\t 1.4 MB/s\n", - "AnalysisMuonsAuxDyn.ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 : 453 ms\t\t 0.63 MB\t\t 1.4 MB/s\n", - "AnalysisElectronsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 : 452 ms\t\t 0.61 MB\t\t 1.4 MB/s\n", - "AnalysisMuonsAuxDyn.CaloLRLikelihood : 450 ms\t\t 0.61 MB\t\t 1.4 MB/s\n" + "AnalysisMuonsAuxDyn.ptcone20_Nonprompt_All_MaxWeightTTVA_pt500 : 460 ms\t\t 0.65 MB\t\t 1.4 MB/s\n", + "PrimaryVerticesAuxDyn.vertexType : 337 ms\t\t 0.64 MB\t\t 1.9 MB/s\n", + "AnalysisMuonsAuxDyn.ptvarcone30 : 456 ms\t\t 0.64 MB\t\t 1.4 MB/s\n", + "AnalysisMuonsAuxDyn.ptcone30 : 457 ms\t\t 0.64 MB\t\t 1.4 MB/s\n", + "AnalysisMuonsAuxDyn.ptcone20_Nonprompt_All_MaxWeightTTVA_pt1000 : 458 ms\t\t 0.63 MB\t\t 1.4 MB/s\n", + "AnalysisElectronsAuxDyn.ptvarcone30_Nonprompt_All_MaxWeightTTVALooseCone_pt500 : 454 ms\t\t 0.61 MB\t\t 1.3 MB/s\n", + "AnalysisMuonsAuxDyn.CaloLRLikelihood : 457 ms\t\t 0.61 MB\t\t 1.3 MB/s\n" ] } ], @@ -703,7 +764,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "id": "55e321f6-3ae6-4af3-a9e3-b7e5e469cffa", "metadata": {}, "outputs": [ @@ -712,19 +773,19 @@ "output_type": "stream", "text": [ "reading 12 branch(es)\n", - " - read 64.08 MB in 6.76 s\n", + " - read 64.08 MB in 7.04 s\n", "reading 24 branch(es)\n", - " - read 191.08 MB in 19.10 s\n", + " - read 191.08 MB in 20.51 s\n", "reading 36 branch(es)\n", - " - read 245.91 MB in 22.42 s\n", + " - read 245.91 MB in 24.55 s\n", "reading 48 branch(es)\n", - " - read 257.35 MB in 30.04 s\n", + " - read 257.35 MB in 32.44 s\n", "reading 60 branch(es)\n", - " - read 266.31 MB in 35.72 s\n", + " - read 266.31 MB in 39.86 s\n", "reading 72 branch(es)\n", - " - read 274.57 MB in 42.14 s\n", + " - read 274.57 MB in 45.74 s\n", "reading 82 branch(es)\n", - " - read 280.93 MB in 48.16 s\n" + " - read 280.93 MB in 50.45 s\n" ] } ], @@ -759,7 +820,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "id": "ed8b860f-5df8-4fad-b405-8c8d2e7fc871", "metadata": {}, "outputs": [ @@ -767,13 +828,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "fraction read: 5.70% in 6.76 s\n", - "fraction read: 17.01% in 19.10 s\n", - "fraction read: 21.89% in 22.42 s\n", - "fraction read: 22.91% in 30.04 s\n", - "fraction read: 23.70% in 35.72 s\n", - "fraction read: 24.44% in 42.14 s\n", - "fraction read: 25.01% in 48.16 s\n" + "fraction read: 5.70% in 7.04 s\n", + "fraction read: 17.01% in 20.51 s\n", + "fraction read: 21.89% in 24.55 s\n", + "fraction read: 22.91% in 32.44 s\n", + "fraction read: 23.70% in 39.86 s\n", + "fraction read: 24.44% in 45.74 s\n", + "fraction read: 25.01% in 50.45 s\n" ] } ], @@ -784,25 +845,15 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "id": "0f10517f-c2bf-4155-a829-2123a828386e", "metadata": {}, "outputs": [ { "data": { + "image/png": "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d58effRRde7cWZL0/PPPq7S0VDfffLNiY2O1ePFizZ8/X/fee2+QoweAwDHdFa1ux6BNdFR//OMfvX//29/+1my7QBVB1q1bp/j4eOXm5rbpPo/Ho927dysnJ6fFdlFRUYqKimp03jRNOtgWIM/WIdfWIM/WIM/WsSrXIVUEueOOO3yOZ86cqfz8fO3YsUODBg1STU2N3njjDd10000644wzJEkzZszQL3/5S23dutVnaCoAhBPDmajW/JNgOJsfwg+EuoULFwbttT0ej958802NGTNGERG+U8oWLlyoxMRETZkyRZJUXFysjIwMJScn68iRI1qxYoUOHDigCRMmBCN0AADQBiFVBPmmmpoaSVLXrl0lSTt27NDx48eVlfW/od6nnXaakpKSmi2CsAhZcLCQkHXItTWCnufMwVJCt5anxCQkycgc3KG/FoKeZxsJxVy3dhhrIGzatEnl5eUaN25co2vl5eU+eTp8+LCeeuopud1udenSRenp6brvvvvUq1cvK0MGAADtELJFEI/Ho+eee079+/f37kLjdrsVGRmpLl26+LSNj4+X2+1u8jksQhZcLCRkHXJtjWDmuWb6rTp4/y3NXu82/RbFnhYev4Tx9WydUMx1RUWFysrKVF1drREjRqhbt27yeDyqqalRbGxsk+uEnKzs7GwVFRU1eW327Nk+x9ddd52uu+46v8cAAAACL2SLIIsXL9aePXs0d+7ck3oOi5AFBwsJWYdcWyMk8pw+UI7pt8mz9P98R4QkJMmRN01V6QNV9eWXwYnNT0IizzZh9SJkrWGapgoLC7V69Wp5PB5JUp8+fdStWzfV1tZq5syZuvrqq3XJJZf47TUBAIC9hGQRZPHixSotLdWcOXPUrVs373mn06n6+nodOXLEZzRIVVVVs7vDsAhZcJFn65BrawQ7z0buSDmGDpe2lTUsgupMlDIGyXBEhNX//2Dn2U5CKdcrVqzQqlWrdPnllysrK0v33Xef91psbKyGDx+ud955hyIIAABot5AqgpimqWeeeUYbN27U7Nmz1aNHD5/r6enpioiI0KZNm3TWWWdJkvbu3avy8nIWRQVgG4YjQuqfxS4wCDtr167VmDFjNGXKFB06dKjR9dTUVH3wwQfWBwYAAMJGSBVBFi9erH/961+65ZZbFBMT413nIzY2VtHR0YqNjdX48eNVWFiorl27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bf2LhQsX6sUXX/S2v/jii/Xhhx9q5cqV+uKLL1RUVKTt27frwgsvDNI7AAAArdHh1gQZNWqUqqurVVRUJLfbrbS0NN1+++0tDj8FAABoybf1L8rLy70Lt0lS//79deONN2rp0qVasmSJevbsqV//+tfq06dPkN4BAABojQ5XBJGkCy+8sN2ftERFRemqq65SVFSUn6PC15Fn65Bra5Bna5Bn65DrxlrqX8yePbvRuZEjR2rkyJHtfj3+H1iDPFuHXFuDPFuDPFvH6lwbJpOcAAAAAACADXS4NUEAAAAAAADagyIIAAAAAACwBYogAAAAAADAFjrkwqhft3r1aq1cuVJut1upqam6/vrr1a9fv2bbb9iwQcuWLdOBAweUnJysH/zgB8rNzfVeN01TRUVFWrt2rY4cOaIBAwYoPz9fPXv2tOLthDR/53rRokVav369zz3Z2dm64447AvYeOoK25HnPnj1atmyZdu7cqQMHDmjq1Km65JJLTuqZduHvPBcVFam4uNjnXEpKih577LFAvYUOoy25/vvf/65//OMf2rNnjyQpPT1d11xzjU97fk43zd955md0+9AvsQZ9EmvQJ7EGfRLr0CexRsj3ScwO7K233jKvueYa84033jD37Nlj/v73vzevu+460+12N9n+P//5jzl58mTz1VdfNffs2WMuWbLEzMvLMz/77DNvm+XLl5tTp041N27caO7atcssKCgwZ86caR49etSqtxWSApHrhQsXmvPmzTMrKyu9fw4dOmTVWwpJbc3ztm3bzMLCQvNf//qXOW3aNPO111476WfaQSDyvGzZMvPmm2/2+XquqqoK9FsJeW3N9YIFC8zVq1ebO3fuND///HNz0aJF5tSpU82DBw962/BzurFA5Jmf0W1Hv8Qa9EmsQZ/EGvRJrEOfxBodoU/SoafDvPbaa5owYYLGjRunXr16adq0aYqOjta6deuabL9q1SoNHTpUl112mXr16qW8vDylp6dr9erVkhoqeatWrdL3vvc9nXnmmUpNTdXPfvYzVVZW6t1337XyrYUcf+f6hMjISDmdTu+frl27WvF2QlZb89yvXz/98Ic/1OjRo5vdUqqtz7SDQORZkhwOh8/Xc1xcXKDeQofR1lzfeOONuuCCC5SWlqbTTjtNP/3pT2WapjZt2iSJn9PN8XeeT+BndNvQL7EGfRJr0Cex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stuWHG3cuFHLli2Ty+VScnKyJk+erHfffVdlZWW2nX8MALAX+iRNo08ChI7QKIMCOCnnnXeeEhMTtXz5cl100UU6/fTT5XQ6vdc9Ho/mzZunAQMG6Ic//KE6deokSdqwYYOOHj2q888/X6eccoo+/fRTrV69WhUVFbr55pu993/22We6++67FRkZqQkTJqhHjx5yuVz697//rWuuuUYjRozQl19+qbfeektTp07VKaecIkmKi4trMl63260777xTx44d00UXXaSuXbtq/fr1Kigo0K9+9SsNHz7cp/2rr74qwzB06aWXqqamRitWrNDjjz+u+++/v1X5efTRR5WcnKxrrrlGJ+q+L7/8spYtW6aRI0dqwoQJqq6u1l//+lfdc889euihh7yfXrU2Rx9++KHmz5+vXr166ZprrtHhw4f1xBNPqFu3bq2KEQCAcECfpGX0SYDgowgChIHMzEzV1dVp+fLlGjhwoM466yyf63V1dRo5cqSmTJnic/7aa6/1+eTg3HPPVXJyspYsWaLy8nLvpw/PPPOMJKmgoMDnE4kf/OAHkqTU1FT17dtXb731ls4880z16NGjxXhfeeUVVVVVae7cuRowYID3tWfNmqXnn39ew4YNk8Pxv9l6x44d08MPP+wdvtqlSxc999xz2r17t/r06fOt+UlNTdVNN93kPT5w4ICKioo0efJkfe973/OeHz58uG699Vb97W9/855vbY5eeOEFOZ1O3XvvvYqNjZXU8MnXfffdp+7du39rjAAAhAP6JC2jTwIEH2uCADZx/vnnNzr39X9Ia2trVV1drczMTJmmqZ07d0qSqqur9fHHH2vcuHGNVnZv78Ji77//vvr16+ftbEhS586dde655+rAgQP6/PPPfdqPGzfOZ/7uwIEDJUn79+9v1eudd955PsfvvPOOTNPUqFGjVF1d7f3jdDqVnJysLVu2eNu2JkeVlZXatWuXxowZ4+1sSNKQIUPUq1evVsUIAIBd0Cf5H/okgPUYCQLYQEREhBITExudLy8v17Jly/Tee+/pyJEjPtdqamokNcyTlaTevXv7LZ7y8nJlZGQ0On/aaad5r3/905RvdnRODAs9fPhwq17vm58CuVwumaapG2+8scn2X+/ctCZHBw4ckKQm5wOnpKR4OyYAANgdfRL6JECwUQQBbCAyMtJnKKfUMCf33nvv1eHDh3X55ZfrtNNOU6dOnVRRUaEnnnhCobRm8jdjb6tvLhbm8XhkGIZuu+22Jp/duXNnb7uOkiMAADoC+iT0SYBgowgC2NTu3bv15ZdfaubMmRozZoz3/EcffeTT7tRTT5Uk7dmzp8XntWUYalJSkvbu3dvo/BdffOG9HkjJyckyTVM9evRQSkpKs+1am6MT82tdLlejZzT1PgEAwP/QJ6FPAliJNUEAmzrxacPXPzkwTVOrVq3yaRcXF6eBAwdq3bp1Ki8v97n29XtPrO5+YjhmS3JycvTpp59q69at3nO1tbVau3atunfvHvA5q8OHD5fD4VBxcXGjT05M09ShQ4cktT5HCQkJSktL0/r1633e/0cffdRoLjEAAPBFn4Q+CWAlRoIANpWSkqJTTz1Vf/zjH1VRUaHY2Fi98847Tc5p/dGPfqS7775bt956q3c7ugMHDqi0tFQPP/ywJCk9PV2StGTJEo0ePVoRERH6zne+4x3G+XVXXHGF3nrrLd1///0+29Ht379fv/rVr056qOm3SU5OVl5enl588UUdOHBAZ555pjp37qz9+/fr3Xff1YQJE3TZZZe1KUdTpkzRAw88oLvuukvjxo3T4cOHtXr1avXu3Vu1tbUBfT8AAHRk9EnokwBWYiQIYFORkZG69dZblZaWpldeeUUvvfSSkpOT9bOf/axR27S0NM2bN08DBw7U66+/rmeffVbvvPOOhg0b5m3Tr18/TZ48WZ999pkWLVqkBQsWqLq6usnXdjqduu+++zRkyBCtXr1aL774ojee4cOHB+w9f90VV1yhX/3qVzIMQy+99JL++Mc/6t///reGDBnifV9tydHQoUN18803y+PxaMmSJdq4caNmzJjh7YgBAICm0SehTwJYyTBZRQcAAAAAANgAI0EAAAAAAIAtUAQBAAAAAAC2QBEEAAAAAADYAkUQAAAAAABgCxRBAAAAAACALVAEAQAAAAAAtkARBAAAAAAA2AJFEAAAAAAAYAsUQQAAAAAAgC1QBAEAAAAAALZAEQQAAAAAANgCRRAAAAAAAGALFEEAAAAAAIAt/H/Vpo0iLc2QwwAAAABJRU5ErkJggg==", "text/plain": [ - "(0.0, 19.676398102626532)" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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Y8e67EtNTdXWrVvrfB36eu/g88F95NB95NAzyKP7mquvb1E9V2lpqRwOh6xWq8t+q9WqQ4cO1XrOihUrlJub69wePny47r77bkVERHgz1DYhKirK1yG0CuTRfeTQfeTQM8ijq6b023a7XeHh4S77wsPDZbfb63wd+nrv4t+1+8ih+8ihZ5BH93k7hy1uintjjR8/Xq+//rrzz6233qpFixbphx9+8HVoLdYPP/ygBx98kBy6iTy6jxy6jxx6Bnn0Lfp67+DftfvIofvIoWeQR/c1Vw5bVIEeFhYmi8VS41t0u91e49v5M4KCghQaGur8ExISoo8++oipHW4wTVP79u0jh24ij+4jh+4jh55BHmvXlH7barXWWECupKSkzvYSfb238O/afeTQfeTQM8ij+5orhy2qQA8MDFR8fLy2b9/u3OdwOLR9+3YlJib6MDIAAHCupvTbiYmJ2rZtm8u+L7/8UgkJCV6NFQAAf9CiCnRJGjt2rNavX6+NGzfq22+/1SuvvKKKigqNHDnS16EBAIBznK/ffuGFF/TWW28521999dX64osvtGrVKn333XfKycnRnj17dOWVV/roHQAA0Hxa1CJxkjRs2DCVlpYqJydHdrtdcXFxmjVrVr1T384WFBSkCRMmKCgoyLuBtmLk0DPIo/vIofvIoWeQx7qdr98uLCx0rowrSX369NFdd92lZcuWaenSperWrZt+85vfqGfPng1+Tf5/eAZ5dB85dB859Azy6L7myqFhciMCAAAAAAA+1+KmuAMAAAAA0BpRoAMAAAAA4Aco0AEAAAAA8AMU6AAAAAAA+IEWt4r7udasWaNVq1bJbrcrNjZWt99+u3r37l1n+82bN2v58uU6evSooqOjdcstt2jgwIHO46ZpKicnR+vXr9fJkyeVlJSkjIwMdevWrTnejs94Oo9ZWVnatGmTyzmpqamaPXu2196DrzUmhwcPHtTy5cu1b98+HT16VFOmTNE111zj1jVbC0/nMScnR7m5uS77YmJi9Nxzz3nrLfhcY3L4j3/8Q//85z918OBBSVJ8fLxuvvlml/Zt8XPR0zlsi5+JnkZ/7z76evfR13sGfb376Os9wy/7e7MF++ijj8ybb77Z/OCDD8yDBw+af/zjH83bbrvNtNvttbb/z3/+Y06aNMl87733zIMHD5pLly4109PTzW+++cbZZsWKFeaUKVPMLVu2mPv37zczMzPNGTNmmBUVFc31tpqdN/L4wgsvmAsWLDCLi4udf44fP95cb6nZNTaHu3fvNrOzs80PP/zQnDp1qvn++++7fc3WwBt5XL58uXnfffe5/FssKSnx9lvxmcbmcNGiReaaNWvMffv2md9++62ZlZVlTpkyxTx27JizTVv7XPRGDtvaZ6Kn0d+7j77effT1nkFf7z76es/w1/6+RU9xf//99zVmzBiNGjVK3bt319SpUxUcHKwNGzbU2n716tUaMGCArrvuOnXv3l3p6emKj4/XmjVrJFV/c7R69WrdcMMNGjx4sGJjY3XnnXequLhYW7dubc631qw8ncczAgMDZbVanX86duzYHG/HJxqbw969e+tnP/uZhg8fXuezFBt7zdbAG3mUJIvF4vJvMSwszFtvwecam8O77rpLV1xxheLi4nThhRfqV7/6lUzT1LZt2yS1zc9FT+fwjLb0mehp9Pfuo693H329Z9DXu4++3jP8tb9vsQV6VVWV9u7dq5SUFOc+i8WilJQU7dq1q9Zzdu3a5dJeqp5ysHv3bknSkSNHZLfb1b9/f+fx0NBQ9e7du85rtnTeyOMZBQUFysjI0N13360//elPOn78uOffgB9oSg59cU1/5833bLPZdMcdd+jOO+/U888/r8LCQnfD9UueyGFFRYWqqqqcnUlb+1z0Rg7PaCufiZ5Gf+8++nr30dd7Bn29++jrPcOf+/sWew96aWmpHA6HrFary36r1apDhw7Veo7dbld4eLjLvvDwcNntdufxM/vqatPaeCOPkjRgwAANHTpUXbt2lc1m09KlS/XEE09owYIFslha7PdCtWpKDn1xTX/nrfeckJCg6dOnKyYmRsXFxcrNzdUjjzyihQsXKiQkxM2o/YsncrhkyRJFRkY6O6y29rnojRxKbesz0dPo791HX+8++nrPoK93H329Z/hzf99iC3T4t+HDhzv/3rNnT8XGxurXv/61duzYUeMbecCb0tLSnH+PjY11duKbN2/W6NGjfRiZ/3n33Xf10Ucfae7cuQoODvZ1OC1SXTnkMxGtEf+u4S/o6xuOvt4zvNnft9ivN8PCwmSxWGp8q2O322t8E3KG1WpVSUmJy76SkhJn+zP/ra9Na+ONPNbmggsuUKdOnWSz2dyM2P80JYe+uKa/a6733KFDB8XExPBv8Rwr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", - "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -812,7 +863,7 @@ "source": [ "event_rate_in_kHz = nevts / np.fromiter(time_per_fraction_read.values(), np.float32) / 1_000\n", "\n", - "fig, (ax0, ax1) = plt.subplots(figsize=(12,4), ncols=2)\n", + "fig, (ax0, ax1) = plt.subplots(figsize=(11,4), ncols=2)\n", "\n", "ax0.plot(time_per_fraction_read.keys(), time_per_fraction_read.values(), \"o\")\n", "ax0.set_xlabel(\"fraction read\")\n", @@ -824,12 +875,15 @@ "ax1.set_xlabel(\"fraction read\")\n", "ax1.set_ylabel(\"event rate [kHz]\")\n", "ax1.set_xlim([0, ax1.get_xlim()[1]])\n", - "ax1.set_ylim([0, ax1.get_ylim()[1]])" + "ax1.set_ylim([0, ax1.get_ylim()[1]])\n", + "\n", + "fig.tight_layout()\n", + "fig.savefig(figures_dir / \"file_read_time.png\", dpi=300)" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "id": "ba6889dc-52a3-40d1-8e65-f8317437035f", "metadata": {}, "outputs": [ @@ -849,23 +903,13 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "id": "3d41622a-a7ba-41d6-a818-d1147e1f9213", "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "(0.0, 89.82277641296386)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAG0CAYAAAAhJm17AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6tUlEQVR4nO3de3RU9b3+8WdPLkDAZBImYYBIIIYQKeFWboKt4K2nwFFBWy7V0mND/QkqFalYUCtVVPRgayu1rgpCrAoxclEEDhy0thCrVNqCYk0iIiCkZEgmQCJhwuzfHzkZHRJCMrnsyc77tVaW7L2/s+cznxWHh+++GaZpmgIAALABh9UFAAAANBeCDQAAsA2CDQAAsA2CDQAAsA2CDQAAsA2CDQAAsA2CDQAAsA2CDQAAsA2CDQAAsI1IqwuwSmlpqaqqqqwuo91JTExUcXGx1WW0W/TfOvTeWvTfOs3V+8jISMXHx194XJPfqY2qqqqSz+ezuox2xTAMSdW950kerY/+W4feW4v+W8eK3nMoCgAA2Ea7nbEBAKC1mf6zUsE+md4SGc4EqW9/GY4Iq8uyFYINAACtwNydJ//qP0ilx6uXJSm+qxxTZ8oYOtrS2uyEQ1EAALQwc3ee/M8+Hgg1AaXH5X/2cZm786wpzIYINgAAtCDTf7Z6pqYe/tXPVx+mQpMRbAAAaEkF+2rP1Jyr1FM9Dk1GsAEAoAWZ3pJmHYf6EWwAAGhBhjOhWcehfgQbAABaUt/+UnzX+sfEu6rHockINgAAtCDDESHH1Jn1jnFMzeJ+Ns2EYAMAQAszho6W4/b7as/cxLvkuP0+7mPTjLhBHwAArcAYOlqOwSO583ALI9gAANBKDEeE1C9ThtWF2BiHogAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG0QbAAAgG1EWl0AAMAapv+sVLBPprdEhjNB6ttfhiPC6rKAJiHYAEA7ZO7Ok3/1H6TS49XLkhTfVY6pM2UMHW1pbUBThFWw8fv9ysnJ0V/+8hd5vV4lJCToiiuu0I033ijDMCRJpmkqJydH27dvV3l5uTIyMpSVlaXu3btbXD0AtA3m7jz5n3289obS4/I/+7gct99HuEGbFVbn2Kxfv17btm3Tj3/8Y/3qV7/SD37wA73++uvavHlzYMyGDRu0efNmzZw5U48++qg6dOigxYsX68yZMxZWDgBtg+k/Wz1TUw//6uerD1MBbVBYBZv8/HwNGzZMQ4cOVVJSkkaNGqWBAweqsLBQUvVszaZNmzR58mQNHz5cKSkpuuOOO1RaWqpdu3ZZXD0AtAEF+wKHn86r1FM9DmiDwupQVHp6urZv364jR46oR48eOnDggD755BP98Ic/lCQdO3ZMXq9XAwcODLwmJiZGaWlpys/P15gxY2rt0+fzyefzBZYNw1CnTp1kGEbg8BZaR02/6bs16L91wqn3ZllpwwaWlYZFvc0hnPrf3ljR+7AKNjfccIO+/PJL3X333XI4HPL7/Zo6daq+9a1vSZK8Xq8kKS4uLuh1cXFxgW3nWrdunXJzcwPLffr00ZIlS+RyuVrkM+DC3G631SW0a/TfOuHQ+9OpaSpuwLiuqWnqaLNzF8Oh/+1Va/Y+rILNu+++qx07duiuu+7SxRdfrAMHDmjlypWKj4/X2LFjQ9rnpEmTNHHixMByTWr0eDxBMzloeYZhyO12q6ioSKZpWl1Ou0P/rRNOvTe7uqX4rvUfjop3qaSrW8bRo61XWAsKp/63N83Z+8jISCUmJl54XJPepZn98Y9/1PXXXx84pNSrVy8VFxdr/fr1Gjt2rJxOpySprKxM8fHxgdeVlZWpd+/ede4zKipKUVFRtdabpskvuEXovbXov3XCoveGQ46pM+u+Kur/OKZmSYbD+lqbWVj0v51qzd6H1cnDlZWVcjiCS3I4vvqfKykpSU6nU3v37g1sr6ioUGFhodLT01u1VgBoq4yho+W4/b7qmZuvi3dxqTfavLCasfnmN7+ptWvXyuVyKTk5WQcOHNDGjRs1btw4SdVTWuPHj9fatWvVvXt3JSUlafXq1YqPj9fw4cMtrh4A2g5j6Gg5Bo/kzsOwnbAKNrfeeqvWrFmj559/XmVlZUpISNA111yjm266KTDm+uuvV2VlpZ577jlVVFQoIyNDCxYsUHR0tIWVA0DbYzgipH6Z4loh2IlhttMDjsXFxZw83MoMw1D37t119OhRjnNbgP5bh95bi/5bpzl7HxUV1aCTh8PqHBsAAICmINgAAADbINgAAADbINgAAADbINgAAADbCKvLvYFzmf6z3GcDANBgBBuELXN3nvyr/xB4po0pSfFd5Zg6kzujAgDqxKEohCVzd171s2zOfVBf6XH5n31c5u48awoDAIQ1gg3Cjuk/Wz1TUw//6uerD1MBAPA1BBuEn4J9tWdqzlXqqR4HAMDXEGwQdkxvSbOOAwC0HwQbhB3DmdCs4wAA7QfBBuGnb38pvmv9Y+Jd1eMAAPgagg3CjuGIkGPqzHrHOKZmcT8bAEAtBBuEJWPoaDluv6/2zE28S47b7+M+NgCAOnGDPoQtY+hoOQaP5M7DAIAGI9ggrBmOCKlfpgyrCwEAtAkcigIAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALYRVk/3nj17toqLi2utv/baa5WVlaUzZ84oOztbeXl58vl8GjRokLKysuR0Olu/WAAAEHbCKtg89thj8vv9geWDBw/qkUce0WWXXSZJWrVqlXbv3q25c+cqJiZGy5cv19KlS/Xwww9bVTIAAAgjYXUoKjY2Vk6nM/Cze/dudevWTf3791dFRYXeeustzZgxQwMGDFBqaqpmzZqlTz75RPn5+VaXDgAAwkBYzdh8XVVVlf7yl79owoQJMgxD+/fv19mzZ5WZmRkY07NnT7lcLuXn5ys9Pb3O/fh8Pvl8vsCyYRjq1KmTDMOQYRgt/jnwlZp+03dr0H/r0Htr0X/rWNH7sA0277//vsrLyzV27FhJktfrVWRkpDp37hw0Li4uTl6v97z7WbdunXJzcwPLffr00ZIlS+RyuVqibDSA2+22uoR2jf5bh95bi/5bpzV7H7bB5u2339bgwYOVkJDQpP1MmjRJEydODCzXpEaPxxM0k4OWZxiG3G63ioqKZJqm1eW0O/TfOvTeWnbtv+k/KzN/n1RWIsUlyEjvL8MRYXVZQZqz95GRkUpMTLzwuCa9SwspLi7Wnj17NG/evMA6p9OpqqoqlZeXB83alJWV1XtVVFRUlKKiomqtN03TVr/gbQm9txb9tw69t5ad+m/uzpN/9R+k0uNfrYzvKsfUmTKGjrausPNozd6H1cnDNd5++23FxcVp6NChgXWpqamKiIjQ3r17A+uOHDkij8dz3vNrAACwG3N3nvzPPh4caiSp9Lj8zz4uc3eeNYWFibCbsfH7/frTn/6kK664QhERX02pxcTE6Morr1R2dra6dOmimJgYrVixQunp6QQbAEC7YPrPVs/U1MO/+nk5Bo8Mu8NSrSXsgs3evXvl8Xg0bty4WttmzJghwzC0dOlSVVVVBW7QBwBAu1Cwr/ZMzblKPdXj+mXWP86mwi7YDBo0SDk5OXVui46OVlZWFmEGANAumd6SBo9rrxe3h+U5NgAAoDbD2bArhRs6zo4INgAAtBV9+0vxXesfE++qHtdOEWwAAGgjDEeEHFNn1jvGMTWr3Z44LBFsAABoU4yho+W4/b7aMzfxLjluvy8s72PTmsLu5GEAAFA/Y+hoOQaPlAr2VZ8o7EyQ+obfnYetQLABAKANMhwRUr/Mdnv10/lwKAoAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANgGwQYAANhGpNUFnKukpER//OMf9Y9//EOVlZVyu92aNWuWLrnkEkmSaZrKycnR9u3bVV5eroyMDGVlZal79+4WVw4AQNth+s9KBftkektkOBOkvv1lOCKsLqvJwirYnDp1Sg888IC+8Y1vaMGCBYqNjdXRo0fVuXPnwJgNGzZo8+bNmj17tpKSkrRmzRotXrxYTz31lKKjoy2sHgCAtsHcnSf/6j9IpcerlyUpvqscU2fKGDra0tqaKqwORW3YsEFdu3bVrFmzlJaWpqSkJA0aNEhut1tS9WzNpk2bNHnyZA0fPlwpKSm64447VFpaql27dllcPQAA4c/cnSf/s48HQk1A6XH5n31c5u48awprJmE1Y/O3v/1NgwYN0lNPPaV9+/YpISFB1157ra6++mpJ0rFjx+T1ejVw4MDAa2JiYpSWlqb8/HyNGTOm1j59Pp98Pl9g2TAMderUSYZhyDCMlv9QCKjpN323Bv23Dr23Fv3/iuk/Wz1TUw//6ucVMWRUsxyWsqL3YRVsjh07pm3btmnChAmaNGmSPv30U73wwguKjIzU2LFj5fV6JUlxcXFBr4uLiwtsO9e6deuUm5sbWO7Tp4+WLFkil8vVUh8DF1AzAwdr0H/r0Htr0X/p9J6/qfjcmZpzlXqUcLxIHQcOa7b3bc3eh1Ww8fv9uuSSSzR9+nRJ1SHk4MGD2rZtm8aOHRvSPidNmqSJEycGlmtSo8fjCZrJQcszDENut1tFRUUyTdPqctod+m8dem8t+v8V//7CBo07vr9QjsSeTX6/5ux9ZGSkEhMTLzyuSe/SzOLj45WcnBy0Ljk5We+9954kyel0SpLKysoUHx8fGFNWVqbevXvXuc+oqChFRUXVWm+aZrv/BbcKvbcW/bcOvbcW/ZcUF3/hMf83rjl71Zq9D6uTh/v166cjR44ErTty5EggoSUlJcnpdGrv3r2B7RUVFSosLFR6enqr1goAQJvTt78U37X+MfGu6nFtVFgFmwkTJqigoEBr165VUVGRduzYoe3bt+s73/mOpOoprfHjx2vt2rX629/+poMHD+qZZ55RfHy8hg8fbnH1AACEN8MRIcfUmfWOcUzNatP3swmrQ1FpaWmaN2+eXn75Zb322mtKSkrSjBkz9K1vfSsw5vrrr1dlZaWee+45VVRUKCMjQwsWLOAeNgAANIAxdLQct98XdB8bSVK8qzrUtPH72BhmOz3gWFxczMnDrcwwDHXv3l1Hjx7lOLcF6L916L216H/dWuPOw83Z+6ioqLZ38jAAAGgdhiNC6pcpu93dJ6zOsQEAAGgKgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALANgg0AALCNBt15eMmSJU16k2nTpqlXr15N2gcAAMCFNCjY7N69WxdddJE6dOjQqJ2bpqnjx49rwoQJIRUHAADQGA1+VtSPfvQjXX755Y3a+YkTJzRzZv2PRwcAAGguDTrHJiUlRV26dGn0ziMjI5WSkqKOHTs2+rUAAACN1aAZmyeeeCKkncfExIT8WgAAgMbiqigAAGAbDT7H5us8Ho88Ho8yMjIC6w4cOKCNGzfK5/NpzJgxGjFiRLMVCQAA0BAhzdisWLFCr776amDZ6/Vq0aJFeu+99/Txxx9r6dKleu+995qtSAAAgIYIKdh8+umnyszMDCz/+c9/1pkzZ/Tkk0/q97//vTIzM/XGG280W5EAAAANEVKwOXXqlOLi4gLLH3zwgfr37y+32y2Hw6ERI0boiy++aLYiAQAAGiKkYBMbG6vi4mJJUnl5uQoKCjRo0KDAdr/fL7/f3zwVAgCAsGH6z8r8ZK/8770j85O9Mv1nrS4pSEgnD2dmZmrz5s2KiYnRRx99JNM0g04WPnz4sLp27dpsRQIAAOuZu/PkX/0HqfR49bIkxXeVY+pMGUNHW1pbjZBmbKZPn67k5GS9+OKL2rNnj2655RYlJSVJknw+n959910NGDCgWQsFAADWMXfnyf/s44FQE1B6XP5nH5e5O8+aws4R0oyN0+nUww8/rIqKCkVHRysy8qvdmKapBx54QC6Xq9mKBAAA1jH9Z6tnaurhX/28HINHynBEtFJVdWvSDfpiYmKCQo0kRUdHq3fv3iE9ggEAAIShgn21Z2rOVeqpHmexkGZspOoHXK5fv15///vfAycSJyYmasiQIbruuuvkdDqbq0YAAGAh01vS4HFGC9dyISHN2Bw6dEj33HOP3nzzTcXExGjUqFEaNWqUYmJi9Oabb+pnP/uZDh482Ny1AgAACxjOhGYd15JCmrFZvny5/H6/Fi9erLS0tKBthYWFeuyxx/TCCy/oF7/4RbMUCQAALNS3vxTftf7DUfGu6nEWC2nGprCwUOPHj68VaiQpLS1N3/3ud1VQUNDk4gAAgPUMR4QcU2fWO8YxNcvyE4elEINNXFycoqKizrs9Ojo66M7EAACgbTOGjpbj9vuqZ26+Lt4lx+33hc19bEI6FDV+/Hht2bJF3/72t2udJFxSUqKtW7dq/Pjxjd5vTk6OcnNzg9b16NFDv/71ryVJZ86cUXZ2tvLy8uTz+TRo0CBlZWVxojIAAK3AGDpajsEjpYJ91ScKOxOkvv3DYqamRkjBxjRNdezYUXfeeadGjBght9stSTp69Kh27dolt9st0zS1cePGoNdNnDjxgvu++OKL9cADDwSWHY6vJpVWrVql3bt3a+7cuYqJidHy5cu1dOlSPfzww6F8DAAA0EiGI0Lql2n51U/nE1KwefHFFwN/3rFjR63tBw8eDBpToyHBxuFw1DkDU1FRobfeektz5swJ3NV41qxZuvvuu5Wfn6/09PRGfAIAAGBHIQWbZ555prnrCCgqKtJtt92mqKgopaena/r06XK5XNq/f7/Onj2rzMzMwNiePXvK5XLVG2x8Pp98Pl9g2TAMderUSYZhyDDCNW/aU02/6bs16L916L216L91rOh9SMEmMTGxueuQJPXt21ezZs1Sjx49VFpaqtzcXD344INaunSpvF6vIiMj1blz56DXxMXFyev1nnef69atCzpvp0+fPlqyZAmPfLBQzaFLWIP+W4feW4v+W6c1ex/ynYcl6dSpU9qzZ0/QnYczMzN10UUXhbS/IUOGBP6ckpISCDrvvvuuoqOjQ9rnpEmTgg6B1aRGj8cTNJODlmcYhtxut4qKimSaptXltDv03zr03lr03zrN2fvIyMgGTayEHGxycnK0YcMGVVVV1Xrj6667TlOmTAl11wGdO3dWjx49VFRUpIEDB6qqqkrl5eVBszZlZWX1XhUVFRVV56XppmnyC24Rem8t+m8dem8t+m+d1ux9SMEmNzdXr732moYMGaL/+I//UI8ePSRJR44c0ZYtW7R27VpFRETopptualJxp0+fVlFRkb71rW8pNTVVERER2rt3r0aNGhV4P4/Hw4nDAABAUojBZtu2bfrmN7+pe++9N2h9UlKSBg8erMcff1zbtm1rdLDJzs7WsGHD5HK5VFpaqpycHDkcDl1++eWKiYnRlVdeqezsbHXp0kUxMTFasWKF0tPTCTYAAEBSiMGmoqJCgwcPPu/2oUOHat++xj+6vKSkRE8//bROnjyp2NhYZWRkaPHixYqNjZUkzZgxQ4ZhaOnSpaqqqgrcoA8AAEAKMdhkZGSooKBA1157bZ3bCwoK1K9fv0bv96c//Wm926Ojo5WVlUWYAQAAdQrpWVEzZ85Ufn6+Vq5cqaKiIvn9fvn9fhUVFWnlypUqKCjQzJn1PywLAACguTVoxuaHP/xhrZvrnD17Vps3b9bmzZsDjz3w+/2Sqq9E+tnPfqZVq1Y1c7kAAADn16BgM3LkSO7YCAAAGsz0n5VZ8LHKP/mn/KZD6ntpqzwss0HBZvbs2S1dBwAAsAlzd578q/8glR5XSc3K+K5yTJ0pY+joFn3vkM6xAQAAqIu5O0/+Zx+XSo8Hbyg9Lv+zj8vcndei79/gq6L279/f6J2npqY2+jUAAKBtMv1nq2dq6uFf/bwcg0e22GGpBgebn//8543e+Zo1axr9GgAA0EYV7Ks9U3OuUk/1uH6ZLVJCo+5jEx0drSFDhmjw4MGBK6EAAAAkyfSWXHjQ/41rqUuSGhxsZs6cqZ07d+r999/Xvn37NGrUKF1++eXKyMhoodIAAEBbYjgT1JBHXRrOhBarocHB5uqrr9bVV1+tkpIS7dixQzt37tS2bdvkcrk0ZswYjRkzRikpKS1WKAAACHN9+0vxXes/HBXvqh7XQhr9SIWEhARdd911uu6663T48OFAyNmwYYOSk5N1yy231PscKQAAYE+GI0KOqTOrr4o6D8fUrBa9n02TTpRJTk7W1KlTNW/ePPXv31+HDx9WYWFhc9UGAADaGGPoaDluv6965ubr4l1y3H5fi9/HJqSHYErSsWPHArM1hw8fVrdu3TR58mSNHTu2GcsDAABtjTF0tByDR0oFH8tp+OUNtzsP1ygrK1NeXp527NihwsJCOZ1OXXbZZbr99tuVlpbWUjUCAIA2xnBEyMjIVOfu3XXi6FGZZkNOK266BgebRx55RB999JE6duyoESNGaMqUKRowYACXfQMAgLDR4GCzd+9eRUdH65JLLtGJEycCT/Y+H8MwdO+99zZLkQAAAA3R4GDjcrkkSUePHm3QeJ4GDgAAWluDg82yZctasg4AAIAm4wQZAABgGwQbAABgGw0KNvPmzdPu3bsbvfOKigrNmzePm/YBAIBW0aBgc+jQIVVUVDR652fPntWhQ4d0+vTpRr8WAACgsRp88vCqVau0evXqRu28tW7GAwAAIDUw2FxxxRVNepP4+PgmvR4AAKAhGhRsZs2a1dJ1AAAANBlXRQEAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANto8A36zlVRUaGtW7fqo48+UllZmX7yk58oLS1Np06d0p/+9CcNGzZMbrc75MLWr1+vl19+WePHj9ePfvQjSdKZM2eUnZ2tvLw8+Xw+DRo0SFlZWXI6nSG/DwAAsI+QZmyOHz+u+fPna82aNTp+/Lg+//zzwGMTunTpom3btmnz5s0hF1VYWKht27YpJSUlaP2qVav0wQcfaO7cuVq0aJFKS0u1dOnSkN8HAADYS0gzNi+++KK+/PJLPfnkk4qNjdXMmTODtg8fPjykh2ZK0unTp/Xb3/5Wt912m9auXRtYX1FRobfeektz5szRgAEDJFXfOPDuu+9Wfn6+0tPT69yfz+eTz+cLLBuGoU6dOskwDBmGEVKNCE1Nv+m7Nei/dei9tei/dazofUjBZs+ePZowYYKSk5N18uTJWtu7deum48ePh1TQ888/ryFDhmjgwIFBwWb//v06e/asMjMzA+t69uwpl8tVb7BZt26dcnNzA8t9+vTRkiVL5HK5QqoPTdeUQ5RoOvpvHXpvLfpvndbsfUjB5syZM4qNjT3v9i+//DKkYnbu3KnPPvtMjz32WK1tXq9XkZGR6ty5c9D6uLg4eb3e8+5z0qRJmjhxYmC5JjV6PJ6gmRy0PMMw5Ha7VVRUxANSLUD/rUPvrUX/rdOcvY+MjFRiYuKFx4Wy8+TkZH388ce65ppr6ty+a9cu9e7du1H79Hg8Wrlype6//35FR0eHUladoqKiFBUVVWu9aZr8gluE3luL/luH3luL/lunNXsfUrAZP368li1bpl69eumyyy6TJPn9fhUVFenVV19Vfn6+7rnnnkbtc//+/SorK9P8+fMD6/x+vz7++GNt2bJFCxcuVFVVlcrLy4NmbcrKyrgqCgAASAox2Hz729+Wx+PRmjVrtHr1aknSo48+KtM05XA4NG3aNI0YMaJR+8zMzNR///d/B6179tln1aNHD11//fVyuVyKiIjQ3r17NWrUKEnSkSNH5PF4znt+DQAAaF9Cvo/N5MmT9e1vf1t//etfA8fOunXrppEjR6pbt26N3l+nTp3Uq1evoHUdOnTQRRddFFh/5ZVXKjs7W126dFFMTIxWrFih9PR0gg0AAJAUYrDxeDyKjY2Vy+UKOjG3xpkzZ3TixIlmv/JoxowZMgxDS5cuVVVVVeAGfQAAAJJkmCGczTNlyhTdeeeduvzyy+vcnpeXp6efflpr1qxpcoEtpbi4mKuiWplhGOrevbuOHj3KCXwWoP/WoffWov/Wac7eR0VFNeiqqBZ5VlRVVZUcDh5DBQAAWleDD0VVVFSooqIisHzy5El5PJ5a48rLy5WXl8eVSgAAoNU1ONi8+eabQXfwXblypVauXHne8VOmTGlSYQAAAI3V4GAzaNAgdezYUaZp6qWXXtKYMWPUp0+foDGGYahDhw5KTU3VJZdc0uzFAgAA1KfBwebrl1VXVlZq5MiRtS7PBgAAsFJIl3t/73vfa+46AAAAmizkG/RJ0r/+9S999tlnqqioqPMyrptuuqkpuwcAAGiUkILNqVOn9Nhjj6mwsLDecQQbAADQmkIKNi+++KIOHjyoOXPmKC0tTXfeeacWLlyopKQkbdy4UQUFBfr5z3/e3LUCAADUK6S76P3973/X1VdfrdGjR6tTp06Sqq+IcrvdysrKUmJiYr2XggMAALSEkIJNeXm5Lr74YklSx44dJUmnT58ObB84cKD++c9/NkN5AAAADRdSsElISJDX65VU/eyG2NhYff7554HtJSUlMgyjWQoEAABoqJDOsbn00ku1Z88eTZ48WZI0evRobdiwQQ6HQ36/X5s2bdKgQYOatVAAAIALCSnYTJw4UXv27JHP51NUVJS+973v6fDhw4GneV966aW69dZbm7VQAACACwkp2PTq1SvorsNdunTRAw88oPLycjkcjsAJxQAAAK2p0efYVFZWav78+dq6dWutbZ07dybUAAAAyzQ62HTo0EHHjh3j5GAAABB2QroqavDgwVzODQAAwk5IwebGG2/U0aNH9dvf/lb/+te/VFJSolOnTtX6AQAAaE0hnTx8zz33SJIOHz6sHTt2nHdczVVSAAAArSGkYHPjjTdyjg0AAAg7IQWb73//+81dBwAAQJOFdI4NAABAOCLYAAAA2yDYAAAA2yDYAAAA2yDYAAAA2yDYAAAA2yDYAAAA2yDYAAAA2wjpBn0tZevWrdq6dauKi4slScnJybrppps0ZMgQSdKZM2eUnZ2tvLw8+Xw+DRo0SFlZWXI6nRZWDQAAwkVYzdgkJCRo+vTpevzxx/XYY49pwIABeuKJJ3To0CFJ0qpVq/TBBx9o7ty5WrRokUpLS7V06VKLqwYAAOEirGZshg0bFrQ8bdo0bd26VQUFBerataveeustzZkzRwMGDJAkzZo1S3fffbfy8/OVnp5e5z59Pp98Pl9g2TAMderUSYZh8LyrVlbTb/puDfpvHXpvLfpvHSt6H1bB5uv8fr/effddVVZWKj09Xfv379fZs2eVmZkZGNOzZ0+5XK56g826deuUm5sbWO7Tp4+WLFkil8vV4p8BdXO73VaX0K7Rf+vQe2vRf+u0Zu/DLtgcPHhQCxculM/nU8eOHTVv3jwlJyfrwIEDioyMVOfOnYPGx8XFyev1nnd/kyZN0sSJEwPLNanR4/EEzeSg5RmGIbfbraKiIpmmaXU57Q79tw69txb9t05z9j4yMlKJiYkXHtekd2kBPXr00JNPPqmKigr99a9/1bJly7Ro0aKQ9xcVFaWoqKha603T5BfcIvTeWvTfOvTeWvTfOq3Z+7ALNpGRkYEpq9TUVH366afatGmTRo8eraqqKpWXlwfN2pSVlXFVFAAAkBRmV0XVxe/3y+fzKTU1VREREdq7d29g25EjR+TxeM57fg0AAGhfwmrG5uWXX9bgwYPlcrl0+vRp7dixQ/v27dPChQsVExOjK6+8UtnZ2erSpYtiYmK0YsUKpaenE2wAAICkMAs2ZWVlWrZsmUpLSxUTE6OUlBQtXLhQAwcOlCTNmDFDhmFo6dKlqqqqCtygDwAAQAqzYHP77bfXuz06OlpZWVmEGQAAUKewP8cGAACgoQg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANgg2AADANiKtLuDr1q1bp/fff19ffPGFoqOjlZ6erptvvlk9evQIjDlz5oyys7OVl5cnn8+nQYMGKSsrS06n07rCAQBAWAirGZt9+/bpO9/5jhYvXqz7779fZ8+e1SOPPKLTp08HxqxatUoffPCB5s6dq0WLFqm0tFRLly61sGoAABAuwmrGZuHChUHLs2fPVlZWlvbv36/+/furoqJCb731lubMmaMBAwZIkmbNmqW7775b+fn5Sk9Pr7VPn88nn88XWDYMQ506dZJhGDIMo2U/EILU9Ju+W4P+W4feW4v+W8eK3odVsDlXRUWFJKlLly6SpP379+vs2bPKzMwMjOnZs6dcLtd5g826deuUm5sbWO7Tp4+WLFkil8vVwtXjfNxut9UltGv03zr03lr03zqt2fuwDTZ+v18rV65Uv3791KtXL0mS1+tVZGSkOnfuHDQ2Li5OXq+3zv1MmjRJEydODCzXpEaPxxM0k4OWZxiG3G63ioqKZJqm1eW0O/TfOvTeWvTfOs3Z+8jISCUmJl54XJPepQUtX75chw4d0i9/+csm7ScqKkpRUVG11pumyS+4Rei9tei/dei9tei/dVqz92F18nCN5cuXa/fu3frFL36hrl27BtY7nU5VVVWpvLw8aHxZWRlXRQEAgPAKNqZpavny5Xr//ff14IMPKikpKWh7amqqIiIitHfv3sC6I0eOyOPx1Hl+DQAAaF/C6lDU8uXLtWPHDt17773q1KlT4LyZmJgYRUdHKyYmRldeeaWys7PVpUsXxcTEaMWKFUpPTyfYAACA8Ao2W7dulSQ99NBDQetnzZqlsWPHSpJmzJghwzC0dOlSVVVVBW7QBwAAEFbBJicn54JjoqOjlZWVRZgBAAC1hNU5NgAAAE1BsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALZBsAEAALYRaXUBX7dv3z69/vrr+uyzz1RaWqp58+ZpxIgRge2maSonJ0fbt29XeXm5MjIylJWVpe7du1tYNQAACBdhNWNTWVmp3r1768c//nGd2zds2KDNmzdr5syZevTRR9WhQwctXrxYZ86caeVKAQBAOAqrYDNkyBBNnTo1aJamhmma2rRpkyZPnqzhw4crJSVFd9xxh0pLS7Vr1y4LqgUAAOEmrA5F1efYsWPyer0aOHBgYF1MTIzS0tKUn5+vMWPG1Pk6n88nn88XWDYMQ506dZJhGDIMo8Xrxldq+k3frUH/rUPvrUX/rWNF79tMsPF6vZKkuLi4oPVxcXGBbXVZt26dcnNzA8t9+vTRkiVL5HK5WqJMNIDb7ba6hHaN/luH3luL/lunNXvfZoJNqCZNmqSJEycGlmtSo8fjCZrJQcszDENut1tFRUUyTdPqctod+m8dem8t+m+d5ux9ZGSkEhMTLzyuSe/SipxOpySprKxM8fHxgfVlZWXq3bv3eV8XFRWlqKioWutN0+QX3CL03lr03zr03lr03zqt2fuwOnm4PklJSXI6ndq7d29gXUVFhQoLC5Wenm5hZQAAIFyE1YzN6dOnVVRUFFg+duyYDhw4oC5dusjlcmn8+PFau3atunfvrqSkJK1evVrx8fEaPny4hVUDAIBwEVbB5tNPP9WiRYsCy9nZ2ZKkK664QrNnz9b111+vyspKPffcc6qoqFBGRoYWLFig6Ohoq0oGAABhJKyCzTe+8Q3l5OScd7thGJoyZYqmTJnSilUBAIC2os2cYwMAAHAhBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbBBsAAGAbkVYXEIotW7bojTfekNfrVUpKim699ValpaVZXRYAALBYm5uxycvLU3Z2tm666SYtWbJEKSkpWrx4scrKyqwuDQAAWKzNBZuNGzfqqquu0rhx45ScnKyZM2cqOjpab7/9ttWlAQAAi7WpQ1FVVVXav3+/brjhhsA6h8OhzMxM5efn1/kan88nn88XWDYMQ506dVJkZJv66LZgGIYkKSoqSqZpWlxN+0P/rUPvrUX/rdOcvW/o39tt6m/3EydOyO/3y+l0Bq13Op06cuRIna9Zt26dcnNzA8tjxozRnDlzFB8f35Kloh4ul8vqEto1+m8dem8t+m+d1ux9mzsU1ViTJk3SypUrAz8333yznn76aX355ZdWl9bufPnll5o/fz69twj9tw69txb9t44VvW9TwSY2NlYOh0NerzdovdfrrTWLUyMqKkoxMTGBn06dOmnnzp1MR1rANE199tln9N4i9N869N5a9N86VvS+TQWbyMhIpaam6sMPPwys8/v9+vDDD5Wenm5hZQAAIBy0qXNsJGnixIlatmyZUlNTlZaWpk2bNqmyslJjx461ujQAAGCxNhdsRo8erRMnTignJ0der1e9e/fWggULznso6lxRUVG66aabFBUV1bKFohZ6by36bx16by36bx0rem+YHHQEAAA20abOsQEAAKgPwQYAANgGwQYAANgGwQYAANhGm7sq6lxbtmzRG2+8Ia/Xq5SUFN16661KS0s77/h3331Xa9asUXFxsdxut37wgx9o6NChge2maSonJ0fbt29XeXm5MjIylJWVpe7du7fGx2lzmrv/y5Yt0zvvvBP0mkGDBmnhwoUt9hnaqsb0/tChQ1qzZo0+++wzFRcXa8aMGZowYUKT9tneNXf/c3Jygh7/Ikk9evTQr3/965b6CG1WY3r/v//7v/rzn/+sQ4cOSZJSU1M1bdq0oPF87zdOc/e/2b/3zTZs586d5rRp08y33nrLPHTokPn73//e/NGPfmR6vd46x//rX/8yp0yZYm7YsME8dOiQ+corr5hTp041P//888CY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QSoqKpJpmrrrrrvqHP/1ENWQHhUXF0tSnef89OjRIxCAADQcwQbAeUVGRgYd2pGqz7t5+OGHderUKV1//fXq2bOnOnTooJKSEv3ud79TOF2PcG7tjXXuSb5+v1+GYejnP/95nfvu2LFjYFxb6RFgNwQbAI1y8OBBHT16VLNnz9YVV1wRWL9nz56gcd26dZMkHTp0qN79NeawlMvl0pEjR2qt/+KLLwLbW5Lb7ZZpmkpKSlKPHj3OO66hPao5h6aoqKjWPur6nAAujHNsADRKzUzF12cdTNPUpk2bgsbFxsbq0ksv1dtvvy2PxxO07euvrbnSqubwTH2GDBmiwsJC5efnB9adPn1a27dvV2JiYouflzJixAg5HA7l5ubWmnUxTVMnT56U1PAexcfHq3fv3nrnnXeCPv+ePXtqnS8EoGGYsQHQKD169FC3bt304osvqqSkRDExMXrvvffqPG/lv/7rv/Tggw9q/vz5gcu9i4uLtXv3bj355JOSpNTUVEnSK6+8ojFjxigiIkLf/OY3A4d1vu6GG27Qzp079eijjwZd7n3s2DHdc889TT70dCFut1tTp07Vyy+/rOLiYg0fPlwdO3bUsWPHtGvXLl111VW67rrrGtWj6dOn67HHHtMDDzygcePG6dSpU9qyZYsuvvhibgoIhIAZGwCNEhkZqfnz56t3795av369Xn31Vbndbt1xxx21xvbu3VuLFy/WpZdeqm3btumFF17Qe++9p2HDhgXGpKWlacqUKfr888+1bNkyPf300zpx4kSd7+10OvXII49o4MCB2rJli15++eVAPefew6al3HDDDbrnnntkGIZeffVVvfjii/rggw80cODAwOdqTI8GDx6suXPnyu/365VXXtH777+vWbNmBQIfgMbhzsMAAMA2mLEBAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC2QbABAAC28f8BB/gBUj57kw0AAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjYAAAG0CAYAAAAhJm17AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6IElEQVR4nO3de3RU9b3+8WcPMwECJpMwCRNEAjGESAk3uSjYCt56BI4IteVSLa0NbQUrFalaUKtFVOrB1lZqXQpCrAoxcvECHDhobblUUNqCYk0QERBSMiQTIJEwYfbvj/wydUwIyeSyJzvv11os2Xt/Z89nPmYNT777ZpimaQoAAMAGHFYXAAAA0FQINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDYINgAAwDacVhdglZKSElVWVlpdRpuTlJSkoqIiq8tos+i/dei9tei/dZqq906nUwkJCecf1+h3aqUqKysVCASsLqNNMQxDUlXveZJHy6P/1qH31qL/1rGi92022AAA0NLM4FmpYK9Mf7EMd6LUu68MRzury7IVgg0AAC3A3LVNwRXPSiXHq5YlKaGLHJOnyxg8wtLa7CSqgk0wGFRubq7++te/yu/3KzExUVdeeaW+9a1vhaazTNNUbm6uNm/erLKyMmVmZio7O1spKSkWVw8AQO3MXdsUfPqxmhtKjiv49GNy3HYv4aaJRNVVUWvWrNGmTZv0wx/+UL/5zW/03e9+V6+99prWr18fGrN27VqtX79e06dP1yOPPKL27dtrwYIFOnPmjIWVAwBQOzN4tmqmpg7BFc9VHaZCo0VVsMnPz9eQIUM0ePBgJScn67LLLlP//v21b98+SVWzNevWrdPEiRM1dOhQpaam6vbbb1dJSYl27txpcfUAANSiYG/o8NM5lfiqxqHRoupQVEZGhjZv3qwjR46oW7duOnDggD7++GN973vfkyQdO3ZMfr9f/fv3D70mNjZW6enpys/P18iRI2vsMxAIhF39ZBiGOnbsKMMwQoe30DKq+03frUH/rUPvrWV1/83SkvoNLC2x3c+IFb2PqmBz44036osvvtCdd94ph8OhYDCoyZMn6+tf/7okye/3S5Li4+PDXhcfHx/a9lWrV69WXl5eaLlXr15auHChPB5Ps3wGnJ/X67W6hDaN/luH3lvLqv6fTktXfe7i0iUtXR1ser5oS/Y+qoLN9u3btWXLFt1xxx266KKLdODAAS1btkwJCQkaNWpURPucMGGCxo0bF1quTo0+n4/72LQwwzDk9XpVWFjIvSQsQP+tQ++tZXX/zS5eKaFL3YejEjwq7uKVcfRoyxXWApqy906nU0lJSecf16h3aWJ/+tOfNH78+NAhpR49eqioqEhr1qzRqFGj5Ha7JUmlpaVhdx8sLS1Vz549a92ny+WSy+Wqsd40Tb5gLELvrUX/rUPvrWVZ/w2HHJOn135V1P/nmJwtGQ7b/ny0ZO+j6uThiooKORzhJTkc//kfnZycLLfbrT179oS2l5eXa9++fcrIyGjRWgEAqC9j8Ag5bru3aubmyxI8XOrdxKJqxubSSy/VqlWr5PF41L17dx04cEBvvPGGRo8eLalqSmvMmDFatWqVUlJSlJycrBUrVighIUFDhw61uHoAAM7NGDxCjoHDufNwM4uqYHPrrbdq5cqVeu6551RaWqrExERde+21uummm0Jjxo8fr4qKCj3zzDMqLy9XZmam5s6dq5iYGAsrBwDg/AxHO6lPlux17VN0MUy7HtA7j6KiIk4ebmGGYSglJUVHjx617XHkaEb/rUPvrUX/rdOUvXe5XPU6eTiqzrEBAABoDIINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDYINAACwDafVBQAArGEGz0oFe2X6i2W4E6XefWU42lldFtAoBBsAaIPMXdsUXPGsVHK8almSErrIMXm6jMEjLK0NaAwORQFAG2Pu2qbg04+FQk1IyXEFn35M5q5t1hQGNAGCDQC0IWbwbNVMTR2CK56rOkwFtEIEGwBoSwr21pyp+aoSX9U4oBUi2ABAG2L6i5t0HBBtCDYA0IYY7sQmHQdEG66KQlTjclSgifXuKyV0qftwVIKnahzQChFsELW4HBVoeoajnRyTp1ddFXUOjsnZ/AKBVotDUYhKXI4KNB9j8Ag5bru3aubmyxI8ctx2L784oFVjxgZRp76XozoGDue3SiBCxuARcgwczqFe2A7BBtGnIZej9slqmZoAGzIc7aQ+WTKsLgRoQhyKQtThclQAQKQINog6XI4KAIgUwQbRp/py1LpwOSoAoBYEG0Sd6stR68LlqACA2hBsEJW4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c38NOSzl8Xh05MiRGus///zz0Pbm5PV6ZZqmkpOT1a1bt3OOq2+Pqs+hKSwsrLGP2j4ngPPjHBsADVI9U/HlWQfTNLVu3bqwcXFxcbrkkkv09ttvy+fzhW378murr7SqPjxTl0GDBmnfvn3Kz88PrTt9+rQ2b96spKSkZj8vZdiwYXI4HMrLy6sx62Kapk6ePCmp/j1KSEhQz5499c4774R9/t27d9c4XwhA/TBjA6BBunXrpq5du+qFF15QcXGxYmNj9e6779Z63soPfvADPfDAA7rnnntCl3sXFRVp165devzxxyVJaWlpkqSXX35ZI0eOVLt27XTppZeGDut82Y033qitW7fqkUceCbvc+9ixY7rrrrsafejpfLxeryZPnqyXXnpJRUVFGjp0qDp06KBjx45p586duvrqq3XDDTc0qEdTp07Vo48+qvvvv1+jR4/WqVOntGHDBl100UXcFBCIADM2ABrE6XTqnnvuUc+ePbVmzRq98sor8nq9uv3222uM7dmzpxYsWKBLLrlEmzZt0vPPP693331XQ4YMCY1JT0/XpEmT9Nlnn2nx4sV68skndeLEiVrf2+126+GHH1b//v21YcMGvfTSS6F6vnoPm+Zy44036q677pJhGHrllVf0wgsv6P3331f//v1Dn6shPRo4cKBmz56tYDCol19+WTt27NCMGTNCgQ9Aw3DnYQAAYBvM2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANsg2AAAANv4f42vBSXZ5JcfAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -884,7 +928,9 @@ "ax.set_xlabel(\"fraction read\")\n", "ax.set_ylabel(\"rate [Mbps]\")\n", "ax.set_xlim([0, ax.get_xlim()[1]])\n", - "ax.set_ylim([0, ax.get_ylim()[1]])" + "ax.set_ylim([0, ax.get_ylim()[1]])\n", + "\n", + "fig.savefig(figures_dir / \"file_read_rate.png\", dpi=300)" ] } ], diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..7050ca5 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,4 @@ +[tool.jupytext] +# Always pair ipynb notebooks to py:percent files +formats = ["ipynb", "py:percent"] +notebook_metadata_filter = "all,-jupytext.text_representation.jupytext_version,-language_info.version" diff --git a/requirements.txt b/requirements.txt index a4ab75a..ccc2296 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,3 +19,6 @@ snakeviz # What was needed on UChicago jupyter # func_adl_servicex_xaodr21>=2.0a1 + +# developer tools +jupytext