Coverage for yaptide/converter/converter/topas/config.py: 80%
10 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 typing import Optional
5@dataclass
6class Config:
7 """Class mapping of the beam.dat config file."""
9 energy: float = 150. # [MeV]
10 num_histories: int = 100
12 config_template: str = """s:Ge/MyBox/Type = "TsBox"
13s:Ge/MyBox/Material = "Air"
14s:Ge/MyBox/Parent = "World"
15d:Ge/MyBox/HLX = 2.5 m
16d:Ge/MyBox/HLY = 2. m
17d:Ge/MyBox/HLZ = 1. m
18d:Ge/MyBox/TransX = 2. m
19d:Ge/MyBox/TransY = 0. m
20d:Ge/MyBox/TransZ = 0. m
21d:Ge/MyBox/RotX = 0. deg
22d:Ge/MyBox/RotY = 0. deg
23d:Ge/MyBox/RotZ = 0. deg
25s:So/Demo/Type = "Beam"
26s:So/Demo/Component = "BeamPosition"
27s:So/Demo/BeamParticle = "proton"
28d:So/Demo/BeamEnergy = {energy} MeV
29u:So/Demo/BeamEnergySpread = 0.757504
30s:So/Demo/BeamPositionDistribution = "Gaussian"
31s:So/Demo/BeamPositionCutoffShape = "Ellipse"
32d:So/Demo/BeamPositionCutoffX = 10. cm
33d:So/Demo/BeamPositionCutoffY = 10. cm
34d:So/Demo/BeamPositionSpreadX = 0.65 cm
35d:So/Demo/BeamPositionSpreadY = 0.65 cm
36s:So/Demo/BeamAngularDistribution = "Gaussian"
37d:So/Demo/BeamAngularCutoffX = 90. deg
38d:So/Demo/BeamAngularCutoffY = 90. deg
39d:So/Demo/BeamAngularSpreadX = 0.0032 rad
40d:So/Demo/BeamAngularSpreadY = 0.0032 rad
41i:So/Demo/NumberOfHistoriesInRun = {num_histories}
42i:Ts/ShowHistoryCountAtInterval = {histories_interval}
44s:Ge/BeamPosition/Parent="World"
45s:Ge/BeamPosition/Type="Group"
46d:Ge/BeamPosition/TransX=0. m
47d:Ge/BeamPosition/TransY=0. m
48d:Ge/BeamPosition/TransZ= Ge/World/HLZ m
49d:Ge/BeamPosition/RotX=180. deg
50d:Ge/BeamPosition/RotY=0. deg
51d:Ge/BeamPosition/RotZ=0. deg
53s:Sc/Dose/Quantity = "DoseToWater"
54s:Sc/Dose/Component = "WaterPhantom"
55s:Sc/Dose/IfOutputFileAlreadyExists = "Overwrite"
56s:Sc/Dose/OutputType = "CSV"
58s:Ge/WaterPhantom/Parent = "MyBox"
59s:Ge/WaterPhantom/Type = "TsBox"
60s:Ge/WaterPhantom/Material = "G4_WATER"
61d:Ge/WaterPhantom/HLX = 2.5 m
62d:Ge/WaterPhantom/HLY = 2. m
63d:Ge/WaterPhantom/HLZ = 0.1 cm
64i:Ge/WaterPhantom/XBins = 80
65i:Ge/WaterPhantom/YBins = 80
66i:Ge/WaterPhantom/ZBins = 1
67d:Ge/WaterPhantom/TransZ = 0. cm
68s:Ge/WaterPhantom/DrawingStyle = "Solid"
69s:Ge/WaterPhantom/Color = "skyblue"
71sv:Ph/Default/Modules = 1 "g4em-standard_opt0"
72"""
74 def __str__(self) -> str:
75 """Return the topas_config.txt config file as a string."""
76 result = self.config_template.format(
77 energy=float(self.energy),
78 num_histories=self.num_histories,
79 histories_interval=max(1, self.num_histories//100)
80 )
82 return result