-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathCalibrationAssessmentRequest.py
More file actions
56 lines (47 loc) · 2.2 KB
/
CalibrationAssessmentRequest.py
File metadata and controls
56 lines (47 loc) · 2.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from typing import Any, Dict, List
from pydantic import BaseModel, ConfigDict, Field, field_validator
from snapred.backend.dao.Limit import Pair
from snapred.backend.dao.RunConfig import RunConfig
from snapred.backend.dao.state.FocusGroup import FocusGroup
from snapred.meta.Config import Config
from snapred.meta.mantid.AllowedPeakTypes import PeakFunctionEnum
from snapred.meta.mantid.WorkspaceNameGenerator import WorkspaceName, WorkspaceType
class CalibrationAssessmentRequest(BaseModel):
"""
The CalibrationAssessmentRequest class is crafted to streamline the process of initiating
a calibration assessment for a specific run, set against standard crystal data typically
provided through a cif file. It incorporates a run configuration, mapping various workspaces
by their type to workspace names for analytical context, and specifies a focusGroup for targeted
assessment. The calibrantSamplePath points to the sample data, while useLiteMode, nBinsAcrossPeakWidth,
peakIntensityThreshold, and peakFunction define the assessment's operational parameters, with defaults set
according to system configurations.
"""
run: RunConfig
useLiteMode: bool
focusGroup: FocusGroup
calibrantSamplePath: str
workspaces: Dict[WorkspaceType, List[WorkspaceName]]
# fiddly bits
peakFunction: PeakFunctionEnum
crystalDMin: float
crystalDMax: float
nBinsAcrossPeakWidth: int
fwhmMultipliers: Pair[float] = Field(
default_factory=lambda: Pair.model_validate(Config["calibration.parameters.default.FWHMMultiplier"])
)
maxChiSq: float = Field(default_factory=lambda: Config["constants.GroupDiffractionCalibration.MaxChiSq"])
combinedPixelMask: WorkspaceName | None = None
@field_validator("fwhmMultipliers", mode="before")
@classmethod
def validate_fwhmMultipliers(cls, v: Any) -> Pair[float]:
if isinstance(v, dict):
v = Pair[float](**v)
if not isinstance(v, Pair[float]):
# Coerce Generic[T]-derived type
v = Pair[float](**v.dict())
return v
model_config = ConfigDict(
extra="forbid",
# required in order to use 'WorkspaceName'
arbitrary_types_allowed=True,
)