23ROOT.gROOT.ProcessLine(
41ROOT.gROOT.ProcessLine(
54 inFileName="FieldTest.txt", rootFileName="BFieldTest.root", cmScale: float | int = 1.0, storeCoords: bool =
False
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}")
67 theFile = ROOT.TFile.Open(rootFileName,
"recreate")
69 rangeTree = ROOT.TTree(
"Range",
"Range")
70 rangeTree.SetDirectory(theFile)
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")
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"]
97 z0 = 0.5 * (rStruct.zMin + rStruct.zMax)
104 print(f
"Centering field map using coordinate shift {x0} {y0} {z0} cm")
107 rStruct.xMin = rStruct.xMin - x0
108 rStruct.xMax = rStruct.xMax - x0
110 rStruct.yMin = rStruct.yMin - y0
111 rStruct.yMax = rStruct.yMax - y0
113 rStruct.zMin = rStruct.zMin - z0
114 rStruct.zMax = rStruct.zMax - z0
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}")
124 dataTree = ROOT.TTree(
"Data",
"Data")
125 dataTree.SetDirectory(theFile)
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")
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")
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)
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} %")
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
186 with open(inFileName)
as f:
193 x = float(sLine[0]) * cmScale
194 y = float(sLine[1]) * cmScale
195 z = float(sLine[2]) * cmScale
221 dx = (xMax - xMin) / (Nx1 * 1.0)
227 dy = (yMax - yMin) / (Ny1 * 1.0)
233 dz = (zMax - zMin) / (Nz1 * 1.0)
250 print(f
"rangeInfo = {rangeInfo}")
255if __name__ ==
"__main__":
257 os.path.expandvars(
"$FAIRSHIP/files/noisy_fieldMap.csv"),
258 os.path.expandvars(
"$FAIRSHIP/files/MuonShieldField.root"),
None createRootMap(inFileName, rootFileName, cmScale, storeCoords)
def findRanges(inFileName, cmScale)
None run(inFileName="FieldTest.txt", rootFileName="BFieldTest.root", float|int cmScale=1.0, bool storeCoords=False)
int open(const char *, int)
Opens a file descriptor.