View Javadoc

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    * Solenoidal magnetic field.
9    * @author tonyj
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  }