Source code for slitflow.loc.random
import numpy as np
import pandas as pd
from ..tbl.table import Table
from .. import RANDOM_SEED
from ..fun.misc import reduce_list as rl
np.random.seed(RANDOM_SEED)
[docs]class UniformRect(Table):
"""Uniform distribution inside rectangle region.
Args:
reqs[0] (Index): Index Table class.
param["pitch"] (float): Length per pixel.
param["n_point"] (int): Number of points in one frame.
param["lims"] (list of list of float): List of [lower, upper] limit for
each dimension in length_unit.
param["split_depth"] (int): File split depth number.
param["length_unit"] (str): Unit string for column names such as "um",
"nm".
param["dimension"] (int): Position dimension 1=x, 2=xy, 3=xyz.
param["seed"] (int, optional): Random seed.
Returns:
Table: Expanded Table including point number and coordinates
"""
[docs] def set_info(self, param):
self.info.copy_req()
self.info.add_column(None, "pt_no", "int32", "num", "Point number")
self.info.add_param("length_unit", param["length_unit"],
"str", "Unit of length")
self.info.add_param("pitch", param["pitch"], param["length_unit"]
+ "/pix", "Length per pixel")
dims = ["x", "y", "z"]
calc_cols = []
for i in range(param["dimension"]):
self.info.add_column(
0, dims[i] + "_" + param["length_unit"], "float32",
param["length_unit"], dims[i] + "-coordinate")
calc_cols.append(dims[i] + "_" + param["length_unit"])
self.info.add_param("calc_cols", calc_cols,
"str", "Calculation column names")
if "seed" in param:
self.info.add_param("seed", param["seed"], "int", "Random seed")
np.random.seed(param["seed"])
self.info.add_param("n_point", param["n_point"], "count",
"Number of points in one frame")
self.info.add_param("lims", param["lims"],
"list of float",
"List of [lower, upper] limit for each dimension")
self.info.set_split_depth(param["split_depth"])
[docs] @ staticmethod
def process(reqs, param):
"""Uniform distribution inside rectangle region.
Args:
reqs[0] (pandas.DataFrame): Index DataFrame.
param["n_point"] (int): Number of points in one frame.
param["lims"] (list of list of float): List of [lower, upper] limit
for each dimension.
param["calc_cols"] (list of str): Column name of each coordinate.
Returns:
pandas.DataFrame: Expanded table including point no and coordinates
"""
df_req = reqs[0].copy()
df_list = []
for _, df in df_req.groupby(rl(df_req.columns.values.tolist())):
df_cols = []
df_cols.append(pd.DataFrame(
range(1, param["n_point"] + 1), columns=["pt_no"]))
for col, lims in zip(param["calc_cols"], param["lims"]):
x0 = np.random.rand(param["n_point"]) * (lims[1] - lims[0]) \
+ lims[0]
df_cols.append(pd.DataFrame(x0, columns=[col]))
df_add = pd.concat(df_cols, axis=1)
df_index = df.reset_index(drop=True)
index_names = df_index.columns
df_new = pd.concat([df.reset_index(drop=True), df_add], axis=1)
df_new = df_new.fillna(method="ffill")
df_new[index_names] = df_new[index_names].astype(int)
df_list.append(df_new)
return pd.concat(df_list)