1 package org.lcsim.geometry.field;
2
3 import hep.physics.vec.BasicHep3Vector;
4 import hep.physics.vec.Hep3Vector;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import org.lcsim.geometry.FieldMap;
9
10
11
12
13
14
15
16
17
18
19
20
21 public class FieldOverlay implements FieldMap
22 {
23 private List<FieldMap> fields = new ArrayList<FieldMap>();
24
25 public FieldOverlay()
26 {}
27
28 public void addField(FieldMap field)
29 {
30 fields.add(field);
31 }
32
33 public void getField(double[] pos, double[] b)
34 {
35 int size = fields.size();
36 if (size == 0)
37 {
38 b[0] = b[1] = b[2] = 0.;
39 }
40 else if (size == 1)
41 {
42 fields.get(0).getField(pos,b);
43 }
44 else
45 {
46 double[] temp = new double[3];
47 b[0] = b[1] = b[2] = 0.;
48 for (FieldMap field : fields)
49 {
50 field.getField(pos, temp);
51 for (int i=0; i<3; i++) b[i] += temp[i];
52 }
53 }
54 }
55
56 public double[] getField(double[] pos)
57 {
58 double[] b = new double[3];
59 getField(pos, b);
60 return b;
61 }
62
63 public Hep3Vector getField(Hep3Vector position, BasicHep3Vector field)
64 {
65 if (field == null) field = new BasicHep3Vector();
66 int size = fields.size();
67 if (size == 0)
68 {
69 field.setV(0,0,0);
70 }
71 else if (size == 1)
72 {
73 fields.get(0).getField(position,field);
74 }
75 else
76 {
77 double bx = 0;
78 double by = 0;
79 double bz = 0;
80 BasicHep3Vector temp = new BasicHep3Vector();
81 for (FieldMap map : fields)
82 {
83 map.getField(position,temp);
84 bx += temp.x();
85 by += temp.y();
86 bz += temp.z();
87 }
88 field.setV(bx,by,bz);
89 }
90 return field;
91 }
92
93 public Hep3Vector getField(Hep3Vector position)
94 {
95 return getField(position,null);
96 }
97 }