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
96 y0 = 0
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
143 inData = pd.read_csv(inFileName, delim_whitespace=True, header=None)
144 inData.columns = ["x", "y", "z", "bx", "by", "bz"]
145 inData = inData.sort_values(by=["x", "y", "z"])
146 inData = inData.astype(float)
147
148 count = 0.0
149 data_shape = float(inData.shape[0])
150 for row in inData.itertuples():
151 if row.Index / data_shape >= count:
152 print(f"Processed: {count * 100} %")
153 count += 0.1
154
155
156 if storeCoords is True:
157 dStruct.x = row.x * cmScale - x0
158 dStruct.y = row.y * cmScale - y0
159 dStruct.z = row.z * cmScale - z0
160
161
162 dStruct.Bx = row.bx
163 dStruct.By = row.by
164 dStruct.Bz = row.bz
165
166 dataTree.Fill()
167
168 theFile.cd()
169 rangeTree.Write()
170 dataTree.Write()
171 theFile.Close()
172
173