59def createRootMap(inFileName, rootFileName, cmScale, storeCoords) -> None:
60 print(f"Create map {rootFileName} from {inFileName} using cmScale = {cmScale}")
61 if storeCoords is True:
62 print(f"We will also store the x,y,z field coordinates in {rootFileName}")
63
64 rangeInfo = findRanges(inFileName, cmScale)
65
66
67 theFile = ROOT.TFile.Open(rootFileName, "recreate")
68
69 rangeTree = ROOT.TTree("Range", "Range")
70 rangeTree.SetDirectory(theFile)
71
72
73 rStruct = ROOT.rangeStruct()
74 rangeTree.Branch("xMin", ROOT.addressof(rStruct, "xMin"), "xMin/F")
75 rangeTree.Branch("xMax", ROOT.addressof(rStruct, "xMax"), "xMax/F")
76 rangeTree.Branch("dx", ROOT.addressof(rStruct, "dx"), "dx/F")
77 rangeTree.Branch("yMin", ROOT.addressof(rStruct, "yMin"), "yMin/F")
78 rangeTree.Branch("yMax", ROOT.addressof(rStruct, "yMax"), "yMax/F")
79 rangeTree.Branch("dy", ROOT.addressof(rStruct, "dy"), "dy/F")
80 rangeTree.Branch("zMin", ROOT.addressof(rStruct, "zMin"), "zMin/F")
81 rangeTree.Branch("zMax", ROOT.addressof(rStruct, "zMax"), "zMax/F")
82 rangeTree.Branch("dz", ROOT.addressof(rStruct, "dz"), "dz/F")
83
84 rStruct.xMin = rangeInfo["xMin"]
85 rStruct.xMax = rangeInfo["xMax"]
86 rStruct.dx = rangeInfo["dx"]
87 rStruct.yMin = rangeInfo["yMin"]
88 rStruct.yMax = rangeInfo["yMax"]
89 rStruct.dy = rangeInfo["dy"]
90 rStruct.zMin = rangeInfo["zMin"]
91 rStruct.zMax = rangeInfo["zMax"]
92 rStruct.dz = rangeInfo["dz"]
93
94
95 x0 = 0.5 * (rStruct.xMin + rStruct.xMax)
96 y0 = 0.5 * (rStruct.yMin + rStruct.yMax)
97 z0 = 0.5 * (rStruct.zMin + rStruct.zMax)
98
99
100
101
102
103
104 print(f"Centering field map using coordinate shift {x0} {y0} {z0} cm")
105
106
107 rStruct.xMin = rStruct.xMin - x0
108 rStruct.xMax = rStruct.xMax - x0
109
110 rStruct.yMin = rStruct.yMin - y0
111 rStruct.yMax = rStruct.yMax - y0
112
113 rStruct.zMin = rStruct.zMin - z0
114 rStruct.zMax = rStruct.zMax - z0
115
116 print(f"x range = {rStruct.xMin} to {rStruct.xMax}")
117 print(f"y range = {rStruct.yMin} to {rStruct.yMax}")
118 print(f"z range = {rStruct.zMin} to {rStruct.zMax}")
119
120
121 rangeTree.Fill()
122
123
124 dataTree = ROOT.TTree("Data", "Data")
125 dataTree.SetDirectory(theFile)
126
127
128
129
130
131 dStruct = ROOT.dataStruct()
132 if storeCoords is True:
133 dataTree.Branch("x", ROOT.addressof(dStruct, "x"), "x/F")
134 dataTree.Branch("y", ROOT.addressof(dStruct, "y"), "y/F")
135 dataTree.Branch("z", ROOT.addressof(dStruct, "z"), "z/F")
136
137 dataTree.Branch("Bx", ROOT.addressof(dStruct, "Bx"), "Bx/F")
138 dataTree.Branch("By", ROOT.addressof(dStruct, "By"), "By/F")
139 dataTree.Branch("Bz", ROOT.addressof(dStruct, "Bz"), "Bz/F")
140
141
142 with open(inFileName)
as f:
143
144 for line in f:
145
146 if "#" not in line:
147 sLine = line.split()
148
149
150 if storeCoords is True:
151 dStruct.x = float(sLine[0]) * cmScale - x0
152 dStruct.y = float(sLine[1]) * cmScale - y0
153 dStruct.z = float(sLine[2]) * cmScale - z0
154
155
156 dStruct.Bx = float(sLine[3])
157 dStruct.By = float(sLine[4])
158 dStruct.Bz = float(sLine[5])
159
160 dataTree.Fill()
161
162 theFile.cd()
163 rangeTree.Write()
164 dataTree.Write()
165 theFile.Close()
166
167
int open(const char *, int)
Opens a file descriptor.