From 60053bfaaf29739e9e58d41afd6d9c29bc8373bb Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 19:42:26 +0200 Subject: [PATCH 01/54] unravel 8s detector to tof and sectorID in loader --- sed/calibrator/hextof.py | 94 ++++++++++++++++++++++++++++++++++++++ sed/loader/flash/loader.py | 6 ++- 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 sed/calibrator/hextof.py diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py new file mode 100644 index 00000000..329bc8b6 --- /dev/null +++ b/sed/calibrator/hextof.py @@ -0,0 +1,94 @@ +from typing import Sequence +from typing import Tuple +from typing import Union + +import numpy as np +import pandas as pd +import dask.dataframe + + +def unravel_8s_detector_time_channel( + df: dask.dataframe.DataFrame, +) -> None: + """Converts the 8s time in steps to time in steps and sectorID. + + The 8s detector encodes the dldSectorID in the 3 least significant bits of the + dldTimeSteps channel. + + Args: + sector_delays (Sequece[float], optional): Sector delays for the 8s time. + Defaults to config["dataframe"]["sector_delays"]. + """ + # extract dld sector id information + df['dldSectorID'] = (df['dldTimeSteps'] % 8).astype(np.int8) + df['dldTimeSteps'] = (df['dldTimeSteps'] // 8).astype(np.int32) + + # # clean the tof channel from the sector id information, convert to ns and + # # correct the detector alginment with the sector delays + # def correct_time_steps(x): + # """ Corrects the time steps for the sector id and the sector delays. + # Centers the time steps around the mid of the truncated time steps.""" + # return x['dldTimeSteps'] - x['dldSectorID'] + 4 + # df['dldTimeSteps'] = df..map_partitions(correct_time_steps).astype(np.int32) + + # df['dldTimeSteps'] = df['dldTimeSteps'].map_partitions(lambda x: x//8).astype(np.int32) + return df + + +def align_8s_sectors( + dataframe: dask.dataframe.DataFrame, + sector_delays: Sequence[float] = None, + config: dict = None, + ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Aligns the 8s sectors to the first sector. + + Args: + sector_delays (Sequece[float], optional): Sector delays for the 8s time. + in units of step. Calibration should be done with binning along dldTimeSteps. + Defaults to config["dataframe"]["sector_delays"]. + """ + if sector_delays is None: + if config is None: + raise ValueError("Either sector_delays or config must be given.") + sector_delays = config["dataframe"]["sector_delays"] + # align the 8s sectors + def align_sector(x): + return x - sector_delays[x['dldSectorID']] + dataframe['dldTimeSteps'] = dataframe.map_partitions( + align_sector, meta=('dldTimeSteps', np.int32) + ) + + metadata = {} + metadata["applied"] = True + metadata["sector_delays"] = sector_delays + + return dataframe, metadata + + +def convert_8s_time_to_ns( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + time_step_size: float = None, + config: dict = None, + ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Converts the 8s time in steps to time in ns. + + Args: + time_step_size (float, optional): Size of one time step in ns. + Defaults to config["dataframe"]["time_step_size"]. + """ + if time_step_size is None: + if config is None: + raise ValueError("Either time_step_size or config must be given.") + time_step_size = config["dataframe"]["time_step_size"] + # convert the 8s time to ns + def convert_to_ns(x): + return x * time_step_size + df['dldTimeSteps'] = df.map_partitions( + convert_to_ns, meta=('dldTimeSteps', np.float64) + ) + metadata = {} + metadata["applied"] = True + metadata["time_step_size"] = time_step_size + + return df, metadata + diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index c1622c87..7ff160be 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -30,6 +30,7 @@ from sed.loader.base.loader import BaseLoader from sed.loader.flash.metadata import MetadataRetriever from sed.loader.utils import parse_h5_keys +from sed.calibrator.hextof import unravel_8s_detector_time_channel class FlashLoader(BaseLoader): @@ -591,7 +592,10 @@ def create_dataframe_per_file( # Loads h5 file and creates a dataframe with h5py.File(file_path, "r") as h5_file: self.reset_multi_index() # Reset MultiIndexes for next file - return self.concatenate_channels(h5_file) + df = self.concatenate_channels(h5_file) + # correct the 3 bit shift which encodes the detector ID in the 8s time + df = unravel_8s_detector_time_channel(df) + return df def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> None: """ From de0c5a2dc0abb0787c3ecc4ea05f4b0b066677fc Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 21:12:29 +0200 Subject: [PATCH 02/54] fix loader for 8s unravelling --- sed/calibrator/hextof.py | 33 +++++++++++++++++++++------------ sed/loader/flash/loader.py | 30 ++++++++++++++++++++++-------- 2 files changed, 43 insertions(+), 20 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 329bc8b6..378aef1b 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -9,6 +9,10 @@ def unravel_8s_detector_time_channel( df: dask.dataframe.DataFrame, + time_sector_column:str = "dldTimeAndSector", + time_step_column:str = "dldTimeSteps", + sector_id_column:str = "dldSectorID", + config: dict = None, ) -> None: """Converts the 8s time in steps to time in steps and sectorID. @@ -19,19 +23,24 @@ def unravel_8s_detector_time_channel( sector_delays (Sequece[float], optional): Sector delays for the 8s time. Defaults to config["dataframe"]["sector_delays"]. """ + df = df.dropna(subset=[time_sector_column]) + if time_sector_column is None: + if config is None: + raise ValueError("Either time_sector_column or config must be given.") + time_sector_column = config["dataframe"]["time_sector_column"] + if time_step_column is None: + if config is None: + raise ValueError("Either time_step_column or config must be given.") + time_step_column = config["dataframe"]["time_step_column"] + if sector_id_column is None: + if config is None: + raise ValueError("Either sector_id_column or config must be given.") + sector_id_column = config["dataframe"]["sector_id_column"] + + # extract dld sector id information - df['dldSectorID'] = (df['dldTimeSteps'] % 8).astype(np.int8) - df['dldTimeSteps'] = (df['dldTimeSteps'] // 8).astype(np.int32) - - # # clean the tof channel from the sector id information, convert to ns and - # # correct the detector alginment with the sector delays - # def correct_time_steps(x): - # """ Corrects the time steps for the sector id and the sector delays. - # Centers the time steps around the mid of the truncated time steps.""" - # return x['dldTimeSteps'] - x['dldSectorID'] + 4 - # df['dldTimeSteps'] = df..map_partitions(correct_time_steps).astype(np.int32) - - # df['dldTimeSteps'] = df['dldTimeSteps'].map_partitions(lambda x: x//8).astype(np.int32) + df[sector_id_column] = (df[time_sector_column] % 8).astype(np.int8) + df[time_step_column] = (df[time_sector_column] // 8).astype(np.int32) return df diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index 7ff160be..d1853c69 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -25,6 +25,7 @@ from pandas import DataFrame from pandas import MultiIndex from pandas import Series +from tqdm.auto import tqdm from sed.core import dfops from sed.loader.base.loader import BaseLoader @@ -593,6 +594,7 @@ def create_dataframe_per_file( with h5py.File(file_path, "r") as h5_file: self.reset_multi_index() # Reset MultiIndexes for next file df = self.concatenate_channels(h5_file) + df = df.dropna(subset=['dldTimeAndSector']) # correct the 3 bit shift which encodes the detector ID in the 8s time df = unravel_8s_detector_time_channel(df) return df @@ -618,10 +620,14 @@ def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> None: .reset_index(level=self.multi_index) .to_parquet(parquet_path, index=False) ) - except ValueError as failed_string_error: - self.failed_files_error.append( - f"{parquet_path}: {failed_string_error}", - ) + # except ValueError as failed_string_error: + # print(f"Conversion failed for {parquet_path}:\nValueError: {failed_string_error}") + # error = f"{parquet_path}: {failed_string_error}" + # self.failed_files_error.append(error) + except Exception as exc: + self.failed_files_error.append(f"{parquet_path}: {type(exc)} {exc}") + return exc + return False def buffer_file_handler(self, data_parquet_dir: Path, detector: str): """ @@ -667,10 +673,18 @@ def buffer_file_handler(self, data_parquet_dir: Path, detector: str): # Convert the remaining h5 files to parquet in parallel if there are any if len(files_to_read) > 0: - Parallel(n_jobs=len(files_to_read), verbose=10)( - delayed(self.create_buffer_file)(h5_path, parquet_path) - for h5_path, parquet_path in files_to_read - ) + if self._config["core"].get("parallel_loader",True): + error = Parallel(n_jobs=len(files_to_read), verbose=10)( + delayed(self.create_buffer_file)(h5_path, parquet_path) + for h5_path, parquet_path in files_to_read + ) + if any(error): + raise RuntimeError(f"Conversion failed for some files. {error}") + else: + for h5_path, parquet_path in tqdm(files_to_read, desc="Converting h5 to parquet"): + error = self.create_buffer_file(h5_path, parquet_path) + if error: + raise ValueError(f"Conversion failed for some files. {error}") # Raise an error if the conversion failed for any files if self.failed_files_error: From 41d521303db6df969dd8c576870f9a25a789906b Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 22:32:45 +0200 Subject: [PATCH 03/54] linting and bugfix --- sed/calibrator/hextof.py | 43 +++++++++++++++++++++++++------------- sed/loader/flash/loader.py | 22 +++++++------------ 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 378aef1b..83672735 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -1,3 +1,6 @@ +"""sed.calibrator.hextof module. Code for handling hextof specific transformations and +calibrations. +""" from typing import Sequence from typing import Tuple from typing import Union @@ -9,9 +12,9 @@ def unravel_8s_detector_time_channel( df: dask.dataframe.DataFrame, - time_sector_column:str = "dldTimeAndSector", - time_step_column:str = "dldTimeSteps", - sector_id_column:str = "dldSectorID", + time_sector_column: str = "dldTimeAndSector", + tof_step_column: str = "dldTimeSteps", + sector_id_column: str = "dldSectorID", config: dict = None, ) -> None: """Converts the 8s time in steps to time in steps and sectorID. @@ -28,19 +31,18 @@ def unravel_8s_detector_time_channel( if config is None: raise ValueError("Either time_sector_column or config must be given.") time_sector_column = config["dataframe"]["time_sector_column"] - if time_step_column is None: + if tof_step_column is None: if config is None: - raise ValueError("Either time_step_column or config must be given.") - time_step_column = config["dataframe"]["time_step_column"] + raise ValueError("Either tof_step_column or config must be given.") + tof_step_column = config["dataframe"]["tof_step_column"] if sector_id_column is None: if config is None: raise ValueError("Either sector_id_column or config must be given.") sector_id_column = config["dataframe"]["sector_id_column"] - # extract dld sector id information df[sector_id_column] = (df[time_sector_column] % 8).astype(np.int8) - df[time_step_column] = (df[time_sector_column] // 8).astype(np.int32) + df[tof_step_column] = (df[time_sector_column] // 8).astype(np.int32) return df @@ -48,7 +50,7 @@ def align_8s_sectors( dataframe: dask.dataframe.DataFrame, sector_delays: Sequence[float] = None, config: dict = None, - ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: +) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the 8s sectors to the first sector. Args: @@ -61,8 +63,10 @@ def align_8s_sectors( raise ValueError("Either sector_delays or config must be given.") sector_delays = config["dataframe"]["sector_delays"] # align the 8s sectors + def align_sector(x): return x - sector_delays[x['dldSectorID']] + dataframe['dldTimeSteps'] = dataframe.map_partitions( align_sector, meta=('dldTimeSteps', np.int32) ) @@ -77,8 +81,10 @@ def align_sector(x): def convert_8s_time_to_ns( df: Union[pd.DataFrame, dask.dataframe.DataFrame], time_step_size: float = None, + tof_step_column: str = "dldTimeSteps", + tof_column: str = "dldTime", config: dict = None, - ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: +) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Converts the 8s time in steps to time in ns. Args: @@ -89,15 +95,22 @@ def convert_8s_time_to_ns( if config is None: raise ValueError("Either time_step_size or config must be given.") time_step_size = config["dataframe"]["time_step_size"] - # convert the 8s time to ns + if tof_step_column is None: + if config is None: + raise ValueError("Either tof_step_column or config must be given.") + tof_step_column = config["dataframe"]["tof_step_column"] + if tof_column is None: + if config is None: + raise ValueError("Either tof_time_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] + def convert_to_ns(x): - return x * time_step_size - df['dldTimeSteps'] = df.map_partitions( - convert_to_ns, meta=('dldTimeSteps', np.float64) + return x[tof_step_column] * time_step_size + df[tof_column] = df.map_partitions( + convert_to_ns, meta=(tof_column, np.float64) ) metadata = {} metadata["applied"] = True metadata["time_step_size"] = time_step_size return df, metadata - diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index d1853c69..d89c3f02 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -25,7 +25,6 @@ from pandas import DataFrame from pandas import MultiIndex from pandas import Series -from tqdm.auto import tqdm from sed.core import dfops from sed.loader.base.loader import BaseLoader @@ -624,7 +623,7 @@ def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> None: # print(f"Conversion failed for {parquet_path}:\nValueError: {failed_string_error}") # error = f"{parquet_path}: {failed_string_error}" # self.failed_files_error.append(error) - except Exception as exc: + except Exception as exc: # pylint: disable=broad-except self.failed_files_error.append(f"{parquet_path}: {type(exc)} {exc}") return exc return False @@ -673,20 +672,15 @@ def buffer_file_handler(self, data_parquet_dir: Path, detector: str): # Convert the remaining h5 files to parquet in parallel if there are any if len(files_to_read) > 0: - if self._config["core"].get("parallel_loader",True): - error = Parallel(n_jobs=len(files_to_read), verbose=10)( - delayed(self.create_buffer_file)(h5_path, parquet_path) - for h5_path, parquet_path in files_to_read - ) - if any(error): - raise RuntimeError(f"Conversion failed for some files. {error}") - else: - for h5_path, parquet_path in tqdm(files_to_read, desc="Converting h5 to parquet"): - error = self.create_buffer_file(h5_path, parquet_path) - if error: - raise ValueError(f"Conversion failed for some files. {error}") + error = Parallel(n_jobs=len(files_to_read), verbose=10)( + delayed(self.create_buffer_file)(h5_path, parquet_path) + for h5_path, parquet_path in files_to_read + ) + if any(error): + raise RuntimeError(f"Conversion failed for some files. {error}") # Raise an error if the conversion failed for any files + # TODO: merge this and the previous error trackings if self.failed_files_error: raise FileNotFoundError( "Conversion failed for the following files:\n" + "\n".join(self.failed_files_error), From c3676371d6050be89e585f39855bfb635181ee39 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 23:15:25 +0200 Subject: [PATCH 04/54] linting and bugfix --- sed/calibrator/hextof.py | 23 +++++++++----- sed/core/processor.py | 65 ++++++++++++++++++++++++++++++++++++++ sed/loader/flash/loader.py | 6 +--- 3 files changed, 81 insertions(+), 13 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 83672735..884028f7 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -31,6 +31,8 @@ def unravel_8s_detector_time_channel( if config is None: raise ValueError("Either time_sector_column or config must be given.") time_sector_column = config["dataframe"]["time_sector_column"] + if time_sector_column not in df.columns: + raise ValueError(f"Column {time_sector_column} not in dataframe.") if tof_step_column is None: if config is None: raise ValueError("Either tof_step_column or config must be given.") @@ -40,15 +42,16 @@ def unravel_8s_detector_time_channel( raise ValueError("Either sector_id_column or config must be given.") sector_id_column = config["dataframe"]["sector_id_column"] - # extract dld sector id information df[sector_id_column] = (df[time_sector_column] % 8).astype(np.int8) df[tof_step_column] = (df[time_sector_column] // 8).astype(np.int32) return df def align_8s_sectors( - dataframe: dask.dataframe.DataFrame, + df: dask.dataframe.DataFrame, sector_delays: Sequence[float] = None, + sector_id_column: str = "dldSectorID", + tof_step_column: str = "dldTimeSteps", config: dict = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the 8s sectors to the first sector. @@ -63,19 +66,19 @@ def align_8s_sectors( raise ValueError("Either sector_delays or config must be given.") sector_delays = config["dataframe"]["sector_delays"] # align the 8s sectors + sector_delays = dask.array.from_array(sector_delays) def align_sector(x): - return x - sector_delays[x['dldSectorID']] - - dataframe['dldTimeSteps'] = dataframe.map_partitions( - align_sector, meta=('dldTimeSteps', np.int32) + return x[tof_step_column] - sector_delays[x[sector_id_column].values.astype(int)] + df[tof_step_column] = df.map_partitions( + align_sector, meta=(tof_step_column, np.float64) ) metadata = {} metadata["applied"] = True metadata["sector_delays"] = sector_delays - return dataframe, metadata + return df, metadata def convert_8s_time_to_ns( @@ -88,8 +91,12 @@ def convert_8s_time_to_ns( """Converts the 8s time in steps to time in ns. Args: - time_step_size (float, optional): Size of one time step in ns. + time_step_size (float, optional): Time step size in nanoseconds. Defaults to config["dataframe"]["time_step_size"]. + tof_step_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_step_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. """ if time_step_size is None: if config is None: diff --git a/sed/core/processor.py b/sed/core/processor.py index 9069215c..d73ad7d8 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -21,6 +21,7 @@ from sed.calibrator import DelayCalibrator from sed.calibrator import EnergyCalibrator from sed.calibrator import MomentumCorrector +from sed.calibrator import hextof from sed.core.config import parse_config from sed.core.config import save_config from sed.core.dfops import apply_jitter @@ -1203,6 +1204,70 @@ def add_jitter(self, cols: Sequence[str] = None): metadata.append(col) self._attributes.add(metadata, "jittering", duplicate_policy="append") + def hextof_step_to_ns( + self, + time_step_size: float = None, + tof_step_column: str = None, + tof_column: str = None, + ): + """Convert time-of-flight channel steps to nanoseconds. + + Intended for use with HEXTOF endstation + + Args: + time_step_size (float, optional): Time step size in nanoseconds. + Defaults to config["dataframe"]["time_step_size"]. + tof_step_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_step_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. + """ + if self._dataframe is not None: + print("Adding energy column to dataframe:") + # TODO assert order of execution through metadata + + self._dataframe, metadata = hextof.convert_8s_time_to_ns( + df=self._dataframe, + time_step_size=time_step_size or self._config["dataframe"]["time_step_size"], + tof_step_column=tof_step_column or self._config["dataframe"]["tof_step_column"], + tof_column=tof_column or self._config["dataframe"]["tof_column"], + ) + self._attributes.add( + metadata, + "energy_calibration", + duplicate_policy="merge", + ) + + def hextof_align_8s_sectors( + self, + sector_delays: Sequence[float] = None, + ): + """ Align the 8s sectors of the HEXTOF endstation. + + Intended for use with HEXTOF endstation + + Args: + sector_delays (Sequence[float], optional): Delays of the 8s sectors in + picoseconds. Defaults to config["dataframe"]["sector_delays"]. + """ + if self._dataframe is not None: + print("Aligning 8s sectors of dataframe") + # TODO assert order of execution through metadata + sector_delays = sector_delays or self._config["dataframe"].get("sector_delays", [0.0] * 8) + if len(sector_delays) != 8: + raise ValueError("sector_delays must be a list of 8 floats") + if all(sector_delays == 0): + print("All sector delays are 0, skipping alignment") + self._dataframe, metadata = hextof.align_8s_sectors( + df=self._dataframe, + sector_delays=sector_delays, + ) + self._attributes.add( + metadata, + "energy_calibration", + duplicate_policy="merge", + ) + def pre_binning( self, df_partitions: int = 100, diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index d89c3f02..31d73e8b 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -619,11 +619,7 @@ def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> None: .reset_index(level=self.multi_index) .to_parquet(parquet_path, index=False) ) - # except ValueError as failed_string_error: - # print(f"Conversion failed for {parquet_path}:\nValueError: {failed_string_error}") - # error = f"{parquet_path}: {failed_string_error}" - # self.failed_files_error.append(error) - except Exception as exc: # pylint: disable=broad-except + except Exception as exc: # pylint: disable=broad-except self.failed_files_error.append(f"{parquet_path}: {type(exc)} {exc}") return exc return False From 153373d7fceb8294850026629b66a7f90f026926 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 23:18:29 +0200 Subject: [PATCH 05/54] bugfix --- sed/core/processor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sed/core/processor.py b/sed/core/processor.py index d73ad7d8..8a0da6d8 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1256,7 +1256,7 @@ def hextof_align_8s_sectors( sector_delays = sector_delays or self._config["dataframe"].get("sector_delays", [0.0] * 8) if len(sector_delays) != 8: raise ValueError("sector_delays must be a list of 8 floats") - if all(sector_delays == 0): + if all(delay == 0.0 for delay in sector_delays): print("All sector delays are 0, skipping alignment") self._dataframe, metadata = hextof.align_8s_sectors( df=self._dataframe, From 7051b8a7609d12c97862737bcb0799c9e8f02625 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 23:25:47 +0200 Subject: [PATCH 06/54] linting --- sed/core/processor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sed/core/processor.py b/sed/core/processor.py index 8a0da6d8..e8d71fad 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1253,7 +1253,8 @@ def hextof_align_8s_sectors( if self._dataframe is not None: print("Aligning 8s sectors of dataframe") # TODO assert order of execution through metadata - sector_delays = sector_delays or self._config["dataframe"].get("sector_delays", [0.0] * 8) + if sector_delays is None: + sector_delays = self._config["dataframe"].get("sector_delays", [0.0] * 8) if len(sector_delays) != 8: raise ValueError("sector_delays must be a list of 8 floats") if all(delay == 0.0 for delay in sector_delays): From d51b01fa989691de708c3a0a4c2863c773d23f8b Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 23:36:01 +0200 Subject: [PATCH 07/54] linting --- sed/calibrator/hextof.py | 12 ++++++------ sed/loader/flash/loader.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 884028f7..942a0bca 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -16,7 +16,7 @@ def unravel_8s_detector_time_channel( tof_step_column: str = "dldTimeSteps", sector_id_column: str = "dldSectorID", config: dict = None, -) -> None: +) -> dask.dataframe.DataFrame: """Converts the 8s time in steps to time in steps and sectorID. The 8s detector encodes the dldSectorID in the 3 least significant bits of the @@ -66,10 +66,10 @@ def align_8s_sectors( raise ValueError("Either sector_delays or config must be given.") sector_delays = config["dataframe"]["sector_delays"] # align the 8s sectors - sector_delays = dask.array.from_array(sector_delays) + sector_delays_arr = dask.array.from_array(sector_delays) def align_sector(x): - return x[tof_step_column] - sector_delays[x[sector_id_column].values.astype(int)] + return x[tof_step_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] df[tof_step_column] = df.map_partitions( align_sector, meta=(tof_step_column, np.float64) ) @@ -101,15 +101,15 @@ def convert_8s_time_to_ns( if time_step_size is None: if config is None: raise ValueError("Either time_step_size or config must be given.") - time_step_size = config["dataframe"]["time_step_size"] + time_step_size: float = config["dataframe"]["time_step_size"] if tof_step_column is None: if config is None: raise ValueError("Either tof_step_column or config must be given.") - tof_step_column = config["dataframe"]["tof_step_column"] + tof_step_column: str = config["dataframe"]["tof_step_column"] if tof_column is None: if config is None: raise ValueError("Either tof_time_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] + tof_column: str = config["dataframe"]["tof_column"] def convert_to_ns(x): return x[tof_step_column] * time_step_size diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index 31d73e8b..47d523be 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -598,7 +598,7 @@ def create_dataframe_per_file( df = unravel_8s_detector_time_channel(df) return df - def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> None: + def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> Union[bool, Exception]: """ Converts an HDF5 file to Parquet format to create a buffer file. From b70bee4da97f1937f02469ae54189195ee6cfeaa Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 10 Oct 2023 23:36:09 +0200 Subject: [PATCH 08/54] update default flash config --- sed/config/flash_example_config.yaml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/sed/config/flash_example_config.yaml b/sed/config/flash_example_config.yaml index 2579b6c2..1a52468e 100644 --- a/sed/config/flash_example_config.yaml +++ b/sed/config/flash_example_config.yaml @@ -19,12 +19,23 @@ core: # year: 20xx dataframe: + # The name of the DAQ system to use. Necessary to resolve the filenames/paths. + daq: fl1user3 # The offset correction to the pulseId ubid_offset: 5 # the number of iterations to fill the pulseId forward. forward_fill_iterations: 2 - # The name of the DAQ system to use. Necessary to resolve the filenames/paths. - daq: fl1user3 + # if true, removes the 3 bits reserved for dldSectorID from the dldTimeandSector column + unravel_8s_detector_time_channel: True + time_step_size: 0.16460905596613884 # 0.020576131995767355 + raw_time_column: dldTimeAndSector + time_step_column: dldTimeSteps + tof_step_column: dldTimeSteps + sector_id_column: dldSectorID + sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] + tof_column: dldTime + jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] + # The channels to load. # channels have the following structure: @@ -49,8 +60,9 @@ dataframe: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 0 - - dldTime: + # This channel will actually create dldTimeSteps and dldSectorID, + # if unravel_8s_detector_time_channel is set to True + dldTimeAndSector: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 3 From 9cd0d6701e91611f40ed0fba6d6dff3e511171a3 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 09:01:44 +0200 Subject: [PATCH 09/54] update test settings for flash --- tests/data/loader/flash/config.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/tests/data/loader/flash/config.yaml b/tests/data/loader/flash/config.yaml index 9a614975..0a9e9277 100644 --- a/tests/data/loader/flash/config.yaml +++ b/tests/data/loader/flash/config.yaml @@ -25,6 +25,17 @@ dataframe: # The name of the DAQ system to use. Necessary to resolve the filenames/paths. daq: fl1user3 + unravel_8s_detector_time_channel: True + # the tof step size is now 8 times larger as we remove the 3 bits of the sectorID + time_step_size: 0.16460905596613884 # 0.020576131995767355 + raw_time_column: dldTimeAndSector + time_step_column: dldTimeSteps + tof_step_column: dldTimeSteps + sector_id_column: dldSectorID + sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] + tof_column: dldTime + jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] + # The channels to load. # channels have the following structure: # channelAlias: @@ -49,7 +60,7 @@ dataframe: group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 0 - dldTime: + dldTimeAndSector: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 3 From 9dbb379ad0b7d249379c196e353089d0cd73be72 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 13:40:36 +0200 Subject: [PATCH 10/54] fixes from suggestions and linting --- sed/calibrator/hextof.py | 93 ++++++++++++++++------------ sed/config/flash_example_config.yaml | 55 +++++++++++++--- sed/core/processor.py | 46 +++++++------- sed/loader/flash/loader.py | 5 +- tests/data/loader/flash/config.yaml | 68 +++++++++++++++----- 5 files changed, 178 insertions(+), 89 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 942a0bca..d2549985 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -12,9 +12,8 @@ def unravel_8s_detector_time_channel( df: dask.dataframe.DataFrame, - time_sector_column: str = "dldTimeAndSector", - tof_step_column: str = "dldTimeSteps", - sector_id_column: str = "dldSectorID", + tof_column: str = None, + sector_id_column: str = None, config: dict = None, ) -> dask.dataframe.DataFrame: """Converts the 8s time in steps to time in steps and sectorID. @@ -26,32 +25,28 @@ def unravel_8s_detector_time_channel( sector_delays (Sequece[float], optional): Sector delays for the 8s time. Defaults to config["dataframe"]["sector_delays"]. """ - df = df.dropna(subset=[time_sector_column]) - if time_sector_column is None: - if config is None: - raise ValueError("Either time_sector_column or config must be given.") - time_sector_column = config["dataframe"]["time_sector_column"] - if time_sector_column not in df.columns: - raise ValueError(f"Column {time_sector_column} not in dataframe.") - if tof_step_column is None: + if tof_column is None: if config is None: - raise ValueError("Either tof_step_column or config must be given.") - tof_step_column = config["dataframe"]["tof_step_column"] + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] if sector_id_column is None: if config is None: raise ValueError("Either sector_id_column or config must be given.") sector_id_column = config["dataframe"]["sector_id_column"] - df[sector_id_column] = (df[time_sector_column] % 8).astype(np.int8) - df[tof_step_column] = (df[time_sector_column] // 8).astype(np.int32) + if sector_id_column in df.columns: + raise ValueError(f"Column {sector_id_column} already in dataframe. " + "This function is not idempotent.") + df[sector_id_column] = (df[tof_column] % 8).astype(np.int8) + df[tof_column] = (df[tof_column] // 8).astype(np.int32) return df -def align_8s_sectors( +def align_dld_sectors( df: dask.dataframe.DataFrame, sector_delays: Sequence[float] = None, - sector_id_column: str = "dldSectorID", - tof_step_column: str = "dldTimeSteps", + sector_id_column: str = None, + tof_column: str = None, config: dict = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the 8s sectors to the first sector. @@ -65,13 +60,22 @@ def align_8s_sectors( if config is None: raise ValueError("Either sector_delays or config must be given.") sector_delays = config["dataframe"]["sector_delays"] + if sector_id_column is None: + if config is None: + raise ValueError("Either sector_id_column or config must be given.") + sector_id_column = config["dataframe"]["sector_id_column"] + if tof_column is None: + if config is None: + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] # align the 8s sectors sector_delays_arr = dask.array.from_array(sector_delays) def align_sector(x): - return x[tof_step_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] - df[tof_step_column] = df.map_partitions( - align_sector, meta=(tof_step_column, np.float64) + val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] + return val.astype(np.float32) + df[tof_column] = df.map_partitions( + align_sector, meta=(tof_column, np.float32) ) metadata = {} @@ -81,43 +85,50 @@ def align_sector(x): return df, metadata -def convert_8s_time_to_ns( +def dld_time_to_ns( df: Union[pd.DataFrame, dask.dataframe.DataFrame], - time_step_size: float = None, - tof_step_column: str = "dldTimeSteps", - tof_column: str = "dldTime", + tof_ns_column: str = None, + tof_binwidth: float = None, + tof_column: str = None, + tof_binning: int = None, config: dict = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Converts the 8s time in steps to time in ns. Args: - time_step_size (float, optional): Time step size in nanoseconds. - Defaults to config["dataframe"]["time_step_size"]. - tof_step_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_step_column"]. + tof_binwidth (float, optional): Time step size in nanoseconds. + Defaults to config["dataframe"]["tof_binwidth"]. + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. tof_column (str, optional): Name of the column containing the time-of-flight. Defaults to config["dataframe"]["tof_column"]. + tof_binning (int, optional): Binning of the time-of-flight steps. """ - if time_step_size is None: - if config is None: - raise ValueError("Either time_step_size or config must be given.") - time_step_size: float = config["dataframe"]["time_step_size"] - if tof_step_column is None: + if tof_binwidth is None: if config is None: - raise ValueError("Either tof_step_column or config must be given.") - tof_step_column: str = config["dataframe"]["tof_step_column"] + raise ValueError("Either tof_binwidth or config must be given.") + tof_binwidth: float = config["dataframe"]["tof_binwidth"] if tof_column is None: if config is None: - raise ValueError("Either tof_time_column or config must be given.") + raise ValueError("Either tof_column or config must be given.") tof_column: str = config["dataframe"]["tof_column"] + if tof_binning is None: + if config is None: + raise ValueError("Either tof_binning or config must be given.") + tof_binning: int = config["dataframe"]["tof_binning"] + if tof_ns_column is None: + if config is None: + raise ValueError("Either tof_ns_column or config must be given.") + tof_ns_column: str = config["dataframe"]["tof_ns_column"] def convert_to_ns(x): - return x[tof_step_column] * time_step_size - df[tof_column] = df.map_partitions( - convert_to_ns, meta=(tof_column, np.float64) + val = x[tof_column] * tof_binwidth * 2**tof_binning + return val.astype(np.float32) + df[tof_ns_column] = df.map_partitions( + convert_to_ns, meta=(tof_column, np.float32) ) metadata = {} metadata["applied"] = True - metadata["time_step_size"] = time_step_size + metadata["tof_binwidth"] = tof_binwidth return df, metadata diff --git a/sed/config/flash_example_config.yaml b/sed/config/flash_example_config.yaml index 1a52468e..4cf1d425 100644 --- a/sed/config/flash_example_config.yaml +++ b/sed/config/flash_example_config.yaml @@ -23,19 +23,60 @@ dataframe: daq: fl1user3 # The offset correction to the pulseId ubid_offset: 5 + # the number of iterations to fill the pulseId forward. forward_fill_iterations: 2 - # if true, removes the 3 bits reserved for dldSectorID from the dldTimeandSector column + # if true, removes the 3 bits reserved for dldSectorID from the dldTimeSteps column unravel_8s_detector_time_channel: True - time_step_size: 0.16460905596613884 # 0.020576131995767355 - raw_time_column: dldTimeAndSector - time_step_column: dldTimeSteps - tof_step_column: dldTimeSteps + + # dataframe column containing x coordinates + x_column: dldPosX + # dataframe column containing corrected x coordinates + corrected_x_column: "X" + # dataframe column containing kx coordinates + kx_column: "kx" + # dataframe column containing y coordinates + + y_column: dldPosY + # dataframe column containing corrected y coordinates + corrected_y_column: "Y" + # dataframe column containing kx coordinates + ky_column: "ky" + # dataframe column containing time-of-flight data + + tof_column: dldTimeSteps + # dataframe column containing time-of-flight data in ns + tof_ns_column: dldTime + # dataframe column containing corrected time-of-flight data + corrected_tof_column: "tm" + + # time length of a base time-of-flight bin in ns + tof_binwidth: 0.020576131995767355 # 0.16460905596613884 + # binning parameter for time-of-flight data. 2**tof_binning bins per base bin + tof_binning: 3 # power of 2, 4 means 8 bins per step + # dataframe column containing sector ID. obtained from dldTimeSteps column sector_id_column: dldSectorID + sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] - tof_column: dldTime + jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] + units: + dldPosX: 'step' + dldPosY: 'step' + dldTimeSteps: 'step' + tof_voltage: 'V' + extractorVoltage: 'V' + extractorCurrent: 'A' + cryoTemperature: 'K' + sampleTemperature: 'K' + dldTime: 'ns' + # delay: 'ps' + timeStamp: 's' + # energy: 'eV' + # E: 'eV' + kx: '1/A' + ky: '1/A' # The channels to load. # channels have the following structure: @@ -62,7 +103,7 @@ dataframe: slice: 0 # This channel will actually create dldTimeSteps and dldSectorID, # if unravel_8s_detector_time_channel is set to True - dldTimeAndSector: + dldTimeSteps: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 3 diff --git a/sed/core/processor.py b/sed/core/processor.py index e8d71fad..15ed267c 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1204,33 +1204,36 @@ def add_jitter(self, cols: Sequence[str] = None): metadata.append(col) self._attributes.add(metadata, "jittering", duplicate_policy="append") - def hextof_step_to_ns( + def dld_time_to_ns( self, - time_step_size: float = None, - tof_step_column: str = None, + tof_ns_column: str = None, + tof_binwidth: float = None, tof_column: str = None, + tof_binning: int = None, ): """Convert time-of-flight channel steps to nanoseconds. - Intended for use with HEXTOF endstation - Args: - time_step_size (float, optional): Time step size in nanoseconds. - Defaults to config["dataframe"]["time_step_size"]. - tof_step_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_step_column"]. + tof_binwidth (float, optional): Time step size in nanoseconds. + Defaults to config["dataframe"]["tof_binwidth"]. + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. tof_column (str, optional): Name of the column containing the time-of-flight. Defaults to config["dataframe"]["tof_column"]. + tof_binning (int, optional): Binning of the time-of-flight steps. + """ if self._dataframe is not None: print("Adding energy column to dataframe:") # TODO assert order of execution through metadata - self._dataframe, metadata = hextof.convert_8s_time_to_ns( + self._dataframe, metadata = hextof.dld_time_to_ns( df=self._dataframe, - time_step_size=time_step_size or self._config["dataframe"]["time_step_size"], - tof_step_column=tof_step_column or self._config["dataframe"]["tof_step_column"], - tof_column=tof_column or self._config["dataframe"]["tof_column"], + tof_ns_column=tof_ns_column, + tof_binwidth=tof_binwidth, + tof_column=tof_column, + tof_binning=tof_binning, + config=self._config, ) self._attributes.add( metadata, @@ -1238,9 +1241,11 @@ def hextof_step_to_ns( duplicate_policy="merge", ) - def hextof_align_8s_sectors( + def align_dld_sectors( self, sector_delays: Sequence[float] = None, + sector_id_column: str = None, + tof_column: str = None, ): """ Align the 8s sectors of the HEXTOF endstation. @@ -1253,19 +1258,16 @@ def hextof_align_8s_sectors( if self._dataframe is not None: print("Aligning 8s sectors of dataframe") # TODO assert order of execution through metadata - if sector_delays is None: - sector_delays = self._config["dataframe"].get("sector_delays", [0.0] * 8) - if len(sector_delays) != 8: - raise ValueError("sector_delays must be a list of 8 floats") - if all(delay == 0.0 for delay in sector_delays): - print("All sector delays are 0, skipping alignment") - self._dataframe, metadata = hextof.align_8s_sectors( + self._dataframe, metadata = hextof.align_dld_sectors( df=self._dataframe, sector_delays=sector_delays, + sector_id_column=sector_id_column, + tof_column=tof_column, + config=self._config, ) self._attributes.add( metadata, - "energy_calibration", + "sector_alignment", duplicate_policy="merge", ) diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index 47d523be..f8e3cc0b 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -593,9 +593,10 @@ def create_dataframe_per_file( with h5py.File(file_path, "r") as h5_file: self.reset_multi_index() # Reset MultiIndexes for next file df = self.concatenate_channels(h5_file) - df = df.dropna(subset=['dldTimeAndSector']) + df = df.dropna(subset=self._config['dataframe'].get('tof_column', 'dldTimeSteps')) # correct the 3 bit shift which encodes the detector ID in the 8s time - df = unravel_8s_detector_time_channel(df) + if self._config['dataframe'].get('unravel_8s_detector_time_channel', False): + df = unravel_8s_detector_time_channel(df, config=self._config) return df def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> Union[bool, Exception]: diff --git a/tests/data/loader/flash/config.yaml b/tests/data/loader/flash/config.yaml index 0a9e9277..fa5d38f6 100644 --- a/tests/data/loader/flash/config.yaml +++ b/tests/data/loader/flash/config.yaml @@ -19,30 +19,64 @@ core: # year: 20xx dataframe: - # The offset correction to the pulseId - ubid_offset: 5 - # The name of the DAQ system to use. Necessary to resolve the filenames/paths. daq: fl1user3 + # The offset correction to the pulseId + ubid_offset: 5 + # the number of iterations to fill the pulseId forward. + forward_fill_iterations: 2 + # if true, removes the 3 bits reserved for dldSectorID from the dldTimeandSector column unravel_8s_detector_time_channel: True - # the tof step size is now 8 times larger as we remove the 3 bits of the sectorID - time_step_size: 0.16460905596613884 # 0.020576131995767355 - raw_time_column: dldTimeAndSector - time_step_column: dldTimeSteps - tof_step_column: dldTimeSteps + + # dataframe column containing x coordinates + x_column: dldPosX + # dataframe column containing corrected x coordinates + corrected_x_column: "X" + # dataframe column containing kx coordinates + kx_column: "kx" + # dataframe column containing y coordinates + + y_column: dldPosY + # dataframe column containing corrected y coordinates + corrected_y_column: "Y" + # dataframe column containing kx coordinates + ky_column: "ky" + # dataframe column containing time-of-flight data + + tof_column: dldTimeSteps + # dataframe column containing time-of-flight data in ns + tof_ns_column: dldTime + # dataframe column containing corrected time-of-flight data + corrected_tof_column: "tm" + + # time length of a base time-of-flight bin in ns + tof_binwidth: 0.020576131995767355 # 0.16460905596613884 + # binning parameter for time-of-flight data. 2**tof_binning bins per base bin + tof_binning: 3 # power of 2, 4 means 8 bins per step + # dataframe column containing sector ID. obtained from dldTimeSteps column sector_id_column: dldSectorID + sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] - tof_column: dldTime + jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] - # The channels to load. - # channels have the following structure: - # channelAlias: - # format: per_pulse/per_electron/per_train - # group_name: the hdf5 group path - # slice: if the group contains multidim data, where to slice - + units: + dldPosX: 'step' + dldPosY: 'step' + dldTimeSteps: 'step' + tof_voltage: 'V' + extractorVoltage: 'V' + extractorCurrent: 'A' + cryoTemperature: 'K' + sampleTemperature: 'K' + dldTime: 'ns' + # delay: 'ps' + timeStamp: 's' + # energy: 'eV' + # E: 'eV' + kx: '1/A' + ky: '1/A' channels: # pulse ID is a necessary channel for using the loader. pulseId: @@ -60,7 +94,7 @@ dataframe: group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 0 - dldTimeAndSector: + dldTimeSteps: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 3 From ccff3f8a634de0457fe48530b95ffbb071b670a9 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 14:20:09 +0200 Subject: [PATCH 11/54] linting and docstrings --- sed/calibrator/hextof.py | 54 +++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index d2549985..58e2aee2 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -1,6 +1,8 @@ """sed.calibrator.hextof module. Code for handling hextof specific transformations and calibrations. """ +from typing import Any +from typing import Dict from typing import Sequence from typing import Tuple from typing import Union @@ -22,8 +24,14 @@ def unravel_8s_detector_time_channel( dldTimeSteps channel. Args: - sector_delays (Sequece[float], optional): Sector delays for the 8s time. - Defaults to config["dataframe"]["sector_delays"]. + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. + sector_id_column (str, optional): Name of the column containing the + sectorID. Defaults to config["dataframe"]["sector_id_column"]. + config (dict, optional): Configuration dictionary. Defaults to None. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. """ if tof_column is None: if config is None: @@ -53,8 +61,17 @@ def align_dld_sectors( Args: sector_delays (Sequece[float], optional): Sector delays for the 8s time. - in units of step. Calibration should be done with binning along dldTimeSteps. - Defaults to config["dataframe"]["sector_delays"]. + in units of step. Calibration should be done with binning along dldTimeSteps. + Defaults to config["dataframe"]["sector_delays"]. + sector_id_column (str, optional): Name of the column containing the + sectorID. Defaults to config["dataframe"]["sector_id_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. + config (dict, optional): Configuration dictionary. Defaults to None. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. """ if sector_delays is None: if config is None: @@ -77,11 +94,10 @@ def align_sector(x): df[tof_column] = df.map_partitions( align_sector, meta=(tof_column, np.float32) ) - - metadata = {} - metadata["applied"] = True - metadata["sector_delays"] = sector_delays - + metadata: Dict[str,Any] = { + "applied": True, + "sector_delays": sector_delays, + } return df, metadata @@ -103,23 +119,27 @@ def dld_time_to_ns( tof_column (str, optional): Name of the column containing the time-of-flight. Defaults to config["dataframe"]["tof_column"]. tof_binning (int, optional): Binning of the time-of-flight steps. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. """ if tof_binwidth is None: if config is None: raise ValueError("Either tof_binwidth or config must be given.") - tof_binwidth: float = config["dataframe"]["tof_binwidth"] + tof_binwidth = config["dataframe"]["tof_binwidth"] if tof_column is None: if config is None: raise ValueError("Either tof_column or config must be given.") - tof_column: str = config["dataframe"]["tof_column"] + tof_column = config["dataframe"]["tof_column"] if tof_binning is None: if config is None: raise ValueError("Either tof_binning or config must be given.") - tof_binning: int = config["dataframe"]["tof_binning"] + tof_binning = config["dataframe"]["tof_binning"] if tof_ns_column is None: if config is None: raise ValueError("Either tof_ns_column or config must be given.") - tof_ns_column: str = config["dataframe"]["tof_ns_column"] + tof_ns_column = config["dataframe"]["tof_ns_column"] def convert_to_ns(x): val = x[tof_column] * tof_binwidth * 2**tof_binning @@ -127,8 +147,8 @@ def convert_to_ns(x): df[tof_ns_column] = df.map_partitions( convert_to_ns, meta=(tof_column, np.float32) ) - metadata = {} - metadata["applied"] = True - metadata["tof_binwidth"] = tof_binwidth - + metadata: Dict[str,Any] = { + "applied": True, + "tof_binwidth": tof_binwidth + } return df, metadata From 27adcc3acc2fb711ed78b0f94fbbdcdd3471f576 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 15:19:20 +0200 Subject: [PATCH 12/54] add rolling average and energy shift --- sed/core/dfops.py | 131 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/sed/core/dfops.py b/sed/core/dfops.py index ecef954f..7cd8be1e 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -3,6 +3,8 @@ """ # Note: some of the functions presented here were # inspired by https://github.com/mpes-kit/mpes +from typing import Any +from typing import Dict from typing import Callable from typing import Sequence from typing import Union @@ -193,3 +195,132 @@ def forward_fill_partition(df): after=0, ) return df + + +def rolling_average_on_acquisition_time( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + rolling_group_channel: str, + columns: str = None, + window: float = None, + sigma: float = 2, + config: dict = None, + +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """ Perform a rolling average with a gaussian weighted window. + + In order to preserve the number of points, the first and last "widnow" + number of points are substituted with the original signal. + # TODO: this is currently very slow, and could do with a remake. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + group_channel: (str): Name of the column on which to group the data + cols (str): Name of the column on which to perform the rolling average + window (float): Size of the rolling average window + sigma (float): number of standard deviations for the gaussian weighting of the window. + a value of 2 corresponds to a gaussian with sigma equal to half the window size. + Smaller values reduce the weighting in the window frame. + + Returns: + Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new columns. + """ + if group_channel is None: + if config is None: + raise ValueError("Either group_channel or config must be given.") + group_channel = config["dataframe"]["rolling_group_channel"] + with ProgressBar(): + print(f'rolling average over {columns}...') + if isinstance(columns,str): + columns=[columns] + df_ = df.groupby(rolling_group_channel).agg({c:'mean' for c in columns}).compute() + df_['dt'] = pd.to_datetime(df_.index, unit='s') + df_['ts'] = df_.index + for c in columns: + df_[c+'_rolled'] = df_[c].interpolate(method='nearest').rolling(window,center=True,win_type='gaussian').mean(std=window/sigma).fillna(df_[c]) + df_ = df_.drop(c, axis=1) + if c+'_rolled' in df.columns: + df = df.drop(c+'_rolled',axis=1) + return df.merge(df_,left_on='timeStamp',right_on='ts').drop(['ts','dt'], axis=1) + + +def apply_energy_shift( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + columns: Union[str,Sequence[str]], + signs: Union[int,Sequence[int]], + energy_column: str = None, + mode: Union[str,Sequence[str]] = "direct", + window: float = None, + sigma: float = 2, + rolling_group_channel: str = None, + config: dict = None, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """ Apply an energy shift to the given column(s). + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + energy_column (str): Name of the column containing the energy values. + column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. + sign (Union[int,Sequence[int]]): Sign of the shift to apply. (+1 or -1) + mode (str): The mode of the shift. One of 'direct', 'average' or rolled. + if rolled, window and sigma must be given. + config (dict): Configuration dictionary. + **kwargs: Additional arguments for the rolling average function. + """ + if energy_column is None: + if config is None: + raise ValueError("Either energy_column or config must be given.") + energy_column = config["dataframe"]["energy_column"] + if isinstance(columns,str): + columns=[columns] + if isinstance(signs,int): + signs=[signs] + if isinstance(mode,str): + mode = [mode] * len(columns) + if len(columns) != len(signs): + raise ValueError("column_name and sign must have the same length.") + with ProgressBar(minimum=5,): + if mode == "rolled": + if window is None: + if config is None: + raise ValueError("Either window or config must be given.") + window = config["dataframe"]["rolling_window"] + if sigma is None: + if config is None: + raise ValueError("Either sigma or config must be given.") + sigma = config["dataframe"]["rolling_sigma"] + if rolling_group_channel is None: + if config is None: + raise ValueError("Either rolling_group_channel or config must be given.") + rolling_group_channel = config["dataframe"]["rolling_group_channel"] + print('rolling averages...') + df = rolling_average_on_acquisition_time( + df, + rolling_group_channel=rolling_group_channel, + columns=columns, + window=window, + sigma=sigma, + ) + for col, s, m in zip(columns,signs, mode): + s = s/np.abs(s) # enusre s is either +1 or -1 + if m == "rolled": + col = col + '_rolled' + if m == "direct" or m == "rolled": + df[col] = df.map_partitions( + lambda x: x[col] + s * x[energy_column], meta=(col, np.float32) + ) + elif m == 'mean': + print('computing means...') + col_mean = df[col].mean() + df[col] = df.map_partitions( + lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32) + ) + else: + raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") + metadata: dict[str,Any] = { + "applied": True, + "energy_column": energy_column, + "column_name": columns, + "sign": signs, + } + return df, metadata + \ No newline at end of file From 77a6ab58112e9915d841e341570b0fd20096943e Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 17:02:18 +0200 Subject: [PATCH 13/54] local testing --- sed/core/dfops.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 7cd8be1e..6f29a979 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -224,10 +224,10 @@ def rolling_average_on_acquisition_time( Returns: Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new columns. """ - if group_channel is None: + if rolling_group_channel is None: if config is None: raise ValueError("Either group_channel or config must be given.") - group_channel = config["dataframe"]["rolling_group_channel"] + rolling_group_channel = config["dataframe"]["rolling_group_channel"] with ProgressBar(): print(f'rolling average over {columns}...') if isinstance(columns,str): @@ -236,7 +236,13 @@ def rolling_average_on_acquisition_time( df_['dt'] = pd.to_datetime(df_.index, unit='s') df_['ts'] = df_.index for c in columns: - df_[c+'_rolled'] = df_[c].interpolate(method='nearest').rolling(window,center=True,win_type='gaussian').mean(std=window/sigma).fillna(df_[c]) + df_[c+'_rolled'] = df_[c].interpolate( + method='nearest' + ).rolling( + window,center=True,win_type='gaussian' + ).mean( + std=window/sigma + ).fillna(df_[c]) df_ = df_.drop(c, axis=1) if c+'_rolled' in df.columns: df = df.drop(c+'_rolled',axis=1) From 8f4bded026d96864bd9b77b2d3a501b5cfe7ea2d Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 20:22:23 +0200 Subject: [PATCH 14/54] make step2ns global --- sed/calibrator/hextof.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 58e2aee2..4fb23bd1 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -141,14 +141,35 @@ def dld_time_to_ns( raise ValueError("Either tof_ns_column or config must be given.") tof_ns_column = config["dataframe"]["tof_ns_column"] - def convert_to_ns(x): - val = x[tof_column] * tof_binwidth * 2**tof_binning - return val.astype(np.float32) + df[tof_ns_column] = df.map_partitions( - convert_to_ns, meta=(tof_column, np.float32) + step2ns, meta=(tof_column, np.float64) ) metadata: Dict[str,Any] = { "applied": True, "tof_binwidth": tof_binwidth } return df, metadata + +def step2ns( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_column: str, + tof_binwidth: float, + tof_binning: int, + dtype: type = np.float64, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """ Converts the time-of-flight steps to time-of-flight in nanoseconds. + + designed for use with dask.dataframe.DataFrame.map_partitions. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. + tof_column (str): Name of the column containing the time-of-flight steps. + tof_binwidth (float): Time step size in nanoseconds. + tof_binning (int): Binning of the time-of-flight steps. + + Returns: + Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. + """ + val = df[tof_column].astype(dtype) * tof_binwidth * 2**tof_binning + return val.astype(dtype) \ No newline at end of file From 5848a22270ecd1e7f6acd61c3c2071115ab99463 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 11 Oct 2023 21:00:23 +0200 Subject: [PATCH 15/54] implement shift_energy_axis --- sed/calibrator/hextof.py | 139 +++++++++++++++++++++++++++++++++++++++ sed/core/processor.py | 31 +++++++++ 2 files changed, 170 insertions(+) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index 58e2aee2..0c25a9ac 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -10,6 +10,7 @@ import numpy as np import pandas as pd import dask.dataframe +from dask.diagnostics import ProgressBar def unravel_8s_detector_time_channel( @@ -152,3 +153,141 @@ def convert_to_ns(x): "tof_binwidth": tof_binwidth } return df, metadata + + +def rolling_average_on_acquisition_time( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + rolling_group_channel: str, + columns: str = None, + window: float = None, + sigma: float = 2, + config: dict = None, + +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """ Perform a rolling average with a gaussian weighted window. + + In order to preserve the number of points, the first and last "widnow" + number of points are substituted with the original signal. + # TODO: this is currently very slow, and could do with a remake. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + group_channel: (str): Name of the column on which to group the data + cols (str): Name of the column on which to perform the rolling average + window (float): Size of the rolling average window + sigma (float): number of standard deviations for the gaussian weighting of the window. + a value of 2 corresponds to a gaussian with sigma equal to half the window size. + Smaller values reduce the weighting in the window frame. + + Returns: + Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new columns. + """ + if rolling_group_channel is None: + if config is None: + raise ValueError("Either group_channel or config must be given.") + rolling_group_channel = config["dataframe"]["rolling_group_channel"] + with ProgressBar(): + print(f'rolling average over {columns}...') + if isinstance(columns,str): + columns=[columns] + df_ = df.groupby(rolling_group_channel).agg({c:'mean' for c in columns}).compute() + df_['dt'] = pd.to_datetime(df_.index, unit='s') + df_['ts'] = df_.index + for c in columns: + df_[c+'_rolled'] = df_[c].interpolate( + method='nearest' + ).rolling( + window,center=True,win_type='gaussian' + ).mean( + std=window/sigma + ).fillna(df_[c]) + df_ = df_.drop(c, axis=1) + if c+'_rolled' in df.columns: + df = df.drop(c+'_rolled',axis=1) + return df.merge(df_,left_on='timeStamp',right_on='ts').drop(['ts','dt'], axis=1) + + +def shift_energy_axis( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + columns: Union[str,Sequence[str]], + signs: Union[int,Sequence[int]], + energy_column: str = None, + mode: Union[str,Sequence[str]] = "direct", + window: float = None, + sigma: float = 2, + rolling_group_channel: str = None, + config: dict = None, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """ Apply an energy shift to the given column(s). + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + energy_column (str): Name of the column containing the energy values. + column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. + sign (Union[int,Sequence[int]]): Sign of the shift to apply. (+1 or -1) + mode (str): The mode of the shift. One of 'direct', 'average' or rolled. + if rolled, window and sigma must be given. + config (dict): Configuration dictionary. + **kwargs: Additional arguments for the rolling average function. + """ + if energy_column is None: + if config is None: + raise ValueError("Either energy_column or config must be given.") + energy_column = config["dataframe"]["energy_column"] + + if isinstance(columns,str): + columns=[columns] + if isinstance(signs,int): + signs=[signs] + if isinstance(mode,str): + mode = [mode] * len(columns) + if len(columns) != len(signs): + raise ValueError("column_name and sign must have the same length.") + with ProgressBar(minimum=5,): + if mode == "rolled": + if window is None: + if config is None: + raise ValueError("Either window or config must be given.") + window = config["dataframe"]["rolling_window"] + if sigma is None: + if config is None: + raise ValueError("Either sigma or config must be given.") + sigma = config["dataframe"]["rolling_sigma"] + if rolling_group_channel is None: + if config is None: + raise ValueError("Either rolling_group_channel or config must be given.") + rolling_group_channel = config["dataframe"].get("rolling_group_channel",None) + if rolling_group_channel is None: + raise ValueError("T f mode is 'rolled', rolling_group_channel must be" + "given or present in config.") + print('rolling averages...') + df = rolling_average_on_acquisition_time( + df, + rolling_group_channel=rolling_group_channel, + columns=columns, + window=window, + sigma=sigma, + ) + for col, s, m in zip(columns,signs, mode): + s = s/np.abs(s) # enusre s is either +1 or -1 + if m == "rolled": + col = col + '_rolled' + if m == "direct" or m == "rolled": + df[col] = df.map_partitions( + lambda x: x[col] + s * x[energy_column], meta=(col, np.float32) + ) + elif m == 'mean': + print('computing means...') + col_mean = df[col].mean() + df[col] = df.map_partitions( + lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32) + ) + else: + raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") + metadata: dict[str,Any] = { + "applied": True, + "energy_column": energy_column, + "column_name": columns, + "sign": signs, + } + return df, metadata \ No newline at end of file diff --git a/sed/core/processor.py b/sed/core/processor.py index 15ed267c..e6c04964 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1181,6 +1181,37 @@ def calibrate_delay_axis( else: print(self._dataframe) + def shift_energy_axis( + self, + columns: Union[str,Sequence[str]], + signs: Union[int,Sequence[int]], + mode: Union[str,Sequence[str]] = "direct", + window: float = None, + sigma: float = 2, + rolling_group_channel: str = None, + ) -> None: + energy_column = self._config["dataframe"]["energy_column"] + if energy_column not in self._dataframe.columns: + raise ValueError( + f"Energy column {energy_column} not found in dataframe! " + "Run energy calibration first", + ) + self._dataframe, metadata = hextof.shift_energy_axis( + df=self._dataframe, + columns=columns, + signs=signs, + mode=mode, + window=window, + sigma=sigma, + rolling_group_channel=rolling_group_channel, + config=self._config, + ) + self._attributes.add( + metadata, + "shift_energy_axis", + duplicate_policy="raise", + ) + def add_jitter(self, cols: Sequence[str] = None): """Add jitter to the selected dataframe columns. From 991df97098f22a196ee747bdd1faa0cbec806529 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 12 Oct 2023 14:02:14 +0200 Subject: [PATCH 16/54] linting --- sed/calibrator/hextof.py | 187 ++++++++++++++++++------------------- sed/core/dfops.py | 128 ++++++++++++------------- sed/core/processor.py | 28 +++--- sed/loader/flash/loader.py | 6 +- tests/test_dfops.py | 46 ++++----- 5 files changed, 196 insertions(+), 199 deletions(-) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py index b86b7c2b..892a1f3f 100644 --- a/sed/calibrator/hextof.py +++ b/sed/calibrator/hextof.py @@ -7,9 +7,9 @@ from typing import Tuple from typing import Union +import dask.dataframe import numpy as np import pandas as pd -import dask.dataframe from dask.diagnostics import ProgressBar @@ -44,19 +44,20 @@ def unravel_8s_detector_time_channel( sector_id_column = config["dataframe"]["sector_id_column"] if sector_id_column in df.columns: - raise ValueError(f"Column {sector_id_column} already in dataframe. " - "This function is not idempotent.") + raise ValueError( + f"Column {sector_id_column} already in dataframe. " "This function is not idempotent.", + ) df[sector_id_column] = (df[tof_column] % 8).astype(np.int8) df[tof_column] = (df[tof_column] // 8).astype(np.int32) return df def align_dld_sectors( - df: dask.dataframe.DataFrame, - sector_delays: Sequence[float] = None, - sector_id_column: str = None, - tof_column: str = None, - config: dict = None, + df: dask.dataframe.DataFrame, + sector_delays: Sequence[float] = None, + sector_id_column: str = None, + tof_column: str = None, + config: dict = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the 8s sectors to the first sector. @@ -69,7 +70,7 @@ def align_dld_sectors( tof_column (str, optional): Name of the column containing the time-of-flight. Defaults to config["dataframe"]["tof_column"]. config (dict, optional): Configuration dictionary. Defaults to None. - + Returns: dask.dataframe.DataFrame: Dataframe with the new columns. dict: Metadata dictionary. @@ -92,10 +93,9 @@ def align_dld_sectors( def align_sector(x): val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] return val.astype(np.float32) - df[tof_column] = df.map_partitions( - align_sector, meta=(tof_column, np.float32) - ) - metadata: Dict[str,Any] = { + + df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) + metadata: Dict[str, Any] = { "applied": True, "sector_delays": sector_delays, } @@ -103,12 +103,12 @@ def align_sector(x): def dld_time_to_ns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - tof_ns_column: str = None, - tof_binwidth: float = None, - tof_column: str = None, - tof_binning: int = None, - config: dict = None, + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_ns_column: str = None, + tof_binwidth: float = None, + tof_column: str = None, + tof_binning: int = None, + config: dict = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Converts the 8s time in steps to time in ns. @@ -120,7 +120,7 @@ def dld_time_to_ns( tof_column (str, optional): Name of the column containing the time-of-flight. Defaults to config["dataframe"]["tof_column"]. tof_binning (int, optional): Binning of the time-of-flight steps. - + Returns: dask.dataframe.DataFrame: Dataframe with the new columns. dict: Metadata dictionary. @@ -142,28 +142,21 @@ def dld_time_to_ns( raise ValueError("Either tof_ns_column or config must be given.") tof_ns_column = config["dataframe"]["tof_ns_column"] - - df[tof_ns_column] = df.map_partitions( - step2ns, meta=(tof_column, np.float64) - ) - metadata: Dict[str,Any] = { - "applied": True, - "tof_binwidth": tof_binwidth - } + df[tof_ns_column] = df.map_partitions(step2ns, meta=(tof_column, np.float64)) + metadata: Dict[str, Any] = {"applied": True, "tof_binwidth": tof_binwidth} return df, metadata def rolling_average_on_acquisition_time( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - rolling_group_channel: str, - columns: str = None, - window: float = None, - sigma: float = 2, - config: dict = None, - + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + rolling_group_channel: str, + columns: str = None, + window: float = None, + sigma: float = 2, + config: dict = None, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """ Perform a rolling average with a gaussian weighted window. - + """Perform a rolling average with a gaussian weighted window. + In order to preserve the number of points, the first and last "widnow" number of points are substituted with the original signal. # TODO: this is currently very slow, and could do with a remake. @@ -173,7 +166,7 @@ def rolling_average_on_acquisition_time( group_channel: (str): Name of the column on which to group the data cols (str): Name of the column on which to perform the rolling average window (float): Size of the rolling average window - sigma (float): number of standard deviations for the gaussian weighting of the window. + sigma (float): number of standard deviations for the gaussian weighting of the window. a value of 2 corresponds to a gaussian with sigma equal to half the window size. Smaller values reduce the weighting in the window frame. @@ -183,42 +176,42 @@ def rolling_average_on_acquisition_time( if rolling_group_channel is None: if config is None: raise ValueError("Either group_channel or config must be given.") - rolling_group_channel = config["dataframe"]["rolling_group_channel"] + rolling_group_channel = config["dataframe"]["rolling_group_channel"] with ProgressBar(): - print(f'rolling average over {columns}...') - if isinstance(columns,str): - columns=[columns] - df_ = df.groupby(rolling_group_channel).agg({c:'mean' for c in columns}).compute() - df_['dt'] = pd.to_datetime(df_.index, unit='s') - df_['ts'] = df_.index + print(f"rolling average over {columns}...") + if isinstance(columns, str): + columns = [columns] + df_ = df.groupby(rolling_group_channel).agg({c: "mean" for c in columns}).compute() + df_["dt"] = pd.to_datetime(df_.index, unit="s") + df_["ts"] = df_.index for c in columns: - df_[c+'_rolled'] = df_[c].interpolate( - method='nearest' - ).rolling( - window,center=True,win_type='gaussian' - ).mean( - std=window/sigma - ).fillna(df_[c]) + df_[c + "_rolled"] = ( + df_[c] + .interpolate(method="nearest") + .rolling(window, center=True, win_type="gaussian") + .mean(std=window / sigma) + .fillna(df_[c]) + ) df_ = df_.drop(c, axis=1) - if c+'_rolled' in df.columns: - df = df.drop(c+'_rolled',axis=1) - return df.merge(df_,left_on='timeStamp',right_on='ts').drop(['ts','dt'], axis=1) + if c + "_rolled" in df.columns: + df = df.drop(c + "_rolled", axis=1) + return df.merge(df_, left_on="timeStamp", right_on="ts").drop(["ts", "dt"], axis=1) def shift_energy_axis( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - columns: Union[str,Sequence[str]], - signs: Union[int,Sequence[int]], - energy_column: str = None, - mode: Union[str,Sequence[str]] = "direct", - window: float = None, - sigma: float = 2, - rolling_group_channel: str = None, - config: dict = None, + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + columns: Union[str, Sequence[str]], + signs: Union[int, Sequence[int]], + energy_column: str = None, + mode: Union[str, Sequence[str]] = "direct", + window: float = None, + sigma: float = 2, + rolling_group_channel: str = None, + config: dict = None, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """ Apply an energy shift to the given column(s). - - Args: + """Apply an energy shift to the given column(s). + + Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. energy_column (str): Name of the column containing the energy values. column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. @@ -232,16 +225,18 @@ def shift_energy_axis( if config is None: raise ValueError("Either energy_column or config must be given.") energy_column = config["dataframe"]["energy_column"] - - if isinstance(columns,str): - columns=[columns] - if isinstance(signs,int): - signs=[signs] - if isinstance(mode,str): + + if isinstance(columns, str): + columns = [columns] + if isinstance(signs, int): + signs = [signs] + if isinstance(mode, str): mode = [mode] * len(columns) if len(columns) != len(signs): raise ValueError("column_name and sign must have the same length.") - with ProgressBar(minimum=5,): + with ProgressBar( + minimum=5, + ): if mode == "rolled": if window is None: if config is None: @@ -254,11 +249,13 @@ def shift_energy_axis( if rolling_group_channel is None: if config is None: raise ValueError("Either rolling_group_channel or config must be given.") - rolling_group_channel = config["dataframe"].get("rolling_group_channel",None) + rolling_group_channel = config["dataframe"].get("rolling_group_channel", None) if rolling_group_channel is None: - raise ValueError("T f mode is 'rolled', rolling_group_channel must be" - "given or present in config.") - print('rolling averages...') + raise ValueError( + "T f mode is 'rolled', rolling_group_channel must be" + "given or present in config.", + ) + print("rolling averages...") df = rolling_average_on_acquisition_time( df, rolling_group_channel=rolling_group_channel, @@ -266,40 +263,40 @@ def shift_energy_axis( window=window, sigma=sigma, ) - for col, s, m in zip(columns,signs, mode): - s = s/np.abs(s) # enusre s is either +1 or -1 + for col, s, m in zip(columns, signs, mode): + s = s / np.abs(s) # enusre s is either +1 or -1 if m == "rolled": - col = col + '_rolled' + col = col + "_rolled" if m == "direct" or m == "rolled": df[col] = df.map_partitions( - lambda x: x[col] + s * x[energy_column], meta=(col, np.float32) + lambda x: x[col] + s * x[energy_column], meta=(col, np.float32), ) - elif m == 'mean': - print('computing means...') + elif m == "mean": + print("computing means...") col_mean = df[col].mean() df[col] = df.map_partitions( - lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32) + lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32), ) else: raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") - metadata: dict[str,Any] = { + metadata: dict[str, Any] = { "applied": True, "energy_column": energy_column, "column_name": columns, "sign": signs, - } + } return df, metadata def step2ns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - tof_column: str, - tof_binwidth: float, - tof_binning: int, - dtype: type = np.float64, + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_column: str, + tof_binwidth: float, + tof_binning: int, + dtype: type = np.float64, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """ Converts the time-of-flight steps to time-of-flight in nanoseconds. - + """Converts the time-of-flight steps to time-of-flight in nanoseconds. + designed for use with dask.dataframe.DataFrame.map_partitions. Args: @@ -307,7 +304,7 @@ def step2ns( tof_column (str): Name of the column containing the time-of-flight steps. tof_binwidth (float): Time step size in nanoseconds. tof_binning (int): Binning of the time-of-flight steps. - + Returns: Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. """ diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 6f29a979..b3836c05 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -4,15 +4,15 @@ # Note: some of the functions presented here were # inspired by https://github.com/mpes-kit/mpes from typing import Any -from typing import Dict from typing import Callable +from typing import Dict from typing import Sequence from typing import Union import dask.dataframe -from dask.diagnostics import ProgressBar import numpy as np import pandas as pd +from dask.diagnostics import ProgressBar def apply_jitter( @@ -144,11 +144,11 @@ def map_columns_2d( def forward_fill_lazy( - df: dask.dataframe.DataFrame, - channels: Sequence[str], - before: Union[str, int] = 'max', - compute_lengths: bool = False, - iterations: int = 2, + df: dask.dataframe.DataFrame, + channels: Sequence[str], + before: Union[str, int] = "max", + compute_lengths: bool = False, + iterations: int = 2, ) -> dask.dataframe.DataFrame: """Forward fill the specified columns multiple times in a dask dataframe. @@ -178,7 +178,7 @@ def forward_fill_partition(df): return df # calculate the number of rows in each partition and choose least - if before == 'max': + if before == "max": nrows = df.map_partitions(len) if compute_lengths: with ProgressBar(): @@ -198,16 +198,15 @@ def forward_fill_partition(df): def rolling_average_on_acquisition_time( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - rolling_group_channel: str, - columns: str = None, - window: float = None, - sigma: float = 2, - config: dict = None, - + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + rolling_group_channel: str, + columns: str = None, + window: float = None, + sigma: float = 2, + config: dict = None, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """ Perform a rolling average with a gaussian weighted window. - + """Perform a rolling average with a gaussian weighted window. + In order to preserve the number of points, the first and last "widnow" number of points are substituted with the original signal. # TODO: this is currently very slow, and could do with a remake. @@ -217,7 +216,7 @@ def rolling_average_on_acquisition_time( group_channel: (str): Name of the column on which to group the data cols (str): Name of the column on which to perform the rolling average window (float): Size of the rolling average window - sigma (float): number of standard deviations for the gaussian weighting of the window. + sigma (float): number of standard deviations for the gaussian weighting of the window. a value of 2 corresponds to a gaussian with sigma equal to half the window size. Smaller values reduce the weighting in the window frame. @@ -227,42 +226,42 @@ def rolling_average_on_acquisition_time( if rolling_group_channel is None: if config is None: raise ValueError("Either group_channel or config must be given.") - rolling_group_channel = config["dataframe"]["rolling_group_channel"] + rolling_group_channel = config["dataframe"]["rolling_group_channel"] with ProgressBar(): - print(f'rolling average over {columns}...') - if isinstance(columns,str): - columns=[columns] - df_ = df.groupby(rolling_group_channel).agg({c:'mean' for c in columns}).compute() - df_['dt'] = pd.to_datetime(df_.index, unit='s') - df_['ts'] = df_.index + print(f"rolling average over {columns}...") + if isinstance(columns, str): + columns = [columns] + df_ = df.groupby(rolling_group_channel).agg({c: "mean" for c in columns}).compute() + df_["dt"] = pd.to_datetime(df_.index, unit="s") + df_["ts"] = df_.index for c in columns: - df_[c+'_rolled'] = df_[c].interpolate( - method='nearest' - ).rolling( - window,center=True,win_type='gaussian' - ).mean( - std=window/sigma - ).fillna(df_[c]) + df_[c + "_rolled"] = ( + df_[c] + .interpolate(method="nearest") + .rolling(window, center=True, win_type="gaussian") + .mean(std=window / sigma) + .fillna(df_[c]) + ) df_ = df_.drop(c, axis=1) - if c+'_rolled' in df.columns: - df = df.drop(c+'_rolled',axis=1) - return df.merge(df_,left_on='timeStamp',right_on='ts').drop(['ts','dt'], axis=1) + if c + "_rolled" in df.columns: + df = df.drop(c + "_rolled", axis=1) + return df.merge(df_, left_on="timeStamp", right_on="ts").drop(["ts", "dt"], axis=1) def apply_energy_shift( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - columns: Union[str,Sequence[str]], - signs: Union[int,Sequence[int]], - energy_column: str = None, - mode: Union[str,Sequence[str]] = "direct", - window: float = None, - sigma: float = 2, - rolling_group_channel: str = None, - config: dict = None, + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + columns: Union[str, Sequence[str]], + signs: Union[int, Sequence[int]], + energy_column: str = None, + mode: Union[str, Sequence[str]] = "direct", + window: float = None, + sigma: float = 2, + rolling_group_channel: str = None, + config: dict = None, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """ Apply an energy shift to the given column(s). - - Args: + """Apply an energy shift to the given column(s). + + Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. energy_column (str): Name of the column containing the energy values. column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. @@ -276,15 +275,17 @@ def apply_energy_shift( if config is None: raise ValueError("Either energy_column or config must be given.") energy_column = config["dataframe"]["energy_column"] - if isinstance(columns,str): - columns=[columns] - if isinstance(signs,int): - signs=[signs] - if isinstance(mode,str): + if isinstance(columns, str): + columns = [columns] + if isinstance(signs, int): + signs = [signs] + if isinstance(mode, str): mode = [mode] * len(columns) if len(columns) != len(signs): raise ValueError("column_name and sign must have the same length.") - with ProgressBar(minimum=5,): + with ProgressBar( + minimum=5, + ): if mode == "rolled": if window is None: if config is None: @@ -298,7 +299,7 @@ def apply_energy_shift( if config is None: raise ValueError("Either rolling_group_channel or config must be given.") rolling_group_channel = config["dataframe"]["rolling_group_channel"] - print('rolling averages...') + print("rolling averages...") df = rolling_average_on_acquisition_time( df, rolling_group_channel=rolling_group_channel, @@ -306,27 +307,26 @@ def apply_energy_shift( window=window, sigma=sigma, ) - for col, s, m in zip(columns,signs, mode): - s = s/np.abs(s) # enusre s is either +1 or -1 + for col, s, m in zip(columns, signs, mode): + s = s / np.abs(s) # enusre s is either +1 or -1 if m == "rolled": - col = col + '_rolled' + col = col + "_rolled" if m == "direct" or m == "rolled": df[col] = df.map_partitions( - lambda x: x[col] + s * x[energy_column], meta=(col, np.float32) + lambda x: x[col] + s * x[energy_column], meta=(col, np.float32), ) - elif m == 'mean': - print('computing means...') + elif m == "mean": + print("computing means...") col_mean = df[col].mean() df[col] = df.map_partitions( - lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32) + lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32), ) else: raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") - metadata: dict[str,Any] = { + metadata: dict[str, Any] = { "applied": True, "energy_column": energy_column, "column_name": columns, "sign": signs, - } + } return df, metadata - \ No newline at end of file diff --git a/sed/core/processor.py b/sed/core/processor.py index e6c04964..2e9cdf0b 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -20,8 +20,8 @@ from sed.binning import bin_dataframe from sed.calibrator import DelayCalibrator from sed.calibrator import EnergyCalibrator -from sed.calibrator import MomentumCorrector from sed.calibrator import hextof +from sed.calibrator import MomentumCorrector from sed.core.config import parse_config from sed.core.config import save_config from sed.core.dfops import apply_jitter @@ -1183,9 +1183,9 @@ def calibrate_delay_axis( def shift_energy_axis( self, - columns: Union[str,Sequence[str]], - signs: Union[int,Sequence[int]], - mode: Union[str,Sequence[str]] = "direct", + columns: Union[str, Sequence[str]], + signs: Union[int, Sequence[int]], + mode: Union[str, Sequence[str]] = "direct", window: float = None, sigma: float = 2, rolling_group_channel: str = None, @@ -1236,11 +1236,11 @@ def add_jitter(self, cols: Sequence[str] = None): self._attributes.add(metadata, "jittering", duplicate_policy="append") def dld_time_to_ns( - self, - tof_ns_column: str = None, - tof_binwidth: float = None, - tof_column: str = None, - tof_binning: int = None, + self, + tof_ns_column: str = None, + tof_binwidth: float = None, + tof_column: str = None, + tof_binning: int = None, ): """Convert time-of-flight channel steps to nanoseconds. @@ -1273,12 +1273,12 @@ def dld_time_to_ns( ) def align_dld_sectors( - self, - sector_delays: Sequence[float] = None, - sector_id_column: str = None, - tof_column: str = None, + self, + sector_delays: Sequence[float] = None, + sector_id_column: str = None, + tof_column: str = None, ): - """ Align the 8s sectors of the HEXTOF endstation. + """Align the 8s sectors of the HEXTOF endstation. Intended for use with HEXTOF endstation diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index f8e3cc0b..c29a5d81 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -26,11 +26,11 @@ from pandas import MultiIndex from pandas import Series +from sed.calibrator.hextof import unravel_8s_detector_time_channel from sed.core import dfops from sed.loader.base.loader import BaseLoader from sed.loader.flash.metadata import MetadataRetriever from sed.loader.utils import parse_h5_keys -from sed.calibrator.hextof import unravel_8s_detector_time_channel class FlashLoader(BaseLoader): @@ -593,9 +593,9 @@ def create_dataframe_per_file( with h5py.File(file_path, "r") as h5_file: self.reset_multi_index() # Reset MultiIndexes for next file df = self.concatenate_channels(h5_file) - df = df.dropna(subset=self._config['dataframe'].get('tof_column', 'dldTimeSteps')) + df = df.dropna(subset=self._config["dataframe"].get("tof_column", "dldTimeSteps")) # correct the 3 bit shift which encodes the detector ID in the 8s time - if self._config['dataframe'].get('unravel_8s_detector_time_channel', False): + if self._config["dataframe"].get("unravel_8s_detector_time_channel", False): df = unravel_8s_detector_time_channel(df, config=self._config) return df diff --git a/tests/test_dfops.py b/tests/test_dfops.py index fabb9236..e1d8bbc7 100644 --- a/tests/test_dfops.py +++ b/tests/test_dfops.py @@ -1,15 +1,15 @@ """This file contains code that performs several tests for the dfops functions """ +import dask.dataframe as ddf import numpy as np import pandas as pd -import dask.dataframe as ddf import pytest from sed.core.dfops import apply_filter from sed.core.dfops import apply_jitter from sed.core.dfops import drop_column -from sed.core.dfops import map_columns_2d from sed.core.dfops import forward_fill_lazy +from sed.core.dfops import map_columns_2d N_PTS = 100 @@ -77,62 +77,62 @@ def swap(x, y): def test_forward_fill_lazy_sparse_nans(): - """ test that a lazy forward fill works as expected with sparse nans""" + """test that a lazy forward fill works as expected with sparse nans""" t_df = df.copy() - t_df['energy'][::2] = np.nan + t_df["energy"][::2] = np.nan t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) - t_dask_df = forward_fill_lazy(t_dask_df, 'energy', before='max') + t_dask_df = forward_fill_lazy(t_dask_df, "energy", before="max") t_df = t_df.ffill() pd.testing.assert_frame_equal(t_df, t_dask_df.compute()) def test_forward_fill_lazy_full_partition_nans(): - """ test that a lazy forward fill works as expected with a full partition of nans""" + """test that a lazy forward fill works as expected with a full partition of nans""" t_df = df.copy() - t_df['energy'][5:25] = np.nan + t_df["energy"][5:25] = np.nan t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) - t_dask_df = forward_fill_lazy(t_dask_df, 'energy', before='max') + t_dask_df = forward_fill_lazy(t_dask_df, "energy", before="max") t_df = t_df.ffill() pd.testing.assert_frame_equal(t_df, t_dask_df.compute()) def test_forward_fill_lazy_consecutive_full_partition_nans(): - """ test that a lazy forward fill fails as expected on two consecutive partitions + """test that a lazy forward fill fails as expected on two consecutive partitions full of nans """ t_df = df.copy() - t_df['energy'][5:35] = np.nan + t_df["energy"][5:35] = np.nan t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) - t_dask_df = forward_fill_lazy(t_dask_df, 'energy', before='max') + t_dask_df = forward_fill_lazy(t_dask_df, "energy", before="max") t_df = t_df.ffill() assert not t_df.equals(t_dask_df.compute()) def test_forward_fill_lazy_wrong_parameters(): - """ test that a lazy forward fill fails as expected on wrong parameters""" + """test that a lazy forward fill fails as expected on wrong parameters""" t_df = df.copy() - t_df['energy'][5:35] = np.nan + t_df["energy"][5:35] = np.nan t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) with pytest.raises(TypeError): - t_dask_df = forward_fill_lazy(t_dask_df, 'energy', before='wrong parameter') + t_dask_df = forward_fill_lazy(t_dask_df, "energy", before="wrong parameter") def test_forward_fill_lazy_compute(): - """ test that a lazy forward fill works as expected with compute=True""" + """test that a lazy forward fill works as expected with compute=True""" t_df = df.copy() - t_df['energy'][5:35] = np.nan + t_df["energy"][5:35] = np.nan t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) - t_dask_df_comp = forward_fill_lazy(t_dask_df, 'energy', before='max', compute_lengths=True) - t_dask_df_nocomp = forward_fill_lazy(t_dask_df, 'energy', before='max', compute_lengths=False) + t_dask_df_comp = forward_fill_lazy(t_dask_df, "energy", before="max", compute_lengths=True) + t_dask_df_nocomp = forward_fill_lazy(t_dask_df, "energy", before="max", compute_lengths=False) pd.testing.assert_frame_equal(t_dask_df_comp.compute(), t_dask_df_nocomp.compute()) def test_forward_fill_lazy_keep_head_nans(): - """ test that a lazy forward fill works as expected with missing values at the + """test that a lazy forward fill works as expected with missing values at the beginning of the dataframe""" t_df = df.copy() - t_df['energy'][:5] = np.nan + t_df["energy"][:5] = np.nan t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) - t_df = forward_fill_lazy(t_dask_df, 'energy', before='max').compute() - assert np.all(np.isnan(t_df['energy'][:5])) - assert np.all(np.isfinite(t_df['energy'][5:])) + t_df = forward_fill_lazy(t_dask_df, "energy", before="max").compute() + assert np.all(np.isnan(t_df["energy"][:5])) + assert np.all(np.isfinite(t_df["energy"][5:])) From 98c1857b61b2c677262af6760f71feccfbf46f7b Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 12 Oct 2023 14:39:55 +0200 Subject: [PATCH 17/54] moving functions to their rightful place --- sed/calibrator/dld.py | 102 ++++++++++++ sed/calibrator/energy.py | 69 ++++++++ sed/calibrator/hextof.py | 312 ------------------------------------- sed/core/dfops.py | 7 +- sed/core/processor.py | 17 +- sed/loader/flash/loader.py | 2 +- 6 files changed, 185 insertions(+), 324 deletions(-) create mode 100644 sed/calibrator/dld.py delete mode 100644 sed/calibrator/hextof.py diff --git a/sed/calibrator/dld.py b/sed/calibrator/dld.py new file mode 100644 index 00000000..d1582778 --- /dev/null +++ b/sed/calibrator/dld.py @@ -0,0 +1,102 @@ +"""sed.calibrator.hextof module. Code for handling hextof specific transformations and +calibrations. +""" +from typing import Any +from typing import Dict +from typing import Sequence +from typing import Tuple +from typing import Union + +import dask.dataframe +import numpy as np +import pandas as pd + + +# TODO: this could be generalized and moved to dfops for splitting a channel bitwise +def unravel_8s_detector_time_channel( + df: dask.dataframe.DataFrame, + tof_column: str = None, + sector_id_column: str = None, + config: dict = None, +) -> dask.dataframe.DataFrame: + """Converts the 8s time in steps to time in steps and sectorID. + + The 8s detector encodes the dldSectorID in the 3 least significant bits of the + dldTimeSteps channel. + + Args: + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. + sector_id_column (str, optional): Name of the column containing the + sectorID. Defaults to config["dataframe"]["sector_id_column"]. + config (dict, optional): Configuration dictionary. Defaults to None. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + """ + if tof_column is None: + if config is None: + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] + if sector_id_column is None: + if config is None: + raise ValueError("Either sector_id_column or config must be given.") + sector_id_column = config["dataframe"]["sector_id_column"] + + if sector_id_column in df.columns: + raise ValueError( + f"Column {sector_id_column} already in dataframe. " "This function is not idempotent.", + ) + df[sector_id_column] = (df[tof_column] % 8).astype(np.int8) + df[tof_column] = (df[tof_column] // 8).astype(np.int32) + return df + + +def align_dld_sectors( + df: dask.dataframe.DataFrame, + sector_delays: Sequence[float] = None, + sector_id_column: str = None, + tof_column: str = None, + config: dict = None, +) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Aligns the 8s sectors to the first sector. + + Args: + sector_delays (Sequece[float], optional): Sector delays for the 8s time. + in units of step. Calibration should be done with binning along dldTimeSteps. + Defaults to config["dataframe"]["sector_delays"]. + sector_id_column (str, optional): Name of the column containing the + sectorID. Defaults to config["dataframe"]["sector_id_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. + config (dict, optional): Configuration dictionary. Defaults to None. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. + """ + if sector_delays is None: + if config is None: + raise ValueError("Either sector_delays or config must be given.") + sector_delays = config["dataframe"]["sector_delays"] + if sector_id_column is None: + if config is None: + raise ValueError("Either sector_id_column or config must be given.") + sector_id_column = config["dataframe"]["sector_id_column"] + if tof_column is None: + if config is None: + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] + # align the 8s sectors + sector_delays_arr = dask.array.from_array(sector_delays) + + def align_sector(x): + val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] + return val.astype(np.float32) + + df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) + metadata: Dict[str, Any] = { + "applied": True, + "sector_delays": sector_delays, + } + return df, metadata diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 8a01fab9..0c08c5d4 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2085,3 +2085,72 @@ def tof2evpoly( energy += energy_offset return energy + + +def tof_step_to_ns( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_ns_column: str = None, + tof_binwidth: float = None, + tof_column: str = None, + tof_binning: int = None, + config: dict = None, +) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Converts the 8s time in steps to time in ns. + + Args: + tof_binwidth (float, optional): Time step size in nanoseconds. + Defaults to config["dataframe"]["tof_binwidth"]. + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. + tof_binning (int, optional): Binning of the time-of-flight steps. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. + """ + if tof_binwidth is None: + if config is None: + raise ValueError("Either tof_binwidth or config must be given.") + tof_binwidth = config["dataframe"]["tof_binwidth"] + if tof_column is None: + if config is None: + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] + if tof_binning is None: + if config is None: + raise ValueError("Either tof_binning or config must be given.") + tof_binning = config["dataframe"]["tof_binning"] + if tof_ns_column is None: + if config is None: + raise ValueError("Either tof_ns_column or config must be given.") + tof_ns_column = config["dataframe"]["tof_ns_column"] + + df[tof_ns_column] = df.map_partitions(step2ns, meta=(tof_column, np.float64)) + metadata: Dict[str, Any] = {"applied": True, "tof_binwidth": tof_binwidth} + return df, metadata + + +def step2ns( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_column: str, + tof_binwidth: float, + tof_binning: int, + dtype: type = np.float64, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """Converts the time-of-flight steps to time-of-flight in nanoseconds. + + designed for use with dask.dataframe.DataFrame.map_partitions. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. + tof_column (str): Name of the column containing the time-of-flight steps. + tof_binwidth (float): Time step size in nanoseconds. + tof_binning (int): Binning of the time-of-flight steps. + + Returns: + Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. + """ + val = df[tof_column].astype(dtype) * tof_binwidth * 2**tof_binning + return val.astype(dtype) diff --git a/sed/calibrator/hextof.py b/sed/calibrator/hextof.py deleted file mode 100644 index 892a1f3f..00000000 --- a/sed/calibrator/hextof.py +++ /dev/null @@ -1,312 +0,0 @@ -"""sed.calibrator.hextof module. Code for handling hextof specific transformations and -calibrations. -""" -from typing import Any -from typing import Dict -from typing import Sequence -from typing import Tuple -from typing import Union - -import dask.dataframe -import numpy as np -import pandas as pd -from dask.diagnostics import ProgressBar - - -def unravel_8s_detector_time_channel( - df: dask.dataframe.DataFrame, - tof_column: str = None, - sector_id_column: str = None, - config: dict = None, -) -> dask.dataframe.DataFrame: - """Converts the 8s time in steps to time in steps and sectorID. - - The 8s detector encodes the dldSectorID in the 3 least significant bits of the - dldTimeSteps channel. - - Args: - tof_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. - sector_id_column (str, optional): Name of the column containing the - sectorID. Defaults to config["dataframe"]["sector_id_column"]. - config (dict, optional): Configuration dictionary. Defaults to None. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - """ - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - if sector_id_column is None: - if config is None: - raise ValueError("Either sector_id_column or config must be given.") - sector_id_column = config["dataframe"]["sector_id_column"] - - if sector_id_column in df.columns: - raise ValueError( - f"Column {sector_id_column} already in dataframe. " "This function is not idempotent.", - ) - df[sector_id_column] = (df[tof_column] % 8).astype(np.int8) - df[tof_column] = (df[tof_column] // 8).astype(np.int32) - return df - - -def align_dld_sectors( - df: dask.dataframe.DataFrame, - sector_delays: Sequence[float] = None, - sector_id_column: str = None, - tof_column: str = None, - config: dict = None, -) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: - """Aligns the 8s sectors to the first sector. - - Args: - sector_delays (Sequece[float], optional): Sector delays for the 8s time. - in units of step. Calibration should be done with binning along dldTimeSteps. - Defaults to config["dataframe"]["sector_delays"]. - sector_id_column (str, optional): Name of the column containing the - sectorID. Defaults to config["dataframe"]["sector_id_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. - config (dict, optional): Configuration dictionary. Defaults to None. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - dict: Metadata dictionary. - """ - if sector_delays is None: - if config is None: - raise ValueError("Either sector_delays or config must be given.") - sector_delays = config["dataframe"]["sector_delays"] - if sector_id_column is None: - if config is None: - raise ValueError("Either sector_id_column or config must be given.") - sector_id_column = config["dataframe"]["sector_id_column"] - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - # align the 8s sectors - sector_delays_arr = dask.array.from_array(sector_delays) - - def align_sector(x): - val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] - return val.astype(np.float32) - - df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) - metadata: Dict[str, Any] = { - "applied": True, - "sector_delays": sector_delays, - } - return df, metadata - - -def dld_time_to_ns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - tof_ns_column: str = None, - tof_binwidth: float = None, - tof_column: str = None, - tof_binning: int = None, - config: dict = None, -) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: - """Converts the 8s time in steps to time in ns. - - Args: - tof_binwidth (float, optional): Time step size in nanoseconds. - Defaults to config["dataframe"]["tof_binwidth"]. - tof_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. - tof_binning (int, optional): Binning of the time-of-flight steps. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - dict: Metadata dictionary. - """ - if tof_binwidth is None: - if config is None: - raise ValueError("Either tof_binwidth or config must be given.") - tof_binwidth = config["dataframe"]["tof_binwidth"] - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - if tof_binning is None: - if config is None: - raise ValueError("Either tof_binning or config must be given.") - tof_binning = config["dataframe"]["tof_binning"] - if tof_ns_column is None: - if config is None: - raise ValueError("Either tof_ns_column or config must be given.") - tof_ns_column = config["dataframe"]["tof_ns_column"] - - df[tof_ns_column] = df.map_partitions(step2ns, meta=(tof_column, np.float64)) - metadata: Dict[str, Any] = {"applied": True, "tof_binwidth": tof_binwidth} - return df, metadata - - -def rolling_average_on_acquisition_time( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - rolling_group_channel: str, - columns: str = None, - window: float = None, - sigma: float = 2, - config: dict = None, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Perform a rolling average with a gaussian weighted window. - - In order to preserve the number of points, the first and last "widnow" - number of points are substituted with the original signal. - # TODO: this is currently very slow, and could do with a remake. - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - group_channel: (str): Name of the column on which to group the data - cols (str): Name of the column on which to perform the rolling average - window (float): Size of the rolling average window - sigma (float): number of standard deviations for the gaussian weighting of the window. - a value of 2 corresponds to a gaussian with sigma equal to half the window size. - Smaller values reduce the weighting in the window frame. - - Returns: - Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new columns. - """ - if rolling_group_channel is None: - if config is None: - raise ValueError("Either group_channel or config must be given.") - rolling_group_channel = config["dataframe"]["rolling_group_channel"] - with ProgressBar(): - print(f"rolling average over {columns}...") - if isinstance(columns, str): - columns = [columns] - df_ = df.groupby(rolling_group_channel).agg({c: "mean" for c in columns}).compute() - df_["dt"] = pd.to_datetime(df_.index, unit="s") - df_["ts"] = df_.index - for c in columns: - df_[c + "_rolled"] = ( - df_[c] - .interpolate(method="nearest") - .rolling(window, center=True, win_type="gaussian") - .mean(std=window / sigma) - .fillna(df_[c]) - ) - df_ = df_.drop(c, axis=1) - if c + "_rolled" in df.columns: - df = df.drop(c + "_rolled", axis=1) - return df.merge(df_, left_on="timeStamp", right_on="ts").drop(["ts", "dt"], axis=1) - - -def shift_energy_axis( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - columns: Union[str, Sequence[str]], - signs: Union[int, Sequence[int]], - energy_column: str = None, - mode: Union[str, Sequence[str]] = "direct", - window: float = None, - sigma: float = 2, - rolling_group_channel: str = None, - config: dict = None, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Apply an energy shift to the given column(s). - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - energy_column (str): Name of the column containing the energy values. - column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. - sign (Union[int,Sequence[int]]): Sign of the shift to apply. (+1 or -1) - mode (str): The mode of the shift. One of 'direct', 'average' or rolled. - if rolled, window and sigma must be given. - config (dict): Configuration dictionary. - **kwargs: Additional arguments for the rolling average function. - """ - if energy_column is None: - if config is None: - raise ValueError("Either energy_column or config must be given.") - energy_column = config["dataframe"]["energy_column"] - - if isinstance(columns, str): - columns = [columns] - if isinstance(signs, int): - signs = [signs] - if isinstance(mode, str): - mode = [mode] * len(columns) - if len(columns) != len(signs): - raise ValueError("column_name and sign must have the same length.") - with ProgressBar( - minimum=5, - ): - if mode == "rolled": - if window is None: - if config is None: - raise ValueError("Either window or config must be given.") - window = config["dataframe"]["rolling_window"] - if sigma is None: - if config is None: - raise ValueError("Either sigma or config must be given.") - sigma = config["dataframe"]["rolling_sigma"] - if rolling_group_channel is None: - if config is None: - raise ValueError("Either rolling_group_channel or config must be given.") - rolling_group_channel = config["dataframe"].get("rolling_group_channel", None) - if rolling_group_channel is None: - raise ValueError( - "T f mode is 'rolled', rolling_group_channel must be" - "given or present in config.", - ) - print("rolling averages...") - df = rolling_average_on_acquisition_time( - df, - rolling_group_channel=rolling_group_channel, - columns=columns, - window=window, - sigma=sigma, - ) - for col, s, m in zip(columns, signs, mode): - s = s / np.abs(s) # enusre s is either +1 or -1 - if m == "rolled": - col = col + "_rolled" - if m == "direct" or m == "rolled": - df[col] = df.map_partitions( - lambda x: x[col] + s * x[energy_column], meta=(col, np.float32), - ) - elif m == "mean": - print("computing means...") - col_mean = df[col].mean() - df[col] = df.map_partitions( - lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32), - ) - else: - raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") - metadata: dict[str, Any] = { - "applied": True, - "energy_column": energy_column, - "column_name": columns, - "sign": signs, - } - return df, metadata - - -def step2ns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - tof_column: str, - tof_binwidth: float, - tof_binning: int, - dtype: type = np.float64, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Converts the time-of-flight steps to time-of-flight in nanoseconds. - - designed for use with dask.dataframe.DataFrame.map_partitions. - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. - tof_column (str): Name of the column containing the time-of-flight steps. - tof_binwidth (float): Time step size in nanoseconds. - tof_binning (int): Binning of the time-of-flight steps. - - Returns: - Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. - """ - val = df[tof_column].astype(dtype) * tof_binwidth * 2**tof_binning - return val.astype(dtype) diff --git a/sed/core/dfops.py b/sed/core/dfops.py index b3836c05..4f8fda62 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -5,7 +5,6 @@ # inspired by https://github.com/mpes-kit/mpes from typing import Any from typing import Callable -from typing import Dict from typing import Sequence from typing import Union @@ -313,13 +312,15 @@ def apply_energy_shift( col = col + "_rolled" if m == "direct" or m == "rolled": df[col] = df.map_partitions( - lambda x: x[col] + s * x[energy_column], meta=(col, np.float32), + lambda x: x[col] + s * x[energy_column], + meta=(col, np.float32), ) elif m == "mean": print("computing means...") col_mean = df[col].mean() df[col] = df.map_partitions( - lambda x: x[col] + s * (x[energy_column] - col_mean), meta=(col, np.float32), + lambda x: x[col] + s * (x[energy_column] - col_mean), + meta=(col, np.float32), ) else: raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") diff --git a/sed/core/processor.py b/sed/core/processor.py index 2e9cdf0b..ebf43498 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -19,8 +19,9 @@ from sed.binning import bin_dataframe from sed.calibrator import DelayCalibrator +from sed.calibrator import dld +from sed.calibrator import energy from sed.calibrator import EnergyCalibrator -from sed.calibrator import hextof from sed.calibrator import MomentumCorrector from sed.core.config import parse_config from sed.core.config import save_config @@ -1196,7 +1197,7 @@ def shift_energy_axis( f"Energy column {energy_column} not found in dataframe! " "Run energy calibration first", ) - self._dataframe, metadata = hextof.shift_energy_axis( + self._dataframe, metadata = energy.shift_energy_axis( df=self._dataframe, columns=columns, signs=signs, @@ -1235,7 +1236,7 @@ def add_jitter(self, cols: Sequence[str] = None): metadata.append(col) self._attributes.add(metadata, "jittering", duplicate_policy="append") - def dld_time_to_ns( + def tof_step_to_ns( self, tof_ns_column: str = None, tof_binwidth: float = None, @@ -1258,7 +1259,7 @@ def dld_time_to_ns( print("Adding energy column to dataframe:") # TODO assert order of execution through metadata - self._dataframe, metadata = hextof.dld_time_to_ns( + self._dataframe, metadata = energy.tof_step_to_ns( df=self._dataframe, tof_ns_column=tof_ns_column, tof_binwidth=tof_binwidth, @@ -1268,8 +1269,8 @@ def dld_time_to_ns( ) self._attributes.add( metadata, - "energy_calibration", - duplicate_policy="merge", + "step_to_ns", + duplicate_policy="raise", ) def align_dld_sectors( @@ -1289,7 +1290,7 @@ def align_dld_sectors( if self._dataframe is not None: print("Aligning 8s sectors of dataframe") # TODO assert order of execution through metadata - self._dataframe, metadata = hextof.align_dld_sectors( + self._dataframe, metadata = dld.align_dld_sectors( df=self._dataframe, sector_delays=sector_delays, sector_id_column=sector_id_column, @@ -1299,7 +1300,7 @@ def align_dld_sectors( self._attributes.add( metadata, "sector_alignment", - duplicate_policy="merge", + duplicate_policy="raise", ) def pre_binning( diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index c29a5d81..807201a2 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -26,7 +26,7 @@ from pandas import MultiIndex from pandas import Series -from sed.calibrator.hextof import unravel_8s_detector_time_channel +from sed.calibrator.dld import unravel_8s_detector_time_channel from sed.core import dfops from sed.loader.base.loader import BaseLoader from sed.loader.flash.metadata import MetadataRetriever From bfd3daaee0278ac1f2a9a89bd082aae5b3c4df77 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Fri, 13 Oct 2023 13:27:02 +0200 Subject: [PATCH 18/54] move more functions --- sed/calibrator/dld.py | 3 +- sed/calibrator/energy.py | 92 +++++++++++++++++++++++++++++++++++++- sed/core/dfops.py | 87 ----------------------------------- sed/loader/flash/loader.py | 4 +- 4 files changed, 94 insertions(+), 92 deletions(-) diff --git a/sed/calibrator/dld.py b/sed/calibrator/dld.py index d1582778..8a24b4e6 100644 --- a/sed/calibrator/dld.py +++ b/sed/calibrator/dld.py @@ -12,7 +12,6 @@ import pandas as pd -# TODO: this could be generalized and moved to dfops for splitting a channel bitwise def unravel_8s_detector_time_channel( df: dask.dataframe.DataFrame, tof_column: str = None, @@ -21,6 +20,8 @@ def unravel_8s_detector_time_channel( ) -> dask.dataframe.DataFrame: """Converts the 8s time in steps to time in steps and sectorID. + # TODO: this could be generalized and moved to dfops for splitting a channel bitwise + The 8s detector encodes the dldSectorID in the 3 least significant bits of the dldTimeSteps channel. diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 0c08c5d4..f037fd5d 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -25,6 +25,7 @@ import xarray as xr from bokeh.io import output_notebook from bokeh.palettes import Category10 as ColorCycle +from dask.diagnostics import ProgressBar from fastdtw import fastdtw from IPython.display import display from lmfit import Minimizer @@ -35,6 +36,7 @@ from scipy.sparse.linalg import lsqr from sed.binning import bin_dataframe +from sed.core import dfops from sed.loader.base.loader import BaseLoader @@ -2127,12 +2129,12 @@ def tof_step_to_ns( raise ValueError("Either tof_ns_column or config must be given.") tof_ns_column = config["dataframe"]["tof_ns_column"] - df[tof_ns_column] = df.map_partitions(step2ns, meta=(tof_column, np.float64)) + df[tof_ns_column] = df.map_partitions(tof2ns, meta=(tof_column, np.float64)) metadata: Dict[str, Any] = {"applied": True, "tof_binwidth": tof_binwidth} return df, metadata -def step2ns( +def tof2ns( df: Union[pd.DataFrame, dask.dataframe.DataFrame], tof_column: str, tof_binwidth: float, @@ -2154,3 +2156,89 @@ def step2ns( """ val = df[tof_column].astype(dtype) * tof_binwidth * 2**tof_binning return val.astype(dtype) + + +def apply_energy_shift( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + columns: Union[str, Sequence[str]], + signs: Union[int, Sequence[int]], + energy_column: str = None, + mode: Union[str, Sequence[str]] = "direct", + window: float = None, + sigma: float = 2, + rolling_group_channel: str = None, + config: dict = None, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """Apply an energy shift to the given column(s). + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + energy_column (str): Name of the column containing the energy values. + column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. + sign (Union[int,Sequence[int]]): Sign of the shift to apply. (+1 or -1) + mode (str): The mode of the shift. One of 'direct', 'average' or rolled. + if rolled, window and sigma must be given. + config (dict): Configuration dictionary. + **kwargs: Additional arguments for the rolling average function. + """ + if energy_column is None: + if config is None: + raise ValueError("Either energy_column or config must be given.") + energy_column = config["dataframe"]["energy_column"] + if isinstance(columns, str): + columns = [columns] + if isinstance(signs, int): + signs = [signs] + if isinstance(mode, str): + mode = [mode] * len(columns) + if len(columns) != len(signs): + raise ValueError("column_name and sign must have the same length.") + with ProgressBar( + minimum=5, + ): + if mode == "rolled": + if window is None: + if config is None: + raise ValueError("Either window or config must be given.") + window = config["dataframe"]["rolling_window"] + if sigma is None: + if config is None: + raise ValueError("Either sigma or config must be given.") + sigma = config["dataframe"]["rolling_sigma"] + if rolling_group_channel is None: + if config is None: + raise ValueError("Either rolling_group_channel or config must be given.") + rolling_group_channel = config["dataframe"]["rolling_group_channel"] + print("rolling averages...") + df = dfops.rolling_average_on_acquisition_time( + df, + rolling_group_channel=rolling_group_channel, + columns=columns, + window=window, + sigma=sigma, + ) + for col, s, m in zip(columns, signs, mode): + s = s / np.abs(s) # enusre s is either +1 or -1 + if m == "rolled": + col = col + "_rolled" + if m == "direct" or m == "rolled": + df[col] = df.map_partitions( + lambda x: x[col] + s * x[energy_column], + meta=(col, np.float32), + ) + elif m == "mean": + print("computing means...") + col_mean = df[col].mean() + df[col] = df.map_partitions( + lambda x: x[col] + s * (x[energy_column] - col_mean), + meta=(col, np.float32), + ) + else: + raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") + metadata: dict[str, Any] = { + "applied": True, + "energy_column": energy_column, + "column_name": columns, + "sign": signs, + } + return df, metadata diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 4f8fda62..227bfb16 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -3,7 +3,6 @@ """ # Note: some of the functions presented here were # inspired by https://github.com/mpes-kit/mpes -from typing import Any from typing import Callable from typing import Sequence from typing import Union @@ -245,89 +244,3 @@ def rolling_average_on_acquisition_time( if c + "_rolled" in df.columns: df = df.drop(c + "_rolled", axis=1) return df.merge(df_, left_on="timeStamp", right_on="ts").drop(["ts", "dt"], axis=1) - - -def apply_energy_shift( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - columns: Union[str, Sequence[str]], - signs: Union[int, Sequence[int]], - energy_column: str = None, - mode: Union[str, Sequence[str]] = "direct", - window: float = None, - sigma: float = 2, - rolling_group_channel: str = None, - config: dict = None, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Apply an energy shift to the given column(s). - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - energy_column (str): Name of the column containing the energy values. - column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. - sign (Union[int,Sequence[int]]): Sign of the shift to apply. (+1 or -1) - mode (str): The mode of the shift. One of 'direct', 'average' or rolled. - if rolled, window and sigma must be given. - config (dict): Configuration dictionary. - **kwargs: Additional arguments for the rolling average function. - """ - if energy_column is None: - if config is None: - raise ValueError("Either energy_column or config must be given.") - energy_column = config["dataframe"]["energy_column"] - if isinstance(columns, str): - columns = [columns] - if isinstance(signs, int): - signs = [signs] - if isinstance(mode, str): - mode = [mode] * len(columns) - if len(columns) != len(signs): - raise ValueError("column_name and sign must have the same length.") - with ProgressBar( - minimum=5, - ): - if mode == "rolled": - if window is None: - if config is None: - raise ValueError("Either window or config must be given.") - window = config["dataframe"]["rolling_window"] - if sigma is None: - if config is None: - raise ValueError("Either sigma or config must be given.") - sigma = config["dataframe"]["rolling_sigma"] - if rolling_group_channel is None: - if config is None: - raise ValueError("Either rolling_group_channel or config must be given.") - rolling_group_channel = config["dataframe"]["rolling_group_channel"] - print("rolling averages...") - df = rolling_average_on_acquisition_time( - df, - rolling_group_channel=rolling_group_channel, - columns=columns, - window=window, - sigma=sigma, - ) - for col, s, m in zip(columns, signs, mode): - s = s / np.abs(s) # enusre s is either +1 or -1 - if m == "rolled": - col = col + "_rolled" - if m == "direct" or m == "rolled": - df[col] = df.map_partitions( - lambda x: x[col] + s * x[energy_column], - meta=(col, np.float32), - ) - elif m == "mean": - print("computing means...") - col_mean = df[col].mean() - df[col] = df.map_partitions( - lambda x: x[col] + s * (x[energy_column] - col_mean), - meta=(col, np.float32), - ) - else: - raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") - metadata: dict[str, Any] = { - "applied": True, - "energy_column": energy_column, - "column_name": columns, - "sign": signs, - } - return df, metadata diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index 807201a2..10baa058 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -26,7 +26,7 @@ from pandas import MultiIndex from pandas import Series -from sed.calibrator.dld import unravel_8s_detector_time_channel +from sed.calibrator import dld from sed.core import dfops from sed.loader.base.loader import BaseLoader from sed.loader.flash.metadata import MetadataRetriever @@ -596,7 +596,7 @@ def create_dataframe_per_file( df = df.dropna(subset=self._config["dataframe"].get("tof_column", "dldTimeSteps")) # correct the 3 bit shift which encodes the detector ID in the 8s time if self._config["dataframe"].get("unravel_8s_detector_time_channel", False): - df = unravel_8s_detector_time_channel(df, config=self._config) + df = dld.unravel_8s_detector_time_channel(df, config=self._config) return df def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> Union[bool, Exception]: From ea5c5fda26a51ea1dc6a323b277097a21d3edcff Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Fri, 13 Oct 2023 14:21:28 +0200 Subject: [PATCH 19/54] fix tof_step_to_ns --- sed/calibrator/energy.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index f037fd5d..02ca7e5a 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2129,7 +2129,10 @@ def tof_step_to_ns( raise ValueError("Either tof_ns_column or config must be given.") tof_ns_column = config["dataframe"]["tof_ns_column"] - df[tof_ns_column] = df.map_partitions(tof2ns, meta=(tof_column, np.float64)) + def func(x): + return tof2ns(x, tof_column, tof_binwidth, tof_binning) + + df[tof_ns_column] = df.map_partitions(func, meta=(tof_column, np.float64)) metadata: Dict[str, Any] = {"applied": True, "tof_binwidth": tof_binwidth} return df, metadata From c79a106b36e83819d3b3c08accf2b0b5500e9b7d Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Fri, 13 Oct 2023 23:20:27 +0200 Subject: [PATCH 20/54] fix linting and typos --- sed/calibrator/energy.py | 22 ++++++++++++---------- sed/config/flash_example_config.yaml | 20 ++++++++++---------- sed/core/dfops.py | 13 ++++++++----- sed/core/processor.py | 19 ++++++++++++++++++- 4 files changed, 48 insertions(+), 26 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 02ca7e5a..aba66352 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2221,24 +2221,26 @@ def apply_energy_shift( sigma=sigma, ) for col, s, m in zip(columns, signs, mode): - s = s / np.abs(s) # enusre s is either +1 or -1 + s = s / np.abs(s) # ensure s is either +1 or -1 if m == "rolled": - col = col + "_rolled" - if m == "direct" or m == "rolled": - df[col] = df.map_partitions( - lambda x: x[col] + s * x[energy_column], - meta=(col, np.float32), + col_rolled = col + "_rolled" + else: + col_rolled = col + if m in ["direct", "rolled"]: + df[col_rolled] = df.map_partitions( + lambda x, c=col, s=s: x[energy_column] + s * x[c], + meta=(col_rolled, np.float32), ) elif m == "mean": print("computing means...") col_mean = df[col].mean() - df[col] = df.map_partitions( - lambda x: x[col] + s * (x[energy_column] - col_mean), - meta=(col, np.float32), + df[col_rolled] = df.map_partitions( + lambda x, c=col, s=s, m=col_mean: x[energy_column] + s * m, + meta=(col_rolled, np.float32), ) else: raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") - metadata: dict[str, Any] = { + metadata: Dict[str, Any] = { "applied": True, "energy_column": energy_column, "column_name": columns, diff --git a/sed/config/flash_example_config.yaml b/sed/config/flash_example_config.yaml index 4cf1d425..0719f045 100644 --- a/sed/config/flash_example_config.yaml +++ b/sed/config/flash_example_config.yaml @@ -11,10 +11,10 @@ core: paths: data_raw_dir: "tests/data/loader/flash/" data_parquet_dir: "tests/data/loader/flash/parquet" - + # These can be replaced by beamtime_id and year to automatically # find the folders on the desy cluster - + # beamtime_id: xxxxxxxx # year: 20xx @@ -24,8 +24,8 @@ dataframe: # The offset correction to the pulseId ubid_offset: 5 - # the number of iterations to fill the pulseId forward. - forward_fill_iterations: 2 + # the number of iterations to fill the pulseId forward. + forward_fill_iterations: 2 # if true, removes the 3 bits reserved for dldSectorID from the dldTimeSteps column unravel_8s_detector_time_channel: True @@ -53,7 +53,7 @@ dataframe: # time length of a base time-of-flight bin in ns tof_binwidth: 0.020576131995767355 # 0.16460905596613884 # binning parameter for time-of-flight data. 2**tof_binning bins per base bin - tof_binning: 3 # power of 2, 4 means 8 bins per step + tof_binning: 3 # power of 2, 3 means 8 bins per step # dataframe column containing sector ID. obtained from dldTimeSteps column sector_id_column: dldSectorID @@ -84,7 +84,7 @@ dataframe: # format: per_pulse/per_electron/per_train # group_name: the hdf5 group path # slice: if the group contains multidim data, where to slice - + channels: # pulse ID is a necessary channel for using the loader. pulseId: @@ -96,18 +96,18 @@ dataframe: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 1 - + dldPosY: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 0 - # This channel will actually create dldTimeSteps and dldSectorID, + # This channel will actually create dldTimeSteps and dldSectorID, # if unravel_8s_detector_time_channel is set to True dldTimeSteps: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 3 - + # The auxillary channel has a special structure where the group further contains # a multidim structure so further aliases are defined below dldAux: @@ -122,7 +122,7 @@ dataframe: cryoTemperature: 4 sampleTemperature: 5 dldTimeBinSize: 15 - + # The prefixes of the stream names for different DAQ systems for parsing filenames # (Not to be changed by user) stream_name_prefixes: diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 227bfb16..5dc61b9b 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -197,8 +197,8 @@ def forward_fill_partition(df): def rolling_average_on_acquisition_time( df: Union[pd.DataFrame, dask.dataframe.DataFrame], - rolling_group_channel: str, - columns: str = None, + rolling_group_channel: str = None, + columns: Union[str, Sequence[str]] = None, window: float = None, sigma: float = 2, config: dict = None, @@ -225,10 +225,13 @@ def rolling_average_on_acquisition_time( if config is None: raise ValueError("Either group_channel or config must be given.") rolling_group_channel = config["dataframe"]["rolling_group_channel"] + if isinstance(columns, str): + columns = [columns] + s = f"rolling average over {rolling_group_channel} on " + for c in columns: + s += f"{c}, " + print(s) with ProgressBar(): - print(f"rolling average over {columns}...") - if isinstance(columns, str): - columns = [columns] df_ = df.groupby(rolling_group_channel).agg({c: "mean" for c in columns}).compute() df_["dt"] = pd.to_datetime(df_.index, unit="s") df_["ts"] = df_.index diff --git a/sed/core/processor.py b/sed/core/processor.py index ebf43498..782336f9 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1191,13 +1191,30 @@ def shift_energy_axis( sigma: float = 2, rolling_group_channel: str = None, ) -> None: + """Shift the energy axis of the dataframe by a given amount. + + Args: + columns (Union[str, Sequence[str]]): The columns to shift. + signs (Union[int, Sequence[int]]): The sign of the shift. + mode (Union[str, Sequence[str]], optional): The mode of the shift. + Defaults to "direct". + window (float, optional): The window size for the rolling mean. + Defaults to None. + sigma (float, optional): The sigma for the rolling mean. + Defaults to 2. + rolling_group_channel (str, optional): The channel to use for the rolling + mean. Defaults to None. + + Raises: + ValueError: If the energy column is not in the dataframe. + """ energy_column = self._config["dataframe"]["energy_column"] if energy_column not in self._dataframe.columns: raise ValueError( f"Energy column {energy_column} not found in dataframe! " "Run energy calibration first", ) - self._dataframe, metadata = energy.shift_energy_axis( + self._dataframe, metadata = energy.apply_energy_shift( df=self._dataframe, columns=columns, signs=signs, From b579b8f3ba2613d8e860a524888759308fe0d368 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Mon, 16 Oct 2023 11:10:13 +0200 Subject: [PATCH 21/54] move split_sector_id to flash loader + tests --- sed/config/flash_example_config.yaml | 4 +- sed/loader/flash/loader.py | 8 +-- sed/loader/flash/utils.py | 58 ++++++++++++++++++ sed/loader/utils.py | 46 ++++++++++++++ tests/loader/test_utils.py | 92 ++++++++++++++++++++++++++++ 5 files changed, 202 insertions(+), 6 deletions(-) create mode 100644 sed/loader/flash/utils.py create mode 100644 tests/loader/test_utils.py diff --git a/sed/config/flash_example_config.yaml b/sed/config/flash_example_config.yaml index 0719f045..e321d295 100644 --- a/sed/config/flash_example_config.yaml +++ b/sed/config/flash_example_config.yaml @@ -27,8 +27,8 @@ dataframe: # the number of iterations to fill the pulseId forward. forward_fill_iterations: 2 # if true, removes the 3 bits reserved for dldSectorID from the dldTimeSteps column - unravel_8s_detector_time_channel: True - + split_sector_id_from_dld_time: True + sector_id_reserved_bits: 3 # dataframe column containing x coordinates x_column: dldPosX # dataframe column containing corrected x coordinates diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index 10baa058..6e57d8e2 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -26,10 +26,10 @@ from pandas import MultiIndex from pandas import Series -from sed.calibrator import dld from sed.core import dfops from sed.loader.base.loader import BaseLoader from sed.loader.flash.metadata import MetadataRetriever +from sed.loader.flash.utils import split_dld_time_from_sector_id from sed.loader.utils import parse_h5_keys @@ -595,8 +595,8 @@ def create_dataframe_per_file( df = self.concatenate_channels(h5_file) df = df.dropna(subset=self._config["dataframe"].get("tof_column", "dldTimeSteps")) # correct the 3 bit shift which encodes the detector ID in the 8s time - if self._config["dataframe"].get("unravel_8s_detector_time_channel", False): - df = dld.unravel_8s_detector_time_channel(df, config=self._config) + if self._config["dataframe"].get("split_sector_id_from_dld_time", False): + df = split_dld_time_from_sector_id(df, config=self._config) return df def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> Union[bool, Exception]: @@ -623,7 +623,7 @@ def create_buffer_file(self, h5_path: Path, parquet_path: Path) -> Union[bool, E except Exception as exc: # pylint: disable=broad-except self.failed_files_error.append(f"{parquet_path}: {type(exc)} {exc}") return exc - return False + return None def buffer_file_handler(self, data_parquet_dir: Path, detector: str): """ diff --git a/sed/loader/flash/utils.py b/sed/loader/flash/utils.py new file mode 100644 index 00000000..7341e893 --- /dev/null +++ b/sed/loader/flash/utils.py @@ -0,0 +1,58 @@ +from typing import Union + +import dask.dataframe +import pandas as pd + +from ..utils import split_channel_bitwise + + +def split_dld_time_from_sector_id( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_column: str = None, + sector_id_column: str = None, + sector_id_reserved_bits: int = None, + config: dict = None, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """Converts the 8s time in steps to time in steps and sectorID. + + The 8s detector encodes the dldSectorID in the 3 least significant bits of the + dldTimeSteps channel. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. + sector_id_column (str, optional): Name of the column containing the + sectorID. Defaults to config["dataframe"]["sector_id_column"]. + sector_id_reserved_bits (int, optional): Number of bits reserved for the + config (dict, optional): Configuration dictionary. Defaults to None. + + Returns: + Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new columns. + """ + if tof_column is None: + if config is None: + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] + if sector_id_column is None: + if config is None: + raise ValueError("Either sector_id_column or config must be given.") + sector_id_column = config["dataframe"]["sector_id_column"] + if sector_id_reserved_bits is None: + if config is None: + raise ValueError("Either sector_id_reserved_bits or config must be given.") + sector_id_reserved_bits = config["dataframe"].get("sector_id_reserved_bits", None) + if sector_id_reserved_bits is None: + raise ValueError('No value for "sector_id_reserved_bits" found in config.') + + if sector_id_column in df.columns: + raise ValueError( + f"Column {sector_id_column} already in dataframe. This function is not idempotent.", + ) + df = split_channel_bitwise( + df=df, + input_column=tof_column, + output_columns=[sector_id_column, tof_column], + bit_mask=sector_id_reserved_bits, + ) + return df diff --git a/sed/loader/utils.py b/sed/loader/utils.py index 6048891a..71708bfa 100644 --- a/sed/loader/utils.py +++ b/sed/loader/utils.py @@ -3,7 +3,10 @@ from glob import glob from typing import cast from typing import List +from typing import Sequence +import dask.dataframe +import numpy as np from h5py import File from h5py import Group from natsort import natsorted @@ -89,3 +92,46 @@ def parse_h5_keys(h5_file: File, prefix: str = "") -> List[str]: # Return the list of channels return file_channel_list + + +def split_channel_bitwise( + df: dask.dataframe.DataFrame, + input_column: str, + output_columns: Sequence[str], + bit_mask: int, + types: Sequence[type] = None, +) -> dask.dataframe.DataFrame: + """Splits a channel into two channels bitwise. + + This function splits a channel into two channels by separating the first n bits from + the remaining bits. The first n bits are stored in the first output column, the + remaining bits are stored in the second output column. + + Args: + df (dask.dataframe.DataFrame): Dataframe to use. + input_column (str): Name of the column to split. + output_columns (Sequence[str]): Names of the columns to create. + bit_mask (int): Bit mask to use for splitting. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + """ + if len(output_columns) != 2: + raise ValueError("Exactly two output columns must be given.") + if input_column not in df.columns: + raise KeyError(f"Column {input_column} not in dataframe.") + if output_columns[0] in df.columns: + raise KeyError(f"Column {output_columns[0]} already in dataframe.") + if output_columns[1] in df.columns: + raise KeyError(f"Column {output_columns[1]} already in dataframe.") + if bit_mask < 0 or not isinstance(bit_mask, int): + raise ValueError("bit_mask must be a positive. integer") + if types is None: + types = [np.int8 if bit_mask < 8 else np.int16, np.int32] + elif len(types) != 2: + raise ValueError("Exactly two types must be given.") + elif not all(isinstance(t, type) for t in types): + raise ValueError("types must be a sequence of types.") + df[output_columns[0]] = (df[input_column] % 2**bit_mask).astype(types[0]) + df[output_columns[1]] = (df[input_column] // 2**bit_mask).astype(types[1]) + return df diff --git a/tests/loader/test_utils.py b/tests/loader/test_utils.py new file mode 100644 index 00000000..7250a2ca --- /dev/null +++ b/tests/loader/test_utils.py @@ -0,0 +1,92 @@ +import dask.dataframe as dd +import numpy as np +import pandas as pd +import pytest + +from sed.loader.utils import split_channel_bitwise + +test_df = pd.DataFrame( + { + "a": [0, 1, 2, 3, 4, 5, 6, 7], + }, +) + + +@pytest.fixture +def input_df(): + return pd.DataFrame( + { + "input_column": [0, 1, 2, 3, 4, 5, 6, 7], + }, + ) + + +def test_split_channel_bitwise(input_df): + output_columns = ["output1", "output2"] + bit_mask = 2 + expected_output = pd.DataFrame( + { + "input_column": [0, 1, 2, 3, 4, 5, 6, 7], + "output1": np.array([0, 1, 2, 3, 0, 1, 2, 3], dtype=np.int8), + "output2": np.array([0, 0, 0, 0, 1, 1, 1, 1], dtype=np.int32), + }, + ) + df = dd.from_pandas(input_df, npartitions=2) + result = split_channel_bitwise(df, "input_column", output_columns, bit_mask) + pd.testing.assert_frame_equal(result.compute(), expected_output) + + +def test_split_channel_bitwise_raises(): + pytest.raises( + KeyError, + split_channel_bitwise, + test_df, + "wrong", + ["b", "c"], + 3, + [np.int8, np.int16], + ) + pytest.raises( + ValueError, + split_channel_bitwise, + test_df, + "a", + ["b", "c", "wrong"], + 3, + [np.int8, np.int16], + ) + pytest.raises( + ValueError, + split_channel_bitwise, + test_df, + "a", + ["b", "c"], + -1, + [np.int8, np.int16], + ) + pytest.raises( + ValueError, + split_channel_bitwise, + test_df, + "a", + ["b", "c"], + 3, + [np.int8, np.int16, np.int32], + ) + pytest.raises(ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, [np.int8]) + pytest.raises( + ValueError, + split_channel_bitwise, + test_df, + "a", + ["b", "c"], + 3, + ["wrong", np.int16], + ) + other_df = pd.DataFrame( + { + "a": [0, 1, 2, 3, 4, 5, 6, 7], + "b": [0, 1, 2, 3, 4, 5, 6, 7], + }, + ) + pytest.raises(KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, None) From abd3de76019a14daed0ab3d298158d5283c7f4a4 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Mon, 16 Oct 2023 11:11:49 +0200 Subject: [PATCH 22/54] apply suggestions and move sector_alignment --- sed/calibrator/dld.py | 103 --------------------------------------- sed/calibrator/energy.py | 83 ++++++++++++++++++++++++++----- sed/core/dfops.py | 8 ++- sed/core/processor.py | 8 ++- 4 files changed, 85 insertions(+), 117 deletions(-) delete mode 100644 sed/calibrator/dld.py diff --git a/sed/calibrator/dld.py b/sed/calibrator/dld.py deleted file mode 100644 index 8a24b4e6..00000000 --- a/sed/calibrator/dld.py +++ /dev/null @@ -1,103 +0,0 @@ -"""sed.calibrator.hextof module. Code for handling hextof specific transformations and -calibrations. -""" -from typing import Any -from typing import Dict -from typing import Sequence -from typing import Tuple -from typing import Union - -import dask.dataframe -import numpy as np -import pandas as pd - - -def unravel_8s_detector_time_channel( - df: dask.dataframe.DataFrame, - tof_column: str = None, - sector_id_column: str = None, - config: dict = None, -) -> dask.dataframe.DataFrame: - """Converts the 8s time in steps to time in steps and sectorID. - - # TODO: this could be generalized and moved to dfops for splitting a channel bitwise - - The 8s detector encodes the dldSectorID in the 3 least significant bits of the - dldTimeSteps channel. - - Args: - tof_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. - sector_id_column (str, optional): Name of the column containing the - sectorID. Defaults to config["dataframe"]["sector_id_column"]. - config (dict, optional): Configuration dictionary. Defaults to None. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - """ - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - if sector_id_column is None: - if config is None: - raise ValueError("Either sector_id_column or config must be given.") - sector_id_column = config["dataframe"]["sector_id_column"] - - if sector_id_column in df.columns: - raise ValueError( - f"Column {sector_id_column} already in dataframe. " "This function is not idempotent.", - ) - df[sector_id_column] = (df[tof_column] % 8).astype(np.int8) - df[tof_column] = (df[tof_column] // 8).astype(np.int32) - return df - - -def align_dld_sectors( - df: dask.dataframe.DataFrame, - sector_delays: Sequence[float] = None, - sector_id_column: str = None, - tof_column: str = None, - config: dict = None, -) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: - """Aligns the 8s sectors to the first sector. - - Args: - sector_delays (Sequece[float], optional): Sector delays for the 8s time. - in units of step. Calibration should be done with binning along dldTimeSteps. - Defaults to config["dataframe"]["sector_delays"]. - sector_id_column (str, optional): Name of the column containing the - sectorID. Defaults to config["dataframe"]["sector_id_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. - config (dict, optional): Configuration dictionary. Defaults to None. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - dict: Metadata dictionary. - """ - if sector_delays is None: - if config is None: - raise ValueError("Either sector_delays or config must be given.") - sector_delays = config["dataframe"]["sector_delays"] - if sector_id_column is None: - if config is None: - raise ValueError("Either sector_id_column or config must be given.") - sector_id_column = config["dataframe"]["sector_id_column"] - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - # align the 8s sectors - sector_delays_arr = dask.array.from_array(sector_delays) - - def align_sector(x): - val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] - return val.astype(np.float32) - - df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) - metadata: Dict[str, Any] = { - "applied": True, - "sector_delays": sector_delays, - } - return df, metadata diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index aba66352..2b777554 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2097,15 +2097,16 @@ def tof_step_to_ns( tof_binning: int = None, config: dict = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: - """Converts the 8s time in steps to time in ns. + """Converts the time-of-flight time from steps to time in ns. Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. + tof_ns_column (str, optional): Name of the column to store the + time-of-flight in nanoseconds. Defaults to config["dataframe"]["tof_ns_column"]. tof_binwidth (float, optional): Time step size in nanoseconds. Defaults to config["dataframe"]["tof_binwidth"]. tof_column (str, optional): Name of the column containing the time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. tof_binning (int, optional): Binning of the time-of-flight steps. Returns: @@ -2127,29 +2128,34 @@ def tof_step_to_ns( if tof_ns_column is None: if config is None: raise ValueError("Either tof_ns_column or config must be given.") - tof_ns_column = config["dataframe"]["tof_ns_column"] + tof_ns_column = config["dataframe"].get("tof_ns_column", None) + if tof_ns_column is None: + raise ValueError("No value for tof_ns_column present in config.") def func(x): - return tof2ns(x, tof_column, tof_binwidth, tof_binning) + return tof2ns(x[tof_column], tof_binwidth, tof_binning) df[tof_ns_column] = df.map_partitions(func, meta=(tof_column, np.float64)) - metadata: Dict[str, Any] = {"applied": True, "tof_binwidth": tof_binwidth} + metadata: Dict[str, Any] = { + "applied": True, + "tof_binwidth": tof_binwidth, + "tof_binning": tof_binning, + } return df, metadata def tof2ns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - tof_column: str, + x: Union[List[float], np.ndarray], tof_binwidth: float, tof_binning: int, dtype: type = np.float64, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: +) -> Union[List[float], np.ndarray]: """Converts the time-of-flight steps to time-of-flight in nanoseconds. designed for use with dask.dataframe.DataFrame.map_partitions. Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. + x (Union[List[float], np.ndarray]): Time-of-flight steps. tof_column (str): Name of the column containing the time-of-flight steps. tof_binwidth (float): Time step size in nanoseconds. tof_binning (int): Binning of the time-of-flight steps. @@ -2157,7 +2163,7 @@ def tof2ns( Returns: Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. """ - val = df[tof_column].astype(dtype) * tof_binwidth * 2**tof_binning + val = x.astype(dtype) * tof_binwidth * 2**tof_binning return val.astype(dtype) @@ -2247,3 +2253,58 @@ def apply_energy_shift( "sign": signs, } return df, metadata + + +def align_dld_sectors( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + sector_delays: Sequence[float] = None, + sector_id_column: str = None, + tof_column: str = None, + config: dict = None, +) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Aligns the time-of-flight axis of the different sections of a detector. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + sector_delays (Sequece[float], optional): Sector delays for the 8s time. + in units of step. Calibration should be done with binning along dldTimeSteps. + Defaults to config["dataframe"]["sector_delays"]. + sector_id_column (str, optional): Name of the column containing the + sectorID. Defaults to config["dataframe"]["sector_id_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. + config (dict, optional): Configuration dictionary. Defaults to None. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. + """ + if sector_delays is None: + if config is None: + raise ValueError("Either sector_delays or config must be given.") + sector_delays = config["dataframe"].get("sector_delays", None) + if sector_delays is None: + raise ValueError("No value for sector_delays found in config.") + if sector_id_column is None: + if config is None: + raise ValueError("Either sector_id_column or config must be given.") + sector_id_column = config["dataframe"].get("sector_id_column", None) + if sector_id_column is None: + raise ValueError("No value for sector_id_column found in config.") + if tof_column is None: + if config is None: + raise ValueError("Either tof_column or config must be given.") + tof_column = config["dataframe"]["tof_column"] + # align the 8s sectors + sector_delays_arr = dask.array.from_array(sector_delays) + + def align_sector(x): + val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] + return val.astype(np.float32) + + df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) + metadata: Dict[str, Any] = { + "applied": True, + "sector_delays": sector_delays, + } + return df, metadata diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 5dc61b9b..008f5c32 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -205,7 +205,13 @@ def rolling_average_on_acquisition_time( ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: """Perform a rolling average with a gaussian weighted window. - In order to preserve the number of points, the first and last "widnow" + The rolling average is performed on the acquisition time instead of the index. + This can be a time-stamp or similar, such as the trainID at FLASH. + This is necessary first when considering the recorded electrons do not come at a regular time + interval, but even more importantly when loading multiple datasets with gaps in the acquisition. + + + In order to preserve the number of points, the first and last "window" number of points are substituted with the original signal. # TODO: this is currently very slow, and could do with a remake. diff --git a/sed/core/processor.py b/sed/core/processor.py index 782336f9..bf8a7709 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1273,7 +1273,7 @@ def tof_step_to_ns( """ if self._dataframe is not None: - print("Adding energy column to dataframe:") + print("Adding time-of-flight column in nanoseconds to dataframe:") # TODO assert order of execution through metadata self._dataframe, metadata = energy.tof_step_to_ns( @@ -1287,7 +1287,7 @@ def tof_step_to_ns( self._attributes.add( metadata, "step_to_ns", - duplicate_policy="raise", + duplicate_policy="append", ) def align_dld_sectors( @@ -1303,6 +1303,10 @@ def align_dld_sectors( Args: sector_delays (Sequence[float], optional): Delays of the 8s sectors in picoseconds. Defaults to config["dataframe"]["sector_delays"]. + sector_id_column (str, optional): Name of the column containing the + sector id. Defaults to config["dataframe"]["sector_id_column"]. + tof_column (str, optional): Name of the column containing the + time-of-flight. Defaults to config["dataframe"]["tof_column"]. """ if self._dataframe is not None: print("Aligning 8s sectors of dataframe") From 8c75446aaed09e2d0b05c8e1b487d9279303153e Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 18 Oct 2023 11:16:19 +0200 Subject: [PATCH 23/54] minor fixes and tests --- sed/calibrator/energy.py | 54 +++++---- sed/core/processor.py | 218 ++++++++++++++++++++----------------- sed/loader/flash/utils.py | 3 + sed/loader/utils.py | 8 +- tests/loader/test_utils.py | 7 +- 5 files changed, 162 insertions(+), 128 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 2b777554..c7c8a193 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2167,7 +2167,7 @@ def tof2ns( return val.astype(dtype) -def apply_energy_shift( +def apply_energy_offset( df: Union[pd.DataFrame, dask.dataframe.DataFrame], columns: Union[str, Sequence[str]], signs: Union[int, Sequence[int]], @@ -2180,6 +2180,8 @@ def apply_energy_shift( ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: """Apply an energy shift to the given column(s). + # TODO: This funcion can still be improved and needs testsing + Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. energy_column (str): Name of the column containing the energy values. @@ -2198,8 +2200,8 @@ def apply_energy_shift( columns = [columns] if isinstance(signs, int): signs = [signs] - if isinstance(mode, str): - mode = [mode] * len(columns) + # if isinstance(mode, str): + # mode = [mode] * len(columns) if len(columns) != len(signs): raise ValueError("column_name and sign must have the same length.") with ProgressBar( @@ -2226,30 +2228,34 @@ def apply_energy_shift( window=window, sigma=sigma, ) - for col, s, m in zip(columns, signs, mode): - s = s / np.abs(s) # ensure s is either +1 or -1 - if m == "rolled": - col_rolled = col + "_rolled" - else: - col_rolled = col - if m in ["direct", "rolled"]: - df[col_rolled] = df.map_partitions( - lambda x, c=col, s=s: x[energy_column] + s * x[c], - meta=(col_rolled, np.float32), - ) - elif m == "mean": - print("computing means...") - col_mean = df[col].mean() - df[col_rolled] = df.map_partitions( - lambda x, c=col, s=s, m=col_mean: x[energy_column] + s * m, - meta=(col_rolled, np.float32), - ) - else: - raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {m}.") + + if mode in ["rolled", "direct"]: + + def apply_shift(x, cols, signs): + shifts = [x[c] * s for c, s in zip(cols, signs)] + shift = None + for s in shifts: + shift = shift + s if shift is not None else s + return x[energy_column] + shift + + use_cols = columns if mode == "direct" else [c + "_rolled" for c in columns] + df[energy_column] = df.map_partitions( + apply_shift, + cols=use_cols, + signs=signs, + meta=(energy_column, np.float32), + ) + elif mode == "mean": + with ProgressBar(): + print("Computing means...") + means = dask.compute([df[c].mean() for c in columns]) + df[energy_column] = df[energy_column] + signs * means + else: + raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {mode}.") metadata: Dict[str, Any] = { "applied": True, "energy_column": energy_column, - "column_name": columns, + "column_names": columns, "sign": signs, } return df, metadata diff --git a/sed/core/processor.py b/sed/core/processor.py index bf8a7709..45f4a801 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -19,7 +19,6 @@ from sed.binning import bin_dataframe from sed.calibrator import DelayCalibrator -from sed.calibrator import dld from sed.calibrator import energy from sed.calibrator import EnergyCalibrator from sed.calibrator import MomentumCorrector @@ -1126,74 +1125,20 @@ def append_energy_axis( else: print(self._dataframe) - # Delay calibration function - def calibrate_delay_axis( + def apply_energy_offset( self, - delay_range: Tuple[float, float] = None, - datafile: str = None, - preview: bool = False, - **kwds, - ): - """Append delay column to dataframe. Either provide delay ranges, or read - them from a file. - - Args: - delay_range (Tuple[float, float], optional): The scanned delay range in - picoseconds. Defaults to None. - datafile (str, optional): The file from which to read the delay ranges. - Defaults to None. - preview (bool): Option to preview the first elements of the data frame. - **kwds: Keyword args passed to ``DelayCalibrator.append_delay_axis``. - """ - if self._dataframe is not None: - print("Adding delay column to dataframe:") - - if delay_range is not None: - self._dataframe, metadata = self.dc.append_delay_axis( - self._dataframe, - delay_range=delay_range, - **kwds, - ) - else: - if datafile is None: - try: - datafile = self._files[0] - except IndexError: - print( - "No datafile available, specify eihter", - " 'datafile' or 'delay_range'", - ) - raise - - self._dataframe, metadata = self.dc.append_delay_axis( - self._dataframe, - datafile=datafile, - **kwds, - ) - - # Add Metadata - self._attributes.add( - metadata, - "delay_calibration", - duplicate_policy="merge", - ) - if preview: - print(self._dataframe.head(10)) - else: - print(self._dataframe) - - def shift_energy_axis( - self, - columns: Union[str, Sequence[str]], - signs: Union[int, Sequence[int]], + constant: float = None, + columns: Union[str, Sequence[str]] = None, + signs: Union[int, Sequence[int]] = None, mode: Union[str, Sequence[str]] = "direct", window: float = None, - sigma: float = 2, + sigma: float = None, rolling_group_channel: str = None, ) -> None: """Shift the energy axis of the dataframe by a given amount. Args: + constant (float, optional): The constant to shift the energy axis by. columns (Union[str, Sequence[str]]): The columns to shift. signs (Union[int, Sequence[int]]): The sign of the shift. mode (Union[str, Sequence[str]], optional): The mode of the shift. @@ -1208,13 +1153,32 @@ def shift_energy_axis( Raises: ValueError: If the energy column is not in the dataframe. """ + if columns is None and constant is None: + offset_dict = self._config["energy"].get("offset", None) + if offset_dict is None: + raise ValueError( + "No offset parameters provided and no offset found in config file!", + ) + constant = offset_dict["constant"] + columns = [] + signs = [] + modes = [] + windows = [] + sigmas = [] + for k, v in offset_dict: + columns.append(k) + signs.append(v["sign"]) + modes.append(v["mode"]) + windows.append(v.get("window", None)) + sigmas.append(v.get("sigma", None)) + energy_column = self._config["dataframe"]["energy_column"] if energy_column not in self._dataframe.columns: raise ValueError( f"Energy column {energy_column} not found in dataframe! " "Run energy calibration first", ) - self._dataframe, metadata = energy.apply_energy_shift( + self._dataframe, metadata = energy.apply_energy_offset( df=self._dataframe, columns=columns, signs=signs, @@ -1224,52 +1188,27 @@ def shift_energy_axis( rolling_group_channel=rolling_group_channel, config=self._config, ) + self._dataframe[energy_column] += constant + metadata["offset"] = constant self._attributes.add( metadata, - "shift_energy_axis", - duplicate_policy="raise", + "apply_energy_offset", + # TODO: allow only appending when no offset along this column(s) was applied + duplicate_policy="append", ) - def add_jitter(self, cols: Sequence[str] = None): - """Add jitter to the selected dataframe columns. - - Args: - cols (Sequence[str], optional): The colums onto which to apply jitter. - Defaults to config["dataframe"]["jitter_cols"]. - """ - if cols is None: - cols = self._config["dataframe"].get( - "jitter_cols", - self._dataframe.columns, - ) # jitter all columns - - self._dataframe = self._dataframe.map_partitions( - apply_jitter, - cols=cols, - cols_jittered=cols, - ) - metadata = [] - for col in cols: - metadata.append(col) - self._attributes.add(metadata, "jittering", duplicate_policy="append") - def tof_step_to_ns( self, tof_ns_column: str = None, - tof_binwidth: float = None, - tof_column: str = None, - tof_binning: int = None, + **kwargs, ): """Convert time-of-flight channel steps to nanoseconds. Args: - tof_binwidth (float, optional): Time step size in nanoseconds. - Defaults to config["dataframe"]["tof_binwidth"]. - tof_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. - tof_binning (int, optional): Binning of the time-of-flight steps. + tof_ns_column (str, optional): Name of the generated column containing the + time-of-flight in nanosecond. + Defaults to config["dataframe"]["tof_ns_column"]. + kwargs: additional arguments are passed to ``energy.tof_step_to_ns``. """ if self._dataframe is not None: @@ -1279,10 +1218,8 @@ def tof_step_to_ns( self._dataframe, metadata = energy.tof_step_to_ns( df=self._dataframe, tof_ns_column=tof_ns_column, - tof_binwidth=tof_binwidth, - tof_column=tof_column, - tof_binning=tof_binning, config=self._config, + **kwargs, ) self._attributes.add( metadata, @@ -1311,7 +1248,7 @@ def align_dld_sectors( if self._dataframe is not None: print("Aligning 8s sectors of dataframe") # TODO assert order of execution through metadata - self._dataframe, metadata = dld.align_dld_sectors( + self._dataframe, metadata = energy.align_dld_sectors( df=self._dataframe, sector_delays=sector_delays, sector_id_column=sector_id_column, @@ -1324,6 +1261,85 @@ def align_dld_sectors( duplicate_policy="raise", ) + # Delay calibration function + def calibrate_delay_axis( + self, + delay_range: Tuple[float, float] = None, + datafile: str = None, + preview: bool = False, + **kwds, + ): + """Append delay column to dataframe. Either provide delay ranges, or read + them from a file. + + Args: + delay_range (Tuple[float, float], optional): The scanned delay range in + picoseconds. Defaults to None. + datafile (str, optional): The file from which to read the delay ranges. + Defaults to None. + preview (bool): Option to preview the first elements of the data frame. + **kwds: Keyword args passed to ``DelayCalibrator.append_delay_axis``. + """ + if self._dataframe is not None: + print("Adding delay column to dataframe:") + + if delay_range is not None: + self._dataframe, metadata = self.dc.append_delay_axis( + self._dataframe, + delay_range=delay_range, + **kwds, + ) + else: + if datafile is None: + try: + datafile = self._files[0] + except IndexError: + print( + "No datafile available, specify eihter", + " 'datafile' or 'delay_range'", + ) + raise + + self._dataframe, metadata = self.dc.append_delay_axis( + self._dataframe, + datafile=datafile, + **kwds, + ) + + # Add Metadata + self._attributes.add( + metadata, + "delay_calibration", + duplicate_policy="merge", + ) + if preview: + print(self._dataframe.head(10)) + else: + print(self._dataframe) + + def add_jitter(self, cols: Sequence[str] = None): + """Add jitter to the selected dataframe columns. + + Args: + cols (Sequence[str], optional): The colums onto which to apply jitter. + Defaults to config["dataframe"]["jitter_cols"]. + """ + if cols is None: + cols = self._config["dataframe"].get( + "jitter_cols", + self._dataframe.columns, + ) # jitter all columns + + self._dataframe = self._dataframe.map_partitions( + apply_jitter, + cols=cols, + cols_jittered=cols, + ) + metadata = [] + for col in cols: + metadata.append(col) + self._attributes.add(metadata, "jittering", duplicate_policy="append") + def pre_binning( self, df_partitions: int = 100, diff --git a/sed/loader/flash/utils.py b/sed/loader/flash/utils.py index 7341e893..15cf9f74 100644 --- a/sed/loader/flash/utils.py +++ b/sed/loader/flash/utils.py @@ -1,6 +1,7 @@ from typing import Union import dask.dataframe +import numpy as np import pandas as pd from ..utils import split_channel_bitwise @@ -54,5 +55,7 @@ def split_dld_time_from_sector_id( input_column=tof_column, output_columns=[sector_id_column, tof_column], bit_mask=sector_id_reserved_bits, + overwrite=True, + types=[np.int8, np.int32], ) return df diff --git a/sed/loader/utils.py b/sed/loader/utils.py index 71708bfa..9a1579af 100644 --- a/sed/loader/utils.py +++ b/sed/loader/utils.py @@ -99,6 +99,7 @@ def split_channel_bitwise( input_column: str, output_columns: Sequence[str], bit_mask: int, + overwrite: bool = False, types: Sequence[type] = None, ) -> dask.dataframe.DataFrame: """Splits a channel into two channels bitwise. @@ -112,6 +113,9 @@ def split_channel_bitwise( input_column (str): Name of the column to split. output_columns (Sequence[str]): Names of the columns to create. bit_mask (int): Bit mask to use for splitting. + overwrite (bool, optional): Whether to overwrite existing columns. + Defaults to False. + types (Sequence[type], optional): Types of the new columns. Returns: dask.dataframe.DataFrame: Dataframe with the new columns. @@ -120,9 +124,9 @@ def split_channel_bitwise( raise ValueError("Exactly two output columns must be given.") if input_column not in df.columns: raise KeyError(f"Column {input_column} not in dataframe.") - if output_columns[0] in df.columns: + if output_columns[0] in df.columns and not overwrite: raise KeyError(f"Column {output_columns[0]} already in dataframe.") - if output_columns[1] in df.columns: + if output_columns[1] in df.columns and not overwrite: raise KeyError(f"Column {output_columns[1]} already in dataframe.") if bit_mask < 0 or not isinstance(bit_mask, int): raise ValueError("bit_mask must be a positive. integer") diff --git a/tests/loader/test_utils.py b/tests/loader/test_utils.py index 7250a2ca..af79ed3f 100644 --- a/tests/loader/test_utils.py +++ b/tests/loader/test_utils.py @@ -44,6 +44,7 @@ def test_split_channel_bitwise_raises(): "wrong", ["b", "c"], 3, + False, [np.int8, np.int16], ) pytest.raises( @@ -53,6 +54,7 @@ def test_split_channel_bitwise_raises(): "a", ["b", "c", "wrong"], 3, + False, [np.int8, np.int16], ) pytest.raises( @@ -62,6 +64,7 @@ def test_split_channel_bitwise_raises(): "a", ["b", "c"], -1, + False, [np.int8, np.int16], ) pytest.raises( @@ -71,6 +74,7 @@ def test_split_channel_bitwise_raises(): "a", ["b", "c"], 3, + False, [np.int8, np.int16, np.int32], ) pytest.raises(ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, [np.int8]) @@ -81,6 +85,7 @@ def test_split_channel_bitwise_raises(): "a", ["b", "c"], 3, + False, ["wrong", np.int16], ) other_df = pd.DataFrame( @@ -89,4 +94,4 @@ def test_split_channel_bitwise_raises(): "b": [0, 1, 2, 3, 4, 5, 6, 7], }, ) - pytest.raises(KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, None) + pytest.raises(KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, False, None) From 0afe469ef2a7f160d6762b6e900f792936c54965 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 18 Oct 2023 13:00:18 +0200 Subject: [PATCH 24/54] add smooth functions --- sed/calibrator/energy.py | 95 ++++------- sed/core/dfops.py | 43 +++++ sed/core/processor.py | 39 +++++ tutorial/5 - hextof workflow.ipynb | 248 +++++++++++++++++++++++++++++ 4 files changed, 364 insertions(+), 61 deletions(-) create mode 100644 tutorial/5 - hextof workflow.ipynb diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index c7c8a193..1aff5b6e 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -25,7 +25,6 @@ import xarray as xr from bokeh.io import output_notebook from bokeh.palettes import Category10 as ColorCycle -from dask.diagnostics import ProgressBar from fastdtw import fastdtw from IPython.display import display from lmfit import Minimizer @@ -2172,10 +2171,7 @@ def apply_energy_offset( columns: Union[str, Sequence[str]], signs: Union[int, Sequence[int]], energy_column: str = None, - mode: Union[str, Sequence[str]] = "direct", - window: float = None, - sigma: float = 2, - rolling_group_channel: str = None, + reductions: Union[str, Sequence[str]] = None, config: dict = None, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: """Apply an energy shift to the given column(s). @@ -2184,12 +2180,15 @@ def apply_energy_offset( Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - energy_column (str): Name of the column containing the energy values. - column_name (Union[str,Sequence[str]]): Name of the column(s) to apply the shift to. - sign (Union[int,Sequence[int]]): Sign of the shift to apply. (+1 or -1) - mode (str): The mode of the shift. One of 'direct', 'average' or rolled. - if rolled, window and sigma must be given. - config (dict): Configuration dictionary. + columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift to. + signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) + energy_column (str, optional): Name of the column containing the energy values. + reduce (str): The reduction to apply to the column. If "rolled" it searches for columns with + suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the + ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method of + dask.dataframe.Series. For example "mean". In this case the function is applied to the + column to generate a single value for the whole dataset. If None, the shift is applied + per-dataframe-row. Defaults to None. **kwargs: Additional arguments for the rolling average function. """ if energy_column is None: @@ -2200,58 +2199,32 @@ def apply_energy_offset( columns = [columns] if isinstance(signs, int): signs = [signs] - # if isinstance(mode, str): - # mode = [mode] * len(columns) - if len(columns) != len(signs): - raise ValueError("column_name and sign must have the same length.") - with ProgressBar( - minimum=5, - ): - if mode == "rolled": - if window is None: - if config is None: - raise ValueError("Either window or config must be given.") - window = config["dataframe"]["rolling_window"] - if sigma is None: - if config is None: - raise ValueError("Either sigma or config must be given.") - sigma = config["dataframe"]["rolling_sigma"] - if rolling_group_channel is None: - if config is None: - raise ValueError("Either rolling_group_channel or config must be given.") - rolling_group_channel = config["dataframe"]["rolling_group_channel"] - print("rolling averages...") - df = dfops.rolling_average_on_acquisition_time( - df, - rolling_group_channel=rolling_group_channel, - columns=columns, - window=window, - sigma=sigma, - ) - if mode in ["rolled", "direct"]: - - def apply_shift(x, cols, signs): - shifts = [x[c] * s for c, s in zip(cols, signs)] - shift = None - for s in shifts: - shift = shift + s if shift is not None else s - return x[energy_column] + shift - - use_cols = columns if mode == "direct" else [c + "_rolled" for c in columns] - df[energy_column] = df.map_partitions( - apply_shift, - cols=use_cols, - signs=signs, - meta=(energy_column, np.float32), - ) - elif mode == "mean": - with ProgressBar(): - print("Computing means...") - means = dask.compute([df[c].mean() for c in columns]) - df[energy_column] = df[energy_column] + signs * means + columns_ = [] + reductions_ = [] + to_roll = [] + + for c, r in zip(columns, reductions): + if r == "rolled": + cname = c + "_rolled" + if cname not in df.columns: + to_roll.append(cname) + else: + columns_.append(cname) + reductions_.append(None) else: - raise ValueError(f"mode must be one of 'direct', 'mean' or 'rolled'. Got {mode}.") + columns_.append(c) + reductions_.append(r) + if len(to_roll) > 0: + raise RuntimeError(f"Columns {to_roll} have not been smoothed. please run `smooth_column`") + + df = dfops.apply_offset_from_columns( + tartget_column=energy_column, + offset_columns=columns_, + signs=signs, + reductions=reductions_, + inplace=True, + ) metadata: Dict[str, Any] = { "applied": True, "energy_column": energy_column, diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 008f5c32..05ba219f 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -253,3 +253,46 @@ def rolling_average_on_acquisition_time( if c + "_rolled" in df.columns: df = df.drop(c + "_rolled", axis=1) return df.merge(df_, left_on="timeStamp", right_on="ts").drop(["ts", "dt"], axis=1) + + +def apply_offset_from_columns( + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + target_column: str, + offset_columns: Union[str, Sequence[str]], + signs: Union[int, Sequence[int]], + reductions: Union[str, Sequence[str]], + inplace: bool = True, +) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """Apply an offset to a column based on the values of other columns. + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + target_column (str): Name of the column to apply the offset to. + offset_columns (str): Name of the column(s) to use for the offset. + signs (int): Sign of the offset. Defaults to 1. + reductions (str): Reduction function to use for the offset. Defaults to "mean". + + Returns: + Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. + """ + if isinstance(offset_columns, str): + offset_columns = [offset_columns] + if not inplace: + df[target_column + "_offset"] = df[target_column] + target_column = target_column + "_offset" + if reductions is None: + reductions = "mean" + if isinstance(reductions, str): + reductions = [reductions] * len(offset_columns) + if isinstance(signs, int): + signs = [signs] + if len(signs) != len(offset_columns): + raise ValueError("signs and offset_columns must have the same length!") + + for col, sign, red in zip(offset_columns, signs): + assert col in df.columns, f"{col} not in dataframe!" + if red is not None: + df[target_column] = df[target_column] + sign * df[col].agg(red) + else: + df[target_column] = df[target_column] + sign * df[col] + return df diff --git a/sed/core/processor.py b/sed/core/processor.py index 45f4a801..d63dd35d 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -6,6 +6,7 @@ from typing import cast from typing import Dict from typing import List +from typing import Literal from typing import Sequence from typing import Tuple from typing import Union @@ -25,6 +26,7 @@ from sed.core.config import parse_config from sed.core.config import save_config from sed.core.dfops import apply_jitter +from sed.core.dfops import rolling_average_on_acquisition_time from sed.core.metadata import MetaHandler from sed.diagnostics import grid_histogram from sed.io import to_h5 @@ -1340,6 +1342,43 @@ def add_jitter(self, cols: Sequence[str] = None): metadata.append(col) self._attributes.add(metadata, "jittering", duplicate_policy="append") + def smooth_columns( + self, + columns: Union[str, Sequence[str]] = None, + method: Literal["rolling"] = "rolling", + **kwargs, + ) -> None: + """Apply a filter along one or more columns of the dataframe. + + Currently only supports rolling average on acquisition time. + + Args: + columns (Union[str,Sequence[str]]): The colums onto which to apply the filter. + method (Literal['rolling'], optional): The filter method. Defaults to 'rolling'. + **kwargs: Keyword arguments passed to the filter method. + """ + if isinstance(columns, str): + columns = [columns] + for column in columns: + if column not in self._dataframe.columns: + raise ValueError(f"Cannot smooth {column}. Column not in dataframe!") + kwargs = {**self._config["smooth"], **kwargs} + if method == "rolling": + self._dataframe = rolling_average_on_acquisition_time( + df=self._dataframe, + rolling_group_channel=kwargs.get("rolling_group_channel", None), + columns=columns or kwargs.get("columns", None), + window=kwargs.get("window", None), + sigma=kwargs.get("sigma", None), + ) + else: + raise ValueError(f"Method {method} not supported!") + self._attributes.add( + columns, + "smooth", + duplicate_policy="append", + ) + def pre_binning( self, df_partitions: int = 100, diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb new file mode 100644 index 00000000..8bb9f28d --- /dev/null +++ b/tutorial/5 - hextof workflow.ipynb @@ -0,0 +1,248 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from sed import SedProcessor\n", + "import sed\n", + "import numpy as np\n", + "\n", + "%matplotlib inline\n", + "# %matplotlib ipympl\n", + "import matplotlib.pyplot as plt\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "config_file = Path(sed.__file__).parent.parent/'tutorial/hextof_config.yaml'\n", + "assert config_file.exists()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# with energy calibration" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp = SedProcessor(runs=[44797], config=config_file, collect_metadata=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.add_jitter()\n", + "sp.align_dld_sectors()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# axes = ['sampleBias', 'dldTimeSteps']\n", + "# bins = [5, 500]\n", + "# ranges = [[28,33], [4000, 6500]]\n", + "# res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plt.figure()\n", + "# res.plot.line(x='dldTimeSteps');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# posMax = np.zeros(5)\n", + "# bias = np.zeros(5)\n", + "# for i in range(5):\n", + "# posMax[i] = res['dldTimeSteps'][np.argmax(res[i,:].values)]\n", + "# bias[i] = res['sampleBias'][i]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# parameters = sed.calibrator.energy.poly_energy_calibration(\n", + "# pos=posMax, \n", + "# vals=bias, \n", + "# order=2, \n", + "# ref_id = 3, \n", + "# ref_energy=0.0,\n", + "# t = 0)\n", + "# #t=42720.0)\n", + "# print(\"parameters:\")\n", + "# print(parameters.keys())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.append_energy_axis()#calibration=parameters)\n", + "# sp_enCal._dataframe['energy'] = -sp_enCal._dataframe['energy']-4.0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# %matplotlib widget" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# axes = ['sampleBias', 'energy']\n", + "# bins = [5, 500]\n", + "# ranges = [[28,33], [-5, 10]]\n", + "# res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# plt.figure()\n", + "# res.plot.line(x='energy');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# sp.attributes.pop('apply_energy_offset')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.apply_energy_offset(\n", + " constant=32, \n", + " columns=['sampleBias'],# 'tofVoltage'], \n", + " signs=[-1],#, +1], \n", + " mode='direct'\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "h = sp.dataframe[['energy','sampleBias','tofVoltage','monochromatorPhotonEnergy']].head()\n", + "h" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [h['energy'][0]-5,h['energy'][0]+5]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure()\n", + "res.mean('sampleBias').plot.line(x='energy',linewidth=3);\n", + "res.plot.line(x='energy',linewidth=1,alpha=.5,label='all');\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "# sp._dataframe['energy'] = -sp._dataframe['energy'] - 9" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [h['energy'][0]-5,h['energy'][0]+5]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "sed38", + "language": "python", + "name": "sed38" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 35af57cd915f8ad7190dc1ee9c61a2e55a782562 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 18 Oct 2023 14:47:18 +0200 Subject: [PATCH 25/54] add tutorial notebook --- sed/calibrator/energy.py | 10 +- sed/core/dfops.py | 2 +- sed/core/processor.py | 45 ++------- tutorial/5 - hextof workflow.ipynb | 142 +++++++---------------------- 4 files changed, 50 insertions(+), 149 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 1aff5b6e..9bb7201e 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2183,8 +2183,8 @@ def apply_energy_offset( columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift to. signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) energy_column (str, optional): Name of the column containing the energy values. - reduce (str): The reduction to apply to the column. If "rolled" it searches for columns with - suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the + reductions (str): The reduction to apply to the column. If "rolled" it searches for columns + with suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method of dask.dataframe.Series. For example "mean". In this case the function is applied to the column to generate a single value for the whole dataset. If None, the shift is applied @@ -2199,7 +2199,8 @@ def apply_energy_offset( columns = [columns] if isinstance(signs, int): signs = [signs] - + if reductions is None: + reductions = [None] * len(columns) columns_ = [] reductions_ = [] to_roll = [] @@ -2219,7 +2220,8 @@ def apply_energy_offset( raise RuntimeError(f"Columns {to_roll} have not been smoothed. please run `smooth_column`") df = dfops.apply_offset_from_columns( - tartget_column=energy_column, + df=df, + target_column=energy_column, offset_columns=columns_, signs=signs, reductions=reductions_, diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 05ba219f..9cdce49b 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -289,7 +289,7 @@ def apply_offset_from_columns( if len(signs) != len(offset_columns): raise ValueError("signs and offset_columns must have the same length!") - for col, sign, red in zip(offset_columns, signs): + for col, sign, red in zip(offset_columns, signs, reductions): assert col in df.columns, f"{col} not in dataframe!" if red is not None: df[target_column] = df[target_column] + sign * df[col].agg(red) diff --git a/sed/core/processor.py b/sed/core/processor.py index d63dd35d..891c2dc1 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1132,10 +1132,7 @@ def apply_energy_offset( constant: float = None, columns: Union[str, Sequence[str]] = None, signs: Union[int, Sequence[int]] = None, - mode: Union[str, Sequence[str]] = "direct", - window: float = None, - sigma: float = None, - rolling_group_channel: str = None, + reductions: Union[str, Sequence[str]] = None, ) -> None: """Shift the energy axis of the dataframe by a given amount. @@ -1143,37 +1140,15 @@ def apply_energy_offset( constant (float, optional): The constant to shift the energy axis by. columns (Union[str, Sequence[str]]): The columns to shift. signs (Union[int, Sequence[int]]): The sign of the shift. - mode (Union[str, Sequence[str]], optional): The mode of the shift. - Defaults to "direct". - window (float, optional): The window size for the rolling mean. - Defaults to None. - sigma (float, optional): The sigma for the rolling mean. - Defaults to 2. - rolling_group_channel (str, optional): The channel to use for the rolling - mean. Defaults to None. - + reductions (str): The reduction to apply to the column. If "rolled" it searches for + columns with suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the + ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method + of dask.dataframe.Series. For example "mean". In this case the function is applied + to the column to generate a single value for the whole dataset. If None, the shift + is applied per-dataframe-row. Defaults to None. Raises: ValueError: If the energy column is not in the dataframe. """ - if columns is None and constant is None: - offset_dict = self._config["energy"].get("offset", None) - if offset_dict is None: - raise ValueError( - "No offset parameters provided and no offset found in config file!", - ) - constant = offset_dict["constant"] - columns = [] - signs = [] - modes = [] - windows = [] - sigmas = [] - for k, v in offset_dict: - columns.append(k) - signs.append(v["sign"]) - modes.append(v["mode"]) - windows.append(v.get("window", None)) - sigmas.append(v.get("sigma", None)) - energy_column = self._config["dataframe"]["energy_column"] if energy_column not in self._dataframe.columns: raise ValueError( @@ -1183,11 +1158,9 @@ def apply_energy_offset( self._dataframe, metadata = energy.apply_energy_offset( df=self._dataframe, columns=columns, + energy_column=energy_column, signs=signs, - mode=mode, - window=window, - sigma=sigma, - rolling_group_channel=rolling_group_channel, + reductions=reductions, config=self._config, ) self._dataframe[energy_column] += constant diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index 8bb9f28d..a9980191 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -60,10 +60,7 @@ "metadata": {}, "outputs": [], "source": [ - "# axes = ['sampleBias', 'dldTimeSteps']\n", - "# bins = [5, 500]\n", - "# ranges = [[28,33], [4000, 6500]]\n", - "# res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "sp.append_energy_axis()\n" ] }, { @@ -72,79 +69,11 @@ "metadata": {}, "outputs": [], "source": [ - "# plt.figure()\n", - "# res.plot.line(x='dldTimeSteps');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# posMax = np.zeros(5)\n", - "# bias = np.zeros(5)\n", - "# for i in range(5):\n", - "# posMax[i] = res['dldTimeSteps'][np.argmax(res[i,:].values)]\n", - "# bias[i] = res['sampleBias'][i]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# parameters = sed.calibrator.energy.poly_energy_calibration(\n", - "# pos=posMax, \n", - "# vals=bias, \n", - "# order=2, \n", - "# ref_id = 3, \n", - "# ref_energy=0.0,\n", - "# t = 0)\n", - "# #t=42720.0)\n", - "# print(\"parameters:\")\n", - "# print(parameters.keys())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# parameters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.append_energy_axis()#calibration=parameters)\n", - "# sp_enCal._dataframe['energy'] = -sp_enCal._dataframe['energy']-4.0" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# %matplotlib widget" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# axes = ['sampleBias', 'energy']\n", - "# bins = [5, 500]\n", - "# ranges = [[28,33], [-5, 10]]\n", - "# res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "sp.apply_energy_offset(\n", + " constant=31.6, \n", + " columns=['sampleBias'],\n", + " signs=[-1],\n", + ")" ] }, { @@ -153,8 +82,10 @@ "metadata": {}, "outputs": [], "source": [ - "# plt.figure()\n", - "# res.plot.line(x='energy');" + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-1,5]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -163,7 +94,7 @@ "metadata": {}, "outputs": [], "source": [ - "# sp.attributes.pop('apply_energy_offset')" + "%matplotlib widget" ] }, { @@ -172,12 +103,9 @@ "metadata": {}, "outputs": [], "source": [ - "sp.apply_energy_offset(\n", - " constant=32, \n", - " columns=['sampleBias'],# 'tofVoltage'], \n", - " signs=[-1],#, +1], \n", - " mode='direct'\n", - ")" + "plt.figure()\n", + "res.mean('sampleBias').plot.line(x='energy',linewidth=3);\n", + "res.plot.line(x='energy',linewidth=1,alpha=.5,label='all');\n" ] }, { @@ -186,8 +114,7 @@ "metadata": {}, "outputs": [], "source": [ - "h = sp.dataframe[['energy','sampleBias','tofVoltage','monochromatorPhotonEnergy']].head()\n", - "h" + "sp.dataframe['binding_energy'] = -sp.dataframe['energy']" ] }, { @@ -196,9 +123,9 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'energy']\n", + "axes = ['sampleBias', 'binding_energy']\n", "bins = [5, 500]\n", - "ranges = [[28,33], [h['energy'][0]-5,h['energy'][0]+5]]\n", + "ranges = [[28,33], [-5,1]]\n", "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, @@ -209,8 +136,10 @@ "outputs": [], "source": [ "plt.figure()\n", - "res.mean('sampleBias').plot.line(x='energy',linewidth=3);\n", - "res.plot.line(x='energy',linewidth=1,alpha=.5,label='all');\n" + "ax = plt.subplot(111)\n", + "res.binding_energy.attrs['unit'] = 'eV'\n", + "res.mean('sampleBias').plot.line(x='binding_energy',linewidth=3, ax=ax);\n", + "res.plot.line(x='binding_energy',linewidth=1,alpha=.5,label='all',ax=ax);" ] }, { @@ -218,22 +147,7 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "\n", - "# sp._dataframe['energy'] = -sp._dataframe['energy'] - 9" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [5, 500]\n", - "ranges = [[28,33], [h['energy'][0]-5,h['energy'][0]+5]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] + "source": [] } ], "metadata": { @@ -241,6 +155,18 @@ "display_name": "sed38", "language": "python", "name": "sed38" + }, + "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.8.18" } }, "nbformat": 4, From 9479ce8411476ffc6258070704e13396078d3e80 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 19 Oct 2023 09:22:42 +0200 Subject: [PATCH 26/54] fix linting and tests --- sed/calibrator/energy.py | 11 +++++------ sed/loader/flash/utils.py | 1 + tests/loader/test_utils.py | 9 +++++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 9bb7201e..aebfa3a6 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2147,7 +2147,6 @@ def tof2ns( x: Union[List[float], np.ndarray], tof_binwidth: float, tof_binning: int, - dtype: type = np.float64, ) -> Union[List[float], np.ndarray]: """Converts the time-of-flight steps to time-of-flight in nanoseconds. @@ -2162,8 +2161,8 @@ def tof2ns( Returns: Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. """ - val = x.astype(dtype) * tof_binwidth * 2**tof_binning - return val.astype(dtype) + val = x * tof_binwidth * 2**tof_binning + return val def apply_energy_offset( @@ -2201,9 +2200,9 @@ def apply_energy_offset( signs = [signs] if reductions is None: reductions = [None] * len(columns) - columns_ = [] - reductions_ = [] - to_roll = [] + columns_: Sequence[str] = [] + reductions_: Sequence[str] = [] + to_roll: Sequence[str] = [] for c, r in zip(columns, reductions): if r == "rolled": diff --git a/sed/loader/flash/utils.py b/sed/loader/flash/utils.py index 15cf9f74..a2bc837a 100644 --- a/sed/loader/flash/utils.py +++ b/sed/loader/flash/utils.py @@ -1,3 +1,4 @@ +"""Helper functions for the flash loader.""" from typing import Union import dask.dataframe diff --git a/tests/loader/test_utils.py b/tests/loader/test_utils.py index af79ed3f..6955ed38 100644 --- a/tests/loader/test_utils.py +++ b/tests/loader/test_utils.py @@ -1,3 +1,5 @@ +"""Module tests.loader.test_utils, tests for the sed.load.utils file +""" import dask.dataframe as dd import numpy as np import pandas as pd @@ -13,7 +15,8 @@ @pytest.fixture -def input_df(): +def input_df(): # pylint: disable=redefined-outer-name + """Fixture for input dataframe""" return pd.DataFrame( { "input_column": [0, 1, 2, 3, 4, 5, 6, 7], @@ -22,6 +25,7 @@ def input_df(): def test_split_channel_bitwise(input_df): + """Test split_channel_bitwise function""" output_columns = ["output1", "output2"] bit_mask = 2 expected_output = pd.DataFrame( @@ -37,6 +41,7 @@ def test_split_channel_bitwise(input_df): def test_split_channel_bitwise_raises(): + """Test split_channel_bitwise function raises""" pytest.raises( KeyError, split_channel_bitwise, @@ -77,7 +82,7 @@ def test_split_channel_bitwise_raises(): False, [np.int8, np.int16, np.int32], ) - pytest.raises(ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, [np.int8]) + pytest.raises(ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, False, [np.int8]) pytest.raises( ValueError, split_channel_bitwise, From 43776a34c8e54bf2708c52a90173096e89283635 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 19 Oct 2023 09:48:30 +0200 Subject: [PATCH 27/54] add bfill and tests --- sed/core/dfops.py | 78 ++++++++++++++++++++++++-- sed/loader/flash/loader.py | 2 +- tests/test_dfops.py | 109 +++++++++++++++++++++++++++++++++++++ 3 files changed, 183 insertions(+), 6 deletions(-) diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 9cdce49b..a09a5f9c 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -143,7 +143,7 @@ def map_columns_2d( def forward_fill_lazy( df: dask.dataframe.DataFrame, - channels: Sequence[str], + columns: Sequence[str] = None, before: Union[str, int] = "max", compute_lengths: bool = False, iterations: int = 2, @@ -158,21 +158,29 @@ def forward_fill_lazy( Args: df (dask.dataframe.DataFrame): The dataframe to forward fill. - channels (list): The columns to forward fill. + columns (list): The columns to forward fill. If None, fills all columns before (int, str, optional): The number of rows to include before the current partition. if 'max' it takes as much as possible from the previous partition, which is the size of the smallest partition in the dataframe. Defaults to 'max'. - after (int, optional): The number of rows to include after the current partition. - Defaults to 'part'. compute_lengths (bool, optional): Whether to compute the length of each partition iterations (int, optional): The number of times to forward fill the dataframe. Returns: dask.dataframe.DataFrame: The dataframe with the specified columns forward filled. """ + if columns is None: + columns = df.columns + elif isinstance(columns, str): + columns = [columns] + elif len(columns) == 0: + raise ValueError("columns must be a non-empty list of strings!") + for c in columns: + if c not in df.columns: + raise KeyError(f"{c} not in dataframe!") + # Define a custom function to forward fill specified columns def forward_fill_partition(df): - df[channels] = df[channels].ffill() + df[columns] = df[columns].ffill() return df # calculate the number of rows in each partition and choose least @@ -195,6 +203,66 @@ def forward_fill_partition(df): return df +def backward_fill_lazy( + df: dask.dataframe.DataFrame, + columns: Sequence[str] = None, + after: Union[str, int] = "max", + compute_lengths: bool = False, + iterations: int = 1, +) -> dask.dataframe.DataFrame: + """Forward fill the specified columns multiple times in a dask dataframe. + + Allows backward filling between partitions. Similar to forward fill, but backwards. + This helps to fill the initial values of a dataframe, which are often NaNs. + Use with care as the assumption of the values being the same in the past is often not true. + + Args: + df (dask.dataframe.DataFrame): The dataframe to forward fill. + columns (list): The columns to forward fill. If None, fills all columns + after (int, str, optional): The number of rows to include after the current partition. + if 'max' it takes as much as possible from the previous partition, which is + the size of the smallest partition in the dataframe. Defaults to 'max'. + compute_lengths (bool, optional): Whether to compute the length of each partition + iterations (int, optional): The number of times to backward fill the dataframe. + + Returns: + dask.dataframe.DataFrame: The dataframe with the specified columns backward filled. + """ + if columns is None: + columns = df.columns + elif isinstance(columns, str): + columns = [columns] + elif len(columns) == 0: + raise ValueError("columns must be a non-empty list of strings!") + for c in columns: + if c not in df.columns: + raise KeyError(f"{c} not in dataframe!") + + # Define a custom function to forward fill specified columns + def backward_fill_partition(df): + df[columns] = df[columns].bfill() + return df + + # calculate the number of rows in each partition and choose least + if after == "max": + nrows = df.map_partitions(len) + if compute_lengths: + with ProgressBar(): + print("Computing dataframe shape...") + nrows = nrows.compute() + after = min(nrows) + elif not isinstance(after, int): + raise TypeError('before must be an integer or "max"') + # Use map_overlap to apply forward_fill_partition + for _ in range(iterations): + df = df.map_overlap( + backward_fill_partition, + before=0, + after=after, + ) + return df + + def rolling_average_on_acquisition_time( df: Union[pd.DataFrame, dask.dataframe.DataFrame], rolling_group_channel: str = None, diff --git a/sed/loader/flash/loader.py b/sed/loader/flash/loader.py index 6e57d8e2..f66d73cc 100644 --- a/sed/loader/flash/loader.py +++ b/sed/loader/flash/loader.py @@ -752,7 +752,7 @@ def parquet_handler( dataframe = dfops.forward_fill_lazy( df=dataframe, - channels=channels, + columns=channels, before=overlap, iterations=self._config["dataframe"].get("forward_fill_iterations", 2), ) diff --git a/tests/test_dfops.py b/tests/test_dfops.py index e1d8bbc7..af61ed80 100644 --- a/tests/test_dfops.py +++ b/tests/test_dfops.py @@ -7,6 +7,7 @@ from sed.core.dfops import apply_filter from sed.core.dfops import apply_jitter +from sed.core.dfops import backward_fill_lazy from sed.core.dfops import drop_column from sed.core.dfops import forward_fill_lazy from sed.core.dfops import map_columns_2d @@ -136,3 +137,111 @@ def test_forward_fill_lazy_keep_head_nans(): t_df = forward_fill_lazy(t_dask_df, "energy", before="max").compute() assert np.all(np.isnan(t_df["energy"][:5])) assert np.all(np.isfinite(t_df["energy"][5:])) + + +def test_forward_fill_lazy_no_channels(): + """test that a lazy forward fill raises an error when no channels are specified""" + t_df = df.copy() + t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) + with pytest.raises(ValueError): + t_dask_df = forward_fill_lazy(t_dask_df, []) + + +def test_forward_fill_lazy_wrong_channels(): + """test that a lazy forward fill raises an error when the specified channels do not exist""" + t_df = df.copy() + t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) + with pytest.raises(KeyError): + t_dask_df = forward_fill_lazy(t_dask_df, ["nonexistent_channel"]) + + +def test_forward_fill_lazy_multiple_iterations(): + """test that a lazy forward fill works as expected with multiple iterations""" + t_df = df.copy() + t_df["energy"][5:35] = np.nan + t_dask_df = ddf.from_pandas(t_df, npartitions=N_PARTITIONS) + t_dask_df = forward_fill_lazy(t_dask_df, "energy", before="max", iterations=5) + t_df = t_df.ffill() + pd.testing.assert_frame_equal(t_df, t_dask_df.compute()) + + +def test_backward_fill_lazy(): + """Test backward fill function""" + t_df = pd.DataFrame( + { + "A": [1, 2, np.nan, np.nan, 5, np.nan], + "B": [1, np.nan, 3, np.nan, 5, np.nan], + "C": [np.nan, np.nan, np.nan, np.nan, np.nan, 6], + "D": [1, 2, 3, 4, 5, 6], + }, + ) + t_dask_df = ddf.from_pandas(t_df, npartitions=2) + t_dask_df = backward_fill_lazy(t_dask_df, ["A", "B", "C"], after=2, iterations=2) + t_df = t_df.bfill().bfill() + pd.testing.assert_frame_equal(t_df, t_dask_df.compute()) + + +def test_backward_fill_lazy_no_channels(): + """Test that an error is raised when no channels are specified""" + t_df = pd.DataFrame( + { + "A": [1, 2, np.nan, np.nan, 5, np.nan], + "B": [1, np.nan, 3, np.nan, 5, np.nan], + "C": [np.nan, np.nan, np.nan, np.nan, np.nan, 6], + "D": [1, 2, 3, 4, 5, 6], + }, + ) + t_dask_df = ddf.from_pandas(t_df, npartitions=2) + with pytest.raises(ValueError): + t_dask_df = backward_fill_lazy(t_dask_df, [], after=2, iterations=2) + + +def test_backward_fill_lazy_wrong_channels(): + """Test that an error is raised when the specified channels do not exist""" + t_df = pd.DataFrame( + { + "A": [1, 2, np.nan, np.nan, 5, np.nan], + "B": [1, np.nan, 3, np.nan, 5, np.nan], + "C": [np.nan, np.nan, np.nan, np.nan, np.nan, 6], + "D": [1, 2, 3, 4, 5, 6], + }, + ) + t_dask_df = ddf.from_pandas(t_df, npartitions=2) + with pytest.raises(KeyError): + t_dask_df = backward_fill_lazy(t_dask_df, ["nonexistent_channel"], after=2, iterations=2) + + +def test_backward_fill_lazy_wrong_after(): + """Test that an error is raised when the 'after' parameter is not an integer or 'max'""" + t_df = pd.DataFrame( + { + "A": [1, 2, np.nan, np.nan, 5, np.nan], + "B": [1, np.nan, 3, np.nan, 5, np.nan], + "C": [np.nan, np.nan, np.nan, np.nan, np.nan, 6], + "D": [1, 2, 3, 4, 5, 6], + }, + ) + t_dask_df = ddf.from_pandas(t_df, npartitions=2) + with pytest.raises(TypeError): + t_dask_df = backward_fill_lazy( + t_dask_df, + ["A", "B", "C"], + after="wrong_parameter", + iterations=2, + ) + + +def test_backward_fill_lazy_multiple_iterations(): + """Test that the function works with multiple iterations""" + t_df = pd.DataFrame( + { + "A": [1, 2, np.nan, np.nan, 5, np.nan], + "B": [1, np.nan, 3, np.nan, 5, np.nan], + "C": [np.nan, np.nan, np.nan, np.nan, np.nan, 6], + "D": [1, 2, 3, 4, 5, 6], + }, + ) + t_dask_df = ddf.from_pandas(t_df, npartitions=2) + t_dask_df = backward_fill_lazy(t_dask_df, ["A", "B", "C"], after=2, iterations=2) + t_df = t_df.bfill().bfill().bfill().bfill() + pd.testing.assert_frame_equal(t_df, t_dask_df.compute()) From 9edf50a05181a729db64364021b419e76bcd61cb Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 19 Oct 2023 10:16:11 +0200 Subject: [PATCH 28/54] move tof_to_ns inside ec class --- sed/calibrator/energy.py | 124 ++++++++++++++--------------- sed/core/processor.py | 9 +-- tutorial/5 - hextof workflow.ipynb | 12 ++- 3 files changed, 73 insertions(+), 72 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index aebfa3a6..a27ba73e 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -96,6 +96,7 @@ def __init__( self.calibration: Dict[Any, Any] = {} self.tof_column = self._config["dataframe"]["tof_column"] + self.tof_ns_column = self._config["dataframe"].get("tof_ns_column", None) self.corrected_tof_column = self._config["dataframe"]["corrected_tof_column"] self.energy_column = self._config["dataframe"]["energy_column"] self.x_column = self._config["dataframe"]["x_column"] @@ -880,6 +881,53 @@ def append_energy_axis( return df, metadata + def append_tof_ns_axis( + self, + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + tof_column: str = None, + tof_ns_column: str = None, + **kwds, + ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Converts the time-of-flight time from steps to time in ns. + + # TODO: needs tests + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. + tof_column (str, optional): Name of the column containing the + time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. + tof_ns_column (str, optional): Name of the column to store the + time-of-flight in nanoseconds. Defaults to config["dataframe"]["tof_ns_column"]. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. + """ + binwidth = kwds.pop("binwidth", self.binwidth) + binning = kwds.pop("binning", self.binning) + if tof_column is None: + if self.corrected_tof_column in df.columns: + tof_column = self.corrected_tof_column + else: + tof_column = self.tof_column + + if tof_ns_column is None: + tof_ns_column = self.tof_ns_column + if tof_ns_column is None: + raise AttributeError("tof_ns_column not set!") + + df[tof_ns_column] = tof2ns( + binwidth, + binning, + df[tof_column].astype("float64"), + ) + metadata: Dict[str, Any] = { + "applied": True, + "binwidth": binwidth, + "binning": binning, + } + return df, metadata + def gather_calibration_metadata(self, calibration: dict = None) -> dict: """Collects metadata from the energy calibration @@ -2088,80 +2136,23 @@ def tof2evpoly( return energy -def tof_step_to_ns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - tof_ns_column: str = None, - tof_binwidth: float = None, - tof_column: str = None, - tof_binning: int = None, - config: dict = None, -) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: - """Converts the time-of-flight time from steps to time in ns. - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. - tof_ns_column (str, optional): Name of the column to store the - time-of-flight in nanoseconds. Defaults to config["dataframe"]["tof_ns_column"]. - tof_binwidth (float, optional): Time step size in nanoseconds. - Defaults to config["dataframe"]["tof_binwidth"]. - tof_column (str, optional): Name of the column containing the - time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. - tof_binning (int, optional): Binning of the time-of-flight steps. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - dict: Metadata dictionary. - """ - if tof_binwidth is None: - if config is None: - raise ValueError("Either tof_binwidth or config must be given.") - tof_binwidth = config["dataframe"]["tof_binwidth"] - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - if tof_binning is None: - if config is None: - raise ValueError("Either tof_binning or config must be given.") - tof_binning = config["dataframe"]["tof_binning"] - if tof_ns_column is None: - if config is None: - raise ValueError("Either tof_ns_column or config must be given.") - tof_ns_column = config["dataframe"].get("tof_ns_column", None) - if tof_ns_column is None: - raise ValueError("No value for tof_ns_column present in config.") - - def func(x): - return tof2ns(x[tof_column], tof_binwidth, tof_binning) - - df[tof_ns_column] = df.map_partitions(func, meta=(tof_column, np.float64)) - metadata: Dict[str, Any] = { - "applied": True, - "tof_binwidth": tof_binwidth, - "tof_binning": tof_binning, - } - return df, metadata - - def tof2ns( - x: Union[List[float], np.ndarray], - tof_binwidth: float, - tof_binning: int, + binwidth: float, + binning: int, + t: float, ) -> Union[List[float], np.ndarray]: """Converts the time-of-flight steps to time-of-flight in nanoseconds. designed for use with dask.dataframe.DataFrame.map_partitions. Args: - x (Union[List[float], np.ndarray]): Time-of-flight steps. - tof_column (str): Name of the column containing the time-of-flight steps. - tof_binwidth (float): Time step size in nanoseconds. - tof_binning (int): Binning of the time-of-flight steps. - + binwidth (float): Time step size in nanoseconds. + binning (int): Binning of the time-of-flight steps. + t (float): TOF value in bin number. Returns: - Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. + float: Converted time in nanoseconds. """ - val = x * tof_binwidth * 2**tof_binning + val = t * binwidth * 2**binning return val @@ -2176,6 +2167,7 @@ def apply_energy_offset( """Apply an energy shift to the given column(s). # TODO: This funcion can still be improved and needs testsing + # TODO: move inside the ec class Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. @@ -2244,6 +2236,8 @@ def align_dld_sectors( ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the time-of-flight axis of the different sections of a detector. + # TODO: move inside the ec class + Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. sector_delays (Sequece[float], optional): Sector delays for the 8s time. diff --git a/sed/core/processor.py b/sed/core/processor.py index 891c2dc1..df696d23 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1172,9 +1172,8 @@ def apply_energy_offset( duplicate_policy="append", ) - def tof_step_to_ns( + def append_tof_ns_axis( self, - tof_ns_column: str = None, **kwargs, ): """Convert time-of-flight channel steps to nanoseconds. @@ -1190,15 +1189,13 @@ def tof_step_to_ns( print("Adding time-of-flight column in nanoseconds to dataframe:") # TODO assert order of execution through metadata - self._dataframe, metadata = energy.tof_step_to_ns( + self._dataframe, metadata = self.ec.append_tof_ns_axis( df=self._dataframe, - tof_ns_column=tof_ns_column, - config=self._config, **kwargs, ) self._attributes.add( metadata, - "step_to_ns", + "tof_ns_conversion", duplicate_policy="append", ) diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index a9980191..17333475 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -60,7 +60,17 @@ "metadata": {}, "outputs": [], "source": [ - "sp.append_energy_axis()\n" + "sp.append_energy_axis()\n", + "sp.append_tof_ns_axis()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.dataframe[['dldTime','dldTimeSteps','energy']].head()" ] }, { From 8ba65e9a4efa12e4159bfdc05d2b122c5c5c0aab Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 19 Oct 2023 10:28:24 +0200 Subject: [PATCH 29/54] move dld_sector_correction to ec --- sed/calibrator/energy.py | 102 +++++++++++++---------------- sed/core/processor.py | 30 ++------- tutorial/5 - hextof workflow.ipynb | 2 +- 3 files changed, 50 insertions(+), 84 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index a27ba73e..2665aab9 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -110,6 +110,8 @@ def __init__( ) / 2 ** (self.binning - 1) self.tof_fermi = self._config["energy"]["tof_fermi"] / 2 ** (self.binning - 1) self.color_clip = self._config["energy"]["color_clip"] + self.sector_delays = self._config["dataframe"].get("sector_delays", None) + self.sector_id_column = self._config["dataframe"].get("sector_id_column", None) self.correction: Dict[Any, Any] = {} @@ -1407,6 +1409,49 @@ def gather_correction_metadata(self, correction: dict = None) -> dict: return metadata + def align_dld_sectors( + self, + df: Union[pd.DataFrame, dask.dataframe.DataFrame], + **kwds, + # sector_delays: Sequence[float] = None, + # sector_id_column: str = None, + # tof_column: str = None, + ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Aligns the time-of-flight axis of the different sections of a detector. + + # TODO: move inside the ec class + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. + """ + sector_delays = kwds.pop("sector_delays", self.sector_delays) + sector_id_column = kwds.pop("sector_id_column", self.sector_id_column) + + if sector_delays is None or sector_id_column is None: + raise ValueError( + "No value for sector_delays or sector_id_column found in config." + "config file is not properly configured for dld sector correction.", + ) + tof_column = kwds.pop("tof_column", self.tof_column) + + # align the 8s sectors + sector_delays_arr = dask.array.from_array(sector_delays) + + def align_sector(x): + val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] + return val.astype(np.float32) + + df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) + metadata: Dict[str, Any] = { + "applied": True, + "sector_delays": sector_delays, + } + return df, metadata + def extract_bias(files: List[str], bias_key: str) -> np.ndarray: """Read bias values from hdf5 files @@ -2225,60 +2270,3 @@ def apply_energy_offset( "sign": signs, } return df, metadata - - -def align_dld_sectors( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - sector_delays: Sequence[float] = None, - sector_id_column: str = None, - tof_column: str = None, - config: dict = None, -) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: - """Aligns the time-of-flight axis of the different sections of a detector. - - # TODO: move inside the ec class - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - sector_delays (Sequece[float], optional): Sector delays for the 8s time. - in units of step. Calibration should be done with binning along dldTimeSteps. - Defaults to config["dataframe"]["sector_delays"]. - sector_id_column (str, optional): Name of the column containing the - sectorID. Defaults to config["dataframe"]["sector_id_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. - config (dict, optional): Configuration dictionary. Defaults to None. - - Returns: - dask.dataframe.DataFrame: Dataframe with the new columns. - dict: Metadata dictionary. - """ - if sector_delays is None: - if config is None: - raise ValueError("Either sector_delays or config must be given.") - sector_delays = config["dataframe"].get("sector_delays", None) - if sector_delays is None: - raise ValueError("No value for sector_delays found in config.") - if sector_id_column is None: - if config is None: - raise ValueError("Either sector_id_column or config must be given.") - sector_id_column = config["dataframe"].get("sector_id_column", None) - if sector_id_column is None: - raise ValueError("No value for sector_id_column found in config.") - if tof_column is None: - if config is None: - raise ValueError("Either tof_column or config must be given.") - tof_column = config["dataframe"]["tof_column"] - # align the 8s sectors - sector_delays_arr = dask.array.from_array(sector_delays) - - def align_sector(x): - val = x[tof_column] - sector_delays_arr[x[sector_id_column].values.astype(int)] - return val.astype(np.float32) - - df[tof_column] = df.map_partitions(align_sector, meta=(tof_column, np.float32)) - metadata: Dict[str, Any] = { - "applied": True, - "sector_delays": sector_delays, - } - return df, metadata diff --git a/sed/core/processor.py b/sed/core/processor.py index df696d23..22114e44 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1199,37 +1199,15 @@ def append_tof_ns_axis( duplicate_policy="append", ) - def align_dld_sectors( - self, - sector_delays: Sequence[float] = None, - sector_id_column: str = None, - tof_column: str = None, - ): - """Align the 8s sectors of the HEXTOF endstation. - - Intended for use with HEXTOF endstation - - Args: - sector_delays (Sequence[float], optional): Delays of the 8s sectors in - picoseconds. Defaults to config["dataframe"]["sector_delays"]. - sector_id_column (str, optional): Name of the column containing the - sector id. Defaults to config["dataframe"]["sector_id_column"]. - tof_column (str, optional): Name of the column containing the - time-of-flight. Defaults to config["dataframe"]["tof_column"]. - """ + def align_dld_sectors(self, **kwargs): + """Align the 8s sectors of the HEXTOF endstation.""" if self._dataframe is not None: print("Aligning 8s sectors of dataframe") # TODO assert order of execution through metadata - self._dataframe, metadata = energy.align_dld_sectors( - df=self._dataframe, - sector_delays=sector_delays, - sector_id_column=sector_id_column, - tof_column=tof_column, - config=self._config, - ) + self._dataframe, metadata = self.ec.align_dld_sectors(df=self._dataframe, **kwargs) self._attributes.add( metadata, - "sector_alignment", + "dld_sector_alignment", duplicate_policy="raise", ) diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index 17333475..35f27197 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -70,7 +70,7 @@ "metadata": {}, "outputs": [], "source": [ - "sp.dataframe[['dldTime','dldTimeSteps','energy']].head()" + "sp.dataframe[['dldTime','dldTimeSteps','energy','dldSectorID']].head()" ] }, { From b93cd7baacd1071b556fe46bb34cd1e251636b75 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 19 Oct 2023 13:42:37 +0200 Subject: [PATCH 30/54] fix From eaeeff445bb0e67c2bfbd8b555ac02ad570c75ba Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Fri, 20 Oct 2023 00:06:15 +0200 Subject: [PATCH 31/54] harder fix From acc9c4af23ec45b7cb9ccbafa5de5432e2bf912b Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Mon, 23 Oct 2023 13:48:42 +0200 Subject: [PATCH 32/54] fix linting --- sed/calibrator/energy.py | 6 +++--- tests/loader/test_utils.py | 32 +++++++++++++------------------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 2665aab9..34b1ea33 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2237,9 +2237,9 @@ def apply_energy_offset( signs = [signs] if reductions is None: reductions = [None] * len(columns) - columns_: Sequence[str] = [] - reductions_: Sequence[str] = [] - to_roll: Sequence[str] = [] + columns_: List[str] = [] + reductions_: List[str] = [] + to_roll: List[str] = [] for c, r in zip(columns, reductions): if r == "rolled": diff --git a/tests/loader/test_utils.py b/tests/loader/test_utils.py index 6955ed38..f5ced6ed 100644 --- a/tests/loader/test_utils.py +++ b/tests/loader/test_utils.py @@ -14,29 +14,19 @@ ) -@pytest.fixture -def input_df(): # pylint: disable=redefined-outer-name - """Fixture for input dataframe""" - return pd.DataFrame( - { - "input_column": [0, 1, 2, 3, 4, 5, 6, 7], - }, - ) - - -def test_split_channel_bitwise(input_df): +def test_split_channel_bitwise(): """Test split_channel_bitwise function""" - output_columns = ["output1", "output2"] + output_columns = ["b", "c"] bit_mask = 2 expected_output = pd.DataFrame( { - "input_column": [0, 1, 2, 3, 4, 5, 6, 7], - "output1": np.array([0, 1, 2, 3, 0, 1, 2, 3], dtype=np.int8), - "output2": np.array([0, 0, 0, 0, 1, 1, 1, 1], dtype=np.int32), + "a": [0, 1, 2, 3, 4, 5, 6, 7], + "b": np.array([0, 1, 2, 3, 0, 1, 2, 3], dtype=np.int8), + "c": np.array([0, 0, 0, 0, 1, 1, 1, 1], dtype=np.int32), }, ) - df = dd.from_pandas(input_df, npartitions=2) - result = split_channel_bitwise(df, "input_column", output_columns, bit_mask) + df = dd.from_pandas(test_df, npartitions=2) + result = split_channel_bitwise(df, "a", output_columns, bit_mask) pd.testing.assert_frame_equal(result.compute(), expected_output) @@ -82,7 +72,9 @@ def test_split_channel_bitwise_raises(): False, [np.int8, np.int16, np.int32], ) - pytest.raises(ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, False, [np.int8]) + pytest.raises( + ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, False, [np.int8] + ) pytest.raises( ValueError, split_channel_bitwise, @@ -99,4 +91,6 @@ def test_split_channel_bitwise_raises(): "b": [0, 1, 2, 3, 4, 5, 6, 7], }, ) - pytest.raises(KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, False, None) + pytest.raises( + KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, False, None + ) From a1066e5d025e778b03917b9057a1447de9d7cbca Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Mon, 23 Oct 2023 13:51:08 +0200 Subject: [PATCH 33/54] fix linting --- sed/calibrator/energy.py | 2 +- tests/loader/test_utils.py | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 34b1ea33..a0058a6a 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -2237,10 +2237,10 @@ def apply_energy_offset( signs = [signs] if reductions is None: reductions = [None] * len(columns) + columns_: List[str] = [] reductions_: List[str] = [] to_roll: List[str] = [] - for c, r in zip(columns, reductions): if r == "rolled": cname = c + "_rolled" diff --git a/tests/loader/test_utils.py b/tests/loader/test_utils.py index f5ced6ed..0ce2601c 100644 --- a/tests/loader/test_utils.py +++ b/tests/loader/test_utils.py @@ -72,9 +72,7 @@ def test_split_channel_bitwise_raises(): False, [np.int8, np.int16, np.int32], ) - pytest.raises( - ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, False, [np.int8] - ) + pytest.raises(ValueError, split_channel_bitwise, test_df, "a", ["b", "c"], 3, False, [np.int8]) pytest.raises( ValueError, split_channel_bitwise, @@ -91,6 +89,4 @@ def test_split_channel_bitwise_raises(): "b": [0, 1, 2, 3, 4, 5, 6, 7], }, ) - pytest.raises( - KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, False, None - ) + pytest.raises(KeyError, split_channel_bitwise, other_df, "a", ["b", "c"], 3, False, None) From 0d73776c29510542bc84fe25cbd846543b966b24 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 24 Oct 2023 21:57:31 +0200 Subject: [PATCH 34/54] add option to initialize fit params --- sed/calibrator/energy.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index ab5fe36d..1f0540d6 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1962,13 +1962,33 @@ def residual(pars, time, data, binwidth, binning, energy_scale): return model - data pars = Parameters() - pars.add(name="d", value=kwds.pop("d_init", 1)) + d_pars = kwds.pop("d", {}) + pars.add( + name="d", + value=d_pars.get("value", 1), + min=d_pars.get("min", -np.inf), + max=d_pars.get("max", np.inf), + vary=d_pars.get("vary", True), + ) + t0_pars = kwds.pop("t0", {}) pars.add( name="t0", - value=kwds.pop("t0_init", 1e-6), - max=(min(pos) - 1) * binwidth * 2**binning, + value=t0_pars.get("value", 1e-6), + min=t0_pars.get("min", -np.inf), + max=t0_pars.get( + "max", + (min(pos) - 1) * binwidth * 2**binning, + ), + vary=t0_pars.get("vary", True), + ) + E0_pars = kwds.pop("E0", {}) + pars.add( + name="E0", + value=E0_pars.get("value", min(vals)), + min=E0_pars.get("min", -np.inf), + max=E0_pars.get("max", np.inf), + vary=d_pars.get("vary", True), ) - pars.add(name="E0", value=kwds.pop("E0_init", min(vals))) fit = Minimizer( residual, pars, From b1c158da901f19cce4af1340727389ae2dbdf615 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Tue, 24 Oct 2023 22:03:50 +0200 Subject: [PATCH 35/54] energy calibration notebook and config --- tutorial/5 - hextof workflow.ipynb | 367 +++++++++++++++++++++++++++-- tutorial/hextof_config.yaml | 135 +++++++++++ 2 files changed, 486 insertions(+), 16 deletions(-) create mode 100644 tutorial/hextof_config.yaml diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index 35f27197..f8f1316f 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -14,8 +14,16 @@ "\n", "%matplotlib inline\n", "# %matplotlib ipympl\n", - "import matplotlib.pyplot as plt\n", - "\n" + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib widget" ] }, { @@ -32,7 +40,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# with energy calibration" + "# Loading Data" ] }, { @@ -54,13 +62,86 @@ "sp.align_dld_sectors()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Energy Calibration" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## using lmfit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'dldTimeSteps']\n", + "bins = [6, 500]\n", + "ranges = [[28,33], [4000, 4800]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.load_bias_series(binned_data=res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ranges=(4250, 4500)\n", + "ref_id=3\n", + "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ref_id=3\n", + "ref_energy=0\n", + "sp.calibrate_energy_axis(\n", + " ref_id=ref_id, \n", + " ref_energy=ref_energy,\n", + " method=\"lmfit\",\n", + " energy_scale='kinetic',\n", + " d={'value':1e9, 'min': 1e8, 'max': 1e10},\n", + " E0={'value':0, 'min': -100, 'max': 100,'vary':True},\n", + " t0={'value':225, 'min': -100, 'max': 250, 'vary':True},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.append_energy_axis()" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "sp.append_energy_axis()\n", "sp.append_tof_ns_axis()" ] }, @@ -73,6 +154,29 @@ "sp.dataframe[['dldTime','dldTimeSteps','energy','dldSectorID']].head()" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-10,10]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure()\n", + "res.mean('sampleBias').plot.line(x='energy',linewidth=3);\n", + "res.plot.line(x='energy',linewidth=1,alpha=.5,label='all');\n" + ] + }, { "cell_type": "code", "execution_count": null, @@ -80,9 +184,9 @@ "outputs": [], "source": [ "sp.apply_energy_offset(\n", - " constant=31.6, \n", + " constant=-31.5, \n", " columns=['sampleBias'],\n", - " signs=[-1],\n", + " signs=[+1],\n", ")" ] }, @@ -94,7 +198,58 @@ "source": [ "axes = ['sampleBias', 'energy']\n", "bins = [5, 500]\n", - "ranges = [[28,33], [-1,5]]\n", + "ranges = [[28,33], [-3,2]]\n", + "res_fit = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure()\n", + "ax = plt.subplot(111)\n", + "res_fit.energy.attrs['unit'] = 'eV'\n", + "res_fit.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", + "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## with poly fit" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp = SedProcessor(runs=[44797], config=config_file, collect_metadata=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.add_jitter()\n", + "sp.align_dld_sectors()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'dldTimeSteps']\n", + "bins = [6, 500]\n", + "ranges = [[28,33], [4000, 4800]]\n", "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, @@ -104,7 +259,55 @@ "metadata": {}, "outputs": [], "source": [ - "%matplotlib widget" + "sp.load_bias_series(binned_data=res)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ranges=(4250, 4500)\n", + "ref_id=3\n", + "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ref_id=3\n", + "ref_energy=-0.3\n", + "sp.calibrate_energy_axis(\n", + " ref_id=ref_id, \n", + " ref_energy=-0.3, \n", + " method=\"lstsq\",\n", + " order=2,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.append_energy_axis()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-10,10]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -124,7 +327,11 @@ "metadata": {}, "outputs": [], "source": [ - "sp.dataframe['binding_energy'] = -sp.dataframe['energy']" + "sp.apply_energy_offset(\n", + " constant=-31.5, \n", + " columns=['sampleBias'],\n", + " signs=[+1],\n", + ")" ] }, { @@ -133,10 +340,10 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'binding_energy']\n", + "axes = ['sampleBias', 'energy']\n", "bins = [5, 500]\n", - "ranges = [[28,33], [-5,1]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "ranges = [[28,33], [-3,2]]\n", + "res_poly = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -147,9 +354,19 @@ "source": [ "plt.figure()\n", "ax = plt.subplot(111)\n", - "res.binding_energy.attrs['unit'] = 'eV'\n", - "res.mean('sampleBias').plot.line(x='binding_energy',linewidth=3, ax=ax);\n", - "res.plot.line(x='binding_energy',linewidth=1,alpha=.5,label='all',ax=ax);" + "res_poly.energy.attrs['unit'] = 'eV'\n", + "res_poly.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", + "res_poly.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# From manual values\n", + "these are obviously not the right values, I think I got them from an other calibraiton file.\n", + "They are here to show how the calibration works.\n", + "Also, I noticed the parameter energy_scale from the config has no effect..." ] }, { @@ -157,7 +374,125 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "sp = SedProcessor(runs=[44797], config=config_file, collect_metadata=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.add_jitter()\n", + "sp.align_dld_sectors()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.append_energy_axis()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.apply_energy_offset(\n", + " constant=+31.5, \n", + " columns=['sampleBias'],\n", + " signs=[-1],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-10,5]]\n", + "res_config = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure()\n", + "ax = plt.subplot(111)\n", + "res_config.energy.attrs['unit'] = 'eV'\n", + "res_config.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", + "res_config.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.dataframe['energy'] = - sp.dataframe['energy']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-3,2]]\n", + "res_config = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plt.figure()\n", + "ax = plt.subplot(111)\n", + "res_config.energy.attrs['unit'] = 'eV'\n", + "res_config.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", + "res_config.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# compare the two methods\n", + "fig, ax = plt.subplots(1,3, figsize=(10,4), layout='constrained')\n", + "res_poly.energy.attrs['unit'] = 'eV'\n", + "res_poly.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax[0], label='all');\n", + "res_poly.plot.line(x='energy',linewidth=1,alpha=.5,ax=ax[0]);\n", + "ax[0].set_title('poly')\n", + "res_fit.energy.attrs['unit'] = 'eV'\n", + "res_fit.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax[1], label='all');\n", + "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,ax=ax[1]);\n", + "ax[1].set_title('fit')\n", + "res_config.energy.attrs['unit'] = 'eV'\n", + "res_config.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax[2]);\n", + "res_config.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax[2]);\n", + "ax[2].set_title('config')\n", + "ax[0].set_xlim(-2, 1.5)\n", + "ax[1].set_xlim(-2, 1.5)\n", + "ax[2].set_xlim(-2, 1.5)" + ] } ], "metadata": { diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml new file mode 100644 index 00000000..d9a4178b --- /dev/null +++ b/tutorial/hextof_config.yaml @@ -0,0 +1,135 @@ +core: + loader: flash + beamtime_id: 11013410 + year: 2023 + beamline: pg2 + instrument: hextof + paths: + data_raw_dir: "/asap3/flash/gpfs/pg2/2023/data/11019101/raw/hdf/offline/fl1user3" + # change this to a local directory where you want to store the parquet files + data_parquet_dir: "/home/agustsss/temp/sed_parquet" + +binning: + num_cores: 10 + +dataframe: + ubid_offset: 5 + daq: fl1user3 + forward_fill_iterations: 2 + split_sector_id_from_dld_time: True + sector_id_reserved_bits: 3 + x_column: dldPosX + corrected_x_column: "X" + kx_column: "kx" + y_column: dldPosY + corrected_y_column: "Y" + ky_column: "ky" + tof_column: dldTimeSteps + tof_ns_column: dldTime + corrected_tof_column: "tm" + bias_column: "sampleBias" + tof_binwidth: 0.020576131995767355 + tof_binning: 3 # with 3, 8 bins per step 2**3 + sector_id_column: dldSectorID + sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] + jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] + + units: + dldPosX: 'step' + dldPosY: 'step' + dldTimeSteps: 'step' + tof_voltage: 'V' + extractorVoltage: 'V' + extractorCurrent: 'A' + cryoTemperature: 'K' + sampleTemperature: 'K' + dldTime: 'ns' + # delay: 'ps' + timeStamp: 's' + # energy: 'eV' + # E: 'eV' + kx: '1/A' + ky: '1/A' + + channels: + timeStamp: + format: per_train + group_name: "/uncategorised/FLASH.DIAG/TIMINGINFO/TIME1.BUNCH_FIRST_INDEX.1/" + pulseId: + format: per_electron + group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" + slice: 2 + dldPosX: + format: per_electron + group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" + slice: 1 + dldPosY: + format: per_electron + group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" + slice: 0 + dldTimeSteps: + format: per_electron + group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" + slice: 3 + dldAux: + format: per_pulse + group_name : "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" + slice: 4 + dldAuxChannels: + sampleBias: 0 + tofVoltage: 1 + extractorVoltage: 2 + extractorCurrent: 3 + cryoTemperature: 4 + sampleTemperature: 5 + crystalVoltage: 6 + dldTimeBinSize: 15 + pulserSignAdc: # ADC containing the pulser sign (1: value approx. 35000, 0: 33000) + format: per_pulse + group_name: "/FL1/Experiment/PG/SIS8300 100MHz ADC/CH6/TD/" + #slice: 0 + monochromatorPhotonEnergy: + format: per_train + group_name: "/FL1/Beamlines/PG/Monochromator/monochromator photon energy/" + gmdBda: # The GMDs can not be read yet... + format: per_train + group_name: "/FL1/Photon Diagnostic/GMD/Average energy/energy BDA/" + # slice: ":" + #gmdTunnel: # The GMDs can not be read yet... + # format: per_pulse + # group_name: "/FL1/Photon Diagnostic/GMD/Pulse resolved energy/energy tunnel/" + # slice: ":" + bam: # Here we use the DBC2 BAM as the "normal" one is broken. + format: per_pulse + group_name: "/uncategorised/FLASH.SDIAG/BAM.DAQ/FL0.DBC2.ARRIVAL_TIME.ABSOLUTE.SA1.COMP/" + delayStage: + format: per_train + group_name: "/zraw/FLASH.SYNC/LASER.LOCK.EXP/F1.PG.OSC/FMC0.MD22.1.ENCODER_POSITION.RD/dGroup/" + + stream_name_prefixes: + pbd: "GMD_DATA_gmd_data" + pbd2: "FL2PhotDiag_pbd2_gmd_data" + fl1user1: "FLASH1_USER1_stream_2" + fl1user2: "FLASH1_USER2_stream_2" + fl1user3: "FLASH1_USER3_stream_2" + fl2user1: "FLASH2_USER1_stream_2" + fl2user2: "FLASH2_USER2_stream_2" + + beamtime_dir: + pg2: "/asap3/flash/gpfs/pg2/" + hextof: "/asap3/fs-flash-o/gpfs/hextof/" + wespe: "/asap3/fs-flash-o/gpfs/wespe/" + +energy: + calibration: + offset: 4150.0 + coeffs: [-2.01882455e-05, 1.94714008e-01] + Tmat: [[ 1.01040e+06, 1.20000e+02], + [ 7.18675e+05, 8.50000e+01], + [ 3.82275e+05, 4.50000e+01], + [-3.86325e+05, -4.50000e+01]] + bvec: [ 3., 2., 1., -1.] + energy_scale: kinetic + axis: -463.3385531514501 + E0: -463.3385531514501 + refid: 3 From d42f2e047d5e0edc8a3a32385dea0bfae735ccc7 Mon Sep 17 00:00:00 2001 From: rettigl Date: Wed, 25 Oct 2023 09:21:44 +0200 Subject: [PATCH 36/54] partial working energy calibration --- tutorial/5 - hextof workflow.ipynb | 521 +++++++++++++++++++++-- tutorial/Flash energy calibration.ipynb | 539 ++++++++++++++++++++++-- tutorial/config_flash_energy_calib.yaml | 3 + tutorial/hextof_config.yaml | 2 +- 4 files changed, 1010 insertions(+), 55 deletions(-) diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index f8f1316f..e42a0594 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ @@ -45,18 +45,41 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Folder config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/sed_config.yaml]\n", + "User config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/hextof_config.yaml]\n", + "Default config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/config/default.yaml]\n", + "Reading files: 0 new files of 3 total.\n", + "All files converted successfully!\n", + "Filling nan values...\n", + "loading complete in 0.05 s\n" + ] + } + ], "source": [ - "sp = SedProcessor(runs=[44797], config=config_file, collect_metadata=False)" + "config={\"core\": {\"paths\": {\"data_raw_dir\": \"../../flash_test_data/fl1user3/\", \"data_parquet_dir\": \"../../flash_test_data/parquet/\"}}}\n", + "sp = SedProcessor(runs=[44638], config=config, user_config=config_file, system_config={}, collect_metadata=False)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Aligning 8s sectors of dataframe\n" + ] + } + ], "source": [ "sp.add_jitter()\n", "sp.align_dld_sectors()" @@ -78,34 +101,476 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9b14b49dafdf4d5faa103de6998833f4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"7d68b3ee-18ab-48d7-8794-cf4a517bcfe8\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"8021\"}],\"center\":[{\"id\":\"8024\"},{\"id\":\"8028\"},{\"id\":\"8061\"}],\"height\":300,\"left\":[{\"id\":\"8025\"}],\"renderers\":[{\"id\":\"8049\"},{\"id\":\"8067\"},{\"id\":\"8086\"},{\"id\":\"8107\"},{\"id\":\"8130\"},{\"id\":\"8155\"}],\"title\":{\"id\":\"8011\"},\"toolbar\":{\"id\":\"8037\"},\"width\":800,\"x_range\":{\"id\":\"8013\"},\"x_scale\":{\"id\":\"8017\"},\"y_range\":{\"id\":\"8015\"},\"y_scale\":{\"id\":\"8019\"}},\"id\":\"8010\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"8053\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8126\"},\"glyph\":{\"id\":\"8127\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8129\"},\"nonselection_glyph\":{\"id\":\"8128\"},\"view\":{\"id\":\"8131\"}},\"id\":\"8130\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"8025\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"8028\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"8063\"}},\"id\":\"8068\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8147\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8029\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8079\"},\"selection_policy\":{\"id\":\"8078\"}},\"id\":\"8063\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8054\",\"type\":\"AllLabels\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"8067\"}]},\"id\":\"8081\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8053\"},\"group\":null,\"major_label_policy\":{\"id\":\"8054\"},\"ticker\":{\"id\":\"8026\"}},\"id\":\"8025\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"8026\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"8174\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8058\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8083\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"8036\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8059\"},\"selection_policy\":{\"id\":\"8058\"}},\"id\":\"8045\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8079\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8045\"},\"glyph\":{\"id\":\"8046\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8048\"},\"nonselection_glyph\":{\"id\":\"8047\"},\"view\":{\"id\":\"8050\"}},\"id\":\"8049\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8175\"},\"selection_policy\":{\"id\":\"8174\"}},\"id\":\"8151\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8078\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"8155\"}]},\"id\":\"8177\",\"type\":\"LegendItem\"},{\"attributes\":{\"tools\":[{\"id\":\"8029\"},{\"id\":\"8030\"},{\"id\":\"8031\"},{\"id\":\"8032\"},{\"id\":\"8033\"},{\"id\":\"8034\"},{\"id\":\"8036\"}]},\"id\":\"8037\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"8030\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"8056\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"8034\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAABAr0AAAAAAAFCvQAAAAAAAYK9AAAAAAABwr0AAAAAAAICvQAAAAAAAkK9AAAAAAACgr0AAAAAAALCvQAAAAAAAwK9AAAAAAADQr0AAAAAAAOCvQAAAAAAA8K9AAAAAAAAAsEAAAAAAAAiwQAAAAAAAELBAAAAAAAAYsEAAAAAAACCwQAAAAAAAKLBAAAAAAAAwsEAAAAAAADiwQAAAAAAAQLBAAAAAAABIsEAAAAAAAFCwQAAAAAAAWLBAAAAAAABgsEAAAAAAAGiwQAAAAAAAcLBAAAAAAAB4sEAAAAAAAICwQAAAAAAAiLBAAAAAAACQsEAAAAAAAJiwQAAAAAAAoLBAAAAAAACosEAAAAAAALCwQAAAAAAAuLBAAAAAAADAsEAAAAAAAMiwQAAAAAAA0LBAAAAAAADYsEAAAAAAAOCwQAAAAAAA6LBAAAAAAADwsEAAAAAAAPiwQAAAAAAAALFAAAAAAAAIsUAAAAAAABCxQAAAAAAAGLFAAAAAAAAgsUAAAAAAACixQAAAAAAAMLFAAAAAAAA4sUAAAAAAAECxQAAAAAAASLFAAAAAAABQsUAAAAAAAFixQAAAAAAAYLFAAAAAAABosUAAAAAAAHCxQAAAAAAAeLFAAAAAAACAsUAAAAAAAIixQAAAAAAAkLFAAAAAAACYsUAAAAAAAKCxQAAAAAAAqLFAAAAAAACwsUAAAAAAALixQAAAAAAAwLFAAAAAAADIsUAAAAAAANCxQAAAAAAA2LFAAAAAAADgsUAAAAAAAOixQAAAAAAA8LFAAAAAAAD4sUAAAAAAAACyQAAAAAAACLJAAAAAAAAQskAAAAAAABiyQAAAAAAAILJAAAAAAAAoskAAAAAAADCyQAAAAAAAOLJAAAAAAABAskAAAAAAAEiyQAAAAAAAULJAAAAAAABYskAAAAAAAGCyQAAAAAAAaLJAAAAAAABwskAAAAAAAHiyQAAAAAAAgLJAAAAAAACIskAAAAAAAJCyQAAAAAAAmLJAAAAAAACgskAAAAAAAKiyQAAAAAAAsLJAAAAAAAC4skAAAAAAAMCyQAAAAAAAyLJAAAAAAADQskAAAAAAANiyQAAAAAAA4LJAAAAAAADoskAAAAAAAPCyQAAAAAAA+LJAAAAAAAAAs0AAAAAAAAizQAAAAAAAELNAAAAAAAAYs0AAAAAAACCzQAAAAAAAKLNAAAAAAAAws0AAAAAAADizQAAAAAAAQLNAAAAAAABIs0AAAAAAAFCzQAAAAAAAWLNAAAAAAABgs0AAAAAAAGizQAAAAAAAcLNAAAAAAAB4s0AAAAAAAICzQAAAAAAAiLNAAAAAAACQs0AAAAAAAJizQAAAAAAAoLNAAAAAAACos0AAAAAAALCzQAAAAAAAuLNAAAAAAADAs0AAAAAAAMizQAAAAAAA0LNAAAAAAADYs0AAAAAAAOCzQAAAAAAA6LNAAAAAAADws0AAAAAAAPizQAAAAAAAALRAAAAAAAAItEAAAAAAABC0QAAAAAAAGLRAAAAAAAAgtEAAAAAAACi0QAAAAAAAMLRAAAAAAAA4tEAAAAAAAEC0QAAAAAAASLRAAAAAAABQtEAAAAAAAFi0QAAAAAAAYLRAAAAAAABotEAAAAAAAHC0QAAAAAAAeLRAAAAAAACAtEAAAAAAAIi0QAAAAAAAkLRAAAAAAACYtEAAAAAAAKC0QAAAAAAAqLRAAAAAAACwtEAAAAAAALi0QAAAAAAAwLRAAAAAAADItEAAAAAAANC0QAAAAAAA2LRAAAAAAADgtEAAAAAAAOi0QAAAAAAA8LRAAAAAAAD4tEAAAAAAAAC1QAAAAAAACLVAAAAAAAAQtUAAAAAAABi1QAAAAAAAILVAAAAAAAAotUAAAAAAADC1QAAAAAAAOLVAAAAAAABAtUAAAAAAAEi1QAAAAAAAULVAAAAAAABYtUAAAAAAAGC1QAAAAAAAaLVAAAAAAABwtUAAAAAAAHi1QAAAAAAAgLVAAAAAAACItUAAAAAAAJC1QAAAAAAAmLVAAAAAAACgtUAAAAAAAKi1QAAAAAAAsLVAAAAAAAC4tUAAAAAAAMC1QAAAAAAAyLVAAAAAAADQtUAAAAAAANi1QAAAAAAA4LVAAAAAAADotUAAAAAAAPC1QAAAAAAA+LVAAAAAAAAAtkAAAAAAAAi2QAAAAAAAELZAAAAAAAAYtkAAAAAAACC2QAAAAAAAKLZAAAAAAAAwtkAAAAAAADi2QAAAAAAAQLZAAAAAAABItkAAAAAAAFC2QAAAAAAAWLZAAAAAAABgtkAAAAAAAGi2QAAAAAAAcLZAAAAAAAB4tkAAAAAAAIC2QAAAAAAAiLZAAAAAAACQtkAAAAAAAJi2QAAAAAAAoLZAAAAAAACotkAAAAAAALC2QAAAAAAAuLZAAAAAAADAtkAAAAAAAMi2QAAAAAAA0LZAAAAAAADYtkAAAAAAAOC2QAAAAAAA6LZAAAAAAADwtkAAAAAAAPi2QAAAAAAAALdAAAAAAAAIt0AAAAAAABC3QAAAAAAAGLdAAAAAAAAgt0AAAAAAACi3QAAAAAAAMLdAAAAAAAA4t0AAAAAAAEC3QAAAAAAASLdAAAAAAABQt0AAAAAAAFi3QAAAAAAAYLdAAAAAAABot0AAAAAAAHC3QAAAAAAAeLdAAAAAAACAt0AAAAAAAIi3QAAAAAAAkLdAAAAAAACYt0AAAAAAAKC3QAAAAAAAqLdAAAAAAACwt0AAAAAAALi3QAAAAAAAwLdAAAAAAADIt0AAAAAAANC3QAAAAAAA2LdAAAAAAADgt0AAAAAAAOi3QAAAAAAA8LdAAAAAAAD4t0AAAAAAAAC4QAAAAAAACLhAAAAAAAAQuEAAAAAAABi4QAAAAAAAILhAAAAAAAAouEAAAAAAADC4QAAAAAAAOLhAAAAAAABAuEAAAAAAAEi4QAAAAAAAULhAAAAAAABYuEAAAAAAAGC4QAAAAAAAaLhAAAAAAABwuEAAAAAAAHi4QAAAAAAAgLhAAAAAAACIuEAAAAAAAJC4QAAAAAAAmLhAAAAAAACguEAAAAAAAKi4QAAAAAAAsLhAAAAAAAC4uEAAAAAAAMC4QAAAAAAAyLhAAAAAAADQuEAAAAAAANi4QAAAAAAA4LhAAAAAAADouEAAAAAAAPC4QAAAAAAA+LhAAAAAAAAAuUAAAAAAAAi5QAAAAAAAELlAAAAAAAAYuUAAAAAAACC5QAAAAAAAKLlAAAAAAAAwuUAAAAAAADi5QAAAAAAAQLlAAAAAAABIuUAAAAAAAFC5QAAAAAAAWLlAAAAAAABguUAAAAAAAGi5QAAAAAAAcLlAAAAAAAB4uUAAAAAAAIC5QAAAAAAAiLlAAAAAAACQuUAAAAAAAJi5QAAAAAAAoLlAAAAAAACouUAAAAAAALC5QAAAAAAAuLlAAAAAAADAuUAAAAAAAMi5QAAAAAAA0LlAAAAAAADYuUAAAAAAAOC5QAAAAAAA6LlAAAAAAADwuUAAAAAAAPi5QAAAAAAAALpAAAAAAAAIukAAAAAAABC6QAAAAAAAGLpAAAAAAAAgukAAAAAAACi6QAAAAAAAMLpAAAAAAAA4ukAAAAAAAEC6QAAAAAAASLpAAAAAAABQukAAAAAAAFi6QAAAAAAAYLpAAAAAAABoukAAAAAAAHC6QAAAAAAAeLpAAAAAAACAukAAAAAAAIi6QAAAAAAAkLpAAAAAAACYukAAAAAAAKC6QAAAAAAAqLpAAAAAAACwukAAAAAAALi6QAAAAAAAwLpAAAAAAADIukAAAAAAANC6QAAAAAAA2LpAAAAAAADgukAAAAAAAOi6QAAAAAAA8LpAAAAAAAD4ukAAAAAAAAC7QAAAAAAACLtAAAAAAAAQu0AAAAAAABi7QAAAAAAAILtAAAAAAAAou0AAAAAAADC7QAAAAAAAOLtAAAAAAABAu0AAAAAAAEi7QAAAAAAAULtAAAAAAABYu0AAAAAAAGC7QAAAAAAAaLtAAAAAAABwu0AAAAAAAHi7QAAAAAAAgLtAAAAAAACIu0AAAAAAAJC7QAAAAAAAmLtAAAAAAACgu0AAAAAAAKi7QAAAAAAAsLtAAAAAAAC4u0AAAAAAAMC7QAAAAAAAyLtAAAAAAADQu0AAAAAAANi7QAAAAAAA4LtAAAAAAADou0AAAAAAAPC7QAAAAAAA+LtAAAAAAAAAvEAAAAAAAAi8QAAAAAAAELxAAAAAAAAYvEAAAAAAACC8QAAAAAAAKLxAAAAAAAAwvEAAAAAAADi8QAAAAAAAQLxAAAAAAABIvEAAAAAAAFC8QAAAAAAAWLxAAAAAAABgvEAAAAAAAGi8QAAAAAAAcLxAAAAAAAB4vEAAAAAAAIC8QAAAAAAAiLxAAAAAAACQvEAAAAAAAJi8QAAAAAAAoLxAAAAAAACovEAAAAAAALC8QAAAAAAAuLxAAAAAAADAvEAAAAAAAMi8QAAAAAAA0LxAAAAAAADYvEAAAAAAAOC8QAAAAAAA6LxAAAAAAADwvEAAAAAAAPi8QAAAAAAAAL1AAAAAAAAIvUAAAAAAABC9QAAAAAAAGL1AAAAAAAAgvUAAAAAAACi9QAAAAAAAML1AAAAAAAA4vUAAAAAAAEC9QAAAAAAASL1AAAAAAABQvUAAAAAAAFi9QAAAAAAAYL1AAAAAAABovUAAAAAAAHC9QAAAAAAAeL1AAAAAAACAvUAAAAAAAIi9QAAAAAAAkL1AAAAAAACYvUAAAAAAAKC9QAAAAAAAqL1AAAAAAACwvUAAAAAAALi9QAAAAAAAwL1AAAAAAADIvUAAAAAAANC9QAAAAAAA2L1AAAAAAADgvUAAAAAAAOi9QAAAAAAA8L1AAAAAAAD4vUAAAAAAAAC+QAAAAAAACL5AAAAAAAAQvkAAAAAAABi+QAAAAAAAIL5AAAAAAAAovkAAAAAAADC+QAAAAAAAOL5AAAAAAABAvkAAAAAAAEi+QAAAAAAAUL5AAAAAAABYvkAAAAAAAGC+QAAAAAAAaL5AAAAAAABwvkAAAAAAAHi+QAAAAAAAgL5AAAAAAACIvkAAAAAAAJC+QAAAAAAAmL5AAAAAAACgvkAAAAAAAKi+QAAAAAAAsL5AAAAAAAC4vkAAAAAAAMC+QAAAAAAAyL5AAAAAAADQvkAAAAAAANi+QAAAAAAA4L5AAAAAAADovkAAAAAAAPC+QAAAAAAA+L5AAAAAAAAAv0AAAAAAAAi/QAAAAAAAEL9AAAAAAAAYv0AAAAAAACC/QAAAAAAAKL9AAAAAAAAwv0AAAAAAADi/QA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8148\"},\"selection_policy\":{\"id\":\"8147\"}},\"id\":\"8126\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8059\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"8151\"}},\"id\":\"8156\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8033\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8128\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8126\"}},\"id\":\"8131\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8151\"},\"glyph\":{\"id\":\"8152\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8154\"},\"nonselection_glyph\":{\"id\":\"8153\"},\"view\":{\"id\":\"8156\"}},\"id\":\"8155\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8129\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8175\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8046\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8063\"},\"glyph\":{\"id\":\"8064\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8066\"},\"nonselection_glyph\":{\"id\":\"8065\"},\"view\":{\"id\":\"8068\"}},\"id\":\"8067\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8066\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"8035\"}},\"id\":\"8031\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"8130\"}]},\"id\":\"8150\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8152\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8148\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8065\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8032\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"8057\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"8062\"},{\"id\":\"8081\"},{\"id\":\"8102\"},{\"id\":\"8125\"},{\"id\":\"8150\"},{\"id\":\"8177\"}],\"padding\":2,\"spacing\":0},\"id\":\"8061\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8154\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"8035\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8153\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8104\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8022\",\"type\":\"BasicTicker\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"8086\"}]},\"id\":\"8102\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"8045\"}},\"id\":\"8050\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"8049\"}]},\"id\":\"8062\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8048\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8082\"},\"glyph\":{\"id\":\"8083\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8085\"},\"nonselection_glyph\":{\"id\":\"8084\"},\"view\":{\"id\":\"8087\"}},\"id\":\"8086\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"8021\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"8024\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8127\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8084\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8064\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8100\"},\"selection_policy\":{\"id\":\"8099\"}},\"id\":\"8082\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8019\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"8099\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8013\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"8100\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8103\"},\"glyph\":{\"id\":\"8104\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8106\"},\"nonselection_glyph\":{\"id\":\"8105\"},\"view\":{\"id\":\"8108\"}},\"id\":\"8107\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8056\"},\"group\":null,\"major_label_policy\":{\"id\":\"8057\"},\"ticker\":{\"id\":\"8022\"}},\"id\":\"8021\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"8011\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8085\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8105\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8082\"}},\"id\":\"8087\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8122\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8017\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8123\"},\"selection_policy\":{\"id\":\"8122\"}},\"id\":\"8103\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8106\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8123\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"8107\"}]},\"id\":\"8125\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8047\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8103\"}},\"id\":\"8108\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8015\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"8010\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"7d68b3ee-18ab-48d7-8794-cf4a517bcfe8\",\"root_ids\":[\"8010\"],\"roots\":{\"8010\":\"e9fd15e1-328f-45f3-9f33-8855e83c023f\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "8010" + } + }, + "output_type": "display_data" + } + ], "source": [ "sp.load_bias_series(binned_data=res)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "dcb19f777b08441ea29a675c7923a373", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(IntSlider(value=3, description='refid', max=10), IntRangeSlider(value=(5500, 6000), desc…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fc63a9127fc54df88b617e3d9cc21670", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='apply', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "141baa7d1b0b41d9bba895c2a47bd7a8", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "ranges=(5500, 6000)\n", + "ref_id=3\n", + "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Adding time-of-flight column in nanoseconds to dataframe:\n" + ] + } + ], + "source": [ + "sp.append_tof_ns_axis()" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trainIdpulseIdelectronIdtimeStampdldPosXdldPosYdldTimeStepscryoTemperaturecrystalVoltagedldTimeBinSize...sampleBiassampleTemperaturetofVoltagepulserSignAdcmonochromatorPhotonEnergygmdBdabamdelayStagedldSectorIDdldTime
01640388889301.678800e+09623.785094649.7850945710.785156301.76001-0.0015240.020576...0.001856302.739999.998935014.0NaNNaN-846.53125NaN13760.187814
11640388889311.678800e+09625.367363647.3673635711.367188301.76001-0.0015240.020576...0.001856302.739999.998935014.0NaNNaN-846.53125NaN43760.571044
21640388889401.678800e+09684.003223663.0032235726.003418301.76001-0.0015240.020576...0.001856302.739999.998935023.0NaNNaN-846.09375NaN13770.208068
31640388889411.678800e+09684.512967679.5129675724.513184301.76001-0.0015240.020576...0.001856302.739999.998935023.0NaNNaN-846.09375NaN03769.226844
41640388889421.678800e+09685.691489661.6914895721.691406301.76001-0.0015240.020576...0.001856302.739999.998935023.0NaNNaN-846.09375NaN73767.368884
\n", + "

5 rows × 22 columns

\n", + "
" + ], + "text/plain": [ + " trainId pulseId electronId timeStamp dldPosX dldPosY \\\n", + "0 1640388889 3 0 1.678800e+09 623.785094 649.785094 \n", + "1 1640388889 3 1 1.678800e+09 625.367363 647.367363 \n", + "2 1640388889 4 0 1.678800e+09 684.003223 663.003223 \n", + "3 1640388889 4 1 1.678800e+09 684.512967 679.512967 \n", + "4 1640388889 4 2 1.678800e+09 685.691489 661.691489 \n", + "\n", + " dldTimeSteps cryoTemperature crystalVoltage dldTimeBinSize ... \\\n", + "0 5710.785156 301.76001 -0.001524 0.020576 ... \n", + "1 5711.367188 301.76001 -0.001524 0.020576 ... \n", + "2 5726.003418 301.76001 -0.001524 0.020576 ... \n", + "3 5724.513184 301.76001 -0.001524 0.020576 ... \n", + "4 5721.691406 301.76001 -0.001524 0.020576 ... \n", + "\n", + " sampleBias sampleTemperature tofVoltage pulserSignAdc \\\n", + "0 0.001856 302.73999 9.9989 35014.0 \n", + "1 0.001856 302.73999 9.9989 35014.0 \n", + "2 0.001856 302.73999 9.9989 35023.0 \n", + "3 0.001856 302.73999 9.9989 35023.0 \n", + "4 0.001856 302.73999 9.9989 35023.0 \n", + "\n", + " monochromatorPhotonEnergy gmdBda bam delayStage dldSectorID \\\n", + "0 NaN NaN -846.53125 NaN 1 \n", + "1 NaN NaN -846.53125 NaN 4 \n", + "2 NaN NaN -846.09375 NaN 1 \n", + "3 NaN NaN -846.09375 NaN 0 \n", + "4 NaN NaN -846.09375 NaN 7 \n", + "\n", + " dldTime \n", + "0 3760.187814 \n", + "1 3760.571044 \n", + "2 3770.208068 \n", + "3 3769.226844 \n", + "4 3767.368884 \n", + "\n", + "[5 rows x 22 columns]" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sp.dataframe.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[Fit Statistics]]\n", + " # fitting method = leastsq\n", + " # function evals = 8\n", + " # data points = 6\n", + " # variables = 3\n", + " chi-square = 17.5000000\n", + " reduced chi-square = 5.83333333\n", + " Akaike info crit = 12.4226485\n", + " Bayesian info crit = 11.7979269\n", + "## Warning: uncertainties could not be estimated:\n", + " d: at initial value\n", + " t0: at initial value\n", + "[[Variables]]\n", + " d: 1.00000000 (init = 1)\n", + " t0: 1.0000e-06 (init = 1e-06)\n", + " E0: -2.50000000 (init = -5)\n", + "Quality of Calibration:\n" + ] + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"8a6ef920-e603-47f9-9416-332553aab112\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"8629\"}],\"center\":[{\"id\":\"8632\"},{\"id\":\"8636\"},{\"id\":\"8669\"}],\"height\":300,\"left\":[{\"id\":\"8633\"}],\"renderers\":[{\"id\":\"8657\"},{\"id\":\"8675\"},{\"id\":\"8694\"},{\"id\":\"8715\"},{\"id\":\"8738\"},{\"id\":\"8763\"}],\"title\":{\"id\":\"8619\"},\"toolbar\":{\"id\":\"8645\"},\"width\":800,\"x_range\":{\"id\":\"8621\"},\"x_scale\":{\"id\":\"8625\"},\"y_range\":{\"id\":\"8623\"},\"y_scale\":{\"id\":\"8627\"}},\"id\":\"8618\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8661\"},\"group\":null,\"major_label_policy\":{\"id\":\"8662\"},\"ticker\":{\"id\":\"8634\"}},\"id\":\"8633\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8687\"},\"selection_policy\":{\"id\":\"8686\"}},\"id\":\"8671\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8630\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"8643\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"8686\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"8675\"}]},\"id\":\"8689\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"8687\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"8627\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"8629\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"8632\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"8634\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"8633\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"8636\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8654\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8623\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8713\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8711\"}},\"id\":\"8716\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8625\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8674\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"8619\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"8671\"}},\"id\":\"8676\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8637\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"8666\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8664\"},\"group\":null,\"major_label_policy\":{\"id\":\"8665\"},\"ticker\":{\"id\":\"8630\"}},\"id\":\"8629\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8673\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8664\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"8667\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8691\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"8644\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8671\"},\"glyph\":{\"id\":\"8672\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8674\"},\"nonselection_glyph\":{\"id\":\"8673\"},\"view\":{\"id\":\"8676\"}},\"id\":\"8675\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8714\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8621\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"8661\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8711\"},\"glyph\":{\"id\":\"8712\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8714\"},\"nonselection_glyph\":{\"id\":\"8713\"},\"view\":{\"id\":\"8716\"}},\"id\":\"8715\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"8662\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8672\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8641\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"8640\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"8642\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"8707\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8638\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8734\"},\"glyph\":{\"id\":\"8735\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8737\"},\"nonselection_glyph\":{\"id\":\"8736\"},\"view\":{\"id\":\"8739\"}},\"id\":\"8738\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"8755\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8756\"},\"selection_policy\":{\"id\":\"8755\"}},\"id\":\"8734\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8736\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8690\"},\"glyph\":{\"id\":\"8691\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8693\"},\"nonselection_glyph\":{\"id\":\"8692\"},\"view\":{\"id\":\"8695\"}},\"id\":\"8694\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8737\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8734\"}},\"id\":\"8739\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"8643\"}},\"id\":\"8639\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"8782\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8692\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"8738\"}]},\"id\":\"8758\",\"type\":\"LegendItem\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8708\"},\"selection_policy\":{\"id\":\"8707\"}},\"id\":\"8690\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8756\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8693\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8690\"}},\"id\":\"8695\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"8653\"}},\"id\":\"8658\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"8657\"}]},\"id\":\"8670\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"8694\"}]},\"id\":\"8710\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8655\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8708\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8759\"},\"glyph\":{\"id\":\"8760\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8762\"},\"nonselection_glyph\":{\"id\":\"8761\"},\"view\":{\"id\":\"8764\"}},\"id\":\"8763\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8667\"},\"selection_policy\":{\"id\":\"8666\"}},\"id\":\"8653\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8760\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"8763\"}]},\"id\":\"8785\",\"type\":\"LegendItem\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8783\"},\"selection_policy\":{\"id\":\"8782\"}},\"id\":\"8759\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8761\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8735\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8762\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8759\"}},\"id\":\"8764\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"8670\"},{\"id\":\"8689\"},{\"id\":\"8710\"},{\"id\":\"8733\"},{\"id\":\"8758\"},{\"id\":\"8785\"}],\"padding\":2,\"spacing\":0},\"id\":\"8669\",\"type\":\"Legend\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8712\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8783\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"8637\"},{\"id\":\"8638\"},{\"id\":\"8639\"},{\"id\":\"8640\"},{\"id\":\"8641\"},{\"id\":\"8642\"},{\"id\":\"8644\"}]},\"id\":\"8645\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"DfYfOBQY9jcORKw3EOBENwAAAAAAAAAAEOBENxDgRDcQ4EQ3EOBENxDgRDcQ4EQ3EOBENwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgxDYQ4EQ3EOBENxDgRDcQ4EQ3EOBENxDgRDcQ4MQ2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ4EQ3EOBENxDgRDcQ4EQ3EOBENxDgRDcQ4EQ3AAAAAAAAAAAAAAAAAAAAABDgRDcQ4EQ3EOBENxDgRDcQ4EQ3EOBENxDgRDcAAAAAAAAAAAAAAAAAAAAAEOBENxDgRDcQ4EQ3EOBENxDgxDcMqBM4DKgTOBDgxDcQ4MQ3EODENxDgxDcQ4EQ3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEOBENxDgRDcQ4EQ3EOBENxDgRDcQ4EQ3EOBENwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ4MQ2EODENhDgxDYQ4MQ2EODENgyokzcMqJM3EOBENxDgRDcQ4EQ3EODENxDgxDcQ4EQ3EOBENxDgRDcMqJM3DKiTNxDgxDYQ4MQ2EODENhDgxDYQ4MQ2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgxDYQ4MQ2EODENgyokzcMqJM3DKiTNxQY9jcQ4MQ3EODENxDgxDcQ4EQ3EODENxDgxDcQ4EQ3EOBENxDgxDcQ4MQ3EODENxDgRDcQ4EQ3EOBENxDgRDcAAAAAAAAAAAAAAAAQ4EQ3EOBENxDgRDcQ4EQ3EOBENxDgRDcQ4EQ3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDgxDcQ4MQ3DKgTOI4wqTk1ens7vfWkPJSqYT3NrcE99mH/PasSET7f4R0+Ss8kPk4VHT5x8gA+v9S+PTznjD3EQ2w9SdlOPY0QPT17vjY9cv86PZv0Sj3Ssmc9hKKJPRmYpj1QE8I9/lHXPXM45j0xEe49kEjuPfl15j1P89U9vKnHPcImvD0L1rM9LQWuPTq3qj05Fqc9KOumPWp8pj3Npqc9XMqpPV5rrT2Q+LI9h9q6PY6VxT3PnNE9AmzePVn78j3i9QQ+EzATPipRJD5GUTY+NIBHPj0DXD46OnE+c0aDPlBcjz4Dnps+I62pPhS0uj6sYsw+Ql7fPmSU8z7YXAQ/+4kOP76OGD/F/CE/6RosP3xsNT/ulj8/MSlKP2b4Vj9LDWU/gW51PwAAgD/DDHA/NFlWP3lYOT9W3hg/T7XpPrVYmj5NUCM+av/sPTMayj1JCqs9g66OPZmobT2nwkI94J4cPW+T8TzC08Q868alPLH5jDz7IXU8zahWPBf+PDzmwy48/pIpPEldIjyYNhc8b0EHPEKP5TtPVsM7HaeiO7SNfjufVj47TWweO6vPDztrMgs7S/cLOwyBDTvrHgg79AP9OnPw+TrUyP06220FO9ttBTt7vAc7PJQVO52THzs9CSg77ggtO+4ILTuPfjU7DmsyO+3hJjt9WCA7jQkjOw0dJjvNpic7jOIcO/xEHTscgBw7vc4eO4y7FjvblAs7m/cGO6uoCTtaWgI7q6gJOyu8DDurqAk7fOMNO+tFDjus9hU7/EQdO2yAFzuLbQo725QLO2syCzt8ChQ7y+MIO3u8BzvLvAI7epUBO5Qr+TrUevE6EVXXOpBB1DruVrk6TuGwOo9+tTrNpqc6rB2cOqvPjzorvIw6jLuWOm2nnTrsk5o6bc6jOu26oDrt4aY6baedOssKjzqKRoQ6FPFvOipugDrLvII6FBh2OpMEczqUK3k6lCt5OkvQhTrUenE60d5YOlLLVTrQkEw60EJAOo9XLzpMRRg6kwTzORTx7zmQGs45j6W7OYzinDmKRoQ5EOBEOQ0dJjkSyuk4FBh2OBQY9jcQ4MQ3EOBENxDgRDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEODENhDgxDYQ4MQ2EODENhDgxDYQ4MQ2EODENgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8731\"},\"selection_policy\":{\"id\":\"8730\"}},\"id\":\"8711\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8665\",\"type\":\"AllLabels\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"8715\"}]},\"id\":\"8733\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"8730\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8731\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8656\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8653\"},\"glyph\":{\"id\":\"8654\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8656\"},\"nonselection_glyph\":{\"id\":\"8655\"},\"view\":{\"id\":\"8658\"}},\"id\":\"8657\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"8618\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"8a6ef920-e603-47f9-9416-332553aab112\",\"root_ids\":[\"8618\"],\"roots\":{\"8618\":\"b5f7858d-2549-4f22-98c8-97ca1e21710c\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "8618" + } + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "E/TOF relationship:\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bf982a1ff057404fbf5296459cd04d52", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "ranges=(4250, 4500)\n", "ref_id=3\n", - "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" + "ref_energy=0\n", + "sp.calibrate_energy_axis(\n", + " ref_id=ref_id,\n", + " ref_energy=ref_energy,\n", + " method=\"lmfit\",\n", + " energy_scale='kinetic',\n", + ")" ] }, { @@ -117,11 +582,11 @@ "ref_id=3\n", "ref_energy=0\n", "sp.calibrate_energy_axis(\n", - " ref_id=ref_id, \n", + " ref_id=ref_id,\n", " ref_energy=ref_energy,\n", " method=\"lmfit\",\n", " energy_scale='kinetic',\n", - " d={'value':1e9, 'min': 1e8, 'max': 1e10},\n", + " d={'value':1, 'min': 1, 'max': 1},\n", " E0={'value':0, 'min': -100, 'max': 100,'vary':True},\n", " t0={'value':225, 'min': -100, 'max': 250, 'vary':True},\n", ")" @@ -184,7 +649,7 @@ "outputs": [], "source": [ "sp.apply_energy_offset(\n", - " constant=-31.5, \n", + " constant=-31.5,\n", " columns=['sampleBias'],\n", " signs=[+1],\n", ")" @@ -282,8 +747,8 @@ "ref_id=3\n", "ref_energy=-0.3\n", "sp.calibrate_energy_axis(\n", - " ref_id=ref_id, \n", - " ref_energy=-0.3, \n", + " ref_id=ref_id,\n", + " ref_energy=-0.3,\n", " method=\"lstsq\",\n", " order=2,\n", ")" @@ -328,7 +793,7 @@ "outputs": [], "source": [ "sp.apply_energy_offset(\n", - " constant=-31.5, \n", + " constant=-31.5,\n", " columns=['sampleBias'],\n", " signs=[+1],\n", ")" @@ -404,7 +869,7 @@ "outputs": [], "source": [ "sp.apply_energy_offset(\n", - " constant=+31.5, \n", + " constant=+31.5,\n", " columns=['sampleBias'],\n", " signs=[-1],\n", ")" @@ -497,9 +962,9 @@ ], "metadata": { "kernelspec": { - "display_name": "sed38", + "display_name": ".pyenv", "language": "python", - "name": "sed38" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -511,7 +976,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.18" + "version": "3.8.12" } }, "nbformat": 4, diff --git a/tutorial/Flash energy calibration.ipynb b/tutorial/Flash energy calibration.ipynb index dceacdbb..1e3cae0f 100755 --- a/tutorial/Flash energy calibration.ipynb +++ b/tutorial/Flash energy calibration.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "39b2e62a", "metadata": {}, "outputs": [], @@ -38,30 +38,116 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "7dabbe92", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Folder config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/sed_config.yaml]\n", + "System config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/config_flash_energy_calib.yaml]\n", + "Default config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/config/default.yaml]\n", + "Reading files: 3 new files of 3 total.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[Parallel(n_jobs=3)]: Using backend LokyBackend with 3 concurrent workers.\n", + "[Parallel(n_jobs=3)]: Done 3 out of 3 | elapsed: 58.6s remaining: 0.0s\n", + "[Parallel(n_jobs=3)]: Done 3 out of 3 | elapsed: 58.6s finished\n" + ] + }, + { + "ename": "RuntimeError", + "evalue": "Conversion failed for some files. [KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps'])]", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/Flash energy calibration.ipynb Cell 4\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> 1\u001b[0m sp \u001b[39m=\u001b[39m SedProcessor(runs\u001b[39m=\u001b[39;49m[\u001b[39m44638\u001b[39;49m], config\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mcore\u001b[39;49m\u001b[39m\"\u001b[39;49m: {\u001b[39m\"\u001b[39;49m\u001b[39mpaths\u001b[39;49m\u001b[39m\"\u001b[39;49m: {\u001b[39m\"\u001b[39;49m\u001b[39mdata_raw_dir\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m../../flash_test_data/fl1user3/\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mdata_parquet_dir\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m../../flash_test_data/parquet/\u001b[39;49m\u001b[39m\"\u001b[39;49m}}}, system_config\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mconfig_flash_energy_calib.yaml\u001b[39;49m\u001b[39m\"\u001b[39;49m)\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/processor.py:144\u001b[0m, in \u001b[0;36mSedProcessor.__init__\u001b[0;34m(self, metadata, config, dataframe, files, folder, runs, collect_metadata, **kwds)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[39m# Load data if provided:\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \u001b[39mif\u001b[39;00m dataframe \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m files \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m folder \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m runs \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m--> 144\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mload(\n\u001b[1;32m 145\u001b[0m dataframe\u001b[39m=\u001b[39;49mdataframe,\n\u001b[1;32m 146\u001b[0m metadata\u001b[39m=\u001b[39;49mmetadata,\n\u001b[1;32m 147\u001b[0m files\u001b[39m=\u001b[39;49mfiles,\n\u001b[1;32m 148\u001b[0m folder\u001b[39m=\u001b[39;49mfolder,\n\u001b[1;32m 149\u001b[0m runs\u001b[39m=\u001b[39;49mruns,\n\u001b[1;32m 150\u001b[0m collect_metadata\u001b[39m=\u001b[39;49mcollect_metadata,\n\u001b[1;32m 151\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds,\n\u001b[1;32m 152\u001b[0m )\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/processor.py:300\u001b[0m, in \u001b[0;36mSedProcessor.load\u001b[0;34m(self, dataframe, metadata, files, folder, runs, collect_metadata, **kwds)\u001b[0m\n\u001b[1;32m 292\u001b[0m dataframe, metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mloader\u001b[39m.\u001b[39mread_dataframe(\n\u001b[1;32m 293\u001b[0m folders\u001b[39m=\u001b[39mcast(\u001b[39mstr\u001b[39m, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcpy(folder)),\n\u001b[1;32m 294\u001b[0m runs\u001b[39m=\u001b[39mruns,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwds,\n\u001b[1;32m 298\u001b[0m )\n\u001b[1;32m 299\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 300\u001b[0m dataframe, metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mloader\u001b[39m.\u001b[39;49mread_dataframe(\n\u001b[1;32m 301\u001b[0m runs\u001b[39m=\u001b[39;49mruns,\n\u001b[1;32m 302\u001b[0m metadata\u001b[39m=\u001b[39;49mmetadata,\n\u001b[1;32m 303\u001b[0m collect_metadata\u001b[39m=\u001b[39;49mcollect_metadata,\n\u001b[1;32m 304\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds,\n\u001b[1;32m 305\u001b[0m )\n\u001b[1;32m 307\u001b[0m \u001b[39melif\u001b[39;00m folder \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 308\u001b[0m dataframe, metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mloader\u001b[39m.\u001b[39mread_dataframe(\n\u001b[1;32m 309\u001b[0m folders\u001b[39m=\u001b[39mcast(\u001b[39mstr\u001b[39m, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcpy(folder)),\n\u001b[1;32m 310\u001b[0m metadata\u001b[39m=\u001b[39mmetadata,\n\u001b[1;32m 311\u001b[0m collect_metadata\u001b[39m=\u001b[39mcollect_metadata,\n\u001b[1;32m 312\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwds,\n\u001b[1;32m 313\u001b[0m )\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/loader/flash/loader.py:857\u001b[0m, in \u001b[0;36mFlashLoader.read_dataframe\u001b[0;34m(self, files, folders, runs, ftype, metadata, collect_metadata, **kwds)\u001b[0m\n\u001b[1;32m 847\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 848\u001b[0m \u001b[39m# This call takes care of files and folders. As we have converted runs into files\u001b[39;00m\n\u001b[1;32m 849\u001b[0m \u001b[39m# already, they are just stored in the class by this call.\u001b[39;00m\n\u001b[1;32m 850\u001b[0m \u001b[39msuper\u001b[39m()\u001b[39m.\u001b[39mread_dataframe(\n\u001b[1;32m 851\u001b[0m files\u001b[39m=\u001b[39mfiles,\n\u001b[1;32m 852\u001b[0m folders\u001b[39m=\u001b[39mfolders,\n\u001b[1;32m 853\u001b[0m ftype\u001b[39m=\u001b[39mftype,\n\u001b[1;32m 854\u001b[0m metadata\u001b[39m=\u001b[39mmetadata,\n\u001b[1;32m 855\u001b[0m )\n\u001b[0;32m--> 857\u001b[0m dataframe \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mparquet_handler(data_parquet_dir, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds)\n\u001b[1;32m 859\u001b[0m metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mparse_metadata() \u001b[39mif\u001b[39;00m collect_metadata \u001b[39melse\u001b[39;00m {}\n\u001b[1;32m 860\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mloading complete in \u001b[39m\u001b[39m{\u001b[39;00mtime\u001b[39m.\u001b[39mtime() \u001b[39m-\u001b[39m t0\u001b[39m:\u001b[39;00m\u001b[39m.2f\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m s\u001b[39m\u001b[39m\"\u001b[39m)\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/loader/flash/loader.py:741\u001b[0m, in \u001b[0;36mFlashLoader.parquet_handler\u001b[0;34m(self, data_parquet_dir, detector, parquet_path, converted, load_parquet, save_parquet)\u001b[0m\n\u001b[1;32m 734\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 735\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mThe final parquet for this run(s) does not exist yet. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 736\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mIf it is in another location, please provide the path as parquet_path.\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 737\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39mexc\u001b[39;00m\n\u001b[1;32m 739\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 740\u001b[0m \u001b[39m# Obtain the filenames from the method which handles buffer file creation/reading\u001b[39;00m\n\u001b[0;32m--> 741\u001b[0m _, parquet_filenames \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mbuffer_file_handler(\n\u001b[1;32m 742\u001b[0m data_parquet_dir,\n\u001b[1;32m 743\u001b[0m detector,\n\u001b[1;32m 744\u001b[0m )\n\u001b[1;32m 745\u001b[0m \u001b[39m# Read all parquet files into one dataframe using dask\u001b[39;00m\n\u001b[1;32m 746\u001b[0m dataframe \u001b[39m=\u001b[39m dd\u001b[39m.\u001b[39mread_parquet(parquet_filenames, calculate_divisions\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/loader/flash/loader.py:677\u001b[0m, in \u001b[0;36mFlashLoader.buffer_file_handler\u001b[0;34m(self, data_parquet_dir, detector)\u001b[0m\n\u001b[1;32m 672\u001b[0m error \u001b[39m=\u001b[39m Parallel(n_jobs\u001b[39m=\u001b[39m\u001b[39mlen\u001b[39m(files_to_read), verbose\u001b[39m=\u001b[39m\u001b[39m10\u001b[39m)(\n\u001b[1;32m 673\u001b[0m delayed(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcreate_buffer_file)(h5_path, parquet_path)\n\u001b[1;32m 674\u001b[0m \u001b[39mfor\u001b[39;00m h5_path, parquet_path \u001b[39min\u001b[39;00m files_to_read\n\u001b[1;32m 675\u001b[0m )\n\u001b[1;32m 676\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39many\u001b[39m(error):\n\u001b[0;32m--> 677\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mConversion failed for some files. \u001b[39m\u001b[39m{\u001b[39;00merror\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 679\u001b[0m \u001b[39m# Raise an error if the conversion failed for any files\u001b[39;00m\n\u001b[1;32m 680\u001b[0m \u001b[39m# TODO: merge this and the previous error trackings\u001b[39;00m\n\u001b[1;32m 681\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfailed_files_error:\n", + "\u001b[0;31mRuntimeError\u001b[0m: Conversion failed for some files. [KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps'])]" + ] + } + ], "source": [ - "sp = SedProcessor(runs=[44638], config=\"config_flash_energy_calib.yaml\", system_config={})" + "sp = SedProcessor(runs=[44638], config={\"core\": {\"paths\": {\"data_raw_dir\": \"../../flash_test_data/fl1user3/\", \"data_parquet_dir\": \"../../flash_test_data/parquet/\"}}}, system_config=\"config_flash_energy_calib.yaml\")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "248a41a7", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ValueError", + "evalue": "Metadata inference failed in `apply_jitter`.\n\nYou have supplied a custom function and Dask is unable to \ndetermine the type of output that that function returns. \n\nTo resolve this please provide a meta= keyword.\nThe docstring of the Dask function you ran should have more information.\n\nOriginal error is below:\n------------------------\nKeyError('dldTimeSteps')\n\nTraceback:\n---------\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py\", line 192, in raise_on_meta_error\n yield\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py\", line 6782, in _emulate\n return func(*_extract_meta(args, True), **_extract_meta(kwargs, True))\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/dfops.py\", line 68, in apply_jitter\n df[col_jittered] = df[col] + amp * jitter\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/frame.py\", line 3804, in __getitem__\n indexer = self.columns.get_loc(key)\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py\", line 3805, in get_loc\n raise KeyError(key) from err\n", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py:3803\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m-> 3803\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[1;32m 3804\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'dldTimeSteps'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py:192\u001b[0m, in \u001b[0;36mraise_on_meta_error\u001b[0;34m(funcname, udf)\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 192\u001b[0m \u001b[39myield\u001b[39;00m\n\u001b[1;32m 193\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6782\u001b[0m, in \u001b[0;36m_emulate\u001b[0;34m(func, udf, *args, **kwargs)\u001b[0m\n\u001b[1;32m 6781\u001b[0m \u001b[39mwith\u001b[39;00m raise_on_meta_error(funcname(func), udf\u001b[39m=\u001b[39mudf), check_numeric_only_deprecation():\n\u001b[0;32m-> 6782\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49m_extract_meta(args, \u001b[39mTrue\u001b[39;49;00m), \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49m_extract_meta(kwargs, \u001b[39mTrue\u001b[39;49;00m))\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/dfops.py:68\u001b[0m, in \u001b[0;36mapply_jitter\u001b[0;34m(df, cols, cols_jittered, amps, jitter_type)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mfor\u001b[39;00m (col, col_jittered, amp) \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(cols, cols_jittered, amps):\n\u001b[0;32m---> 68\u001b[0m df[col_jittered] \u001b[39m=\u001b[39m df[col] \u001b[39m+\u001b[39m amp \u001b[39m*\u001b[39m jitter\n\u001b[1;32m 70\u001b[0m \u001b[39mreturn\u001b[39;00m df\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/frame.py:3804\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3803\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 3804\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[1;32m 3805\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py:3805\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3804\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n\u001b[0;32m-> 3805\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[1;32m 3806\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[1;32m 3807\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3808\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3809\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n", + "\u001b[0;31mKeyError\u001b[0m: 'dldTimeSteps'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/Flash energy calibration.ipynb Cell 5\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> 1\u001b[0m sp\u001b[39m.\u001b[39;49madd_jitter()\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/processor.py:1331\u001b[0m, in \u001b[0;36mSedProcessor.add_jitter\u001b[0;34m(self, cols, amps, **kwds)\u001b[0m\n\u001b[1;32m 1328\u001b[0m \u001b[39mif\u001b[39;00m amps \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 1329\u001b[0m amps \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_config[\u001b[39m\"\u001b[39m\u001b[39mdataframe\u001b[39m\u001b[39m\"\u001b[39m][\u001b[39m\"\u001b[39m\u001b[39mjitter_amps\u001b[39m\u001b[39m\"\u001b[39m]\n\u001b[0;32m-> 1331\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_dataframe \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_dataframe\u001b[39m.\u001b[39;49mmap_partitions(\n\u001b[1;32m 1332\u001b[0m apply_jitter,\n\u001b[1;32m 1333\u001b[0m cols\u001b[39m=\u001b[39;49mcols,\n\u001b[1;32m 1334\u001b[0m cols_jittered\u001b[39m=\u001b[39;49mcols,\n\u001b[1;32m 1335\u001b[0m amps\u001b[39m=\u001b[39;49mamps,\n\u001b[1;32m 1336\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds,\n\u001b[1;32m 1337\u001b[0m )\n\u001b[1;32m 1338\u001b[0m metadata \u001b[39m=\u001b[39m []\n\u001b[1;32m 1339\u001b[0m \u001b[39mfor\u001b[39;00m col \u001b[39min\u001b[39;00m cols:\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:999\u001b[0m, in \u001b[0;36m_Frame.map_partitions\u001b[0;34m(self, func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 871\u001b[0m \u001b[39m@insert_meta_param_description\u001b[39m(pad\u001b[39m=\u001b[39m\u001b[39m12\u001b[39m)\n\u001b[1;32m 872\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mmap_partitions\u001b[39m(\u001b[39mself\u001b[39m, func, \u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs):\n\u001b[1;32m 873\u001b[0m \u001b[39m\"\"\"Apply Python function on each DataFrame partition.\u001b[39;00m\n\u001b[1;32m 874\u001b[0m \n\u001b[1;32m 875\u001b[0m \u001b[39m Note that the index and divisions are assumed to remain unchanged.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 997\u001b[0m \u001b[39m None as the division.\u001b[39;00m\n\u001b[1;32m 998\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 999\u001b[0m \u001b[39mreturn\u001b[39;00m map_partitions(func, \u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6852\u001b[0m, in \u001b[0;36mmap_partitions\u001b[0;34m(func, meta, enforce_metadata, transform_divisions, align_dataframes, *args, **kwargs)\u001b[0m\n\u001b[1;32m 6845\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[1;32m 6846\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m. If you don\u001b[39m\u001b[39m'\u001b[39m\u001b[39mt want the partitions to be aligned, and are \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 6847\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mcalling `map_partitions` directly, pass `align_dataframes=False`.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 6848\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 6850\u001b[0m dfs \u001b[39m=\u001b[39m [df \u001b[39mfor\u001b[39;00m df \u001b[39min\u001b[39;00m args \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(df, _Frame)]\n\u001b[0;32m-> 6852\u001b[0m meta \u001b[39m=\u001b[39m _get_meta_map_partitions(args, dfs, func, kwargs, meta, parent_meta)\n\u001b[1;32m 6853\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mall\u001b[39m(\u001b[39misinstance\u001b[39m(arg, Scalar) \u001b[39mfor\u001b[39;00m arg \u001b[39min\u001b[39;00m args):\n\u001b[1;32m 6854\u001b[0m layer \u001b[39m=\u001b[39m {\n\u001b[1;32m 6855\u001b[0m (name, \u001b[39m0\u001b[39m): (\n\u001b[1;32m 6856\u001b[0m apply,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 6860\u001b[0m )\n\u001b[1;32m 6861\u001b[0m }\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6963\u001b[0m, in \u001b[0;36m_get_meta_map_partitions\u001b[0;34m(args, dfs, func, kwargs, meta, parent_meta)\u001b[0m\n\u001b[1;32m 6959\u001b[0m parent_meta \u001b[39m=\u001b[39m dfs[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39m_meta\n\u001b[1;32m 6960\u001b[0m \u001b[39mif\u001b[39;00m meta \u001b[39mis\u001b[39;00m no_default:\n\u001b[1;32m 6961\u001b[0m \u001b[39m# Use non-normalized kwargs here, as we want the real values (not\u001b[39;00m\n\u001b[1;32m 6962\u001b[0m \u001b[39m# delayed values)\u001b[39;00m\n\u001b[0;32m-> 6963\u001b[0m meta \u001b[39m=\u001b[39m _emulate(func, \u001b[39m*\u001b[39;49margs, udf\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 6964\u001b[0m meta_is_emulated \u001b[39m=\u001b[39m \u001b[39mTrue\u001b[39;00m\n\u001b[1;32m 6965\u001b[0m \u001b[39melse\u001b[39;00m:\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6782\u001b[0m, in \u001b[0;36m_emulate\u001b[0;34m(func, udf, *args, **kwargs)\u001b[0m\n\u001b[1;32m 6777\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 6778\u001b[0m \u001b[39mApply a function using args / kwargs. If arguments contain dd.DataFrame /\u001b[39;00m\n\u001b[1;32m 6779\u001b[0m \u001b[39mdd.Series, using internal cache (``_meta``) for calculation\u001b[39;00m\n\u001b[1;32m 6780\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 6781\u001b[0m \u001b[39mwith\u001b[39;00m raise_on_meta_error(funcname(func), udf\u001b[39m=\u001b[39mudf), check_numeric_only_deprecation():\n\u001b[0;32m-> 6782\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39m_extract_meta(args, \u001b[39mTrue\u001b[39;00m), \u001b[39m*\u001b[39m\u001b[39m*\u001b[39m_extract_meta(kwargs, \u001b[39mTrue\u001b[39;00m))\n", + "File \u001b[0;32m~/.conda/envs/.pyenv/lib/python3.8/contextlib.py:131\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[0;34m(self, type, value, traceback)\u001b[0m\n\u001b[1;32m 129\u001b[0m value \u001b[39m=\u001b[39m \u001b[39mtype\u001b[39m()\n\u001b[1;32m 130\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 131\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mgen\u001b[39m.\u001b[39;49mthrow(\u001b[39mtype\u001b[39;49m, value, traceback)\n\u001b[1;32m 132\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mStopIteration\u001b[39;00m \u001b[39mas\u001b[39;00m exc:\n\u001b[1;32m 133\u001b[0m \u001b[39m# Suppress StopIteration *unless* it's the same exception that\u001b[39;00m\n\u001b[1;32m 134\u001b[0m \u001b[39m# was passed to throw(). This prevents a StopIteration\u001b[39;00m\n\u001b[1;32m 135\u001b[0m \u001b[39m# raised inside the \"with\" statement from being suppressed.\u001b[39;00m\n\u001b[1;32m 136\u001b[0m \u001b[39mreturn\u001b[39;00m exc \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m value\n", + "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py:213\u001b[0m, in \u001b[0;36mraise_on_meta_error\u001b[0;34m(funcname, udf)\u001b[0m\n\u001b[1;32m 204\u001b[0m msg \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m (\n\u001b[1;32m 205\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mOriginal error is below:\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 206\u001b[0m \u001b[39m\"\u001b[39m\u001b[39m------------------------\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[39m\"\u001b[39m\u001b[39m{2}\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 211\u001b[0m )\n\u001b[1;32m 212\u001b[0m msg \u001b[39m=\u001b[39m msg\u001b[39m.\u001b[39mformat(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m in `\u001b[39m\u001b[39m{\u001b[39;00mfuncname\u001b[39m}\u001b[39;00m\u001b[39m`\u001b[39m\u001b[39m\"\u001b[39m \u001b[39mif\u001b[39;00m funcname \u001b[39melse\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mrepr\u001b[39m(e), tb)\n\u001b[0;32m--> 213\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(msg) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", + "\u001b[0;31mValueError\u001b[0m: Metadata inference failed in `apply_jitter`.\n\nYou have supplied a custom function and Dask is unable to \ndetermine the type of output that that function returns. \n\nTo resolve this please provide a meta= keyword.\nThe docstring of the Dask function you ran should have more information.\n\nOriginal error is below:\n------------------------\nKeyError('dldTimeSteps')\n\nTraceback:\n---------\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py\", line 192, in raise_on_meta_error\n yield\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py\", line 6782, in _emulate\n return func(*_extract_meta(args, True), **_extract_meta(kwargs, True))\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/dfops.py\", line 68, in apply_jitter\n df[col_jittered] = df[col] + amp * jitter\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/frame.py\", line 3804, in __getitem__\n indexer = self.columns.get_loc(key)\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py\", line 3805, in get_loc\n raise KeyError(key) from err\n" + ] + } + ], "source": [ "sp.add_jitter()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "2b867e40", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "0a0eb241ce07418c9dede3123a9f2810", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"f0b0ba13-1cf8-4a9d-84d7-43c341b1a558\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1013\"}],\"center\":[{\"id\":\"1016\"},{\"id\":\"1020\"},{\"id\":\"1053\"}],\"height\":300,\"left\":[{\"id\":\"1017\"}],\"renderers\":[{\"id\":\"1041\"},{\"id\":\"1059\"},{\"id\":\"1078\"},{\"id\":\"1099\"},{\"id\":\"1122\"},{\"id\":\"1147\"}],\"title\":{\"id\":\"1003\"},\"toolbar\":{\"id\":\"1029\"},\"width\":800,\"x_range\":{\"id\":\"1005\"},\"x_scale\":{\"id\":\"1009\"},\"y_range\":{\"id\":\"1007\"},\"y_scale\":{\"id\":\"1011\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1091\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1057\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1145\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"1099\"}]},\"id\":\"1117\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1054\"},{\"id\":\"1073\"},{\"id\":\"1094\"},{\"id\":\"1117\"},{\"id\":\"1142\"},{\"id\":\"1169\"}],\"padding\":2,\"spacing\":0},\"id\":\"1053\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1058\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1038\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"1059\"}]},\"id\":\"1073\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1055\"},\"glyph\":{\"id\":\"1056\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1058\"},\"nonselection_glyph\":{\"id\":\"1057\"},\"view\":{\"id\":\"1060\"}},\"id\":\"1059\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAACI40AAAAAAwIvjQAAAAACAj+NAAAAAAECT40AAAAAAAJfjQAAAAADAmuNAAAAAAICe40AAAAAAQKLjQAAAAAAApuNAAAAAAMCp40AAAAAAgK3jQAAAAABAseNAAAAAAAC140AAAAAAwLjjQAAAAACAvONAAAAAAEDA40AAAAAAAMTjQAAAAADAx+NAAAAAAIDL40AAAAAAQM/jQAAAAAAA0+NAAAAAAMDW40AAAAAAgNrjQAAAAABA3uNAAAAAAADi40AAAAAAwOXjQAAAAACA6eNAAAAAAEDt40AAAAAAAPHjQAAAAADA9ONAAAAAAID440AAAAAAQPzjQAAAAAAAAORAAAAAAMAD5EAAAAAAgAfkQAAAAABAC+RAAAAAAAAP5EAAAAAAwBLkQAAAAACAFuRAAAAAAEAa5EAAAAAAAB7kQAAAAADAIeRAAAAAAIAl5EAAAAAAQCnkQAAAAAAALeRAAAAAAMAw5EAAAAAAgDTkQAAAAABAOORAAAAAAAA85EAAAAAAwD/kQAAAAACAQ+RAAAAAAEBH5EAAAAAAAEvkQAAAAADATuRAAAAAAIBS5EAAAAAAQFbkQAAAAAAAWuRAAAAAAMBd5EAAAAAAgGHkQAAAAABAZeRAAAAAAABp5EAAAAAAwGzkQAAAAACAcORAAAAAAEB05EAAAAAAAHjkQAAAAADAe+RAAAAAAIB/5EAAAAAAQIPkQAAAAAAAh+RAAAAAAMCK5EAAAAAAgI7kQAAAAABAkuRAAAAAAACW5EAAAAAAwJnkQAAAAACAneRAAAAAAECh5EAAAAAAAKXkQAAAAADAqORAAAAAAICs5EAAAAAAQLDkQAAAAAAAtORAAAAAAMC35EAAAAAAgLvkQAAAAABAv+RAAAAAAADD5EAAAAAAwMbkQAAAAACAyuRAAAAAAEDO5EAAAAAAANLkQAAAAADA1eRAAAAAAIDZ5EAAAAAAQN3kQAAAAAAA4eRAAAAAAMDk5EAAAAAAgOjkQAAAAABA7ORAAAAAAADw5EAAAAAAwPPkQAAAAACA9+RAAAAAAED75EAAAAAAAP/kQAAAAADAAuVAAAAAAIAG5UAAAAAAQArlQAAAAAAADuVAAAAAAMAR5UAAAAAAgBXlQAAAAABAGeVAAAAAAAAd5UAAAAAAwCDlQAAAAACAJOVAAAAAAEAo5UAAAAAAACzlQAAAAADAL+VAAAAAAIAz5UAAAAAAQDflQAAAAAAAO+VAAAAAAMA+5UAAAAAAgELlQAAAAABARuVAAAAAAABK5UAAAAAAwE3lQAAAAACAUeVAAAAAAEBV5UAAAAAAAFnlQAAAAADAXOVAAAAAAIBg5UAAAAAAQGTlQAAAAAAAaOVAAAAAAMBr5UAAAAAAgG/lQAAAAABAc+VAAAAAAAB35UAAAAAAwHrlQAAAAACAfuVAAAAAAECC5UAAAAAAAIblQAAAAADAieVAAAAAAICN5UAAAAAAQJHlQAAAAAAAleVAAAAAAMCY5UAAAAAAgJzlQAAAAABAoOVAAAAAAACk5UAAAAAAwKflQAAAAACAq+VAAAAAAECv5UAAAAAAALPlQAAAAADAtuVAAAAAAIC65UAAAAAAQL7lQAAAAAAAwuVAAAAAAMDF5UAAAAAAgMnlQAAAAABAzeVAAAAAAADR5UAAAAAAwNTlQAAAAACA2OVAAAAAAEDc5UAAAAAAAODlQAAAAADA4+VAAAAAAIDn5UAAAAAAQOvlQAAAAAAA7+VAAAAAAMDy5UAAAAAAgPblQAAAAABA+uVAAAAAAAD+5UAAAAAAwAHmQAAAAACABeZAAAAAAEAJ5kAAAAAAAA3mQAAAAADAEOZAAAAAAIAU5kAAAAAAQBjmQAAAAAAAHOZAAAAAAMAf5kAAAAAAgCPmQAAAAABAJ+ZAAAAAAAAr5kAAAAAAwC7mQAAAAACAMuZAAAAAAEA25kAAAAAAADrmQAAAAADAPeZAAAAAAIBB5kAAAAAAQEXmQAAAAAAASeZAAAAAAMBM5kAAAAAAgFDmQAAAAABAVOZAAAAAAABY5kAAAAAAwFvmQAAAAACAX+ZAAAAAAEBj5kAAAAAAAGfmQAAAAADAauZAAAAAAIBu5kAAAAAAQHLmQAAAAAAAduZAAAAAAMB55kAAAAAAgH3mQAAAAABAgeZAAAAAAACF5kAAAAAAwIjmQAAAAACAjOZAAAAAAECQ5kAAAAAAAJTmQAAAAADAl+ZAAAAAAICb5kAAAAAAQJ/mQAAAAAAAo+ZAAAAAAMCm5kAAAAAAgKrmQAAAAABAruZAAAAAAACy5kAAAAAAwLXmQAAAAACAueZAAAAAAEC95kAAAAAAAMHmQAAAAADAxOZAAAAAAIDI5kAAAAAAQMzmQAAAAAAA0OZAAAAAAMDT5kAAAAAAgNfmQAAAAABA2+ZAAAAAAADf5kAAAAAAwOLmQAAAAACA5uZAAAAAAEDq5kAAAAAAAO7mQAAAAADA8eZAAAAAAID15kAAAAAAQPnmQAAAAAAA/eZAAAAAAMAA50AAAAAAgATnQAAAAABACOdAAAAAAAAM50AAAAAAwA/nQAAAAACAE+dAAAAAAEAX50AAAAAAABvnQAAAAADAHudAAAAAAIAi50AAAAAAQCbnQAAAAAAAKudAAAAAAMAt50AAAAAAgDHnQAAAAABANedAAAAAAAA550AAAAAAwDznQAAAAACAQOdAAAAAAEBE50AAAAAAAEjnQAAAAADAS+dAAAAAAIBP50AAAAAAQFPnQAAAAAAAV+dAAAAAAMBa50AAAAAAgF7nQAAAAABAYudAAAAAAABm50AAAAAAwGnnQAAAAACAbedAAAAAAEBx50AAAAAAAHXnQAAAAADAeOdAAAAAAIB850AAAAAAQIDnQAAAAAAAhOdAAAAAAMCH50AAAAAAgIvnQAAAAABAj+dAAAAAAACT50AAAAAAwJbnQAAAAACAmudAAAAAAECe50AAAAAAAKLnQAAAAADApedAAAAAAICp50AAAAAAQK3nQAAAAAAAsedAAAAAAMC050AAAAAAgLjnQAAAAABAvOdAAAAAAADA50AAAAAAwMPnQAAAAACAx+dAAAAAAEDL50AAAAAAAM/nQAAAAADA0udAAAAAAIDW50AAAAAAQNrnQAAAAAAA3udAAAAAAMDh50AAAAAAgOXnQAAAAABA6edAAAAAAADt50AAAAAAwPDnQAAAAACA9OdAAAAAAED450AAAAAAAPznQAAAAADA/+dAAAAAAIAD6EAAAAAAQAfoQAAAAAAAC+hAAAAAAMAO6EAAAAAAgBLoQAAAAABAFuhAAAAAAAAa6EAAAAAAwB3oQAAAAACAIehAAAAAAEAl6EAAAAAAACnoQAAAAADALOhAAAAAAIAw6EAAAAAAQDToQAAAAAAAOOhAAAAAAMA76EAAAAAAgD/oQAAAAABAQ+hAAAAAAABH6EAAAAAAwEroQAAAAACATuhAAAAAAEBS6EAAAAAAAFboQAAAAADAWehAAAAAAIBd6EAAAAAAQGHoQAAAAAAAZehAAAAAAMBo6EAAAAAAgGzoQAAAAABAcOhAAAAAAAB06EAAAAAAwHfoQAAAAACAe+hAAAAAAEB/6EAAAAAAAIPoQAAAAADAhuhAAAAAAICK6EAAAAAAQI7oQAAAAAAAkuhAAAAAAMCV6EAAAAAAgJnoQAAAAABAnehAAAAAAACh6EAAAAAAwKToQAAAAACAqOhAAAAAAECs6EAAAAAAALDoQAAAAADAs+hAAAAAAIC36EAAAAAAQLvoQAAAAAAAv+hAAAAAAMDC6EAAAAAAgMboQAAAAABAyuhAAAAAAADO6EAAAAAAwNHoQAAAAACA1ehAAAAAAEDZ6EAAAAAAAN3oQAAAAADA4OhAAAAAAIDk6EAAAAAAQOjoQAAAAAAA7OhAAAAAAMDv6EAAAAAAgPPoQAAAAABA9+hAAAAAAAD76EAAAAAAwP7oQAAAAACAAulAAAAAAEAG6UAAAAAAAArpQAAAAADADelAAAAAAIAR6UAAAAAAQBXpQAAAAAAAGelAAAAAAMAc6UAAAAAAgCDpQAAAAABAJOlAAAAAAAAo6UAAAAAAwCvpQAAAAACAL+lAAAAAAEAz6UAAAAAAADfpQAAAAADAOulAAAAAAIA+6UAAAAAAQELpQAAAAAAARulAAAAAAMBJ6UAAAAAAgE3pQAAAAABAUelAAAAAAABV6UAAAAAAwFjpQAAAAACAXOlAAAAAAEBg6UAAAAAAAGTpQAAAAADAZ+lAAAAAAIBr6UAAAAAAQG/pQAAAAAAAc+lAAAAAAMB26UAAAAAAgHrpQAAAAABAfulAAAAAAACC6UAAAAAAwIXpQAAAAACAielAAAAAAECN6UAAAAAAAJHpQAAAAADAlOlAAAAAAICY6UAAAAAAQJzpQAAAAAAAoOlAAAAAAMCj6UAAAAAAgKfpQAAAAABAq+lAAAAAAACv6UAAAAAAwLLpQAAAAACAtulAAAAAAEC66UAAAAAAAL7pQAAAAADAwelAAAAAAIDF6UAAAAAAQMnpQAAAAAAAzelAAAAAAMDQ6UAAAAAAgNTpQAAAAABA2OlAAAAAAADc6UAAAAAAwN/pQAAAAACA4+lAAAAAAEDn6UAAAAAAAOvpQAAAAADA7ulAAAAAAIDy6UAAAAAAQPbpQAAAAAAA+ulAAAAAAMD96UAAAAAAgAHqQAAAAABABepAAAAAAAAJ6kAAAAAAwAzqQAAAAACAEOpAAAAAAEAU6kAAAAAAABjqQAAAAADAG+pAAAAAAIAf6kAAAAAAQCPqQAAAAAAAJ+pAAAAAAMAq6kAAAAAAgC7qQAAAAABAMupAAAAAAAA26kAAAAAAwDnqQAAAAACAPepAAAAAAEBB6kAAAAAAAEXqQAAAAADASOpAAAAAAIBM6kAAAAAAQFDqQAAAAAAAVOpAAAAAAMBX6kAAAAAAgFvqQAAAAABAX+pAAAAAAABj6kAAAAAAwGbqQAAAAACAaupAAAAAAEBu6kAAAAAAAHLqQAAAAADAdepAAAAAAIB56kAAAAAAQH3qQAAAAAAAgepAAAAAAMCE6kAAAAAAgIjqQAAAAABAjOpAAAAAAACQ6kAAAAAAwJPqQAAAAACAl+pAAAAAAECb6kAAAAAAAJ/qQAAAAADAoupAAAAAAICm6kAAAAAAQKrqQAAAAAAArupAAAAAAMCx6kAAAAAAgLXqQAAAAABAuepAAAAAAAC96kAAAAAAwMDqQAAAAACAxOpAAAAAAEDI6kAAAAAAAMzqQAAAAADAz+pAAAAAAIDT6kAAAAAAQNfqQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1092\"},\"selection_policy\":{\"id\":\"1091\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1167\"},\"selection_policy\":{\"id\":\"1166\"}},\"id\":\"1143\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1167\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1055\"}},\"id\":\"1060\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"1147\"}]},\"id\":\"1169\",\"type\":\"LegendItem\"},{\"attributes\":{\"overlay\":{\"id\":\"1027\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1115\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1118\"}},\"id\":\"1123\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1037\"},\"glyph\":{\"id\":\"1038\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1040\"},\"nonselection_glyph\":{\"id\":\"1039\"},\"view\":{\"id\":\"1042\"}},\"id\":\"1041\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1120\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1013\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1016\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1119\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1146\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1118\"},\"glyph\":{\"id\":\"1119\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1121\"},\"nonselection_glyph\":{\"id\":\"1120\"},\"view\":{\"id\":\"1123\"}},\"id\":\"1122\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1140\"},\"selection_policy\":{\"id\":\"1139\"}},\"id\":\"1118\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1048\"},\"group\":null,\"major_label_policy\":{\"id\":\"1049\"},\"ticker\":{\"id\":\"1014\"}},\"id\":\"1013\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1121\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1139\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1070\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1018\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1144\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"1122\"}]},\"id\":\"1142\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1011\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1003\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1051\"},\"selection_policy\":{\"id\":\"1050\"}},\"id\":\"1037\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"1028\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis\":{\"id\":\"1017\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1051\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"1041\"}]},\"id\":\"1054\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1143\"},\"glyph\":{\"id\":\"1144\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1146\"},\"nonselection_glyph\":{\"id\":\"1145\"},\"view\":{\"id\":\"1148\"}},\"id\":\"1147\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1027\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1143\"}},\"id\":\"1148\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1037\"}},\"id\":\"1042\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"},{\"id\":\"1026\"},{\"id\":\"1028\"}]},\"id\":\"1029\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1092\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"1078\"}]},\"id\":\"1094\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1039\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAHX5Ojd1+To3dfk6N3X5Ojd1+To3dfk6N3X5OjcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1+To3dfk6N3X5Ojd1+To3dfk6N3X5Ojd1+To3dfm6N3X5ujd1+bo3dfm6N3X5ujd1+To4dfk6OHX5ujd1+bo3dfm6N3X5ujd1+bo3AAAAAAAAAAAAAAAAAAAAAHX5ujd1+bo3dfm6N3X5ujd1+bo3dfm6N3X5ujcAAAAAdfm6N3X5ujd1+bo3dfm6N3X5ujd1+bo3dfm6NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHX5ujd1+bo3dfm6N3X5ujd1+bo3dfm6N3X5ujcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdfk6Nxg7DDh1+To4dfk6OHX5Ojh1+To4GDuMOHX5OjlmdwM6TVu/OnsArDsazmg8+XTsPCDVWT1roK49xqj2PUgUHj74Xj0+MxpRPgT6WD79Z1A+1qk8PlLnJD6zSQw+wGLmPRWlvT2xoqA9jRaQPUyggz3btHE9r4ddPcVKUD3jUkI9wrs3PUa5Kj201CM9/mQdPeMxGT3czRI9b5MSPX22Ej1Jjhg9mAgePcrVJD2Umi49lwpAPc4oUT0Am2Q9Iup3PaJfiD10Xpc9Nf2oPa7suT1Qb8w9BCjbPYve5z21ze09w7PwPWID7z0k6eY9tszcPfF20z0pssk9///APdO0tj0Y1q892H6qPZS4pD2CoJ49uCSdPUZ7nD3aFps98lSZPcbrmD00Jpk9NCaZPUSGlj3J/pQ9fHmVPV2akz1zP5A9dhWPPZGFkD3xnJA9OHaSPcP2kj3VS5Y93eyZPYoimz3a2Z09Z/OfPbeqoj1QEaY9FUioPUhSrD0OIrA9Vb60Pfo0vD0kJMI9w1XKPbuW0D30qNY95wDiPeh77T3vO/g9fUoCPnWLCD6AjBE+0jgaPrU/Iz6ctSw+Y+E0PkJ5PT6mTEc+dShOPhYwVT58q1s+U2VjPkFObj5Qvnc+yGB/PhmHhD6cSIs+d1qSPjR6lz5WIJ0+uCyjPhWNqz5TPLQ+qkC8PlK7xD7oPM4+fxLWPm7k3z7xaOk+0u3xPgPl+T79vgE/3igGPwdVCz8isg4/FwISP7/MFT9+Fho/vb0cP2c0ID9S0CM/e/woP8XwLD9kBzE/d940P9ipOj/Dc0A/+L5EPzWnST90wVE/iLNZP5QIYT8sMmc/V/twP7d2ez8AAIA/QYh5P6GxZj+5I0s/TQItP8YYCj/dBs4+eoSPPulpPz6xoQ8+P+gCPjB09j2IrOQ9x6bUPTY8yD2ctr09wF+zPSgXpj3NjJw9cwKTPS2EhD14a249JOhVPZmEOj2BJiQ9oSILPU9T+DwKEuc8x+PRPNt0wTyFlrU8PEKoPJgInjx6hI88QuyDPGlIbjzF71w8qn5KPDptOjzWBDA8iIoqPCUiIDxgriA8e8IdPB6+GTxT5hM89+EPPNAkDTxFPQ48m90LPDJPCTxZDAw8oSILPK6sCTxCyfk7o5bgOxPuxTuo46Y7O4R6O6NYUjt7wh079+EPOysKCjtzAQI7kAXxOmy8AjtsvAI7HoALOysKCjsyTwk7UqgFO0UeBzt6RgE73kHoOm8w2DpvMNg6seLQOt5B6Dq3o+w6g3vyOpAF8TreQeg60rfpOhNq4jp8utY6R5LcOpbO0zog9OA6aWf1Omln9To1P/s6cwECO1KoBTsyTwk7r+oXO6/qFzuOkRs7LIYmO1ppITsshiY7LIYmO2fzHztGmiM7YK4gO4dMHDtTJCI73M0SO7x0Fju1Lxc7EfYMOz/ZBzsntfw6Gyv+OkxjBjvczRI7vHQWO7UvFztTJCI7H/wnO1MkIju1Lxc7TGMGOw6h/zqAiwA7aWf1Orej7Do6CN46J7X8Oie1/DpCyfk6kAXxOmln9Tp38fM6NT/7Ot5B6DreQeg6ls7TOhNq4joH4OM6Qsn5OoCLADs/2Qc7We0EOx6ACzsegAs7GDsMO3MBAjsntfw6no/vOnpGATs4lAg7BGwOOxg7DDsR9gw7EfYMOziUCDtc3fY67MvmOolE1TqjWNI6R5LcOm8w2DppZ/U6Mk8JO0UeBztsvAI7DqH/OnMBAjuAiwA77MvmOv8eyDpob7w6QdHAOmhvvDo5EKU6H/ynOt1JrzqoIbU6jw24OtG/sDqBg7k6BOiqOkaaozr9Jo86Mk+JOvGckDrxnJA6TGOGOmZ3gzqDe3I6aWd1OhsrfjrSt2k67MtmOoN7cjokxYo6h0ycOurTrTo=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1115\"},\"selection_policy\":{\"id\":\"1114\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1071\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1166\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1114\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1056\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1045\"},\"group\":null,\"major_label_policy\":{\"id\":\"1046\"},\"ticker\":{\"id\":\"1018\"}},\"id\":\"1017\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAACI40AAAAAAwIvjQAAAAACAj+NAAAAAAECT40AAAAAAAJfjQAAAAADAmuNAAAAAAICe40AAAAAAQKLjQAAAAAAApuNAAAAAAMCp40AAAAAAgK3jQAAAAABAseNAAAAAAAC140AAAAAAwLjjQAAAAACAvONAAAAAAEDA40AAAAAAAMTjQAAAAADAx+NAAAAAAIDL40AAAAAAQM/jQAAAAAAA0+NAAAAAAMDW40AAAAAAgNrjQAAAAABA3uNAAAAAAADi40AAAAAAwOXjQAAAAACA6eNAAAAAAEDt40AAAAAAAPHjQAAAAADA9ONAAAAAAID440AAAAAAQPzjQAAAAAAAAORAAAAAAMAD5EAAAAAAgAfkQAAAAABAC+RAAAAAAAAP5EAAAAAAwBLkQAAAAACAFuRAAAAAAEAa5EAAAAAAAB7kQAAAAADAIeRAAAAAAIAl5EAAAAAAQCnkQAAAAAAALeRAAAAAAMAw5EAAAAAAgDTkQAAAAABAOORAAAAAAAA85EAAAAAAwD/kQAAAAACAQ+RAAAAAAEBH5EAAAAAAAEvkQAAAAADATuRAAAAAAIBS5EAAAAAAQFbkQAAAAAAAWuRAAAAAAMBd5EAAAAAAgGHkQAAAAABAZeRAAAAAAABp5EAAAAAAwGzkQAAAAACAcORAAAAAAEB05EAAAAAAAHjkQAAAAADAe+RAAAAAAIB/5EAAAAAAQIPkQAAAAAAAh+RAAAAAAMCK5EAAAAAAgI7kQAAAAABAkuRAAAAAAACW5EAAAAAAwJnkQAAAAACAneRAAAAAAECh5EAAAAAAAKXkQAAAAADAqORAAAAAAICs5EAAAAAAQLDkQAAAAAAAtORAAAAAAMC35EAAAAAAgLvkQAAAAABAv+RAAAAAAADD5EAAAAAAwMbkQAAAAACAyuRAAAAAAEDO5EAAAAAAANLkQAAAAADA1eRAAAAAAIDZ5EAAAAAAQN3kQAAAAAAA4eRAAAAAAMDk5EAAAAAAgOjkQAAAAABA7ORAAAAAAADw5EAAAAAAwPPkQAAAAACA9+RAAAAAAED75EAAAAAAAP/kQAAAAADAAuVAAAAAAIAG5UAAAAAAQArlQAAAAAAADuVAAAAAAMAR5UAAAAAAgBXlQAAAAABAGeVAAAAAAAAd5UAAAAAAwCDlQAAAAACAJOVAAAAAAEAo5UAAAAAAACzlQAAAAADAL+VAAAAAAIAz5UAAAAAAQDflQAAAAAAAO+VAAAAAAMA+5UAAAAAAgELlQAAAAABARuVAAAAAAABK5UAAAAAAwE3lQAAAAACAUeVAAAAAAEBV5UAAAAAAAFnlQAAAAADAXOVAAAAAAIBg5UAAAAAAQGTlQAAAAAAAaOVAAAAAAMBr5UAAAAAAgG/lQAAAAABAc+VAAAAAAAB35UAAAAAAwHrlQAAAAACAfuVAAAAAAECC5UAAAAAAAIblQAAAAADAieVAAAAAAICN5UAAAAAAQJHlQAAAAAAAleVAAAAAAMCY5UAAAAAAgJzlQAAAAABAoOVAAAAAAACk5UAAAAAAwKflQAAAAACAq+VAAAAAAECv5UAAAAAAALPlQAAAAADAtuVAAAAAAIC65UAAAAAAQL7lQAAAAAAAwuVAAAAAAMDF5UAAAAAAgMnlQAAAAABAzeVAAAAAAADR5UAAAAAAwNTlQAAAAACA2OVAAAAAAEDc5UAAAAAAAODlQAAAAADA4+VAAAAAAIDn5UAAAAAAQOvlQAAAAAAA7+VAAAAAAMDy5UAAAAAAgPblQAAAAABA+uVAAAAAAAD+5UAAAAAAwAHmQAAAAACABeZAAAAAAEAJ5kAAAAAAAA3mQAAAAADAEOZAAAAAAIAU5kAAAAAAQBjmQAAAAAAAHOZAAAAAAMAf5kAAAAAAgCPmQAAAAABAJ+ZAAAAAAAAr5kAAAAAAwC7mQAAAAACAMuZAAAAAAEA25kAAAAAAADrmQAAAAADAPeZAAAAAAIBB5kAAAAAAQEXmQAAAAAAASeZAAAAAAMBM5kAAAAAAgFDmQAAAAABAVOZAAAAAAABY5kAAAAAAwFvmQAAAAACAX+ZAAAAAAEBj5kAAAAAAAGfmQAAAAADAauZAAAAAAIBu5kAAAAAAQHLmQAAAAAAAduZAAAAAAMB55kAAAAAAgH3mQAAAAABAgeZAAAAAAACF5kAAAAAAwIjmQAAAAACAjOZAAAAAAECQ5kAAAAAAAJTmQAAAAADAl+ZAAAAAAICb5kAAAAAAQJ/mQAAAAAAAo+ZAAAAAAMCm5kAAAAAAgKrmQAAAAABAruZAAAAAAACy5kAAAAAAwLXmQAAAAACAueZAAAAAAEC95kAAAAAAAMHmQAAAAADAxOZAAAAAAIDI5kAAAAAAQMzmQAAAAAAA0OZAAAAAAMDT5kAAAAAAgNfmQAAAAABA2+ZAAAAAAADf5kAAAAAAwOLmQAAAAACA5uZAAAAAAEDq5kAAAAAAAO7mQAAAAADA8eZAAAAAAID15kAAAAAAQPnmQAAAAAAA/eZAAAAAAMAA50AAAAAAgATnQAAAAABACOdAAAAAAAAM50AAAAAAwA/nQAAAAACAE+dAAAAAAEAX50AAAAAAABvnQAAAAADAHudAAAAAAIAi50AAAAAAQCbnQAAAAAAAKudAAAAAAMAt50AAAAAAgDHnQAAAAABANedAAAAAAAA550AAAAAAwDznQAAAAACAQOdAAAAAAEBE50AAAAAAAEjnQAAAAADAS+dAAAAAAIBP50AAAAAAQFPnQAAAAAAAV+dAAAAAAMBa50AAAAAAgF7nQAAAAABAYudAAAAAAABm50AAAAAAwGnnQAAAAACAbedAAAAAAEBx50AAAAAAAHXnQAAAAADAeOdAAAAAAIB850AAAAAAQIDnQAAAAAAAhOdAAAAAAMCH50AAAAAAgIvnQAAAAABAj+dAAAAAAACT50AAAAAAwJbnQAAAAACAmudAAAAAAECe50AAAAAAAKLnQAAAAADApedAAAAAAICp50AAAAAAQK3nQAAAAAAAsedAAAAAAMC050AAAAAAgLjnQAAAAABAvOdAAAAAAADA50AAAAAAwMPnQAAAAACAx+dAAAAAAEDL50AAAAAAAM/nQAAAAADA0udAAAAAAIDW50AAAAAAQNrnQAAAAAAA3udAAAAAAMDh50AAAAAAgOXnQAAAAABA6edAAAAAAADt50AAAAAAwPDnQAAAAACA9OdAAAAAAED450AAAAAAAPznQAAAAADA/+dAAAAAAIAD6EAAAAAAQAfoQAAAAAAAC+hAAAAAAMAO6EAAAAAAgBLoQAAAAABAFuhAAAAAAAAa6EAAAAAAwB3oQAAAAACAIehAAAAAAEAl6EAAAAAAACnoQAAAAADALOhAAAAAAIAw6EAAAAAAQDToQAAAAAAAOOhAAAAAAMA76EAAAAAAgD/oQAAAAABAQ+hAAAAAAABH6EAAAAAAwEroQAAAAACATuhAAAAAAEBS6EAAAAAAAFboQAAAAADAWehAAAAAAIBd6EAAAAAAQGHoQAAAAAAAZehAAAAAAMBo6EAAAAAAgGzoQAAAAABAcOhAAAAAAAB06EAAAAAAwHfoQAAAAACAe+hAAAAAAEB/6EAAAAAAAIPoQAAAAADAhuhAAAAAAICK6EAAAAAAQI7oQAAAAAAAkuhAAAAAAMCV6EAAAAAAgJnoQAAAAABAnehAAAAAAACh6EAAAAAAwKToQAAAAACAqOhAAAAAAECs6EAAAAAAALDoQAAAAADAs+hAAAAAAIC36EAAAAAAQLvoQAAAAAAAv+hAAAAAAMDC6EAAAAAAgMboQAAAAABAyuhAAAAAAADO6EAAAAAAwNHoQAAAAACA1ehAAAAAAEDZ6EAAAAAAAN3oQAAAAADA4OhAAAAAAIDk6EAAAAAAQOjoQAAAAAAA7OhAAAAAAMDv6EAAAAAAgPPoQAAAAABA9+hAAAAAAAD76EAAAAAAwP7oQAAAAACAAulAAAAAAEAG6UAAAAAAAArpQAAAAADADelAAAAAAIAR6UAAAAAAQBXpQAAAAAAAGelAAAAAAMAc6UAAAAAAgCDpQAAAAABAJOlAAAAAAAAo6UAAAAAAwCvpQAAAAACAL+lAAAAAAEAz6UAAAAAAADfpQAAAAADAOulAAAAAAIA+6UAAAAAAQELpQAAAAAAARulAAAAAAMBJ6UAAAAAAgE3pQAAAAABAUelAAAAAAABV6UAAAAAAwFjpQAAAAACAXOlAAAAAAEBg6UAAAAAAAGTpQAAAAADAZ+lAAAAAAIBr6UAAAAAAQG/pQAAAAAAAc+lAAAAAAMB26UAAAAAAgHrpQAAAAABAfulAAAAAAACC6UAAAAAAwIXpQAAAAACAielAAAAAAECN6UAAAAAAAJHpQAAAAADAlOlAAAAAAICY6UAAAAAAQJzpQAAAAAAAoOlAAAAAAMCj6UAAAAAAgKfpQAAAAABAq+lAAAAAAACv6UAAAAAAwLLpQAAAAACAtulAAAAAAEC66UAAAAAAAL7pQAAAAADAwelAAAAAAIDF6UAAAAAAQMnpQAAAAAAAzelAAAAAAMDQ6UAAAAAAgNTpQAAAAABA2OlAAAAAAADc6UAAAAAAwN/pQAAAAACA4+lAAAAAAEDn6UAAAAAAAOvpQAAAAADA7ulAAAAAAIDy6UAAAAAAQPbpQAAAAAAA+ulAAAAAAMD96UAAAAAAgAHqQAAAAABABepAAAAAAAAJ6kAAAAAAwAzqQAAAAACAEOpAAAAAAEAU6kAAAAAAABjqQAAAAADAG+pAAAAAAIAf6kAAAAAAQCPqQAAAAAAAJ+pAAAAAAMAq6kAAAAAAgC7qQAAAAABAMupAAAAAAAA26kAAAAAAwDnqQAAAAACAPepAAAAAAEBB6kAAAAAAAEXqQAAAAADASOpAAAAAAIBM6kAAAAAAQFDqQAAAAAAAVOpAAAAAAMBX6kAAAAAAgFvqQAAAAABAX+pAAAAAAABj6kAAAAAAwGbqQAAAAACAaupAAAAAAEBu6kAAAAAAAHLqQAAAAADAdepAAAAAAIB56kAAAAAAQH3qQAAAAAAAgepAAAAAAMCE6kAAAAAAgIjqQAAAAABAjOpAAAAAAACQ6kAAAAAAwJPqQAAAAACAl+pAAAAAAECb6kAAAAAAAJ/qQAAAAADAoupAAAAAAICm6kAAAAAAQKrqQAAAAAAArupAAAAAAMCx6kAAAAAAgLXqQAAAAABAuepAAAAAAAC96kAAAAAAwMDqQAAAAACAxOpAAAAAAEDI6kAAAAAAAMzqQAAAAADAz+pAAAAAAIDT6kAAAAAAQNfqQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1071\"},\"selection_policy\":{\"id\":\"1070\"}},\"id\":\"1055\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1040\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"AllLabels\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"f0b0ba13-1cf8-4a9d-84d7-43c341b1a558\",\"root_ids\":[\"1002\"],\"roots\":{\"1002\":\"15122993-96eb-4d50-ae7a-4714aeeb0bb4\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "1002" + } + }, + "output_type": "display_data" + } + ], "source": [ "sp.load_bias_series(binned_data=res)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "424af94e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "026e74ae9bd44108bfd3f8bc973ac05b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(IntSlider(value=3, description='refid', max=10), IntRangeSlider(value=(44500, 46000), de…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "58a616db1de44391b7865ee893b445df", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(description='apply', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6042b8b747f64993bbee2fbb520f9b3a", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "ranges=(44500, 46000)\n", "ref_id=3\n", @@ -93,10 +264,80 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "034eff42", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Quality of Calibration:\n" + ] + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"4f4e37c9-331b-4ffe-84f2-ea93ea0afeba\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1301\"}],\"center\":[{\"id\":\"1304\"},{\"id\":\"1308\"},{\"id\":\"1341\"}],\"height\":300,\"left\":[{\"id\":\"1305\"}],\"renderers\":[{\"id\":\"1329\"},{\"id\":\"1347\"},{\"id\":\"1366\"},{\"id\":\"1387\"},{\"id\":\"1410\"},{\"id\":\"1435\"}],\"title\":{\"id\":\"1291\"},\"toolbar\":{\"id\":\"1317\"},\"width\":800,\"x_range\":{\"id\":\"1293\"},\"x_scale\":{\"id\":\"1297\"},\"y_range\":{\"id\":\"1295\"},\"y_scale\":{\"id\":\"1299\"}},\"id\":\"1290\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1333\"},\"group\":null,\"major_label_policy\":{\"id\":\"1334\"},\"ticker\":{\"id\":\"1306\"}},\"id\":\"1305\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1403\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1434\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1295\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"1435\"}]},\"id\":\"1457\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"1410\"}]},\"id\":\"1430\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1293\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1431\"},\"glyph\":{\"id\":\"1432\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1434\"},\"nonselection_glyph\":{\"id\":\"1433\"},\"view\":{\"id\":\"1436\"}},\"id\":\"1435\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1297\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1433\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1291\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1326\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1336\"},\"group\":null,\"major_label_policy\":{\"id\":\"1337\"},\"ticker\":{\"id\":\"1302\"}},\"id\":\"1301\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"1316\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1431\"}},\"id\":\"1436\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1454\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1455\"},\"selection_policy\":{\"id\":\"1454\"}},\"id\":\"1431\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1432\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1406\"},\"glyph\":{\"id\":\"1407\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1409\"},\"nonselection_glyph\":{\"id\":\"1408\"},\"view\":{\"id\":\"1411\"}},\"id\":\"1410\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1362\"}},\"id\":\"1367\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1408\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1409\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1428\"},\"selection_policy\":{\"id\":\"1427\"}},\"id\":\"1406\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1306\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1406\"}},\"id\":\"1411\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1301\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1304\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1315\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABa9ADgWvQA4Fr0AOBa9ADgWvQA4Fr0AOBa9ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWvYA3Fr2AN6EbQTihG0E4oRtBOKEbQTihG0E4Fr0AOBa9ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAChG8E40A+5ORa9ADuEwQM872u2PONuOD2W6Jg9YCvcPTdmDD443yI+LQ4tPi9WKj7V1x0+An8HPruv2T1oK6s9HkCIPe/CZj0kwU89dYA5PXjvLT3lsSQ9fvkePa0DGz1iIho9uQAZPboWHT07eh89q5QmPTREJj18oC49qFE6Pdx6Sz0B9l096OR9PT7IjT2fa6A9u3mvPSYEvD34D8Q9R8PLPYLgyT0vncc9wILAPTanuD2gw7A9h4eoPX75nj12gZk9ehGUPbUukj0XFZE9jVqPPe9Ajj155Ys9mUyLPY1Eiz3jF4g9OvaGPefIiD0eQIg9kOqJPe81jD0TWY49mW2RPdhGkj0kM5U9MFybPSgmoj0J1aY96oOrPQZmsj0jXr09VkXCPeE2zj2f7tg9MULmPduw9T2DbgQ+WYkOPiyrGj6a0CM+AqovPmclOj6HzkU+PSRPPt3HWT7A9WU+2fRyPoqvfz5UZIg+vtiQPk/Dmj5eVaQ+f6KuPqeiuT4QIMQ+FAjPPu8v2z4rmuc+MtXxPtHJ+z43OwQ/GPUKP3ioED+hiBU/0GwaP5JjID8n6SY/vGQrP1A7MT8WkTg/AAtCPws+Sj+AclU/8lJhP7/ZcD/afnw/AACAP5xZbT+LwFI/S0MzPyfOET/UEtk+QeCRPiRkLj5xbQY+XzX+PcSr9z0LsO89XcfpPaAa4T3dm9E9uEHFPazstj35G6Y9J+SVPbeHgj1QnmM9siFQPZxUPD23vSw99V8jPdlyGj1yuhQ9lbEOPWkWBz0SDAA9UuDvPB2h2jy93ME8k5qqPMX9ljxNP4I8Y7tWPOYJNTwE4hk888UGPMDk8juEQ9w7WL7YOy+oyTsHkro7NoayO3B3qDsQ35c7sEaHO0pSZjuVHkM7vvMlO4rgGDsy1hE7YcoJOxa9ADttxwc7iuAYO37jGjvF0Q47fmXzOrdW6TpnKss6lR7DOi34qDpE8qQ6OPWmOuYJtTrzBrM6LfioOlzsoDoV/qw6Ff6sOjj1pjrQD7k6lR7DOglC2zrQUOU6LTnVOi051TpDM9E6LfioOn7jmjrF0Y460M6MOn7jmjoKAa862wy3OnInyTogPNc6FT/ZOlstzTq4Fb06lR7DOpUewzpyJ8k6TzDPOkMz0TqVX+86Wm75OqFc7TrQUOU6ZyrLOpUewzrEErs6rBi/OqwYvzpE8qQ6/gOxOv4DsTq4Fb06TzDPOk/vojpz5pw60A+5OgoBrzrQD7k65gm1OuYJtTqsGL86oRvBOsQSuzp+JMc6iSHFOgoBrzpc7KA6odqUOrjUkDrby4o6CsCCOlpueTqIYnE688WGOsXRjjq41JA6iuCYOsXRjjrF0Y46T++iOrjUkDpz5pw6LfioOorgmDpz5pw6Z+meOq3Xkjo49aY6rdeSOtvLijrQzow6/8KEOufIiDpabnk6/kRdOqFcbTrmCTU6FT9ZOha9gDoWvYA6c+acOmfpnjpz5pw6XOygOqHalDr/woQ658iIOqFcbTqIYnE6Q3R9OtvLijoWvYA6cmh1OrdWaTq3Vmk6iGJxOqFcbTpDdH06rdeSOkTypDo49aY6OPWmOmfpnjpc7KA688WGOqFcbTqJIUU6LTlVOv5EXTr+RF06iSFFOuZKYTqIYnE6iGJxOkMzUTpDM1E6FT9ZOrdWaTpyaHU6cmh1OufIiDpDdH065kphOkMzUTqhG0E6XOwgOufICDoWvQA6/8IEOtDODDqh2hQ6c+YcOlzsIDq41BA658gIOorgGDrQzgw6Wm75OVpu+TmK4Bg6/gMxOorgGDrQzgw6uNQQOqHaFDr/wgQ6/8IEOv/CBDpc7CA6odoUOrjUEDoWvQA6iGLxOVzsoDnmSmE5QzNROYhicTnmSmE5LfioOXInyTlDM9E5iGLxOYhi8TnnyAg6odoUOrdW6Tm3Vuk5Fr0AOlpu+TnmSuE5iGLxOVpu+TkWvQA65krhOUMz0TkVP9k5iGLxObdW6TkWvQA6c+YcOqEbQTpyJ0k6/kRdOi05VTq4FT06XOwgOkTyJDpc7CA6c+YcOufICDqK4Bg6odoUOv4DMTrnyAg6iGLxOVpu+TnaTeM5Wy3NOdsMtzk=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1359\"},\"selection_policy\":{\"id\":\"1358\"}},\"id\":\"1343\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1379\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1343\"},\"glyph\":{\"id\":\"1344\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1346\"},\"nonselection_glyph\":{\"id\":\"1345\"},\"view\":{\"id\":\"1348\"}},\"id\":\"1347\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"1329\"}]},\"id\":\"1342\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1365\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"1347\"}]},\"id\":\"1361\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1345\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1362\"},\"glyph\":{\"id\":\"1363\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1365\"},\"nonselection_glyph\":{\"id\":\"1364\"},\"view\":{\"id\":\"1367\"}},\"id\":\"1366\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1342\"},{\"id\":\"1361\"},{\"id\":\"1382\"},{\"id\":\"1405\"},{\"id\":\"1430\"},{\"id\":\"1457\"}],\"padding\":2,\"spacing\":0},\"id\":\"1341\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1346\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1328\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"1387\"}]},\"id\":\"1405\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1343\"}},\"id\":\"1348\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1312\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1359\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1305\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1308\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1327\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1325\"}},\"id\":\"1330\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"1366\"}]},\"id\":\"1382\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1309\"},{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1316\"}]},\"id\":\"1317\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1380\"},\"selection_policy\":{\"id\":\"1379\"}},\"id\":\"1362\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1407\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1344\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1325\"},\"glyph\":{\"id\":\"1326\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1328\"},\"nonselection_glyph\":{\"id\":\"1327\"},\"view\":{\"id\":\"1330\"}},\"id\":\"1329\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AOc6krlbGUAAn6GR1gEZQABtP2ljqBhAAIS4sl9PGEAAG7EHy/YXQABmzQGlnhdAAJuxOu1GF0AA6wFMo+8WQACLYs/GmBZAALR3XldCFkAAmeWSVOwVQABsUAa+lhVAAGNcUpNBFUAAs60Q1OwUQACQ6Np/mBRAAC+xSpZEFEAAx6v5FvETQACFfIEBnhNAAKnHe1VLE0AAXTGCEvkSQADdXS44pxJAAFfxGcZVEkAABpDeuwQSQAAc3hUZtBFAAMx/Wd1jEUAAShlDCBQRQADQTmyZxBBAAJDEbpB1EEAAux7k7CYQQAAWA8xcsQ9AAGIiHKkVD0AAxuPrvXoOQACsj26a4A1AAHpu1z1HDUAAmMhZp64MQAB65ijWFgxAAHoQeMl/C0AADo96gOkKQACUqmP6UwpAAIKrZja/CUAANtq2MysJQAAgf4fxlwhAAKTiC28FCEAAMk13q3MHQAAuB/2l4gZAAAZZ0F1SBkAAFosk0sIFQADW5SwCNAVAAKyxHO2lBEAA/jYnkhgEQAA2vn/wiwNAAL6PWQcAA0AA/vPn1XQCQABmM15b6gFAAFaW75ZgAUAAOGXPh9cAQAB46DAtTwBAAATRjgyP/z8AfFuMJIH+PwAcAcGgdP0/AMRSk39p/D8ATOFpv1/7PwB8PateV/o/ACD4vVtQ+T8AFKIItUr4PwA0zPFoRvc/AEwH4HVD9j8AHOQ52kH1PwCM82WUQfQ/AGTGyqJC8z8AhO3OA0XyPwCk+di1SPE/ALR7T7dN8D8A4AgyDajuPwCASThEt+w/AMDafhDJ6j8AWN7Sbt3oPwAAdgFc9OY/ADjD19QN5T8AwOci1injPwAwBbBcSOE/AFB6mMrS3j8A8GKJ2RnbPwAQB83fZdc/ADCq/da20z8AsI+1uAzQPwCg9R39zsg/ACBdSESOwT8AwLo9dK60PwAA4a+OTpk/AAD77QrQn78AQJ2PmCi2vwDgq7MbJcK/AKDPbHwsyb8AsFmfPRXQvwBwaHqSj9O/AMBQLUMF178AkM8dVnbavwAQobHR4t2/AChBJ16l4L8A8BctDlfivwBYMx18BuS/AKhxKquz5b8AKLGHnl7nvwBI0GdZB+m/AIit/d6t6r8A+CZ8MlLsvwAYGxZX9O2/AEBo/k+U778AfPYzEJnwvwCcw8LlZvG/ANwKRaoz8r8AVDtUX//yvwA8xIkGyvO/AKwUf6GT9L8A6JvNMVz1vwAUyQ65I/a/AGAL3Djq9r8AANLOsq/3vwAYjIAodPi/ANSoips3+b8AZJeGDfr5vwD8xg2Au/q/AMymufR7+78A7KUjbTv8vwCcM+Xq+fy/ABC/l2+3/b8AZLfU/HP+vwDIizWUL/+/AHSrUzfq/78AykLk81EAwACkxJZTrgDAAOYSjjsKAcAAIOWWrGUBwAD28n2nwAHAAO7zDy0bAsAAqp8ZPnUCwAC8rWfbzgLAAL7VxgUoA8AARs8DvoADwADmUesE2QPAADoVStswBMAA1tDsQYgEwABWPKA53wTAAE4PMcM1BcAATgFs34sFwAD0yR2P4QXAANogE9M2BsAAjr0YrIsGwACqV/sa4AbAAMamhyA0B8AAemKKvYcHwABaQtDy2gfAAP79JcEtCMAA+kxYKYAIwADw5jMs0gjAAGaDhcojCcAA/tkZBXUJwABMor3cxQnAAOaTPVIWCsAAZmZmZmYKwABa0QQatgrAAGKM5W0FC8AAEk/VYlQLwAAG0aD5ogvAAMrJFDPxC8AA+PD9Dz8MwAAu/iiRjAzAAP6oYrfZDMAA9qh3gyYNwAC+tTT2cg3AAOKGZhC/DcAA+tPZ0goOwACaVFs+Vg7AAGDAt1OhDsAA4M67E+wOwACyNzR/Ng/AAGay7ZaAD8AAlva0W8oPwADvXSvnCRDAAOjcz3cuEMAAA1Qu4FIQwAAJH60gdxDAAMeZsjmbEMAAByClK78QwACZDev24hDAAEG+6psGEcAAz40KGyoRwAAP2LB0TRHAAM34Q6lwEcAAz0squZMRwADjLMqkthHAANf3iWzZEcAAdwjQEPwRwACHugKSHhLAANtpiPBAEsAAOXLHLGMSwABwLyZHhRLAAEf9CkCnEsAAjTfcF8kSwAAOOgDP6hLAAJJg3WUME8AA6Qba3C0TwADXiFw0TxPAAC5Cy2xwE8AAt46MhpETwAA/ygaCshPAAI9QoF/TE8AAdH2/H/QTwAC3rMrCFBTAACk6KEk1FMAAj4E+s1UUwAC33nMBdhTAAG2tLjSWFMAAfUnVS7YUwACvDs5I1hTAANFYfyv2FMAArYNP9BUVwAAT66SjNRXAAMnq5TlVFcAAm954t3QVwABVIsQclBXAAMURLmqzFcAAtQgdoNIVwADuYve+8RXAADx8I8cQFsAAbrAHuS8WwABMWwqVThbAAKPYkVttFsAAPIQEDYwWwADlucipqhbAAGnVRDLJFsAAkjLfpucWwAAtLf4HBhfAAAMhCFYkF8AA5GljkUIXwACVY3a6YBfAAOdpp9F+F8AAodhc15wXwACVC/3LuhfAAIde7q/YF8AARS2Xg/YXwACa011HFBjAAFOtqPsxGMAAPRbeoE8YwAAeamQ3bRjAAMUEor+KGMAA/UH9OagYwACTfdymxRjAAE4TpgbjGMAA/V7AWQAZwABpvJGgHRnAAF+HgNs6GcAArBvzClgZwAAX1U8vdRnAAG8P/UiSGcAAfyZhWK8ZwAARduJdzBnAAPBZ51npGcAA6S3WTAYawADITRU3IxrAAFcVCxlAGsAAYOAd81wawACwCrTFeRrAABLwM5GWGsAAVOwDVrMawAA+W4oU0BrAAJ2YLc3sGsAAOwBUgAkbwADl7WMuJhvAAGe9w9dCG8AAicrZfF8bwAAXcQwefBvAAOMMwruYG8AAsPlgVrUbwABMk0/u0RvAAIM19IPuG8AAIzy1FwscwAD0AvmpJxzAAMHlJTtEHMAAVUCiy2AcwACCbtRbfRzAAAvMIuyZHMAAwLTzfLYcwABphK0O0xzAANWWtqHvHMAAzkd1NgwdwAAh80/NKB3AAJb0rGZFHcAA+afyAmIdwAAZaYeifh3AAL6T0UWbHcAAsoM37bcdwADHlB+Z1B3AAMIi8EnxHcAAcYkPAA4ewACeJOS7Kh7AABNQ1H1HHsAApGdGRmQewAASx6AVgR7AACvKSeydHsAAvMynyroewACUKiGx1x7AAHk/HKD0HsAAN2f/lxEfwACa/TCZLh/AAG5eF6RLH8AAgOUYuWgfwACY7pvYhR/AAILVBgOjH8AADPa/OMAfwAABrC163R/AAClTtsf6H8AAqSPgEAwgwIAi8ljEGiDAAOrCeH4pIMCA4MNyPzggwIDvInoHRyDAgPoNwtZVIMAA6bJ9rWQgwICeP+CLcyDAgAHiHHKCIMAA+cdmYJEgwABqH/FWoCDAADkW71WvIMAATdqTXb4gwICKmRJuzSDAANmBnofcIMAAHcFqqusgwAA8harW+iDAgBz8kAwKIcAApFNRTBkhwAC4uR6WKCHAAD1cLOo3IcAAG2mtSEchwAA2DtWxViHAgHR51iVmIcCAvNjkpHUhwIDyWTMvhSHAAPwq9cSUIcAAwXldZqQhwIAldJ8TtCHAgA9I7szDIcCAYyN9ktMhwIAINH9k4yHAAOanJ0PzIcAA3qypLgMiwADYcDgnEyLAgLkhBy0jIsCAae1IQDMiwIDLATFhQyLAAMaM8o9TIsAAP7zAzGMiwIAcvs4XdCLAAEPAT3GEIsCAmfB22ZQiwIAFfXdQpSLAAG2ThNa1IsAAs2HRa8YiwADBFZEQ1yLAAHrd9sTnIsAAxuY1ifgiwICHX4FdCSPAAKd1DEIaI8AACFcKNysjwACTMa48PCPAgCszK1NNI8CAuIm0el4jwAAeY32zbyPAAEPtuP2AI8CADVaaWZIjwABiy1THoyPAACd7G0e1I8CAQZMh2cYjwICYQZp92CPAABG0uDTqI8CAjxiw/vsjwAD7nLPbDSTAgDpv9ssfJMAAMb2rzzEkwADFtAbnQyTAgNyDOhJWJMAAXlh6UWgkwAAuYPmkeiTAgDLJ6gyNJMAAUcGBiZ8kwIBwdvEasiTAgHUWbcHEJMCARc8nfdckwIDHzlRO6iTAAN9CJzX9JMCAdFnSMRAlwIBrQIlEIyXAAKolf202JcCAFjfnrEklwICWovQCXSXAAA+W2m9wJcCAZj/M84MlwICBzPyOlyXAAEhrn0GrJcCAnUnnC78lwABolQfu0iXAAI58M+jmJcCA9iye+volwICD1HolDybAgB2h/GgjJsCAqMBWxTcmwIALYbw6TCbAgC2wYMlgJsCA8Nt2cXUmwIA9EjIziibAgPeAxQ6fJsAACFZkBLQmwABRv0EUySbAgLjqkD7eJsCAJQaFg/MmwIB+P1HjCCfAAKjEKF4eJ8AAh8M+9DMnwAACasalSSfAgP/l8nJfJ8CAY2X3W3UnwAAVFgdhiyfAgPklVYKhJ8AA98IUwLcnwADxGnkazifAANBbtZHkJ8AAd7P8JfsnwIDOT4LXESjAgLteeaYoKMCAIg4Vkz8owADqi4idVijAAPcFB8ZtKMAAMarDDIUowAB7pvFxnCjAALwoxPWzKMCA2l5umMsowAC8diNa4yjAAEWeFjv7KMAAXAN7OxMpwADm04NbKynAAMs9ZJtDKcAA7m5P+1spwAA1lXh7dCnAAIfeEhyNKcAAyXhR3aUpwIDgkWe/vinAgLNXiMLXKcCAJ/jm5vApwAAiobYsCirAAIuAKpQjKsCARMR1HT0qwAA2msvIVirAgEUwX5ZwKsAAWbRjhooqwABVVAyZpCrAgB8+jM6+KsAAnp8WJ9kqwIC4pt6i8yrAgFCBF0IOK8CATl30BCkrwACYaKjrQyvAABPRZvZeK8AApMRiJXorwAAxcc94lSvAAKAE4PCwK8AA2KzHjcwrwIC8l7lP6CvAgDPz6DYELMCAI+2IQyAswABxs8x1PCzAgAR0581YLMAAwVwMTHUswICNm27wkSzAgE5eQbuuLMAA69K3rMsswIBIJwXF6CzAgEuJXAQGLcAA2ibxaiMtwIDcLfb4QC3AgDPMnq5eLcAAyS8ejHwtwACBhqeRmi3AgEL+bb+4LcAA8cSkFdctwIB0CH+U9S3AALD2LzwULsAAjb3qDDMuwIDtiuIGUi7AgLeMSipxLsAA1PBVd5AuwIAk5Tfury7AAJOXI4/PLsCAATZMWu8uwIBY7uRPDy/AgHnuIHAvL8CAUWQzu08vwIC+fU8xcC/AgKpoqNKQL8AA+VJxn7EvwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAitmLN4rZizeK2Ys3itmLN4rZizeK2Ys3itmLNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAitmLN4rZizeK2Ys3itmLN4rZCziK2Qs4itkLOIrZizeK2Ys3itmLN4rZizcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAitmLN4rZizeK2Ys3itmLN0/G0Ti9egc6eoYlO4sDHjyDfNY8mF9ePdq0tz3/ufw97msZPsvTKT4jhzA+H6wqPq6wFj7P8fI9Pry7PY2gkj0553E9BS5PPVzxOT1EvSs9LrIlPaRKIT02Zh098kYfPds8Iz3ODyc9JeouPVzxOT3wSkc9KWdbPXiidD2VVIo9EQadPXfBsj0accQ9hS7UPQFV3T2VI+E9oJ7fPeBY2D04u8s9OUTBPQPbtD2/zqs9JV+lPVmKoD0Zz509ln6cPUN/mj2r6pk9j2eZPWAqmT0MF5g9DbWWPUbPlj1qkZg9976ZPYwXnT3d7qA9x/ijPQe0pj1i3qo9jUGvPR02tz24L709ncHFPU0o0z1GE+Q9EV/zPa4QBD7k7xA+sbIdPq48Kj58iTY+ZbtEPjv4Uj72nl4+xOtqPmt1eD6zpoM+IOSMPq86lj7QyqA+gEWtPgjeuD72G8c+JQLWPsVX5T5nS/M+VhkBP6o2CD9UvA8/nksWP+pWHT/3vyM/c5IqP/sgMD8ybDc/2us+Py6sRz+Psk4/62JZP6ZEZT9O+3M/Wgx/PwAAgD/h+Go/9rpPP8FPLz9Q5gw/mY/OPknYhT5KWx0+QCf9PZbD8z0eFu89qy7nPYW53T0NbdA9vTLBPS0psD03epw9oOOHPZdMaT1oDEs9eXMwPfe+GT1WIwc9MkbvPG/C1jxha8g8+ya9PBr5rzxKNaY8xlmbPMdskDzRNIc8rmx4PGpKXDzzhkQ8k80oPJ/QEjxI4QE8YG3cO/bWwDtmubA7jUClOw7KnztPmJc7/TWKO3EBcjvyimw7DvhZO8Q1RTtsWSk77uIjOxVqGDvi2xE7lwYIO8qnAzuvqf86PgQCO34b+TqXYvw6So3yOhoS4TpPxtE6ncHFOh5etTo7y6I6VSWbOglQkTqhDZo6CD2cOlMSpjrsz64604irOu7iozrsz646IHGqOiBxqjoHKqc6h7OhOmozvzpqM786txu+OjiluDprRrQ604irOp7UujrSdbY6BAS9OtFiwToD8cc6BAS9OrYIyTrRYsE6txu+OgHe0joD8cc6tgjJOueD2jrng9o6mHXxOhn/6zpOs9w6NGzZOmf63zpoDdU65nDlOrYIyTppIMo6UNnGOrT10zppIMo6AMvdOmkgyjpPxtE6z0/MOrYIyTqe1Lo6NpLDOh1LwDoEBL06txu+OgQEvTppIMo6nK7QOmkgyjrpqcQ6hHrCOh5etTprRrQ6IHGqOoWNtzq5LrM6bFmpOoagrDq6Qag604irOtSboDpWOJA6iMaWOqMgjzrWwYo6itmLOj3xjDqK2Ys6V0uFOkqNcjoX7HY6GhJhOk6zXDoaEmE6ss9pOuZwZToX7HY6fht5Ohfsdjpxkog65Ep7Or16hzpwf5M6cZKIOuRKezqIxpY61sGKOldLhTqyz2k6s+JeOueDWjp+Lm46g2dNOuiWTzpOs1w6tPVTOrPiXjoaEmE654NaOk/GUTpQ2UY6gVRYOhn/azobJVY6HDhLOrYISTq09VM6TrNcOk/GUTqFjTc654NaOrPiXjq09VM6tghJOoR6Qjq2CEk6f0FjOrPiXjp/QWM6s+JeOrPiXjrmcGU6HDhLOlHsOzq6QSg67M8uOuu8OToeXjU667w5OoWNNzqFjTc6uS4zOrtUHTpVJRs6VSUbOiKXFDohhB86u1QdOu7iIzq6QSg6h7MhOoezITpVJRs68AgOOr16BzrxGwM6fhv5OeVd8DlMoOc55V3wObG89DmIxhY6VjgQOiBxKjrpqUQ654NaOuZwZTqxvHQ6GhJhOrT1UzrpqUQ6HDhLOh1LQDrrvDk6h7MhOiKXFDq8ZxI6IpcUOuVd8DmDZ805hY23ObYIyTmz4t45sbz0ObG89DlXSwU68AgOOorZCzoilxQ68AgOOvEbAzq9egc6i+wAOn4b+Tl/QeM5g2fNObYIyTm2CMk5Uey7OYezoTm5LrM5HUvAOezPrjkgcao5hY23OSBxqjlR7Ls5IpeUOYezoTmFjbc5f0HjOX9B4zkZ/+s554PaOeeD2jkbJdY5tgjJOYWNtzkbJdY5Uey7ObYIyTnlXfA55V3wOX4b+TkZ/+s56anEOVHsuzmFjbc5h7OhOe/1mDkil5Q5vXqHObG8dDnxG4M57/WYOYezoTnv9Zg5IpeUOSKXlDkgcao5HUvAObtUnTm8Z5I5vXqHOX4beTk=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1339\"},\"selection_policy\":{\"id\":\"1338\"}},\"id\":\"1325\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1383\"}},\"id\":\"1388\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1364\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1380\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1336\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1383\"},\"glyph\":{\"id\":\"1384\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1386\"},\"nonselection_glyph\":{\"id\":\"1385\"},\"view\":{\"id\":\"1388\"}},\"id\":\"1387\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAHX5Ojd1+To3dfk6N3X5Ojd1+To3dfk6N3X5OjcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1+To3dfk6N3X5Ojd1+To3dfk6N3X5Ojd1+To3dfm6N3X5ujd1+bo3dfm6N3X5ujd1+To4dfk6OHX5ujd1+bo3dfm6N3X5ujd1+bo3AAAAAAAAAAAAAAAAAAAAAHX5ujd1+bo3dfm6N3X5ujd1+bo3dfm6N3X5ujcAAAAAdfm6N3X5ujd1+bo3dfm6N3X5ujd1+bo3dfm6NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHX5ujd1+bo3dfm6N3X5ujd1+bo3dfm6N3X5ujcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdfk6Nxg7DDh1+To4dfk6OHX5Ojh1+To4GDuMOHX5OjlmdwM6TVu/OnsArDsazmg8+XTsPCDVWT1roK49xqj2PUgUHj74Xj0+MxpRPgT6WD79Z1A+1qk8PlLnJD6zSQw+wGLmPRWlvT2xoqA9jRaQPUyggz3btHE9r4ddPcVKUD3jUkI9wrs3PUa5Kj201CM9/mQdPeMxGT3czRI9b5MSPX22Ej1Jjhg9mAgePcrVJD2Umi49lwpAPc4oUT0Am2Q9Iup3PaJfiD10Xpc9Nf2oPa7suT1Qb8w9BCjbPYve5z21ze09w7PwPWID7z0k6eY9tszcPfF20z0pssk9///APdO0tj0Y1q892H6qPZS4pD2CoJ49uCSdPUZ7nD3aFps98lSZPcbrmD00Jpk9NCaZPUSGlj3J/pQ9fHmVPV2akz1zP5A9dhWPPZGFkD3xnJA9OHaSPcP2kj3VS5Y93eyZPYoimz3a2Z09Z/OfPbeqoj1QEaY9FUioPUhSrD0OIrA9Vb60Pfo0vD0kJMI9w1XKPbuW0D30qNY95wDiPeh77T3vO/g9fUoCPnWLCD6AjBE+0jgaPrU/Iz6ctSw+Y+E0PkJ5PT6mTEc+dShOPhYwVT58q1s+U2VjPkFObj5Qvnc+yGB/PhmHhD6cSIs+d1qSPjR6lz5WIJ0+uCyjPhWNqz5TPLQ+qkC8PlK7xD7oPM4+fxLWPm7k3z7xaOk+0u3xPgPl+T79vgE/3igGPwdVCz8isg4/FwISP7/MFT9+Fho/vb0cP2c0ID9S0CM/e/woP8XwLD9kBzE/d940P9ipOj/Dc0A/+L5EPzWnST90wVE/iLNZP5QIYT8sMmc/V/twP7d2ez8AAIA/QYh5P6GxZj+5I0s/TQItP8YYCj/dBs4+eoSPPulpPz6xoQ8+P+gCPjB09j2IrOQ9x6bUPTY8yD2ctr09wF+zPSgXpj3NjJw9cwKTPS2EhD14a249JOhVPZmEOj2BJiQ9oSILPU9T+DwKEuc8x+PRPNt0wTyFlrU8PEKoPJgInjx6hI88QuyDPGlIbjzF71w8qn5KPDptOjzWBDA8iIoqPCUiIDxgriA8e8IdPB6+GTxT5hM89+EPPNAkDTxFPQ48m90LPDJPCTxZDAw8oSILPK6sCTxCyfk7o5bgOxPuxTuo46Y7O4R6O6NYUjt7wh079+EPOysKCjtzAQI7kAXxOmy8AjtsvAI7HoALOysKCjsyTwk7UqgFO0UeBzt6RgE73kHoOm8w2DpvMNg6seLQOt5B6Dq3o+w6g3vyOpAF8TreQeg60rfpOhNq4jp8utY6R5LcOpbO0zog9OA6aWf1Omln9To1P/s6cwECO1KoBTsyTwk7r+oXO6/qFzuOkRs7LIYmO1ppITsshiY7LIYmO2fzHztGmiM7YK4gO4dMHDtTJCI73M0SO7x0Fju1Lxc7EfYMOz/ZBzsntfw6Gyv+OkxjBjvczRI7vHQWO7UvFztTJCI7H/wnO1MkIju1Lxc7TGMGOw6h/zqAiwA7aWf1Orej7Do6CN46J7X8Oie1/DpCyfk6kAXxOmln9Tp38fM6NT/7Ot5B6DreQeg6ls7TOhNq4joH4OM6Qsn5OoCLADs/2Qc7We0EOx6ACzsegAs7GDsMO3MBAjsntfw6no/vOnpGATs4lAg7BGwOOxg7DDsR9gw7EfYMOziUCDtc3fY67MvmOolE1TqjWNI6R5LcOm8w2DppZ/U6Mk8JO0UeBztsvAI7DqH/OnMBAjuAiwA77MvmOv8eyDpob7w6QdHAOmhvvDo5EKU6H/ynOt1JrzqoIbU6jw24OtG/sDqBg7k6BOiqOkaaozr9Jo86Mk+JOvGckDrxnJA6TGOGOmZ3gzqDe3I6aWd1OhsrfjrSt2k67MtmOoN7cjokxYo6h0ycOurTrTo=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1403\"},\"selection_policy\":{\"id\":\"1402\"}},\"id\":\"1383\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1402\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1315\"}},\"id\":\"1311\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1358\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1290\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"4f4e37c9-331b-4ffe-84f2-ea93ea0afeba\",\"root_ids\":[\"1290\"],\"roots\":{\"1290\":\"947fd486-053b-42fa-b676-6874499f7dab\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "1290" + } + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "E/TOF relationship:\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "85aa8b84ac314d0ead3e1976c9dfd26b", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "ref_id=3\n", "ref_energy=-.3\n", @@ -105,10 +346,97 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "bbbfe992", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[Fit Statistics]]\n", + " # fitting method = leastsq\n", + " # function evals = 49\n", + " # data points = 6\n", + " # variables = 3\n", + " chi-square = 3.2422e-04\n", + " reduced chi-square = 1.0807e-04\n", + " Akaike info crit = -52.9551731\n", + " Bayesian info crit = -53.5798947\n", + "[[Variables]]\n", + " d: 1.32138456 +/- 0.05835765 (4.42%) (init = 1)\n", + " t0: 8.4773e-07 +/- 1.8222e-08 (2.15%) (init = 1e-06)\n", + " E0: -15.4833228 +/- 0.37758140 (2.44%) (init = -5)\n", + "[[Correlations]] (unreported correlations are < 0.100)\n", + " C(d, t0) = -1.000\n", + " C(d, E0) = -0.998\n", + " C(t0, E0) = 0.996\n", + "Quality of Calibration:\n" + ] + }, + { + "data": { + "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", + "application/vnd.bokehjs_load.v0+json": "" + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"dbab62da-8615-4b82-8416-b17d4960023c\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1609\"}],\"center\":[{\"id\":\"1612\"},{\"id\":\"1616\"},{\"id\":\"1649\"}],\"height\":300,\"left\":[{\"id\":\"1613\"}],\"renderers\":[{\"id\":\"1637\"},{\"id\":\"1655\"},{\"id\":\"1674\"},{\"id\":\"1695\"},{\"id\":\"1718\"},{\"id\":\"1743\"}],\"title\":{\"id\":\"1599\"},\"toolbar\":{\"id\":\"1625\"},\"width\":800,\"x_range\":{\"id\":\"1601\"},\"x_scale\":{\"id\":\"1605\"},\"y_range\":{\"id\":\"1603\"},\"y_scale\":{\"id\":\"1607\"}},\"id\":\"1598\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1605\",\"type\":\"LinearScale\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"1637\"}]},\"id\":\"1650\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1635\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1618\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1641\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1614\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1609\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1612\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"1624\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1610\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1644\"},\"group\":null,\"major_label_policy\":{\"id\":\"1645\"},\"ticker\":{\"id\":\"1610\"}},\"id\":\"1609\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1641\"},\"group\":null,\"major_label_policy\":{\"id\":\"1642\"},\"ticker\":{\"id\":\"1614\"}},\"id\":\"1613\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1607\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1634\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1601\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"1623\"}},\"id\":\"1619\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1621\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1646\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1671\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1613\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1616\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1644\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1711\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"1655\"}]},\"id\":\"1669\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1599\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1645\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1650\"},{\"id\":\"1669\"},{\"id\":\"1690\"},{\"id\":\"1713\"},{\"id\":\"1738\"},{\"id\":\"1765\"}],\"padding\":2,\"spacing\":0},\"id\":\"1649\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1647\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1710\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1603\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1633\"}},\"id\":\"1638\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1647\"},\"selection_policy\":{\"id\":\"1646\"}},\"id\":\"1633\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1633\"},\"glyph\":{\"id\":\"1634\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1636\"},\"nonselection_glyph\":{\"id\":\"1635\"},\"view\":{\"id\":\"1638\"}},\"id\":\"1637\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1642\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1622\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1636\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1623\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1617\"},{\"id\":\"1618\"},{\"id\":\"1619\"},{\"id\":\"1620\"},{\"id\":\"1621\"},{\"id\":\"1622\"},{\"id\":\"1624\"}]},\"id\":\"1625\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1652\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1687\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1736\"},\"selection_policy\":{\"id\":\"1735\"}},\"id\":\"1714\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1651\"},\"glyph\":{\"id\":\"1652\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1654\"},\"nonselection_glyph\":{\"id\":\"1653\"},\"view\":{\"id\":\"1656\"}},\"id\":\"1655\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"1718\"}]},\"id\":\"1738\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1736\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1739\"}},\"id\":\"1744\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1714\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1667\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1667\"},\"selection_policy\":{\"id\":\"1666\"}},\"id\":\"1651\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"1674\"}]},\"id\":\"1690\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"1714\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1651\"}},\"id\":\"1656\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1666\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1688\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1691\"},\"glyph\":{\"id\":\"1692\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1694\"},\"nonselection_glyph\":{\"id\":\"1693\"},\"view\":{\"id\":\"1696\"}},\"id\":\"1695\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1692\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1691\"}},\"id\":\"1696\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1742\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"1743\"}]},\"id\":\"1765\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1711\"},\"selection_policy\":{\"id\":\"1710\"}},\"id\":\"1691\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1670\"},\"glyph\":{\"id\":\"1671\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1673\"},\"nonselection_glyph\":{\"id\":\"1672\"},\"view\":{\"id\":\"1675\"}},\"id\":\"1674\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1694\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1735\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"1695\"}]},\"id\":\"1713\",\"type\":\"LegendItem\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1688\"},\"selection_policy\":{\"id\":\"1687\"}},\"id\":\"1670\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1653\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1762\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1763\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xtw3v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4v17cNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv17cN79e3De/Xtw3v17cN79e3De/Xtw3v17cNwAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL9eXDi/Xlw4N7uJOS2ekDp2fjY7Ex7kOzwZjDwEvRM9+PV5PWeixj33CRM+3+RIPmw2gj5yMJ4+k3e2Pq92yD5Z3NI+koDRPq92yD45+bc+ppijPm0Ejz6crHc+7JpSPlXyNz677iM+yDcVPnmeCj5KH/o9XPLlPR4D2D3/cMc9coe6PcURrz0Ew6U9FAacPYiDlT0k4os9CE2JPbxJhj3J/IY92N6IPT5IjT1jMo49ZWGPPd6jkT3thZM9iIOVPUhrmD2wA549PrWlPSxDrj2fxrk924bGPQNu1T0+LuI90HXxPersAj5jMg4+Z5MZPsz/Jj781zY+8fJCPg3vSz7oo1Y+tglePrjUYT5unGI+wY1dPlPPWj77GFc+b/pNPoFsRT5xIz0+GjU0PtW7Kz677iM+sjIfPjpUGj6VNhY+fscQPm22DT647gw+CnwKPjpOCD7uSgU+t+sDPmuEAz4ZWwM+q5wAPv+C/T1ltPw9uN38PYdv/D1H8Pg9YO/zPYcI9j24pfc9Suf0PQpo8T0rvOo9iGnqPboG7D1AXeM9QF3jPUBd4z0jAOY9+4XvPeGG9D3OrfY9ALL+PetQAD4fHQM+Hx0DPnvKAj6opQQ+9AwFPs6+Bj49fQk+Ok4IPp/sCD4fhAk+2w0KPoArDj7xfA8+nMAQPoLBFT7jaBo+3N4fPixAJT6i7yg+ZjUuPiD3Mz6P5Dc+F6U+PnImRj7tYk0+AD9UPtjEXT65O2g+yrNxPlOjeT7TZ4E+tViFPuGBiD5S04k+91SLPphijj58mI8+1mSPPonnkj4LSpc+V02aPmFtnD4Be58+6qqlPi0LqT5Qxqg+w5SsPlKqsT5gKLY+LPi1PuQ8uT5wcb4+ZCXEPg3Wxj6C08s+LX7TPrAu2T59e9s+KHTkPszJ7T461vE+99z0PnX6+z7IMQM/W4wFP50hBT+cvQc/af8LP/7hDj+v8g0/5kYRP0r+Fj/4cBk/f3wYP1wEHD8QtiA/LfIjP6ZKIj/abyQ/igYqP/ICLT98oSo/jgstP4czMT/AaDQ/7QAzPy+LND+aXTk/rvY8P5K6OT/AxDw/5JhBPwQ+RT8kcUQ/txlIP0ckTz9Ce1Q/lt5TP88IWT9JZGA/E2xlPxw+Zj/yF2w/GZh0PyQqez/vq3k/Eqp8PwAAgD9z1ng/O0JkPyeuTD8dyDI/YioZP7fa8z4tEbs+LreVPuJReD6doFM+ydlAPqsSND6NSyc+mZQYPoe1CD4SXPs92CvkPWeixj0ucq89y5igPXppjj08bHk9T9hePbKlST163Dg9qHwsPTu4Fz1yFBA9he0NPQ87AT0r9O88q4XePAjGxTwO5rA8timbPIQfgTzQdXE8O5JIPMKBOTx33yo86fUdPNd9FDyfUw88cUYDPFSxADzua+g7aZ/UO/pKyjuI9r876JSpO87BjzugtIM7aN1rOwvDUzsV4Ew7+gwzO+fSQDu/Xlw7AaZaO04KUjvIe1U7KRo/Ox/9RTszNzg7SHEqO1GOIzvx7zk7bGE9O9KYTjvIe1U7fBdeO4Y0Vzs50F87AaZaO3L6ZDuYrGA7v15cO+UQWDs=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1763\"},\"selection_policy\":{\"id\":\"1762\"}},\"id\":\"1739\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1739\"},\"glyph\":{\"id\":\"1740\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1742\"},\"nonselection_glyph\":{\"id\":\"1741\"},\"view\":{\"id\":\"1744\"}},\"id\":\"1743\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1654\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1672\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1670\"}},\"id\":\"1675\",\"type\":\"CDSView\"}],\"root_ids\":[\"1598\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"dbab62da-8615-4b82-8416-b17d4960023c\",\"root_ids\":[\"1598\"],\"roots\":{\"1598\":\"8477c7a0-b593-4cee-81f9-447e77aadefc\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "1598" + } + }, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "E/TOF relationship:\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9f59d9133839416487aa1649ebe5144c", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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f/LJJ9WyZUsNGjTotMeYTCbFxsbWdWk44cpO8UqOCtJt767VFS+l6pVru6pvcqSrywIAAAAAwG1wCWEjUl5ertmzZ+umm24646yqwsJCJSUlKTExUaNGjdK2bdvqscrG6aJ4q+bdybpYAAAAAADUhgCrEZk7d67y8vJ0ww03nLZN69at9dZbb+mLL77Q7NmzZbfb1bdvXx08ePC0x5SVlclms9V44PyxLhYAAAAAALUzGUzzaDSGDx8uHx8fzZs375yPqaioUNu2bTV+/Hg98cQTtbZ59NFH9dhjj52yPT8/X1ar9XfX25h9uSlTf/t0k1pGBenV67opMZx1sQAAAADgdGw2m0JCQhiHejBmYDUS+/bt0w8//KBbbrnlvI7z9vZWly5dlJ6efto206ZNU35+vuNx4MCBCy230buyU7w+/3M/2UordMXLqVqSdtjVJQEAAAAA4DIEWI3E22+/rejoaI0cOfK8jquqqtKWLVsUFxd32ja+vr6yWq01HrhwJ9fF6pIYqhtnrdHzC35WlZ0JkwAAAACAxocAqxGw2+16++23df3118tiqXnjyUmTJmnatGmO548//ri+//577dmzR+vXr9d1112nffv2nffMLThHaICP3ry+h+4d1kovLtqlG97+SceKyl1dFgAAAAAA9YoAqxH44YcftH//ft10002n7Nu/f7+ysrIcz48fP65bb71Vbdu21eWXXy6bzaYVK1booosuqs+S8Stms0l3DU3ROzf11LZMm/7w4jJtPJDn6rIAAAAAAKg3LOIOp2PxvLqTmVeiO95fr62H8vXwHy7Sdb2TZDKZXF0WAAAAALgU41DPxwwsoAGJD/XXR7f10YReSXroi22a+tFGFZdXurosAAAAAADqFAEW0MD4WMx69Mp2enF8F32/PUejX1mu3UcKXV0WAAAAAAB1hgALaKCu7BSvL+7opyq7oVEvL9fXm7POfhAAAAAAAA0QARbQgKXEBOuLO/trcOso3fH+ej00d6tKK6pcXRYAAAAAAE5FgAU0cEG+Fr00vov+Obq9Plp7QGNnrtDe3CJXlwUAAAAAgNMQYAEewGQy6breSZozpa+Ky6v0hxeX6ctNma4uCwAAAAAApyDAAjxIu/gQzburv4ZdFKO/fLBB0z7fwiWFAAAAAIAGjwAL8DBBvha9MK6znhrbQZ+vP6jRryxX+mHu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BFgAAAAAAABwawRYAAAAAAAAcGsEWAAAAAAAAHBrBFhosJ588kmZTCbdc889jm2lpaW64447FBERoaCgII0dO1Y5OTk1jtu/f79GjhypgIAARUdH6/7771dlZWWNNkuWLFHXrl3l6+ur5ORkzZo165T3f+WVV9SsWTP5+fmpV69e+umnn+riY3q03/bhsWPHdNddd6l169by9/dX06ZN9Ze//EX5+fk1jqMP3UdtP4cnGYahyy67TCaTSXPnzq2xjz50H6frw5UrV+riiy9WYGCgrFarBg4cqJKSEsf+Y8eOacKECbJarQoNDdXNN9+swsLCGq+xefNmDRgwQH5+fkpMTNTTTz99yvt/8sknatOmjfz8/NShQwd98803dfI5PVltfZidna2JEycqNjZWgYGB6tq1qz777LMax9GHrvPoo4/KZDLVeLRp08axn+8z7u9Mfcj3mYbhbD+HJ/F9BnAjBtAA/fTTT0azZs2Mjh07Gnfffbdj++TJk43ExERj4cKFxtq1a43evXsbffv2deyvrKw02rdvbwwbNszYsGGD8c033xiRkZHGtGnTHG327NljBAQEGPfee6+xfft246WXXjK8vLyM+fPnO9p8+OGHho+Pj/HWW28Z27ZtM2699VYjNDTUyMnJqZfP7wlq68MtW7YYY8aMMb788ksjPT3dWLhwoZGSkmKMHTvWcRx96D5O93N40nPPPWdcdtllhiRjzpw5ju30ofs4XR+uWLHCsFqtxvTp042tW7caO3fuND766COjtLTU0WbEiBFGp06djFWrVhnLli0zkpOTjfHjxzv25+fnGzExMcaECROMrVu3Gh988IHh7+9vvPbaa442y5cvN7y8vIynn37a2L59u/Hggw8a3t7expYtW+rl83uC0/XhJZdcYvTo0cNYvXq1sXv3buOJJ54wzGazsX79ekcb+tB1HnnkEaNdu3ZGVlaW43HkyBHHfr7PuL8z9SHfZxqGs/0cnsT3GcB9EGChwSkoKDBSUlKMBQsWGIMGDXJ8Yc/LyzO8vb2NTz75xNF2x44dhiRj5cqVhmEYxjfffGOYzWYjOzvb0WbmzJmG1Wo1ysrKDMMwjL/97W9Gu3btarznuHHjjOHDhzue9+zZ07jjjjscz6uqqoz4+Hhj+vTpTv+8nuh0fVibjz/+2PDx8TEqKioMw6AP3cXZ+nDDhg1GQkKCkZWVdcoXPvrQPZypD3v16mU8+OCDpz12+/bthiRjzZo1jm3ffvutYTKZjEOHDhmGYRgzZswwwsLCHH1qGIbx97//3WjdurXj+TXXXGOMHDmyxmv36tXLuP322y/04zUKZ+rDwMBA45133qnRPjw83Hj99dcNw6APXe2RRx4xOnXqVOs+vs80DGfqw9rwfcb9nEsf8n0GcC9cQogG54477tDIkSM1bNiwGtvXrVunioqKGtvbtGmjpk2bauXKlZKqL4np0KGDYmJiHG2GDx8um82mbdu2Odr89rWHDx/ueI3y8nKtW7euRhuz2axhw4Y52uDMTteHtcnPz5fVapXFYpFEH7qLM/VhcXGxrr32Wr3yyiuKjY09ZT996B5O14eHDx/W6tWrFR0drb59+yomJkaDBg1Samqqo83KlSsVGhqq7t27O7YNGzZMZrNZq1evdrQZOHCgfHx8HG2GDx+utLQ0HT9+3NHmTP2MMzvTz2Hfvn310Ucf6dixY7Lb7frwww9VWlqqwYMHS6IP3cGuXbsUHx+vFi1aaMKECdq/f78kvs80JKfrw9rwfcY9nakP+T4DuB+LqwsAzseHH36o9evXa82aNafsy87Olo+Pj0JDQ2tsj4mJUXZ2tqPNr/+RObn/5L4ztbHZbCopKdHx48dVVVVVa5udO3de0OdrDM7Uh7+Vm5urJ554QrfddptjG33oemfrw6lTp6pv374aNWpUrfvpQ9c7Ux/u2bNHUvXaIM8++6w6d+6sd955R0OHDtXWrVuVkpKi7OxsRUdH1zjOYrEoPDy8Rh82b968Rptf93NYWNhp+/nka+D0zvZz+PHHH2vcuHGKiIiQxWJRQECA5syZo+TkZEmiD12sV69emjVrllq3bq2srCw99thjGjBggLZu3cr3mQbiTH0YHBxcoy3fZ9zT2fqQ7zOA+yHAQoNx4MAB3X333VqwYIH8/PxcXQ5+h/PpQ5vNppEjR+qiiy7So48+Wj8F4qzO1odffvmlFi1apA0bNrigOpyLs/Wh3W6XJN1+++268cYbJUldunTRwoUL9dZbb2n69On1Wi9OdS7n0oceekh5eXn64YcfFBkZqblz5+qaa67RsmXL1KFDh3quGL912WWXOf7esWNH9erVS0lJSfr444/l7+/vwspwrs7UhzfffLNjH99n3NeZ+jAqKorvM4Ab4hJCNBjr1q3T4cOH1bVrV1ksFlksFi1dulQvvviiLBaLYmJiVF5erry8vBrH5eTkOKb9xsbGnnIXn5PPz9bGarXK399fkZGR8vLyqrVNbdOL8Yuz9WFVVZUkqaCgQCNGjFBwcLDmzJkjb29vx2vQh651tj5csGCBdu/erdDQUMd+SRo7dqzj0iX60LXO5VwqSRdddFGN49q2beu4tCI2NlaHDx+usb+yslLHjh1zyvmWPjyzs/Xh7t279fLLL+utt97S0KFD1alTJz3yyCPq3r27XnnlFUn0obsJDQ1Vq1atlJ6ertjYWL7PNEC/7sOT+D7TsPy6DxctWsT3GcANEWChwRg6dKi2bNmijRs3Oh7du3fXhAkTHH/39vbWwoULHcekpaVp//796tOnjySpT58+2rJlS40v7QsWLJDVanUM1vr06VPjNU62OfkaPj4+6tatW402drtdCxcudLRB7c7Wh15eXrLZbLr00kvl4+OjL7/88pTZBfSha52tD//xj39o8+bNNfZL0vPPP6+3335bEn3oamfrwxYtWig+Pl5paWk1jvv555+VlJQkqbp/8vLytG7dOsf+RYsWyW63q1evXo42P/74oyoqKhxtFixYoNatWyssLMzR5kz9jNqdrQ+Li4slVa+j8mteXl6OGXb0oXspLCzU7t27FRcXp27duvF9pgH6dR9K4vtMA/TrPnzggQf4PgO4I1evIg9ciN/edWny5MlG06ZNjUWLFhlr1641+vTpY/Tp08ex/+Ttbi+99FJj48aNxvz5842oqKhab3d7//33Gzt27DBeeeWVWm936+vra8yaNcvYvn27cdtttxmhoaE17kKCc/PrPszPzzd69epldOjQwUhPT69xW+PKykrDMOhDd3S2O0nqNLedpg/dx2/78PnnnzesVqvxySefGLt27TIefPBBw8/Pz0hPT3e0GTFihNGlSxdj9erVRmpqqpGSkmKMHz/esT8vL8+IiYkxJk6caGzdutX48MMPjYCAAOO1115ztFm+fLlhsViMZ5991tixY4fxyCOPGN7e3saWLVvq5XN7kl/3YXl5uZGcnGwMGDDAWL16tZGenm48++yzhslkMr7++mvHMfSh69x3333GkiVLjL179xrLly83hg0bZkRGRhqHDx82DIPvMw3BmfqQ7zMNw9l+Dn+L7zOA6xFgoUH77aCrpKTEmDJl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bDu5IPnrr7+u119//YzveezYMSUkJOjJJ5/Uzp07a+xr06aNHnjgAUlSZmamJJ12MfWT2w8dOnTG95Okv/71r8rNza2xrX///rrlllvOeuz5OHr0qMrLyxUVFSU/P79a2zRt2lTHjh2rdd+vZ2z9WnBwsKSa/80BAADOhAALAAB4jLMtqH6uC67b7XZJUufOndWpU6cztvX19ZUkzZ8/v8ZliJI0aNAgR4B1Nr9eQP5sPv30U+3bt++U7c4OsC7U+SxwDwAAcCYEWAAAAL9xcuZQ//799dJLL53TMUuWLDnj/vj4eEmqNXiSfpn1VdsssdO1rWsRERHy9vZWbm6uSktLa52FdeDAgXqpBQAANG78WgwAAOA3hgwZIi8vL3311VeqqKhwymsOGDBAkvTBBx/Uun/27Nk12rkDb29v9ezZU4Zh6PPPPz9l/6JFi3T06FGnvl9lZaXTXg8AAHgOAiwAAIDfSEhI0E033aSMjAyNHz9eOTk5p7RJT08/rzsGXnPNNYqJiVFqaqr++9//1tj34osvau3atUpISNDYsWMvuH5nmjx5siTp4YcfrrE+17Fjx3T//fc79b3i4+OVk5OjvLw8p74uAABo+AiwAAAAavGf//xHl1xyiT777DO1bNlS/fv317XXXqtRo0YpJSVFKSkpevfdd8/59QIDA/Xee+/J399ft99+u7p3765rr71WXbt21d13362goCB98MEHp10s3VUmTJigq666Srt371abNm00evRojR07VsnJyTKbzerdu7ckycfH54Lf68orr1RlZaW6du2q6667TrfccoueeeaZC35dAADQ8P1/CGsVsAxxELQAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "ref_id=3\n", "ref_energy=-.3\n", @@ -117,20 +445,92 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "e14d6cef", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Adding energy column to dataframe:\n", + " trainId pulseId electronId timeStamp dldPosX dldPosY \\\n", + "0 1640388889 3 0 1.678800e+09 624.282613 650.282613 \n", + "1 1640388889 3 1 1.678800e+09 624.636437 646.636437 \n", + "2 1640388889 4 0 1.678800e+09 684.198502 663.198502 \n", + "3 1640388889 4 1 1.678800e+09 685.114657 680.114657 \n", + "4 1640388889 4 2 1.678800e+09 686.442973 662.442973 \n", + "5 1640388889 4 3 1.678800e+09 681.727714 644.727714 \n", + "6 1640388889 6 0 1.678800e+09 656.754474 672.754474 \n", + "7 1640388889 8 0 1.678800e+09 705.136128 812.136128 \n", + "8 1640388889 8 1 1.678800e+09 710.309368 814.309368 \n", + "9 1640388889 16 0 1.678800e+09 675.043822 689.043822 \n", + "\n", + " dldTime cryoTemperature crystalVoltage dldTimeBinSize ... \\\n", + "0 45689.282613 301.76001 -0.001524 0.020576 ... \n", + "1 45691.636437 301.76001 -0.001524 0.020576 ... \n", + "2 45809.198502 301.76001 -0.001524 0.020576 ... \n", + "3 45800.114657 301.76001 -0.001524 0.020576 ... \n", + "4 45783.442973 301.76001 -0.001524 0.020576 ... \n", + "5 45789.727714 301.76001 -0.001524 0.020576 ... \n", + "6 43120.754474 301.76001 -0.001524 0.020576 ... \n", + "7 44955.136128 301.76001 -0.001524 0.020576 ... \n", + "8 44962.309368 301.76001 -0.001524 0.020576 ... \n", + "9 45527.043822 301.76001 -0.001524 0.020576 ... \n", + "\n", + " extractorVoltage sampleBias sampleTemperature tofVoltage pulserSignAdc \\\n", + "0 6029.379883 0.001856 302.73999 9.9989 35014.0 \n", + "1 6029.379883 0.001856 302.73999 9.9989 35014.0 \n", + "2 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", + "3 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", + "4 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", + "5 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", + "6 6029.379883 0.001856 302.73999 9.9989 35018.0 \n", + "7 6029.379883 0.001856 302.73999 9.9989 35016.0 \n", + "8 6029.379883 0.001856 302.73999 9.9989 35016.0 \n", + "9 6029.379883 0.001856 302.73999 9.9989 35016.0 \n", + "\n", + " monochromatorPhotonEnergy gmdBda bam delayStage energy \n", + "0 NaN NaN -846.53125 NaN -1.385106 \n", + "1 NaN NaN -846.53125 NaN -1.387787 \n", + "2 NaN NaN -846.09375 NaN -1.520523 \n", + "3 NaN NaN -846.09375 NaN -1.510350 \n", + "4 NaN NaN -846.09375 NaN -1.491643 \n", + "5 NaN NaN -846.09375 NaN -1.498700 \n", + "6 NaN NaN -860.09375 NaN 2.220200 \n", + "7 NaN NaN -854.06250 NaN -0.500170 \n", + "8 NaN NaN -854.06250 NaN -0.509309 \n", + "9 NaN NaN -1124.37500 NaN -1.197971 \n", + "\n", + "[10 rows x 21 columns]\n" + ] + } + ], "source": [ "sp.append_energy_axis(preview=True)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "59c83544", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1789a2ebeaa14842b59d30fefb5e5490", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "db24113033ce4f95a4bb73f1e01f372f", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "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jMTERNjb25fbz4WI6HnYA0hERu369evIyspCly5d4ODgIH798ssvuHHjhliuSZMm4vdVq1YFACQnJwMAzpw5g+nTp2u9f+TIkbh//z6ysrLE97Vs2VKr7itXrqBVq1Za155+PWTIEFy/fh1HjhwBAERFRaFv374Mf0SkV1b6bgARkS4yMjIAANu2bUO1atW07ikUCjEEWltbi9dlMhmAwrmDmmd8+eWX6N27d7Hn29jYiN+XJbS5u7vjjTfeQGRkJHx9fbFjxw7s37//pZ9DRCQlBkAiMmp+fn5QKBRISEhA+/bti90v2gv4LM2bN8eVK1dQp06dl6q7Xr16OH78OAYNGiReO378eLFyI0aMQP/+/eHt7Y3atWujTZs2L1UPEZHUGACJyKg5Ojri008/RVhYGNRqNdq2bYu0tDQcOnQITk5OqFGjxgufMWXKFPTs2RPVq1fHO++8AwsLC5w5cwbnz5/HjBkznvm+jz76CCNHjkTLli3x2muvYe3atTh79ixq1aqlVS44OBhOTk6YMWMGpk+frvNnJiLSFecAEpHR++qrr/Df//4XERERaNCgAbp164Zt27bB19e3VO8PDg7G1q1bsXv3brz66qsICAjAvHnzXhgeBwwYgMmTJ+PTTz9F8+bNER8fjyFDhmgNGwOAhYUFhgwZApVKpdVbSESkL1wFTEQkoS5dusDT01Nr6xcAGD58OFJSUvDnn3/qqWVERE9wCJiIqIyysrKwdOlSBAcHw9LSEv/73/+wZ88eREdHi2XS0tJw7tw5rF69muGPiAwGAyARURnJZDJs374dM2fORE5ODurVq4eNGzciKChILPPmm2/i2LFjGD16NLp06aLH1hIRPcEhYCIiIiIzw0UgRERERGaGAZCIiIjIzDAAEhEREZkZBkAiIiIiM8MASERERGRmGACJiIiIzAwDIBEREZGZYQAkIiIiMjMMgERERERm5v8BUYRIe/KGt0kAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.figure()\n", "res[3,:].plot()" @@ -151,10 +587,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "1676ec57", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "dc946642454c42c386f4fd1480bd8319", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/1 [00:00" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2f6871f40502465c91fef049312e263d", + "version_major": 2, + "version_minor": 0 + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAADV3klEQVR4nOy9eXwb1bn//5nRMnIsWbZleY8TJ4EsEEIaChhKCCQ0kJalpFAov7LDt2UpEAottCRAgRRa1l6WFmig98KlrKV0AdpcCKUNEMJaClmdOna8xU5kybZmJM38/jhzjo/G8pLYiW35efelV6zRnHOeOTMjTuf56PMolmVZIAiCIAiCIMYN6kgHQBAEQRAEQexfaAFIEARBEAQxzqAFIEEQBEEQxDiDFoAEQRAEQRDjDFoAEgRBEARBjDNoAUgQBEEQBDHOoAUgQRAEQRDEOIMWgARBEARBEOMMWgASBEEQBEGMM2gBSBAEQRAEMc6gBSBBEARBEMQ4gxaABEEQBEEQ4wxaABIEQRAEQYwzaAFIEARBEAQxzqAFIEEQBEEQxDiDFoAEQRAEQRDjDFoAEgRBEARBjDNoAUgQBEEQBDHOoAUgQRAEQRDEOIMWgARBEARBEOMMWgASBEEQBEGMM2gBSBAEQRAEMc6gBSBBEARBEMQ4gxaABEEQBEEQ4wxaABIEQRAEQYwzaAFIEARBEAQxzqAFIEEQBEEQxDiDFoAEQRAEQRDjDFoAEgRBEARBjDNoAUgQBEEQBDHOoAUgQRAEQRDEOIMWgARBEARBEOMMWgASBEEQBEGMM2gBSBAEQRAEMc6gBSBBjCMWLFiABQsW7PNxbr75ZiiKss/HIQiCIPYOWgASBDEoJk+eDEVRxMvn8+GAAw7Addddh/b29pEOb1h56aWXsHjxYpSXl0PTNFRWVuKb3/wm/vWvfw26j88//xwnnngi/H4/CgsL8Z3vfAetra37MGqCIIjBo1iWZY10EARB7B/4078333xzj9tOnjwZBQUFuPbaawEA8Xgc69evx2OPPYa5c+fivffeE/smk0kkk0n4fL7hCHu/c+utt+Lf//435s6di6KiIjQ1NeE3v/kNGhsbsXbtWsyZM6ff9vX19Zg7dy6CwSC+//3vIxaL4Re/+AWqqqrw3nvvwev17qcjIQiCyIx7pAMgCGLsUFFRgf/v//v/xPuLL74Yfr8fv/jFL7Bp0yYccMABAAC32w23e+x+vSxfvrzXtosvvhiVlZV4+OGH8cgjj/Tb/o477kBnZyfWr1+PqqoqAMDhhx+OE044AU888QQuvfTSfRI3QRDEYKEUMEHsBdFoFFdffTUmT54MTdNQXFyME044AR988IHY5+9//zvOOOMMVFVVQdM0TJw4Eddccw26u7vT+jr//PPh9/tRV1eHr3/96/D7/aioqMCDDz4IAPj0009x/PHHIzc3F5MmTcLTTz+d1v6JJ56Aoih466238P/+3/9DKBRCXl4ezj33XOzatWvAY9F1HStWrMC0adNEnNdffz10XR/UXJSWlgJA2oIvkwZw1apVOP7441FcXAxN0zBr1iw8/PDDvfp7//33sXjxYhQVFSEnJwfV1dW48MILBxXLvqS4uBgTJkzA7t27B9z3hRdewNe//nWx+AOARYsW4cADD8Szzz67D6MkCIIYHGP3/6ITxAjy3e9+F88//zyuuOIKzJo1C21tbXj77bfx+eef40tf+hIA4LnnnkNXVxe+973vIRQK4b333sMvf/lL1NfX47nnnkvrL5VK4aSTTsL8+fNx11134amnnsIVV1yB3Nxc/PjHP8Y555yD008/HY888gjOPfdc1NTUoLq6Oq2PK664Avn5+bj55puxYcMGPPzww/jPf/6DN998s88fZJimiVNOOQVvv/02Lr30UsycOROffvop7r33XmzcuBG///3v0/ZPJBLYuXMnAJYC/vDDD3HPPfdg/vz5veJx8vDDD+Oggw7CKaecArfbjVdeeQWXXXYZTNPE5ZdfDgBoaWnBV7/6VYTDYfzoRz9Cfn4+tm3bhhdffHHAcxKLxRCPxwfcz+PxIBgMDrgfAOzevRuJRAJNTU2477770NHRgYULF/bbpqGhAS0tLTjssMN6fXb44Yfjz3/+86DGJgiC2KdYBEHsMcFg0Lr88sv73aerq6vXtpUrV1qKolj/+c9/xLbzzjvPAmDdcccdYtuuXbusnJwcS1EU65lnnhHbv/jiCwuAtWLFCrFt1apVFgBr3rx5lmEYYvtdd91lAbBefvllse3YY4+1jj32WPH+v//7vy1VVa2///3vaXE+8sgjFgDrH//4h9g2adIkC0Cv19FHH23t3Lkzrf2KFSss59dLpvlYvHixNWXKFPH+pZdesgBY69at67XvQPB5HOglH/9ATJ8+XbTz+/3WT37yEyuVSvXbZt26dRYA67e//W2vz6677joLgBWPx/f08AiCIIYVegJIEHtBfn4+3n33XezYsQPl5eUZ98nJyRF/d3Z2oru7G0cddRQsy8KHH36Ylh4EmMZM7n/69OnYvHkzzjzzTLF9+vTpyM/Px9atW3uNd+mll8Lj8Yj33/ve93DjjTfiz3/+M0455ZSMMT733HOYOXMmZsyYIZ7sAcDxxx8PAHjjjTdw1FFHie1HHHEEbrvtNgAsdfzxxx/j5z//OU455RT87W9/Szvm/uYjEokgkUjg2GOPxWuvvYZIJIJgMIj8/HwAwB//+EfMmTMn7XgG4vrrr0/TJ/ZFQUHBoPtctWoVOjo6sHXrVqxatQrd3d1IpVJQ1b7VMzzFr2lar8/4j2K6u7szfk4QBLG/oAUgQewFd911F8477zxMnDgR8+bNw5IlS3DuuediypQpYp+6ujosX74cf/jDH3pp8SKRSNp7n8+HcDicti0YDKKysrJX+jYYDGbU9vEfYHD8fj/Kysqwbdu2Po9j06ZN+Pzzz3uNzWlpaUl7X1RUhEWLFon3X/va1zB9+nR885vfxGOPPYYrr7yyz7H+8Y9/YMWKFVi7di26urrSPuMLwGOPPRZLly7FLbfcgnvvvRcLFizAaaedhm9/+9sDLphmzZqFWbNm9bvPnlJTUyP+PuusszBz5kwAwC9+8Ys+2/CFbiYNJU9R97dQJgiC2B/QApAg9oIzzzwTxxxzDF566SW8/vrr+PnPf44777wTL774Ik466SSkUimccMIJaG9vxw9/+EPMmDEDubm5aGhowPnnnw/TNNP6c7lcGcfpa7s1TO5Npmli9uzZuOeeezJ+PnHixAH74Jq4t956q88F4JYtW7Bw4ULMmDED99xzDyZOnAiv14s///nPuPfee8V8KIqC559/Hu+88w5eeeUVvPbaa7jwwgtx991345133oHf7+8zjkgk0usHNpnwer0oLCwccD8nBQUFOP744/HUU0/1uwAsKysDADQ2Nvb6rLGxEYWFhfT0jyCIEYcWgASxl5SVleGyyy7DZZddhpaWFnzpS1/C7bffjpNOOgmffvopNm7ciCeffBLnnnuuaPPXv/51n8WzadMmHHfcceJ9LBZDY2MjlixZ0mebqVOn4uOPP8bChQv3unJHMpkU4/XFK6+8Al3X8Yc//CEt9f3GG29k3P/II4/EkUceidtvvx1PP/00zjnnHDzzzDNpaXInV111FZ588skB4z322GP3ygcRYKlb59NbJxUVFQiHw3j//fd7ffbee+/h0EMP3auxCYIghhNaABLEHpJKpRCLxdJ+SVpcXIzy8nKR9uNP7uQndZZl4f77799ncf3617/GBRdcIHRzDz/8MJLJJE466aQ+25x55pn485//jEcffbSXN113dzdM00Rubm6/477yyisA0K85cqb5iEQiWLVqVdp+u3btQn5+ftpilC+YBrKlGU4NYEtLC4qLi9O2bdu2DatXr+71694tW7YAYItpztKlS/Hkk09i+/bt4inq6tWrsXHjRlxzzTUDjk8QBLGvoQUgQewh0WhUlAabM2cO/H4//va3v2HdunW4++67AQAzZszA1KlT8YMf/AANDQ3Iy8vDCy+8MChfvr3FMAwsXLgQZ555JjZs2ICHHnoIX/nKV/r8AQgAfOc738Gzzz6L7373u3jjjTdw9NFHI5VK4YsvvsCzzz6L1157LW3B09DQgP/5n/8R43388cf41a9+haKion71f1/96lfh9Xpx8skn4//9v/+HWCyGRx99FMXFxWmp0ieffBIPPfQQvvGNb2Dq1KmIRqN49NFHkZeX1++TTGB4NYCzZ8/GwoULceihh6KgoACbNm3C448/jkQigZ/97Gdp+/IUuKy1vPHGG/Hcc8/huOOOw1VXXYVYLIaf//znmD17Ni644IJhiZEgCGJIjOhvkAliDKLrunXddddZc+bMsQKBgJWbm2vNmTPHeuihh9L2+/e//20tWrTI8vv9VlFRkXXJJZdYH3/8sQXAWrVqldjvvPPOs3Jzc3uNc+yxx1oHHXRQr+2TJk2yvva1r4n33AZmzZo11qWXXmoVFBRYfr/fOuecc6y2trZefTptUAzDsO68807roIMOsjRNswoKCqx58+ZZt9xyixWJRNLGhWSnoqqqVVxcbJ199tnW5s2b0/rMZAPzhz/8wTrkkEMsn89nTZ482brzzjut3/zmNxYAq7a21rIsy/rggw+ss88+26qqqrI0TbOKi4utr3/969b777/f+0TsQ1asWGEddthhVkFBgeV2u63y8nLrrLPOsj755JNe+06aNMmaNGlSr+3/+te/rK9+9avWhAkTrPz8fOucc86xmpqa9kP0BEEQA0O1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UlNTg1AodJif7uDgIP+3WDi5OOUfANevX4/du3dj9+7dhz2MUXd7bGwMO3bswMGDB/l3Dz74IGzbxuWXX45CoYALL7wQDz300HEduyAIgiBMBRzHwTnnnIMNGzbgL/7iLwAAnudhw4YN+Nu//dsTOzhhQk5aDaBwarF//34kEglks1n5hGASyDweO2Qujx0yl8LR8OMf/xirVq3Co48+iiVLlmDdunV46qmnsH37dtTV1Z3o4QnjOOU/ARRODiKRCNauXSv6kEki83jskLk8dshcCkfDlVdeiXQ6jbvuugsDAwP4yEc+gp///Ofy8HeSIp8ACoIgCIIgTDOmnBG0IAiCIAiC8P7IA6AgCIIgCMI0Qx4ABUEQBEEQphnyACgIgiAIgjDNkAdAYULuvvtuWJZV9hXMXR4dHcV1112HZDKJWCyGyy+//DAD0O7ublxyySWYMWMGamtrcfPNN6NYLB7vUzkp6O3txV/+5V8imUyisrISixYtwpYtW/j3SincddddaGhoQGVlJVasWIFdu3aV7WN4eBgrV65EVVUVZs2ahTVr1hwW0zTVaW1tPawuLcvCddddB0Dq8mgplUr4yle+gra2NlRWVmLu3Ln42te+VpZRKzUpCFMcJQgTsHbtWnXmmWeq/v5+/kqn0/z7v/mbv1GnnXaa2rBhg9qyZYs677zz1Ec/+lH+fbFYVGeddZZasWKFev3119Xzzz+vampq1O23334iTueEMjw8rObMmaNWr16tNm/erDo6OtQLL7ygdu/ezdvcf//9KpFIqGeffVZt3bpVXXrppaqtrU0dOnSIt7nooovU4sWL1SuvvKJeeukldfrpp6urrrrqRJzSCWNoaKisJtevX68AqF/+8pdKKanLo+Wee+5RyWRS/fd//7fq7OxUTz/9tIrFYupb3/oWbyM1KQhTG3kAFCZk7dq1avHixRP+bt++faqiokI9/fTT/Nq2bdsUALVp0yallFLPP/+8sm1bDQwM8DYPP/ywqqqqUoVC4QMd+8nGrbfeqj72sY+95+89z1P19fXq61//Or+2b98+FYlE1I9+9COllFLvvPOOAqB+85vf8DY/+9nPlGVZqre394Mb/EnOl770JTV37lzleZ7U5e/BJZdcoj7/+c+XvXbZZZeplStXKqWkJgVhOiAtYOE92bVrFxobG9He3o6VK1eiu7sbAPDa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", + "text/html": [ + "\n", + "
\n", + "
\n", + " Figure\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.figure()\n", "res[3, :, :].plot()" diff --git a/tutorial/config_flash_energy_calib.yaml b/tutorial/config_flash_energy_calib.yaml index 675aee1a..8132c245 100755 --- a/tutorial/config_flash_energy_calib.yaml +++ b/tutorial/config_flash_energy_calib.yaml @@ -79,7 +79,10 @@ dataframe: format: per_train group_name: "/zraw/FLASH.SYNC/LASER.LOCK.EXP/F1.PG.OSC/FMC0.MD22.1.ENCODER_POSITION.RD/dGroup/" + tof_column: dldTime + x_column: dldPosX + y_column: dldPosY bias_column: sampleBias tof_binning: 3 diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml index d9a4178b..9483f244 100644 --- a/tutorial/hextof_config.yaml +++ b/tutorial/hextof_config.yaml @@ -29,7 +29,7 @@ dataframe: corrected_tof_column: "tm" bias_column: "sampleBias" tof_binwidth: 0.020576131995767355 - tof_binning: 3 # with 3, 8 bins per step 2**3 + tof_binning: 5 # with 3, 8 bins per step 2**3 sector_id_column: dldSectorID sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] From 043301989c0aae67388999ef17faab763bf1d92b Mon Sep 17 00:00:00 2001 From: rettigl Date: Wed, 25 Oct 2023 10:00:40 +0200 Subject: [PATCH 37/54] working energy calibration --- sed/config/default.yaml | 2 +- tutorial/5 - hextof workflow.ipynb | 476 +------------------ tutorial/Flash energy calibration.ipynb | 590 ++++-------------------- tutorial/hextof_config.yaml | 4 +- 4 files changed, 104 insertions(+), 968 deletions(-) diff --git a/sed/config/default.yaml b/sed/config/default.yaml index 10c362e6..dead1293 100644 --- a/sed/config/default.yaml +++ b/sed/config/default.yaml @@ -27,7 +27,7 @@ dataframe: energy_column: "energy" # dataframe column containing delay data delay_column: "delay" - # time length of a base time-of-flight bin in ns + # time length of a base time-of-flight bin in s tof_binwidth: 4.125e-12 # Binning factor of the tof_column-data compared to tof_binwidth (2^(tof_binning-1)) tof_binning: 1 diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index e42a0594..ae5aa5b0 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 58, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -19,7 +19,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -28,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -45,23 +45,9 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Folder config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/sed_config.yaml]\n", - "User config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/hextof_config.yaml]\n", - "Default config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/config/default.yaml]\n", - "Reading files: 0 new files of 3 total.\n", - "All files converted successfully!\n", - "Filling nan values...\n", - "loading complete in 0.05 s\n" - ] - } - ], + "outputs": [], "source": [ "config={\"core\": {\"paths\": {\"data_raw_dir\": \"../../flash_test_data/fl1user3/\", \"data_parquet_dir\": \"../../flash_test_data/parquet/\"}}}\n", "sp = SedProcessor(runs=[44638], config=config, user_config=config_file, system_config={}, collect_metadata=False)" @@ -69,17 +55,9 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Aligning 8s sectors of dataframe\n" - ] - } - ], + "outputs": [], "source": [ "sp.add_jitter()\n", "sp.align_dld_sectors()" @@ -101,24 +79,9 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9b14b49dafdf4d5faa103de6998833f4", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"7d68b3ee-18ab-48d7-8794-cf4a517bcfe8\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"8021\"}],\"center\":[{\"id\":\"8024\"},{\"id\":\"8028\"},{\"id\":\"8061\"}],\"height\":300,\"left\":[{\"id\":\"8025\"}],\"renderers\":[{\"id\":\"8049\"},{\"id\":\"8067\"},{\"id\":\"8086\"},{\"id\":\"8107\"},{\"id\":\"8130\"},{\"id\":\"8155\"}],\"title\":{\"id\":\"8011\"},\"toolbar\":{\"id\":\"8037\"},\"width\":800,\"x_range\":{\"id\":\"8013\"},\"x_scale\":{\"id\":\"8017\"},\"y_range\":{\"id\":\"8015\"},\"y_scale\":{\"id\":\"8019\"}},\"id\":\"8010\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"8053\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8126\"},\"glyph\":{\"id\":\"8127\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8129\"},\"nonselection_glyph\":{\"id\":\"8128\"},\"view\":{\"id\":\"8131\"}},\"id\":\"8130\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"8025\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"8028\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"8063\"}},\"id\":\"8068\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8147\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8029\",\"type\":\"PanTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8079\"},\"selection_policy\":{\"id\":\"8078\"}},\"id\":\"8063\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8054\",\"type\":\"AllLabels\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"8067\"}]},\"id\":\"8081\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8053\"},\"group\":null,\"major_label_policy\":{\"id\":\"8054\"},\"ticker\":{\"id\":\"8026\"}},\"id\":\"8025\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"8026\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"8174\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8058\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8083\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"8036\",\"type\":\"HoverTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8059\"},\"selection_policy\":{\"id\":\"8058\"}},\"id\":\"8045\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8079\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8045\"},\"glyph\":{\"id\":\"8046\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8048\"},\"nonselection_glyph\":{\"id\":\"8047\"},\"view\":{\"id\":\"8050\"}},\"id\":\"8049\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8175\"},\"selection_policy\":{\"id\":\"8174\"}},\"id\":\"8151\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8078\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"8155\"}]},\"id\":\"8177\",\"type\":\"LegendItem\"},{\"attributes\":{\"tools\":[{\"id\":\"8029\"},{\"id\":\"8030\"},{\"id\":\"8031\"},{\"id\":\"8032\"},{\"id\":\"8033\"},{\"id\":\"8034\"},{\"id\":\"8036\"}]},\"id\":\"8037\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"8030\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"8056\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"8034\",\"type\":\"HelpTool\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"e8Rot5AChbbXg8c2kAKFN5AChTeQAoU3kAKFN5AChTeQAoU3kAIFNwAAAAAAAAAAAAAAAAAAAACQAoU3kAKFN5AChTeQAoU3kAKFN5AChTeQAoU3AAAAAJAChTeQAgU4kAIFOJACBTiQAgU4kAIFOJACBTjXg8c3kAKFN5AChTeQAoU3kAKFN5ACBTiQAgU414PHN5ACBTiQAgU4kAIFOJACBTiQAgU414NHONeDRziQAgU4kAIFOJACBTiQAgU4kAKFNwAAAAAAAAAAAAAAAAAAAAAAAAAAkAIFN5ACBTeQAgU3kAIFN5ACBTeQAgU3kAIFNwAAAACQAgU3kAKFN5AChTeQAoU3kAIFODRDJjjXg0c4NEMmOJACBTiQAgU4kAIFOJAChTeQAoU3kAIFN5ACBTeQAgU3kAIFN5AChTfXg8c3kAKFN5AChTeQAoU3kAKFN5AChTeQAgU3kAIFN5AChTeQAgU4kAIFOJACBTiQAgU4kAIFONeDxzeQAoU3AAAAAAAAAACQAoU3kAKFN5AChTeQAoU3kAKFN5AChTeQAoU3AAAAAAAAAAAAAAAAAAAAAAAAAACQAgU3kAIFN5ACBTeQAgU3kAIFN5ACBTeQAgU3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAoU3kAKFN5AChTeQAoU3kAKFN5AChTeQAoU3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAIFN5AChTeQAoU3kAKFN5AChTeQAoU3kAKFOM16kTmShwU7vS1PPKXVKT13Na89dJcHPppALT7WtkQ+Z5pTPqBSVj5RSEU+ODgiPlem9j2CzLw9CG6dPRCziz0Tx309eXZrPWecZD3DPWc9RqpxPRVxhD251Zg9nsmzPXkX0z3XLPM9C3IHPrv9ET6Xkxc+IC4WPhRNET6b4wk+fwYAPn5e7j0qcOA9GgbVPQ/dzT3OhMo9HNHGPYrJxD34wcI98DLBPX+1wj3FF8c9AGbJPdzEyz11ktI9fY/aPa8V4z1y/O493Ev5PdblAz7gVg0+peQXPlS4JD6IMTQ+gKRDPi73VT7rQWc+JcV3Pkr7hD4iQ40+k1SWPiXdoD5KFKw+Y9i4Pug1xz68v9Y+OOnnPj0G+T7zDAU/kasNPyrBFj8nTx8/CgYnP6CnLj/CxTU/nko8P+jaQj9cqEg/d7hPP1/nVz8gXmE/0Q1tPyHhej8AAIA/mNhuP3/bVD/KsTc/D6AXP0ZL5z6/u5g+CvUuPjxPAD47kNg9b0u3PUymlz0GLns9FY5NPbdBKj271w09kH7mPBaywDw536A8w/iIPI1nbDwU/FM8AfhCPMH6NTzgfiI8HboUPGaOCTw2+vQ7FPzTO41yuDsSgp87JW2JO7QydDv2v007uEdBO6KaPDtfGC87cbsyO4XjNjtSfyw7uEdBO7bCQDvK6kQ74ZdJO8XgQzvSeUY7DW1SO9eDRzvhl0k75BxKO/lETjsmn1c7GgZVOxoGVTtNal87aSFlO0DRXDs+TFw7IZVWOx8QVjsxs1k7O8dbOx2LVTsmn1c7Li5ZOz5MXDsdi1U7Li5ZO9oISDvK6kQ72ghIO6QfPTufFTw7wdZCO35UNTtxuzI7gNk1O3lKNDt1xTM7ReYpOwDfGzvcmBQ70oQSO4r4AzuaAO86KSTYOq8zvzpSf6w6JCWjOsJmjzrMZHk6HxBWOnvPNDopLyQ62I4TOmec5DlIa6o5pCqJOQDUTzk0QyY5zGT5OJAChTiQAgU4kAKFN5ACBTcAAAAAAAAAAAAAAACQAgU3kAIFN5AChTeQAoU3kAKFN5AChTeQAoU3kAIFN5ACBTcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJACBTeQAoU3kAKFN5AChTeQAoU3kAKFN5AChTeQAgU3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8148\"},\"selection_policy\":{\"id\":\"8147\"}},\"id\":\"8126\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8059\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"8151\"}},\"id\":\"8156\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8033\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8128\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8126\"}},\"id\":\"8131\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8151\"},\"glyph\":{\"id\":\"8152\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8154\"},\"nonselection_glyph\":{\"id\":\"8153\"},\"view\":{\"id\":\"8156\"}},\"id\":\"8155\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8129\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8175\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8046\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8063\"},\"glyph\":{\"id\":\"8064\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8066\"},\"nonselection_glyph\":{\"id\":\"8065\"},\"view\":{\"id\":\"8068\"}},\"id\":\"8067\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8066\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"8035\"}},\"id\":\"8031\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"8130\"}]},\"id\":\"8150\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8152\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8148\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8065\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8032\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"8057\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"8062\"},{\"id\":\"8081\"},{\"id\":\"8102\"},{\"id\":\"8125\"},{\"id\":\"8150\"},{\"id\":\"8177\"}],\"padding\":2,\"spacing\":0},\"id\":\"8061\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8154\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"8035\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8153\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8104\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8022\",\"type\":\"BasicTicker\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"8086\"}]},\"id\":\"8102\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"8045\"}},\"id\":\"8050\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"8049\"}]},\"id\":\"8062\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8048\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8082\"},\"glyph\":{\"id\":\"8083\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8085\"},\"nonselection_glyph\":{\"id\":\"8084\"},\"view\":{\"id\":\"8087\"}},\"id\":\"8086\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis\":{\"id\":\"8021\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"8024\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8127\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8084\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8064\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8100\"},\"selection_policy\":{\"id\":\"8099\"}},\"id\":\"8082\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8019\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"8099\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8013\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"8100\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8103\"},\"glyph\":{\"id\":\"8104\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8106\"},\"nonselection_glyph\":{\"id\":\"8105\"},\"view\":{\"id\":\"8108\"}},\"id\":\"8107\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8056\"},\"group\":null,\"major_label_policy\":{\"id\":\"8057\"},\"ticker\":{\"id\":\"8022\"}},\"id\":\"8021\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"8011\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8085\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8105\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8082\"}},\"id\":\"8087\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8122\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8017\",\"type\":\"LinearScale\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8123\"},\"selection_policy\":{\"id\":\"8122\"}},\"id\":\"8103\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8106\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8123\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"8107\"}]},\"id\":\"8125\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8047\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8103\"}},\"id\":\"8108\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8015\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"8010\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"7d68b3ee-18ab-48d7-8794-cf4a517bcfe8\",\"root_ids\":[\"8010\"],\"roots\":{\"8010\":\"e9fd15e1-328f-45f3-9f33-8855e83c023f\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "8010" - } - }, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "sp.load_bias_series(binned_data=res)" ] }, { "cell_type": "code", - "execution_count": 65, - "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "dcb19f777b08441ea29a675c7923a373", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(IntSlider(value=3, description='refid', max=10), IntRangeSlider(value=(5500, 6000), desc…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "fc63a9127fc54df88b617e3d9cc21670", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(description='apply', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "141baa7d1b0b41d9bba895c2a47bd7a8", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "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", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "ranges=(5500, 6000)\n", "ref_id=3\n", @@ -233,335 +111,27 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding time-of-flight column in nanoseconds to dataframe:\n" - ] - } - ], + "outputs": [], "source": [ "sp.append_tof_ns_axis()" ] }, { "cell_type": "code", - "execution_count": 67, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
trainIdpulseIdelectronIdtimeStampdldPosXdldPosYdldTimeStepscryoTemperaturecrystalVoltagedldTimeBinSize...sampleBiassampleTemperaturetofVoltagepulserSignAdcmonochromatorPhotonEnergygmdBdabamdelayStagedldSectorIDdldTime
01640388889301.678800e+09623.785094649.7850945710.785156301.76001-0.0015240.020576...0.001856302.739999.998935014.0NaNNaN-846.53125NaN13760.187814
11640388889311.678800e+09625.367363647.3673635711.367188301.76001-0.0015240.020576...0.001856302.739999.998935014.0NaNNaN-846.53125NaN43760.571044
21640388889401.678800e+09684.003223663.0032235726.003418301.76001-0.0015240.020576...0.001856302.739999.998935023.0NaNNaN-846.09375NaN13770.208068
31640388889411.678800e+09684.512967679.5129675724.513184301.76001-0.0015240.020576...0.001856302.739999.998935023.0NaNNaN-846.09375NaN03769.226844
41640388889421.678800e+09685.691489661.6914895721.691406301.76001-0.0015240.020576...0.001856302.739999.998935023.0NaNNaN-846.09375NaN73767.368884
\n", - "

5 rows × 22 columns

\n", - "
" - ], - "text/plain": [ - " trainId pulseId electronId timeStamp dldPosX dldPosY \\\n", - "0 1640388889 3 0 1.678800e+09 623.785094 649.785094 \n", - "1 1640388889 3 1 1.678800e+09 625.367363 647.367363 \n", - "2 1640388889 4 0 1.678800e+09 684.003223 663.003223 \n", - "3 1640388889 4 1 1.678800e+09 684.512967 679.512967 \n", - "4 1640388889 4 2 1.678800e+09 685.691489 661.691489 \n", - "\n", - " dldTimeSteps cryoTemperature crystalVoltage dldTimeBinSize ... \\\n", - "0 5710.785156 301.76001 -0.001524 0.020576 ... \n", - "1 5711.367188 301.76001 -0.001524 0.020576 ... \n", - "2 5726.003418 301.76001 -0.001524 0.020576 ... \n", - "3 5724.513184 301.76001 -0.001524 0.020576 ... \n", - "4 5721.691406 301.76001 -0.001524 0.020576 ... \n", - "\n", - " sampleBias sampleTemperature tofVoltage pulserSignAdc \\\n", - "0 0.001856 302.73999 9.9989 35014.0 \n", - "1 0.001856 302.73999 9.9989 35014.0 \n", - "2 0.001856 302.73999 9.9989 35023.0 \n", - "3 0.001856 302.73999 9.9989 35023.0 \n", - "4 0.001856 302.73999 9.9989 35023.0 \n", - "\n", - " monochromatorPhotonEnergy gmdBda bam delayStage dldSectorID \\\n", - "0 NaN NaN -846.53125 NaN 1 \n", - "1 NaN NaN -846.53125 NaN 4 \n", - "2 NaN NaN -846.09375 NaN 1 \n", - "3 NaN NaN -846.09375 NaN 0 \n", - "4 NaN NaN -846.09375 NaN 7 \n", - "\n", - " dldTime \n", - "0 3760.187814 \n", - "1 3760.571044 \n", - "2 3770.208068 \n", - "3 3769.226844 \n", - "4 3767.368884 \n", - "\n", - "[5 rows x 22 columns]" - ] - }, - "execution_count": 67, - "metadata": {}, - "output_type": "execute_result" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "sp.dataframe.head()" ] }, { "cell_type": "code", - "execution_count": 68, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[Fit Statistics]]\n", - " # fitting method = leastsq\n", - " # function evals = 8\n", - " # data points = 6\n", - " # variables = 3\n", - " chi-square = 17.5000000\n", - " reduced chi-square = 5.83333333\n", - " Akaike info crit = 12.4226485\n", - " Bayesian info crit = 11.7979269\n", - "## Warning: uncertainties could not be estimated:\n", - " d: at initial value\n", - " t0: at initial value\n", - "[[Variables]]\n", - " d: 1.00000000 (init = 1)\n", - " t0: 1.0000e-06 (init = 1e-06)\n", - " E0: -2.50000000 (init = -5)\n", - "Quality of Calibration:\n" - ] - }, - { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"8a6ef920-e603-47f9-9416-332553aab112\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"8629\"}],\"center\":[{\"id\":\"8632\"},{\"id\":\"8636\"},{\"id\":\"8669\"}],\"height\":300,\"left\":[{\"id\":\"8633\"}],\"renderers\":[{\"id\":\"8657\"},{\"id\":\"8675\"},{\"id\":\"8694\"},{\"id\":\"8715\"},{\"id\":\"8738\"},{\"id\":\"8763\"}],\"title\":{\"id\":\"8619\"},\"toolbar\":{\"id\":\"8645\"},\"width\":800,\"x_range\":{\"id\":\"8621\"},\"x_scale\":{\"id\":\"8625\"},\"y_range\":{\"id\":\"8623\"},\"y_scale\":{\"id\":\"8627\"}},\"id\":\"8618\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8661\"},\"group\":null,\"major_label_policy\":{\"id\":\"8662\"},\"ticker\":{\"id\":\"8634\"}},\"id\":\"8633\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8687\"},\"selection_policy\":{\"id\":\"8686\"}},\"id\":\"8671\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8630\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"8643\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"8686\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"8675\"}]},\"id\":\"8689\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"8687\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"8627\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"8629\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"8632\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"8634\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"8633\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"8636\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8654\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8623\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8713\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8711\"}},\"id\":\"8716\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8625\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8674\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"8619\",\"type\":\"Title\"},{\"attributes\":{\"source\":{\"id\":\"8671\"}},\"id\":\"8676\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8637\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"8666\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"8664\"},\"group\":null,\"major_label_policy\":{\"id\":\"8665\"},\"ticker\":{\"id\":\"8630\"}},\"id\":\"8629\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8673\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8664\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"8667\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8691\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"8644\",\"type\":\"HoverTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8671\"},\"glyph\":{\"id\":\"8672\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8674\"},\"nonselection_glyph\":{\"id\":\"8673\"},\"view\":{\"id\":\"8676\"}},\"id\":\"8675\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8714\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8621\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"8661\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8711\"},\"glyph\":{\"id\":\"8712\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8714\"},\"nonselection_glyph\":{\"id\":\"8713\"},\"view\":{\"id\":\"8716\"}},\"id\":\"8715\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"8662\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8672\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8641\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"8640\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"8642\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"8707\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8638\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8734\"},\"glyph\":{\"id\":\"8735\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8737\"},\"nonselection_glyph\":{\"id\":\"8736\"},\"view\":{\"id\":\"8739\"}},\"id\":\"8738\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"8755\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8756\"},\"selection_policy\":{\"id\":\"8755\"}},\"id\":\"8734\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8736\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8690\"},\"glyph\":{\"id\":\"8691\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8693\"},\"nonselection_glyph\":{\"id\":\"8692\"},\"view\":{\"id\":\"8695\"}},\"id\":\"8694\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8737\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8734\"}},\"id\":\"8739\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"8643\"}},\"id\":\"8639\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"8782\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8692\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"8738\"}]},\"id\":\"8758\",\"type\":\"LegendItem\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvwAAAAAAAPC/AAAAAAAA8L8AAAAAAADwvw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8708\"},\"selection_policy\":{\"id\":\"8707\"}},\"id\":\"8690\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8756\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8693\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8690\"}},\"id\":\"8695\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"8653\"}},\"id\":\"8658\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"8657\"}]},\"id\":\"8670\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"8694\"}]},\"id\":\"8710\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8655\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8708\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8759\"},\"glyph\":{\"id\":\"8760\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8762\"},\"nonselection_glyph\":{\"id\":\"8761\"},\"view\":{\"id\":\"8764\"}},\"id\":\"8763\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwAAAAAAAAAjAAAAAAAAACMAAAAAAAAAIwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn7hg3J+4YNyfuGDcn7hg3J+4YNyfuGDcn7hg3AAAAACfuGDcn7hg3J+4YNyfuGDcn7hg3J+4YNyfuGDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn7hg3J+4YNyfuGDcn7hg3J+4YNyfumDcn7pg3J+4YNyfuGDcn7hg3J+4YNyfumDcn7hg3J+4YNyfuGDcn7hg3J+4YNzplZTcn7pg2J+6YNifumDYn7pg2J+6YNifumDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfuGDcn7hg3J+4YNyfuGDcn7hg3J+4YNyfuGDcAAAAAJ+4YNyfuGDcn7hg3J+6YNyfumDexKb83sSm/NzplZTc6ZWU3OmVlNyfumDYn7pg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfuGDcn7hg3J+4YNyfuGDcn7hg3J+4YNyfuGDcAAAAAAAAAAAAAAAAAAAAAJ+6YNifuGDcn7pg3J+6YNyfumDcn7pg3J+6YNzplZTcn7hg3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn7hg3J+4YNzplZTiFngQ7CX2iPMYbcj35PLc9a7TVPRXq6D3N3fg9fecAPoWY6T1qJac9aoFuPXasUD29GVM9ZupnPUNGiz0BsKc9UFK/PT75zz2i09w9dHLhPRs54T2KqtY9rgXHPSAHuz3nn7Q9mJSyPQuktj0GzLg9w5C+PaS6yT197Nk92QD0PXAwDD5nMiA+WB86PlmpVj6i33Y+X0ePPjUwpT6pwr0+85TaPhn1+D5X/Qw/3IoeP6VSLz+5c0E/lcFUP03caj8AAIA/6KFxP8QMWT/rED4/ZpQfP0Li+T6ZzaY+PxcfPuv05D0Op8M9V0ClPdCbhT0qeUw9PxcfPQvK+jx1QMo8dImoPIxgizztDWk8Fdk8PBVRFjxSKe07IRm3O9RvlzuXBYQ7NAhdOxCKRDu8Wyk7jNMZO6PnBzvctPk6vZPpOiKh3TqHrtE6w5C+Oo1bwDoQisQ64LHOOuCxzjpv6sk6h67ROsmd4DrDQNg6WNbbOvLI5zqHXus6grH8OiNR9zo1uPY6Vu4BO4Kx/DqOu/M6OxX/Ovgl8DqBAeM6dffrOhaX5jp19+s6z/roOuxr3zqNC9o6pc/hOtWn1zpv6sk61Pe9Oplltzq31q06D9qqOj6yoDoPKpE6tSaUOm6KljpoLY46x42TOm6KljrxuJo68biaOtn0kjpWxo46IZGQOnQ3hToprn86HPRuOimufzrctHk6/4J4Oty0eTpNfH46jrtzOtZXcTr/gng6uOZ6OiNRdzqHXms6z/poOs/6aDo6ZWU64LFOOtpURjraVEY6b+pJOmMwOTryaDQ6gaEvOi1LITqeEiY65a4jOjOoKToi8UM6LqtUOuCxTjqBAWM68shnOlJ5Uzr+IkU6M6gpOpJYFTqYtR062fQSOkRfDzr9whE6SrwXOtn0EjobNAg6zToCOnFK/TkQOt45n3LZOfjFvDnJneA5Rx/2ORA63jlY1ts5Rx/2OXFK/Tk+Agc6jrvzOZ9y2TmrLOo55g7XOUBiujki8cM5pW+uOesLrDld07A5ekSnOUwcyzk6ZeU5n3LZOfLI5zkc9O45/4L4OWSQ7DnaVMY56wusOW6KljmM+4w5cUp9OSLxQzmTuEg5k7hIOc6aNTlY1ls5BIBNOSLxQzk6ZWU5qyxqOcmdYDl1R1I56wssObUmFDnxCAE5k7jIOCfumDixKT846wssODpl5Tcn7pg3J+6YNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8667\"},\"selection_policy\":{\"id\":\"8666\"}},\"id\":\"8653\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8760\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"8763\"}]},\"id\":\"8785\",\"type\":\"LegendItem\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8783\"},\"selection_policy\":{\"id\":\"8782\"}},\"id\":\"8759\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8761\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8735\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8762\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"8759\"}},\"id\":\"8764\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"8670\"},{\"id\":\"8689\"},{\"id\":\"8710\"},{\"id\":\"8733\"},{\"id\":\"8758\"},{\"id\":\"8785\"}],\"padding\":2,\"spacing\":0},\"id\":\"8669\",\"type\":\"Legend\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8712\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"8783\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"8637\"},{\"id\":\"8638\"},{\"id\":\"8639\"},{\"id\":\"8640\"},{\"id\":\"8641\"},{\"id\":\"8642\"},{\"id\":\"8644\"}]},\"id\":\"8645\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"8731\"},\"selection_policy\":{\"id\":\"8730\"}},\"id\":\"8711\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"8665\",\"type\":\"AllLabels\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"8715\"}]},\"id\":\"8733\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"8730\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"8731\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8656\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"8653\"},\"glyph\":{\"id\":\"8654\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"8656\"},\"nonselection_glyph\":{\"id\":\"8655\"},\"view\":{\"id\":\"8658\"}},\"id\":\"8657\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"8618\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"8a6ef920-e603-47f9-9416-332553aab112\",\"root_ids\":[\"8618\"],\"roots\":{\"8618\":\"b5f7858d-2549-4f22-98c8-97ca1e21710c\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "8618" - } - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E/TOF relationship:\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "bf982a1ff057404fbf5296459cd04d52", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "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", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ "ref_id=3\n", "ref_energy=0\n", diff --git a/tutorial/Flash energy calibration.ipynb b/tutorial/Flash energy calibration.ipynb index 1e3cae0f..d6c158fd 100755 --- a/tutorial/Flash energy calibration.ipynb +++ b/tutorial/Flash energy calibration.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "39b2e62a", "metadata": {}, "outputs": [], @@ -38,116 +38,83 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "7dabbe92", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Folder config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/sed_config.yaml]\n", - "System config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/config_flash_energy_calib.yaml]\n", - "Default config loaded from: [/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/config/default.yaml]\n", - "Reading files: 3 new files of 3 total.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[Parallel(n_jobs=3)]: Using backend LokyBackend with 3 concurrent workers.\n", - "[Parallel(n_jobs=3)]: Done 3 out of 3 | elapsed: 58.6s remaining: 0.0s\n", - "[Parallel(n_jobs=3)]: Done 3 out of 3 | elapsed: 58.6s finished\n" - ] - }, - { - "ename": "RuntimeError", - "evalue": "Conversion failed for some files. [KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps'])]", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mRuntimeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/Flash energy calibration.ipynb Cell 4\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> 1\u001b[0m sp \u001b[39m=\u001b[39m SedProcessor(runs\u001b[39m=\u001b[39;49m[\u001b[39m44638\u001b[39;49m], config\u001b[39m=\u001b[39;49m{\u001b[39m\"\u001b[39;49m\u001b[39mcore\u001b[39;49m\u001b[39m\"\u001b[39;49m: {\u001b[39m\"\u001b[39;49m\u001b[39mpaths\u001b[39;49m\u001b[39m\"\u001b[39;49m: {\u001b[39m\"\u001b[39;49m\u001b[39mdata_raw_dir\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m../../flash_test_data/fl1user3/\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mdata_parquet_dir\u001b[39;49m\u001b[39m\"\u001b[39;49m: \u001b[39m\"\u001b[39;49m\u001b[39m../../flash_test_data/parquet/\u001b[39;49m\u001b[39m\"\u001b[39;49m}}}, system_config\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39mconfig_flash_energy_calib.yaml\u001b[39;49m\u001b[39m\"\u001b[39;49m)\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/processor.py:144\u001b[0m, in \u001b[0;36mSedProcessor.__init__\u001b[0;34m(self, metadata, config, dataframe, files, folder, runs, collect_metadata, **kwds)\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[39m# Load data if provided:\u001b[39;00m\n\u001b[1;32m 143\u001b[0m \u001b[39mif\u001b[39;00m dataframe \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m files \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m folder \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m \u001b[39mor\u001b[39;00m runs \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m--> 144\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mload(\n\u001b[1;32m 145\u001b[0m dataframe\u001b[39m=\u001b[39;49mdataframe,\n\u001b[1;32m 146\u001b[0m metadata\u001b[39m=\u001b[39;49mmetadata,\n\u001b[1;32m 147\u001b[0m files\u001b[39m=\u001b[39;49mfiles,\n\u001b[1;32m 148\u001b[0m folder\u001b[39m=\u001b[39;49mfolder,\n\u001b[1;32m 149\u001b[0m runs\u001b[39m=\u001b[39;49mruns,\n\u001b[1;32m 150\u001b[0m collect_metadata\u001b[39m=\u001b[39;49mcollect_metadata,\n\u001b[1;32m 151\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds,\n\u001b[1;32m 152\u001b[0m )\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/processor.py:300\u001b[0m, in \u001b[0;36mSedProcessor.load\u001b[0;34m(self, dataframe, metadata, files, folder, runs, collect_metadata, **kwds)\u001b[0m\n\u001b[1;32m 292\u001b[0m dataframe, metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mloader\u001b[39m.\u001b[39mread_dataframe(\n\u001b[1;32m 293\u001b[0m folders\u001b[39m=\u001b[39mcast(\u001b[39mstr\u001b[39m, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcpy(folder)),\n\u001b[1;32m 294\u001b[0m runs\u001b[39m=\u001b[39mruns,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwds,\n\u001b[1;32m 298\u001b[0m )\n\u001b[1;32m 299\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m--> 300\u001b[0m dataframe, metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mloader\u001b[39m.\u001b[39;49mread_dataframe(\n\u001b[1;32m 301\u001b[0m runs\u001b[39m=\u001b[39;49mruns,\n\u001b[1;32m 302\u001b[0m metadata\u001b[39m=\u001b[39;49mmetadata,\n\u001b[1;32m 303\u001b[0m collect_metadata\u001b[39m=\u001b[39;49mcollect_metadata,\n\u001b[1;32m 304\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds,\n\u001b[1;32m 305\u001b[0m )\n\u001b[1;32m 307\u001b[0m \u001b[39melif\u001b[39;00m folder \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 308\u001b[0m dataframe, metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mloader\u001b[39m.\u001b[39mread_dataframe(\n\u001b[1;32m 309\u001b[0m folders\u001b[39m=\u001b[39mcast(\u001b[39mstr\u001b[39m, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcpy(folder)),\n\u001b[1;32m 310\u001b[0m metadata\u001b[39m=\u001b[39mmetadata,\n\u001b[1;32m 311\u001b[0m collect_metadata\u001b[39m=\u001b[39mcollect_metadata,\n\u001b[1;32m 312\u001b[0m \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwds,\n\u001b[1;32m 313\u001b[0m )\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/loader/flash/loader.py:857\u001b[0m, in \u001b[0;36mFlashLoader.read_dataframe\u001b[0;34m(self, files, folders, runs, ftype, metadata, collect_metadata, **kwds)\u001b[0m\n\u001b[1;32m 847\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 848\u001b[0m \u001b[39m# This call takes care of files and folders. As we have converted runs into files\u001b[39;00m\n\u001b[1;32m 849\u001b[0m \u001b[39m# already, they are just stored in the class by this call.\u001b[39;00m\n\u001b[1;32m 850\u001b[0m \u001b[39msuper\u001b[39m()\u001b[39m.\u001b[39mread_dataframe(\n\u001b[1;32m 851\u001b[0m files\u001b[39m=\u001b[39mfiles,\n\u001b[1;32m 852\u001b[0m folders\u001b[39m=\u001b[39mfolders,\n\u001b[1;32m 853\u001b[0m ftype\u001b[39m=\u001b[39mftype,\n\u001b[1;32m 854\u001b[0m metadata\u001b[39m=\u001b[39mmetadata,\n\u001b[1;32m 855\u001b[0m )\n\u001b[0;32m--> 857\u001b[0m dataframe \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mparquet_handler(data_parquet_dir, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds)\n\u001b[1;32m 859\u001b[0m metadata \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mparse_metadata() \u001b[39mif\u001b[39;00m collect_metadata \u001b[39melse\u001b[39;00m {}\n\u001b[1;32m 860\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mloading complete in \u001b[39m\u001b[39m{\u001b[39;00mtime\u001b[39m.\u001b[39mtime() \u001b[39m-\u001b[39m t0\u001b[39m:\u001b[39;00m\u001b[39m.2f\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m s\u001b[39m\u001b[39m\"\u001b[39m)\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/loader/flash/loader.py:741\u001b[0m, in \u001b[0;36mFlashLoader.parquet_handler\u001b[0;34m(self, data_parquet_dir, detector, parquet_path, converted, load_parquet, save_parquet)\u001b[0m\n\u001b[1;32m 734\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 735\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mThe final parquet for this run(s) does not exist yet. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 736\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mIf it is in another location, please provide the path as parquet_path.\u001b[39m\u001b[39m\"\u001b[39m,\n\u001b[1;32m 737\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39mexc\u001b[39;00m\n\u001b[1;32m 739\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 740\u001b[0m \u001b[39m# Obtain the filenames from the method which handles buffer file creation/reading\u001b[39;00m\n\u001b[0;32m--> 741\u001b[0m _, parquet_filenames \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mbuffer_file_handler(\n\u001b[1;32m 742\u001b[0m data_parquet_dir,\n\u001b[1;32m 743\u001b[0m detector,\n\u001b[1;32m 744\u001b[0m )\n\u001b[1;32m 745\u001b[0m \u001b[39m# Read all parquet files into one dataframe using dask\u001b[39;00m\n\u001b[1;32m 746\u001b[0m dataframe \u001b[39m=\u001b[39m dd\u001b[39m.\u001b[39mread_parquet(parquet_filenames, calculate_divisions\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/loader/flash/loader.py:677\u001b[0m, in \u001b[0;36mFlashLoader.buffer_file_handler\u001b[0;34m(self, data_parquet_dir, detector)\u001b[0m\n\u001b[1;32m 672\u001b[0m error \u001b[39m=\u001b[39m Parallel(n_jobs\u001b[39m=\u001b[39m\u001b[39mlen\u001b[39m(files_to_read), verbose\u001b[39m=\u001b[39m\u001b[39m10\u001b[39m)(\n\u001b[1;32m 673\u001b[0m delayed(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mcreate_buffer_file)(h5_path, parquet_path)\n\u001b[1;32m 674\u001b[0m \u001b[39mfor\u001b[39;00m h5_path, parquet_path \u001b[39min\u001b[39;00m files_to_read\n\u001b[1;32m 675\u001b[0m )\n\u001b[1;32m 676\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39many\u001b[39m(error):\n\u001b[0;32m--> 677\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mConversion failed for some files. \u001b[39m\u001b[39m{\u001b[39;00merror\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m)\n\u001b[1;32m 679\u001b[0m \u001b[39m# Raise an error if the conversion failed for any files\u001b[39;00m\n\u001b[1;32m 680\u001b[0m \u001b[39m# TODO: merge this and the previous error trackings\u001b[39;00m\n\u001b[1;32m 681\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mfailed_files_error:\n", - "\u001b[0;31mRuntimeError\u001b[0m: Conversion failed for some files. [KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps']), KeyError(['dldTimeSteps'])]" - ] - } - ], + "outputs": [], "source": [ "sp = SedProcessor(runs=[44638], config={\"core\": {\"paths\": {\"data_raw_dir\": \"../../flash_test_data/fl1user3/\", \"data_parquet_dir\": \"../../flash_test_data/parquet/\"}}}, system_config=\"config_flash_energy_calib.yaml\")" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "248a41a7", "metadata": {}, - "outputs": [ - { - "ename": "ValueError", - "evalue": "Metadata inference failed in `apply_jitter`.\n\nYou have supplied a custom function and Dask is unable to \ndetermine the type of output that that function returns. \n\nTo resolve this please provide a meta= keyword.\nThe docstring of the Dask function you ran should have more information.\n\nOriginal error is below:\n------------------------\nKeyError('dldTimeSteps')\n\nTraceback:\n---------\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py\", line 192, in raise_on_meta_error\n yield\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py\", line 6782, in _emulate\n return func(*_extract_meta(args, True), **_extract_meta(kwargs, True))\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/dfops.py\", line 68, in apply_jitter\n df[col_jittered] = df[col] + amp * jitter\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/frame.py\", line 3804, in __getitem__\n indexer = self.columns.get_loc(key)\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py\", line 3805, in get_loc\n raise KeyError(key) from err\n", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py:3803\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3802\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m-> 3803\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_engine\u001b[39m.\u001b[39;49mget_loc(casted_key)\n\u001b[1;32m 3804\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/_libs/index.pyx:138\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/_libs/index.pyx:165\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5745\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5753\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'dldTimeSteps'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py:192\u001b[0m, in \u001b[0;36mraise_on_meta_error\u001b[0;34m(funcname, udf)\u001b[0m\n\u001b[1;32m 191\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 192\u001b[0m \u001b[39myield\u001b[39;00m\n\u001b[1;32m 193\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mException\u001b[39;00m \u001b[39mas\u001b[39;00m e:\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6782\u001b[0m, in \u001b[0;36m_emulate\u001b[0;34m(func, udf, *args, **kwargs)\u001b[0m\n\u001b[1;32m 6781\u001b[0m \u001b[39mwith\u001b[39;00m raise_on_meta_error(funcname(func), udf\u001b[39m=\u001b[39mudf), check_numeric_only_deprecation():\n\u001b[0;32m-> 6782\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39;49m_extract_meta(args, \u001b[39mTrue\u001b[39;49;00m), \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49m_extract_meta(kwargs, \u001b[39mTrue\u001b[39;49;00m))\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/dfops.py:68\u001b[0m, in \u001b[0;36mapply_jitter\u001b[0;34m(df, cols, cols_jittered, amps, jitter_type)\u001b[0m\n\u001b[1;32m 67\u001b[0m \u001b[39mfor\u001b[39;00m (col, col_jittered, amp) \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(cols, cols_jittered, amps):\n\u001b[0;32m---> 68\u001b[0m df[col_jittered] \u001b[39m=\u001b[39m df[col] \u001b[39m+\u001b[39m amp \u001b[39m*\u001b[39m jitter\n\u001b[1;32m 70\u001b[0m \u001b[39mreturn\u001b[39;00m df\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/frame.py:3804\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3803\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 3804\u001b[0m indexer \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mcolumns\u001b[39m.\u001b[39;49mget_loc(key)\n\u001b[1;32m 3805\u001b[0m \u001b[39mif\u001b[39;00m is_integer(indexer):\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py:3805\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3804\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mKeyError\u001b[39;00m \u001b[39mas\u001b[39;00m err:\n\u001b[0;32m-> 3805\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(key) \u001b[39mfrom\u001b[39;00m \u001b[39merr\u001b[39;00m\n\u001b[1;32m 3806\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mTypeError\u001b[39;00m:\n\u001b[1;32m 3807\u001b[0m \u001b[39m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3808\u001b[0m \u001b[39m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3809\u001b[0m \u001b[39m# the TypeError.\u001b[39;00m\n", - "\u001b[0;31mKeyError\u001b[0m: 'dldTimeSteps'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/tutorial/Flash energy calibration.ipynb Cell 5\u001b[0m line \u001b[0;36m1\n\u001b[0;32m----> 1\u001b[0m sp\u001b[39m.\u001b[39;49madd_jitter()\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/processor.py:1331\u001b[0m, in \u001b[0;36mSedProcessor.add_jitter\u001b[0;34m(self, cols, amps, **kwds)\u001b[0m\n\u001b[1;32m 1328\u001b[0m \u001b[39mif\u001b[39;00m amps \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 1329\u001b[0m amps \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_config[\u001b[39m\"\u001b[39m\u001b[39mdataframe\u001b[39m\u001b[39m\"\u001b[39m][\u001b[39m\"\u001b[39m\u001b[39mjitter_amps\u001b[39m\u001b[39m\"\u001b[39m]\n\u001b[0;32m-> 1331\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_dataframe \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_dataframe\u001b[39m.\u001b[39;49mmap_partitions(\n\u001b[1;32m 1332\u001b[0m apply_jitter,\n\u001b[1;32m 1333\u001b[0m cols\u001b[39m=\u001b[39;49mcols,\n\u001b[1;32m 1334\u001b[0m cols_jittered\u001b[39m=\u001b[39;49mcols,\n\u001b[1;32m 1335\u001b[0m amps\u001b[39m=\u001b[39;49mamps,\n\u001b[1;32m 1336\u001b[0m \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds,\n\u001b[1;32m 1337\u001b[0m )\n\u001b[1;32m 1338\u001b[0m metadata \u001b[39m=\u001b[39m []\n\u001b[1;32m 1339\u001b[0m \u001b[39mfor\u001b[39;00m col \u001b[39min\u001b[39;00m cols:\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:999\u001b[0m, in \u001b[0;36m_Frame.map_partitions\u001b[0;34m(self, func, *args, **kwargs)\u001b[0m\n\u001b[1;32m 871\u001b[0m \u001b[39m@insert_meta_param_description\u001b[39m(pad\u001b[39m=\u001b[39m\u001b[39m12\u001b[39m)\n\u001b[1;32m 872\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mmap_partitions\u001b[39m(\u001b[39mself\u001b[39m, func, \u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs):\n\u001b[1;32m 873\u001b[0m \u001b[39m\"\"\"Apply Python function on each DataFrame partition.\u001b[39;00m\n\u001b[1;32m 874\u001b[0m \n\u001b[1;32m 875\u001b[0m \u001b[39m Note that the index and divisions are assumed to remain unchanged.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 997\u001b[0m \u001b[39m None as the division.\u001b[39;00m\n\u001b[1;32m 998\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 999\u001b[0m \u001b[39mreturn\u001b[39;00m map_partitions(func, \u001b[39mself\u001b[39;49m, \u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6852\u001b[0m, in \u001b[0;36mmap_partitions\u001b[0;34m(func, meta, enforce_metadata, transform_divisions, align_dataframes, *args, **kwargs)\u001b[0m\n\u001b[1;32m 6845\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(\n\u001b[1;32m 6846\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00me\u001b[39m}\u001b[39;00m\u001b[39m. If you don\u001b[39m\u001b[39m'\u001b[39m\u001b[39mt want the partitions to be aligned, and are \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 6847\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mcalling `map_partitions` directly, pass `align_dataframes=False`.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 6848\u001b[0m ) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n\u001b[1;32m 6850\u001b[0m dfs \u001b[39m=\u001b[39m [df \u001b[39mfor\u001b[39;00m df \u001b[39min\u001b[39;00m args \u001b[39mif\u001b[39;00m \u001b[39misinstance\u001b[39m(df, _Frame)]\n\u001b[0;32m-> 6852\u001b[0m meta \u001b[39m=\u001b[39m _get_meta_map_partitions(args, dfs, func, kwargs, meta, parent_meta)\n\u001b[1;32m 6853\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mall\u001b[39m(\u001b[39misinstance\u001b[39m(arg, Scalar) \u001b[39mfor\u001b[39;00m arg \u001b[39min\u001b[39;00m args):\n\u001b[1;32m 6854\u001b[0m layer \u001b[39m=\u001b[39m {\n\u001b[1;32m 6855\u001b[0m (name, \u001b[39m0\u001b[39m): (\n\u001b[1;32m 6856\u001b[0m apply,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 6860\u001b[0m )\n\u001b[1;32m 6861\u001b[0m }\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6963\u001b[0m, in \u001b[0;36m_get_meta_map_partitions\u001b[0;34m(args, dfs, func, kwargs, meta, parent_meta)\u001b[0m\n\u001b[1;32m 6959\u001b[0m parent_meta \u001b[39m=\u001b[39m dfs[\u001b[39m0\u001b[39m]\u001b[39m.\u001b[39m_meta\n\u001b[1;32m 6960\u001b[0m \u001b[39mif\u001b[39;00m meta \u001b[39mis\u001b[39;00m no_default:\n\u001b[1;32m 6961\u001b[0m \u001b[39m# Use non-normalized kwargs here, as we want the real values (not\u001b[39;00m\n\u001b[1;32m 6962\u001b[0m \u001b[39m# delayed values)\u001b[39;00m\n\u001b[0;32m-> 6963\u001b[0m meta \u001b[39m=\u001b[39m _emulate(func, \u001b[39m*\u001b[39;49margs, udf\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 6964\u001b[0m meta_is_emulated \u001b[39m=\u001b[39m \u001b[39mTrue\u001b[39;00m\n\u001b[1;32m 6965\u001b[0m \u001b[39melse\u001b[39;00m:\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py:6782\u001b[0m, in \u001b[0;36m_emulate\u001b[0;34m(func, udf, *args, **kwargs)\u001b[0m\n\u001b[1;32m 6777\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 6778\u001b[0m \u001b[39mApply a function using args / kwargs. If arguments contain dd.DataFrame /\u001b[39;00m\n\u001b[1;32m 6779\u001b[0m \u001b[39mdd.Series, using internal cache (``_meta``) for calculation\u001b[39;00m\n\u001b[1;32m 6780\u001b[0m \u001b[39m\"\"\"\u001b[39;00m\n\u001b[1;32m 6781\u001b[0m \u001b[39mwith\u001b[39;00m raise_on_meta_error(funcname(func), udf\u001b[39m=\u001b[39mudf), check_numeric_only_deprecation():\n\u001b[0;32m-> 6782\u001b[0m \u001b[39mreturn\u001b[39;00m func(\u001b[39m*\u001b[39m_extract_meta(args, \u001b[39mTrue\u001b[39;00m), \u001b[39m*\u001b[39m\u001b[39m*\u001b[39m_extract_meta(kwargs, \u001b[39mTrue\u001b[39;00m))\n", - "File \u001b[0;32m~/.conda/envs/.pyenv/lib/python3.8/contextlib.py:131\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[0;34m(self, type, value, traceback)\u001b[0m\n\u001b[1;32m 129\u001b[0m value \u001b[39m=\u001b[39m \u001b[39mtype\u001b[39m()\n\u001b[1;32m 130\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[0;32m--> 131\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mgen\u001b[39m.\u001b[39;49mthrow(\u001b[39mtype\u001b[39;49m, value, traceback)\n\u001b[1;32m 132\u001b[0m \u001b[39mexcept\u001b[39;00m \u001b[39mStopIteration\u001b[39;00m \u001b[39mas\u001b[39;00m exc:\n\u001b[1;32m 133\u001b[0m \u001b[39m# Suppress StopIteration *unless* it's the same exception that\u001b[39;00m\n\u001b[1;32m 134\u001b[0m \u001b[39m# was passed to throw(). This prevents a StopIteration\u001b[39;00m\n\u001b[1;32m 135\u001b[0m \u001b[39m# raised inside the \"with\" statement from being suppressed.\u001b[39;00m\n\u001b[1;32m 136\u001b[0m \u001b[39mreturn\u001b[39;00m exc \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m value\n", - "File \u001b[0;32m/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py:213\u001b[0m, in \u001b[0;36mraise_on_meta_error\u001b[0;34m(funcname, udf)\u001b[0m\n\u001b[1;32m 204\u001b[0m msg \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m (\n\u001b[1;32m 205\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mOriginal error is below:\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 206\u001b[0m \u001b[39m\"\u001b[39m\u001b[39m------------------------\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 210\u001b[0m \u001b[39m\"\u001b[39m\u001b[39m{2}\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 211\u001b[0m )\n\u001b[1;32m 212\u001b[0m msg \u001b[39m=\u001b[39m msg\u001b[39m.\u001b[39mformat(\u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m in `\u001b[39m\u001b[39m{\u001b[39;00mfuncname\u001b[39m}\u001b[39;00m\u001b[39m`\u001b[39m\u001b[39m\"\u001b[39m \u001b[39mif\u001b[39;00m funcname \u001b[39melse\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mrepr\u001b[39m(e), tb)\n\u001b[0;32m--> 213\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mValueError\u001b[39;00m(msg) \u001b[39mfrom\u001b[39;00m \u001b[39me\u001b[39;00m\n", - "\u001b[0;31mValueError\u001b[0m: Metadata inference failed in `apply_jitter`.\n\nYou have supplied a custom function and Dask is unable to \ndetermine the type of output that that function returns. \n\nTo resolve this please provide a meta= keyword.\nThe docstring of the Dask function you ran should have more information.\n\nOriginal error is below:\n------------------------\nKeyError('dldTimeSteps')\n\nTraceback:\n---------\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/utils.py\", line 192, in raise_on_meta_error\n yield\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/dask/dataframe/core.py\", line 6782, in _emulate\n return func(*_extract_meta(args, True), **_extract_meta(kwargs, True))\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/sed/sed/core/dfops.py\", line 68, in apply_jitter\n df[col_jittered] = df[col] + amp * jitter\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/frame.py\", line 3804, in __getitem__\n indexer = self.columns.get_loc(key)\n File \"/mnt/pcshare/users/Laurenz/AreaB/sed/.pyenv/lib/python3.8/site-packages/pandas/core/indexes/base.py\", line 3805, in get_loc\n raise KeyError(key) from err\n" - ] - } - ], + "outputs": [], "source": [ "sp.add_jitter()" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, + "id": "90aea967", + "metadata": {}, + "outputs": [], + "source": [ + "sp.append_tof_ns_axis(tof_ns_column=\"tof_ns\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f3c9d426", + "metadata": {}, + "outputs": [], + "source": [ + "sp.dataframe.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5629d262", + "metadata": {}, + "outputs": [], + "source": [ + "data = sp.dataframe['dldTime'].partitions[0].compute()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8225d879", + "metadata": {}, + "outputs": [], + "source": [ + "plt.plot(data)" + ] + }, + { + "cell_type": "code", + "execution_count": null, "id": "2b867e40", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "0a0eb241ce07418c9dede3123a9f2810", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"f0b0ba13-1cf8-4a9d-84d7-43c341b1a558\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1013\"}],\"center\":[{\"id\":\"1016\"},{\"id\":\"1020\"},{\"id\":\"1053\"}],\"height\":300,\"left\":[{\"id\":\"1017\"}],\"renderers\":[{\"id\":\"1041\"},{\"id\":\"1059\"},{\"id\":\"1078\"},{\"id\":\"1099\"},{\"id\":\"1122\"},{\"id\":\"1147\"}],\"title\":{\"id\":\"1003\"},\"toolbar\":{\"id\":\"1029\"},\"width\":800,\"x_range\":{\"id\":\"1005\"},\"x_scale\":{\"id\":\"1009\"},\"y_range\":{\"id\":\"1007\"},\"y_scale\":{\"id\":\"1011\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1075\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1098\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1091\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1057\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1145\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"1099\"}]},\"id\":\"1117\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1054\"},{\"id\":\"1073\"},{\"id\":\"1094\"},{\"id\":\"1117\"},{\"id\":\"1142\"},{\"id\":\"1169\"}],\"padding\":2,\"spacing\":0},\"id\":\"1053\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1058\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1038\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"1059\"}]},\"id\":\"1073\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1055\"},\"glyph\":{\"id\":\"1056\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1058\"},\"nonselection_glyph\":{\"id\":\"1057\"},\"view\":{\"id\":\"1060\"}},\"id\":\"1059\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"AllLabels\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1092\"},\"selection_policy\":{\"id\":\"1091\"}},\"id\":\"1074\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1167\"},\"selection_policy\":{\"id\":\"1166\"}},\"id\":\"1143\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1076\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1167\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1055\"}},\"id\":\"1060\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"1147\"}]},\"id\":\"1169\",\"type\":\"LegendItem\"},{\"attributes\":{\"overlay\":{\"id\":\"1027\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1115\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1118\"}},\"id\":\"1123\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1037\"},\"glyph\":{\"id\":\"1038\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1040\"},\"nonselection_glyph\":{\"id\":\"1039\"},\"view\":{\"id\":\"1042\"}},\"id\":\"1041\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1120\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{\"axis\":{\"id\":\"1013\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1016\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1119\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1014\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1146\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1118\"},\"glyph\":{\"id\":\"1119\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1121\"},\"nonselection_glyph\":{\"id\":\"1120\"},\"view\":{\"id\":\"1123\"}},\"id\":\"1122\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1140\"},\"selection_policy\":{\"id\":\"1139\"}},\"id\":\"1118\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1048\"},\"group\":null,\"major_label_policy\":{\"id\":\"1049\"},\"ticker\":{\"id\":\"1014\"}},\"id\":\"1013\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"1074\"}},\"id\":\"1079\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1121\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1139\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1070\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1018\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1144\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"1122\"}]},\"id\":\"1142\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1011\",\"type\":\"LinearScale\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1003\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1051\"},\"selection_policy\":{\"id\":\"1050\"}},\"id\":\"1037\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"1028\",\"type\":\"HoverTool\"},{\"attributes\":{\"axis\":{\"id\":\"1017\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1051\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"1041\"}]},\"id\":\"1054\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1143\"},\"glyph\":{\"id\":\"1144\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1146\"},\"nonselection_glyph\":{\"id\":\"1145\"},\"view\":{\"id\":\"1148\"}},\"id\":\"1147\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1027\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1143\"}},\"id\":\"1148\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1037\"}},\"id\":\"1042\",\"type\":\"CDSView\"},{\"attributes\":{\"tools\":[{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"},{\"id\":\"1026\"},{\"id\":\"1028\"}]},\"id\":\"1029\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1092\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"1078\"}]},\"id\":\"1094\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"1095\"}},\"id\":\"1100\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1095\"},\"glyph\":{\"id\":\"1096\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1098\"},\"nonselection_glyph\":{\"id\":\"1097\"},\"view\":{\"id\":\"1100\"}},\"id\":\"1099\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1039\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1115\"},\"selection_policy\":{\"id\":\"1114\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1077\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1071\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1166\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1114\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1074\"},\"glyph\":{\"id\":\"1075\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1077\"},\"nonselection_glyph\":{\"id\":\"1076\"},\"view\":{\"id\":\"1079\"}},\"id\":\"1078\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1056\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1045\"},\"group\":null,\"major_label_policy\":{\"id\":\"1046\"},\"ticker\":{\"id\":\"1018\"}},\"id\":\"1017\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1071\"},\"selection_policy\":{\"id\":\"1070\"}},\"id\":\"1055\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1040\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1046\",\"type\":\"AllLabels\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"f0b0ba13-1cf8-4a9d-84d7-43c341b1a558\",\"root_ids\":[\"1002\"],\"roots\":{\"1002\":\"15122993-96eb-4d50-ae7a-4714aeeb0bb4\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "1002" - } - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "sp.load_bias_series(binned_data=res)" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "id": "424af94e", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "026e74ae9bd44108bfd3f8bc973ac05b", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "interactive(children=(IntSlider(value=3, description='refid', max=10), IntRangeSlider(value=(44500, 46000), de…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "58a616db1de44391b7865ee893b445df", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "Button(description='apply', style=ButtonStyle())" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "6042b8b747f64993bbee2fbb520f9b3a", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "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", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ranges=(44500, 46000)\n", "ref_id=3\n", @@ -264,80 +146,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "034eff42", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Quality of Calibration:\n" - ] - }, - { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"4f4e37c9-331b-4ffe-84f2-ea93ea0afeba\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1301\"}],\"center\":[{\"id\":\"1304\"},{\"id\":\"1308\"},{\"id\":\"1341\"}],\"height\":300,\"left\":[{\"id\":\"1305\"}],\"renderers\":[{\"id\":\"1329\"},{\"id\":\"1347\"},{\"id\":\"1366\"},{\"id\":\"1387\"},{\"id\":\"1410\"},{\"id\":\"1435\"}],\"title\":{\"id\":\"1291\"},\"toolbar\":{\"id\":\"1317\"},\"width\":800,\"x_range\":{\"id\":\"1293\"},\"x_scale\":{\"id\":\"1297\"},\"y_range\":{\"id\":\"1295\"},\"y_scale\":{\"id\":\"1299\"}},\"id\":\"1290\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1333\"},\"group\":null,\"major_label_policy\":{\"id\":\"1334\"},\"ticker\":{\"id\":\"1306\"}},\"id\":\"1305\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1403\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1434\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1295\",\"type\":\"DataRange1d\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"1435\"}]},\"id\":\"1457\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"1410\"}]},\"id\":\"1430\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1293\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1431\"},\"glyph\":{\"id\":\"1432\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1434\"},\"nonselection_glyph\":{\"id\":\"1433\"},\"view\":{\"id\":\"1436\"}},\"id\":\"1435\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1297\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1433\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1291\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1326\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1309\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1336\"},\"group\":null,\"major_label_policy\":{\"id\":\"1337\"},\"ticker\":{\"id\":\"1302\"}},\"id\":\"1301\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"1316\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"1431\"}},\"id\":\"1436\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1454\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xtw3v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4v17cNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv17cN79e3De/Xtw3v17cN79e3De/Xtw3v17cNwAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL9eXDi/Xlw4N7uJOS2ekDp2fjY7Ex7kOzwZjDwEvRM9+PV5PWeixj33CRM+3+RIPmw2gj5yMJ4+k3e2Pq92yD5Z3NI+koDRPq92yD45+bc+ppijPm0Ejz6crHc+7JpSPlXyNz677iM+yDcVPnmeCj5KH/o9XPLlPR4D2D3/cMc9coe6PcURrz0Ew6U9FAacPYiDlT0k4os9CE2JPbxJhj3J/IY92N6IPT5IjT1jMo49ZWGPPd6jkT3thZM9iIOVPUhrmD2wA549PrWlPSxDrj2fxrk924bGPQNu1T0+LuI90HXxPersAj5jMg4+Z5MZPsz/Jj781zY+8fJCPg3vSz7oo1Y+tglePrjUYT5unGI+wY1dPlPPWj77GFc+b/pNPoFsRT5xIz0+GjU0PtW7Kz677iM+sjIfPjpUGj6VNhY+fscQPm22DT647gw+CnwKPjpOCD7uSgU+t+sDPmuEAz4ZWwM+q5wAPv+C/T1ltPw9uN38PYdv/D1H8Pg9YO/zPYcI9j24pfc9Suf0PQpo8T0rvOo9iGnqPboG7D1AXeM9QF3jPUBd4z0jAOY9+4XvPeGG9D3OrfY9ALL+PetQAD4fHQM+Hx0DPnvKAj6opQQ+9AwFPs6+Bj49fQk+Ok4IPp/sCD4fhAk+2w0KPoArDj7xfA8+nMAQPoLBFT7jaBo+3N4fPixAJT6i7yg+ZjUuPiD3Mz6P5Dc+F6U+PnImRj7tYk0+AD9UPtjEXT65O2g+yrNxPlOjeT7TZ4E+tViFPuGBiD5S04k+91SLPphijj58mI8+1mSPPonnkj4LSpc+V02aPmFtnD4Be58+6qqlPi0LqT5Qxqg+w5SsPlKqsT5gKLY+LPi1PuQ8uT5wcb4+ZCXEPg3Wxj6C08s+LX7TPrAu2T59e9s+KHTkPszJ7T461vE+99z0PnX6+z7IMQM/W4wFP50hBT+cvQc/af8LP/7hDj+v8g0/5kYRP0r+Fj/4cBk/f3wYP1wEHD8QtiA/LfIjP6ZKIj/abyQ/igYqP/ICLT98oSo/jgstP4czMT/AaDQ/7QAzPy+LND+aXTk/rvY8P5K6OT/AxDw/5JhBPwQ+RT8kcUQ/txlIP0ckTz9Ce1Q/lt5TP88IWT9JZGA/E2xlPxw+Zj/yF2w/GZh0PyQqez/vq3k/Eqp8PwAAgD9z1ng/O0JkPyeuTD8dyDI/YioZP7fa8z4tEbs+LreVPuJReD6doFM+ydlAPqsSND6NSyc+mZQYPoe1CD4SXPs92CvkPWeixj0ucq89y5igPXppjj08bHk9T9hePbKlST163Dg9qHwsPTu4Fz1yFBA9he0NPQ87AT0r9O88q4XePAjGxTwO5rA8timbPIQfgTzQdXE8O5JIPMKBOTx33yo86fUdPNd9FDyfUw88cUYDPFSxADzua+g7aZ/UO/pKyjuI9r876JSpO87BjzugtIM7aN1rOwvDUzsV4Ew7+gwzO+fSQDu/Xlw7AaZaO04KUjvIe1U7KRo/Ox/9RTszNzg7SHEqO1GOIzvx7zk7bGE9O9KYTjvIe1U7fBdeO4Y0Vzs50F87AaZaO3L6ZDuYrGA7v15cO+UQWDs=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1455\"},\"selection_policy\":{\"id\":\"1454\"}},\"id\":\"1431\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1432\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1385\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1406\"},\"glyph\":{\"id\":\"1407\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1409\"},\"nonselection_glyph\":{\"id\":\"1408\"},\"view\":{\"id\":\"1411\"}},\"id\":\"1410\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1362\"}},\"id\":\"1367\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1408\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1409\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1302\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1428\"},\"selection_policy\":{\"id\":\"1427\"}},\"id\":\"1406\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1306\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1406\"}},\"id\":\"1411\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1301\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1304\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1315\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1333\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1359\"},\"selection_policy\":{\"id\":\"1358\"}},\"id\":\"1343\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1379\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1343\"},\"glyph\":{\"id\":\"1344\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1346\"},\"nonselection_glyph\":{\"id\":\"1345\"},\"view\":{\"id\":\"1348\"}},\"id\":\"1347\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"1329\"}]},\"id\":\"1342\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1338\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1365\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"1347\"}]},\"id\":\"1361\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1345\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1363\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1313\",\"type\":\"ResetTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1362\"},\"glyph\":{\"id\":\"1363\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1365\"},\"nonselection_glyph\":{\"id\":\"1364\"},\"view\":{\"id\":\"1367\"}},\"id\":\"1366\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1342\"},{\"id\":\"1361\"},{\"id\":\"1382\"},{\"id\":\"1405\"},{\"id\":\"1430\"},{\"id\":\"1457\"}],\"padding\":2,\"spacing\":0},\"id\":\"1341\",\"type\":\"Legend\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1346\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1328\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"1387\"}]},\"id\":\"1405\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1314\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1343\"}},\"id\":\"1348\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1312\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1359\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1305\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1308\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1327\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1325\"}},\"id\":\"1330\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"1366\"}]},\"id\":\"1382\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1309\"},{\"id\":\"1310\"},{\"id\":\"1311\"},{\"id\":\"1312\"},{\"id\":\"1313\"},{\"id\":\"1314\"},{\"id\":\"1316\"}]},\"id\":\"1317\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1380\"},\"selection_policy\":{\"id\":\"1379\"}},\"id\":\"1362\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1407\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1344\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1325\"},\"glyph\":{\"id\":\"1326\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1328\"},\"nonselection_glyph\":{\"id\":\"1327\"},\"view\":{\"id\":\"1330\"}},\"id\":\"1329\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1384\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1339\"},\"selection_policy\":{\"id\":\"1338\"}},\"id\":\"1325\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1383\"}},\"id\":\"1388\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1364\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1337\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1380\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1386\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1336\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1383\"},\"glyph\":{\"id\":\"1384\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1386\"},\"nonselection_glyph\":{\"id\":\"1385\"},\"view\":{\"id\":\"1388\"}},\"id\":\"1387\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1403\"},\"selection_policy\":{\"id\":\"1402\"}},\"id\":\"1383\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1402\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"overlay\":{\"id\":\"1315\"}},\"id\":\"1311\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1358\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1290\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"4f4e37c9-331b-4ffe-84f2-ea93ea0afeba\",\"root_ids\":[\"1290\"],\"roots\":{\"1290\":\"947fd486-053b-42fa-b676-6874499f7dab\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "1290" - } - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E/TOF relationship:\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "85aa8b84ac314d0ead3e1976c9dfd26b", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "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", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ref_id=3\n", "ref_energy=-.3\n", @@ -346,97 +158,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "bbbfe992", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[Fit Statistics]]\n", - " # fitting method = leastsq\n", - " # function evals = 49\n", - " # data points = 6\n", - " # variables = 3\n", - " chi-square = 3.2422e-04\n", - " reduced chi-square = 1.0807e-04\n", - " Akaike info crit = -52.9551731\n", - " Bayesian info crit = -53.5798947\n", - "[[Variables]]\n", - " d: 1.32138456 +/- 0.05835765 (4.42%) (init = 1)\n", - " t0: 8.4773e-07 +/- 1.8222e-08 (2.15%) (init = 1e-06)\n", - " E0: -15.4833228 +/- 0.37758140 (2.44%) (init = -5)\n", - "[[Correlations]] (unreported correlations are < 0.100)\n", - " C(d, t0) = -1.000\n", - " C(d, E0) = -0.998\n", - " C(t0, E0) = 0.996\n", - "Quality of Calibration:\n" - ] - }, - { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n // Clean up Bokeh references\n if (id != null && id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim();\n if (id in Bokeh.index) {\n Bokeh.index[id].model.document.clear();\n delete Bokeh.index[id];\n }\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n }\n\n function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(null);\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(null)).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"dbab62da-8615-4b82-8416-b17d4960023c\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1609\"}],\"center\":[{\"id\":\"1612\"},{\"id\":\"1616\"},{\"id\":\"1649\"}],\"height\":300,\"left\":[{\"id\":\"1613\"}],\"renderers\":[{\"id\":\"1637\"},{\"id\":\"1655\"},{\"id\":\"1674\"},{\"id\":\"1695\"},{\"id\":\"1718\"},{\"id\":\"1743\"}],\"title\":{\"id\":\"1599\"},\"toolbar\":{\"id\":\"1625\"},\"width\":800,\"x_range\":{\"id\":\"1601\"},\"x_scale\":{\"id\":\"1605\"},\"y_range\":{\"id\":\"1603\"},\"y_scale\":{\"id\":\"1607\"}},\"id\":\"1598\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1605\",\"type\":\"LinearScale\"},{\"attributes\":{\"label\":{\"value\":\"0.0 V\"},\"renderers\":[{\"id\":\"1637\"}]},\"id\":\"1650\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1635\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1617\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1618\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1641\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1614\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1609\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1612\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"tooltips\":[[\"(x, y)\",\"($x, $y)\"]]},\"id\":\"1624\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1610\",\"type\":\"BasicTicker\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1644\"},\"group\":null,\"major_label_policy\":{\"id\":\"1645\"},\"ticker\":{\"id\":\"1610\"}},\"id\":\"1609\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"formatter\":{\"id\":\"1641\"},\"group\":null,\"major_label_policy\":{\"id\":\"1642\"},\"ticker\":{\"id\":\"1614\"}},\"id\":\"1613\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1740\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1607\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1634\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1601\",\"type\":\"DataRange1d\"},{\"attributes\":{\"overlay\":{\"id\":\"1623\"}},\"id\":\"1619\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1620\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1621\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1646\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1671\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1613\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1616\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1644\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1711\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"1.0 V\"},\"renderers\":[{\"id\":\"1655\"}]},\"id\":\"1669\",\"type\":\"LegendItem\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1599\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1645\",\"type\":\"AllLabels\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1650\"},{\"id\":\"1669\"},{\"id\":\"1690\"},{\"id\":\"1713\"},{\"id\":\"1738\"},{\"id\":\"1765\"}],\"padding\":2,\"spacing\":0},\"id\":\"1649\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1647\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1710\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1603\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1633\"}},\"id\":\"1638\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"nlHNo83mGUC6/rncjocZQGppoZ/oKBlAAlp2p9nKGECaoYuyYG0YQMJbiYJ8EBhArldi3Cu0F0AmqUmIbVgXQHZfqFFA/RZAhmITB6OiFkACdUF6lEgWQHJbAYAT7xVA9iYw8B6WFUD+o6+ltT0VQDrrXH7W5RRAghUHW4COFEBCEWYfsjcUQNaYEbJq4RNAAkp4/KiLE0Bi3dbqazYTQE59L2yy4RJASjxBcnuNEkCqqX/xxTkSQMKECuGQ5hFALo2lOtuTEUD2cLD6o0ERQP7WHiDq7xBAvoVwrKyeEEAGpqmj6k0QQJxBlhhG+w9A5DCW3qlbD0DM9xqw/rwOQAxpuahCHw5ARNrE6HOCDUDM5UCVkOYMQCxd09eWSwxAVG223oSxC0DM8qrcWBgLQOT96ggRgApAlIQcn6voCUC8Q0TfJlIJQATNuA2BvAhALMEVc7gnCEA0Ny9cy5MHQLxNBRq4AAdABOi3AX1uBkDsk3psGN0FQGSaiLeITAVAbDcZRMy8BED8+lN34S0EQDxRRbrGnwNAPDHTeXoSA0Ck8rEm+4UCQAxIWTVH+gFA5F/5HV1vAUD8KHBcO+UAQBS7PnDgWwBAiMb9uJWm/z84p7FP8pb+P2jo8bjTiP0/OK8LEDd8/D+4nix3GXH7P4hETxd4Z/o/yMUnIFBf+T8ozBDInlj4P5ix+EthU/c/eOpO75RP9j+4rPH7Nk31P2jTG8JETPQ/qP1SmLtM8z8Y51XbmE7yP3j8Cu7ZUfE/eCZvOXxW8D/wmQlZ+rjuP/Amhni0x+w/sJMKxyHZ6j8QJvVFPe3oP/CCKwICBOc/EM36E2sd5T8QLPiecznjP7C34dEWWOE/4I7/zJ/y3j+gRw1DNDrbP6Az8aThhtc/YNYQp57Y0z+gQPgSYi/QP0DQQI5FFsk/QHRsba/XwT8Ae4ml30W1PwAqG7Gnv5s/AEQZRJZKnb+ATBjD8YG1v0B5EaYOz8G/gGJTQKXTyL9A6yC0zc7Pv0CBn29MYNO/YDLnvIvU1r+gGVgLLUTav6Cy9JE4r92/ED7BOtuK4L9APF1k1zviv5CNPMaU6uO/EM/2VxeX5b+AY2QIY0Hnv/CNtb176ei/MEWJVWWP6r8AwQOlIzPsv0DC5Hi61O2/8JWdlS1077/ga7NbwIjwvwj3KslbVvG/ICQ56eoi8r+wLeWNb+7yv9AuRIXruPO/AGKDmWCC9L/AQfKQ0Er1v3CJDC49Eva/aBiEL6jY9r/At0pQE573v0jCm0eAYvi/UK8FyfAl+b/ggXOEZuj5v3gaNibjqfq/2G0NV2hq+78ooDG89yn8vwAFXPeS6Py/kATQpjum/b9w5mNl82L+vyCDicq7Hv+/SNpWapbZ/7/gSMdqwkkAwKgs1ExEpgDADJxsoFECAcCM3w0p610BwBATnKgRuQHAmCdm38UTAsDI2SmMCG4CwICcF2zaxwLAiHjWOjwhA8Bo4IeyLnoDwHR5y4uy0gPAHNrCfcgqBMDUPBU+cYIEwLwo84Ct2QTAtA8a+X0wBcDQ4ddX44YFwMCWDk3e3AXAzKw3h28yBsA8nmezl4cGwGhMUX1X3AbADGFJj68wB8CwpkmSoIQHwFhW9C0r2AfAuFyXCFArCMD0lS/HD34IwAwAbA1r0AjANOSwfWIiCcCc9xq59nMJwNhygl8oxQnAFCF+D/gVCsBoZmZmZmYKwMQ9WAB0tgrAlC44eCEGC8DEObVnb1ULwAy/S2depAvA4FlIDu/yC8BktsryIUEMwLheyKn3jgzAOIAPx3DcDMBEqUndjSkNwEB//n1Pdg3AiG2WObbCDcAsTF2fwg4OwDQAhT11Wg7ALBQooc6lDsDUSUxWz/AOwHAk5ed3Ow/AoGzW38iFD8DUrPbGws8PwKrTiBKzDBDArmJ1wFkxEMDmvx+w1VUQwIzg5CMnehDAdiChXU6eEMCebLGeS8IQwKJq9Ccf5hDADJ3LOckJEcCUhBwUSi0RwEa+UfahUBHAzB5cH9FzEcCAyrPN15YRwOpKWT+2uRHA9qDWsWzcEcCEVEBi+/4RwCiBNo1iIRLADODlbqJDEsAAzwhDu2USwP5U6ESthxLAxCNdr3ipEsDsltC8HcsSwE6wPaec7BLA2BEyqPUNE8Cu9M74KC8TwPgdytE2UBPA/NBuax9xE8DEvp794pETwHrz0r+BshPAEMEc6fvSE8DKpyawUfMTwCI8NUuDExTAsgoo8JAzFMBceXrUelMUwICmRC1BcxTAzEU8L+SSFMDYerUOZLIUwIKxo//A0RTAJnSaNfvwFMCmP87jEhAVwF5VFT0ILxXA4oroc9tNFcC8F2S6jGwVwBhhSEIcixXAXsP6PIqpFcDIWYbb1scVwPzDnE4C5hXAyOmWxgwEFsCqvHVz9iEWwLj34oS/PxbAet0xKmhdFsDK81+S8HoWwCC+FexYmBbAvnWnZaG1FsAmwBUtytIWwNRjDnDT7xbAIvvsW70MF8BcpbsdiCkXwEK2M+IzRhfAmmO+1cBiF8AycXUkL38XwETbI/p+mxfA9H5GgrC3F8BwwQzow9MXwDo1WVa57xfAAD7C95ALGMCwspL2SicYwCx+ynznQhjATD4ftGZeGMBa4fzFyHkYwCZChtsNlRjAZsKVHTawGMDk4720QcsYwNTfSckw5hjAEj0+gwMBGcCoZFkKuhsZwCg1FIZUNhnAXpSiHdNQGcDK//P3NWsZwKwbtDt9hRnAtkBLD6mfGcBaCN+YubkZwNbXUv6u0xnA4GlIZYntGcAEVyDzSAcawMac+sztIBrAciO3F3g6GsCoQvb351MawKpEGZI9bRrAeOhCCnmGGsCi4leEmp8awARd/yOiuBrAFHWjDJDRGsBMuXFhZOoawCalW0UfAxvAKhwX28AbG8Cg4x5FSTQbwE4bs6W4TBvA+rTZHg9lG8Da6l7STH0bwOy01eFxlRvAOD2Ybn6tG8D8UsiZcsUbwL7cT4RO3RvAeEnhThL1G8CGAPgZvgwcwKzQ2AVSJBzACl6SMs47HMAij/2/MlMcwLz4vc1/ahzA7khCe7WBHMAkscTn05gcwBRPSzLbrxzA5pSoecvGHMBIsHvcpN0cwKrwMHln9BzAgiwCbhMLHcCiJffYqCEdwK7s5dcnOB3AokNziJBOHcCA/xII42QdwBppCHQfex3A6Jxm6UWRHcAo6hCFVqcdwP4wu2NRvR3A1D/qoTbTHcDcL/RbBukdwL7AAK7A/h3AcLMJtGUUHsBGJNuJ9SkewDLkE0twPx7AQNElE9ZUHsAqLlb9JmoewFb5vSRjfx7A4kJKpIqUHsAIgryWnakewLbpqhacvh7AaryAPobTHsBOn34oXOgewJTsuu4d/R7ALgUiq8sRH8CuoXZ3ZSYfwIsiUm3rOh/And8kpl1PH8AEdzY7vGMfwDgbpkUHeB/AjOBq3j6MH8DuCVQeY6AfwAtVCR50tB/AtkUL9nHIH8DLcLO+XNwfwD3GNJA08B/AUO1NwfwBIMAGmOfW1QsgwCm/x5SlFSDATv27BmwfIMA2T384KSkgwAA3ujXdMiDADN8CCog8IMCRPN3AKUYgwOoxu2XCTyDAkrD8A1JZIMDh2u+m2GIgwGsl0VlWbCDALHjLJ8t1IMBgT/gbN38gwBTcX0GaiCDAciT5ovSRIMDCI6pLRpsgwCzqR0aPpCDAQLyWnc+tIMAQMkpcB7cgwDpWBY02wCDAkMRaOl3JIMCEyMxue9IgwFN7zTSR2yDA+uG+lp7kIMDPCvOeo+0gwPoqrFeg9iDAm7scy5T/IMC4lmcDgQghwOoToAplESHAziTK6kAaIcBAcdqtFCMhwEpztl3gKyHA6ZI0BKQ0IcCOQRyrXz0hwF4VJlwTRiHAR+T7IL9OIcDS3jgDY1chwL6qaQz/XyHAYn0MRpNoIcDYNZG5H3EhwO52WXCkeSHA7sC4cyGCIcAYi/TMloohwPZcRIUEkyHAgOfRpWqbIcD2Hbk3yaMhwKNOCEQgrCHASjvA02+0IcCAMdTvt7whwMAiKqH4xCHAUbya8DHNIcD9fvHmY9UhwJTW7IyO3SHAPTE+67HlIcCbFooKzu0hwL0+aPPi9SHA5qhjrvD9IcAWsvpD9wUiwHwrn7z2DSLAoHC2IO8VIsB1fZl44B0iwDIElczKJSLA/ILpJK4tIsBuWcuJijUiwO/dYgNgPSLA1HLMmS5FIsBlmxhV9kwiwLIQTD23VCLANdZfWnFcIsBYTkG0JGQiwMRO0lLRayLAlTTpPXdzIsBQ+FB9FnsiwMhByRivgiLAzHsGGEGKIsCt57GCzJEiwKawaWBRmSLAEP/AuM+gIsCBC0CTR6giwKgxZPe4ryLAJgOg7CO3IsAmWlt6iL4iwNdr86fmxSLAzNq6fD7NIsAmyfn/j9QiwKDq7Tjb2yLAgpbKLiDjIsBe2bjoXuoiwLKG122X8SLAbko7xcn4IsBIuu719f8iwPhm8gYcByPAT+08/zsOI8AtB7vlVRUjwFKcT8FpHCPAFtPTmHcjI8DwIBdzfyojwO1a31aBMSPAAMboSn04I8AtJ+ZVcz8jwJzTgH5jRiPAhsBYy01NI8AKkwRDMlQjwNqvEewQWyPA0EoEzelhI8BgdlfsvGgjwPAyfVCKbyPADX7e/1F2I8CIYdsAFH0jwHICy1nQgyPA+K/7EIeKI8Ao8rIsOJEjwJiYLbPjlyPA7MifqomeI8BADTUZKqUjwIViEAXFqyPAqEZMdFqyI8Cyxvps6rgjwMaMJfV0vyPABu7NEvrFI8BV+OzLecwjwA6Acyb00iPAkC1KKGnZI8C6ilHX2N8jwEwQYjlD5iPALjNMVKjsI8CUcdgtCPMjwBpgx8ti+SPAvrbRM7j/I8C8XahrCAYkwFl69HhTDCTAl3tXYZkSJMDHJmsq2hgkwAykwdkVHyTAxIrldEwlJMDc7VkBfiskwAZomoSqMSTA1CcbBNI3JMDV+0iF9D0kwHdeiQ0SRCTA8oE6oipKJMANXLNIPlAkwMmxQwZNViTAAiM04FZcJMD4NcbbW2IkwLRiNP5baCTAbR6yTFduJMDK5mvMTXQkwAxNh4I/eiTAMgEjdCyAJMD+3FamFIYkwN7uMx74iyTA1YTE4NaRJMA4NwzzsJckwHTzB1qGnSTAmwauGlejJMAAKO45I6kkwKuDsbzqriTAwMTap620JMDSH0YAbLokwCJdycolwCTA0eIzDNvFJMDyvk7Ji8skwJqx3AY40STAzDaayd/WJMBokD0Wg9wkwO/PdvEh4iTASODvX7znJMBwj0xmUu0kwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1647\"},\"selection_policy\":{\"id\":\"1646\"}},\"id\":\"1633\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1633\"},\"glyph\":{\"id\":\"1634\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1636\"},\"nonselection_glyph\":{\"id\":\"1635\"},\"view\":{\"id\":\"1638\"}},\"id\":\"1637\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1642\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1622\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1636\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1623\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"tools\":[{\"id\":\"1617\"},{\"id\":\"1618\"},{\"id\":\"1619\"},{\"id\":\"1620\"},{\"id\":\"1621\"},{\"id\":\"1622\"},{\"id\":\"1624\"}]},\"id\":\"1625\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1652\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1687\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1736\"},\"selection_policy\":{\"id\":\"1735\"}},\"id\":\"1714\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1651\"},\"glyph\":{\"id\":\"1652\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1654\"},\"nonselection_glyph\":{\"id\":\"1653\"},\"view\":{\"id\":\"1656\"}},\"id\":\"1655\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"4.0 V\"},\"renderers\":[{\"id\":\"1718\"}]},\"id\":\"1738\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1736\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1717\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1739\"}},\"id\":\"1744\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1716\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1714\"},\"glyph\":{\"id\":\"1715\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1717\"},\"nonselection_glyph\":{\"id\":\"1716\"},\"view\":{\"id\":\"1719\"}},\"id\":\"1718\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1667\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1667\"},\"selection_policy\":{\"id\":\"1666\"}},\"id\":\"1651\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"2.0 V\"},\"renderers\":[{\"id\":\"1674\"}]},\"id\":\"1690\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"1714\"}},\"id\":\"1719\",\"type\":\"CDSView\"},{\"attributes\":{\"line_color\":\"#9467bd\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1715\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1651\"}},\"id\":\"1656\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1666\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1688\",\"type\":\"Selection\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1691\"},\"glyph\":{\"id\":\"1692\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1694\"},\"nonselection_glyph\":{\"id\":\"1693\"},\"view\":{\"id\":\"1696\"}},\"id\":\"1695\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1692\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1691\"}},\"id\":\"1696\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1742\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"5.0 V\"},\"renderers\":[{\"id\":\"1743\"}]},\"id\":\"1765\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1673\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1711\"},\"selection_policy\":{\"id\":\"1710\"}},\"id\":\"1691\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1693\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1670\"},\"glyph\":{\"id\":\"1671\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1673\"},\"nonselection_glyph\":{\"id\":\"1672\"},\"view\":{\"id\":\"1675\"}},\"id\":\"1674\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#d62728\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1694\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1735\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"3.0 V\"},\"renderers\":[{\"id\":\"1695\"}]},\"id\":\"1713\",\"type\":\"LegendItem\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"z6jm0WbzIEBd/1xux8MgQLW00E90lCBAAS2702xlIEDN0EVZsDYgQOGtREE+CCBArldi3Cu0H0AmqUmIbVgfQHZfqFFA/R5AhmITB6OiHkACdUF6lEgeQHJbAYAT7x1A9iYw8B6WHUD+o6+ltT0dQDrrXH7W5RxAghUHW4COHEBCEWYfsjccQNaYEbJq4RtAAkp4/KiLG0Bi3dbqazYbQE59L2yy4RpASjxBcnuNGkCqqX/xxTkaQMKECuGQ5hlALo2lOtuTGUD2cLD6o0EZQP7WHiDq7xhAvoVwrKyeGEAGpqmj6k0YQM4gSwyj/RdAchhL79StF0Dmew1Yf14XQIa0XFShDxdAIm1i9DnBFkDmcqBKSHMWQJau6WvLJRZAqjZbb8LYFUBmeVVuLIwVQPJ+dYQIQBVASkKOz1X0FEDeIaJvE6kUQIJm3IZAXhRAluCKOdwTFECamxeu5ckTQN6mAg1cgBNAAvTbgD43E0D2ST02jO4SQDJNxFtEphJAtpsMImZeEkB+/am78BYSQJ6oIl3jzxFAnpjpPD2JEUBS+ViT/UIRQAakrJoj/RBA8q/8jq63EEB+FDiunXIQQIpdHzjwLRBARON+3ErTD0Cc09gneUsPQDT0eNxpxA5AnNcFiBs+DkBcT5a7jLgNQESipwu8Mw1A5OITEKivDEAUZghkTywMQMxY/KWwqQtAPHWnd8onC0Bc1vh9m6YKQLTpDWEiJgpA1H4pzF2mCUCM86ptTCcJQDx+BffsqAhAPJO3HD4rCEB8ZkKWPq4HQLyJIR7tMQdA7KTCcUi2BkCESX1RTzsGQLzgioAAwQVARLP+xFpHBUAEC77nXM4EQOxteLQFVgRA3PGf+VPeA0D0qGGIRmcDQHQmnjTc8AJAzBri1BN7AkAUCF9C7AUCQAQN5FhkkQFARMfW9nodAUDYSyz9LqoAQFQ2Yk9/NwBA8JrvptWK/z84e87j4Kf+P9jQPSsexv0/sJP1V4vl/D+Y4ntJJgb8P7AfGOTsJ/s/aDPGEN1K+j+Y+Sm99G75P1jTgtsxlPg/+GCfYpK69z/gYdFNFOL2Pzi54Zy1CvY/eJgEVHQ09T9Azs17Tl/0Pwg5JSFCi/M/aF07VU248j+AH34tbubxP+CejcOiFfE/CDUxNelF8D9AKJlIf+7uP/ARqm1IU+0/wLeNLSq66z+gpDXkICPqP2Cid/Uojug/ADz5zD775j+AfBveXmrlPyDt5qOF2+M/MM/3oK9O4j+AkGpf2cPgP+D2kOH+dd4/wELp2zxo2z+A+DHuZV7YPyCWJ2dzWNU/oEjKo15W0j/A/nIeQrDOPwDYH0Vou8g/gNt/ySLOwj8AmcGpydC5PwCcz66GKKw/ANyS1Mo0gz8AONKxmnCivwCVhZqJyLS/wMDJBholwL/A+N2Qst7FvwAxwYkakcu/wDwx+y6e0L9Azk5hRHDTvwDkvGDTPta/QMSz1uEJ2b9AAz+UddHbv6DLW16Uld6/cGgL9yGr4L9Q81T4xAniv/CizAO2ZuO/0D5o5PfB5L9Ah19fjRvmvwBbOjR5c+e/MLPeHL7J6L/weJ7NXh7qv6AxRfVdceu/MIQlPb7C7L/AmiZJghLuv2BZ0besYO+/cLkuEaBW8L/oK1+OH/zwvxgA2BrWoPG/aMhh+8RE8r847zVy7efyv7DlBL9QivO/KEL8HvAr9L/QzMzMzMz0v4h7sADobPW/KF1w8EIM9r+Ic2rP3qr2vxh+l868SPe/wLOQHN7l97/IbJXlQ4L4v3C9kFPvHfm/cAAfjuG4+b+IUpO6G1P6v4D+/Pue7Pq/ENssc2yF+79YmLo+hR38v2gACnvqtPy/WChQQp1L/b+ok5isnuH9v+BIys/vdv6/QNmsv5EL/7+oWe2NhZ//v1SnESVmGQDAXMXqgLNiAMDMfz9gq6sAwBjByUdO9ADA7EBCu5w8AcA82WI9l4QBwETV6E8+zAHAGDqXc5ITAsAoCTkolFoCwIx8o+xDoQLAmD24PqLnAsAAlWebry0DwNSVsn5scwPA7EGtY9m4A8AIqYDE9v0DwFACbRrFQgTAGMDL3USHBMAAnhGGdssEwPyp0IlaDwXAiEe6XvFSBcDYLaF5O5YFwJxge0452QXAsCNkUOsbBsBc6Z3xUV4GwPA7lKNtoAbA+KHd1j7iBsCIfT37xSMHwPTmpX8DZQfAIII50velB8CUT01go+YHwER4apYGJwjAZBVQ4CFnCMC48vSo9aYIwABNiVqC5gjAmIt4XsglCcCw9WodyGQJwARjR/+BownATOg0a/bhCcBMf5zHJSAKwLyqKnoQXgrAxBXR57abCsB4L8h0GdkKwDDCkIQ4FgvAvIb1eRRTC8CQswy3rY8LwPiHOZ0EzAvAkNMtjRkIDMBUeevm7EMMwHDvxQl/fwzA9LpjVNC6DMCU578k4fUMwEB8K9ixMA3AfOtOy0JrDcBMgCtalKUNwKjHHOCm3w3ARPbZt3oZDsC4Snc7EFMOwIRsZ8RnjA7ANMd8q4HFDsBk4upIXv4OwIi2R/T9Ng/A6P2MBGFvD8DgghnQh6cPwHRqsqxy3w/AAD7C95ALEMCwspL2SicQwCx+ynznQhDATD4ftGZeEMBa4fzFyHkQwCZChtsNlRDAZsKVHTawEMDk4720QcsQwNTfSckw5hDAEj0+gwMBEcCoZFkKuhsRwCg1FIZUNhHAXpSiHdNQEcDK//P3NWsRwKwbtDt9hRHAtkBLD6mfEcBaCN+YubkRwNbXUv6u0xHA4GlIZYntEcAEVyDzSAcSwMac+sztIBLAciO3F3g6EsCoQvb351MSwKpEGZI9bRLAeOhCCnmGEsCi4leEmp8SwARd/yOiuBLAFHWjDJDREsBMuXFhZOoSwCalW0UfAxPAKhwX28AbE8Cg4x5FSTQTwE4bs6W4TBPA+rTZHg9lE8Da6l7STH0TwOy01eFxlRPAOD2Ybn6tE8D8UsiZcsUTwL7cT4RO3RPAeEnhThL1E8CGAPgZvgwUwKzQ2AVSJBTACl6SMs47FMAij/2/MlMUwLz4vc1/ahTA7khCe7WBFMAkscTn05gUwBRPSzLbrxTA5pSoecvGFMBIsHvcpN0UwKrwMHln9BTAgiwCbhMLFcCiJffYqCEVwK7s5dcnOBXAokNziJBOFcCA/xII42QVwBppCHQfexXA6Jxm6UWRFcAo6hCFVqcVwP4wu2NRvRXA1D/qoTbTFcDcL/RbBukVwL7AAK7A/hXAcLMJtGUUFsBGJNuJ9SkWwDLkE0twPxbAQNElE9ZUFsAqLlb9JmoWwFb5vSRjfxbA4kJKpIqUFsAIgryWnakWwLbpqhacvhbAaryAPobTFsBOn34oXOgWwJTsuu4d/RbALgUiq8sRF8CuoXZ3ZSYXwIsiUm3rOhfAnd8kpl1PF8AEdzY7vGMXwDgbpkUHeBfAjOBq3j6MF8DuCVQeY6AXwAtVCR50tBfAtkUL9nHIF8DLcLO+XNwXwD3GNJA08BfAodqbgvkDGMAMMM+tqxcYwFJ+jylLKxjAm/p3Ddg+GMBrnv5wUlIYwP9tdGu6ZRjAF74FFBB5GMAiebqBU4wYwNVjdsuEnxjAJWH5B6SyGMDCtd9NscUYwNZKorOs2BjAV/CWT5brGMDBnvA3bv4YwCm4v4I0ERnA5EjyRekjGcCDR1SXjDYZwFnUj4weSRnAf3gtO59bGcAfZJS4Dm4ZwHSsChptgBnAIYm1dLqSGcAIkZnd9qQZwKb2mmkitxnA88N9LT3JGcCeFeY9R9sZwPVVWK9A7RnANnc5lin/GcBxLc8GAhEawNMnQBXKIhrAnEmU1YE0GsB/4rRbKUYawJPmbLvAVxrA0iVpCEhpGsAdgzhWv3oawLwqTLgmjBrAjsj3QX6dGsCkvXEGxq4awH1V0xj+vxrAxfoYjCbRGsCvayJzP+IawN3tsuBI8xrA3IFx50IEG8AwFumZLRUbwO25iAoJJhvA/86jS9U2G8DtO3JvkkcbwEadEIhAWBvAk3aAp99oG8ABY6jfb3kbwIFFVELxiRvAong14WOaG8D6/eLNx6obwCit2RkduxvAemJ81mPLG8A2LRQVnNsbwHp90ObF6xvAzFHHXOH7G8AtZPWH7gscwPhWPnntGxzAQeFsQd4rHMDq+jLxwDscwGMIKpmVSxzA9wXTSVxbHMDdspYTFWscwN67xQbAehzAp+WYM12KHMDKNjGq7JkcwGMhmHpuqRzAaqy/tOK4HMCwnIJoScgcwIidpKWi1xzAKmnSe+7mHMCh8KH6LPYcwJGDkjFeBR3AmfcMMIIUHcBaz2MFmSMdwEth08CiMh3AIP6BcZ9BHcACF4Amj1AdwFBjyO5xXx3ATAZA2UduHcBMtLb0EH0dwK7X5k/Nix3AmbV1+XyaHcBLkvP/H6kdwD/V23G2tx3ABS2VXUDGHcC7snHRvdQdwGUNr9su4x3A3ZR2ipPxHcCRdN3r6/8dwO/N5A04Dh7Antp5/nccHsBaDnbLqyoewKQ4n4LTOB7ALaanMe9GHsDgQS7m/lQewNq1vq0CYx7AAYzRlfpwHsBaTsyr5n4ewDenAf3GjB7ADYGxlpuaHsAVJgmGZKgewLRfI9ghth7AoZUImtPDHsDB7K7YedEewOBl+qAU3x7AGvy8/6PsHsARw7YBKPoewOQElrOgBx/A8F/3IQ4VH8BQ5GVZcCIfwDExW2bHLx/A2JE/VRM9H8CAGmoyVEofwArFIAqKVx/AUI2Y6LRkH8BjjfXZ1HEfwIwZS+rpfh/ADdybJfSLH8Cq8NmX85gfwBwA50zopR/AIVuUUNKyH8B1FaOusb8fwJkgxHKGzB/AW2aYqFDZH8An47BbEOYfwDTAjpfF8h/AfG2jZ3D/H8C8XahrCAYgwFl69HhTDCDAl3tXYZkSIMDHJmsq2hggwAykwdkVHyDAxIrldEwlIMDc7VkBfisgwAZomoSqMSDA1CcbBNI3IMDV+0iF9D0gwHdeiQ0SRCDA8oE6oipKIMANXLNIPlAgwMmxQwZNViDAAiM04FZcIMD4NcbbW2IgwLRiNP5baCDAbR6yTFduIMDK5mvMTXQgwAxNh4I/eiDAMgEjdCyAIMD+3FamFIYgwN7uMx74iyDA1YTE4NaRIMA4NwzzsJcgwHTzB1qGnSDAmwauGlejIMAAKO45I6kgwKuDsbzqriDAwMTap620IMDSH0YAbLogwCJdycolwCDA0eIzDNvFIMDyvk7Ji8sgwJqx3AY40SDAzDaayd/WIMBokD0Wg9wgwO/PdvEh4iDASODvX7znIMBwj0xmUu0gwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1688\"},\"selection_policy\":{\"id\":\"1687\"}},\"id\":\"1670\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#8c564b\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1741\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1653\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1762\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1763\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"z6jm0WbzJkBd/1xux8MmQLW00E90lCZAAS2702xlJkDN0EVZsDYmQOGtREE+CCZA1ysx7hXaJUCT1CTENqwlQLsv1CigfiVAQ7GJg1FRJUCBuiA9SiQlQLmtAMCJ9yRAexMYeA/LJED/0dfS2p4kQJ11Lj/rciRAwYqDLUBHJEChCLMP2RskQGvMCFm18CNAASU8ftTFI0Cxbmv1NZsjQKe+FzbZcCNAJZ4gub1GI0DV1L/44hwjQGFChXBI8yJAl8ZSne3JIkB7OFj90aAiQH9rDxD1dyJA30I4VlZPIkAD09RR9SYiQGeQJYbR/iFAOYyld+rWIUDzvQasP68hQENaLqrQhyFAkTYx+pxgIUBzOVAlpDkhQEvX9LXlEiFAVZutN2HsIECzvCo3FsYgQHm/OkIEoCBAJSHH5yp6IEDvENG3iVQgQEEzbkMgLyBAS3DFHO4JIECamxeu5ckfQN6mAg1cgB9AAvTbgD43H0D2ST02jO4eQDJNxFtEph5AtpsMImZeHkB+/am78BYeQJ6oIl3jzx1AnpjpPD2JHUBS+ViT/UIdQAakrJoj/RxA8q/8jq63HEB+FDiunXIcQIpdHzjwLRxAonE/bqXpG0DOaeyTvKUbQBp6PO40YhtAzusCxA0fG0CuJ8tdRtwaQCLR0wXemRpAcvEJCNRXGkAKMwSyJxYaQGYs/lLY1BlAnrrTO+WTGUAua/y+TVMZQNr0hjARExlAar8U5i7TGEDGedU2ppMYQB6/gnt2VBhAnslbDp8VGEA+MyFLH9cXQN7EEI/2mBdAdlLhOCRbF0DCpL6opx0XQF5wRUCA4BZAoll/Yq2jFkCCBd9zLmcWQPY2PNoCKxZA7vjP/CnvFUB61DBEo7MVQDoTTxpueBVAZg1x6ok9FUAKhC8h9gIVQIIGciyyyBRAomNre72OFEDsJZZ+F1UUQCobsae/GxRAvOa7abXiE0DOnvM4+KkTQDZ0z4qHcRNA7GT91WI5E0Cm+F6SiQETQOwHBjn7yRJA2owxRLeSEkBmfkovvVsSQNa04HYMJRJAPtinmKTuEUB4WHQThbgRQE5uOGetghFAHiYBFR1NEUCQc/Oe0xcRQEJOSYjQ4hBAWtdOVROuEEDgh1+Lm3kQQLhn47BoRRBAQk1MTXoREEAQSibSn7sPQHyEahvSVA9A8G1ji4ruDkAoaQ05yIgOQJjoXT2KIw5AAE8+s8++DUAg34a3l1oNQEi7+Wjh9gxAzPM96KuTDEAgpNpX9jAMQNweMty/zgtAWCh9mwdtC0AQP8a9zAsLQMTy5GwOqwpAFEl51MtKCkDsL+chBOsJQID9UYS2iwlAuP2XLOIsCUDIDE5Nhs4IQHA+uxqicAhA3JLUyjQTCEAgtziVPbYHQFjTK7O7WQdA9GOTX679BkB0IPLWFKIGQPDsY1fuRgZAaNiZIDrsBUA4JtZz95EFQIBj6JMlOAVAeIcpxcPeBECYH3hN0YUEQIyGNHRNLQRA5CU9gjfVA0Asw+rBjn0DQETXDH9SJgNATPDlBoLPAkAwHiioHHkCQEBp8bIhIwJANFPIeJDNAUDEYZhMaHgBQJizroKoIwFA9J62cFDPAEBQWbZtX3sAQKipC9LUJwBAkEbR7l+p/z8Y1KBx4AP/P+j/J+UpX/4/mDeeBDu7/T/IEMqNEhj9P1Aa+0Cvdfw/2L0D4Q/U+z8wMzMzMzP7P3iET/8Xk/o/2KKPD73z+T94jJUwIVX5P+iBaDFDt/g/QExv4yEa+D84k2oavH33P5BCb6wQ4vY/kP/gcR5H9j94rWxF5Kz1P4ABAwRhE/U/8CTTjJN69D+oZ0XBeuLzP5j/9YQVS/M/qNevvWK08j9YbGdTYR7yPyC3NTAQifE/wCZTQG708D9YphJyemDwP7BiuWtnmu8/kOpU/DF17j/QAAJ/UlHtP6D72ODGLuw/UPz2Eo0N6z8Qm3QKo+3pP/CqXMAGz+g/oBejMbax5z9g2xtfr5XmP9ANck3weuU/oAkfBXdh5D8ArGGSQUnjP7CoNQVOMuI/UPhKcZoc4T/gW/3tJAjgP4DtlyzX6d0/QP+hEdnF2z8AEHPPS6TZPyCwerErhdc/wMMtCnVo1T9AkfYyJE7TPyD7JIw1NtE/AMW9+UpBzj9AaiHm4BrKPwBBvMYl+cU/gOAlkhLcwT8AT1CYQIe7P4AhQwuQX7M/AHifcQuCpj8AbLCyn1yJPwAiPDVLg5O/AFkFFHjIqb8AV54etd60vwCgKVFL0Ly/gLmI54Vcwr8AW6/WgUzGv0AwdvQfOMq/wIROs2Yfzr9g+uM8LgHRv+BVVdGD8NK/IK6IPrfd1L/Ae0Gmy8jWv4ARhiTEsdi/4DWsz6OY2r+AnGW4bX3cv8A/zOkkYN6/QE63NGYg4L9Q5a2bsw/hv8C9Fyf8/eG/0OuOUUHr4r9Qnv+ShNfjvwDxrWDHwuS/8K07LQut5b8wAa5oUZbmv6Aec4Cbfue/ENln3+pl6L/gKt3tQEzpvxCynRGfMeq/0BzzrQYW67+QiasjefnrvyDaHtH32+y/oPczEoS97b+AC2ZAH57uv9CpybLKfe+/APgI30Mu8L/AykraK53wv7D4KfOdC/G/MPl80Jp58b9ohfMXI+fxv5gIGW43VPK/mAlXdtjA8r+Qj/fSBi3zv1B/JyXDmPO/SPT4DA4E9L+gkmUp6G70v6DUUBhS2fS/eFGKdkxD9b8o/8/f16z1v7Bu0O70Ffa/2AItPaR+9r9oIXxj5ub2v1hfS/m7Tve/gKchlSW2978QXIHMIx34vxhz6jO3g/i/yI3cXuDp+L+gCtnfn0/5v6gSZUj2tPm/4KELKeQZ+r+Iil8Ran76vxB0/Y+I4vq/UNSNMkBG+78w5caFkan7v5iUbhV9DPy/qHBcbANv/L+AjnsUJdH8vzhtzJbiMv2/6NNmezyU/b9oq3tJM/X9v7DTVofHVf6/4PRguvm1/r/wSyFnyhX/v/hyPxE6df+/4CWFO0nU/78MAfAzfBkAwFihsQukSADAFLwkZZx3AMBEHvt/ZaYAwHjxe5v/1ADA3JGE9moDAcBIYonPpzEBwCielmS2XwHAzClR85aNAcCQYPe4SbsBwFThYfLO6AHABFkE3CYWAsBES+6xUUMCwFzZy69PcALARIfmECGdAsAA/yUQxskCwDTSEOg+9gLA0DnN0osiA8BQ1CEKrU4DwPxhdseiegPAqH/UQ22mA8C4X+i3DNIDwHyBAVyB/QPA4GYTaMsoBMCMSLYT61MEwGTIJ5bgfgTAgKJLJqypBMBUXKz6TdQEwKzye0nG/gTAxIWUSBUpBcAQBHktO1MFwGzTVS04fQXA1HgBfQynBcCcPv1QuNAFwCjZdd07+gXAXApEVpcjBsBcQ+3uykwGwBZFpNrWdQbAOr9JTLueBsAI7mx2eMcGwHA2TIsO8AbAGMHVvH0YB8DcE6g8xkAHwBaqEjzoaAfAbIsW7OOQB8CW4WZ9ubgHwHqMaSBp4AfAQrU3BfMHCMAYYJ5bVy8IwKT8HlOWVgjANvXvGrB9CMDWPP3hpKQIwP7b6NZ0ywjALnwLKCDyCMBE8nQDpxgJwKrH7JYJPwnASsLyD0hlCcCEa7+bYosJwKyVRGdZsQnAruAtnyzXCcCCPeFv3PwJwFJwfwVpIgrAyJHki9JHCsAGj6guGW0KwLKoHxk9kgrA/vBadj63CsA+yChxHdwKwOhYFTTaAAvAQhJr6XQlC8AQIjO77UkLwEztNdNEbgvA5of7WnqSC8A8K8x7jrYLwOqrsF6B2gvAbO5yLFP+C8DiWp4NBCIMwKZPgCqURQzAOJMoqwNpDMD+xGm3UowMwCbN2XaBrwzApEvSEJDSDMA6BnGsfvUMwHhVmHBNGA3AHJHvg/w6DcBIe+MMjF0NwPqqpjH8fw3AivUxGE2iDcBe10TmfsQNwLrbZcGR5g3AuAPjzoUIDsBgLNIzWyoOwNpzERUSTA7A/p1Hl6ptDsDad+TeJI8OwIw6IRCBsA7AJu0AT7/RDsACxlC/3/IOwAKLqITiEw/ARPFqwsc0D8D0+8Wbj1UPwFBaszM6dg/A9MT4rMeWD8BsWigqOLcPwPT6oM2L1w/AmKOOucL3D8AtZPWH7gsQwPhWPnntGxDAQeFsQd4rEMDq+jLxwDsQwGMIKpmVSxDA9wXTSVxbEMDdspYTFWsQwN67xQbAehDAp+WYM12KEMDKNjGq7JkQwGMhmHpuqRDAaqy/tOK4EMCwnIJoScgQwIidpKWi1xDAKmnSe+7mEMCh8KH6LPYQwJGDkjFeBRHAmfcMMIIUEcBaz2MFmSMRwEth08CiMhHAIP6BcZ9BEcACF4Amj1ARwFBjyO5xXxHATAZA2UduEcBMtLb0EH0RwK7X5k/NixHAmbV1+XyaEcBLkvP/H6kRwD/V23G2txHABS2VXUDGEcC7snHRvdQRwGUNr9su4xHA3ZR2ipPxEcCRdN3r6/8RwO/N5A04DhLAntp5/nccEsBaDnbLqyoSwKQ4n4LTOBLALaanMe9GEsDgQS7m/lQSwNq1vq0CYxLAAYzRlfpwEsBaTsyr5n4SwDenAf3GjBLADYGxlpuaEsAVJgmGZKgSwLRfI9ghthLAoZUImtPDEsDB7K7YedESwOBl+qAU3xLAGvy8/6PsEsARw7YBKPoSwOQElrOgBxPA8F/3IQ4VE8BQ5GVZcCITwDExW2bHLxPA2JE/VRM9E8CAGmoyVEoTwArFIAqKVxPAUI2Y6LRkE8BjjfXZ1HETwIwZS+rpfhPADdybJfSLE8Cq8NmX85gTwBwA50zopRPAIVuUUNKyE8B1FaOusb8TwJkgxHKGzBPAW2aYqFDZE8An47BbEOYTwDTAjpfF8hPAfG2jZ3D/E8B3u1DXEAwUwLL06PGmGBTALveuwjIlFMCOTdZUtDEUwBdIg7MrPhTAhxXL6ZhKFMC527MC/FYUwAvQNAlVYxTAqU82CKRvFMCq95EK6XsUwO68EhskiBTA5QN1RFWUFMAauGaRfKAUwJJjhwyarBTABUZowK24FMDwa4y3t8QUwGnFaPy30BTA2jxkma7cFMCTzdeYm+gUwBeaDgV/9BTAZQJG6FgAFcD9ua1MKQwVwL3dZzzwFxXAqgmJwa0jFcBxbhjmYS8VwOjmD7QMOxXANg1cNa5GFcAAUNxzRlIVwFYHY3nVXRXAf4m1T1tpFcCjP4wA2HQVwEW6kpVLgBXAosVnGLaLFcDkfZ2SF5cVwDNjuQ1wohXAmW00k7+tFcDQIHssBrkVwN6f7eJDxBXAkcDfv3jPFcDgHpnMpNoVwA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xtw3v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4v17cNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv17cN79e3De/Xtw3v17cN79e3De/Xtw3v17cNwAAAAAAAAAAAAAAAAAAAAC/Xlw4v15cOL9eXDi/Xlw4v15cOL9eXDi/Xlw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL9eXDi/Xlw4N7uJOS2ekDp2fjY7Ex7kOzwZjDwEvRM9+PV5PWeixj33CRM+3+RIPmw2gj5yMJ4+k3e2Pq92yD5Z3NI+koDRPq92yD45+bc+ppijPm0Ejz6crHc+7JpSPlXyNz677iM+yDcVPnmeCj5KH/o9XPLlPR4D2D3/cMc9coe6PcURrz0Ew6U9FAacPYiDlT0k4os9CE2JPbxJhj3J/IY92N6IPT5IjT1jMo49ZWGPPd6jkT3thZM9iIOVPUhrmD2wA549PrWlPSxDrj2fxrk924bGPQNu1T0+LuI90HXxPersAj5jMg4+Z5MZPsz/Jj781zY+8fJCPg3vSz7oo1Y+tglePrjUYT5unGI+wY1dPlPPWj77GFc+b/pNPoFsRT5xIz0+GjU0PtW7Kz677iM+sjIfPjpUGj6VNhY+fscQPm22DT647gw+CnwKPjpOCD7uSgU+t+sDPmuEAz4ZWwM+q5wAPv+C/T1ltPw9uN38PYdv/D1H8Pg9YO/zPYcI9j24pfc9Suf0PQpo8T0rvOo9iGnqPboG7D1AXeM9QF3jPUBd4z0jAOY9+4XvPeGG9D3OrfY9ALL+PetQAD4fHQM+Hx0DPnvKAj6opQQ+9AwFPs6+Bj49fQk+Ok4IPp/sCD4fhAk+2w0KPoArDj7xfA8+nMAQPoLBFT7jaBo+3N4fPixAJT6i7yg+ZjUuPiD3Mz6P5Dc+F6U+PnImRj7tYk0+AD9UPtjEXT65O2g+yrNxPlOjeT7TZ4E+tViFPuGBiD5S04k+91SLPphijj58mI8+1mSPPonnkj4LSpc+V02aPmFtnD4Be58+6qqlPi0LqT5Qxqg+w5SsPlKqsT5gKLY+LPi1PuQ8uT5wcb4+ZCXEPg3Wxj6C08s+LX7TPrAu2T59e9s+KHTkPszJ7T461vE+99z0PnX6+z7IMQM/W4wFP50hBT+cvQc/af8LP/7hDj+v8g0/5kYRP0r+Fj/4cBk/f3wYP1wEHD8QtiA/LfIjP6ZKIj/abyQ/igYqP/ICLT98oSo/jgstP4czMT/AaDQ/7QAzPy+LND+aXTk/rvY8P5K6OT/AxDw/5JhBPwQ+RT8kcUQ/txlIP0ckTz9Ce1Q/lt5TP88IWT9JZGA/E2xlPxw+Zj/yF2w/GZh0PyQqez/vq3k/Eqp8PwAAgD9z1ng/O0JkPyeuTD8dyDI/YioZP7fa8z4tEbs+LreVPuJReD6doFM+ydlAPqsSND6NSyc+mZQYPoe1CD4SXPs92CvkPWeixj0ucq89y5igPXppjj08bHk9T9hePbKlST163Dg9qHwsPTu4Fz1yFBA9he0NPQ87AT0r9O88q4XePAjGxTwO5rA8timbPIQfgTzQdXE8O5JIPMKBOTx33yo86fUdPNd9FDyfUw88cUYDPFSxADzua+g7aZ/UO/pKyjuI9r876JSpO87BjzugtIM7aN1rOwvDUzsV4Ew7+gwzO+fSQDu/Xlw7AaZaO04KUjvIe1U7KRo/Ox/9RTszNzg7SHEqO1GOIzvx7zk7bGE9O9KYTjvIe1U7fBdeO4Y0Vzs50F87AaZaO3L6ZDuYrGA7v15cO+UQWDs=\",\"dtype\":\"float32\",\"order\":\"little\",\"shape\":[500]}},\"selected\":{\"id\":\"1763\"},\"selection_policy\":{\"id\":\"1762\"}},\"id\":\"1739\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1739\"},\"glyph\":{\"id\":\"1740\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1742\"},\"nonselection_glyph\":{\"id\":\"1741\"},\"view\":{\"id\":\"1744\"}},\"id\":\"1743\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1654\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1672\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1670\"}},\"id\":\"1675\",\"type\":\"CDSView\"}],\"root_ids\":[\"1598\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.3\"}};\n const render_items = [{\"docid\":\"dbab62da-8615-4b82-8416-b17d4960023c\",\"root_ids\":[\"1598\"],\"roots\":{\"1598\":\"8477c7a0-b593-4cee-81f9-447e77aadefc\"}}];\n root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "1598" - } - }, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "E/TOF relationship:\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "9f59d9133839416487aa1649ebe5144c", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAGQCAYAAAC+tZleAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABu7UlEQVR4nO3dd3xUVf7/8fdMJj2Z9E4IJaFI770JCsoqCKssItiVRV1F1135rt39LbZV1wK6NlaxF1AsKNIkNOmdSIDQUiBAMult7u+PwGgkNJlkJpPX8/GYB8y95858xmMuc94591yTYRiGAAAAAAAAADdldnUBAAAAAAAAwJkQYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK0RYAEAAAAAAMCtEWABAAAAAADArRFgAQAAAAAAwK1ZXF0API/dbldmZqaCg4NlMplcXQ4AAAAAwMMZhqGCggLFx8fLbGaujiciwILTZWZmKjEx0dVlAAAAAAAamQMHDqhJkyauLgN1gACrAfvxxx/1zDPPaN26dcrKytKcOXM0evRox37DMPTII4/o9ddfV15envr166eZM2cqJSXljK/7yiuv6JlnnlF2drY6deqkl156ST179jznuoKDgyVVnzisVuvv+mwAAAAAAJwrm82mxMREx3gUnocAqwErKipSp06ddNNNN2nMmDGn7H/66af14osv6n//+5+aN2+uhx56SMOHD9f27dvl5+dX62t+9NFHuvfee/Xqq6+qV69eeuGFFzR8+HClpaUpOjr6nOo6edmg1WolwAIAAAAA1BuWsfFcJsMwDFcXgQtnMplqzMAyDEPx8fG677779Ne//lWSlJ+fr5iYGM2aNUt/+tOfan2dXr16qUePHnr55ZclVa9nlZiYqLvuuksPPPDAOdVis9kUEhKi/Px8AiwAAAAAQJ1jHOr5WNnMQ+3du1fZ2dkaNmyYY1tISIh69eqllStX1npMeXm51q1bV+MYs9msYcOGnfYYSSorK5PNZqvxAAAAAAAAcBYCLA+VnZ0tSYqJiamxPSYmxrHvt3Jzc1VVVXVex0jS9OnTFRIS4niwgDsAAAAAAHAmAixcsGnTpik/P9/xOHDggKtLAgAAAAAAHoQAy0PFxsZKknJycmpsz8nJcez7rcjISHl5eZ3XMZLk6+vrWLCdhdsBAAAAAICzEWB5qObNmys2NlYLFy50bLPZbFq9erX69OlT6zE+Pj7q1q1bjWPsdrsWLlx42mMAAAAAAADqmsXVBeD3KywsVHp6uuP53r17tXHjRoWHh6tp06a655579M9//lMpKSlq3ry5HnroIcXHxzvuVChJQ4cO1VVXXaU777xTknTvvffq+uuvV/fu3dWzZ0+98MILKioq0o033ljfHw8AAAAAAEASAVaDtnbtWg0ZMsTx/N5775UkXX/99Zo1a5b+9re/qaioSLfddpvy8vLUv39/zZ8/X35+fo5jdu/erdzcXMfzcePG6ciRI3r44YeVnZ2tzp07a/78+acs7A4AAAAAAFBfTIZhGK4uAp7FZrMpJCRE+fn5rIcFAAAAAKhzjEM9H2tgAQAAAAAAwK0RYKHRWrXnqG57Z62KyipdXQoAAAAAADgDAiw0WlV2Q8vTczX+9VXKLSxzdTkAAAAAAOA0CLDQaPVLjtRHt/dRVn6pxs5coX1Hi1xdEgAAAAAAqAUBFhq19gkh+vzPfeVlMmnMjBXafDDP1SUBAAAAAIDfIMBCo5cYHqBP/9xXTSMC9Kf/rtKStMOuLgkAAAAAAPwKARYgKTzQR+/f0lt9WkTolv+t1afrDrq6JAAAAAAAcAIBFnCCv4+XXpvYTVd3b6K/frJJryxOl2EYri4LAAAAAIBGz+LqAgB3YvEy619XdVCM1U/PfJem7PxSPXplO3mZTa4uDQAAAACARosAC/gNk8mke4a1UozVT/+Ys0VHCsr0wp86y8/by9WlAQAAAADQKHEJIXAa43s21X8ndteSnw9r4purdbyo3NUlAQAAAADQKBFgAWcw7KIYvX9rb+0+UqQxM1coI7fI1SUBAAAAANDoEGABZ9G1aZjmTOkrk6SrZizX2oxjri4JAAAAAIBGhQALOAdJEYH6fEpfpcQE69rXV+vLTZmuLgkAAAAAgEaDAAs4R6EBPnr35p76Q8c4/eWDDXplcboMw3B1WQAAAAAAeDzuQgicB1+Ll/59TSc1jQjQM9+lKSO3SP/vqg7ysZAFAwAAAABQVwiwgPNkMpl0z7BWSooI0N8+3axDeSWaeV03hfh7u7o0AAAAAAA8EtNGgN/pqi5N9O7NvbQt06axM1fowLFiV5cEAAAAAIBHIsACLkDvFhH6fEpflVfaddWM5dqw/7irSwIAAAAAwOMQYAEXqGVUkOZM6aukiED96b+r9PXmLFeXBAAAAACARyHAApwgIshX793SS8PbxeqO99frhR9+lt3OHQoBAAAAAHAGFnEHnMTP20v/+VNntY4N1jPfpWlXTqGevbqT/H28XF0aAAAAAAANGjOwACcymUy6Y0iyXr2umxbtPKyrX1uhrPwSV5cFAAAAAECDRoAF1IER7WP16Z/76Fhhua58mcXdAQAAAAC4EARYQB1pFx+iL+7sr8Qwf4377yp9sfGQq0sCAAAAAKBBIsAC6lBUsK8+uK23/tAxTnd/uFHPfLeTxd0BAAAAADhPLOIO1DFfi5f+fXUntYkN1vRvd2pXTqGeH9dZgb78+AEAAAAAcC6YgQXUA5PJpNsGttQbk7preXquxs5coYPHi11dFgAAAAAADQIBFlCPhraN0edT+qmovFJXvJSqFem5ri4JAAAAAAC3R4AF1LPWscH68o7+ahcfoolv/aQ3lu2RYbAuFgAAAAAAp0OA5eGaNWsmk8l0yuOOO+6otf2sWbNOaevn51fPVXu+sEAfzbqxh27p31z//HqHpn60USXlVa4uCwAAAAAAt8Qq0h5uzZo1qqr6JRjZunWrLrnkEl199dWnPcZqtSotLc3x3GQy1WmNjZXFy6xpl7dVu4QQ/e3TTdp1uFCvTeymJmEBri4NAAAAAAC3QoDl4aKiomo8f/LJJ9WyZUsNGjTotMeYTCbFxsbWdWk44cpO8UqOCtJt767VFS+l6pVru6pvcqSrywIAAAAAwG1wCWEjUl5ertmzZ+umm24646yqwsJCJSUlKTExUaNGjdK2bdvqscrG6aJ4q+bdybpYAAAAAADUhgCrEZk7d67y8vJ0ww03nLZN69at9dZbb+mLL77Q7NmzZbfb1bdvXx08ePC0x5SVlclms9V44PyxLhYAAAAAALUzGUzzaDSGDx8uHx8fzZs375yPqaioUNu2bTV+/Hg98cQTtbZ59NFH9dhjj52yPT8/X1ar9XfX25h9uSlTf/t0k1pGBenV67opMZx1sQAAAADgdGw2m0JCQhiHejBmYDUS+/bt0w8//KBbbrnlvI7z9vZWly5dlJ6efto206ZNU35+vuNx4MCBCy230buyU7w+/3M/2UordMXLqVqSdtjVJQEAAAAA4DIEWI3E22+/rejoaI0cOfK8jquqqtKWLVsUFxd32ja+vr6yWq01HrhwJ9fF6pIYqhtnrdHzC35WlZ0JkwAAAACAxocAqxGw2+16++23df3118tiqXnjyUmTJmnatGmO548//ri+//577dmzR+vXr9d1112nffv2nffMLThHaICP3ry+h+4d1kovLtqlG97+SceKyl1dFgAAAAAA9YoAqxH44YcftH//ft10002n7Nu/f7+ysrIcz48fP65bb71Vbdu21eWXXy6bzaYVK1booosuqs+S8Stms0l3DU3ROzf11LZMm/7w4jJtPJDn6rIAAAAAAKg3LOIOp2PxvLqTmVeiO95fr62H8vXwHy7Sdb2TZDKZXF0WAAAAALgU41DPxwwsoAGJD/XXR7f10YReSXroi22a+tFGFZdXurosAAAAAADqFAEW0MD4WMx69Mp2enF8F32/PUejX1mu3UcKXV0WAAAAAAB1hgALaKCu7BSvL+7opyq7oVEvL9fXm7POfhAAAAAAAA0QARbQgKXEBOuLO/trcOso3fH+ej00d6tKK6pcXRYAAAAAAE5FgAU0cEG+Fr00vov+Obq9Plp7QGNnrtDe3CJXlwUAAAAAgNMQYAEewGQy6breSZozpa+Ky6v0hxeX6ctNma4uCwAAAAAApyDAAjxIu/gQzburv4ZdFKO/fLBB0z7fwiWFAAAAAIAGjwAL8DBBvha9MK6znhrbQZ+vP6jRryxX+mHuUggAAAAAaLgIsAAPZDKZNK5HU315Z39VVNl1xUup+mzdQVeXBQAAAADA70KABXiw1rHBmndXf13eIU73fbJJf/1kk4rLK11dFgAAAAAA54UAC/BwAT4W/fuaTnr26k76enOWrnx5ubZn2lxdFgAAAAAA54wAC2gk/titiebd1U8Ws0mjX1mut1L3yjAMV5cFAAAAAMBZEWABjUhydLDm3tFP1/VO0uNfbdeNs9Yot7DM1WUBAAAAAHBGBFhAI+Pn7aWHr7hIb9/YQ1sP5WvECz9qSdphV5cFAAAAAMBpEWABjdSQ1tH69u6BahcfohveXqPH521XWWWVq8sCAAAAAOAUBFhAIxYV7Ku3b+ihh/5wkWav2qfRr6xQ+uECV5cFAAAAAEANBFhAI2c2m3Rz/+aac0dflVdW6Q8vpeq91ftY4B0AAAAA4DYIsABIktrFh+iruwZoTNcm+secrbr93XU6VlTu6rIAAAAAACDAAvALfx8v/euqDnr1um76KeOYLn3+Ry3eyQLvAAAAAADXIsACcIoR7WP1/T0D1S7eqhtnrdE/5mxRcXmlq8sCAAAAADRSBFgAahVt9dOsG3voidHt9dn6g7r8P8u0Yf9xV5cFAAAAAGiECLAAnJbJZNLE3kn65i8DFBLgoz++ulLPLfhZFVV2V5cGAAAAAGhECLAAnFWLqCB9NrmP/nJxil5ZnK6xM1co/XChq8sCAAAAADQSBFgAzonFy6y7h6Xo8z/3VWFppUa+uEz/W5EhwzBcXRoAAAAAwMMRYAE4L50SQ/X1XwboTz0S9ciX2zTprZ+UlV/i6rIAAAAAAB6MAAvAefP38dJjo9rrfzf11M85Bbr0+R/16bqDzMYCAAAAANQJAiwAv9ugVlH6/p5BuuSiGP31k0265X9rlWMrdXVZAAAAAAAPQ4AF4IKEBHjruWs66/VJ3bX5UL4uff5HzdnAbCwAAAAAgPMQYAFwiksuitH39wzU4NZRmvrRJt327jodLmA2FgAAAADgwhFgAXCasEAf/edPXfTqdd20Yf9xXfr8j/pi4yFmYwEAAAAALggBlgd79NFHZTKZajzatGlzxmM++eQTtWnTRn5+furQoYO++eabeqoWnmRE+1h9P3WQ+idH6u4PN+rPs9crt7DM1WUBAAAAABooAiwP165dO2VlZTkeqampp227YsUKjR8/XjfffLM2bNig0aNHa/To0dq6dWs9VgxPER7oo5ev7apXru2qnzKO6dLnf9S8TZnMxgIAAAAAnDeTwWjSYz366KOaO3euNm7ceE7tx40bp6KiIn311VeObb1791bnzp316quvnvP72mw2hYSEKD8/X1ar9XzLhgfKLSzTw19s1TdbsjWsbYz+Obq9YkP8XF0WAAAAAA/BONTzMQPLw+3atUvx8fFq0aKFJkyYoP3795+27cqVKzVs2LAa24YPH66VK1fWdZnwcJFBvpoxoZteva6rNh3M0yXPLdX7q/fLbic/BwAAAACcHQGWB+vVq5dmzZql+fPna+bMmdq7d68GDBiggoKCWttnZ2crJiamxraYmBhlZ2ef8X3Kyspks9lqPIDajGgfpx+mDtLlHeL0f3O26No3Vikjt8jVZQEAAAAA3BwBlge77LLLdPXVV6tjx44aPny4vvnmG+Xl5enjjz926vtMnz5dISEhjkdiYqJTXx+eJSTAW0/9saPeu6WXDuWVaPgLP+q1pbtVWWV3dWkAAAAAADdFgNWIhIaGqlWrVkpPT691f2xsrHJycmpsy8nJUWxs7Blfd9q0acrPz3c8Dhw44LSa4bn6JUfqu3sGamLvJD01f6eumrFC2zOZvQcAAAAAOBUBViNSWFio3bt3Ky4urtb9ffr00cKFC2tsW7Bggfr06XPG1/X19ZXVaq3xAM5FgI9FD/7hIn0+pZ/KK+268uVUPftdmkorqlxdGgAAAADAjRBgebC//vWvWrp0qTIyMrRixQpdddVV8vLy0vjx4yVJkyZN0rRp0xzt7777bs2fP1///ve/tXPnTj366KNau3at7rzzTld9BDQSnRNDNe+u/rrr4hS99uNujXxxmdZmHHN1WQAAAAAAN0GA5cEOHjyo8ePHq3Xr1rrmmmsUERGhVatWKSoqSpK0f/9+ZWVlOdr37dtX77//vv773/+qU6dO+vTTTzV37ly1b9/eVR8BjYiPxay7h6Xo678MkNXfW1e/tlIPzt2i/JIKV5cGAAAAAHAxk2EY3MceTmWz2RQSEqL8/HwuJ8TvUmU39M7KDP37+5/l7+Olh/9wkf7QMU4mk8nVpQEAAABwQ4xDPR8zsAC4HS+zSTf2a64f7h2k7klhuuuDDbr+7TXaf7TY1aUBAAAAAFyAGVh1KD8/X0eOHFFeXp5CQ0MVFRWlkJAQV5dV50i+4WwLd+To4S+2KbewTH8ZmqJbB7SQj4X8HQAAAEA1xqGez+LqAjxJZWWl5syZo6+//lpLly7V/v37T2nTtGlTDRo0SH/4wx80evRoWSx0AXA2Q9vGqE/LCP3nh116bsHPmrvhkP41poN6NAt3dWkAAAAAgHrADCwnyMvL01NPPaW33npLubm5MgxDZrNZcXFxCg8Pl9VqVX5+vo4fP67MzEwZhiGTyaTIyEjdfPPN+tvf/qbQ0FBXfwynIflGXdqRZdP/zdmiDfvzNK57oqZd3kahAT6uLgsAAACACzEO9XwEWBfo2Wef1fTp03X8+HElJydr/PjxGjx4sLp3767g4OBT2hcUFGjNmjVavHixPvzwQ+3evVthYWH6v//7P913330u+ATOx4kDdc1uN/T+T/v11Pyd8vEy6x8j2+qqLgks8g4AAAA0UoxDPR8B1gUym8268sorNW3aNPXq1eu8j1+5cqWefPJJffXVV6qqqqqDCusfJw7Ul8MFpfrnVzv05aZM9W0ZocdHtVdydJCrywIAAABQzxiHej4CrAu0ceNGde7c2W1exx1w4kB9+/HnI3roi63KzCvRTf2b6y8XpyjQl/XlAAAAgMaCcajnI8CC03HigCuUVlTp9R/36JUl6Qr199GDf2irkR3iuKwQAAAAaAQYh3o+7kN/ge6//35t2bLF1WUAjZ6ft5fuGpqiBVMHqWOTEN35/gZNeGO10g8XuLo0AAAAAMAFYgbWBTKbzTKZTGrfvr0mTpyoa6+9VvHx8a4uy6VIvuEOlqQd1qNfbtPB4ycuKxyaoiAuKwQAAAA8EuNQz0eAdYGmTJmiTz75REePHpXJZJLZbNaQIUM0ceJEjRkzRoGBga4usd5x4oC7KKusvqzw5cXpCvH31j9GXqQrOnJZIQAAAOBpGId6PgIsJ6isrNS3336rd999V1999ZVKS0tlMpnk7++v0aNH67rrrtOll14qs7lxXLHJiQPu5uDxYj3x1XZ9ty1HfVpE6LFR7dQqJtjVZQEAAABwEsahno8Ay8kKCgr06aefavbs2Vq6dKnsdrtMJpOio6M1fvx4XXfdderataury6xTnDjgrpb+fESPfrlNB44V64a+zfSXYSmy+nm7uiwAAAAAF4hxqOcjwKpDmZmZev/99zV79mxt3rxZkmQymdSmTRtNmjRJ1157rRITE11cpfNx4oA7K6us0hvL9urlRekK9PXSXy9trau7J8rLzGWFAAAAQEPFONTzEWDVk+3bt+udd97Rhx9+qP379zvWy6qoqHB1aU7HiQMNQVZ+iZ6en6Y5Gw6pXbxVj1zRTj2bh7u6LAAAAAC/A+NQz0eAVY+OHTumDz74QI899phyc3NlMplUVVXl6rKcjhMHGpL1+4/rsXnbtelAnkZ2jNO0y9qoSViAq8sCAAAAcB4Yh3o+7ilfx8rKyvTll19q9uzZ+u6771RRUSHDMBQeHq5x48a5ujyg0evaNExz/txXczYc0lPzd2rov5fq9oEtNHlwSwX4cIoEAAAAAHfADKw6smjRIs2ePVuff/65CgoKZBiGfH19NXLkSE2cOFGXX365vL09c/Fokm80VEVllZqxJF2vL9ur8AAfPXBZG43qHC+TifWxAAAAAHfGONTzEWA50aZNm/Tee+/pgw8+UGZmpgzDkMlkUr9+/TRx4kRdc801CgkJcXWZdY4TBxq6A8eK9a9vdujbrdnq0jRUj1zRTp0TQ11dFgAAAIDTYBzq+QiwLtDBgwf13nvv6b333tO2bdskSYZhqFWrVpo4caImTJigZs2aubbIesaJA55i5e6jemzeNu3MLtCYrgm6f3hrxYX4u7osAAAAAL/BONTzEWBdIIvFIsMwZBiGoqKiNG7cOE2cOFE9evRwdWkuw4kDnqTKbujDNfv13Pc/q6i8Urf0r14fK8iX9bEAAAAAd8E41PMRYF0gf39/jRo1ShMnTtSIESPk5eXl6pJcjhMHPFFBaYVeW7pHry/bo2A/i+4Z1kp/6pEoi5fZ1aUBAAAAjR7jUM9HgHWBCgoKFBwc7Ooy3AonDniyzLwSPft9muZsOKSWUUGadlkbXdwmmoXeAQAAABdiHOr5CLDq0KZNm/TTTz8pNzdX7dq105VXXilJKisrU1lZmcf+UHHiQGOw9VC+/t/XO7Ryz1H1bRmh/7u8rdoneP5NGgAAAAB3xDjU83HtSx1IS0tT37591bVrV02ePFkPPvig5s6d69j//vvvKywsTPPnz3ddkQAuSPuEEL1/ay+9dUN3HS4o0xUvp+rejzcqM6/E1aUBAAAAgMchwHKyAwcOaODAgVq1apWuuOIKPf300/rtJLdrrrlGPj4++uyzz1xUJQBnMJlMurhNjObfPUD/HN1eP/58REOeXaJnvtupgtIKV5cHAAAAAB6DAMvJHn/8ceXm5uqNN97Q3Llzdd99953SJjAwUJ07d9bq1atdUCEAZ7N4mTWhV5KW3D9Etw1soTdT92rQM0v0VupelVVWnfa4kpIS5eTkqKSEWVsAAAAAcCYEWE42f/58dezYUTfddNMZ2zVr1kyHDh2qp6oA1IcgX4vuu7S1Fv91sC5pG6N/fr1dQ/+9VJ+vP6gq+y8zMVNTUzVmzBgFBQUpNjZWQUFBGjNmjJYvX+7C6gEAAADAfRFgOdnhw4fVunXrs7arqKhQcXFxPVQEoL7FhfjrqT921PdTB6pdvFX3frxJI19cpkU7czRjxkwNHDhQ8+bNk91ulyTZ7XbNmzdPAwYM0Kuvvuri6gEAAADA/RBgOVlERIT2799/1nY///yz4uLi6qEiAK6SHB2s1yZ21+dT+irE31s3zVqrx5fb5B3XWpWVlTXaVlZWyjAMTZkyhZlYAAAAAPAbBFhO1q9fP61Zs0YbN248bZulS5dq69atGjx4cL3VBcB1ujYN04e39VbLg9/JyzdQcROfVdRV/5B3ROIpbb28vPT888+7oEoAAAAAcF8EWE7217/+VYZhaNSoUfr2229VVVVzAedFixZp4sSJslgsuueee+q0lunTp6tHjx4KDg5WdHS0Ro8erbS0tDMeM2vWLJlMphoPPz+/Oq0TaAxKS0u15INXlPn2X5Q771l5RzdX3E0vK+Kyu+UVHOloV1lZqTlz5rCwOwAAAAD8CgGWk/Xq1UsvvviiMjMz9Yc//EGhoaEymUz67LPPFBYWpksuuUSZmZl6+eWX1bFjxzqtZenSpbrjjju0atUqLViwQBUVFbr00ktVVFR0xuOsVquysrIcj3379tVpnUBjYLPZTqx5Zaho+xJlvj5Zxxe+Lv+WPZRw238VdvEtMgeESKpeE8tms7m2YAAAAABwIybDMIyzN8P5WrVqlZ588kktWrRIhYWFkiQ/Pz8NHjxY//jHP9SvX796r+nIkSOKjo7W0qVLNXDgwFrbzJo1S/fcc4/y8vJ+9/vYbDaFhIQoPz9fVqv1d78O4ElKSkoUFBTkWLj9JJOPv6w9Rsva4yrJZFLB2i9VsHauCo7myN/f30XVAgAAAA0L41DPZ3F1AZ6qd+/emjt3rgzDUG5urux2uyIjI+Xl5eWymvLz8yVJ4eHhZ2xXWFiopKQk2e12de3aVf/617/Url2707YvKytTWVmZ4zkzR4BT+fv7a9SoUZo3b16NBdyN8hLlL/9ABeu+krXnGAX3GKXwXqP1+oqDurFfMwX7ebuwagAAAABwD8zAaiTsdruuvPJK5eXlKTU19bTtVq5cqV27dqljx47Kz8/Xs88+qx9//FHbtm1TkyZNaj3m0Ucf1WOPPXbKdpJvoKbU1FQNHDhQZzrtegWG6ZZ/f6RF+ysV6OulyYNaalKfZvL3cV34DQAAALg7ZmB5PgKsRuLPf/6zvv32W6Wmpp42iKpNRUWF2rZtq/Hjx+uJJ56otU1tM7ASExM5cQC1ePXVVzVlyhR5eXnVmIllsVhUVVWlGTNmaPLkycrMK9HLi9P18ZoDCg3w0Z1DWmp8r6bytRBkAQAAAL9FgOX5WMT9AvXu3VvffffdBb3GN998o169ejmpolPdeeed+uqrr7R48eLzCq8kydvbW126dFF6evpp2/j6+spqtdZ4AKjd5MmTtWzZMo0aNUpmc/Up2Gw2a9SoUVq2bJkmT54sSYoP9de/ruqgRfcN1qBWUXr8q+0a8swSffDTflVU2c/0FgAAAADgcZiBdYFat26t9PR0dezYUddff73GjRunuLi4sx6XmZmpDz74QO+++642b96s1q1ba8eOHU6tzTAM3XXXXZozZ46WLFmilJSU836NqqoqtWvXTpdffrmee+65czqG5Bs4NyUlJbLZbLJarWddsD39cKH+s3CX5m3KVNPwAN11cbKu6pIgixe/hwAAAAAYh3o+AqwLVFVVpVdffVVPPPGEDh8+LLPZrOTkZPXo0UOtW7dWWFiYgoODVVBQoGPHjiktLU1r1qxRenq6DMNQTEyMHn74Yd12221OX+B9ypQpev/99/XFF1+odevWju0hISGOwfKkSZOUkJCg6dOnS5Ief/xx9e7dW8nJycrLy9MzzzyjuXPnat26dbrooovO6X05cQB1Z0eWTc8v+Fnfb89R0/AA3TkkWVd1TZA3QRYAAAAaMcahno8Ay0nKy8v1ySef6I033lBqaqqqqqokSSaTydHm5H9qLy8vDRgwQLfeeqvGjh0rHx+fOqnp1+/9a2+//bZuuOEGSdLgwYPVrFkzzZo1S5I0depUff7558rOzlZYWJi6deumf/7zn+rSpcs5vy8nDqDubcvM14sLd+m7bTlKDPfXnUOSNaZrE4IsAAAANEqMQz0fAVYdKCgo0IoVK7R582YdPnxY+fn5CgkJUXR0tDp16qS+ffsqKCjI1WXWGU4cQP3ZkWXTiwt36dut2WoS5q87hiRrbNcm8rEQZAEAAKDxYBzq+Qiw4HScOID6tzPbppcWpuubrVmKD/HXlCEtdXW3RIIsAAAANAqMQz0fARacjhMH4Do/5xTopUXp+mpzpuKsfvrzkGRd072JfC2nrrF3PovIAwAAAO6Mcajn41fzAOBBWsUE66XxXbRg6kD1aB6uR77YqsHPLNE7KzNUWlG9Nl9qaqrGjBmjoKAgxcbGKigoSGPGjNHy5ctdXD0AAAAA1I4ZWHA6km/Afew+UqiXF6Xri42HFBXsq3Ze2frfw7fKbK9UZWWlo53FYlFVVZVmzJihyZMnu7BiAAAA4PwxDvV8BFhwOk4cgPvZc6RQj3y0Qj/uK5G9rEgF6+apYN082cuKarQzmUxatmyZ+vXr56JKAQAAgPPHONTzcQkhADQCLaKCVLToVeW8OVlF25fK2vtqJfz5bYUOukHmwFBHOy8vLz3//POuKxQAAAAAasEMLDgdyTfgfkpKShQUFCS73S5JMgeEytr9SgV3HSmTl7cKNy+Q7afPVZmfI7PZrMLCQhZ2BwAAQIPBONTzWVxdAACg7tlsNkd4JUn24jzl/fiO8ld/puAul8vaY7SCOo9Q0falsq36RDabjQALAAAAgNvgEkIny8jIcHUJAHAKq9Uqs/nUU75RViTbqk90aOZNOr7oDfk17aD4W2bqH9/u06YDefVfKAAAAADUggDLyZKTkzVixAh99tlnNe7wBQCu5O/vr1GjRsliqX3irVFZpoJ185Tz5p/VLCdVe3KLNeqV5Zr45mqtSM8VV5sDAAAAcCXWwHKy1q1ba9euXTKZTIqKitINN9ygm2++WSkpKa4urd5w7THgnlJTUzVw4MAzhlEn70LYu09fzd+arVcWp2t7lk3tE6y6bWBLXd4+VhYvfvcBAAAA98I41PMxCnGytLQ0LV68WOPHj5fNZtPTTz+tNm3a6OKLL9aHH36o8vJyV5cIoJHq37+/ZsyYIZPJdMpMLIvFIpPJpBkzZqhfv37yMps0smOcvv5Lf717c0+F+vvoLx9s0OBnl+jt5XtVXM4MUwAAAAD1hxlYdSgvL0/vvvuu3njjDW3ZskUmk0lhYWGaNGmSbr31VrVt29bVJdYJkm/AvS1fvlzPP/+85syZI7vdLrPZrKuuukpTp05Vv379Tnvc1kP5en3ZHn21OUtBvhZN7J2k6/s2U1Swbz1WDwAAAJyKcajnI8CqJz/99JNef/11ffTRRyoqKpIk9e3bV7fddpuuueYa+fp6zgCQEwfQMJSUlMhms8lqtZ7XHQcPHi/WW6kZ+nDNflXaDY3tmqBbBrRQy6igOqwWAAAAOD3GoZ6PAKsepaWl6d///rfeeOMNxzaTyaTIyEg99NBDuvPOO11YnfNw4gAah/ziCs1evU9vL8/Q0aIyXdI2RrcPaqFuSeGuLg0AAACNDONQz0eAVcdKS0v1ySef6PXXX9fy5ctlGIZiY2N100036eKLL9ZHH32k2bNnq7S0VI8++qgeeughV5d8wThxAI1LaUWV5m44pP8u26M9R4rULSlMtw1soWFtY+RlNrm6PAAAADQCjEM9HwFWHdm8ebNef/11vffee8rPz5ckDRkyRJMnT9bo0aNrLKC8b98+9e7dWxaLRQcOHHBVyU7DiQNonOx2Qwt3HtZ/f9ytNRnHlRQRoBv6NtPV3RMV5Gs5+wsAAAAAvxPjUM9HgOVkb7zxhl5//XWtXbtWhmEoIiJC119/vW6//XalpKSc9rhJkybpvffeU1VVVT1WWzc4cQDYsP+43lqeoW+2ZCnA20vjeiTq+r7NlBgecNZjf+/aXAAAAGi8GId6PgIsJzObzZKqF2ifPHmyrr766nNaoP3ZZ5/V119/rcWLF9d1iXWOEweAkzLzSvTOyn364Kf9Kiit0Ij2sbqpX3N1SwqTyVTz8sLU1FQ999xz+uKLLxx3Rxw1apTuu+++M94dEQAAAGAc6vkIsJzsrrvu0u2336727du7uhSX4cQB4LeKyyv12fpDejt1r/bkFqlTkxDd1L+5Lu8QJ28vs2bOnKk77rhDXl5eqqysdBxnsVhUVVWlGTNmaPLkyS78BAAAAHBnjEM9HwEWnI4TB4DTsdsNLf35iN5M3avU9FzFWv00MN7Qc1PGqKqk4LTHmUwmLVu2jJlYAAAAqBXjUM9HgAWn48QB4FykZRfordS9+vinvaqqqlLR1oWyrftSlUcPntLWYrFo1KhR+vTTT11QKQAAANwd41DPR4DlZBdffPE5tfPx8VFERIQ6d+6sP/3pT0pMTKzjyuoPJw4A56qkpETWqHgFdhqh4C4j5RUUppKMDSpY95VKdq+RDLujrdlsVmFhIQu7AwAA4BSMQz0fAZaTnVzE3WQy6XT/aX+7z9vbW0899ZTuueee+iixznHiAHCucnJyFBsbW/3Ey6KAVv1k7XaFfBPaqDI/RwUbvlHh5gWyl9gkSdnZ2YqJiXFhxQAAAHBHjEM9n9nVBXiavXv36u6775bFYtGECRP05ZdfauPGjdq4caPmzZun6667ThaLRXfddZdSU1P1r3/9S35+frrvvvv0/fffu7p8AKhXVqvVEfyrqlLFO5Yqe/ZflfW/e1S6f7NC+09QkymzFHH53fKNTebLCAAAANBIMQPLyT766CNNmDBB3377rS655JJa2yxYsECXX3653nnnHY0fP16LFy/W0KFDNXLkSM2bN6+eK3Y+km8A52PMmDGaN29ejbsPnmT2tyqo46UK7nq5LNZodW0aquv7NtNl7ePkY+F3MAAAAKjGONTzEWA5WY8ePRQUFKTFixefsd2QIUNUUFCgtWvXSpK6dOmizMxM5eTk1EeZdYoTB4DzkZqaqoEDB572smtJMpm99PxHC/RTnr+Wpx9VZJCvru2ZqGt7JSk2xK8eqwUAAIA7Yhzq+fj1tZPt2LFD8fHxZ20XHx+vnTt3Op6npKQoLy+vDisDAPfUv39/zZgxQyaTSRaLpcY+i8Uik8mkGa+8rLv/OETv3dJbC6YO1GXtY/VG6l71e2qR7nhvvVbuPnrGAAwAAABAw0aA5WQBAQFau3btGQdShmFo7dq1CggIcGwrLS0lJQbQaE2ePFnLli3TqFGjHGtimc1mjRo1SsuWLdPkyZMdbVNigvXE6PZa9X9D9dDIttqRbdP411dp6HNL9cayPcorLnfVxwAAAABQR7iE0MmuvfZaffTRR/rzn/+sp59+ukZIJVXfMv7vf/+7XnnlFY0fP16zZ8+WJLVt21b+/v5av369K8p2KqZuArgQJSUlstlsslqt8vf3P2t7wzC0as8xvbd6n77bli2zyaSRHeM0oVeSujYNlclkqoeqAQAA4EqMQz0fAZaT7du3Tz169NDRo0cVGhqqESNGKDExUZJ04MABfffddzp+/LiioqK0evVqJSUlaceOHWrXrp3uv/9+PfXUU06v6ZVXXtEzzzyj7OxsderUSS+99JJ69ux52vaffPKJHnroIWVkZCglJUVPPfWULr/88nN+P04cAFzlSEGZPll3QO+v3q+Dx0vUJjZYE3onaXTneAX7ebu6PAAAANQRxqGejwCrDqSnp2vy5MlatGhRrfuHDh2qmTNnKjk5WZJUVlamvLw8hYSEyM/PuYsRf/TRR5o0aZJeffVV9erVSy+88II++eQTpaWlKTo6+pT2K1as0MCBAzV9+nT94Q9/0Pvvv6+nnnpK69evV/v27c/pPTlxAHA1u93QsvRcvbdqn37YkSM/by+N6pygCb2aqn1CiKvLAwAAgJMxDvV8BFh1aPfu3Vq+fLmysrIkSXFxcerbt68juKoPvXr1Uo8ePfTyyy9Lkux2uxITE3XXXXfpgQceOKX9uHHjVFRUpK+++sqxrXfv3urcubNeffXVc3pPThwA3ElWfok+WnNAH/50QNm2UnVKDNWEnk11Rad4+ft4ubo8AAAAOAHjUM9nOXsTnI8xY8YoLi5Or7zyilq2bKmWLVu6rJby8nKtW7dO06ZNc2wzm80aNmyYVq5cWesxK1eu1L333ltj2/DhwzV37ty6LBUA6kxciL/uGdZKdw5J1qKdh/Xe6v36++eb9cTX2zW2axON79lUrWODXV0mAAAAgDMgwHKyb775RqNHj3Z1GZKk3NxcVVVVKSYmpsb2mJgY7dy5s9ZjsrOza22fnZ192vcpKytTWVmZ47nNZruAqgGgbli8zLq0XawubRer/UeL9cGa/fpk7QHNWpGhzomhGtcjUVd0ileQ75n/aTzfReYBAAAAXDizqwvwNM2bN1dRUZGry6hX06dPV0hIiONxctF6AHBXTSMC9PcRbbTigaGaOaGrQgO89Y85W9Tz//2g+z/ZpHX7jum3V9inpqZqzJgxCgoKUmxsrIKCgjRmzBgtX77cRZ8CAAAAaDwIsJxs/PjxWrp06RlnLNWXyMhIeXl5KScnp8b2nJwcxcbG1npMbGzsebWXpGnTpik/P9/xOHDgwIUXDwD1wMdi1mUd4jTrxp5K/fvFmjyopVbuOaqxM1dq2HNL9fqPe5RbWKaZM2dq4MCBmjdvnux2u6TqNQXnzZunAQMGnPMagQAAAAB+HwIsJ5s2bZoGDBigQYMGac6cOaqoqHBZLT4+PurWrZsWLlzo2Ga327Vw4UL16dOn1mP69OlTo70kLViw4LTtJcnX11dWq7XGAwAamvhQf/1laIp+vH+IZt/cSxfFh+iZ79LU6//9oEe+PyDfZl1UWWWvcUxlZaUMw9CUKVOYiQUAAADUIe5C6GQtWrSQ3W53zEIymUyKjo6Wn5/fKW1NJpN2795dp/V89NFHuv766/Xaa6+pZ8+eeuGFF/Txxx9r586diomJ0aRJk5SQkKDp06dLklasWKFBgwbpySef1MiRI/Xhhx/qX//6l9avX6/27duf03ty9wcAnuJ4UbmuuOtx7TXFyTuqmSpth1W45QcVbv5BVbbDjnYWi0WjRo3Sp59+6sJqAQAAGi/GoZ6PAMvJzObzm9R28lKUuvTyyy/rmWeeUXZ2tjp37qwXX3xRvXr1kiQNHjxYzZo106xZsxztP/nkEz344IPKyMhQSkqKnn76aV1++eXn/H6cOAB4ipKSEgUFBclut8snNkVBnS5VYNtBMvn4qTRjowq3/KCSXatkVJbLbDarsLCQhd0BAABcgHGo5yPAgtNx4gDgKWpbA9Dk7auA1v0V1PFS+SW2k720UEU7l6lo60JlrF18xjUDAQAAUDcYh3o+Aiw4HScOAJ7i1zOwamMJi1dg+4sV1P5iWazRSgr319XdE3VV1yZKCGUmFgAAQH1hHOr5WMQdAIDT8Pf316hRo2SxWGrdX3k8U/nLZivn9dvV6tB8dWsWrlcW71b/pxZpwhur9Pn6gyour6znqgEAAADPQ4BVR77//ntdddVVSkhIkK+vr26++WbHvu+++0733nuvMjMzXVghAOBc3Hvvvaqqqjpjm6qqSj0y+U967prOWvPgMD09tqOq7Ibu/XiTevzzB93/ySat2nNUdjuTngEAAIDfo/ZfKeOC3H333Xr55ZdlGIaCgoJUUVGhX1+pGRcXpxdeeEGJiYmaOnWqCysFAJxN//79NWPGDE2ZMkVeXl6qrPxlRpXFYlFVVZVmzJihfv36SZKCfC26unuiru6eqAPHivX5+kP6bP1BfbLuoJqE+Wts1yYa27WJmkYEuOojAQAAAA0OM7Cc7J133tFLL72kbt26af369bLZbKe06dixoxITEzVv3jwXVAgAOF+TJ0/WsmXLNGrUKMfdZs1ms0aNGqVly5Zp8uTJtR6XGB6gu4elaOn9g/Xx7X3Ur2Wk3kzdq4HPLNY1r67U+6v3K7+4oj4/CgAAANAgsYi7k/Xp00dpaWlKS0tTVFSUpOpBzg033KC33nrL0e6KK67Qli1blJGR4aJK6w6L5wHwZCUlJbLZbLJarfL3P/+F2kvKq/Tdtmx9tv6glqfnymI2a3DrKI3ukqCL20TLz9urDqoGAADwbIxDPR+XEDrZ1q1bNWjQIEd4dTohISHKycmpp6oAAM7i7+//u4Irx/E+XhrdJUGjuyTocEGp5m3K0hcbD2nKe+sV7GfRZe1jNbpLgno3j5DZbHJi5QAAAEDDRYBVB0ymsw84MjMzL2gABABo+KKD/XRz/+a6uX9z7T5SqC82HNLcjZn6eO1BxVr9NKpzvEZ1TlDbuOBz+rcFAAAA8FQEWE6WkpKi9evXq6KiQt7e3rW2KSgo0MaNG9WuXbt6rg4A4K5aRgXp3ktba+olrbR+f56+2HhIH689oNd+3KPWMcEa1aU6zEoI5ZcfAAAAaHxYxN3Jrr76amVlZemBBx44bZtp06YpPz9ff/rTn+qxMgBAQ2AymdQtKUyPj2qvn/4xTG9e312tYoP14sJd6vfkIl3zWvXi73nF5ef1uiUlJcrJyVFJSUkdVQ4AAADUHRZxd7KSkhL17t1bW7duVc+ePTVq1Cj93//9nwYMGKDRo0drzpw5Sk1NVdeuXbVixQr5+Pi4umSnY/E8AHC+wrJKfbc1W3M3HtLy9FyZTSYNSInUFZ3idclFMQr2q33Wb2pqqp577jl98cUXstvtjrsn3nffferXr189fwoAAIC6wTjU8xFg1YEjR47ohhtu0LfffiuTyaTf/ie+5JJLNHv27LMu9N5QceIAgLp1uKBU327J1rxNmVq777h8LGZd3DpaV3SK18VtouXvU30nw5kzZ+qOO+6Ql5eXKisrHcdbLBZVVVVpxowZmjx5sqs+BgAAgNMwDvV8BFh1aNOmTfr++++VkZEhu92uJk2a6JJLLlHPnj1dXVqd4sQBAPUnM69EX2/O0rzNmdp8MF8BPl4a1jZGLb3zNHX8cBmVFac91mQyadmyZczEAgAADR7jUM9HgAWn48QBAK6RkVukrzZn6qvNWdqZXSB7aZGKd61Q0Y5lKt23SbJX1WhvsVg0atQoffrppy6qGAAAwDkYh3o+Aiw4HScOAHCtkpIShSa1lX/r/gpsO1De4QmqKs5XcdpyFe1YprKD2yTDLkkym80qLCyUvz93NwQAAA0X41DPZ3F1AZ5q7969WrZsmbKyslRWVlZrG5PJpIceeqieKwMAeDqbzabyI/tUfmSf8lPfk09MSwW0GaDAtgMV3OVyVRYeU8nPK1SUtlxlB7bJZrMRYAEAAMCtMQPLycrLy3XLLbfovffek6RTFnD/NZPJpKqqqtPub6hIvgHAtUpKShQUFCS73X7KPp/4Ngps3U8BrfvJEhKtqqI8jR9wka7o0kS9W0TI28vsgooBAAAuDONQz8cMLCd7+OGHNXv2bIWGhuq6665Tq1atFBwc7OqyAACNiL+/v0aNGqV58+bVuPugJJVn7lR55k4dX/ym/BPaqMPI67UyI04fr89UaIC3Lr0oRpd1iFO/lpHysRBmAQAAwD0wA8vJmjZtqsLCQm3YsEFJSUmuLsclSL4BwPVSU1M1cODAs84EXrZsmfr27attmTZ9syVL32zJUsbRYln9LLrkolhd3iFW/VMi5WvxqsfqAQAAzg/jUM9HgOVkfn5+Gj58uL744gtXl+IynDgAwD28+uqrmjJliry8vGrMxLJYLKqqqtKMGTM0efLkGscYhqGd2QX6dkuWvt6Spd1HihTka9GwttG6rEOcBrWKkp83YRYAAHAvjEM9H5cQOlljnXUFAHA/kydPVocOHfT8889rzpw5stvtMpvNGjVqlKZOnap+/fqdcozJZFLbOKvaxll176Wt9XNOgb7ZkqVvt2Rr7sZMBfh46eI20RrRPlaDW0cryJevEgAAAKh7zMBysqeeekr/+te/lJ6erqioKFeX4xIk3wDgfkpKSmSz2WS1Wn/3HQfTDxdq/tYsfbMlW9uzbPLxMqtfcoSGt4vV0LYxigr2dXLVAAAA54ZxqOcjwHIyu92ua6+9Vlu3btVLL72kwYMHy2QyubqsesWJAwA834Fjxfp+e46+25attRnHZEjqnhSmSy+K1fB2sWoaEeDqEgEAQCPCONTzEWA5WYsWLSRJ+/btkyR5e3srNjZWZvOpd3IymUzavXt3vdZXHzhxAEDjcrSwTAt3HNb327P1465clVfa1SY2WJe2i9WlF8WoXby10f0yBwAA1C/GoZ6PAMvJaguqzsRut9dRJa7DiQMAGq+iskr9+PMRfb89Rwt35MhWWqmEUH9d2i5Gl14Uqx7NwmTxOr9/KwEAAM6GcajnI8CC03HiAABIUkWVXav3HNN327L1/fZs5djKFBbgraFtYzS8Xaz6J0fK34c7GgIAgAvHONTzEWDB6ThxAAB+y243tPlQvr7flq3vtmVr95Ei+Xmb1a9lpIa2jdHQttGKsfqd12s6Y2F6AADgGRiHej4CLDgdJw4AwNnsPlKohTty9MOOw1qbcUx2Q+qQEKKhbaM1rO2Z181KTU3Vc889py+++EJ2u11ms1mjRo3Sfffdp379+tXzJwEAAO6AcajnI8C6QDfddJP69++vm2666ZR9X375pZo2barOnTufsu+RRx7RV199pXXr1tVDlfWLEwcA4HzkFZdrSdoR/bAjR0t/PqKC0krFWv10cdtoDWsbrb4tI+XnXX2p4cyZM3XHHXfIy8tLlZWVjtewWCyqqqrSjBkzNHnyZFd9FAAA4CKMQz0fAdYFMpvNuuGGG/TWW2+d174bb7xR77zzjqqqquqjzHrFiQMA8HtVVNm1Zu8x/bDjsBbuzNG+o8Xy9/ZSv+RIJXnb9Njtf1RV4fHTHm8ymbRs2TJmYgEA0MgwDvV83AbIQ2VkZOjmm29W8+bN5e/vr5YtW+qRRx5ReXn5GY8bPHiwTCZTjQe/yQYA1BdvL7P6Jkfq4Ssu0pK/DtYP9w7U3cNSlF9Srjc3FanJHe8qduJzCun7J3lHNz/leC8vLz3//PMuqBwAAAB1yeLqAlA3du7cKbvdrtdee03JycnaunWrbr31VhUVFenZZ58947G33nqrHn/8ccfzgICAui4XAIBTmEwmJUcHKzk6WNf3jJc1Kk6+zbrKP7mnrD3HKHTAdaosyFXJnnUq2bNWpRkbVVleojlz5qikpISF3QEAADwIAZaHGjFihEaMGOF43qJFC6WlpWnmzJlnDbACAgIUGxtb1yUCAHDObDabKovyVbltsYq2LZbMFvkltpN/i+7yb9ldwZ2Gy6iqVNnB7SrZs1Yb9+So90VJp10IHgAAAA0LAVYjkp+fr/Dw8LO2e++99zR79mzFxsbqiiuu0EMPPcQsLACAS1mtVpnNZtnt9uoN9kqV7tuk0n2bdHzxm7KExMivRTf5t+iukP4TNP7dbYoP2a3BbaI1uFWU+iVHKtCXrz0AAAANFd/kGon09HS99NJLZ519de211yopKUnx8fHavHmz/v73vystLU2ff/75aY8pKytTWVmZ47nNZnNa3QAASJK/v79GjRqlefPm1bj74EmV+Tkq3PCNSrd8rytGj9Hd/+9lLUk7rCVpR/T+6v3y8TKrZ/NwDW4dpcGto9UyKpDZWQAAAA0IAVYD88ADD+ipp546Y5sdO3aoTZs2jueHDh3SiBEjdPXVV+vWW28947G33Xab4+8dOnRQXFychg4dqt27d6tly5a1HjN9+nQ99thj5/EpAAA4f/fee6/mzp17xjZVVVW6756/qF+rKA1qFaVHrpAycou0JO2wFqcd0TPfpemfX+9QYri/BreK1pA2UerTIlL+Pl718yEAAADwu5gMwzBcXURDZjabL+g3uFVVVefV/siRIzp69OgZ27Ro0UI+Pj6SpMzMTA0ePFi9e/fWrFmzZDaf340ni4qKFBQUpPnz52v48OG1tqltBlZiYiK3LwUAON2rr76qKVOmyMvLq8ZMLIvFoqqqKs2YMeOMd88tKa/Sqj1HtTjtsBanHdaBYyXysZjVq3m4BrWK0oCUKLWKCWJ2FgAADYzNZlNISAjjUA9GgHWBzjcQ+jWTyXTeAdb5OHTokIYMGaJu3bpp9uzZ8vI6/98uL1++XP3799emTZvUsWPHczqGEwcAoC4tX75czz//vObMmSO73S6z2ayrrrpKU6dOVb9+/c75dQzD0J7cIi1JO6IlaYf1095jKqu0K8bqqwEpURqQEqn+yZGKCPKtw08DAACcgXGo5yPA8lCHDh3S4MGDlZSUpP/97381wquTdxg8dOiQhg4dqnfeeUc9e/bU7t279f777+vyyy9XRESENm/erKlTp6pJkyZaunTpOb83Jw4AQH0oKSmRzWaT1WqVv7//Bb9eaUWV1mQc07Jdufrx5yPamV0gSWqfYNWAlCgNTIlSt6Qw+Vh+/y+vAABA3WAc6vlYA8tDLViwQOnp6UpPT1eTJk1q7DuZWVZUVCgtLU3FxcWSJB8fH/3www964YUXVFRUpMTERI0dO1YPPvhgvdcPAMDZ+Pv7OyW4OsnP2+vEzKso/d/lbXXYVqplu3K1bNcRfbzmgGYu2a0AHy/1bhGhASmRGpASxWLwAAAA9YQZWHA6km8AgKex2w1tz7I5Aq21GcdVXmVXQqi/I8zqlxyh0AAfV5cKAECjxDjU8xFgwek4cQAAPF1xeaVW7zmmH3cd0bJduUo/XCiTSerYJFQDkiPVNzlCXZuGyc+buxsCAFAfGId6PgIsOB0nDgBAY3Mor0Spu47ox59ztWJ3ro4XV8jXYlaPZuHqmxyhfi0j1T4hRF5mLjcEAKAuMA71fARYcDpOHACAxsxuN7Qj26YV6Ue1fHeuftp7TMXlVbL6WdSnZYT6JUeqb8tI1s8CAMCJGId6PgIsOB0nDgAAflFeademg3lanp6rFelHteHAcVVUGYqx+qpfy0j1TY5Uv+QIxYU4b0F6AAAaG8ahno8AC07HiQMAgNMrKqvUTxnHtCI9V8vTj2p7lk2S1CIyUH2TI9Q/OVK9W7AgPAAA54NxqOcjwILTceIAAODcHSsq18rd1ZcbrkjPVcbRYplMUvv4EPVpGaHeLcLVvVm4rH7eri4VAAC3xTjU8xFgwek4cQAA8Psdyis5cblhrlbtOaZsW6nMJql9Qoh6tyDQAgCgNoxDPR8BFpyOEwcAAM5hGIb2HyvWyt1HtWrP0RqBVgdHoBWh7s3CFEygBQBoxBiHej4CLDgdJw4AAOqGYRjad7T4RJh1VCv3HFWOrYxACwDQ6DEO9XwEWHA6ThwAANQPAi0AAKoxDvV8BFhwOk4cAAC4hmEYyvhVoLXqV4HWRfFW9WgWrp7NwtWjebgig3xdXS4AAE7DONTzEWDB6ThxAADgHk4GWqv3HNVPGce0JuOYDhwrkSS1iAqsDrOahatn83A1CfOXyWRyccUAAPw+jEM9HwEWnI4TBwAA7isrv0Q/7a0Os9bsPa60nAJJUlyIn3qcmJ3Vs1m4UqKDZDYTaAEAGgbGoZ6PAAtOx4kDAICG43hRudbuO641Gcf0095j2nooX5V2Q6EB3uqeFK6ezcPUo1m42ieEyNvL7OpyAQCoFeNQz0eABafjxAEAQMNVXF6pjfvztPrELK31+4+rtMIuf28vdWkaqp4nZmh1bhqqAB+Lq8sFAEAS49DGgAALTseJAwAAz1FRZdfWQ/m/XHaYcVz5JRXyMpvUNi5Y3ZPC1TUpTN2SwpQQ6u/qcgEAjRTjUM9HgAWn48QBAIDnstsN7TpcqHX7jmvdvuNav/+49uYWSapeR6trUpi6Na0OtC6Kt3LZIQCgXjAO9XwEWHA6ThwAADQuuYVlWr/vuNbtP651Gce1+VC+yivt8vM2q1OTUHVLClP3ZmHq2jRMoQE+ri4XAOCBGId6PgIsOB0nDgAAGreyyipty7Rp/b7jWptxXGv3HVduYZkkqWVUoLonhatbUpi6JoWpZVSgTCbudggAuDCMQz0fARacjhMHAAD4NcMwdPB4idbuO3bi0sM87cy2yTCk0ABvdWtaHWZ1TgxVxyYhCvbzdnXJAIAGhnGo5yPAgtNx4gAAAGdTUFqhjQfyHGtpbdyfp4KySplMUkp0kLokhqlz01B1aRqqlOhgeZmZpQUAOD3GoZ6PAAtOx4kDAACcL7vd0J7cQq3fn6eNB/K0YX+e0rJtshtSoI+XOjYJrQ60Eqv/jA72c3XJAAA3wjjU8xFgwek4cQAAAGcoKqvUlkP5JwKt49qwP0+HC6rX0koI9XcEWl2ahqpdfIj8vL1cXDEAwFUYh3o+Aiw4HScOAABQFwzDUFZ+qSPQ2nggT5sP5qus0i5vL5PaxlnV+USg1TkxTM0iAlggHgAaCcahno8AC07HiQMAANSXiiq70rILqmdoHcjTxv152pNbJEkKC/BWxyah6tQkRB2bVC8QH23l0kMA8ESMQz0fARacjhMHAABwpbzicsc6WpsPVs/SOlpULkmKtfqpY5MQdTpxx8OOCaEKCeCuhwDQ0DEO9XwEWHA6ThwAAMCdGIahQ3kl2nIwX5sO5mvzwTxtOZivgrJKSVJSRECNmVrtE6wK8LG4uGoAwPlgHOr5+JcZAAAAHs1kMqlJWICahAXosg5xkqrvephxtEibD+Zr04lZWgu2Z6u0wi6zSUqODqoRarWJC5avhUXiAQBwFWZgwelIvgEAQENUWWXXrsOF2nwwzzFTa2dWgSrthmOR+A4JIerUJFQdmoQoOTpI3l5mV5cNABDj0MaAAAtOx4kDAAB4itKKKu3MLqgOtQ5Uh1rpRwplGJKPxay2cVa1j7eqfUKI2seHqFVsEDO1AMAFGId6PgIsOB0nDgAA4MkKyyq1I8umrYfyteVQvrYdsmnX4QLZDcnby6RWMcFqHx+i9glWtUsIUdtYq/x9CLUAoC4xDvV8rIHlwZo1a6Z9+/bV2DZ9+nQ98MADpz2mtLRU9913nz788EOVlZVp+PDhmjFjhmJiYuq6XAAAgAYhyNeiHs3C1aNZuGNbSXmVdmZXh1pbD9m0NTNfn284qIoqQ15mk5KjgtQuwXoi2ArRRfFWBfnyVRwAgHPFDCwP1qxZM91888269dZbHduCg4MVGBh42mP+/Oc/6+uvv9asWbMUEhKiO++8U2azWcuXLz/n9yX5BgAAkMoqq/RzdqG2Zp6cqZWvHdkFKq+0y2SSmkcGOmZqtU8IUbv4EIX4e7u6bABokBiHej5+7ePhgoODFRsbe05t8/Pz9eabb+r999/XxRdfLEl6++231bZtW61atUq9e/euy1IBAAA8iq/FSx2ahKhDkxCNP7Gtosqu9MOFjkBra6ZNC7bnqKSiSpKUGO6vi+KsuiguRG3jgnVRvFUJof4ymUyu+yAAALgBZmB5sGbNmqm0tFQVFRVq2rSprr32Wk2dOlUWS+255aJFizR06FAdP35coaGhju1JSUm65557NHXq1FqPKysrU1lZmeO5zWZTYmIiyTcAAMA5qLIb2nOkOtTanmnTjmybtmXalFdcIUmy+ll0UXx1qHVRvFVt44KVEh0sHwt3QASAk5iB5fmYgeXB/vKXv6hr164KDw/XihUrNG3aNGVlZem5556rtX12drZ8fHxqhFeSFBMTo+zs7NO+z/Tp0/XYY485s3QAAIBGw8tsUkpMsFJigjWma/U2wzCUbSutDrSybNqeZdOinTl6a/leSdWLxSdHB1fP1oq3npi1ZVVIAJcgAgA8EwFWA/PAAw/oqaeeOmObHTt2qE2bNrr33nsd2zp27CgfHx/dfvvtmj59unx9fZ1W07Rp02q818kZWAAAAPh9TCaT4kL8FRfir6Ftf7mZTmFZpdKybdqeWR1qbc+06avNmSqrtEuSEkL91fY3oVZiOJcgAgAaPgKsBua+++7TDTfccMY2LVq0qHV7r169VFlZqYyMDLVu3fqU/bGxsSovL1deXl6NWVg5OTlnXEfL19fXqYEYAAAAahfka1G3pHB1S/rlDoiVVXZlHC3SthOh1o6sAr2/ep9yC8slScG+Fkeo1SY2WK1jg9UqJliB3AURANCA8K9WAxMVFaWoqKjfdezGjRtlNpsVHR1d6/5u3brJ29tbCxcu1NixYyVJaWlp2r9/v/r06fO7awYAAEDdsXiZlRwdrOToYI3qnODYfrjg5CWIBdqeZdOyXUf0zsoM2U+sgJsUEaDWMcFqExusNnFWtY4NVrOIQHmZma0FAHA/BFgeauXKlVq9erWGDBmi4OBgrVy5UlOnTtV1112nsLAwSdKhQ4c0dOhQvfPOO+rZs6dCQkJ08803695771V4eLisVqvuuusu9enThzsQAgAANDDRwX6Kbu2nwa1/+eVlaUWV0g8Xamd2gXZm2ZSWU6D3fzqg3MLqG/L4WsxqFVM9S6tNbLDaxFrVJi5YkUHMtgcAuBYBlofy9fXVhx9+qEcffVRlZWVq3ry5pk6dWmOtqoqKCqWlpam4uNix7fnnn5fZbNbYsWNVVlam4cOHa8aMGa74CAAAAHAyP28vtU8IUfuEkBrbjxaWKS27QDuyC5SWbVNadoG+2pyp0orqtbUig3xOhFpWR7jVKiZYft5ervgYAIBGyGQYhuHqIuBZuH0pAABAw1dlN7T/WLF2Ztm0M7tAadkF2plt075jxTIMyWySmkUEqk1csFrHWE+srRWkJC5DBOACjEM9HwEWnI4TBwAAgOcqLq/UzzmFSsu2nbgUsTrYOl5cIUnysZjVMipIrWKC1ComWCnRQWodG6zEsACZCbYA1BHGoZ6PSwgBAAAAnLMAH4s6J4aqc2KoY5thGDpSWKZdOYX6OadAP+cUaldOgRbvPCxbaaUkyc/brOToILWKDlZKTLAj4EoI9SfYAgCcFQEWAAAAgAtiMpmqF40P9lO/5EjHdsMwlGMrOxFqFVQHXIcL9P32HBWWVQdbAT5eSo4OUkr0L6FWSkyQEkL9ZTIRbAEAqhFgAQAAAKgTJpNJsSF+ig3x08BWUY7thmEoK7/0l1Arp0A/Hy7Ut1uzVFxeJUkK9PFSckywWkX/Emq1iglWXIgfwRYANEIEWAAAAADqlclkUnyov+JD/TW4dbRju91u6FBeiXYdrr4M8eecAu3MLtC8X90RMcjXopZRgWoZHaTk6CAlRwWpZXSQksIDZPEyu+ojAQDqGAEWAAAAALdgNpuUGB6gxPAAXdwmxrHdbjd08HiJfs4pUPqRQqUfrn4s2JajghOXInp7mdQsIrA61DrxaBlV/fD38XLVRwIAOAkBFgAAAAC3Zjab1DQiQE0jAjRMvwRbhmHocEGZdh8urBFsfbTmgA4XlDnaJYT61wi2Ts7cCgv0ccXHAQD8DibDMAxXFwHPwu1LAQAA4Gr5JRXaczLUOlJYHXIdLtT+Y8WynxgBhQf6OC5B/HW4FWf1486IQAPDONTzMQMLAAAAgMcJ8fdWl6Zh6tI0rMb20ooq7Tta7JitlX6kUBsP5Onz9QdVVlm9zpa/t5eaRwaqeVSgWkYGqkVUkJpHBqpFVKCC/bxd8XEAoNEjwAIAAADQaPh5e6l1bLBaxwbX2F5lN5SZV6L0w4XafaRQu48UaW9uodbsPVbjcsSoYF+1OBFmtYgMUouoQDWPDFRieIC8WUQeAOoMlxDC6Zi6CQAAAE9SUFqhvblF2ptbpN1HirTnSKHjeXF5lSTJYjapaXhAdbB1csbWidlbkUE+Mpm4JBGoS4xDPR8zsAAAAADgDIL9vNWxSag6Ngmtsd0wDGXbSrX3SJF25/4SbM3fmq2Dx39ZayvYz+IIs5r/avZW88hA7pAIAOeIAAsAAAAAfgeTyaS4EH/Fhfirb3JkjX1llVXaf7S4esZWbqH2HKmesbUk7bCOF1c42sWH+KlZZKCSIgLVPDLgxJ+BahoeID9vwi0AOIkACwAAAACczNfipZSYYKXEBJ+y73hRufb8asZWxtEibTqQpy82HnJckmgySXHW6nCrWWSgmkUEqFnEL+ttEW4BaGwIsAAAAACgHoUF+qhboI+6JdW8Q6JhGDpSUKaMo8XKOBFsZRwt0ob9eZq7oWa4FR/ir6SIADWLDFTziEAlRQQQbgHwaARYAAAAAOAGTCaToq1+irb6qWfz8Br7fhtu7T1apH1nCLeaRVbP2GoW8csMLsItAA0ZARYAAAAAuLlzCbf2OmZtVYdc6/fn6fP1h1RSUfOyxMTwACVFVK+3lRgeoKTwADUND1BogDd3SwTgtgiwAAAAAKAB+3W41atFRI19hmHocEGZ45LE/ceKte9osdKyC/T99hzl/WpB+WA/i5IiqsOspuGBv/p7gOJC/GTxMtf3RwMABwIsAAAAAPBQJpNJMVY/xdQSbklSfkmFDpwItfYdK3L8fdOBTGXll8huVLezmE1qEuavphGBahrur6TwQDX9VcAV6MvQEkDd4iwDAAAAAI1UiL+3QhJC1D4h5JR95ZV2Hcor0b6jvwRb+48Va23GcX227pdLEyUpMshHTcN/c1liRPWfkUG+Mpu5NBHAhSHAAgAAAACcwsdiVvPIQDWPDDxln2EYyi0s1/5jRY5ga//RYu07VqzU9FwdKShztPW1mJUQ5q/EsAAlhvurSViA4++JYay9BeDcEGABAAAAAM6LyWRSVLCvooJ91S0p/JT9xeWVOnCsevbWweMlOnC8WAePl2htxnHN3ZCpwrJKR9sgX4uahFUHW03C/JUYHqDEE382CfNXsJ93fX40AG6KAAsAAAAA4FQBPha1jg1W69jgU/YZhnFi7a3qYOvAsWJHyLVs1xEdPF6iskq7o31ogPdvZm/5q8mJkKtJWID8vL3q86MBcBECLAAAAABAvTGZTAoN8FFogI86NDl17S3DMHSksEwHjpXo4ImZWydDru8ys3XoeIkqT64uLykq2NcRZp28LDExPEAJof6KC/WTr4WAC/AEBFgAAAAAALdhMpkUHeyn6GA/dUsKO2V/ld1Qjq1UB44V68Cvwq0Dx4u1NuOYsmylMn7JtxQd7Kv4UH8lhPmryYk/E078GR/qLyuXKAINAgEWAAAAAKDB8DKbFB9aHT71qmV/eaVdWfklOnS8RAfzqv88dOLPrYfylZlXooqqXxKuYD+LEkL91eREsBX/m5ArKsiXReYBN0CABQAAAADwGD4Ws5IiApUUcerdEyXJbq++RPHgr4KtzLzqv6/ac0yH8kpqLDLvYzGfCLb8qkOt0ABHwNUkzF+xIX7y9jLX18cDGi0CLAAAAABAo2E2mxRj9VOMtfZLFA3DkK2kUgfzimuEW4fySpSWXaBFOw8rt7Dc0d5kkmKC/RyhVvyJsCs+pHoNrvgQf4UGeDOLC7hABFgAAAAAAJxgMpkUEuCtkIAQtYs/dZF5SSqtqPol2PrVTK6DeSVav/+4cmylNS5T9PM2OwKtuBB/xYf4Ke5k2HXi70G+DM+BM+EnBAAAAACA8+Dn7aUWUUFqERVU63673VBuYZky80uVlVeizPxSZeaVKCu/ROmHC7Vs1xEdLiirsdh8sJ/lNCFX9Syu2BA/+XlzR0U0XgRYHmrJkiUaMmRIrft++ukn9ejRo9Z9gwcP1tKlS2tsu/322/Xqq686vUYAAAAA8ERms0nRVj9FW/3UOTG01jYVVXbl2EqV5Qi3qv/MzCvV5oN5+m5bqY4Vldc4JiLQ55SAKy6kem2uuFB/xQT7ysJ6XPBQJsP4deYLT1FeXq5jx47V2PbQQw9p4cKF2r1792mvvx48eLBatWqlxx9/3LEtICBAVqv1nN/bZrMpJCRE+fn553UcAAAAAOAXpRVVyvrVLK7fzubKyitVwa8WnDebpOhgP8WG+CnWWv1nXMgvz+NC/BVt9fXImVyMQz0fM7A8lI+Pj2JjYx3PKyoq9MUXX+iuu+466+KBAQEBNY4FAAAAANQ/P28vNY8MVPPI2u+oKEkFpRU1ZnFl5ZUo+8TMruXpucrOrxlySVJ4oM+JQMtPMSF+inOEXf6KDfFVbAhrcsH98H9kI/Hll1/q6NGjuvHGG8/a9r333tPs2bMVGxurK664Qg899JACAgLqoUoAAAAAwPkI9vNWsJ+3WsUEn7ZNYVmlsvNLlZ1fqqz8Eseli9n5pdp0IE/f5Zfq6G8uVwz2tVSHWyF+uqFvMw1tG1PXHwU4IwKsRuLNN9/U8OHD1aRJkzO2u/baa5WUlKT4+Hht3rxZf//735WWlqbPP//8tMeUlZWprKzM8dxmszmtbgAAAADAhQnytSg5OkjJ0bUvOi9VX6542FZ2YvZWyYmwq1Q5tlKZz3IVD1AfWAOrgXnggQf01FNPnbHNjh071KZNG8fzgwcPKikpSR9//LHGjh17Xu+3aNEiDR06VOnp6WrZsmWtbR599FE99thjp2zn2mMAAAAAQH1gDSzPR4DVwBw5ckRHjx49Y5sWLVrIx8fH8fyJJ57QSy+9pEOHDsnb2/u83q+oqEhBQUGaP3++hg8fXmub2mZgJSYmcuIAAAAAANQLAizPxyWEDUxUVJSioqLOub1hGHr77bc1adKk8w6vJGnjxo2SpLi4uNO28fX1la+v73m/NgAAAAAAwLkwu7oA1K1FixZp7969uuWWW07Zd+jQIbVp00Y//fSTJGn37t164okntG7dOmVkZOjLL7/UpEmTNHDgQHXs2LG+SwcAAAAAAJDEDCyP9+abb6pv37411sQ6qaKiQmlpaSouLpYk+fj46IcfftALL7ygoqIiJSYmauzYsXrwwQfru2wAAAAAAAAH1sCC03HtMQAAAACgPjEO9XxcQggAAAAAAAC3RoAFAAAAAAAAt0aABQAAAAAAALdGgAUAAAAAAAC3RoAFAAAAAAAAt0aABQAAAAAAALdmcXUB8DyGYUiqvo0pAAAAAAB17eT48+R4FJ6HAAtOV1BQIElKTEx0cSUAAAAAgMakoKBAISEhri4DdcBkEE/Cyex2uzIzMxUcHCyTyeTqck7LZrMpMTFRBw4ckNVqdXU5+B3ow4aPPmz46MOGjz5s+OjDho8+bPjoQ9czDEMFBQWKj4+X2cxqSZ6IGVhwOrPZrCZNmri6jHNmtVr5R6aBow8bPvqw4aMPGz76sOGjDxs++rDhow9di5lXno1YEgAAAAAAAG6NAAsAAAAAAABujQALjZavr68eeeQR+fr6uroU/E70YcNHHzZ89GHDRx82fPRhw0cfNnz0IVD3WMQdAAAAAAAAbo0ZWAAAAAAAAHBrBFgAAAAAAABwawRYAAAAAAAAcGsEWAAAAAAAAHBrBFhosJ588kmZTCbdc889jm2lpaW64447FBERoaCgII0dO1Y5OTk1jtu/f79GjhypgIAARUdH6/7771dlZWWNNkuWLFHXrl3l6+ur5ORkzZo165T3f+WVV9SsWTP5+fmpV69e+umnn+riY3q03/bhsWPHdNddd6l169by9/dX06ZN9Ze//EX5+fk1jqMP3UdtP4cnGYahyy67TCaTSXPnzq2xjz50H6frw5UrV+riiy9WYGCgrFarBg4cqJKSEsf+Y8eOacKECbJarQoNDdXNN9+swsLCGq+xefNmDRgwQH5+fkpMTNTTTz99yvt/8sknatOmjfz8/NShQwd98803dfI5PVltfZidna2JEycqNjZWgYGB6tq1qz777LMax9GHrvPoo4/KZDLVeLRp08axn+8z7u9Mfcj3mYbhbD+HJ/F9BnAjBtAA/fTTT0azZs2Mjh07Gnfffbdj++TJk43ExERj4cKFxtq1a43evXsbffv2deyvrKw02rdvbwwbNszYsGGD8c033xiRkZHGtGnTHG327NljBAQEGPfee6+xfft246WXXjK8vLyM+fPnO9p8+OGHho+Pj/HWW28Z27ZtM2699VYjNDTUyMnJqZfP7wlq68MtW7YYY8aMMb788ksjPT3dWLhwoZGSkmKMHTvWcRx96D5O93N40nPPPWdcdtllhiRjzpw5ju30ofs4XR+uWLHCsFqtxvTp042tW7caO3fuND766COjtLTU0WbEiBFGp06djFWrVhnLli0zkpOTjfHjxzv25+fnGzExMcaECROMrVu3Gh988IHh7+9vvPbaa442y5cvN7y8vIynn37a2L59u/Hggw8a3t7expYtW+rl83uC0/XhJZdcYvTo0cNYvXq1sXv3buOJJ54wzGazsX79ekcb+tB1HnnkEaNdu3ZGVlaW43HkyBHHfr7PuL8z9SHfZxqGs/0cnsT3GcB9EGChwSkoKDBSUlKMBQsWGIMGDXJ8Yc/LyzO8vb2NTz75xNF2x44dhiRj5cqVhmEYxjfffGOYzWYjOzvb0WbmzJmG1Wo1ysrKDMMwjL/97W9Gu3btarznuHHjjOHDhzue9+zZ07jjjjscz6uqqoz4+Hhj+vTpTv+8nuh0fVibjz/+2PDx8TEqKioMw6AP3cXZ+nDDhg1GQkKCkZWVdcoXPvrQPZypD3v16mU8+OCDpz12+/bthiRjzZo1jm3ffvutYTKZjEOHDhmGYRgzZswwwsLCHH1qGIbx97//3WjdurXj+TXXXGOMHDmyxmv36tXLuP322y/04zUKZ+rDwMBA45133qnRPjw83Hj99dcNw6APXe2RRx4xOnXqVOs+vs80DGfqw9rwfcb9nEsf8n0GcC9cQogG54477tDIkSM1bNiwGtvXrVunioqKGtvbtGmjpk2bauXKlZKqL4np0KGDYmJiHG2GDx8um82mbdu2Odr89rWHDx/ueI3y8nKtW7euRhuz2axhw4Y52uDMTteHtcnPz5fVapXFYpFEH7qLM/VhcXGxrr32Wr3yyiuKjY09ZT996B5O14eHDx/W6tWrFR0drb59+yomJkaDBg1Samqqo83KlSsVGhqq7t27O7YNGzZMZrNZq1evdrQZOHCgfHx8HG2GDx+utLQ0HT9+3NHmTP2MMzvTz2Hfvn310Ucf6dixY7Lb7frwww9VWlqqwYMHS6IP3cGuXbsUHx+vFi1aaMKECdq/f78kvs80JKfrw9rwfcY9nakP+T4DuB+LqwsAzseHH36o9evXa82aNafsy87Olo+Pj0JDQ2tsj4mJUXZ2tqPNr/+RObn/5L4ztbHZbCopKdHx48dVVVVVa5udO3de0OdrDM7Uh7+Vm5urJ554QrfddptjG33oemfrw6lTp6pv374aNWpUrfvpQ9c7Ux/u2bNHUvXaIM8++6w6d+6sd955R0OHDtXWrVuVkpKi7OxsRUdH1zjOYrEoPDy8Rh82b968Rptf93NYWNhp+/nka+D0zvZz+PHHH2vcuHGKiIiQxWJRQECA5syZo+TkZEmiD12sV69emjVrllq3bq2srCw99thjGjBggLZu3cr3mQbiTH0YHBxcoy3fZ9zT2fqQ7zOA+yHAQoNx4MAB3X333VqwYIH8/PxcXQ5+h/PpQ5vNppEjR+qiiy7So48+Wj8F4qzO1odffvmlFi1apA0bNrigOpyLs/Wh3W6XJN1+++268cYbJUldunTRwoUL9dZbb2n69On1Wi9OdS7n0oceekh5eXn64YcfFBkZqblz5+qaa67RsmXL1KFDh3quGL912WWXOf7esWNH9erVS0lJSfr444/l7+/vwspwrs7UhzfffLNjH99n3NeZ+jAqKorvM4Ab4hJCNBjr1q3T4cOH1bVrV1ksFlksFi1dulQvvviiLBaLYmJiVF5erry8vBrH5eTkOKb9xsbGnnIXn5PPz9bGarXK399fkZGR8vLyqrVNbdOL8Yuz9WFVVZUkqaCgQCNGjFBwcLDmzJkjb29vx2vQh651tj5csGCBdu/erdDQUMd+SRo7dqzj0iX60LXO5VwqSRdddFGN49q2beu4tCI2NlaHDx+usb+yslLHjh1zyvmWPjyzs/Xh7t279fLLL+utt97S0KFD1alTJz3yyCPq3r27XnnlFUn0obsJDQ1Vq1atlJ6ertjYWL7PNEC/7sOT+D7TsPy6DxctWsT3GcANEWChwRg6dKi2bNmijRs3Oh7du3fXhAkTHH/39vbWwoULHcekpaVp//796tOnjySpT58+2rJlS40v7QsWLJDVanUM1vr06VPjNU62OfkaPj4+6tatW402drtdCxcudLRB7c7Wh15eXrLZbLr00kvl4+OjL7/88pTZBfSha52tD//xj39o8+bNNfZL0vPPP6+3335bEn3oamfrwxYtWig+Pl5paWk1jvv555+VlJQkqbp/8vLytG7dOsf+RYsWyW63q1evXo42P/74oyoqKhxtFixYoNatWyssLMzR5kz9jNqdrQ+Li4slVa+j8mteXl6OGXb0oXspLCzU7t27FRcXp27duvF9pgH6dR9K4vtMA/TrPnzggQf4PgO4I1evIg9ciN/edWny5MlG06ZNjUWLFhlr1641+vTpY/Tp08ex/+Ttbi+99FJj48aNxvz5842oqKhab3d7//33Gzt27DBeeeWVWm936+vra8yaNcvYvn27cdtttxmhoaE17kKCc/PrPszPzzd69epldOjQwUhPT69xW+PKykrDMOhDd3S2O0nqNLedpg/dx2/78PnnnzesVqvxySefGLt27TIefPBBw8/Pz0hPT3e0GTFihNGlSxdj9erVRmpqqpGSkmKMHz/esT8vL8+IiYkxJk6caGzdutX48MMPjYCAAOO1115ztFm+fLlhsViMZ5991tixY4fxyCOPGN7e3saWLVvq5XN7kl/3YXl5uZGcnGwMGDDAWL16tZGenm48++yzhslkMr7++mvHMfSh69x3333GkiVLjL179xrLly83hg0bZkRGRhqHDx82DIPvMw3BmfqQ7zMNw9l+Dn+L7zOA6xFgoUH77aCrpKTEmDJl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bDu5IPnrr7+u119//YzveezYMSUkJOjJJ5/Uzp07a+xr06aNHnjgAUlSZmamJJ12MfWT2w8dOnTG95Okv/71r8rNza2xrX///rrlllvOeuz5OHr0qMrLyxUVFSU/P79a2zRt2lTHjh2rdd+vZ2z9WnBwsKSa/80BAADOhAALAAB4jLMtqH6uC67b7XZJUufOndWpU6cztvX19ZUkzZ8/v8ZliJI0aNAgR4B1Nr9eQP5sPv30U+3bt++U7c4OsC7U+SxwDwAAcCYEWAAAAL9xcuZQ//799dJLL53TMUuWLDnj/vj4eEmqNXiSfpn1VdsssdO1rWsRERHy9vZWbm6uSktLa52FdeDAgXqpBQAANG78WgwAAOA3hgwZIi8vL3311VeqqKhwymsOGDBAkvTBBx/Uun/27Nk12rkDb29v9ezZU4Zh6PPPPz9l/6JFi3T06FGnvl9lZaXTXg8AAHgOAiwAAIDfSEhI0E033aSMjAyNHz9eOTk5p7RJT08/rzsGXnPNNYqJiVFqaqr++9//1tj34osvau3atUpISNDYsWMvuH5nmjx5siTp4YcfrrE+17Fjx3T//fc79b3i4+OVk5OjvLw8p74uAABo+AiwAAAAavGf//xHl1xyiT777DO1bNlS/fv317XXXqtRo0YpJSVFKSkpevfdd8/59QIDA/Xee+/J399ft99+u7p3765rr71WXbt21d13362goCB98MEHp10s3VUmTJigq666Srt371abNm00evRojR07VsnJyTKbzerdu7ckycfH54Lf68orr1RlZaW6du2q6667TrfccoueeeaZC35dAADQ8P1/CGsVsAxxELQAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ref_id=3\n", "ref_energy=-.3\n", @@ -445,92 +170,20 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "id": "e14d6cef", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adding energy column to dataframe:\n", - " trainId pulseId electronId timeStamp dldPosX dldPosY \\\n", - "0 1640388889 3 0 1.678800e+09 624.282613 650.282613 \n", - "1 1640388889 3 1 1.678800e+09 624.636437 646.636437 \n", - "2 1640388889 4 0 1.678800e+09 684.198502 663.198502 \n", - "3 1640388889 4 1 1.678800e+09 685.114657 680.114657 \n", - "4 1640388889 4 2 1.678800e+09 686.442973 662.442973 \n", - "5 1640388889 4 3 1.678800e+09 681.727714 644.727714 \n", - "6 1640388889 6 0 1.678800e+09 656.754474 672.754474 \n", - "7 1640388889 8 0 1.678800e+09 705.136128 812.136128 \n", - "8 1640388889 8 1 1.678800e+09 710.309368 814.309368 \n", - "9 1640388889 16 0 1.678800e+09 675.043822 689.043822 \n", - "\n", - " dldTime cryoTemperature crystalVoltage dldTimeBinSize ... \\\n", - "0 45689.282613 301.76001 -0.001524 0.020576 ... \n", - "1 45691.636437 301.76001 -0.001524 0.020576 ... \n", - "2 45809.198502 301.76001 -0.001524 0.020576 ... \n", - "3 45800.114657 301.76001 -0.001524 0.020576 ... \n", - "4 45783.442973 301.76001 -0.001524 0.020576 ... \n", - "5 45789.727714 301.76001 -0.001524 0.020576 ... \n", - "6 43120.754474 301.76001 -0.001524 0.020576 ... \n", - "7 44955.136128 301.76001 -0.001524 0.020576 ... \n", - "8 44962.309368 301.76001 -0.001524 0.020576 ... \n", - "9 45527.043822 301.76001 -0.001524 0.020576 ... \n", - "\n", - " extractorVoltage sampleBias sampleTemperature tofVoltage pulserSignAdc \\\n", - "0 6029.379883 0.001856 302.73999 9.9989 35014.0 \n", - "1 6029.379883 0.001856 302.73999 9.9989 35014.0 \n", - "2 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", - "3 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", - "4 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", - "5 6029.379883 0.001856 302.73999 9.9989 35023.0 \n", - "6 6029.379883 0.001856 302.73999 9.9989 35018.0 \n", - "7 6029.379883 0.001856 302.73999 9.9989 35016.0 \n", - "8 6029.379883 0.001856 302.73999 9.9989 35016.0 \n", - "9 6029.379883 0.001856 302.73999 9.9989 35016.0 \n", - "\n", - " monochromatorPhotonEnergy gmdBda bam delayStage energy \n", - "0 NaN NaN -846.53125 NaN -1.385106 \n", - "1 NaN NaN -846.53125 NaN -1.387787 \n", - "2 NaN NaN -846.09375 NaN -1.520523 \n", - "3 NaN NaN -846.09375 NaN -1.510350 \n", - "4 NaN NaN -846.09375 NaN -1.491643 \n", - "5 NaN NaN -846.09375 NaN -1.498700 \n", - "6 NaN NaN -860.09375 NaN 2.220200 \n", - "7 NaN NaN -854.06250 NaN -0.500170 \n", - "8 NaN NaN -854.06250 NaN -0.509309 \n", - "9 NaN NaN -1124.37500 NaN -1.197971 \n", - "\n", - "[10 rows x 21 columns]\n" - ] - } - ], + "outputs": [], "source": [ "sp.append_energy_axis(preview=True)" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "59c83544", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "1789a2ebeaa14842b59d30fefb5e5490", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "db24113033ce4f95a4bb73f1e01f372f", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "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jMTERNjb25fbz4WI6HnYA0hERu369evIyspCly5d4ODgIH798ssvuHHjhliuSZMm4vdVq1YFACQnJwMAzpw5g+nTp2u9f+TIkbh//z6ysrLE97Vs2VKr7itXrqBVq1Za155+PWTIEFy/fh1HjhwBAERFRaFv374Mf0SkV1b6bgARkS4yMjIAANu2bUO1atW07ikUCjEEWltbi9dlMhmAwrmDmmd8+eWX6N27d7Hn29jYiN+XJbS5u7vjjTfeQGRkJHx9fbFjxw7s37//pZ9DRCQlBkAiMmp+fn5QKBRISEhA+/bti90v2gv4LM2bN8eVK1dQp06dl6q7Xr16OH78OAYNGiReO378eLFyI0aMQP/+/eHt7Y3atWujTZs2L1UPEZHUGACJyKg5Ojri008/RVhYGNRqNdq2bYu0tDQcOnQITk5OqFGjxgufMWXKFPTs2RPVq1fHO++8AwsLC5w5cwbnz5/HjBkznvm+jz76CCNHjkTLli3x2muvYe3atTh79ixq1aqlVS44OBhOTk6YMWMGpk+frvNnJiLSFecAEpHR++qrr/Df//4XERERaNCgAbp164Zt27bB19e3VO8PDg7G1q1bsXv3brz66qsICAjAvHnzXhgeBwwYgMmTJ+PTTz9F8+bNER8fjyFDhmgNGwOAhYUFhgwZApVKpdVbSESkL1wFTEQkoS5dusDT01Nr6xcAGD58OFJSUvDnn3/qqWVERE9wCJiIqIyysrKwdOlSBAcHw9LSEv/73/+wZ88eREdHi2XS0tJw7tw5rF69muGPiAwGAyARURnJZDJs374dM2fORE5ODurVq4eNGzciKChILPPmm2/i2LFjGD16NLp06aLH1hIRPcEhYCIiIiIzw0UgRERERGaGAZCIiIjIzDAAEhEREZkZBkAiIiIiM8MASERERGRmGACJiIiIzAwDIBEREZGZYQAkIiIiMjMMgERERERm5v8BUYRIe/KGt0kAAAAASUVORK5CYII=", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", "res[3,:].plot()" @@ -587,25 +204,10 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "id": "1676ec57", "metadata": {}, - "outputs": [ - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "dc946642454c42c386f4fd1480bd8319", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - " 0%| | 0/1 [00:00" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2f6871f40502465c91fef049312e263d", - "version_major": 2, - "version_minor": 0 - }, - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAADV3klEQVR4nOy9eXwb1bn//5nRMnIsWbZleY8TJ4EsEEIaChhKCCQ0kJalpFAov7LDt2UpEAottCRAgRRa1l6WFmig98KlrKV0AdpcCKUNEMJaClmdOna8xU5kybZmJM38/jhzjo/G8pLYiW35efelV6zRnHOeOTMjTuf56PMolmVZIAiCIAiCIMYN6kgHQBAEQRAEQexfaAFIEARBEAQxzqAFIEEQBEEQxDiDFoAEQRAEQRDjDFoAEgRBEARBjDNoAUgQBEEQBDHOoAUgQRAEQRDEOIMWgARBEARBEOMMWgASBEEQBEGMM2gBSBAEQRAEMc6gBSBBEARBEMQ4gxaABEEQBEEQ4wxaABIEQRAEQYwzaAFIEARBEAQxzqAFIEEQBEEQxDiDFoAEQRAEQRDjDFoAEgRBEARBjDNoAUgQBEEQBDHOoAUgQRAEQRDEOIMWgARBEARBEOMMWgASBEEQBEGMM2gBSBAEQRAEMc6gBSBBEARBEMQ4gxaABEEQBEEQ4wxaABIEQRAEQYwzaAFIEARBEAQxzqAFIEEQBEEQxDiDFoAEQRAEQRDjDFoAEgRBEARBjDNoAUgQBEEQBDHOoAUgQRAEQRDEOIMWgARBEARBEOMMWgASBEEQBEGMM2gBSBAEQRAEMc6gBSBBjCMWLFiABQsW7PNxbr75ZiiKss/HIQiCIPYOWgASBDEoJk+eDEVRxMvn8+GAAw7Addddh/b29pEOb1h56aWXsHjxYpSXl0PTNFRWVuKb3/wm/vWvfw26j88//xwnnngi/H4/CgsL8Z3vfAetra37MGqCIIjBo1iWZY10EARB7B/4078333xzj9tOnjwZBQUFuPbaawEA8Xgc69evx2OPPYa5c+fivffeE/smk0kkk0n4fL7hCHu/c+utt+Lf//435s6di6KiIjQ1NeE3v/kNGhsbsXbtWsyZM6ff9vX19Zg7dy6CwSC+//3vIxaL4Re/+AWqqqrw3nvvwev17qcjIQiCyIx7pAMgCGLsUFFRgf/v//v/xPuLL74Yfr8fv/jFL7Bp0yYccMABAAC32w23e+x+vSxfvrzXtosvvhiVlZV4+OGH8cgjj/Tb/o477kBnZyfWr1+PqqoqAMDhhx+OE044AU888QQuvfTSfRI3QRDEYKEUMEHsBdFoFFdffTUmT54MTdNQXFyME044AR988IHY5+9//zvOOOMMVFVVQdM0TJw4Eddccw26u7vT+jr//PPh9/tRV1eHr3/96/D7/aioqMCDDz4IAPj0009x/PHHIzc3F5MmTcLTTz+d1v6JJ56Aoih466238P/+3/9DKBRCXl4ezj33XOzatWvAY9F1HStWrMC0adNEnNdffz10XR/UXJSWlgJA2oIvkwZw1apVOP7441FcXAxN0zBr1iw8/PDDvfp7//33sXjxYhQVFSEnJwfV1dW48MILBxXLvqS4uBgTJkzA7t27B9z3hRdewNe//nWx+AOARYsW4cADD8Szzz67D6MkCIIYHGP3/6ITxAjy3e9+F88//zyuuOIKzJo1C21tbXj77bfx+eef40tf+hIA4LnnnkNXVxe+973vIRQK4b333sMvf/lL1NfX47nnnkvrL5VK4aSTTsL8+fNx11134amnnsIVV1yB3Nxc/PjHP8Y555yD008/HY888gjOPfdc1NTUoLq6Oq2PK664Avn5+bj55puxYcMGPPzww/jPf/6DN998s88fZJimiVNOOQVvv/02Lr30UsycOROffvop7r33XmzcuBG///3v0/ZPJBLYuXMnAJYC/vDDD3HPPfdg/vz5veJx8vDDD+Oggw7CKaecArfbjVdeeQWXXXYZTNPE5ZdfDgBoaWnBV7/6VYTDYfzoRz9Cfn4+tm3bhhdffHHAcxKLxRCPxwfcz+PxIBgMDrgfAOzevRuJRAJNTU2477770NHRgYULF/bbpqGhAS0tLTjssMN6fXb44Yfjz3/+86DGJgiC2KdYBEHsMcFg0Lr88sv73aerq6vXtpUrV1qKolj/+c9/xLbzzjvPAmDdcccdYtuuXbusnJwcS1EU65lnnhHbv/jiCwuAtWLFCrFt1apVFgBr3rx5lmEYYvtdd91lAbBefvllse3YY4+1jj32WPH+v//7vy1VVa2///3vaXE+8sgjFgDrH//4h9g2adIkC0Cv19FHH23t3Lkzrf2KFSss59dLpvlYvHixNWXKFPH+pZdesgBY69at67XvQPB5HOglH/9ATJ8+XbTz+/3WT37yEyuVSvXbZt26dRYA67e//W2vz6677joLgBWPx/f08AiCIIYVegJIEHtBfn4+3n33XezYsQPl5eUZ98nJyRF/d3Z2oru7G0cddRQsy8KHH36Ylh4EmMZM7n/69OnYvHkzzjzzTLF9+vTpyM/Px9atW3uNd+mll8Lj8Yj33/ve93DjjTfiz3/+M0455ZSMMT733HOYOXMmZsyYIZ7sAcDxxx8PAHjjjTdw1FFHie1HHHEEbrvtNgAsdfzxxx/j5z//OU455RT87W9/Szvm/uYjEokgkUjg2GOPxWuvvYZIJIJgMIj8/HwAwB//+EfMmTMn7XgG4vrrr0/TJ/ZFQUHBoPtctWoVOjo6sHXrVqxatQrd3d1IpVJQ1b7VMzzFr2lar8/4j2K6u7szfk4QBLG/oAUgQewFd911F8477zxMnDgR8+bNw5IlS3DuuediypQpYp+6ujosX74cf/jDH3pp8SKRSNp7n8+HcDicti0YDKKysrJX+jYYDGbU9vEfYHD8fj/Kysqwbdu2Po9j06ZN+Pzzz3uNzWlpaUl7X1RUhEWLFon3X/va1zB9+nR885vfxGOPPYYrr7yyz7H+8Y9/YMWKFVi7di26urrSPuMLwGOPPRZLly7FLbfcgnvvvRcLFizAaaedhm9/+9sDLphmzZqFWbNm9bvPnlJTUyP+PuusszBz5kwAwC9+8Ys+2/CFbiYNJU9R97dQJgiC2B/QApAg9oIzzzwTxxxzDF566SW8/vrr+PnPf44777wTL774Ik466SSkUimccMIJaG9vxw9/+EPMmDEDubm5aGhowPnnnw/TNNP6c7lcGcfpa7s1TO5Npmli9uzZuOeeezJ+PnHixAH74Jq4t956q88F4JYtW7Bw4ULMmDED99xzDyZOnAiv14s///nPuPfee8V8KIqC559/Hu+88w5eeeUVvPbaa7jwwgtx991345133oHf7+8zjkgk0usHNpnwer0oLCwccD8nBQUFOP744/HUU0/1uwAsKysDADQ2Nvb6rLGxEYWFhfT0jyCIEYcWgASxl5SVleGyyy7DZZddhpaWFnzpS1/C7bffjpNOOgmffvopNm7ciCeffBLnnnuuaPPXv/51n8WzadMmHHfcceJ9LBZDY2MjlixZ0mebqVOn4uOPP8bChQv3unJHMpkU4/XFK6+8Al3X8Yc//CEt9f3GG29k3P/II4/EkUceidtvvx1PP/00zjnnHDzzzDNpaXInV111FZ588skB4z322GP3ygcRYKlb59NbJxUVFQiHw3j//fd7ffbee+/h0EMP3auxCYIghhNaABLEHpJKpRCLxdJ+SVpcXIzy8nKR9uNP7uQndZZl4f77799ncf3617/GBRdcIHRzDz/8MJLJJE466aQ+25x55pn485//jEcffbSXN113dzdM00Rubm6/477yyisA0K85cqb5iEQiWLVqVdp+u3btQn5+ftpilC+YBrKlGU4NYEtLC4qLi9O2bdu2DatXr+71694tW7YAYItpztKlS/Hkk09i+/bt4inq6tWrsXHjRlxzzTUDjk8QBLGvoQUgQewh0WhUlAabM2cO/H4//va3v2HdunW4++67AQAzZszA1KlT8YMf/AANDQ3Iy8vDCy+8MChfvr3FMAwsXLgQZ555JjZs2ICHHnoIX/nKV/r8AQgAfOc738Gzzz6L7373u3jjjTdw9NFHI5VK4YsvvsCzzz6L1157LW3B09DQgP/5n/8R43388cf41a9+haKion71f1/96lfh9Xpx8skn4//9v/+HWCyGRx99FMXFxWmp0ieffBIPPfQQvvGNb2Dq1KmIRqN49NFHkZeX1++TTGB4NYCzZ8/GwoULceihh6KgoACbNm3C448/jkQigZ/97Gdp+/IUuKy1vPHGG/Hcc8/huOOOw1VXXYVYLIaf//znmD17Ni644IJhiZEgCGJIjOhvkAliDKLrunXddddZc+bMsQKBgJWbm2vNmTPHeuihh9L2+/e//20tWrTI8vv9VlFRkXXJJZdYH3/8sQXAWrVqldjvvPPOs3Jzc3uNc+yxx1oHHXRQr+2TJk2yvva1r4n33AZmzZo11qWXXmoVFBRYfr/fOuecc6y2trZefTptUAzDsO68807roIMOsjRNswoKCqx58+ZZt9xyixWJRNLGhWSnoqqqVVxcbJ199tnW5s2b0/rMZAPzhz/8wTrkkEMsn89nTZ482brzzjut3/zmNxYAq7a21rIsy/rggw+ss88+26qqqrI0TbOKi4utr3/969b777/f+0TsQ1asWGEddthhVkFBgeV2u63y8nLrrLPOsj755JNe+06aNMmaNGlSr+3/+te/rK9+9avWhAkTrPz8fOucc86xmpqa9kP0BEEQA0O1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UlNTg1AodJif7uDgIP+3WDi5OOUfANevX4/du3dj9+7dhz2MUXd7bGwMO3bswMGDB/l3Dz74IGzbxuWXX45CoYALL7wQDz300HEduyAIgiBMBRzHwTnnnIMNGzbgL/7iLwAAnudhw4YN+Nu//dsTOzhhQk5aDaBwarF//34kEglks1n5hGASyDweO2Qujx0yl8LR8OMf/xirVq3Co48+iiVLlmDdunV46qmnsH37dtTV1Z3o4QnjOOU/ARRODiKRCNauXSv6kEki83jskLk8dshcCkfDlVdeiXQ6jbvuugsDAwP4yEc+gp///Ofy8HeSIp8ACoIgCIIgTDOmnBG0IAiCIAiC8P7IA6AgCIIgCMI0Qx4ABUEQBEEQphnyACgIgiAIgjDNkAdAYULuvvtuWJZV9hXMXR4dHcV1112HZDKJWCyGyy+//DAD0O7ublxyySWYMWMGamtrcfPNN6NYLB7vUzkp6O3txV/+5V8imUyisrISixYtwpYtW/j3SincddddaGhoQGVlJVasWIFdu3aV7WN4eBgrV65EVVUVZs2ahTVr1hwW0zTVaW1tPawuLcvCddddB0Dq8mgplUr4yle+gra2NlRWVmLu3Ln42te+VpZRKzUpCFMcJQgTsHbtWnXmmWeq/v5+/kqn0/z7v/mbv1GnnXaa2rBhg9qyZYs677zz1Ec/+lH+fbFYVGeddZZasWKFev3119Xzzz+vampq1O23334iTueEMjw8rObMmaNWr16tNm/erDo6OtQLL7ygdu/ezdvcf//9KpFIqGeffVZt3bpVXXrppaqtrU0dOnSIt7nooovU4sWL1SuvvKJeeukldfrpp6urrrrqRJzSCWNoaKisJtevX68AqF/+8pdKKanLo+Wee+5RyWRS/fd//7fq7OxUTz/9tIrFYupb3/oWbyM1KQhTG3kAFCZk7dq1avHixRP+bt++faqiokI9/fTT/Nq2bdsUALVp0yallFLPP/+8sm1bDQwM8DYPP/ywqqqqUoVC4QMd+8nGrbfeqj72sY+95+89z1P19fXq61//Or+2b98+FYlE1I9+9COllFLvvPOOAqB+85vf8DY/+9nPlGVZqre394Mb/EnOl770JTV37lzleZ7U5e/BJZdcoj7/+c+XvXbZZZeplStXKqWkJgVhOiAtYOE92bVrFxobG9He3o6VK1eiu7sbAPDa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", - "text/html": [ - "\n", - "
\n", - "
\n", - " Figure\n", - "
\n", - " \n", - "
\n", - " " - ], - "text/plain": [ - "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure()\n", "res[3, :, :].plot()" diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml index 9483f244..e76da9c0 100644 --- a/tutorial/hextof_config.yaml +++ b/tutorial/hextof_config.yaml @@ -28,8 +28,8 @@ dataframe: tof_ns_column: dldTime corrected_tof_column: "tm" bias_column: "sampleBias" - tof_binwidth: 0.020576131995767355 - tof_binning: 5 # with 3, 8 bins per step 2**3 + tof_binwidth: 2.0576131995767355E-12 + tof_binning: 7 # with 3, 8 bins per step 2**3 sector_id_column: dldSectorID sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] From 4cad80097ad114f12095eb3ec8146b54f5bba808 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 13:58:41 +0200 Subject: [PATCH 38/54] tof2ns fix units and linting --- sed/calibrator/energy.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 1f0540d6..fae10ad7 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1981,7 +1981,7 @@ def residual(pars, time, data, binwidth, binning, energy_scale): ), vary=t0_pars.get("vary", True), ) - E0_pars = kwds.pop("E0", {}) + E0_pars = kwds.pop("E0", {}) # pylint: disable=invalid-name pars.add( name="E0", value=E0_pars.get("value", min(vals)), @@ -2211,13 +2211,13 @@ def tof2ns( designed for use with dask.dataframe.DataFrame.map_partitions. Args: - binwidth (float): Time step size in nanoseconds. + binwidth (float): Time step size in seconds. binning (int): Binning of the time-of-flight steps. t (float): TOF value in bin number. Returns: float: Converted time in nanoseconds. """ - val = t * binwidth * 2**binning + val = t * 1e9 * binwidth * 2**binning return val From 5b866ca0223cabb68445f96ccd96ab22efe61c10 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 20:38:12 +0200 Subject: [PATCH 39/54] fix energy calibration and hextof notebook --- sed/calibrator/energy.py | 9 +- sed/core/dfops.py | 5 +- sed/core/processor.py | 38 ++-- tutorial/5 - hextof workflow.ipynb | 343 ++++++++++------------------- tutorial/hextof_config.yaml | 33 +-- 5 files changed, 170 insertions(+), 258 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index fae10ad7..ca555a8c 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1987,7 +1987,7 @@ def residual(pars, time, data, binwidth, binning, energy_scale): value=E0_pars.get("value", min(vals)), min=E0_pars.get("min", -np.inf), max=E0_pars.get("max", np.inf), - vary=d_pars.get("vary", True), + vary=E0_pars.get("vary", True), ) fit = Minimizer( residual, @@ -2225,6 +2225,7 @@ def apply_energy_offset( df: Union[pd.DataFrame, dask.dataframe.DataFrame], columns: Union[str, Sequence[str]], signs: Union[int, Sequence[int]], + subtract_mean: Union[bool, Sequence[bool]] = True, energy_column: str = None, reductions: Union[str, Sequence[str]] = None, config: dict = None, @@ -2255,9 +2256,12 @@ def apply_energy_offset( columns = [columns] if isinstance(signs, int): signs = [signs] + if len(signs) != len(columns): + raise ValueError("signs and columns must have the same length.") + if isinstance(subtract_mean, bool): + subtract_mean = [subtract_mean] * len(columns) if reductions is None: reductions = [None] * len(columns) - columns_: List[str] = [] reductions_: List[str] = [] to_roll: List[str] = [] @@ -2280,6 +2284,7 @@ def apply_energy_offset( target_column=energy_column, offset_columns=columns_, signs=signs, + subtract_mean=subtract_mean, reductions=reductions_, inplace=True, ) diff --git a/sed/core/dfops.py b/sed/core/dfops.py index e4d43252..ee2c897b 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -331,6 +331,7 @@ def apply_offset_from_columns( offset_columns: Union[str, Sequence[str]], signs: Union[int, Sequence[int]], reductions: Union[str, Sequence[str]], + subtract_mean: Union[bool, Sequence[bool]], inplace: bool = True, ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: """Apply an offset to a column based on the values of other columns. @@ -359,10 +360,12 @@ def apply_offset_from_columns( if len(signs) != len(offset_columns): raise ValueError("signs and offset_columns must have the same length!") - for col, sign, red in zip(offset_columns, signs, reductions): + for col, sign, red, submean in zip(offset_columns, signs, reductions, subtract_mean): assert col in df.columns, f"{col} not in dataframe!" if red is not None: df[target_column] = df[target_column] + sign * df[col].agg(red) else: df[target_column] = df[target_column] + sign * df[col] + if submean: + df[target_column] = df[target_column] - sign * df[col].mean() return df diff --git a/sed/core/processor.py b/sed/core/processor.py index 13af0648..7997b43c 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1168,6 +1168,7 @@ def apply_energy_offset( columns: Union[str, Sequence[str]] = None, signs: Union[int, Sequence[int]] = None, reductions: Union[str, Sequence[str]] = None, + subtract_mean: Union[bool, Sequence[bool]] = None, ) -> None: """Shift the energy axis of the dataframe by a given amount. @@ -1190,22 +1191,27 @@ def apply_energy_offset( f"Energy column {energy_column} not found in dataframe! " "Run energy calibration first", ) - self._dataframe, metadata = energy.apply_energy_offset( - df=self._dataframe, - columns=columns, - energy_column=energy_column, - signs=signs, - reductions=reductions, - config=self._config, - ) - self._dataframe[energy_column] += constant - metadata["offset"] = constant - self._attributes.add( - metadata, - "apply_energy_offset", - # TODO: allow only appending when no offset along this column(s) was applied - duplicate_policy="append", - ) + metadata = {} + if columns is not None: + self._dataframe, metadata = energy.apply_energy_offset( + df=self._dataframe, + columns=columns, + energy_column=energy_column, + signs=signs, + reductions=reductions, + subtract_mean=subtract_mean, + config=self._config, + ) + if constant is not None: + self._dataframe[energy_column] += constant + metadata["offset"] = constant + if len(metadata) > 0: + self._attributes.add( + metadata, + "apply_energy_offset", + # TODO: allow only appending when no offset along this column(s) was applied + duplicate_policy="append", + ) def append_tof_ns_axis( self, diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index ae5aa5b0..e7265e9c 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -12,6 +12,7 @@ "import sed\n", "import numpy as np\n", "\n", + "\n", "%matplotlib inline\n", "# %matplotlib ipympl\n", "import matplotlib.pyplot as plt" @@ -49,8 +50,11 @@ "metadata": {}, "outputs": [], "source": [ - "config={\"core\": {\"paths\": {\"data_raw_dir\": \"../../flash_test_data/fl1user3/\", \"data_parquet_dir\": \"../../flash_test_data/parquet/\"}}}\n", - "sp = SedProcessor(runs=[44638], config=config, user_config=config_file, system_config={}, collect_metadata=False)" + "config={\"core\": {\"paths\": {\n", + " \"data_raw_dir\": \"/asap3/flash/gpfs/pg2/2023/data/11019101/raw/hdf/offline/fl1user3\", \n", + " \"data_parquet_dir\": \"/home/agustsss/temp/sed_parquet/\"\n", + "}}}\n", + "sp = SedProcessor(runs=[44797], config=config, user_config=config_file, system_config={}, collect_metadata=False)" ] }, { @@ -67,26 +71,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Energy Calibration" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## using lmfit" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'dldTimeSteps']\n", - "bins = [6, 500]\n", - "ranges = [[0,6], [4000, 8000]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "# time-of-flight spectrum" ] }, { @@ -95,7 +80,7 @@ "metadata": {}, "outputs": [], "source": [ - "sp.load_bias_series(binned_data=res)" + "sp.append_tof_ns_axis()" ] }, { @@ -104,9 +89,10 @@ "metadata": {}, "outputs": [], "source": [ - "ranges=(5500, 6000)\n", - "ref_id=3\n", - "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" + "axes = ['sampleBias','dldTime']\n", + "bins = [5, 250]\n", + "ranges = [[28,33], [650,800]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -115,32 +101,22 @@ "metadata": {}, "outputs": [], "source": [ - "sp.append_tof_ns_axis()" + "plt.figure()\n", + "res.plot.line(x='dldTime')" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "sp.dataframe.head()" + "# Energy Calibration" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "ref_id=3\n", - "ref_energy=0\n", - "sp.calibrate_energy_axis(\n", - " ref_id=ref_id,\n", - " ref_energy=ref_energy,\n", - " method=\"lmfit\",\n", - " energy_scale='kinetic',\n", - ")" + "## using lmfit" ] }, { @@ -149,17 +125,10 @@ "metadata": {}, "outputs": [], "source": [ - "ref_id=3\n", - "ref_energy=0\n", - "sp.calibrate_energy_axis(\n", - " ref_id=ref_id,\n", - " ref_energy=ref_energy,\n", - " method=\"lmfit\",\n", - " energy_scale='kinetic',\n", - " d={'value':1, 'min': 1, 'max': 1},\n", - " E0={'value':0, 'min': -100, 'max': 100,'vary':True},\n", - " t0={'value':225, 'min': -100, 'max': 250, 'vary':True},\n", - ")" + "axes = ['sampleBias', 'dldTimeSteps']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [4000, 4800]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -168,7 +137,10 @@ "metadata": {}, "outputs": [], "source": [ - "sp.append_energy_axis()" + "plt.figure()\n", + "dres = res.copy()\n", + "dres.data = np.gradient(res.data, axis=1)\n", + "dres.plot.line(x='dldTimeSteps')" ] }, { @@ -177,7 +149,7 @@ "metadata": {}, "outputs": [], "source": [ - "sp.append_tof_ns_axis()" + "sp.load_bias_series(binned_data=dres)" ] }, { @@ -186,7 +158,9 @@ "metadata": {}, "outputs": [], "source": [ - "sp.dataframe[['dldTime','dldTimeSteps','energy','dldSectorID']].head()" + "ranges=(4120, 4200)\n", + "ref_id=0\n", + "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" ] }, { @@ -195,9 +169,9 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [5, 500]\n", - "ranges = [[28,33], [-10,10]]\n", + "axes = ['sampleBias', 'dldTimeSteps']\n", + "bins = [5, 2000]\n", + "ranges = [[28,33], [0, 2000]]\n", "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, @@ -208,21 +182,7 @@ "outputs": [], "source": [ "plt.figure()\n", - "res.mean('sampleBias').plot.line(x='energy',linewidth=3);\n", - "res.plot.line(x='energy',linewidth=1,alpha=.5,label='all');\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.apply_energy_offset(\n", - " constant=-31.5,\n", - " columns=['sampleBias'],\n", - " signs=[+1],\n", - ")" + "res.plot.line(x='dldTimeSteps')" ] }, { @@ -231,30 +191,14 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [5, 500]\n", - "ranges = [[28,33], [-3,2]]\n", - "res_fit = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure()\n", - "ax = plt.subplot(111)\n", - "res_fit.energy.attrs['unit'] = 'eV'\n", - "res_fit.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", - "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## with poly fit" + "# ref_id=0\n", + "# ref_energy=0\n", + "# sp.calibrate_energy_axis(\n", + "# ref_id=ref_id,\n", + "# ref_energy=ref_energy,\n", + "# method=\"lmfit\",\n", + "# energy_scale='kinetic',\n", + "# )" ] }, { @@ -263,7 +207,7 @@ "metadata": {}, "outputs": [], "source": [ - "sp = SedProcessor(runs=[44797], config=config_file, collect_metadata=False)" + "from sed.calibrator.energy import tof2ev, tof2ns" ] }, { @@ -272,8 +216,17 @@ "metadata": {}, "outputs": [], "source": [ - "sp.add_jitter()\n", - "sp.align_dld_sectors()" + "ph_peak = 1e-9 * tof2ns(binwidth=sp.config['dataframe']['tof_binwidth'], binning=3,t=219)\n", + "sp.calibrate_energy_axis(\n", + " ref_id=0,\n", + " ref_energy=0,\n", + " method=\"lmfit\",\n", + " energy_scale='kinetic',\n", + " d={'value':1.,'min': .8, 'max':5, 'vary':True},\n", + " t0={'value':ph_peak, 'min': ph_peak*0.1, 'max': ph_peak*1.9, 'vary':False},\n", + " E0={'value': 0., 'min': -100, 'max': 100, 'vary': True},\n", + "\n", + ")" ] }, { @@ -282,10 +235,17 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'dldTimeSteps']\n", - "bins = [6, 500]\n", - "ranges = [[28,33], [4000, 4800]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "# tof = np.linspace(4000,5000,500)\n", + "# plt.figure()\n", + "# plt.plot(tof, tof2ev(\n", + "# t=tof, \n", + "# tof_distance=1, \n", + "# time_offset=1e-9*tof2ns(binwidth=sp.config['dataframe']['tof_binwidth'], binning=3,t=218), \n", + "# energy_offset=0,\n", + "# binning=3,\n", + "# energy_scale='kinetic',\n", + "# binwidth=sp.config['dataframe']['tof_binwidth'])\n", + "# )" ] }, { @@ -294,7 +254,7 @@ "metadata": {}, "outputs": [], "source": [ - "sp.load_bias_series(binned_data=res)" + "sp.append_energy_axis()" ] }, { @@ -303,9 +263,7 @@ "metadata": {}, "outputs": [], "source": [ - "ranges=(4250, 4500)\n", - "ref_id=3\n", - "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" + "sp.ec.calibration" ] }, { @@ -314,14 +272,7 @@ "metadata": {}, "outputs": [], "source": [ - "ref_id=3\n", - "ref_energy=-0.3\n", - "sp.calibrate_energy_axis(\n", - " ref_id=ref_id,\n", - " ref_energy=-0.3,\n", - " method=\"lstsq\",\n", - " order=2,\n", - ")" + "sp.dataframe[['dldTime','dldTimeSteps','energy','dldSectorID']].head()" ] }, { @@ -330,7 +281,10 @@ "metadata": {}, "outputs": [], "source": [ - "sp.append_energy_axis()" + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-10,10]]\n", + "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -339,10 +293,9 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [5, 500]\n", - "ranges = [[28,33], [-10,10]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "plt.figure()\n", + "res.mean('sampleBias').plot.line(x='energy',linewidth=3)\n", + "res.plot.line(x='energy',linewidth=1,alpha=.5);" ] }, { @@ -351,9 +304,7 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure()\n", - "res.mean('sampleBias').plot.line(x='energy',linewidth=3);\n", - "res.plot.line(x='energy',linewidth=1,alpha=.5,label='all');\n" + "sp.dataframe" ] }, { @@ -363,9 +314,10 @@ "outputs": [], "source": [ "sp.apply_energy_offset(\n", - " constant=-31.5,\n", - " columns=['sampleBias'],\n", - " signs=[+1],\n", + " constant=2,\n", + " columns=['sampleBias','monochromatorPhotonEnergy','tofVoltage'],\n", + " signs=[1,-1,-1],\n", + " subtract_mean=True,\n", ")" ] }, @@ -377,8 +329,8 @@ "source": [ "axes = ['sampleBias', 'energy']\n", "bins = [5, 500]\n", - "ranges = [[28,33], [-3,2]]\n", - "res_poly = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "ranges = [[28,33], [-10,2]]\n", + "res_fit = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { @@ -389,19 +341,16 @@ "source": [ "plt.figure()\n", "ax = plt.subplot(111)\n", - "res_poly.energy.attrs['unit'] = 'eV'\n", - "res_poly.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", - "res_poly.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + "res_fit.energy.attrs['unit'] = 'eV'\n", + "res_fit.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax)\n", + "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "# From manual values\n", - "these are obviously not the right values, I think I got them from an other calibraiton file.\n", - "They are here to show how the calibration works.\n", - "Also, I noticed the parameter energy_scale from the config has no effect..." + "# Fit the falling edge at E=0 to evaluate the quality of the energy calibration" ] }, { @@ -410,51 +359,7 @@ "metadata": {}, "outputs": [], "source": [ - "sp = SedProcessor(runs=[44797], config=config_file, collect_metadata=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.add_jitter()\n", - "sp.align_dld_sectors()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.append_energy_axis()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.apply_energy_offset(\n", - " constant=+31.5,\n", - " columns=['sampleBias'],\n", - " signs=[-1],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [5, 500]\n", - "ranges = [[28,33], [-10,5]]\n", - "res_config = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "from lmfit.models import Gaussian2dModel, LorentzianModel, LinearModel" ] }, { @@ -463,11 +368,22 @@ "metadata": {}, "outputs": [], "source": [ + "curve = res_fit.mean('sampleBias').sel(energy=slice(-0.15,1))\n", + "x = curve.energy\n", + "y = -np.gradient(curve.data)\n", + "full_y = np.gradient(res_fit.data, axis=1)\n", + "gm = LorentzianModel()\n", + "# lin = LinearModel()\n", + "model = gm #+ lin\n", + "params = gm.guess(y, x=x)\n", + "# params.update(lin.make_params())\n", + "result = model.fit(y, params, x=x)\n", + "\n", "plt.figure()\n", - "ax = plt.subplot(111)\n", - "res_config.energy.attrs['unit'] = 'eV'\n", - "res_config.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", - "res_config.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + "plt.plot(x, y, 'bo')\n", + "plt.plot(x, result.best_fit, 'r-')\n", + "result.best_values\n", + "best = result.params" ] }, { @@ -476,19 +392,9 @@ "metadata": {}, "outputs": [], "source": [ - "sp.dataframe['energy'] = - sp.dataframe['energy']" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [5, 500]\n", - "ranges = [[28,33], [-3,2]]\n", - "res_config = sp.compute(bins=bins, axes=axes, ranges=ranges)" + "{'amplitude': 62.649384173227375,\n", + " 'center': 0.07618539040289204,\n", + " 'sigma': 0.0948828689156287}" ] }, { @@ -498,10 +404,15 @@ "outputs": [], "source": [ "plt.figure()\n", - "ax = plt.subplot(111)\n", - "res_config.energy.attrs['unit'] = 'eV'\n", - "res_config.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax);\n", - "res_config.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + "for i in range(len(res_fit.sampleBias)):\n", + " x = res_fit.isel(sampleBias=i).sel(energy=slice(-0.15,1)).energy\n", + " y = res_fit.isel(sampleBias=i).sel(energy=slice(-0.15,1)).data\n", + " y = -np.gradient(y)\n", + " y = y/np.max(y)\n", + " result = model.fit(y, best, x=x)\n", + " print(f'{i}: {result.best_values}')\n", + " plt.plot(x, y+i, 'bo')\n", + " plt.plot(x, result.best_fit+i, 'r-')\n" ] }, { @@ -509,32 +420,14 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [ - "# compare the two methods\n", - "fig, ax = plt.subplots(1,3, figsize=(10,4), layout='constrained')\n", - "res_poly.energy.attrs['unit'] = 'eV'\n", - "res_poly.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax[0], label='all');\n", - "res_poly.plot.line(x='energy',linewidth=1,alpha=.5,ax=ax[0]);\n", - "ax[0].set_title('poly')\n", - "res_fit.energy.attrs['unit'] = 'eV'\n", - "res_fit.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax[1], label='all');\n", - "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,ax=ax[1]);\n", - "ax[1].set_title('fit')\n", - "res_config.energy.attrs['unit'] = 'eV'\n", - "res_config.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax[2]);\n", - "res_config.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax[2]);\n", - "ax[2].set_title('config')\n", - "ax[0].set_xlim(-2, 1.5)\n", - "ax[1].set_xlim(-2, 1.5)\n", - "ax[2].set_xlim(-2, 1.5)" - ] + "source": [] } ], "metadata": { "kernelspec": { - "display_name": ".pyenv", + "display_name": "sed38", "language": "python", - "name": "python3" + "name": "sed38" }, "language_info": { "codemirror_mode": { @@ -546,7 +439,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.8.18" } }, "nbformat": 4, diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml index e76da9c0..0a8289af 100644 --- a/tutorial/hextof_config.yaml +++ b/tutorial/hextof_config.yaml @@ -5,9 +5,9 @@ core: beamline: pg2 instrument: hextof paths: - data_raw_dir: "/asap3/flash/gpfs/pg2/2023/data/11019101/raw/hdf/offline/fl1user3" + data_raw_dir: "/path/to/data" # change this to a local directory where you want to store the parquet files - data_parquet_dir: "/home/agustsss/temp/sed_parquet" + data_parquet_dir: "/path/to/parquet" binning: num_cores: 10 @@ -28,8 +28,8 @@ dataframe: tof_ns_column: dldTime corrected_tof_column: "tm" bias_column: "sampleBias" - tof_binwidth: 2.0576131995767355E-12 - tof_binning: 7 # with 3, 8 bins per step 2**3 + tof_binwidth: 2.0576131995767355E-11 # in seconds + tof_binning: 3 sector_id_column: dldSectorID sector_delays: [0., 0., 0., 0., 0., 0., 0., 0.] jitter_cols: ["dldPosX", "dldPosY", "dldTimeSteps"] @@ -122,14 +122,19 @@ dataframe: energy: calibration: - offset: 4150.0 - coeffs: [-2.01882455e-05, 1.94714008e-01] - Tmat: [[ 1.01040e+06, 1.20000e+02], - [ 7.18675e+05, 8.50000e+01], - [ 3.82275e+05, 4.50000e+01], - [-3.86325e+05, -4.50000e+01]] - bvec: [ 3., 2., 1., -1.] + d: 2.7342492951998603 + t0: 3.6049383256584405e-08 + E0: -51.289659014865784 energy_scale: kinetic - axis: -463.3385531514501 - E0: -463.3385531514501 - refid: 3 + refid: 0 + offset: + constant: 2.0 + sampleBias: + sign: 1 + substract_mean: True + monochromatorPhotonEnergy: + sign: -1 + substract_mean: True + tofVoltage: + sign: -1 + substract_mean: True From fa1cd5cec6d7a8c63ab2f3f498eb5f976a04f5ab Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 22:30:24 +0200 Subject: [PATCH 40/54] refactor and move apply_energy_offset --- sed/calibrator/energy.py | 237 ++++++++++++++++++----------- sed/core/processor.py | 25 ++- tutorial/5 - hextof workflow.ipynb | 99 +++++++++++- tutorial/hextof_config.yaml | 10 +- 4 files changed, 256 insertions(+), 115 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index ca555a8c..d56ba5b3 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -112,7 +112,7 @@ def __init__( self.color_clip = self._config["energy"]["color_clip"] self.sector_delays = self._config["dataframe"].get("sector_delays", None) self.sector_id_column = self._config["dataframe"].get("sector_id_column", None) - + self.offset: Dict[str, Any] = self._config["energy"].get("offset", {}) self.correction: Dict[Any, Any] = {} @property @@ -773,6 +773,26 @@ def view( # pylint: disable=dangerous-default-value pbk.show(fig) + def get_current_calibration(self) -> dict: + """Return the current calibration dictionary. + + if none is present, return the one from the config. If none is present there, + return an empty dictionary. + + Returns: + dict: Calibration dictionary. + """ + if self.calibration: + calibration = deepcopy(self.calibration) + else: + calibration = deepcopy( + self._config["energy"].get( + "calibration", + {}, + ), + ) + return calibration + def append_energy_axis( self, df: Union[pd.DataFrame, dask.dataframe.DataFrame], @@ -816,17 +836,7 @@ def append_energy_axis( binwidth = kwds.pop("binwidth", self.binwidth) binning = kwds.pop("binning", self.binning) - # pylint: disable=duplicate-code - if calibration is None: - if self.calibration: - calibration = deepcopy(self.calibration) - else: - calibration = deepcopy( - self._config["energy"].get( - "calibration", - {}, - ), - ) + calibration = self.get_current_calibration() for key, value in kwds.items(): calibration[key] = value @@ -1413,14 +1423,9 @@ def align_dld_sectors( self, df: Union[pd.DataFrame, dask.dataframe.DataFrame], **kwds, - # sector_delays: Sequence[float] = None, - # sector_id_column: str = None, - # tof_column: str = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the time-of-flight axis of the different sections of a detector. - # TODO: move inside the ec class - Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. @@ -1452,6 +1457,128 @@ def align_sector(x): } return df, metadata + def apply_energy_offset( + self, + df: Union[pd.DataFrame, dask.dataframe.DataFrame] = None, + constant: float = None, + columns: Union[str, Sequence[str]] = None, + signs: Union[int, Sequence[int]] = None, + subtract_mean: Union[bool, Sequence[bool]] = None, + energy_column: str = None, + reductions: Union[str, Sequence[str]] = None, + ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + """Apply an energy shift to the given column(s). + + If no parameter is passed to this function, the offset is applied as defined in the + config file. If parameters are passed, they are used to generate a new offset dictionary + and the offset is applied using the ``dfops.apply_offset_from_columns()`` function. + + # TODO: This funcion can still be improved and needs testsing + + Args: + df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + constant (float, optional): The constant to shift the energy axis by. + columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift to. + signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) A positive + sign shifts the energy axis to higher kinetic energies. Defaults to +1. + energy_column (str, optional): Name of the column containing the energy values. + reductions (str): The reduction to apply to the column. If "rolled" it searches for + columns with suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the + ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method + of dask.dataframe.Series. For example "mean". In this case the function is applied + to the column to generate a single value for the whole dataset. If None, the shift + is applied per-dataframe-row. Defaults to None. + subtract_mean (bool): Whether to subtract the mean of the column before applying the + shift. Defaults to False. + **kwargs: Additional arguments for the rolling average function. + """ + if energy_column is None: + energy_column = self.energy_column + if columns is None: + # load from config + columns = [] + signs = [] + subtract_mean = [] + reductions = [] + for k, v in self.offset.items(): + if k == "constant": + constant = v + print(f"Applying constant offset of {constant} to energy axis.") + else: + assert k in df.columns, f"Column {k} not found in dataframe." + columns.append(k) + signs.append(v.get("sign", 1)) + subtract_mean.append(v.get("subtract_mean", False)) + reductions.append(v.get("reduction", None)) + s = "+" if signs[-1] > 0 else "-" + msg = f"Shifting {energy_column} by {s} {k}" + if subtract_mean[-1]: + msg += " and subtracting mean" + print(msg) + else: + # use passed parameters + if isinstance(columns, str): + columns = [columns] + if isinstance(signs, int): + signs = [signs] + if len(signs) != len(columns): + raise ValueError("signs and columns must have the same length.") + if isinstance(subtract_mean, bool): + subtract_mean = [subtract_mean] * len(columns) + if reductions is None: + reductions = [None] * len(columns) + # flip sign for binding energy scale + energy_scale = self.get_current_calibration().get("energy_scale", None) + if energy_scale == "binding": + signs = [-s for s in signs] + elif energy_scale == "kinetic": + pass + elif energy_scale is None: + raise ValueError("Energy scale not set. Please run `set_energy_scale` first.") + # check if columns have been smoothed + columns_: List[str] = [] + reductions_: List[str] = [] + to_roll: List[str] = [] + for c, r in zip(columns, reductions): + if r == "rolled": + cname = c + "_rolled" + if cname not in df.columns: + to_roll.append(cname) + else: + columns_.append(cname) + reductions_.append(None) + else: + columns_.append(c) + reductions_.append(r) + if len(to_roll) > 0: + raise RuntimeError( + f"Columns {to_roll} have not been smoothed. please run `smooth_column`", + ) + # apply offset + df = dfops.apply_offset_from_columns( + df=df, + target_column=energy_column, + offset_columns=columns_, + signs=signs, + subtract_mean=subtract_mean, + reductions=reductions_, + inplace=True, + ) + # apply constant + if constant is not None: + df[energy_column] += constant + + metadata: Dict[str, Any] = { + "applied": True, + "constant": constant, + "energy_column": energy_column, + "column_names": columns, + "signs": signs, + "subtract_mean": subtract_mean, + "reductions": reductions, + } + return df, metadata + def extract_bias(files: List[str], bias_key: str) -> np.ndarray: """Read bias values from hdf5 files @@ -2219,79 +2346,3 @@ def tof2ns( """ val = t * 1e9 * binwidth * 2**binning return val - - -def apply_energy_offset( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - columns: Union[str, Sequence[str]], - signs: Union[int, Sequence[int]], - subtract_mean: Union[bool, Sequence[bool]] = True, - energy_column: str = None, - reductions: Union[str, Sequence[str]] = None, - config: dict = None, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Apply an energy shift to the given column(s). - - # TODO: This funcion can still be improved and needs testsing - # TODO: move inside the ec class - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift to. - signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) - energy_column (str, optional): Name of the column containing the energy values. - reductions (str): The reduction to apply to the column. If "rolled" it searches for columns - with suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the - ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method of - dask.dataframe.Series. For example "mean". In this case the function is applied to the - column to generate a single value for the whole dataset. If None, the shift is applied - per-dataframe-row. Defaults to None. - **kwargs: Additional arguments for the rolling average function. - """ - if energy_column is None: - if config is None: - raise ValueError("Either energy_column or config must be given.") - energy_column = config["dataframe"]["energy_column"] - if isinstance(columns, str): - columns = [columns] - if isinstance(signs, int): - signs = [signs] - if len(signs) != len(columns): - raise ValueError("signs and columns must have the same length.") - if isinstance(subtract_mean, bool): - subtract_mean = [subtract_mean] * len(columns) - if reductions is None: - reductions = [None] * len(columns) - columns_: List[str] = [] - reductions_: List[str] = [] - to_roll: List[str] = [] - for c, r in zip(columns, reductions): - if r == "rolled": - cname = c + "_rolled" - if cname not in df.columns: - to_roll.append(cname) - else: - columns_.append(cname) - reductions_.append(None) - else: - columns_.append(c) - reductions_.append(r) - if len(to_roll) > 0: - raise RuntimeError(f"Columns {to_roll} have not been smoothed. please run `smooth_column`") - - df = dfops.apply_offset_from_columns( - df=df, - target_column=energy_column, - offset_columns=columns_, - signs=signs, - subtract_mean=subtract_mean, - reductions=reductions_, - inplace=True, - ) - metadata: Dict[str, Any] = { - "applied": True, - "energy_column": energy_column, - "column_names": columns, - "sign": signs, - } - return df, metadata diff --git a/sed/core/processor.py b/sed/core/processor.py index 7997b43c..ddbb01bd 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -20,7 +20,6 @@ from sed.binning import bin_dataframe from sed.calibrator import DelayCalibrator -from sed.calibrator import energy from sed.calibrator import EnergyCalibrator from sed.calibrator import MomentumCorrector from sed.core.config import parse_config @@ -1182,6 +1181,8 @@ def apply_energy_offset( of dask.dataframe.Series. For example "mean". In this case the function is applied to the column to generate a single value for the whole dataset. If None, the shift is applied per-dataframe-row. Defaults to None. + subtract_mean (bool): Whether to subtract the mean of the column before applying the + shift. Defaults to False. Raises: ValueError: If the energy column is not in the dataframe. """ @@ -1192,19 +1193,15 @@ def apply_energy_offset( "Run energy calibration first", ) metadata = {} - if columns is not None: - self._dataframe, metadata = energy.apply_energy_offset( - df=self._dataframe, - columns=columns, - energy_column=energy_column, - signs=signs, - reductions=reductions, - subtract_mean=subtract_mean, - config=self._config, - ) - if constant is not None: - self._dataframe[energy_column] += constant - metadata["offset"] = constant + self._dataframe, metadata = self.ec.apply_energy_offset( + df=self._dataframe, + constant=constant, + columns=columns, + energy_column=energy_column, + signs=signs, + reductions=reductions, + subtract_mean=subtract_mean, + ) if len(metadata) > 0: self._attributes.add( metadata, diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index e7265e9c..9675d266 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -3,7 +3,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "notebookRunGroups": { + "groupValue": "1" + } + }, "outputs": [], "source": [ "from pathlib import Path\n", @@ -21,7 +25,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "notebookRunGroups": { + "groupValue": "1" + } + }, "outputs": [], "source": [ "%matplotlib widget" @@ -30,7 +38,11 @@ { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "notebookRunGroups": { + "groupValue": "1" + } + }, "outputs": [], "source": [ "config_file = Path(sed.__file__).parent.parent/'tutorial/hextof_config.yaml'\n", @@ -415,6 +427,87 @@ " plt.plot(x, result.best_fit+i, 'r-')\n" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# load and process from config" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "notebookRunGroups": { + "groupValue": "2" + } + }, + "outputs": [], + "source": [ + "config={\"core\": {\"paths\": {\n", + " \"data_raw_dir\": \"/asap3/flash/gpfs/pg2/2023/data/11019101/raw/hdf/offline/fl1user3\", \n", + " \"data_parquet_dir\": \"/home/agustsss/temp/sed_parquet/\"\n", + "}}}\n", + "sp = SedProcessor(runs=[44797], config=config, user_config=config_file, system_config={}, collect_metadata=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "notebookRunGroups": { + "groupValue": "2" + } + }, + "outputs": [], + "source": [ + "sp.add_jitter()\n", + "sp.align_dld_sectors()\n", + "sp.append_tof_ns_axis()\n", + "sp.append_energy_axis()\n", + "sp.apply_energy_offset()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "notebookRunGroups": { + "groupValue": "2" + } + }, + "outputs": [], + "source": [ + "axes = ['sampleBias', 'energy']\n", + "bins = [5, 500]\n", + "ranges = [[28,33], [-10,10]]\n", + "res_fit = sp.compute(bins=bins, axes=axes, ranges=ranges)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "notebookRunGroups": { + "groupValue": "2" + } + }, + "outputs": [], + "source": [ + "plt.figure()\n", + "ax = plt.subplot(111)\n", + "res_fit.energy.attrs['unit'] = 'eV'\n", + "res_fit.mean('sampleBias').plot.line(x='energy',linewidth=3, ax=ax)\n", + "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml index 0a8289af..482860e8 100644 --- a/tutorial/hextof_config.yaml +++ b/tutorial/hextof_config.yaml @@ -124,17 +124,17 @@ energy: calibration: d: 2.7342492951998603 t0: 3.6049383256584405e-08 - E0: -51.289659014865784 + E0: -51.289659014865784 # flip sign if switching between kinetic and binding energy energy_scale: kinetic refid: 0 offset: - constant: 2.0 + constant: 0.0 sampleBias: sign: 1 - substract_mean: True + subtract_mean: True monochromatorPhotonEnergy: sign: -1 - substract_mean: True + subtract_mean: True tofVoltage: sign: -1 - substract_mean: True + subtract_mean: True From babc325da8db849fefa63f32c02a4493e8fc1c79 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 22:35:22 +0200 Subject: [PATCH 41/54] remove redundant notebooks --- tutorial/Flash energy calibration.ipynb | 259 ------------------------ tutorial/config_flash_energy_calib.yaml | 105 ---------- 2 files changed, 364 deletions(-) delete mode 100755 tutorial/Flash energy calibration.ipynb delete mode 100755 tutorial/config_flash_energy_calib.yaml diff --git a/tutorial/Flash energy calibration.ipynb b/tutorial/Flash energy calibration.ipynb deleted file mode 100755 index d6c158fd..00000000 --- a/tutorial/Flash energy calibration.ipynb +++ /dev/null @@ -1,259 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "39b2e62a", - "metadata": {}, - "outputs": [], - "source": [ - "%load_ext autoreload\n", - "%autoreload 2\n", - "\n", - "from sed import SedProcessor\n", - "import sed\n", - "import numpy as np\n", - "\n", - "# %matplotlib inline\n", - "%matplotlib widget\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "markdown", - "id": "4d78d236", - "metadata": {}, - "source": [ - "# Try to calibrate energy" - ] - }, - { - "cell_type": "markdown", - "id": "a62f084f", - "metadata": {}, - "source": [ - "## Spin-integrated branch, E_TOF=10eV\n", - "single scan, move sample bias manually every 2000 pulses." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7dabbe92", - "metadata": {}, - "outputs": [], - "source": [ - "sp = SedProcessor(runs=[44638], config={\"core\": {\"paths\": {\"data_raw_dir\": \"../../flash_test_data/fl1user3/\", \"data_parquet_dir\": \"../../flash_test_data/parquet/\"}}}, system_config=\"config_flash_energy_calib.yaml\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "248a41a7", - "metadata": {}, - "outputs": [], - "source": [ - "sp.add_jitter()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "90aea967", - "metadata": {}, - "outputs": [], - "source": [ - "sp.append_tof_ns_axis(tof_ns_column=\"tof_ns\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f3c9d426", - "metadata": {}, - "outputs": [], - "source": [ - "sp.dataframe.head()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5629d262", - "metadata": {}, - "outputs": [], - "source": [ - "data = sp.dataframe['dldTime'].partitions[0].compute()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8225d879", - "metadata": {}, - "outputs": [], - "source": [ - "plt.plot(data)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "2b867e40", - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'tof_ns']\n", - "bins = [6, 5000]\n", - "ranges = [[0,6], [0, .0001]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6560d4d1", - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'dldTime']\n", - "bins = [6, 500]\n", - "ranges = [[0,6], [40000, 55000]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "62081458", - "metadata": {}, - "outputs": [], - "source": [ - "sp.load_bias_series(binned_data=res)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "424af94e", - "metadata": {}, - "outputs": [], - "source": [ - "ranges=(44500, 46000)\n", - "ref_id=3\n", - "sp.find_bias_peaks(ranges=ranges, ref_id=ref_id)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "034eff42", - "metadata": {}, - "outputs": [], - "source": [ - "ref_id=3\n", - "ref_energy=-.3\n", - "sp.calibrate_energy_axis(ref_id=ref_id, ref_energy=ref_energy, method=\"lstsq\", order=3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "bbbfe992", - "metadata": {}, - "outputs": [], - "source": [ - "ref_id=3\n", - "ref_energy=-.3\n", - "sp.calibrate_energy_axis(ref_id=ref_id, ref_energy=ref_energy, method=\"lmfit\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e14d6cef", - "metadata": {}, - "outputs": [], - "source": [ - "sp.append_energy_axis(preview=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "59c83544", - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'energy']\n", - "bins = [6, 1000]\n", - "ranges = [[0,6], [-5, 5]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "addba4cb", - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure()\n", - "res[3,:].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1676ec57", - "metadata": {}, - "outputs": [], - "source": [ - "axes = ['sampleBias', 'energy', 'dldPosX']\n", - "bins = [6, 100, 480]\n", - "ranges = [[0,6], [-2, 1], [420,900]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ad199c40", - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure()\n", - "res[3, :, :].plot()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3a4ae88c", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".pyenv", - "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.8.12" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/tutorial/config_flash_energy_calib.yaml b/tutorial/config_flash_energy_calib.yaml deleted file mode 100755 index 8132c245..00000000 --- a/tutorial/config_flash_energy_calib.yaml +++ /dev/null @@ -1,105 +0,0 @@ -core: - loader: flash - beamtime_id: 11013410 - year: 2023 - beamline: pg2 - instrument: hextof - paths: - data_raw_dir: "." - data_parquet_dir: "./parquet" - -dataframe: - ubid_offset: 5 - daq: fl1user3 - channels: - - timeStamp: - format: per_train - group_name: "/uncategorised/FLASH.DIAG/TIMINGINFO/TIME1.BUNCH_FIRST_INDEX.1/" - - pulseId: - format: per_electron - group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" - slice: 2 - dldPosX: - format: per_electron - group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" - slice: 1 - dldPosY: - format: per_electron - group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" - slice: 0 - dldTime: - format: per_electron - group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" - slice: 3 - dldAux: - format: per_pulse - group_name : "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" - slice: 4 - dldAuxChannels: - sampleBias: 0 - tofVoltage: 1 - extractorVoltage: 2 - extractorCurrent: 3 - cryoTemperature: 4 - sampleTemperature: 5 - crystalVoltage: 6 - dldTimeBinSize: 15 - - - # ADC containing the pulser sign (1: value approx. 35000, 0: 33000) - pulserSignAdc: - format: per_pulse - group_name: "/FL1/Experiment/PG/SIS8300 100MHz ADC/CH6/TD/" - #slice: 0 - - monochromatorPhotonEnergy: - format: per_train - group_name: "/FL1/Beamlines/PG/Monochromator/monochromator photon energy/" - - - # The GMDs can not be read yet... - gmdBda: - format: per_train - group_name: "/FL1/Photon Diagnostic/GMD/Average energy/energy BDA/" - # slice: ":" - - #gmdTunnel: - # format: per_pulse - # group_name: "/FL1/Photon Diagnostic/GMD/Pulse resolved energy/energy tunnel/" - # slice: ":" - - # Here we use the DBC2 BAM as the "normal" one is broken. - bam: - format: per_pulse - group_name: "/uncategorised/FLASH.SDIAG/BAM.DAQ/FL0.DBC2.ARRIVAL_TIME.ABSOLUTE.SA1.COMP/" - - delayStage: - format: per_train - group_name: "/zraw/FLASH.SYNC/LASER.LOCK.EXP/F1.PG.OSC/FMC0.MD22.1.ENCODER_POSITION.RD/dGroup/" - - - tof_column: dldTime - x_column: dldPosX - y_column: dldPosY - bias_column: sampleBias - tof_binning: 3 - - stream_name_prefixes: - pbd: "GMD_DATA_gmd_data" - pbd2: "FL2PhotDiag_pbd2_gmd_data" - fl1user1: "FLASH1_USER1_stream_2" - fl1user2: "FLASH1_USER2_stream_2" - fl1user3: "FLASH1_USER3_stream_2" - fl2user1: "FLASH2_USER1_stream_2" - fl2user2: "FLASH2_USER2_stream_2" - beamtime_dir: - pg2: "/asap3/flash/gpfs/pg2/" - hextof: "/asap3/fs-flash-o/gpfs/hextof/" - wespe: "/asap3/fs-flash-o/gpfs/wespe/" - -nexus: - reader: "mpes" - definition: "NXmpes" - input_files: ["/home/kutnyakd/__beamtimes/Spin_2023/NXmpes_config_HEXTOF_light.json"] From 09b2dad8ba887646d080f661f589b101557872f6 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 22:49:18 +0200 Subject: [PATCH 42/54] linting --- sed/calibrator/energy.py | 8 ++++++++ sed/core/dfops.py | 2 ++ 2 files changed, 10 insertions(+) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index d56ba5b3..a60c341e 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1517,6 +1517,10 @@ def apply_energy_offset( print(msg) else: # use passed parameters + if columns is not None and (signs is None or subtract_mean is None): + raise ValueError( + "If columns is passed, signs and subtract_mean must also be passed.", + ) if isinstance(columns, str): columns = [columns] if isinstance(signs, int): @@ -1530,6 +1534,10 @@ def apply_energy_offset( # flip sign for binding energy scale energy_scale = self.get_current_calibration().get("energy_scale", None) if energy_scale == "binding": + if None in signs: + raise ValueError( + "Cannot apply binding energy offset to columns with unknown sign.", + ) signs = [-s for s in signs] elif energy_scale == "kinetic": pass diff --git a/sed/core/dfops.py b/sed/core/dfops.py index ee2c897b..9e1532b4 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -359,6 +359,8 @@ def apply_offset_from_columns( signs = [signs] if len(signs) != len(offset_columns): raise ValueError("signs and offset_columns must have the same length!") + if isinstance(subtract_mean, bool): + subtract_mean = [subtract_mean] * len(offset_columns) for col, sign, red, submean in zip(offset_columns, signs, reductions, subtract_mean): assert col in df.columns, f"{col} not in dataframe!" From 68bf2b429301ba9298005b84a5bdb07119449013 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 22:55:52 +0200 Subject: [PATCH 43/54] bug fix --- sed/calibrator/energy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index a60c341e..a130f031 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -836,7 +836,8 @@ def append_energy_axis( binwidth = kwds.pop("binwidth", self.binwidth) binning = kwds.pop("binning", self.binning) - calibration = self.get_current_calibration() + if calibration is None: + calibration = self.get_current_calibration() for key, value in kwds.items(): calibration[key] = value From 6fc47ac829985e3b5e8679c3a6bbdae76655c2ff Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 23:30:21 +0200 Subject: [PATCH 44/54] linting --- sed/calibrator/energy.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index a130f031..4e1e00d7 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1539,7 +1539,8 @@ def apply_energy_offset( raise ValueError( "Cannot apply binding energy offset to columns with unknown sign.", ) - signs = [-s for s in signs] + else: + signs = [-1 * s for s in signs if s is not None] elif energy_scale == "kinetic": pass elif energy_scale is None: From 60242a744d48609dd511e42356a3b9417dcf4315 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 25 Oct 2023 23:42:33 +0200 Subject: [PATCH 45/54] linting --- sed/calibrator/energy.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 4e1e00d7..318ae75a 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1535,12 +1535,7 @@ def apply_energy_offset( # flip sign for binding energy scale energy_scale = self.get_current_calibration().get("energy_scale", None) if energy_scale == "binding": - if None in signs: - raise ValueError( - "Cannot apply binding energy offset to columns with unknown sign.", - ) - else: - signs = [-1 * s for s in signs if s is not None] + signs = [-1 * s for s in signs if s is not None] elif energy_scale == "kinetic": pass elif energy_scale is None: From 61045d039eb8df40cce8b81d06b2ab6a831ad5e9 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Mon, 30 Oct 2023 14:30:48 +0100 Subject: [PATCH 46/54] apply suggested changes and remove rolling avg --- sed/calibrator/energy.py | 81 +++++++++++++--------------- sed/config/default.yaml | 2 + sed/config/flash_example_config.yaml | 7 +-- sed/core/dfops.py | 75 ++++---------------------- sed/core/processor.py | 57 +++++--------------- tests/data/loader/flash/config.yaml | 20 +++---- 6 files changed, 74 insertions(+), 168 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 318ae75a..d9427cb0 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -911,6 +911,10 @@ def append_tof_ns_axis( time-of-flight steps. Defaults to config["dataframe"]["tof_column"]. tof_ns_column (str, optional): Name of the column to store the time-of-flight in nanoseconds. Defaults to config["dataframe"]["tof_ns_column"]. + binwidth (float, optional): Time-of-flight binwidth in ns. + Defaults to config["energy"]["binwidth"]. + binning (int, optional): Time-of-flight binning factor. + Defaults to config["energy"]["binning"]. Returns: dask.dataframe.DataFrame: Dataframe with the new columns. @@ -926,8 +930,6 @@ def append_tof_ns_axis( if tof_ns_column is None: tof_ns_column = self.tof_ns_column - if tof_ns_column is None: - raise AttributeError("tof_ns_column not set!") df[tof_ns_column] = tof2ns( binwidth, @@ -1423,26 +1425,34 @@ def gather_correction_metadata(self, correction: dict = None) -> dict: def align_dld_sectors( self, df: Union[pd.DataFrame, dask.dataframe.DataFrame], - **kwds, + tof_column: str = None, + sector_id_column: str = None, + sector_delays: np.ndarray = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Aligns the time-of-flight axis of the different sections of a detector. Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + tof_column (str, optional): Name of the column containing the time-of-flight values. + Defaults to config["dataframe"]["tof_column"]. + sector_id_column (str, optional): Name of the column containing the sector id values. + Defaults to config["dataframe"]["sector_id_column"]. + sector_delays (np.ndarray, optional): Array containing the sector delays. Defaults to + config["dataframe"]["sector_delays"]. - Returns: + Returns: dask.dataframe.DataFrame: Dataframe with the new columns. dict: Metadata dictionary. """ - sector_delays = kwds.pop("sector_delays", self.sector_delays) - sector_id_column = kwds.pop("sector_id_column", self.sector_id_column) + sector_delays = sector_delays or self.sector_delays + sector_id_column = sector_id_column or self.sector_id_column if sector_delays is None or sector_id_column is None: raise ValueError( "No value for sector_delays or sector_id_column found in config." - "config file is not properly configured for dld sector correction.", + "Config file is not properly configured for dld sector correction.", ) - tof_column = kwds.pop("tof_column", self.tof_column) + tof_column = tof_column or self.tof_column # align the 8s sectors sector_delays_arr = dask.array.from_array(sector_delays) @@ -1467,8 +1477,8 @@ def apply_energy_offset( subtract_mean: Union[bool, Sequence[bool]] = None, energy_column: str = None, reductions: Union[str, Sequence[str]] = None, - ) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Apply an energy shift to the given column(s). + ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + """Apply an offset to the energy column by the values of the provided columns. If no parameter is passed to this function, the offset is applied as defined in the config file. If parameters are passed, they are used to generate a new offset dictionary @@ -1479,19 +1489,16 @@ def apply_energy_offset( Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. constant (float, optional): The constant to shift the energy axis by. - columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift to. + columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift from. signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) A positive sign shifts the energy axis to higher kinetic energies. Defaults to +1. energy_column (str, optional): Name of the column containing the energy values. - reductions (str): The reduction to apply to the column. If "rolled" it searches for - columns with suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the - ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method + reductions (str): The reduction to apply to the column. Should be an available method of dask.dataframe.Series. For example "mean". In this case the function is applied to the column to generate a single value for the whole dataset. If None, the shift is applied per-dataframe-row. Defaults to None. subtract_mean (bool): Whether to subtract the mean of the column before applying the shift. Defaults to False. - **kwargs: Additional arguments for the rolling average function. """ if energy_column is None: energy_column = self.energy_column @@ -1506,16 +1513,12 @@ def apply_energy_offset( constant = v print(f"Applying constant offset of {constant} to energy axis.") else: - assert k in df.columns, f"Column {k} not found in dataframe." + if k not in df.columns: + raise KeyError(f"Column {k} not found in dataframe.") columns.append(k) signs.append(v.get("sign", 1)) subtract_mean.append(v.get("subtract_mean", False)) reductions.append(v.get("reduction", None)) - s = "+" if signs[-1] > 0 else "-" - msg = f"Shifting {energy_column} by {s} {k}" - if subtract_mean[-1]: - msg += " and subtracting mean" - print(msg) else: # use passed parameters if columns is not None and (signs is None or subtract_mean is None): @@ -1539,34 +1542,16 @@ def apply_energy_offset( elif energy_scale == "kinetic": pass elif energy_scale is None: - raise ValueError("Energy scale not set. Please run `set_energy_scale` first.") - # check if columns have been smoothed - columns_: List[str] = [] - reductions_: List[str] = [] - to_roll: List[str] = [] - for c, r in zip(columns, reductions): - if r == "rolled": - cname = c + "_rolled" - if cname not in df.columns: - to_roll.append(cname) - else: - columns_.append(cname) - reductions_.append(None) - else: - columns_.append(c) - reductions_.append(r) - if len(to_roll) > 0: - raise RuntimeError( - f"Columns {to_roll} have not been smoothed. please run `smooth_column`", - ) + raise ValueError("Energy scale not set. I don't know how to interpret the sign.") + # apply offset df = dfops.apply_offset_from_columns( df=df, target_column=energy_column, - offset_columns=columns_, + offset_columns=columns, signs=signs, subtract_mean=subtract_mean, - reductions=reductions_, + reductions=reductions, inplace=True, ) # apply constant @@ -2062,6 +2047,12 @@ def fit_energy_calibation( - **'kinetic'**: increasing energy with decreasing TOF. - **'binding'**: increasing energy with increasing TOF. + t0 (float, optional): constrains and initial values for the fit parameter t0, corresponding + to the time of flight offset. Defaults to 1e-6. + E0 (float, optional): constrains and initial values for the fit parameter E0, corresponding + to the energy offset. Defaults to min(vals). + d (float, optional): constrains and initial values for the fit parameter d, corresponding + to the drift distance. Defaults to 1. Returns: dict: A dictionary of fitting parameters including the following, @@ -2337,7 +2328,7 @@ def tof2ns( binwidth: float, binning: int, t: float, -) -> Union[List[float], np.ndarray]: +) -> float: """Converts the time-of-flight steps to time-of-flight in nanoseconds. designed for use with dask.dataframe.DataFrame.map_partitions. @@ -2349,5 +2340,5 @@ def tof2ns( Returns: float: Converted time in nanoseconds. """ - val = t * 1e9 * binwidth * 2**binning + val = t * 1e9 * binwidth * 2.0**binning return val diff --git a/sed/config/default.yaml b/sed/config/default.yaml index dead1293..0450faae 100644 --- a/sed/config/default.yaml +++ b/sed/config/default.yaml @@ -9,6 +9,8 @@ dataframe: y_column: "Y" # dataframe column containing time-of-flight data tof_column: "t" + # dataframe column containing time-of-flight data in nanoseconds + tof_ns_column: "t_ns" # dataframe column containing analog-to-digital data adc_column: "ADC" # dataframe column containing bias voltage data diff --git a/sed/config/flash_example_config.yaml b/sed/config/flash_example_config.yaml index e321d295..54c6eec6 100644 --- a/sed/config/flash_example_config.yaml +++ b/sed/config/flash_example_config.yaml @@ -36,22 +36,19 @@ dataframe: # dataframe column containing kx coordinates kx_column: "kx" # dataframe column containing y coordinates - y_column: dldPosY # dataframe column containing corrected y coordinates corrected_y_column: "Y" # dataframe column containing kx coordinates ky_column: "ky" # dataframe column containing time-of-flight data - tof_column: dldTimeSteps # dataframe column containing time-of-flight data in ns tof_ns_column: dldTime # dataframe column containing corrected time-of-flight data corrected_tof_column: "tm" - - # time length of a base time-of-flight bin in ns - tof_binwidth: 0.020576131995767355 # 0.16460905596613884 + # time length of a base time-of-flight bin in seconds + tof_binwidth: 2.0576131995767355E-11 # binning parameter for time-of-flight data. 2**tof_binning bins per base bin tof_binning: 3 # power of 2, 3 means 8 bins per step # dataframe column containing sector ID. obtained from dldTimeSteps column diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 9e1532b4..49692879 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -265,66 +265,6 @@ def backward_fill_partition(df): return df -def rolling_average_on_acquisition_time( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], - rolling_group_channel: str = None, - columns: Union[str, Sequence[str]] = None, - window: float = None, - sigma: float = 2, - config: dict = None, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: - """Perform a rolling average with a gaussian weighted window. - - The rolling average is performed on the acquisition time instead of the index. - This can be a time-stamp or similar, such as the trainID at FLASH. - This is necessary first when considering the recorded electrons do not come at a regular time - interval, but even more importantly when loading multiple datasets with gaps in the acquisition. - - - In order to preserve the number of points, the first and last "window" - number of points are substituted with the original signal. - # TODO: this is currently very slow, and could do with a remake. - - Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. - group_channel: (str): Name of the column on which to group the data - cols (str): Name of the column on which to perform the rolling average - window (float): Size of the rolling average window - sigma (float): number of standard deviations for the gaussian weighting of the window. - a value of 2 corresponds to a gaussian with sigma equal to half the window size. - Smaller values reduce the weighting in the window frame. - - Returns: - Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new columns. - """ - if rolling_group_channel is None: - if config is None: - raise ValueError("Either group_channel or config must be given.") - rolling_group_channel = config["dataframe"]["rolling_group_channel"] - if isinstance(columns, str): - columns = [columns] - s = f"rolling average over {rolling_group_channel} on " - for c in columns: - s += f"{c}, " - print(s) - with ProgressBar(): - df_ = df.groupby(rolling_group_channel).agg({c: "mean" for c in columns}).compute() - df_["dt"] = pd.to_datetime(df_.index, unit="s") - df_["ts"] = df_.index - for c in columns: - df_[c + "_rolled"] = ( - df_[c] - .interpolate(method="nearest") - .rolling(window, center=True, win_type="gaussian") - .mean(std=window / sigma) - .fillna(df_[c]) - ) - df_ = df_.drop(c, axis=1) - if c + "_rolled" in df.columns: - df = df.drop(c + "_rolled", axis=1) - return df.merge(df_, left_on="timeStamp", right_on="ts").drop(["ts", "dt"], axis=1) - - def apply_offset_from_columns( df: Union[pd.DataFrame, dask.dataframe.DataFrame], target_column: str, @@ -342,7 +282,9 @@ def apply_offset_from_columns( offset_columns (str): Name of the column(s) to use for the offset. signs (int): Sign of the offset. Defaults to 1. reductions (str): Reduction function to use for the offset. Defaults to "mean". - + subtract_mean (bool): Whether to subtract the mean of the offset column. Defaults to False. + If a list is given, it must have the same length as offset_columns. Otherwise the value + passed is used for all columns. Returns: Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. """ @@ -351,8 +293,7 @@ def apply_offset_from_columns( if not inplace: df[target_column + "_offset"] = df[target_column] target_column = target_column + "_offset" - if reductions is None: - reductions = "mean" + if isinstance(reductions, str): reductions = [reductions] * len(offset_columns) if isinstance(signs, int): @@ -363,11 +304,17 @@ def apply_offset_from_columns( subtract_mean = [subtract_mean] * len(offset_columns) for col, sign, red, submean in zip(offset_columns, signs, reductions, subtract_mean): - assert col in df.columns, f"{col} not in dataframe!" + if col not in df.columns: + raise KeyError(f"{col} not in dataframe!") if red is not None: df[target_column] = df[target_column] + sign * df[col].agg(red) else: df[target_column] = df[target_column] + sign * df[col] if submean: df[target_column] = df[target_column] - sign * df[col].mean() + s = "+" if sign > 0 else "-" + msg = f"Shifting {target_column} by {s} {col}" + if submean[-1]: + msg += " and subtracting mean" + print(msg) return df diff --git a/sed/core/processor.py b/sed/core/processor.py index ddbb01bd..3a528de5 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -6,7 +6,6 @@ from typing import cast from typing import Dict from typing import List -from typing import Literal from typing import Sequence from typing import Tuple from typing import Union @@ -25,7 +24,6 @@ from sed.core.config import parse_config from sed.core.config import save_config from sed.core.dfops import apply_jitter -from sed.core.dfops import rolling_average_on_acquisition_time from sed.core.metadata import MetaHandler from sed.diagnostics import grid_histogram from sed.io import to_h5 @@ -1190,9 +1188,8 @@ def apply_energy_offset( if energy_column not in self._dataframe.columns: raise ValueError( f"Energy column {energy_column} not found in dataframe! " - "Run energy calibration first", + "Run `append energy axis` first.", ) - metadata = {} self._dataframe, metadata = self.ec.apply_energy_offset( df=self._dataframe, constant=constant, @@ -1237,12 +1234,21 @@ def append_tof_ns_axis( duplicate_policy="append", ) - def align_dld_sectors(self, **kwargs): - """Align the 8s sectors of the HEXTOF endstation.""" + def align_dld_sectors(self, sector_delays: np.ndarray = None, **kwargs): + """Align the 8s sectors of the HEXTOF endstation. + + Args: + sector_delays (np.ndarray, optional): Array containing the sector delays. Defaults to + config["dataframe"]["sector_delays"]. + """ if self._dataframe is not None: print("Aligning 8s sectors of dataframe") # TODO assert order of execution through metadata - self._dataframe, metadata = self.ec.align_dld_sectors(df=self._dataframe, **kwargs) + self._dataframe, metadata = self.ec.align_dld_sectors( + df=self._dataframe, + sector_delays=sector_delays, + **kwargs, + ) self._attributes.add( metadata, "dld_sector_alignment", @@ -1343,43 +1349,6 @@ def add_jitter( metadata.append(col) self._attributes.add(metadata, "jittering", duplicate_policy="append") - def smooth_columns( - self, - columns: Union[str, Sequence[str]] = None, - method: Literal["rolling"] = "rolling", - **kwargs, - ) -> None: - """Apply a filter along one or more columns of the dataframe. - - Currently only supports rolling average on acquisition time. - - Args: - columns (Union[str,Sequence[str]]): The colums onto which to apply the filter. - method (Literal['rolling'], optional): The filter method. Defaults to 'rolling'. - **kwargs: Keyword arguments passed to the filter method. - """ - if isinstance(columns, str): - columns = [columns] - for column in columns: - if column not in self._dataframe.columns: - raise ValueError(f"Cannot smooth {column}. Column not in dataframe!") - kwargs = {**self._config["smooth"], **kwargs} - if method == "rolling": - self._dataframe = rolling_average_on_acquisition_time( - df=self._dataframe, - rolling_group_channel=kwargs.get("rolling_group_channel", None), - columns=columns or kwargs.get("columns", None), - window=kwargs.get("window", None), - sigma=kwargs.get("sigma", None), - ) - else: - raise ValueError(f"Method {method} not supported!") - self._attributes.add( - columns, - "smooth", - duplicate_policy="append", - ) - def pre_binning( self, df_partitions: int = 100, diff --git a/tests/data/loader/flash/config.yaml b/tests/data/loader/flash/config.yaml index fa5d38f6..d7d09f63 100644 --- a/tests/data/loader/flash/config.yaml +++ b/tests/data/loader/flash/config.yaml @@ -11,10 +11,10 @@ core: paths: data_raw_dir: "tests/data/loader/flash/" data_parquet_dir: "tests/data/loader/flash/parquet" - + # These can be replaced by beamtime_id and year to automatically # find the folders on the desy cluster - + # beamtime_id: xxxxxxxx # year: 20xx @@ -24,8 +24,8 @@ dataframe: # The offset correction to the pulseId ubid_offset: 5 - # the number of iterations to fill the pulseId forward. - forward_fill_iterations: 2 + # the number of iterations to fill the pulseId forward. + forward_fill_iterations: 2 # if true, removes the 3 bits reserved for dldSectorID from the dldTimeandSector column unravel_8s_detector_time_channel: True @@ -50,8 +50,8 @@ dataframe: # dataframe column containing corrected time-of-flight data corrected_tof_column: "tm" - # time length of a base time-of-flight bin in ns - tof_binwidth: 0.020576131995767355 # 0.16460905596613884 + # time length of a base time-of-flight bin in seconds + tof_binwidth: 2.0576131995767355E-11 # binning parameter for time-of-flight data. 2**tof_binning bins per base bin tof_binning: 3 # power of 2, 4 means 8 bins per step # dataframe column containing sector ID. obtained from dldTimeSteps column @@ -88,17 +88,17 @@ dataframe: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 1 - + dldPosY: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 0 - + dldTimeSteps: format: per_electron group_name: "/uncategorised/FLASH.EXP/HEXTOF.DAQ/DLD1/" slice: 3 - + # The auxillary channel has a special structure where the group further contains # a multidim structure so further aliases are defined below dldAux: @@ -113,7 +113,7 @@ dataframe: cryoTemperature: 4 sampleTemperature: 5 dldTimeBinSize: 15 - + # The prefixes of the stream names for different DAQ systems for parsing filenames # (Not to be changed by user) stream_name_prefixes: From 7554c71548c4bc68f7b8db9a07cb03dee2e488f3 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 16:10:06 +0100 Subject: [PATCH 47/54] refactor energy offset for performance and tests --- sed/calibrator/energy.py | 118 ++++++++++++------------ sed/core/dfops.py | 138 ++++++++++++++++++++++------- sed/core/processor.py | 47 +++++----- tests/calibrator/test_energy.py | 73 +++++++++++++++ tests/test_dfops.py | 128 ++++++++++++++++++++++++++ tutorial/5 - hextof workflow.ipynb | 24 +---- tutorial/hextof_config.yaml | 10 +-- 7 files changed, 402 insertions(+), 136 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index d9427cb0..2b6350ee 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1468,15 +1468,15 @@ def align_sector(x): } return df, metadata - def apply_energy_offset( + def add_offsets( self, df: Union[pd.DataFrame, dask.dataframe.DataFrame] = None, constant: float = None, columns: Union[str, Sequence[str]] = None, signs: Union[int, Sequence[int]] = None, - subtract_mean: Union[bool, Sequence[bool]] = None, - energy_column: str = None, + preserve_mean: Union[bool, Sequence[bool]] = False, reductions: Union[str, Sequence[str]] = None, + energy_column: str = None, ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Apply an offset to the energy column by the values of the provided columns. @@ -1492,81 +1492,87 @@ def apply_energy_offset( columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift from. signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) A positive sign shifts the energy axis to higher kinetic energies. Defaults to +1. - energy_column (str, optional): Name of the column containing the energy values. + preserve_mean (bool): Whether to subtract the mean of the column before applying the + shift. Defaults to False. reductions (str): The reduction to apply to the column. Should be an available method of dask.dataframe.Series. For example "mean". In this case the function is applied to the column to generate a single value for the whole dataset. If None, the shift - is applied per-dataframe-row. Defaults to None. - subtract_mean (bool): Whether to subtract the mean of the column before applying the - shift. Defaults to False. + is applied per-dataframe-row. Defaults to None. Currently only "mean" is supported. + energy_column (str, optional): Name of the column containing the energy values. + + Returns: + dask.dataframe.DataFrame: Dataframe with the new columns. + dict: Metadata dictionary. """ if energy_column is None: energy_column = self.energy_column - if columns is None: + + # if no parameters are passed, use config + if columns is None and constant is None: # load from config columns = [] signs = [] - subtract_mean = [] + preserve_mean = [] reductions = [] for k, v in self.offset.items(): if k == "constant": constant = v - print(f"Applying constant offset of {constant} to energy axis.") else: - if k not in df.columns: - raise KeyError(f"Column {k} not found in dataframe.") columns.append(k) - signs.append(v.get("sign", 1)) - subtract_mean.append(v.get("subtract_mean", False)) + try: + signs.append(v["sign"]) + except KeyError: + raise KeyError(f"Missing sign for offset column {k} in config.") + preserve_mean.append(v.get("preserve_mean", False)) reductions.append(v.get("reduction", None)) - else: + + # flip sign for binding energy scale + energy_scale = self.get_current_calibration().get("energy_scale", None) + if energy_scale is None: + raise ValueError("Energy scale not set. Cannot interpret the sign of the offset.") + if energy_scale not in ["binding", "kinetic"]: + raise ValueError(f"Invalid energy scale: {energy_scale}") + scale_sign = -1 if energy_scale == "binding" else 1 + # initialize metadata container + metadata: Dict[str, Any] = { + "applied": True, + } + # apply offset + if columns is not None: # use passed parameters - if columns is not None and (signs is None or subtract_mean is None): - raise ValueError( - "If columns is passed, signs and subtract_mean must also be passed.", - ) - if isinstance(columns, str): - columns = [columns] if isinstance(signs, int): signs = [signs] - if len(signs) != len(columns): - raise ValueError("signs and columns must have the same length.") - if isinstance(subtract_mean, bool): - subtract_mean = [subtract_mean] * len(columns) - if reductions is None: - reductions = [None] * len(columns) - # flip sign for binding energy scale - energy_scale = self.get_current_calibration().get("energy_scale", None) - if energy_scale == "binding": - signs = [-1 * s for s in signs if s is not None] - elif energy_scale == "kinetic": - pass - elif energy_scale is None: - raise ValueError("Energy scale not set. I don't know how to interpret the sign.") + elif not isinstance(signs, Sequence): + raise TypeError(f"Invalid type for signs: {type(signs)}") + # flip signs if binding energy scale + signs = [s * scale_sign for s in signs] + + df = dfops.offset_by_other_columns( + df=df, + target_column=energy_column, + offset_columns=columns, + signs=signs, + preserve_mean=preserve_mean, + reductions=reductions, + inplace=True, + ) + metadata["energy_column"] = energy_column + metadata["columns"] = columns + metadata["signs"] = signs + metadata["preserve_mean"] = preserve_mean + metadata["reductions"] = reductions - # apply offset - df = dfops.apply_offset_from_columns( - df=df, - target_column=energy_column, - offset_columns=columns, - signs=signs, - subtract_mean=subtract_mean, - reductions=reductions, - inplace=True, - ) # apply constant - if constant is not None: - df[energy_column] += constant + if isinstance(constant, (int, float)): + df[energy_column] = df.map_partitions( + # flip sign if binding energy scale + lambda x: x[energy_column] + constant * scale_sign, + meta=(energy_column, np.float64), + ) + metadata["constant"] = constant + elif constant is not None: + raise TypeError(f"Invalid type for constant: {type(constant)}") - metadata: Dict[str, Any] = { - "applied": True, - "constant": constant, - "energy_column": energy_column, - "column_names": columns, - "signs": signs, - "subtract_mean": subtract_mean, - "reductions": reductions, - } return df, metadata diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 49692879..79bce737 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -265,56 +265,128 @@ def backward_fill_partition(df): return df -def apply_offset_from_columns( - df: Union[pd.DataFrame, dask.dataframe.DataFrame], +def offset_by_other_columns( + df: dask.dataframe.DataFrame, target_column: str, offset_columns: Union[str, Sequence[str]], signs: Union[int, Sequence[int]], - reductions: Union[str, Sequence[str]], - subtract_mean: Union[bool, Sequence[bool]], + reductions: Union[str, Sequence[str]] = None, + preserve_mean: Union[bool, Sequence[bool]] = False, inplace: bool = True, -) -> Union[pd.DataFrame, dask.dataframe.DataFrame]: + rename: str = None, +) -> dask.dataframe.DataFrame: """Apply an offset to a column based on the values of other columns. Args: - df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to use. + df (dask.dataframe.DataFrame): Dataframe to use. Currently supports only dask dataframes. target_column (str): Name of the column to apply the offset to. offset_columns (str): Name of the column(s) to use for the offset. signs (int): Sign of the offset. Defaults to 1. - reductions (str): Reduction function to use for the offset. Defaults to "mean". - subtract_mean (bool): Whether to subtract the mean of the offset column. Defaults to False. - If a list is given, it must have the same length as offset_columns. Otherwise the value - passed is used for all columns. + reductions (str, optional): Reduction function to use for the offset. Defaults to "mean". + Currently, only mean is supported. + preserve_mean (bool, optional): Whether to subtract the mean of the offset column. + Defaults to False. If a list is given, it must have the same length as + offset_columns. Otherwise the value passed is used for all columns. + inplace (bool, optional): Whether to apply the offset inplace. + If false, the new column will have the name provided by rename, or has the same name as + target_column with the suffix _offset if that is None. Defaults to True. + rename (str, optional): Name of the new column if inplace is False. Defaults to None. Returns: - Union[pd.DataFrame, dask.dataframe.DataFrame]: Dataframe with the new column. + dask.dataframe.DataFrame: Dataframe with the new column. """ + if target_column not in df.columns: + raise KeyError(f"{target_column} not in dataframe!") + if isinstance(offset_columns, str): offset_columns = [offset_columns] - if not inplace: - df[target_column + "_offset"] = df[target_column] - target_column = target_column + "_offset" + elif not isinstance(offset_columns, Sequence): + raise TypeError(f"Invalid type for columns: {type(offset_columns)}") + if any([c not in df.columns for c in offset_columns]): + raise KeyError(f"{offset_columns} not in dataframe!") - if isinstance(reductions, str): - reductions = [reductions] * len(offset_columns) if isinstance(signs, int): signs = [signs] + elif not isinstance(signs, Sequence): + raise TypeError(f"Invalid type for signs: {type(signs)}") if len(signs) != len(offset_columns): raise ValueError("signs and offset_columns must have the same length!") - if isinstance(subtract_mean, bool): - subtract_mean = [subtract_mean] * len(offset_columns) - - for col, sign, red, submean in zip(offset_columns, signs, reductions, subtract_mean): - if col not in df.columns: - raise KeyError(f"{col} not in dataframe!") - if red is not None: - df[target_column] = df[target_column] + sign * df[col].agg(red) - else: - df[target_column] = df[target_column] + sign * df[col] - if submean: - df[target_column] = df[target_column] - sign * df[col].mean() - s = "+" if sign > 0 else "-" - msg = f"Shifting {target_column} by {s} {col}" - if submean[-1]: - msg += " and subtracting mean" - print(msg) + signs_dict = {c: s for c, s in zip(offset_columns, signs)} + + if isinstance(reductions, str) or reductions is None: + reductions = [reductions] * len(offset_columns) + elif not isinstance(reductions, Sequence): + raise ValueError(f"reductions must be a string or list of strings! not {type(reductions)}") + if any([r not in ["mean", None] for r in reductions]): + raise NotImplementedError("Only reductions currently supported is 'mean'!") + + if isinstance(preserve_mean, bool): + preserve_mean = [preserve_mean] * len(offset_columns) + elif not isinstance(preserve_mean, Sequence): + raise TypeError(f"Invalid type for preserve_mean: {type(preserve_mean)}") + elif any([not isinstance(p, bool) for p in preserve_mean]): + raise TypeError(f"Invalid type for preserve_mean: {type(preserve_mean)}") + if len(preserve_mean) != len(offset_columns): + raise ValueError("preserve_mean and offset_columns must have the same length!") + + if not inplace: + if rename is None: + rename = target_column + "_offset" + df[rename] = df[target_column] + target_column = rename + + if isinstance(df, pd.DataFrame): + raise NotImplementedError( + "Offsetting by other columns is currently not supported for pandas dataframes! " + "Please open a request on GitHub if this feature is required.", + ) + + # calculate the mean of the columns to reduce + means = { + col: dask.delayed(df[col].mean()) + for col, red, pm in zip(offset_columns, reductions, preserve_mean) + if red or pm + } + + # define the functions to apply the offsets + def shift_by_mean(x, cols, signs, means, flip_signs=False): + """Shift the target column by the mean of the offset columns.""" + for col in cols: + s = -signs[col] if flip_signs else signs[col] + x[target_column] = x[target_column] + s * means[col] + return x[target_column] + + def shift_by_row(x, cols, signs): + """Apply the offsets to the target column.""" + for col in cols: + x[target_column] = x[target_column] + signs[col] * x[col] + return x[target_column] + + # apply offset from the reduced columns + df[target_column] = df.map_partitions( + shift_by_mean, + cols=[col for col, red in zip(offset_columns, reductions) if red], + signs=signs_dict, + means=means, + meta=df[target_column].dtype, + ) + + # apply offset from the offset columns + df[target_column] = df.map_partitions( + shift_by_row, + cols=[col for col, red in zip(offset_columns, reductions) if not red], + signs=signs_dict, + meta=df[target_column].dtype, + ) + + # compensate shift from the preserved mean columns + if any(preserve_mean): + df[target_column] = df.map_partitions( + shift_by_mean, + cols=[col for col, pmean in zip(offset_columns, preserve_mean) if pmean], + signs=signs_dict, + means=means, + flip_signs=True, + meta=df[target_column].dtype, + ) + return df diff --git a/sed/core/processor.py b/sed/core/processor.py index 3a528de5..263f1ca1 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1159,28 +1159,28 @@ def append_energy_axis( else: print(self._dataframe) - def apply_energy_offset( + def add_energy_offset( self, constant: float = None, columns: Union[str, Sequence[str]] = None, signs: Union[int, Sequence[int]] = None, reductions: Union[str, Sequence[str]] = None, - subtract_mean: Union[bool, Sequence[bool]] = None, + preserve_mean: Union[bool, Sequence[bool]] = None, ) -> None: """Shift the energy axis of the dataframe by a given amount. Args: constant (float, optional): The constant to shift the energy axis by. - columns (Union[str, Sequence[str]]): The columns to shift. - signs (Union[int, Sequence[int]]): The sign of the shift. - reductions (str): The reduction to apply to the column. If "rolled" it searches for - columns with suffix "_rolled", e.g. "sampleBias_rolled", as those generated by the - ``SedProcessor.smooth_columns()`` function. Otherwise should be an available method + columns (Union[str, Sequence[str]]): Name of the column(s) to apply the shift from. + signs (Union[int, Sequence[int]]): Sign of the shift to apply. (+1 or -1) A positive + sign shifts the energy axis to higher kinetic energies. Defaults to +1. + preserve_mean (bool): Whether to subtract the mean of the column before applying the + shift. Defaults to False. + reductions (str): The reduction to apply to the column. Should be an available method of dask.dataframe.Series. For example "mean". In this case the function is applied to the column to generate a single value for the whole dataset. If None, the shift - is applied per-dataframe-row. Defaults to None. - subtract_mean (bool): Whether to subtract the mean of the column before applying the - shift. Defaults to False. + is applied per-dataframe-row. Defaults to None. Currently only "mean" is supported. + Raises: ValueError: If the energy column is not in the dataframe. """ @@ -1190,22 +1190,25 @@ def apply_energy_offset( f"Energy column {energy_column} not found in dataframe! " "Run `append energy axis` first.", ) - self._dataframe, metadata = self.ec.apply_energy_offset( - df=self._dataframe, - constant=constant, - columns=columns, - energy_column=energy_column, - signs=signs, - reductions=reductions, - subtract_mean=subtract_mean, - ) - if len(metadata) > 0: + if self.dataframe is not None: + df, metadata = self.ec.add_offsets( + df=self._dataframe, + constant=constant, + columns=columns, + energy_column=energy_column, + signs=signs, + reductions=reductions, + preserve_mean=preserve_mean, + ) self._attributes.add( metadata, - "apply_energy_offset", + "add_energy_offset", # TODO: allow only appending when no offset along this column(s) was applied - duplicate_policy="append", + duplicate_policy="raise", ) + self._dataframe = df + else: + raise ValueError("No dataframe loaded!") def append_tof_ns_axis( self, diff --git a/tests/calibrator/test_energy.py b/tests/calibrator/test_energy.py index ba931cc2..d39fd260 100644 --- a/tests/calibrator/test_energy.py +++ b/tests/calibrator/test_energy.py @@ -8,6 +8,7 @@ from typing import Any from typing import Dict +import dask.dataframe import numpy as np import pandas as pd import pytest @@ -538,3 +539,75 @@ def test_apply_energy_correction_raises( correction=correction_dict, ) assert config["dataframe"]["corrected_tof_column"] in df.columns + + +def test_add_offsets_functionality(): + config = parse_config( + config={ + "energy": { + "calibration": { + "energy_scale": "kinetic", + }, + "offset": { + "constant": 1, + "off1": { + "sign": 1, + "preserve_mean": True, + }, + "off2": {"sign": -1, "preserve_mean": False}, + "off3": {"sign": 1, "preserve_mean": False, "reduction": "mean"}, + }, + }, + }, + folder_config={}, + user_config={}, + system_config={}, + ) + + df = pd.DataFrame( + { + "energy": [10, 20, 30, 40, 50, 60], + "off1": [1, 2, 3, 4, 5, 6], + "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], + "off3": [10.1, 10.2, 10.3, 10.4, 10.5, 10.6], + }, + ) + t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) + ec = EnergyCalibrator( + config=config, + loader=get_loader("flash", config=config), + ) + res, meta = ec.add_offsets(t_df) + exp_vals = df["energy"].copy() + 1 + exp_vals += df["off1"] - df["off1"].mean() + exp_vals -= df["off2"] + exp_vals += df["off3"].mean() + np.testing.assert_allclose(res["energy"].values, exp_vals.values) + exp_meta = { + "applied": True, + "constant": 1, + "energy_column": "energy", + "columns": ["off1", "off2", "off3"], + "signs": [1, -1, 1], + "preserve_mean": [True, False, False], + "reductions": [None, None, "mean"], + } + assert meta == exp_meta + # test with explicit params + ec = EnergyCalibrator( + config=config, + loader=get_loader("flash", config=config), + ) + exp_meta.pop("applied") + t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) + + res, meta = ec.add_offsets(t_df, **exp_meta) + np.testing.assert_allclose(res["energy"].values, exp_vals.values) + exp_meta["applied"] = True + assert meta == exp_meta + + # test with different energy scale + + +def test_add_offset_raises(): + pass diff --git a/tests/test_dfops.py b/tests/test_dfops.py index af61ed80..ba1152c1 100644 --- a/tests/test_dfops.py +++ b/tests/test_dfops.py @@ -11,6 +11,7 @@ from sed.core.dfops import drop_column from sed.core.dfops import forward_fill_lazy from sed.core.dfops import map_columns_2d +from sed.core.dfops import offset_by_other_columns N_PTS = 100 @@ -245,3 +246,130 @@ def test_backward_fill_lazy_multiple_iterations(): t_dask_df = backward_fill_lazy(t_dask_df, ["A", "B", "C"], after=2, iterations=2) t_df = t_df.bfill().bfill().bfill().bfill() pd.testing.assert_frame_equal(t_df, t_dask_df.compute()) + + +def test_offset_by_other_columns_functionality(): + """test that the offset_by_other_columns function works as expected""" + df = pd.DataFrame( + { + "target": [10, 20, 30, 40, 50, 60], + "off1": [1, 2, 3, 4, 5, 6], + "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], + "off3": [9.75, 9.85, 9.95, 10.05, 10.15, 10.25], + }, + ) + t_df = ddf.from_pandas(df, npartitions=2) + res = offset_by_other_columns( + df=t_df.copy(), + target_column="target", + offset_columns=["off1"], + signs=[1], + ) + expected = [11, 22, 33, 44, 55, 66] + np.testing.assert_allclose(res["target"].values, expected) + + res = offset_by_other_columns( + df=t_df.copy(), + target_column="target", + offset_columns=["off1", "off2"], + signs=[1, -1], + ) + expected = [10.9, 21.8, 32.7, 43.6, 54.5, 65.4] + np.testing.assert_allclose(res["target"].values, expected) + + res = offset_by_other_columns( + df=t_df.copy(), + target_column="target", + offset_columns=["off3"], + signs=[1], + preserve_mean=True, + ) + expected = [9.75, 19.85, 29.95, 40.05, 50.15, 60.25] + np.testing.assert_allclose(res["target"].values, expected) + + res = offset_by_other_columns( + df=t_df.copy(), + target_column="target", + offset_columns=["off3"], # has mean of 10 + signs=[1], + reductions="mean", + ) + expected = [20, 30, 40, 50, 60, 70] + np.testing.assert_allclose(res["target"].values, expected) + + +def test_offset_by_other_columns_pandas_not_working(): + df = pd.DataFrame( + { + "target": [10, 20, 30, 40, 50, 60], + "off1": [1, 2, 3, 4, 5, 6], + "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], + "off3": [9.75, 9.85, 9.95, 10.05, 10.15, 10.25], + }, + ) + with pytest.raises(NotImplementedError): + res = offset_by_other_columns( + df=df.copy(), + target_column="target", + offset_columns=["off1"], + signs=[1], + ) + expected = [11, 22, 33, 44, 55, 66] + np.testing.assert_allclose(res["target"].values, expected) + + +def test_offset_by_other_columns_rises(): + """Test that the offset_by_other_columns function raises an error when + the specified columns do not exist + """ + df = pd.DataFrame( + { + "target": [10, 20, 30, 40, 50, 60], + "off1": [1, 2, 3, 4, 5, 6], + "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], + "off3": [10.1, 10.2, 10.3, 10.4, 10.5, 10.6], + }, + ) + t_df = ddf.from_pandas(df, npartitions=2) + pytest.raises( + KeyError, + offset_by_other_columns, + df=t_df.copy(), + target_column="nonexistent_column", + offset_columns=["off1"], + signs=[1], + ) + pytest.raises( + KeyError, + offset_by_other_columns, + df=t_df.copy(), + target_column="target", + offset_columns=["off1", "nonexistent_column"], + signs=[1, 1], + ) + pytest.raises( + NotImplementedError, + offset_by_other_columns, + df=t_df.copy(), + target_column="target", + offset_columns=["off1"], + signs=[1], + reductions="not_mean", + ) + pytest.raises( + ValueError, + offset_by_other_columns, + df=t_df.copy(), + target_column="target", + offset_columns=["off1"], + signs=[1, 1], + ) + pytest.raises( + ValueError, + offset_by_other_columns, + df=t_df.copy(), + target_column="target", + offset_columns=["off1"], + signs=[1], + preserve_mean="asd", + ) diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index 9675d266..b15b7ade 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -16,7 +16,6 @@ "import sed\n", "import numpy as np\n", "\n", - "\n", "%matplotlib inline\n", "# %matplotlib ipympl\n", "import matplotlib.pyplot as plt" @@ -465,33 +464,25 @@ "sp.align_dld_sectors()\n", "sp.append_tof_ns_axis()\n", "sp.append_energy_axis()\n", - "sp.apply_energy_offset()" + "sp.add_energy_offset()" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "notebookRunGroups": { - "groupValue": "2" - } - }, + "metadata": {}, "outputs": [], "source": [ "axes = ['sampleBias', 'energy']\n", "bins = [5, 500]\n", - "ranges = [[28,33], [-10,10]]\n", + "ranges = [[28,33], [-20,5]]\n", "res_fit = sp.compute(bins=bins, axes=axes, ranges=ranges)" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "notebookRunGroups": { - "groupValue": "2" - } - }, + "metadata": {}, "outputs": [], "source": [ "plt.figure()\n", @@ -501,13 +492,6 @@ "res_fit.plot.line(x='energy',linewidth=1,alpha=.5,label='all',ax=ax);" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml index 482860e8..6b31514e 100644 --- a/tutorial/hextof_config.yaml +++ b/tutorial/hextof_config.yaml @@ -126,15 +126,15 @@ energy: t0: 3.6049383256584405e-08 E0: -51.289659014865784 # flip sign if switching between kinetic and binding energy energy_scale: kinetic - refid: 0 + refid: 3 offset: - constant: 0.0 + constant: 2.0 sampleBias: sign: 1 - subtract_mean: True + preserve_mean: True monochromatorPhotonEnergy: sign: -1 - subtract_mean: True + preserve_mean: True tofVoltage: sign: -1 - subtract_mean: True + preserve_mean: True From fdf12ec68e5a70e2d2238587e1a09a138b664092 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 16:38:24 +0100 Subject: [PATCH 48/54] linting and bugfix --- sed/calibrator/energy.py | 4 ++-- sed/core/dfops.py | 8 ++++---- tests/calibrator/test_energy.py | 5 +++-- tests/test_dfops.py | 9 ++++++--- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 2b6350ee..85051fa9 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1521,8 +1521,8 @@ def add_offsets( columns.append(k) try: signs.append(v["sign"]) - except KeyError: - raise KeyError(f"Missing sign for offset column {k} in config.") + except KeyError as exc: + raise KeyError(f"Missing sign for offset column {k} in config.") from exc preserve_mean.append(v.get("preserve_mean", False)) reductions.append(v.get("reduction", None)) diff --git a/sed/core/dfops.py b/sed/core/dfops.py index 79bce737..ea2056e8 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -301,7 +301,7 @@ def offset_by_other_columns( offset_columns = [offset_columns] elif not isinstance(offset_columns, Sequence): raise TypeError(f"Invalid type for columns: {type(offset_columns)}") - if any([c not in df.columns for c in offset_columns]): + if any(c not in df.columns for c in offset_columns): raise KeyError(f"{offset_columns} not in dataframe!") if isinstance(signs, int): @@ -310,20 +310,20 @@ def offset_by_other_columns( raise TypeError(f"Invalid type for signs: {type(signs)}") if len(signs) != len(offset_columns): raise ValueError("signs and offset_columns must have the same length!") - signs_dict = {c: s for c, s in zip(offset_columns, signs)} + signs_dict = dict(zip(offset_columns, signs)) if isinstance(reductions, str) or reductions is None: reductions = [reductions] * len(offset_columns) elif not isinstance(reductions, Sequence): raise ValueError(f"reductions must be a string or list of strings! not {type(reductions)}") - if any([r not in ["mean", None] for r in reductions]): + if any(r not in ["mean", None] for r in reductions): raise NotImplementedError("Only reductions currently supported is 'mean'!") if isinstance(preserve_mean, bool): preserve_mean = [preserve_mean] * len(offset_columns) elif not isinstance(preserve_mean, Sequence): raise TypeError(f"Invalid type for preserve_mean: {type(preserve_mean)}") - elif any([not isinstance(p, bool) for p in preserve_mean]): + elif any(not isinstance(p, bool) for p in preserve_mean): raise TypeError(f"Invalid type for preserve_mean: {type(preserve_mean)}") if len(preserve_mean) != len(offset_columns): raise ValueError("preserve_mean and offset_columns must have the same length!") diff --git a/tests/calibrator/test_energy.py b/tests/calibrator/test_energy.py index d39fd260..d135b7c7 100644 --- a/tests/calibrator/test_energy.py +++ b/tests/calibrator/test_energy.py @@ -542,6 +542,7 @@ def test_apply_energy_correction_raises( def test_add_offsets_functionality(): + """test the add_offsets function""" config = parse_config( config={ "energy": { @@ -600,8 +601,7 @@ def test_add_offsets_functionality(): ) exp_meta.pop("applied") t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) - - res, meta = ec.add_offsets(t_df, **exp_meta) + res, meta = ec.add_offsets(t_df, **exp_meta) # pylint disable=unexpected-keyword-arg np.testing.assert_allclose(res["energy"].values, exp_vals.values) exp_meta["applied"] = True assert meta == exp_meta @@ -610,4 +610,5 @@ def test_add_offsets_functionality(): def test_add_offset_raises(): + """test if add_offset raises the correct errors""" pass diff --git a/tests/test_dfops.py b/tests/test_dfops.py index ba1152c1..e41d704e 100644 --- a/tests/test_dfops.py +++ b/tests/test_dfops.py @@ -250,7 +250,7 @@ def test_backward_fill_lazy_multiple_iterations(): def test_offset_by_other_columns_functionality(): """test that the offset_by_other_columns function works as expected""" - df = pd.DataFrame( + pd_df = pd.DataFrame( { "target": [10, 20, 30, 40, 50, 60], "off1": [1, 2, 3, 4, 5, 6], @@ -258,7 +258,7 @@ def test_offset_by_other_columns_functionality(): "off3": [9.75, 9.85, 9.95, 10.05, 10.15, 10.25], }, ) - t_df = ddf.from_pandas(df, npartitions=2) + t_df = ddf.from_pandas(pd_df, npartitions=2) res = offset_by_other_columns( df=t_df.copy(), target_column="target", @@ -299,6 +299,9 @@ def test_offset_by_other_columns_functionality(): def test_offset_by_other_columns_pandas_not_working(): + """test that the offset_by_other_columns function raises an error when + used with pandas + """ df = pd.DataFrame( { "target": [10, 20, 30, 40, 50, 60], @@ -365,7 +368,7 @@ def test_offset_by_other_columns_rises(): signs=[1, 1], ) pytest.raises( - ValueError, + TypeError, offset_by_other_columns, df=t_df.copy(), target_column="target", From b8911eaad38c23f734cb0067e00d2e91ddd90529 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 21:37:44 +0100 Subject: [PATCH 49/54] linting and more tests --- sed/calibrator/energy.py | 2 + tests/calibrator/test_energy.py | 91 +++++++++++++++++++++++++++------ tests/test_dfops.py | 28 +++++----- 3 files changed, 92 insertions(+), 29 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 85051fa9..2a1c8208 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -1544,6 +1544,8 @@ def add_offsets( signs = [signs] elif not isinstance(signs, Sequence): raise TypeError(f"Invalid type for signs: {type(signs)}") + if not all(isinstance(s, int) for s in signs): + raise TypeError(f"Invalid type for signs: {type(signs)}") # flip signs if binding energy scale signs = [s * scale_sign for s in signs] diff --git a/tests/calibrator/test_energy.py b/tests/calibrator/test_energy.py index d135b7c7..37724c75 100644 --- a/tests/calibrator/test_energy.py +++ b/tests/calibrator/test_energy.py @@ -4,6 +4,7 @@ import glob import itertools import os +from copy import deepcopy from importlib.util import find_spec from typing import Any from typing import Dict @@ -564,7 +565,14 @@ def test_add_offsets_functionality(): user_config={}, system_config={}, ) - + params = { + "constant": 1, + "energy_column": "energy", + "columns": ["off1", "off2", "off3"], + "signs": [1, -1, 1], + "preserve_mean": [True, False, False], + "reductions": [None, None, "mean"], + } df = pd.DataFrame( { "energy": [10, 20, 30, 40, 50, 60], @@ -584,31 +592,84 @@ def test_add_offsets_functionality(): exp_vals -= df["off2"] exp_vals += df["off3"].mean() np.testing.assert_allclose(res["energy"].values, exp_vals.values) - exp_meta = { - "applied": True, - "constant": 1, - "energy_column": "energy", - "columns": ["off1", "off2", "off3"], - "signs": [1, -1, 1], - "preserve_mean": [True, False, False], - "reductions": [None, None, "mean"], - } + exp_meta = params.copy() + exp_meta["applied"] = True assert meta == exp_meta # test with explicit params ec = EnergyCalibrator( config=config, loader=get_loader("flash", config=config), ) - exp_meta.pop("applied") t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) - res, meta = ec.add_offsets(t_df, **exp_meta) # pylint disable=unexpected-keyword-arg + res, meta = ec.add_offsets(t_df, **params) # pylint disable=unexpected-keyword-arg np.testing.assert_allclose(res["energy"].values, exp_vals.values) - exp_meta["applied"] = True - assert meta == exp_meta + params["applied"] = True + assert meta == params # test with different energy scale def test_add_offset_raises(): """test if add_offset raises the correct errors""" - pass + cfg_dict = { + "energy": { + "calibration": { + "energy_scale": "kinetic", + }, + "offset": { + "constant": 1, + "off1": {"sign": -1, "preserve_mean": True}, + "off2": {"sign": -1, "preserve_mean": False}, + "off3": {"sign": 1, "preserve_mean": False, "reduction": "mean"}, + }, + }, + } + + df = pd.DataFrame( + { + "energy": [10, 20, 30, 40, 50, 60], + "off1": [1, 2, 3, 4, 5, 6], + "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], + "off3": [10.1, 10.2, 10.3, 10.4, 10.5, 10.6], + }, + ) + t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) + # no sign in config + with pytest.raises(KeyError): + cfg = deepcopy(cfg_dict) + cfg["energy"]["offset"]["off1"].pop("sign") + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=cfg, loader=get_loader("flash", config=config)) + _ = ec.add_offsets(t_df) + + # no energy scale + with pytest.raises(ValueError): + cfg = deepcopy(cfg_dict) + cfg["energy"]["calibration"].pop("energy_scale") + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=cfg, loader=get_loader("flash", config=config)) + _ = ec.add_offsets(t_df) + + # invalid energy scale + with pytest.raises(ValueError): + cfg = deepcopy(cfg_dict) + cfg["energy"]["calibration"]["energy_scale"] = "wrong_value" + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=cfg, loader=get_loader("flash", config=config)) + _ = ec.add_offsets(t_df) + + # invalid sign + with pytest.raises(TypeError): + cfg = deepcopy(cfg_dict) + cfg["energy"]["offset"]["off1"]["sign"] = "wrong_type" + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=cfg, loader=get_loader("flash", config=config)) + _ = ec.add_offsets(t_df) + + # invalid constant + with pytest.raises(TypeError): + cfg = deepcopy(cfg_dict) + cfg["energy"]["offset"]["constant"] = "wrong_type" + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=cfg, loader=get_loader("flash", config=config)) + _ = ec.add_offsets(t_df) diff --git a/tests/test_dfops.py b/tests/test_dfops.py index e41d704e..59d5cd1a 100644 --- a/tests/test_dfops.py +++ b/tests/test_dfops.py @@ -290,7 +290,7 @@ def test_offset_by_other_columns_functionality(): res = offset_by_other_columns( df=t_df.copy(), target_column="target", - offset_columns=["off3"], # has mean of 10 + offset_columns=["off3"], # off3 has mean of 10 signs=[1], reductions="mean", ) @@ -302,7 +302,7 @@ def test_offset_by_other_columns_pandas_not_working(): """test that the offset_by_other_columns function raises an error when used with pandas """ - df = pd.DataFrame( + pd_df = pd.DataFrame( { "target": [10, 20, 30, 40, 50, 60], "off1": [1, 2, 3, 4, 5, 6], @@ -311,29 +311,29 @@ def test_offset_by_other_columns_pandas_not_working(): }, ) with pytest.raises(NotImplementedError): - res = offset_by_other_columns( - df=df.copy(), + _ = offset_by_other_columns( + df=pd_df, target_column="target", offset_columns=["off1"], signs=[1], ) - expected = [11, 22, 33, 44, 55, 66] - np.testing.assert_allclose(res["target"].values, expected) def test_offset_by_other_columns_rises(): """Test that the offset_by_other_columns function raises an error when the specified columns do not exist """ - df = pd.DataFrame( - { - "target": [10, 20, 30, 40, 50, 60], - "off1": [1, 2, 3, 4, 5, 6], - "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], - "off3": [10.1, 10.2, 10.3, 10.4, 10.5, 10.6], - }, + t_df = ddf.from_pandas( + pd.DataFrame( + { + "target": [10, 20, 30, 40, 50, 60], + "off1": [1, 2, 3, 4, 5, 6], + "off2": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6], + "off3": [10.1, 10.2, 10.3, 10.4, 10.5, 10.6], + }, + ), + npartitions=2, ) - t_df = ddf.from_pandas(df, npartitions=2) pytest.raises( KeyError, offset_by_other_columns, From 2538e2830c13bd7d93ed13c8d437053c8d109891 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 21:57:47 +0100 Subject: [PATCH 50/54] test tof_ns --- sed/calibrator/energy.py | 2 -- tests/calibrator/test_energy.py | 30 ++++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 2a1c8208..81ce95e2 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -903,8 +903,6 @@ def append_tof_ns_axis( ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: """Converts the time-of-flight time from steps to time in ns. - # TODO: needs tests - Args: df (Union[pd.DataFrame, dask.dataframe.DataFrame]): Dataframe to convert. tof_column (str, optional): Name of the column containing the diff --git a/tests/calibrator/test_energy.py b/tests/calibrator/test_energy.py index 37724c75..4b33fb15 100644 --- a/tests/calibrator/test_energy.py +++ b/tests/calibrator/test_energy.py @@ -271,6 +271,36 @@ def test_append_energy_axis_raises(): ) +def test_append_tof_ns_axis(): + """Function to test if the tof_ns calibration is correctly applied. + TODO: add further tests once the discussion about units is done. + """ + cfg = { + "dataframe": { + "tof_column": "t", + "tof_ns_column": "t_ns", + "tof_binning": 1, + "tof_binwidth": 1e-9, + }, + } + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + loader = get_loader(loader_name="mpes", config=config) + + # from kwds + df, _ = loader.read_dataframe(folders=df_folder, collect_metadata=False) + ec = EnergyCalibrator(config=config, loader=loader) + df, _ = ec.append_tof_ns_axis(df, binwidth=2e-9, binning=1) + assert config["dataframe"]["tof_ns_column"] in df.columns + np.testing.assert_allclose(df[ec.tof_column], df[ec.tof_ns_column] / 4) + + # from config + df, _ = loader.read_dataframe(folders=df_folder, collect_metadata=False) + ec = EnergyCalibrator(config=config, loader=loader) + df, _ = ec.append_tof_ns_axis(df) + assert config["dataframe"]["tof_ns_column"] in df.columns + np.testing.assert_allclose(df[ec.tof_column], df[ec.tof_ns_column] / 2) + + amplitude = 2.5 # pylint: disable=invalid-name center = (730, 730) sample = np.array( From 3dafe4ea5a265a9a1a179f7f41eeb0ab64ba37f1 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 22:44:02 +0100 Subject: [PATCH 51/54] update notebook and add offset to save ecalib --- sed/core/processor.py | 11 +- tutorial/5 - hextof workflow.ipynb | 181 +++++------------------------ tutorial/hextof_config.yaml | 19 --- 3 files changed, 35 insertions(+), 176 deletions(-) diff --git a/sed/core/processor.py b/sed/core/processor.py index 263f1ca1..9b90fe8b 100644 --- a/sed/core/processor.py +++ b/sed/core/processor.py @@ -1117,7 +1117,13 @@ def save_energy_calibration( "Energy calibration parameters not found, need to generate parameters first!", ) from exc - config = {"energy": {"calibration": calibration}} + config = { + "energy": { + "calibration": calibration, + }, + } + if isinstance(self.ec.offset, dict): + config["energy"]["offset"] = self.ec.offset save_config(config, filename, overwrite) # 4. Apply energy calibration to the dataframe @@ -1204,7 +1210,8 @@ def add_energy_offset( metadata, "add_energy_offset", # TODO: allow only appending when no offset along this column(s) was applied - duplicate_policy="raise", + # TODO: clear memory of modifications if the energy axis is recalculated + duplicate_policy="append", ) self._dataframe = df else: diff --git a/tutorial/5 - hextof workflow.ipynb b/tutorial/5 - hextof workflow.ipynb index b15b7ade..e17a8a73 100644 --- a/tutorial/5 - hextof workflow.ipynb +++ b/tutorial/5 - hextof workflow.ipynb @@ -44,7 +44,8 @@ }, "outputs": [], "source": [ - "config_file = Path(sed.__file__).parent.parent/'tutorial/hextof_config.yaml'\n", + "local_path = Path(sed.__file__).parent.parent/'tutorial/'\n", + "config_file = local_path/'hextof_config.yaml'\n", "assert config_file.exists()" ] }, @@ -148,19 +149,7 @@ "metadata": {}, "outputs": [], "source": [ - "plt.figure()\n", - "dres = res.copy()\n", - "dres.data = np.gradient(res.data, axis=1)\n", - "dres.plot.line(x='dldTimeSteps')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.load_bias_series(binned_data=dres)" + "sp.load_bias_series(binned_data=res)" ] }, { @@ -180,85 +169,17 @@ "metadata": {}, "outputs": [], "source": [ - "axes = ['sampleBias', 'dldTimeSteps']\n", - "bins = [5, 2000]\n", - "ranges = [[28,33], [0, 2000]]\n", - "res = sp.compute(bins=bins, axes=axes, ranges=ranges)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure()\n", - "res.plot.line(x='dldTimeSteps')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# ref_id=0\n", - "# ref_energy=0\n", - "# sp.calibrate_energy_axis(\n", - "# ref_id=ref_id,\n", - "# ref_energy=ref_energy,\n", - "# method=\"lmfit\",\n", - "# energy_scale='kinetic',\n", - "# )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sed.calibrator.energy import tof2ev, tof2ns" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ph_peak = 1e-9 * tof2ns(binwidth=sp.config['dataframe']['tof_binwidth'], binning=3,t=219)\n", "sp.calibrate_energy_axis(\n", - " ref_id=0,\n", - " ref_energy=0,\n", + " ref_id=2,\n", + " ref_energy=-1,\n", " method=\"lmfit\",\n", " energy_scale='kinetic',\n", - " d={'value':1.,'min': .8, 'max':5, 'vary':True},\n", - " t0={'value':ph_peak, 'min': ph_peak*0.1, 'max': ph_peak*1.9, 'vary':False},\n", + " d={'value':1.,'min': .2, 'max':1.0, 'vary':True},\n", + " t0={'value':5e-7, 'min': 1e-7, 'max': 1e-6, 'vary':True},\n", " E0={'value': 0., 'min': -100, 'max': 100, 'vary': True},\n", - "\n", ")" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# tof = np.linspace(4000,5000,500)\n", - "# plt.figure()\n", - "# plt.plot(tof, tof2ev(\n", - "# t=tof, \n", - "# tof_distance=1, \n", - "# time_offset=1e-9*tof2ns(binwidth=sp.config['dataframe']['tof_binwidth'], binning=3,t=218), \n", - "# energy_offset=0,\n", - "# binning=3,\n", - "# energy_scale='kinetic',\n", - "# binwidth=sp.config['dataframe']['tof_binwidth'])\n", - "# )" - ] - }, { "cell_type": "code", "execution_count": null, @@ -268,15 +189,6 @@ "sp.append_energy_axis()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sp.ec.calibration" - ] - }, { "cell_type": "code", "execution_count": null, @@ -324,14 +236,23 @@ "metadata": {}, "outputs": [], "source": [ - "sp.apply_energy_offset(\n", - " constant=2,\n", + "sp.add_energy_offset(\n", + " constant=0,\n", " columns=['sampleBias','monochromatorPhotonEnergy','tofVoltage'],\n", " signs=[1,-1,-1],\n", - " subtract_mean=True,\n", + " preserve_mean=True,\n", ")" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sp.dataframe" + ] + }, { "cell_type": "code", "execution_count": null, @@ -361,7 +282,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Fit the falling edge at E=0 to evaluate the quality of the energy calibration" + "### save the calibration parameters\n", + "This is currently overwriting all other values in the config file you point at. Do not overwrite local settings! \n", + "This should be fixed in the future." ] }, { @@ -370,60 +293,7 @@ "metadata": {}, "outputs": [], "source": [ - "from lmfit.models import Gaussian2dModel, LorentzianModel, LinearModel" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "curve = res_fit.mean('sampleBias').sel(energy=slice(-0.15,1))\n", - "x = curve.energy\n", - "y = -np.gradient(curve.data)\n", - "full_y = np.gradient(res_fit.data, axis=1)\n", - "gm = LorentzianModel()\n", - "# lin = LinearModel()\n", - "model = gm #+ lin\n", - "params = gm.guess(y, x=x)\n", - "# params.update(lin.make_params())\n", - "result = model.fit(y, params, x=x)\n", - "\n", - "plt.figure()\n", - "plt.plot(x, y, 'bo')\n", - "plt.plot(x, result.best_fit, 'r-')\n", - "result.best_values\n", - "best = result.params" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "{'amplitude': 62.649384173227375,\n", - " 'center': 0.07618539040289204,\n", - " 'sigma': 0.0948828689156287}" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.figure()\n", - "for i in range(len(res_fit.sampleBias)):\n", - " x = res_fit.isel(sampleBias=i).sel(energy=slice(-0.15,1)).energy\n", - " y = res_fit.isel(sampleBias=i).sel(energy=slice(-0.15,1)).data\n", - " y = -np.gradient(y)\n", - " y = y/np.max(y)\n", - " result = model.fit(y, best, x=x)\n", - " print(f'{i}: {result.best_values}')\n", - " plt.plot(x, y+i, 'bo')\n", - " plt.plot(x, result.best_fit+i, 'r-')\n" + "sp.save_energy_calibration(filename=local_path/'energy_calibration.yaml')" ] }, { @@ -443,11 +313,12 @@ }, "outputs": [], "source": [ - "config={\"core\": {\"paths\": {\n", + "config_dict={\"core\": {\"paths\": {\n", " \"data_raw_dir\": \"/asap3/flash/gpfs/pg2/2023/data/11019101/raw/hdf/offline/fl1user3\", \n", " \"data_parquet_dir\": \"/home/agustsss/temp/sed_parquet/\"\n", "}}}\n", - "sp = SedProcessor(runs=[44797], config=config, user_config=config_file, system_config={}, collect_metadata=False)" + "# config = sed.core.config.parse_config(config=config_dict, folder_config=local_path/'energy_calibration.yaml', user_config={}, system_config={})\n", + "sp = SedProcessor(runs=[44797], config=config_dict, folder_config=local_path/'energy_calibration.yaml', user_config=config_file, collect_metadata=False)" ] }, { diff --git a/tutorial/hextof_config.yaml b/tutorial/hextof_config.yaml index 6b31514e..4e16ecca 100644 --- a/tutorial/hextof_config.yaml +++ b/tutorial/hextof_config.yaml @@ -119,22 +119,3 @@ dataframe: pg2: "/asap3/flash/gpfs/pg2/" hextof: "/asap3/fs-flash-o/gpfs/hextof/" wespe: "/asap3/fs-flash-o/gpfs/wespe/" - -energy: - calibration: - d: 2.7342492951998603 - t0: 3.6049383256584405e-08 - E0: -51.289659014865784 # flip sign if switching between kinetic and binding energy - energy_scale: kinetic - refid: 3 - offset: - constant: 2.0 - sampleBias: - sign: 1 - preserve_mean: True - monochromatorPhotonEnergy: - sign: -1 - preserve_mean: True - tofVoltage: - sign: -1 - preserve_mean: True From 8308eba6e540ee66025627a61f741935836f873d Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 23:14:19 +0100 Subject: [PATCH 52/54] test sector_alignment --- tests/calibrator/test_energy.py | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/tests/calibrator/test_energy.py b/tests/calibrator/test_energy.py index 4b33fb15..9d885658 100644 --- a/tests/calibrator/test_energy.py +++ b/tests/calibrator/test_energy.py @@ -703,3 +703,53 @@ def test_add_offset_raises(): config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) ec = EnergyCalibrator(config=cfg, loader=get_loader("flash", config=config)) _ = ec.add_offsets(t_df) + + +def test_align_dld_sectors(): + cfg_dict = { + "dataframe": { + "tof_column": "dldTimeSteps", + "sector_id_column": "dldSectorId", + "sector_delays": [-0.35, -0.25, -0.15, -0.05, 0.05, 0.15, 0.25, 0.35], + }, + } + df = pd.DataFrame( + { + "dldTimeSteps": [1, 2, 3, 4, 5, 6, 7, 8], + "dldSectorId": [0, 1, 2, 3, 4, 5, 6, 7], + }, + ) + # from config + config = parse_config(config=cfg_dict, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=config, loader=get_loader("flash", config=config)) + t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) + res, meta = ec.align_dld_sectors(t_df) + assert meta["applied"] is True + assert meta["sector_delays"] == cfg_dict["dataframe"]["sector_delays"] + np.testing.assert_allclose( + res["dldTimeSteps"].values, + np.array([1, 2, 3, 4, 5, 6, 7, 8]) - np.array(cfg_dict["dataframe"]["sector_delays"]), + ) + + # from kwds + config = parse_config(config={}, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=cfg_dict, loader=get_loader("flash", config=config)) + t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) + res, meta = ec.align_dld_sectors( + t_df, + sector_delays=cfg_dict["dataframe"]["sector_delays"], + sector_id_column="dldSectorId", + ) + assert meta["applied"] is True + assert meta["sector_delays"] == cfg_dict["dataframe"]["sector_delays"] + np.testing.assert_allclose( + res["dldTimeSteps"].values, + np.array([1, 2, 3, 4, 5, 6, 7, 8]) - np.array(cfg_dict["dataframe"]["sector_delays"]), + ) + with pytest.raises(ValueError): + cfg = deepcopy(cfg_dict) + cfg["dataframe"].pop("sector_delays") + config = parse_config(config=cfg, folder_config={}, user_config={}, system_config={}) + ec = EnergyCalibrator(config=config, loader=get_loader("flash", config=config)) + t_df = dask.dataframe.from_pandas(df.copy(), npartitions=2) + res, meta = ec.align_dld_sectors(t_df) From 956de394e70e22d63e6eeb37d523acdf79ead732 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Wed, 1 Nov 2023 23:20:49 +0100 Subject: [PATCH 53/54] yet an other linting --- tests/calibrator/test_energy.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/calibrator/test_energy.py b/tests/calibrator/test_energy.py index 9d885658..212a64e0 100644 --- a/tests/calibrator/test_energy.py +++ b/tests/calibrator/test_energy.py @@ -706,6 +706,7 @@ def test_add_offset_raises(): def test_align_dld_sectors(): + """test functionality and error handling of align_dld_sectors""" cfg_dict = { "dataframe": { "tof_column": "dldTimeSteps", From 266444f6a7b3e9271ccb5dc1881b2938496dbc23 Mon Sep 17 00:00:00 2001 From: Steinn Ymir Agustsson Date: Thu, 2 Nov 2023 14:06:27 +0100 Subject: [PATCH 54/54] apply suggested changes --- sed/calibrator/energy.py | 10 +++++----- sed/core/dfops.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sed/calibrator/energy.py b/sed/calibrator/energy.py index 81ce95e2..2c1f9a84 100644 --- a/sed/calibrator/energy.py +++ b/sed/calibrator/energy.py @@ -910,9 +910,9 @@ def append_tof_ns_axis( tof_ns_column (str, optional): Name of the column to store the time-of-flight in nanoseconds. Defaults to config["dataframe"]["tof_ns_column"]. binwidth (float, optional): Time-of-flight binwidth in ns. - Defaults to config["energy"]["binwidth"]. + Defaults to config["energy"]["tof_binwidth"]. binning (int, optional): Time-of-flight binning factor. - Defaults to config["energy"]["binning"]. + Defaults to config["energy"]["tof_binning"]. Returns: dask.dataframe.DataFrame: Dataframe with the new columns. @@ -1422,11 +1422,11 @@ def gather_correction_metadata(self, correction: dict = None) -> dict: def align_dld_sectors( self, - df: Union[pd.DataFrame, dask.dataframe.DataFrame], + df: dask.dataframe.DataFrame, tof_column: str = None, sector_id_column: str = None, sector_delays: np.ndarray = None, - ) -> Tuple[Union[pd.DataFrame, dask.dataframe.DataFrame], dict]: + ) -> Tuple[dask.dataframe.DataFrame, dict]: """Aligns the time-of-flight axis of the different sections of a detector. Args: @@ -1563,7 +1563,7 @@ def add_offsets( metadata["reductions"] = reductions # apply constant - if isinstance(constant, (int, float)): + if isinstance(constant, (int, float, np.integer, np.floating)): df[energy_column] = df.map_partitions( # flip sign if binding energy scale lambda x: x[energy_column] + constant * scale_sign, diff --git a/sed/core/dfops.py b/sed/core/dfops.py index ea2056e8..aec8fed2 100644 --- a/sed/core/dfops.py +++ b/sed/core/dfops.py @@ -281,7 +281,7 @@ def offset_by_other_columns( df (dask.dataframe.DataFrame): Dataframe to use. Currently supports only dask dataframes. target_column (str): Name of the column to apply the offset to. offset_columns (str): Name of the column(s) to use for the offset. - signs (int): Sign of the offset. Defaults to 1. + signs (int): Sign of the offset. reductions (str, optional): Reduction function to use for the offset. Defaults to "mean". Currently, only mean is supported. preserve_mean (bool, optional): Whether to subtract the mean of the offset column.