Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DMagneticFieldMapFineMesh.h
Go to the documentation of this file.
1 // $Id$
2 //
3 // File: DMagneticFieldMapFineMesh.h
4 
5 #ifndef _DMagneticFieldMapFineMesh_
6 #define _DMagneticFieldMapFineMesh_
7 
8 #include <JANA/jerror.h>
9 
11 
12 #include <vector>
13 #include <string>
14 using std::vector;
15 using std::string;
16 
17 #include <JANA/JApplication.h>
18 #include <JANA/JCalibration.h>
19 using namespace jana;
20 
22  public:
23  DMagneticFieldMapFineMesh(JApplication *japp, int32_t runnumber=1, string namepath = "Magnets/Solenoid/solenoid_1350_poisson_20130925");
24  DMagneticFieldMapFineMesh(JCalibration *jcalib, string namepath = "Magnets/Solenoid/solenoid_1350_poisson_20130925", int32_t runnumber=1);
25  virtual ~DMagneticFieldMapFineMesh();
26 
27  int ReadMap(string namepath, int32_t runnumber=1, string context="");
28 
29  void GetField(const DVector3 &pos,DVector3 &Bout) const;
30  void GetField(double x, double y, double z, double &Bx, double &By, double &Bz, int method=0) const;
31  double GetBz(double x, double y, double z) const;
32  void GetFieldGradient(double x, double y, double z,
33  double &dBxdx, double &dBxdy,
34  double &dBxdz,
35  double &dBydx, double &dBydy,
36  double &dBydz,
37  double &dBzdx, double &dBzdy,
38  double &dBzdz) const;
39  void GetFieldBicubic(double x,double y,double z,
40  double &Bx,double &By,double &Bz) const;
41  void GetFieldAndGradient(double x,double y,double z,
42  double &Bx,double &By,
43  double &Bz,
44  double &dBxdx, double &dBxdy,
45  double &dBxdz,
46  double &dBydx, double &dBydy,
47  double &dBydz,
48  double &dBzdx, double &dBzdy,
49  double &dBzdz) const;
50  void GetFineMeshMap(string namepath,int32_t runnumber);
51  void WriteEvioFile(string evioFileName);
52  void ReadEvioFile(string evioFileName);
53  void GenerateFineMesh(void);
54 
55  typedef struct{
56  float x,y,z,Bx,By,Bz;
57  double dBxdx, dBxdy, dBxdz;
58  double dBydx, dBydy, dBydz;
59  double dBzdx, dBzdy, dBzdz;
60  double dBxdxdy,dBxdxdz,dBxdydz;
61  double dBydxdy,dBydxdz,dBydydz;
62  double dBzdxdy,dBzdxdz,dBzdydz;
64 
65  typedef struct{
66  double Br,Bz;
67  double dBrdr,dBrdz,dBzdr,dBzdz;
69 
70  protected:
71 
72  JCalibration *jcalib;
73  JResourceManager *jresman;
74 
75  vector< vector< vector<DBfieldPoint_t> > > Btable;
76 
77  float xmin, xmax, ymin, ymax, zmin, zmax;
78  int Nx, Ny, Nz;
79  double dx, dy,dz;
80  double one_over_dx,one_over_dz;
81 
82  vector<vector<DBfieldCylindrical_t> >mBfine;
83  double zminFine,rminFine,zmaxFine,rmaxFine,drFine,dzFine;
84  unsigned int NrFine,NzFine;
85  double zscale,rscale;
86 
87  private:
88  void InterpolateField(double r,double z,double &Br,double &Bz,double &dBrdr,
89  double &dBrdz,double &dBzdr,double &dBzdz) const;
90 };
91 
92 #endif // _DMagneticFieldMapFineMesh_
93 
vector< vector< DBfieldCylindrical_t > > mBfine
TVector3 DVector3
Definition: DVector3.h:14
Double_t x[NCHANNELS]
Definition: st_tw_resols.C:39
char string[256]
#define y
double zmax
JApplication * japp
static string evioFileName
vector< vector< vector< DBfieldPoint_t > > > Btable
Double_t ymin
Definition: bcal_hist_eff.C:89
Double_t ymax
Definition: bcal_hist_eff.C:91