1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 public class BSurfZPlane extends SurfZPlane
27 {
28
29
30
31
32
33
34
35
36
37
38 public static String typeName()
39 { return "BSurfZPlane";
40 }
41
42
43
44
45
46
47
48
49
50 public static String staticType()
51 { return typeName();
52 }
53
54
55
56
57 private double _xmin;
58
59
60 private double _xmax;
61
62
63 private double _ymin;
64
65
66 private double _ymax;
67
68
69
70
71 protected boolean safeBoundEqual(Surface srf)
72 {
73 BSurfZPlane bxyp = (BSurfZPlane) srf;
74 return super.safePureEqual(srf) &&
75 _xmin == bxyp._xmin && _xmax == bxyp._xmax &&
76 _ymin == bxyp._ymin && _ymax == bxyp._ymax;
77 }
78
79
80
81 private CrossStat status(VTrack trv, double dxtrk, double dytrk)
82 {
83 CrossStat xstat = super.pureStatus(trv);
84
85 if ( !xstat.at() ) return xstat;
86 Assert.assertTrue( ! xstat.boundsChecked() );
87
88 double xtrk = trv.vector().get(SurfZPlane.IX);
89 double xtrk1 = xtrk - dxtrk;
90 double xtrk2 = xtrk + dxtrk;
91
92
93 double ytrk = trv.vector().get(SurfZPlane.IY);
94 double ytrk1 = ytrk - dytrk;
95 double ytrk2 = ytrk + dytrk;
96
97
98 if( (xtrk2 < _xmin || xtrk1 > _xmax ) ||
99 (ytrk2 < _ymin || ytrk1 > _ymax ) )
100 return new CrossStat(BoundedStat.OUT_OF_BOUNDS);
101
102 if( (xtrk1 > _xmin && xtrk2 < _xmax ) &&
103 (ytrk1 > _ymin && ytrk2 < _ymax ) )
104 return new CrossStat(BoundedStat.IN_BOUNDS);
105
106 return new CrossStat(BoundedStat.BOTH_BOUNDS);
107 }
108
109
110
111
112
113
114
115
116
117
118 public BSurfZPlane(double zpos,
119 double xmin, double xmax,
120 double ymin, double ymax)
121 {
122 super(zpos);
123 _xmin = xmin;
124 _xmax = xmax;
125 _ymin = ymin;
126 _ymax = ymax;
127 Assert.assertTrue( _ymax > _ymin );
128 Assert.assertTrue( _xmax > _xmin );
129 }
130
131
132
133
134
135
136 public double xMin()
137 { return _xmin;
138 }
139
140
141
142
143
144
145 public double xMax()
146 { return _xmax;
147 }
148
149
150
151
152
153
154 public double yMin()
155 { return _ymin;
156 }
157
158
159
160
161
162
163 public double yMax()
164 { return _ymax;
165 }
166
167
168
169
170
171
172 public String type()
173 { return staticType();
174 }
175
176
177
178
179
180
181 public Surface newSurface()
182 {
183 double zpos = parameter(SurfZPlane.ZPOS);
184 return new BSurfZPlane( zpos, _xmin, _xmax, _ymin, _ymax );
185 }
186
187
188
189
190
191
192
193 public CrossStat status(VTrack trv)
194 {
195 double prec = CrossStat.staticPrecision();
196 double dxtrk = prec;
197 double dytrk = prec;
198 return status(trv,dxtrk,dytrk);
199 }
200
201
202
203
204
205
206
207 public CrossStat status(ETrack tre)
208 {
209 double nsigma = CrossStat.staticNSigma();
210 double prec = CrossStat.staticPrecision();
211 double dxtrk = nsigma*
212 Math.sqrt(tre.error().get(SurfZPlane.IX,SurfZPlane.IX)) + prec;
213 double dytrk = nsigma*
214 Math.sqrt(tre.error().get(SurfZPlane.IY,SurfZPlane.IY)) + prec;
215 return status(tre,dxtrk,dytrk);
216 }
217
218
219
220
221
222
223
224 public String toString()
225 {
226 StringBuffer sb = new StringBuffer(super.toString());
227 sb.append(", xmin " + _xmin + " and xmax " + _xmax
228 + ", ymin " + _ymin + " and ymax " + _ymax);
229 return sb.toString();
230 }
231 }