15 #include <JANA/JApplication.h>
16 #include <JANA/JParameterManager.h>
46 if(bfield)
delete bfield;
55 phi_omega = M_PI/(2.0*M_PI);
59 z_omega = M_PI/(20.0);
62 _DBG_<<
"gPARMS==NULL!"<<endl;
66 gPARMS->SetDefaultParameter(
"BFIELD:PHI_AMP", phi_amp);
67 gPARMS->SetDefaultParameter(
"BFIELD:PHI_OMEGA", phi_omega);
68 gPARMS->SetDefaultParameter(
"BFIELD:R_AMP", r_amp);
69 gPARMS->SetDefaultParameter(
"BFIELD:R_OMEGA", r_omega);
70 gPARMS->SetDefaultParameter(
"BFIELD:Z_AMP", z_amp);
71 gPARMS->SetDefaultParameter(
"BFIELD:Z_OMEGA", z_omega);
78 GetField(pos.x(),pos.y(),pos.z(),Bx,By,Bz);
79 Bout.SetXYZ(Bx,By,Bz);
91 if(!initialized)
return;
92 bfield->GetField(x, y, z, Bx, By, Bz, method);
95 double r =
sqrt(x*x + y*y);
96 double phi = atan2(y,x);
97 if(phi<0.0)phi+=2.0*M_PI;
100 double fac = phi_amp*
sin(phi_omega*phi) + 1.0;
103 fac *= r_amp*
sin(r_omega*r) + 1.0;
106 fac *= z_amp*
sin(z_omega*z) + 1.0;
125 if(!initialized)
return 0.;
127 bfield->GetField(x, y, z, Bx, By, Bz);
130 double r =
sqrt(x*x + y*y);
131 double phi = atan2(y,x);
132 if(phi<0.0)phi+=2.0*M_PI;
135 double fac = phi_amp*
sin(phi_omega*phi) + 1.0;
138 fac *= r_amp*
sin(r_omega*r) + 1.0;
141 fac *= z_amp*
sin(z_omega*z) + 1.0;
153 double &dBxdx,
double &dBxdy,
155 double &dBydx,
double &dBydy,
157 double &dBzdx,
double &dBzdy,
164 if(!initialized)
return;
165 bfield->GetFieldGradient(x, y, z, dBxdx, dBxdy, dBxdz, dBydx, dBydy, dBydz, dBzdx, dBzdy, dBzdz);
170 double &Bx,
double &By,
double &Bz)
const{
175 if(!initialized)
return;
176 bfield->GetFieldBicubic(x,y,z,Bx,By,Bz);
181 double &Bx,
double &By,
183 double &dBxdx,
double &dBxdy,
185 double &dBydx,
double &dBydy,
187 double &dBzdx,
double &dBzdy,
188 double &dBzdz)
const{
193 if(!initialized)
return;
194 bfield->GetFieldAndGradient(x,y,z,Bx,By,Bz,dBxdx,dBxdy,dBxdz,
195 dBydx,dBydy,dBydz,dBzdx,dBzdy,dBzdz);
virtual ~DMagneticFieldMapSpoiled()
DMagneticFieldMapSpoiled(JApplication *japp, unsigned int run_number=1, string namepath="Magnets/Solenoid/solenoid_1500")
void GetFieldAndGradient(double x, double y, double z, double &Bx, double &By, double &Bz, double &dBxdx, double &dBxdy, double &dBxdz, double &dBydx, double &dBydy, double &dBydz, double &dBzdx, double &dBzdy, double &dBzdz) const
void GetFieldBicubic(double x, double y, double z, double &Bx, double &By, double &Bz) const
void GetFieldGradient(double x, double y, double z, double &dBxdx, double &dBxdy, double &dBxdz, double &dBydx, double &dBydy, double &dBydz, double &dBzdx, double &dBzdy, double &dBzdz) const
double GetBz(double x, double y, double z) const
void GetField(const DVector3 &pos, DVector3 &Bout) const