Creating Custom Parameter Variations
Quick Start: Custom Variation
Create a custom parameter variation in 3 steps:
from pyetsimul.simulation import GenericEyeVariation
class MyCustomVariation(GenericEyeVariation):
"""Custom variation that changes any eye parameter."""
def __init__(self, value_range: list[float], num_steps: int = 10):
# Parameter path in dot notation (e.g., "cornea.radius", "pupil.diameter")
super().__init__("parameter.path", value_range, num_steps)
def describe(self) -> str:
"""Description for this variation."""
min_val, max_val = self.value_range
return f"custom parameter {min_val} to {max_val} ({self.num_steps} steps)"
def apply_to_eye(self, eye, value: float) -> None:
"""Apply the parameter value to the eye."""
# Example: eye.cornea.radius = value
# Example: eye.pupil.diameter = value
pass
Real Example: Corneal K Parameter
from pyetsimul.core.cornea import ConicCornea
class ConicCorneaKVariation(GenericEyeVariation):
def __init__(self, k_range: list[float], num_steps: int = 10):
super().__init__("cornea.anterior_k", k_range, num_steps)
def describe(self) -> str:
min_val, max_val = self.value_range
return f"conic cornea K parameter {min_val:.3f} to {max_val:.3f} ({self.num_steps} steps)"
def apply_to_eye(self, eye, value: float) -> None:
eye.cornea.anterior_k = value
# Usage
variation = ConicCorneaKVariation([-0.05, -0.15], 5)
Run Your Custom Variation
from pyetsimul.simulation import DataGenerationStrategy, ExperimentConfig
from pyetsimul.core import Eye, Camera, Light
# Create experiment config
config = ExperimentConfig(
experiment_name="My Custom Experiment",
eyes=[Eye()], # Add your custom eye setup if needed
cameras=[Camera()],
lights=[Light()],
output_dir="outputs",
)
# Generate data
data_gen = DataGenerationStrategy(
eyes=config.eyes,
cameras=config.cameras,
lights=config.lights,
experiment_name="My Custom Experiment", # Any name - auto-sanitized
save_to_file=True,
)
dataset = data_gen.execute(variation)
That’s it! The framework handles the rest automatically.