29{
30
33
34
36
37
38
39
40
44 double rmin;
45 double rmax;
46 double phimin;
47 double phimax;
48 double bscale;
49 int ncond;
50 bool* finite;
51 double* p1x;
52 double* p1y;
53 double* p1z;
54 double* p2x;
55 double* p2y;
56 double* p2z;
57 double* curr;
58 int nmeshz;
59 int nmeshr;
60 int nmeshphi;
61 double* meshz;
62 double* meshr;
63 double* meshphi;
64 int nfield;
65 short* fieldz;
66 short* fieldr;
67 short* fieldphi;
68
69 tree->SetBranchAddress(
"id", &
id);
70 tree->SetBranchAddress(
"zmin", &zmin);
71 tree->SetBranchAddress(
"zmax", &zmax);
72 tree->SetBranchAddress(
"rmin", &rmin);
73 tree->SetBranchAddress(
"rmax", &rmax);
74 tree->SetBranchAddress(
"phimin", &phimin);
75 tree->SetBranchAddress(
"phimax", &phimax);
76 tree->SetBranchAddress(
"bscale", &bscale);
77 tree->SetBranchAddress(
"ncond", &ncond);
78 tree->SetBranchAddress(
"nmeshz", &nmeshz);
79 tree->SetBranchAddress(
"nmeshr", &nmeshr);
80 tree->SetBranchAddress(
"nmeshphi", &nmeshphi);
81 tree->SetBranchAddress(
"nfield", &nfield);
82
83
84 unsigned maxcond(0);
85
86 unsigned maxmeshz(0);
87
88 unsigned maxmeshr(0);
89
90 unsigned maxmeshphi(0);
91
92 unsigned maxfield(0);
93 TTree* tmax = (TTree*)
rootfile->Get(
"BFieldMapSize");
94 if (tmax != nullptr) {
95 tmax->SetBranchAddress("maxcond", &maxcond);
96 tmax->SetBranchAddress("maxmeshz", &maxmeshz);
97 tmax->SetBranchAddress("maxmeshr", &maxmeshr);
98 tmax->SetBranchAddress("maxmeshphi", &maxmeshphi);
99 tmax->SetBranchAddress("maxfield", &maxfield);
100 tmax->GetEntry(0);
101 } else {
102 for (
int i = 0;
i <
tree->GetEntries();
i++) {
104 maxcond = std::max(maxcond, (unsigned)ncond);
105 maxmeshz = std::max(maxmeshz, (unsigned)nmeshz);
106 maxmeshr = std::max(maxmeshr, (unsigned)nmeshr);
107 maxmeshphi = std::max(maxmeshphi, (unsigned)nmeshphi);
108 maxfield = std::max(maxfield, (unsigned)nfield);
109 }
110 }
111 finite = new bool[maxcond];
112 p1x = new double[maxcond];
113 p1y = new double[maxcond];
114 p1z = new double[maxcond];
115 p2x = new double[maxcond];
116 p2y = new double[maxcond];
117 p2z = new double[maxcond];
118 curr = new double[maxcond];
119 meshz = new double[maxmeshz];
120 meshr = new double[maxmeshr];
121 meshphi = new double[maxmeshphi];
122 fieldz = new short[maxfield];
123 fieldr = new short[maxfield];
124 fieldphi = new short[maxfield];
125
126 tree->SetBranchAddress(
"finite", finite);
127 tree->SetBranchAddress(
"p1x", p1x);
128 tree->SetBranchAddress(
"p1y", p1y);
129 tree->SetBranchAddress(
"p1z", p1z);
130 tree->SetBranchAddress(
"p2x", p2x);
131 tree->SetBranchAddress(
"p2y", p2y);
132 tree->SetBranchAddress(
"p2z", p2z);
133 tree->SetBranchAddress(
"curr", curr);
134 tree->SetBranchAddress(
"meshz", meshz);
135 tree->SetBranchAddress(
"meshr", meshr);
136 tree->SetBranchAddress(
"meshphi", meshphi);
137 tree->SetBranchAddress(
"fieldz", fieldz);
138 tree->SetBranchAddress(
"fieldr", fieldr);
139 tree->SetBranchAddress(
"fieldphi", fieldphi);
140
141
143
144 for (
int i = 0;
i <
tree->GetEntries();
i++) {
146 BFieldZone
z(
id, zmin, zmax, rmin, rmax, phimin, phimax, bscale);
148 m_zone.back().reserve(nmeshz, nmeshr, nmeshphi);
149 for (int j = 0; j < ncond; j++) {
151
159 BFieldCond cond(finite[j], p1, p2, curr[j]);
160 m_zone.back().appendCond(cond);
161 }
162 for (int j = 0; j < nmeshz; j++) {
163 m_zone.back().appendMesh(0, meshz[j]);
164 }
165 for (int j = 0; j < nmeshr; j++) {
166 m_zone.back().appendMesh(1, meshr[j]);
167 }
168 for (int j = 0; j < nmeshphi; j++) {
169 m_zone.back().appendMesh(2, meshphi[j]);
170 }
171 for (int j = 0; j < nfield; j++) {
172 BFieldVector<short>
field(fieldz[j], fieldr[j], fieldphi[j]);
173 m_zone.back().appendField(field);
174 }
175 }
176
178 delete[] finite;
179 delete[] p1x;
180 delete[] p1y;
181 delete[] p1z;
182 delete[] p2x;
183 delete[] p2y;
184 delete[] p2z;
185 delete[] curr;
186 delete[] meshz;
187 delete[] meshr;
188 delete[] meshphi;
189 delete[] fieldz;
190 delete[] fieldr;
191 delete[] fieldphi;
192
195
196
198 if (solezone) {
200 }
201
202 return true;
203}
float toroidCurrent() const
float solenoidCurrent() const
static std::vector< std::string > rootfile