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

1from dataclasses import dataclass 

2from typing import Optional 

3 

4 

5@dataclass 

6class Config: 

7 """Class mapping of the beam.dat config file.""" 

8 

9 energy: float = 150. # [MeV] 

10 num_histories: int = 100 

11 

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 

24 

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} 

43 

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 

52 

53s:Sc/Dose/Quantity = "DoseToWater" 

54s:Sc/Dose/Component = "WaterPhantom" 

55s:Sc/Dose/IfOutputFileAlreadyExists = "Overwrite" 

56s:Sc/Dose/OutputType = "CSV" 

57 

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" 

70 

71sv:Ph/Default/Modules = 1 "g4em-standard_opt0" 

72""" 

73 

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 ) 

81 

82 return result