#include <BFMagnet.h>
Public Types | |
| kJGG | |
| kRosie | |
| kNMagnet | |
| enum | { kJGG, kRosie, kNMagnet } |
Public Member Functions | |
| bool | BatX (const double *pos, double *b) const |
| Returns magnetic field in kG at a given point. | |
| bool | BatXrotZ (const double *pos, double *b, double ang) const |
| Return field values if field is rotated by angle ang (in rad) about z-axis. | |
| double | Bydl () const |
| double | ZMin () const |
| double | ZMax () const |
| int | NGridX () const |
| int | NGridY () const |
| int | NGridZ () const |
| int | MinGridX () const |
| int | MinGridY () const |
| int | MinGridZ () const |
| double | BfromMap (int x, int y, int z, int crd) const |
| Returns the measurement from the map. | |
| void | Init () |
| Reinitializes magnet, i.e. | |
| bool | IsScaled () const |
| double | ByAtCenter () |
| Returns By at the center of the grid, using the actual measurement point rather than interpolation. | |
| double * | CenterPos () |
| void | Scale (double r) |
| Scale the entire field map by a factor f. | |
| void | SetByAtCenter (double by) |
| Reinitializes B-field map, and scales it to get the right By at the central measurement point. | |
| void | SetCenterPos (const double *pos) |
| Shifts the center of the magnet to a given position. | |
| void | SetCenterPos (double x, double y, double z) |
| Shifts the center of the magnet to a given position. | |
| void | SetUniformField (const double *b) |
| This function sets the grid to a uniform field. | |
Static Public Member Functions | |
| static BFMagnet & | JGG () |
| Return the reference to JGG magnet. | |
| static BFMagnet & | Rosie () |
| Return the reference to Rosie magnet. | |
Private Member Functions | |
| BFMagnet (int mag) | |
| Constructor. | |
| void | ReadFieldMap () |
Private Attributes | |
| int | fId |
| Magnet's id (kJGG or kRosie). | |
| std::string | fMapFileName |
| int | fNGrid [3] |
| Number of points in the grid in x, y, z. | |
| int | fNGridMin [3] |
| Point (0, 0, 0) is at the center, minimum is adjusted accordingly. | |
| int | fNGridMax [3] |
| Maximum is calculated based on fNGrid and fNGridMin. | |
| double | fGridLen [3] |
| Grid spacing, in cm. | |
| double | fOffset [3] |
| Magnet center in cm. | |
| double | fZMin |
| Minimum z where field is non-zero. | |
| double | fZMax |
| Maximum z where field is non-zero. | |
| double **** | fMap |
| Array of grid measurements for each coordinate. | |
| double | fMaxB |
| bool | fIsScaled |
| double | fBydl |
| Calculated Bdl for x=y=0;. | |
Static Private Attributes | |
| static BFMagnet * | fsMagnet [kNMagnet] = {0, 0} |
The field is assumed to be measured on a 3-D grid with uniformly separated points.
Definition at line 17 of file BFMagnet.h.
| anonymous enum |
| BFMagnet::BFMagnet | ( | int | mag | ) | [private] |
| bool BFMagnet::BatX | ( | const double * | x, | |
| double * | b | |||
| ) | const |
Returns magnetic field in kG at a given point.
Coordinates must be in cm.
| pos | - (x, y, z) point coordinate | |
| b | - array which will get filled with (Bx, By, Bz) |
Definition at line 239 of file BFMagnet.cxx.
References fGridLen, fMap, fMaxB, fNGrid, fNGridMin, and fOffset.
Referenced by b_xyz(), BatXrotZ(), config_bfield(), and main().
00240 { 00241 // 00242 // This is basically copied from rosy_magf.F in e907mc 00243 // (which is copied from Donut/E872, which is copied from E771, which ...) 00244 // A minor improvement is how I deal with the ends of the map to get a smooth 00245 // transition from the last measured field values to the zero field assumed 00246 // outside the fieldmap region: I extend the grid by a layer and 00247 // consider any coordinate within that shell legal, i.e. increment 00248 // the field region by one grid spacing on all sides. 00249 // 00250 // Interpolation in three dimensions: 00251 // C --B(1,2,2)-----------B(2,2,2) 00252 // C /| /| 00253 // C | / | / | 00254 // C |/ | / | 00255 // C --B(1,1,2)------------B(2,1,2) 00256 // C /| | | | 00257 // C / | | *<------|----------BX,BY,BZ 00258 // C | | | | 00259 // C | | | | 00260 // C | B(1,2,1)--------|---B(2,2,1) Z 00261 // C | / | / ^ Y 00262 // C | / | / | / 00263 // C |/ |/ | / 00264 // C --B(1,1,1)------------B(2,1,1) 0 ----> X 00265 // /| /| 00266 00267 register int i, j, k, crd; 00268 00269 // Reset field values to 0 00270 for (crd = 0; crd < 3; ++crd) b[crd] = 0.; 00271 00272 // It'd be hard to track particles through mG fields... 00273 if (fMaxB < 1e-5 ) return true; 00274 00275 double xLoc[3]; 00276 double gridPos[3]; // 00277 int gridN[3]; // grid coordinates of data surrounding (x[0],x[1],x[2]) 00278 for (i = 0; i < 3; ++i) { 00279 xLoc[i] = x[i] - fOffset[i]; // Convert x[] position to grid position 00280 gridPos[i] = xLoc[i] / fGridLen[i]; // Compute grid coordinates 00281 gridPos[i] -= fNGridMin[i]; 00282 00283 if (gridPos[i] <= 0.0 || gridPos[i] >= (fNGrid[i]-1)) { 00284 b[0] = b[1] = b[2] = 0.0; 00285 return false; 00286 } 00287 00288 gridN[i] = (int) floor(gridPos[i]); 00289 gridPos[i] -= gridN[i]; 00290 } 00291 00292 // For linear interpolation, we can calculate the coefficient 00293 // for each of the 8 points surrounding the point of interest. 00294 // These coefficients are (obviously) the same for all 3 00295 // components of the B-field, so by using one set for all 3 00296 // components, we should save computational time. 00297 double xy = gridPos[0] * gridPos[1]; 00298 double xz = gridPos[0] * gridPos[2]; 00299 double yz = gridPos[1] * gridPos[2]; 00300 double xyz = xy * gridPos[2]; 00301 00302 double coef[8] = { 00303 1 - gridPos[0] - gridPos[1] - gridPos[2] + xy + xz + yz - xyz, 00304 gridPos[2] - xz - yz + xyz, 00305 gridPos[1] - xy - yz + xyz, 00306 yz - xyz, 00307 gridPos[0] - xy - xz + xyz, 00308 xz - xyz, 00309 xy - xyz, 00310 xyz 00311 }; 00312 00313 // Loop through the 8 points of interest and add in the contribution 00314 // from each one to each of the components 00315 double* coefPtr = coef; 00316 for (i = gridN[0]; i < gridN[0]+2; ++i) { 00317 for (j = gridN[1]; j < gridN[1]+2; ++j) { 00318 for (k = gridN[2]; k < gridN[2]+2; ++k) { 00319 for (crd = 0; crd < 3; ++crd) { 00320 b[crd] += (*coefPtr) * fMap[i][j][k][crd]; 00321 } 00322 ++coefPtr; 00323 } 00324 } 00325 } 00326 00327 return true; 00328 }
| bool BFMagnet::BatXrotZ | ( | const double * | pos, | |
| double * | b, | |||
| double | ang | |||
| ) | const |
Return field values if field is rotated by angle ang (in rad) about z-axis.
This can be used to remove potential bleed of By into Bx
Definition at line 430 of file BFMagnet.cxx.
References BatX().
Referenced by b_xyz_rotz().
00431 { 00432 if (!BatX(pos, b)) return false; 00433 00434 double ca = cos(ang); 00435 double sa = sin(ang); 00436 double bxp = b[0] * ca + b[1] * sa; 00437 double byp = -b[0] * sa + b[1] * ca; 00438 00439 b[0] = bxp; 00440 b[1] = byp; 00441 00442 return true; 00443 }
| double BFMagnet::BfromMap | ( | int | x, | |
| int | y, | |||
| int | z, | |||
| int | crd | |||
| ) | const |
Returns the measurement from the map.
| x | - grid position in x | |
| y | - grid position in y | |
| z | - grid position in z | |
| crd | - coordinate (0-2) |
Definition at line 370 of file BFMagnet.cxx.
Referenced by main().
00371 { 00372 assert(x >= 0 && x < fNGrid[0]); 00373 assert(y >= 0 && y < fNGrid[1]); 00374 assert(z >= 0 && z < fNGrid[2]); 00375 assert(crd >= 0 && crd < 3); 00376 return fMap[x][y][z][crd]; 00377 }
| double BFMagnet::ByAtCenter | ( | ) |
Returns By at the center of the grid, using the actual measurement point rather than interpolation.
Definition at line 400 of file BFMagnet.cxx.
References fMap, and fNGridMin.
Referenced by AlignChamW0::AdjustBField(), TrackBeamPart::EndRun(), AlignChamW0::EndRun(), SPTrkBuilder::FitTPCTracks(), SetByAtCenter(), KalmanRefit::SetupManager(), KalmanReco::SetupManager(), and TheEnd().
00401 { 00402 int i0 = -fNGridMin[0]; 00403 int i1 = -fNGridMin[1]; 00404 int i2 = -fNGridMin[2]; 00405 return fMap[i0][i1][i2][1]; 00406 }
| double BFMagnet::Bydl | ( | ) | const [inline] |
| double* BFMagnet::CenterPos | ( | ) | [inline] |
Definition at line 50 of file BFMagnet.h.
References fOffset.
Referenced by AlignChamZ::EndRun(), TrkCandBuilder::MakeTrack(), and TPCRHitFind::NewRun().
00050 {return fOffset;}
| void BFMagnet::Init | ( | ) |
Reinitializes magnet, i.e.
reads the field map again
Definition at line 64 of file BFMagnet.cxx.
References fBydl, fGridLen, fId, fMap, fMapFileName, fNGrid, fNGridMin, kJGG, kRosie, ReadFieldMap(), and SetCenterPos().
Referenced by BFMagnet(), and config_bfield().
00065 { 00066 // Assume that the field data file lives in $SRT_PUBLIC_CONTEXT/Bfield 00067 fMapFileName = getenv("SRT_PRIVATE_CONTEXT"); 00068 fMapFileName += "/Bfield/Maps/"; 00069 switch (fId) { 00070 case kJGG: 00071 fMapFileName += "JGGfield.dat"; 00072 break; 00073 00074 case kRosie: 00075 fMapFileName += "Rosiefield.dat"; 00076 break; 00077 00078 default: 00079 abort(); 00080 } 00081 00082 struct stat buf; 00083 if (stat(fMapFileName.c_str(), &buf) != 0) { 00084 fMapFileName = getenv("SRT_PUBLIC_CONTEXT"); 00085 fMapFileName += "/Bfield/Maps/"; 00086 switch (fId) { 00087 case kJGG: 00088 fMapFileName += "JGGfield.dat"; 00089 break; 00090 00091 case kRosie: 00092 fMapFileName += "Rosiefield.dat"; 00093 break; 00094 00095 default: 00096 abort(); 00097 } 00098 if (stat(fMapFileName.c_str(), &buf) != 0) { 00099 cout << "Couldn't find " << fMapFileName << endl; 00100 exit(-1); 00101 } 00102 } 00103 00104 cout << "Loading field map from " << fMapFileName << endl; 00105 ReadFieldMap(); 00106 00107 SetCenterPos(0, 0, 0); 00108 00109 // Calculate Bydl 00110 fBydl = 0; 00111 00112 int ix = -fNGridMin[0]; 00113 int iy = -fNGridMin[1]; 00114 for (int i = 1; i < fNGrid[2] - 1; ++i) { 00115 fBydl += fGridLen[2] * fMap[ix][iy][i][1]; 00116 } 00117 cout << "Bydl = " << fBydl << " kG*cm" << endl; 00118 }
| bool BFMagnet::IsScaled | ( | ) | const [inline] |
Definition at line 47 of file BFMagnet.h.
References fIsScaled.
Referenced by config_bfield().
00047 { return fIsScaled; }
| BFMagnet & BFMagnet::JGG | ( | ) | [static] |
Return the reference to JGG magnet.
Definition at line 30 of file BFMagnet.cxx.
References BFMagnet(), fsMagnet, and kJGG.
Referenced by AlignChamW0::AdjustBField(), b_xyz(), b_xyz_rotz(), config_bfield(), TrackBeamPart::EndRun(), AlignChamZ::EndRun(), AlignChamW0::EndRun(), SPTrk::Fit(), SPTrkBuilder::FitTPCTracks(), gsFCN(), InitZslices(), main(), TPCRHitFind::NewRun(), AlignChamW0::NewRun(), KalmanRefit::SetupManager(), KalmanReco::SetupManager(), and TheEnd().
00031 { 00032 00033 if (!fsMagnet[kJGG]) fsMagnet[kJGG] = new BFMagnet(kJGG); 00034 return *fsMagnet[kJGG]; 00035 }
| int BFMagnet::MinGridX | ( | ) | const [inline] |
Definition at line 40 of file BFMagnet.h.
References fNGridMin.
Referenced by main().
00040 {return fNGridMin[0];}
| int BFMagnet::MinGridY | ( | ) | const [inline] |
Definition at line 41 of file BFMagnet.h.
References fNGridMin.
Referenced by main().
00041 {return fNGridMin[1];}
| int BFMagnet::MinGridZ | ( | ) | const [inline] |
Definition at line 42 of file BFMagnet.h.
References fNGridMin.
Referenced by main().
00042 {return fNGridMin[2];}
| int BFMagnet::NGridX | ( | ) | const [inline] |
Definition at line 36 of file BFMagnet.h.
References fNGrid.
Referenced by main().
00036 {return fNGrid[0];}
| int BFMagnet::NGridY | ( | ) | const [inline] |
Definition at line 37 of file BFMagnet.h.
References fNGrid.
Referenced by main().
00037 {return fNGrid[1];}
| int BFMagnet::NGridZ | ( | ) | const [inline] |
Definition at line 38 of file BFMagnet.h.
References fNGrid.
Referenced by main().
00038 {return fNGrid[2];}
| void BFMagnet::ReadFieldMap | ( | ) | [private] |
Definition at line 122 of file BFMagnet.cxx.
References fGridLen, fMap, fMapFileName, fMaxB, fNGrid, fNGridMax, fNGridMin, and getline().
Referenced by Init(), and SetByAtCenter().
00123 { 00124 std::ifstream fin(fMapFileName.c_str()); 00125 if (!fin) { 00126 cout << "The file " << fMapFileName << " could not be opened. \n" 00127 << "Magnetic field not read!" << endl; 00128 exit(-1); 00129 } 00130 00131 string tmpStr; 00132 // Discard two comment lines (mandatory) 00133 getline(fin,tmpStr); 00134 getline(fin,tmpStr); 00135 00136 // Read grid size -- 3 numbers 00137 for (int i = 0; i < 3; ++i) fin >> fNGrid[i]; 00138 00139 // Read grid min point position, and initialize max point 00140 for (int i = 0; i < 3; ++i) { 00141 fin >> fNGridMin[i]; 00142 fNGridMin[i]--; 00143 fNGrid[i] += 2; 00144 fNGridMax[i] = fNGridMin[i] + fNGrid[i] - 1; 00145 } 00146 00147 // Read grid cell spacing 00148 for (int i = 0; i < 3; ++i) { 00149 fin >> fGridLen[i]; 00150 fGridLen[i] /= 10.0; //convert mm to cm 00151 } 00152 00153 double tmpVal; 00154 fin >> tmpVal; 00155 getline(fin, tmpStr); // Ignore line with nominal field 00156 getline(fin, tmpStr); // Ignore comment line 00157 00158 // Allocate memory for arrays to hold grid points 00159 bool reMakeMap = false; 00160 if (!fMap) { 00161 fMap = new double***[fNGrid[0]]; 00162 reMakeMap = true; 00163 } 00164 00165 // Now loop through all grid points, allocate memory 00166 // and read in field value 00167 fMaxB = 0; 00168 for (int i = 0; i < fNGrid[0]; ++i) { 00169 if (reMakeMap) fMap[i] = new double**[fNGrid[1]]; 00170 for (int j = 0; j < fNGrid[1]; ++j) { 00171 if (reMakeMap) fMap[i][j] = new double*[fNGrid[2]]; 00172 for (int k = 0; k < fNGrid[2]; ++k) { 00173 if (reMakeMap) fMap[i][j][k] = new double[3]; 00174 for (int crd = 0; crd < 3; ++crd) { 00175 if ((i == 0) || i == (fNGrid[0] - 1) || 00176 (j == 0) || j == (fNGrid[1] - 1) || 00177 (k == 0) || k == (fNGrid[2] - 1)) { 00178 fMap[i][j][k][crd] = 0.0; 00179 continue; 00180 } 00181 00182 if (!(fin >> tmpVal)) { 00183 cout << "Couldn't read values at (" 00184 << i << ", " << j << ", " << k << ", " << crd 00185 << ") from " << fMapFileName << endl; 00186 exit(-1); 00187 } 00188 tmpVal *= 10.0; // Convert from T to kG 00189 if (fabs(tmpVal) > fMaxB) fMaxB = fabs(tmpVal); 00190 fMap[i][j][k][crd] = tmpVal; 00191 } 00192 } 00193 } 00194 } 00195 00196 getline(fin, tmpStr); 00197 getline(fin, tmpStr); 00198 assert(tmpStr.find(" all done...") != string::npos); 00199 fin.close(); 00200 }
| BFMagnet & BFMagnet::Rosie | ( | ) | [static] |
Return the reference to Rosie magnet.
Definition at line 41 of file BFMagnet.cxx.
References BFMagnet(), fsMagnet, and kRosie.
Referenced by b_xyz(), b_xyz_rotz(), config_bfield(), AlignChamZ::EndRun(), gsFCN(), InitZslices(), main(), TrkCandBuilder::MakeTrack(), AlignChamW0::NewRun(), RosieFCN(), SPTrack::ROSYBdL(), and TheEnd().
00042 { 00043 00044 if (!fsMagnet[kRosie]) fsMagnet[kRosie] = new BFMagnet(kRosie); 00045 return *fsMagnet[kRosie]; 00046 }
| void BFMagnet::Scale | ( | double | r | ) |
Scale the entire field map by a factor f.
Definition at line 334 of file BFMagnet.cxx.
References fBydl, fGridLen, fIsScaled, fMap, fMaxB, fNGrid, and fNGridMin.
Referenced by config_bfield(), main(), TPCRHitFind::NewRun(), and SetByAtCenter().
00335 { 00336 fIsScaled = true; 00337 fMaxB = 0; 00338 00339 for (int i = 1; i < fNGrid[0] - 1; ++i) { 00340 for (int j = 1; j < fNGrid[1] - 1; ++j) { 00341 for (int k = 1; k < fNGrid[2] - 1; ++k) { 00342 for (int crd = 0; crd < 3; ++crd) { 00343 fMap[i][j][k][crd] *= f; 00344 if (fabs(fMap[i][j][k][crd]) > fMaxB) { 00345 fMaxB = fabs(fMap[i][j][k][crd]); 00346 } 00347 } 00348 } 00349 } 00350 } 00351 // Calculate Bydl 00352 fBydl = 0; 00353 00354 int ix = -fNGridMin[0]; 00355 int iy = -fNGridMin[1]; 00356 for (int i = 1; i < fNGrid[2] - 1; ++i) { 00357 fBydl += fGridLen[2] * fMap[ix][iy][i][1]; 00358 } 00359 cout << "Bydl = " << fBydl << " kG*cm" << endl; 00360 }
| void BFMagnet::SetByAtCenter | ( | double | by | ) |
Reinitializes B-field map, and scales it to get the right By at the central measurement point.
The reason for re-initializing the map is to avoid round-off errors, as this procedure will be used in fitting
Definition at line 414 of file BFMagnet.cxx.
References ByAtCenter(), ReadFieldMap(), and Scale().
Referenced by AlignChamW0::AdjustBField(), and gsFCN().
00415 { 00416 //ReadFieldMap(); 00417 double byNow = ByAtCenter(); 00418 if (fabs(byNow) < 0.1) { 00419 ReadFieldMap(); 00420 byNow = ByAtCenter(); 00421 } 00422 if (fabs((by - byNow) / byNow) > 1e-8) Scale(by / byNow); 00423 }
| void BFMagnet::SetCenterPos | ( | double | x, | |
| double | y, | |||
| double | z | |||
| ) |
Shifts the center of the magnet to a given position.
| x,y,z,: | (x, y, z) coordinates of the magnet center |
Definition at line 221 of file BFMagnet.cxx.
References fGridLen, fNGridMax, fNGridMin, fOffset, fZMax, and fZMin.
00222 { 00223 fOffset[0] = x; 00224 fOffset[1] = y; 00225 fOffset[2] = z; 00226 fZMin = fOffset[2] + ((double) fNGridMin[2]) * fGridLen[2]; 00227 fZMax = fOffset[2] + ((double) fNGridMax[2]) * fGridLen[2]; 00228 }
| void BFMagnet::SetCenterPos | ( | const double * | pos | ) |
Shifts the center of the magnet to a given position.
| pos | - array of 3 doubles containing (x, y, z) of the magnet center |
Definition at line 208 of file BFMagnet.cxx.
References fGridLen, fNGridMax, fNGridMin, fOffset, fZMax, and fZMin.
Referenced by config_bfield(), gsFCN(), Init(), TPCRHitFind::NewRun(), and RosieFCN().
00209 { 00210 for (int i = 0; i < 3; ++i) { 00211 fOffset[i] = pos[i]; 00212 } 00213 fZMin = fOffset[2] + ((double) fNGridMin[2]) * fGridLen[2]; 00214 fZMax = fOffset[2] + ((double) fNGridMax[2]) * fGridLen[2]; 00215 }
| void BFMagnet::SetUniformField | ( | const double * | b | ) |
This function sets the grid to a uniform field.
The feature may be useful for testing.
| b | - 3 components of the field in the region of the grid in kG |
Definition at line 384 of file BFMagnet.cxx.
Referenced by main().
00385 { 00386 for (int i = 0; i < fNGrid[0]; ++i) { 00387 for (int j = 0 ; j < fNGrid[1]; ++j) { 00388 for (int k = 0; k < fNGrid[2]; ++k) { 00389 for (int crd = 0; crd < 3; ++crd) { 00390 fMap[i][j][k][crd] = b[crd]; 00391 } 00392 } 00393 } 00394 } 00395 }
| double BFMagnet::ZMax | ( | ) | const [inline] |
Definition at line 34 of file BFMagnet.h.
References fZMax.
Referenced by config_bfield(), InitZslices(), main(), and SPTrack::ROSYBdL().
00034 {return fZMax;}
| double BFMagnet::ZMin | ( | ) | const [inline] |
Definition at line 33 of file BFMagnet.h.
References fZMin.
Referenced by config_bfield(), InitZslices(), main(), and SPTrack::ROSYBdL().
00033 {return fZMin;}
double BFMagnet::fBydl [private] |
double BFMagnet::fGridLen[3] [private] |
Grid spacing, in cm.
Definition at line 75 of file BFMagnet.h.
Referenced by BatX(), Init(), ReadFieldMap(), Scale(), and SetCenterPos().
int BFMagnet::fId [private] |
bool BFMagnet::fIsScaled [private] |
double**** BFMagnet::fMap [private] |
Array of grid measurements for each coordinate.
Definition at line 81 of file BFMagnet.h.
Referenced by BatX(), BfromMap(), ByAtCenter(), Init(), ReadFieldMap(), Scale(), and SetUniformField().
std::string BFMagnet::fMapFileName [private] |
double BFMagnet::fMaxB [private] |
int BFMagnet::fNGrid[3] [private] |
Number of points in the grid in x, y, z.
Definition at line 70 of file BFMagnet.h.
Referenced by BatX(), BfromMap(), Init(), NGridX(), NGridY(), NGridZ(), ReadFieldMap(), Scale(), and SetUniformField().
int BFMagnet::fNGridMax[3] [private] |
Maximum is calculated based on fNGrid and fNGridMin.
Definition at line 73 of file BFMagnet.h.
Referenced by ReadFieldMap(), and SetCenterPos().
int BFMagnet::fNGridMin[3] [private] |
Point (0, 0, 0) is at the center, minimum is adjusted accordingly.
Definition at line 72 of file BFMagnet.h.
Referenced by BatX(), ByAtCenter(), Init(), MinGridX(), MinGridY(), MinGridZ(), ReadFieldMap(), Scale(), and SetCenterPos().
double BFMagnet::fOffset[3] [private] |
Magnet center in cm.
Definition at line 76 of file BFMagnet.h.
Referenced by BatX(), CenterPos(), and SetCenterPos().
BFMagnet * BFMagnet::fsMagnet = {0, 0} [static, private] |
double BFMagnet::fZMax [private] |
Maximum z where field is non-zero.
Definition at line 79 of file BFMagnet.h.
Referenced by SetCenterPos(), and ZMax().
double BFMagnet::fZMin [private] |
Minimum z where field is non-zero.
Definition at line 78 of file BFMagnet.h.
Referenced by SetCenterPos(), and ZMin().
1.4.7