Module pyangstrom.wrappers.data_extraction

Expand source code
from pathlib import Path
from typing import TypedDict
from collections.abc import Generator

import pandas as pd
import numpy as np
from pyangstromRT.blmcmc import multi_chain_Metropolis_Hasting

from pyangstrom.wrappers.helpers import (
    format_ht_phase_amp_loc_info,
    iter_frame_path,
)


class McmcConfig(TypedDict):
    """For mcmc_analysis"""
    rec_name: str
    L: float
    r: float
    cp: float
    rho: float
    x0_pixels: int
    y0_pixels: int
    R0_pixels: int
    R_analysis_pixels: int
    gap_pixels: int
    anguler_range: str
    f_heating: float
    exp_amp_phase_extraction_method: str
    N_sample: int
    N_chains: int

class FrameConfig(TypedDict):
    """For get_first_frame"""
    rec_name: str

def mcmc_analysis(
        working_directory: Path | str,
        dict_config: McmcConfig,
        df_rt_amp_phase: pd.DataFrame,
        params_init=[ # Initial estimates of:
             0,     # log(alpha)
             1,     # log(h)
            -2,     # log(sigma_dA)
            -2,     # log(sigma_dP)
             0.2,   # rho
        ],
        prior_log_mu=[ # Prior beliefs of:
             0,     # log(alpha)
             1,     # log(h)
            -2,     # log(sigma_dA)
            -2,     # log(sigma_dP)
             0.5,   # rho
        ],
        prior_log_sigma=[ # Variance of:
            2,  # log(alpha)
            2,  # log(h)
            2,  # log(sigma_dA)
            2,  # log(sigma_dP)
            2,  # rho
        ],
        transition_sigma=[
            0.01,
            0.01,
            0.02,
            0.02,
            0.02,
        ],
        *,
        force_rerun=False,
) -> pd.DataFrame:
    p_wd = Path(working_directory)
    p_results = p_wd / 'mcmc_results_dump' / f'mcmc_{dict_config["N_sample"]}_{format_ht_phase_amp_loc_info(**dict_config)}'
    if force_rerun or not p_results.is_file():
        multi_chain_Metropolis_Hasting(
            directory_path=f'{p_wd}/',
            df_phase_diff_amp_ratio=df_rt_amp_phase,
            phase_amp_loc_info=format_ht_phase_amp_loc_info(**dict_config),
            params_init=params_init,
            prior_log_mu=prior_log_mu,
            prior_log_sigma=prior_log_sigma,
            transition_sigma=transition_sigma,
            analysis_region=dict_config,
            material_properties=dict_config,
            N_sample=dict_config['N_sample'],
            N_chains=dict_config['N_chains'],
            result_name=None, # unused
        )
    df_mcmc_results = pd.read_csv(p_results, index_col=0)
    return df_mcmc_results

def get_frame(
        p_frame: Path,
) -> np.ndarray:
    return np.genfromtxt(
        p_frame,
        delimiter=',',
        skip_header=6,
    )

def get_first_frame(
        working_directory: Path | str,
        dict_config: FrameConfig,
) -> np.ndarray:
    p_wd = Path(working_directory)
    p_ir = p_wd / 'temperature data' / dict_config['rec_name']
    arr_first_frame = get_frame(next(p_ir.iterdir()))
    return arr_first_frame

def get_all_frames(
        working_directory: Path | str,
        dict_config: FrameConfig,
) -> Generator:
    p_wd = Path(working_directory)
    p_ir = p_wd / 'temperature data' / dict_config['rec_name']
    for p_frame in iter_frame_path(p_ir):
        yield get_frame(p_frame)

Functions

def get_all_frames(working_directory: pathlib.Path | str, dict_config: FrameConfig) ‑> collections.abc.Generator
Expand source code
def get_all_frames(
        working_directory: Path | str,
        dict_config: FrameConfig,
) -> Generator:
    p_wd = Path(working_directory)
    p_ir = p_wd / 'temperature data' / dict_config['rec_name']
    for p_frame in iter_frame_path(p_ir):
        yield get_frame(p_frame)
