lcdd/include
diff -u -r1.4 -r1.5
--- G4RZFieldMap.hh 31 Aug 2005 18:29:59 -0000 1.4
+++ G4RZFieldMap.hh 31 Aug 2005 18:56:57 -0000 1.5
@@ -1,4 +1,4 @@
-// $Header: /cvs/lcd/lcdd/include/G4RZFieldMap.hh,v 1.4 2005/08/31 18:29:59 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/include/G4RZFieldMap.hh,v 1.5 2005/08/31 18:56:57 jeremy Exp $
#ifndef G4RZFieldMap_hh
#define G4RZFieldMap_hh 1
@@ -19,11 +19,13 @@
{
public:
+
G4RZFieldMap(int numBinsR,
int numBinsZ,
double gridSizeR,
double gridSizeZ,
std::vector<RZBData> fieldData);
+
virtual ~G4RZFieldMap();
public:
@@ -46,6 +48,9 @@
double m_gridSizeR;
double m_gridSizeZ;
+ double m_maxR;
+ double m_maxZ;
+
double** m_BrArray;
double** m_BzArray;
};
lcdd/src
diff -u -r1.5 -r1.6
--- G4RZFieldMap.cc 31 Aug 2005 18:30:01 -0000 1.5
+++ G4RZFieldMap.cc 31 Aug 2005 18:56:57 -0000 1.6
@@ -1,10 +1,13 @@
-// $Header: /cvs/lcd/lcdd/src/G4RZFieldMap.cc,v 1.5 2005/08/31 18:30:01 jeremy Exp $
+// $Header: /cvs/lcd/lcdd/src/G4RZFieldMap.cc,v 1.6 2005/08/31 18:56:57 jeremy Exp $
#include "G4RZFieldMap.hh"
#include "globals.hh"
#include <cmath>
+using std::cout;
+using std::endl;
+
G4RZFieldMap::G4RZFieldMap(int numBinsR,
int numBinsZ,
double gridSizeR,
@@ -17,6 +20,25 @@
m_BrArray(0),
m_BzArray(0)
{
+ if ( numBinsR < 2 ) {
+ G4Exception("numBinsR must be >= 2");
+ }
+
+ if ( numBinsZ < 2 ) {
+ G4Exception("numBinsZ must be >= 2");
+ }
+
+ if ( gridSizeR <= 0 ) {
+ G4Exception("gridSizeR must be >= 0");
+ }
+
+ if ( gridSizeZ <= 0 ) {
+ G4Exception("gridSizeZ must be >= 0");
+ }
+
+ m_maxR = ( numBinsR - 1 ) * m_gridSizeR;
+ m_maxZ = ( numBinsZ - 1 ) * m_gridSizeZ;
+
initializeArrays();
fillArrays(fieldData);
}
@@ -53,14 +75,14 @@
delete[] m_BzArray;
}
-/*
+/**
* Compute B field at given point using the arrays of Br and Bz field strengths.
*
* This function is based on Takashi's FORTRAN code at
*
* /afs/slac/www/accel/nlc/local/systems/beamdelivery/geant/SDNEW/solenoid.f
*
- * via RZBFieldProvider.cpp test code provided by Norman.
+ * via the RZBFieldProvider.cpp test code provided by Norman.
*
*/
void G4RZFieldMap::GetFieldValue( const double Point[3], double *Bfield ) const
@@ -71,8 +93,7 @@
double hz = 0;
double hr = 0;
- /* hard-coded max values??? */
- if(fabs(z)>630.0 || r>660.0) {
+ if(fabs(z)>m_maxZ || r>m_maxR) {
hz = 0.0;
hr = 0.0;
return;
@@ -81,9 +102,9 @@
int iz = (int) ((fabs(z)+0.001)/m_gridSizeZ);
int ir = (int) ((r+0.001)/m_gridSizeR);
- std::cout << "dz " << m_gridSizeZ << " dr " << m_gridSizeR << std::endl;
- std::cout << "z " << z << " r " << r << std::endl;
- std::cout << "iz " << iz << " ir " << ir << std::endl;
+ cout << "dz " << m_gridSizeZ << " dr " << m_gridSizeR << endl;
+ cout << "z " << z << " r " << r << endl;
+ cout << "iz " << iz << " ir " << ir << endl;
iz = iz;
ir = ir;
@@ -103,7 +124,7 @@
double bz0 = m_BzArray[iz][ir];
double br0 = m_BrArray[iz][ir];
- //cout << "bz0 " << bz0 << " br0 " << br0 << endl;
+ cout << "bz0 " << bz0 << " br0 " << br0 << endl;
double delz = 0.;
double delr = 0.;
@@ -115,19 +136,19 @@
delr = r - float(ir) * m_gridSizeR;
brdz = (m_BrArray[iz+1][ir]-br0)/m_gridSizeZ;
brdr = (m_BrArray[iz][ir+1]-br0)/m_gridSizeR;
- std::cout << "br= " << m_BrArray[iz+1][ir] << " " << m_BrArray[iz][ir+1] << std::endl;
+ cout << "br= " << m_BrArray[iz+1][ir] << " " << m_BrArray[iz][ir+1] << endl;
}
delz = fabs(z) - float(iz) * m_gridSizeZ;
- //cout << " z " << z << " abs(z) " << abs(z) << " iz " << iz << endl;
- //cout << " float(iz-1) " << float(iz-1) << " dz " << dz << endl;
- //cout << " delz " << delz << endl;
+ cout << " z " << z << " abs(z) " << fabs(z) << " iz " << iz << endl;
+ cout << " float(iz-1) " << float(iz-1) << " dz " << m_gridSizeZ << endl;
+ cout << " delz " << delz << endl;
double bzdz = (m_BzArray[iz+1][ir]-bz0)/m_gridSizeZ;
double bzdr = (m_BzArray[iz][ir+1]-bz0)/m_gridSizeR;
- //cout << "bz= " << bz[iz+1][ir] << " " << bz[iz][ir+1] << endl;
+ cout << "bz= " << m_BzArray[iz+1][ir] << " " << m_BzArray[iz][ir+1] << endl;
if(izfar==1) {
hz = bz0+bzdr*delr;
@@ -149,9 +170,13 @@
Bfield[2] = hz;
/* flip sign for negative z */
- if ( Point[2] < 0. ) {
+ if ( z < 0. ) {
Bfield[2] = -Bfield[2];
}
+
+ cout << "Bfield XYZ = " << Bfield[0] << " " << Bfield[1] << " " << Bfield[2] << endl;
+
+ cout << endl;
}
void G4RZFieldMap::initializeArrays()