style: format to length 100

This commit is contained in:
2026-07-02 12:52:45 +02:00
parent 40b12c12db
commit dc6218e45f
23 changed files with 124 additions and 362 deletions
+14 -50
View File
@@ -10,14 +10,7 @@ from aarecommon.math.diffraction_geometry import DiffractionGeometry
from aarecommon.math.sample_geometry import SampleGeometryModel
from aarecommon.models.tell import TellStateModel
from jfjoch_client.models.scan_result import ScanResult
from pydantic import (
AfterValidator,
AliasChoices,
BaseModel,
ConfigDict,
Field,
field_validator,
)
from pydantic import AfterValidator, AliasChoices, BaseModel, ConfigDict, Field, field_validator
class StagePositionEnum(Enum):
@@ -68,31 +61,22 @@ class DataCollectionParameters(BaseModel):
totalangle: Optional[int] = Field( # was totalrange
default=None, validation_alias=AliasChoices("totalangle", "totalrange")
) # Only accept positive integers between 0 and 360
transmission: Optional[int] = (
None # Only accept positive integers between 0 and 100
)
transmission: Optional[int] = None # Only accept positive integers between 0 and 100
targetresolution: Optional[float] = None # Only accept positive float
beamsize: Optional[str] = None
aperture: Optional[int] = None # Optional string field
datacollectiontype: Optional[str] = (
None # Only accept "standard", other types might be added later
)
processingpipeline: Optional[str] = (
"" # Only accept "gopy", "autoproc", "xia2dials"
)
spacegroupnumber: Optional[int] = (
None # Only accept positive integers between 1 and 230
)
processingpipeline: Optional[str] = "" # Only accept "gopy", "autoproc", "xia2dials"
spacegroupnumber: Optional[int] = None # Only accept positive integers between 1 and 230
unitcell: Optional[str] = Field( # was cellparameters
default=None, validation_alias=AliasChoices("unitcell", "cellparameters")
) # Must be a set of six positive floats or integers
rescutkey: Optional[str] = None # Only accept "is" or "cchalf"
rescutvalue: Optional[float] = (
None # Must be a positive float if rescutkey is provided
)
rescutvalue: Optional[float] = None # Must be a positive float if rescutkey is provided
processingresolution: Optional[float] = Field( # was userresolution
default=None,
validation_alias=AliasChoices("processingresolution", "userresolution"),
default=None, validation_alias=AliasChoices("processingresolution", "userresolution")
)
pdbid: Optional[str] = (
"" # Accepts either the format of the protein data bank code or {provided}
@@ -142,9 +126,7 @@ class DataCollectionParameters(BaseModel):
"{protein}",
"{method}",
]
valid_macro_pattern = re.compile(
"|".join(re.escape(macro) for macro in valid_macros)
)
valid_macro_pattern = re.compile("|".join(re.escape(macro) for macro in valid_macros))
# Check if the value contains valid macros
allowed_chars_pattern = "[a-z0-9_.+-/]"
@@ -154,9 +136,7 @@ class DataCollectionParameters(BaseModel):
f"^(({allowed_chars_pattern}+|macro)*/*)*$", re.IGNORECASE
)
if not allowed_path_pattern.match(v_without_macros):
raise ValueError(
f"'{v}' is not valid. Value must be a valid path or macro."
)
raise ValueError(f"'{v}' is not valid. Value must be a valid path or macro.")
return v
@field_validator("unitcell", mode="before")
@@ -347,9 +327,7 @@ class MLOutputModel(BaseModel):
return None
return (m.box.top_x, m.box.top_y, m.box.bottom_x, m.box.bottom_y)
def get_box_tuple_with_conf(
self, key: str
) -> tuple[float, float, float, float, float] | None:
def get_box_tuple_with_conf(self, key: str) -> tuple[float, float, float, float, float] | None:
m = self.get_box_model(key)
if not m or not m.box:
return None
@@ -368,9 +346,7 @@ class MLOutputModel(BaseModel):
keys = self.get_keys_for_class(cls)
return [self.boxes[k] for k in keys]
def get_tuples_for_class(
self, cls: MLBoxType
) -> list[tuple[float, float, float, float]]:
def get_tuples_for_class(self, cls: MLBoxType) -> list[tuple[float, float, float, float]]:
out: list[tuple[float, float, float, float]] = []
for m in self.get_models_for_class(cls):
if m.box:
@@ -384,13 +360,7 @@ class MLOutputModel(BaseModel):
for m in self.get_models_for_class(cls):
if m.box:
out.append(
(
m.box.top_x,
m.box.top_y,
m.box.bottom_x,
m.box.bottom_y,
float(m.conf),
)
(m.box.top_x, m.box.top_y, m.box.bottom_x, m.box.bottom_y, float(m.conf))
)
return out
@@ -465,9 +435,7 @@ class ZoomModeEnum(Enum):
class ZoomModel(BaseModel):
z: dict[float, SampleCameraSettings]
def get_camera_settings(
self, zoom_value: float
) -> SampleCameraSettings:
def get_camera_settings(self, zoom_value: float) -> SampleCameraSettings:
if not self.z:
raise ValueError("No zoom data available")
@@ -495,16 +463,12 @@ class ZoomModel(BaseModel):
t = (zoom_value - lower_zoom) / (upper_zoom - lower_zoom)
interpolated_gain = lower_elem.gain + t * (
upper_elem.gain - lower_elem.gain
)
interpolated_gain = lower_elem.gain + t * (upper_elem.gain - lower_elem.gain)
interpolated_exp = lower_elem.exposure + t * (
upper_elem.exposure - lower_elem.exposure
)
return SampleCameraSettings(
gain=interpolated_gain, exposure=interpolated_exp
)
return SampleCameraSettings(gain=interpolated_gain, exposure=interpolated_exp)
closest = min(self.z.keys(), key=lambda x: abs(x - zoom_value))
elem = self.z[closest]
+1 -3
View File
@@ -59,9 +59,7 @@ class CenterOfMassModel(BaseModel):
x=(self.n_x + 0.5) * r.grid_size_mm.x, y=(self.n_y + 0.5) * r.grid_size_mm.y
)
def get_com_pxl(
self, r: RasterGridRequest, geom: SampleGeometryModel
) -> Coordinate:
def get_com_pxl(self, r: RasterGridRequest, geom: SampleGeometryModel) -> Coordinate:
# defines COM in pixels at beam position, relative to the top left corner of grid
com_mm = self.get_com_mm(r)
return Coordinate(x=com_mm.x / geom.pixel_in_mm, y=com_mm.y / geom.pixel_in_mm)