def get_first_frame(working_directory: pathlib.Path | str, dict_config: FrameConfig) ‑> numpy.ndarray
Expand source code
def get_first_frame(
        working_directory: Path | str,
        dict_config: FrameConfig,
) -> np.ndarray:
    p_wd = Path(working_directory)
    p_ir = p_wd / 'temperature data' / dict_config['rec_name']
    arr_first_frame = get_frame(next(p_ir.iterdir()))
    return arr_first_frame
def get_frame(p_frame: pathlib.Path) ‑> numpy.ndarray
Expand source code
def get_frame(
        p_frame: Path,
) -> np.ndarray:
    return np.genfromtxt(
        p_frame,
        delimiter=',',
        skip_header=6,
    )
def mcmc_analysis(working_directory: pathlib.Path | str, dict_config: McmcConfig, df_rt_amp_phase: pandas.core.frame.DataFrame, params_init=[0, 1, -2, -2, 0.2], prior_log_mu=[0, 1, -2, -2, 0.5], prior_log_sigma=[2, 2, 2, 2, 2], transition_sigma=[0.01, 0.01, 0.02, 0.02, 0.02], *, force_rerun=False) ‑> pandas.core.frame.DataFrame
Expand source code
def mcmc_analysis(
        working_directory: Path | str,
        dict_config: McmcConfig,
        df_rt_amp_phase: pd.DataFrame,
        params_init=[ # Initial estimates of:
             0,     # log(alpha)
             1,     # log(h)
            -2,     # log(sigma_dA)
            -2,     # log(sigma_dP)
             0.2,   # rho
        ],
        prior_log_mu=[ # Prior beliefs of:
             0,     # log(alpha)
             1,     # log(h)
            -2,     # log(sigma_dA)
            -2,     # log(sigma_dP)
             0.5,   # rho
        ],
        prior_log_sigma=[ # Variance of:
            2,  # log(alpha)
            2,  # log(h)
            2,  # log(sigma_dA)
            2,  # log(sigma_dP)
            2,  # rho
        ],
        transition_sigma=[
            0.01,
            0.01,
            0.02,
            0.02,
            0.02,
        ],
        *,
        force_rerun=False,
) -> pd.DataFrame:
    p_wd = Path(working_directory)
    p_results = p_wd / 'mcmc_results_dump' / f'mcmc_{dict_config["N_sample"]}_{format_ht_phase_amp_loc_info(**dict_config)}'
    if force_rerun or not p_results.is_file():
        multi_chain_Metropolis_Hasting(
            directory_path=f'{p_wd}/',
            df_phase_diff_amp_ratio=df_rt_amp_phase,
            phase_amp_loc_info=format_ht_phase_amp_loc_info(**dict_config),
            params_init=params_init,
            prior_log_mu=prior_log_mu,
            prior_log_sigma=prior_log_sigma,
            transition_sigma=transition_sigma,
            analysis_region=dict_config,
            material_properties=dict_config,
            N_sample=dict_config['N_sample'],
            N_chains=dict_config['N_chains'],
            result_name=None, # unused
        )
    df_mcmc_results = pd.read_csv(p_results, index_col=0)
    return df_mcmc_results

Classes

class FrameConfig (*args, **kwargs)

For get_first_frame

Expand source code
class FrameConfig(TypedDict):
    """For get_first_frame"""
    rec_name: str

Ancestors

  • builtins.dict

Class variables

var rec_name : str
class McmcConfig (*args, **kwargs)

For mcmc_analysis

Expand source code
class McmcConfig(TypedDict):
    """For mcmc_analysis"""
    rec_name: str
    L: float
    r: float
    cp: float
    rho: float
    x0_pixels: int
    y0_pixels: int
    R0_pixels: int
    R_analysis_pixels: int
    gap_pixels: int
    anguler_range: str
    f_heating: float
    exp_amp_phase_extraction_method: str
    N_sample: int
    N_chains: int

Ancestors

  • builtins.dict

Class variables

var L : float
var N_chains : int
var N_sample : int
var R0_pixels : int
var R_analysis_pixels : int
var anguler_range : str
var cp : float
var exp_amp_phase_extraction_method : str
var f_heating : float
var gap_pixels : int
var r : float
var rec_name : str
var rho : float
var x0_pixels : int
var y0_pixels : int