forked from acts-project/acts
-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathbfield_writing.py
More file actions
executable file
·57 lines (42 loc) · 1.6 KB
/
bfield_writing.py
File metadata and controls
executable file
·57 lines (42 loc) · 1.6 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
57
#!/usr/bin/env python3
from pathlib import Path
import acts
import acts.examples
import acts.examples.root
u = acts.UnitConstants
def RootBFieldWrite(bField, fileName, treeName="solenoid", level=acts.logging.VERBOSE):
cfg = acts.examples.root.RootBFieldWriter.Config()
cfg.bField = bField
cfg.gridType = acts.examples.root.RootBFieldWriter.GridType.rz
cfg.fileName = str(fileName)
cfg.treeName = treeName
acts.examples.root.RootBFieldWriter.run(cfg, level)
return cfg
def CsvBFieldWrite(bField, fileName, level=acts.logging.VERBOSE):
cfg = acts.examples.CsvBFieldWriter.ConfigRzGrid()
cfg.bField = bField
cfg.fileName = str(fileName)
acts.examples.CsvBFieldWriter.runRzGrid(cfg, level)
return cfg
def runBFieldWriting(outputDir: Path, rewrites: int = 0):
solenoid = acts.SolenoidBField(
radius=1200 * u.mm, length=6000 * u.mm, bMagCenter=2 * u.T, nCoils=1194
)
field = acts.solenoidFieldMap(
rlim=(0, 1200 * u.mm),
zlim=(-5000 * u.mm, 5000 * u.mm),
nbins=(10, 10),
field=solenoid,
)
print("Solenoid ready")
cfg = RootBFieldWrite(field, outputDir / "solenoid.root")
CsvBFieldWrite(field, outputDir / "solenoid.csv")
for i in range(rewrites):
print(f"Now read back {cfg.fileName}")
field2 = acts.root.MagneticFieldMapRz(cfg.fileName, tree="solenoid")
cfg2 = RootBFieldWrite(field2, outputDir / f"solenoid{i+2}.root")
CsvBFieldWrite(field2, outputDir / f"solenoid{i+2}.csv")
cfg = cfg2
print("Done")
if "__main__" == __name__:
runBFieldWriting(Path.cwd())