Coverage for yaptide/converter/converter/shieldhit/detectors.py: 96%
48 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-07-01 12:55 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-07-01 12:55 +0000
1from dataclasses import dataclass
2from abc import ABC
5@dataclass(frozen=True)
6class ScoringDetector(ABC):
7 """Abstract geometry dataclass for DetectConfig."""
9 uuid: str
10 name: str
13@dataclass(frozen=True)
14class ScoringGlobal(ScoringDetector):
15 r"""\"All\" detector. Scores on the whole defined space."""
17 name: str
19 template: str = """Geometry All
20 Name {name}
21"""
23 def __str__(self) -> str:
24 return self.template.format(name=self.name)
27@dataclass(frozen=True)
28class ScoringCylinder(ScoringDetector):
29 """Cylinder detector dataclass used in DetectConfig."""
31 name: str = "CylZ_Mesh"
32 r_min: float = 0.
33 r_max: float = 10.
34 r_bins: int = 1
35 h_min: float = 0.
36 h_max: float = 20.
37 h_bins: int = 400
39 template: str = """Geometry Cyl
40 Name {name}
41 R {r_min:g} {r_max:g} {r_bins:d}
42 Z {h_min:g} {h_max:g} {h_bins:d}
43"""
45 def __str__(self) -> str:
46 return self.template.format(
47 name=self.name,
48 r_min=self.r_min, r_max=self.r_max, r_bins=self.r_bins,
49 h_min=self.h_min, h_max=self.h_max, h_bins=self.h_bins,
50 )
53@dataclass(frozen=True)
54class ScoringMesh(ScoringDetector):
55 """Mesh detector dataclass used in DetectConfig."""
57 name: str = "YZ_Mesh"
58 x_min: float = -0.5
59 x_max: float = 0.5
60 x_bins: int = 1
61 y_min: float = -2.
62 y_max: float = 2.
63 y_bins: int = 80
64 z_min: float = 0.
65 z_max: float = 20.
66 z_bins: int = 400
68 template: str = """Geometry Mesh
69 Name {name}
70 X {x_min:g} {x_max:g} {x_bins:d}
71 Y {y_min:g} {y_max:g} {y_bins:d}
72 Z {z_min:g} {z_max:g} {z_bins:d}
73"""
75 def __str__(self) -> str:
76 return self.template.format(
77 name=self.name,
78 x_min=self.x_min, x_max=self.x_max, x_bins=self.x_bins,
79 y_min=self.y_min, y_max=self.y_max, y_bins=self.y_bins,
80 z_min=self.z_min, z_max=self.z_max, z_bins=self.z_bins,
81 )
84@dataclass(frozen=True)
85class ScoringZone(ScoringDetector):
86 """Scoring zone dataclass used un DetectConfig."""
88 name: str
89 first_zone_id: int
90 last_zone_id: str = ""
91 volume: float = 1.
93 template: str = """Geometry Zone
94 Name {name}
95 Zone {first_zone} {last_zone}
96 Volume {volume:f}
97"""
99 def __str__(self) -> str:
100 return self.template.format(
101 name=self.name,
102 first_zone=self.first_zone_id, last_zone=self.last_zone_id,
103 volume=self.volume,
104 )