1 package org.lcsim.geometry.field;
2
3 import hep.physics.vec.BasicHep3Vector;
4 import org.jdom.Element;
5 import org.jdom.JDOMException;
6
7
8
9
10
11
12 public class Solenoid extends AbstractFieldMap
13 {
14 private double[] innerField;
15 private double[] outerField;
16 private double zmax;
17 private double outerRadiusSquared;
18
19 Solenoid(Element node) throws JDOMException
20 {
21 super(node);
22
23 double i = node.getAttribute("inner_field").getDoubleValue();
24 innerField = new double[] { 0, 0, i};
25 double o = node.getAttribute("outer_field").getDoubleValue();
26 outerField = new double[] { 0, 0, o};
27 zmax = node.getAttribute("zmax").getDoubleValue();
28 double r = node.getAttribute("outer_radius").getDoubleValue();
29 outerRadiusSquared = r*r;
30 }
31
32 void getField(double x, double y, double z, BasicHep3Vector field)
33 {
34 if (Math.abs(z)>zmax) field.setV(0,0,0);
35 else
36 {
37 double r2 = x*x + y*y;
38 double bz = (r2 > outerRadiusSquared) ? outerField[2] : innerField[2];
39 field.setV(0,0,bz);
40 }
41 }
42
43 public double[] getInnerField()
44 {
45 return innerField;
46 }
47
48 public double[] getOuterField()
49 {
50 return outerField;
51 }
52
53 public double getZMax()
54 {
55 return zmax;
56 }
57
58 public double getOuterRadius2()
59 {
60 return outerRadiusSquared;
61 }
62 }