artist.scenario.surface_generator
Attributes
A logger for the surface generator. |
Classes
Initialize the surface generator. |
Module Contents
- artist.scenario.surface_generator.log
A logger for the surface generator.
- class artist.scenario.surface_generator.SurfaceGenerator(number_of_control_points: torch.Tensor = torch.tensor([10, 10]), degrees: torch.Tensor = torch.tensor([3, 3]), device: torch.device | None = None)
Initialize the surface generator.
Heliostat data, including information regarding their surfaces and structure, can be generated via
STRALand exported to a binary file or downloaded fromPAINT. The data formats are different depending on their source. To convert this data into a surface configuration format suitable forARTIST, this converter first loads the data and then learns or creates NURBS surfaces based on the data. Finally, the converter returns a list of facets that can be used directly in anARTISTscenario.Parameters
- number_of_control_pointstorch.Tensor
The number of NURBS control points along each direction of each 2D facet (default is torch.tensor([10,10])). Tensor of shape [2].
- degreestorch.Tensor
Degree of the NURBS along each direction of each 2D facet (default is torch.tensor([3,3])). Tensor of shape [2].
- devicetorch.device | None
The device on which to perform computations or load tensors and models (default is None). If None,
ARTISTwill automatically select the most appropriate device (CUDA or CPU) based on availability and OS.
- number_of_control_points
- degrees
- fit_nurbs(surface_points: torch.Tensor, surface_normals: torch.Tensor, optimizer: torch.optim.Optimizer, scheduler: torch.optim.lr_scheduler.LRScheduler | None = None, fit_method: str = config_dictionary.fit_nurbs_from_normals, tolerance: float = 1e-10, max_epoch: int = 400, device: torch.device | None = None) artist.util.nurbs.NURBSSurfaces
Fit a NURBS surface.
The surface points are first normalized and shifted to the range (0,1) to be compatible with the knot vector of the NURBS surface. The NURBS surface is then initialized with the correct number of control points, degrees, and knots. The origin of the control points is set based on the width and height of the point cloud. The control points are then fitted to the surface points or surface normals using the provided optimizer.
Parameters
- surface_pointstorch.Tensor
The surface points. Tensor of shape [number_of_surface_points, 4].
- surface_normalstorch.Tensor
The surface normals. Tensor of shape [number_of_surface_points, 4].
- optimizertorch.optim.Optimizer
The optimizer.
- schedulertorch.optim.lr_scheduler.LRScheduler | None
The learning rate scheduler (default is None).
- fit_methodstr
The method used to fit the NURBS, either from deflectometry points or normals (default is config_dictionary.fit_nurbs_from_normals).
- tolerancefloat
The tolerance value used for fitting NURBS surfaces (default is 1e-10).
- max_epochint
The maximum number of epochs for the NURBS fit (default is 400).
- devicetorch.device | None
The device on which to perform computations or load tensors and models (default is None). If None,
ARTISTwill automatically select the most appropriate device (CUDA or CPU) based on availability and OS.
Raises
- NotImplementedError
If the NURBS fit method is unknown.
Returns
- NURBSSurfaces
A fitted NURBS surface.
- generate_fitted_surface_config(heliostat_name: str, facet_translation_vectors: torch.Tensor, canting: torch.Tensor, surface_points_with_facets_list: list[torch.Tensor], surface_normals_with_facets_list: list[torch.Tensor], optimizer: torch.optim.Optimizer, scheduler: torch.optim.lr_scheduler.LRScheduler | None = None, deflectometry_step_size: int = 100, fit_method: str = config_dictionary.fit_nurbs_from_normals, tolerance: float = 1e-10, max_epoch: int = 400, device: torch.device | None = None) artist.scenario.configuration_classes.SurfaceConfig
Generate a fitted surface configuration.
The fitted surface configuration is composed of separate facets. Each facet is defined by fitted control points, meaning the control points are fitted to measured point cloud or surface normals data. Initializing a surface from this configuration results in an imperfect heliostat surface with dents or bulges, reflecting real-world conditions. The surface can be fitted to deflectometry data or any other provided point cloud data.
Parameters
- heliostat_namestr
The heliostat name, used for logging.
- facet_translation_vectorstorch.Tensor
Translation vectors for each facet from heliostat origin to relative position. Tensor of shape [number_of_facets, 4].
- cantingtorch.Tensor
The canting vectors per facet in east and north directions Tensor of shape [number_of_facets, 2, 4].
- surface_points_with_facets_listlist[torch.Tensor]
A list of facetted surface points. Points per facet may vary. Tensors in list of shape [number_of_points, 3].
- surface_normals_with_facets_listlist[torch.Tensor]
A list of facetted surface normals. Points per facet may vary. Tensors in list of shape [number_of_points, 3].
- optimizertorch.optim.Optimizer
The optimizer.
- schedulertorch.optim.lr_scheduler.LRScheduler | None
The learning rate scheduler (default is None).
- deflectometry_step_sizeint
The step size used to reduce the number of deflectometry points and normals for compute efficiency (default is 100).
- fit_methodstr
The method used to fit the NURBS, either from deflectometry points or normals (default is config_dictionary.fit_nurbs_from_normals).
- tolerancefloat
The tolerance value used for fitting NURBS surfaces (default is 1e-10).
- max_epochint
The maximum number of epochs for the NURBS fit (default is 400).
- devicetorch.device | None
The device on which to perform computations or load tensors and models (default is None). If None,
ARTISTwill automatically select the most appropriate device (CUDA or CPU) based on availability and OS.
Returns
- SurfaceConfig
A surface configuration.
- generate_ideal_surface_config(facet_translation_vectors: torch.Tensor, canting: torch.Tensor, device: torch.device | None = None) artist.scenario.configuration_classes.SurfaceConfig
Generate an ideal surface configuration.
The ideal surface configuration is composed of separate facets. Each facet is defined by ideal control points, meaning the control points start as 3D points on a flat, equidistant grid around the origin. These control points are then canted (rotated) and translated to the facet positions. Initializing a surface from this configuration results in an ideal heliostat surface without dents or bulges but with canting. This ideal heliostat surface can be used as a starting point for a surface reconstruction based on measured flux distributions.
Parameters
- facet_translation_vectorstorch.Tensor
Translation vector for each facet from heliostat origin to relative position. Tensor of shape [number_of_facets, 4].
- cantingtorch.Tensor
The canting vector per facet in east and north direction. Tensor of shape [number_of_facets, 2, 4].
- devicetorch.device | None
The device on which to perform computations or load tensors and models (default is None). If None,
ARTISTwill automatically select the most appropriate device (CUDA or CPU) based on availability and OS.
Returns
- SurfaceConfig
A surface configuration.