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
27
28 public class BSurfXYPlane extends SurfXYPlane
29 {
30
31
32
33
34
35
36 public static String typeName()
37 { return "BSurfXYPlane"; }
38
39
40
41
42
43
44
45 public static String staticType()
46 { return typeName(); }
47
48
49
50
51 private double _vmin;
52
53
54 private double _vmax;
55
56
57 private double _zmin;
58
59
60 private double _zmax;
61
62
63 protected boolean safeBoundEqual( Surface srf)
64 {
65 BSurfXYPlane bxyp = (BSurfXYPlane) srf;
66 return super.safePureEqual(srf) &&
67 _vmin == bxyp._vmin && _vmax == bxyp._vmax &&
68 _zmin == bxyp._zmin && _zmax == bxyp._zmax;
69 }
70
71
72
73 private CrossStat status(VTrack trv, double dvtrk, double dztrk)
74 {
75 CrossStat xstat = super.pureStatus(trv);
76
77 if ( !xstat.at() ) return xstat;
78 Assert.assertTrue( ! xstat.boundsChecked() );
79
80 double vtrk = trv.vector().get(SurfXYPlane.IV);
81 double vtrk1 = vtrk - dvtrk;
82 double vtrk2 = vtrk + dvtrk;
83
84
85 double ztrk = trv.vector().get(SurfXYPlane.IZ);
86 double ztrk1 = ztrk - dztrk;
87 double ztrk2 = ztrk + dztrk;
88
89
90 if( (vtrk2 < _vmin || vtrk1 > _vmax ) ||
91 (ztrk2 < _zmin || ztrk1 > _zmax ) )
92 return new CrossStat(BoundedStat.OUT_OF_BOUNDS);
93
94 if( (vtrk1 > _vmin && vtrk2 < _vmax ) &&
95 (ztrk1 > _zmin && ztrk2 < _zmax ) )
96 return new CrossStat(BoundedStat.IN_BOUNDS);
97
98 return new CrossStat(BoundedStat.BOTH_BOUNDS);
99 }
100
101
102
103
104
105
106
107
108
109
110
111 public BSurfXYPlane(double dist, double phi,
112 double vmin, double vmax,
113 double zmin, double zmax)
114 {
115 super(dist,phi);
116 _vmin = vmin;
117 _vmax = vmax;
118 _zmin = zmin;
119 _zmax = zmax;
120 Assert.assertTrue ( _zmax > _zmin );
121 Assert.assertTrue ( _vmax > _vmin );
122 }
123
124
125
126
127
128 public double vMin()
129 { return _vmin; }
130
131
132
133
134
135 public double vMax()
136 { return _vmax; }
137
138
139
140
141
142 public double zMin()
143 { return _zmin; }
144
145
146
147
148
149 public double zMax()
150 { return _zmax; }
151
152
153
154
155
156
157
158 public String type()
159 { return staticType(); };
160
161
162
163
164
165 public Surface newSurface()
166 {
167
168 double phi = parameter(SurfXYPlane.NORMPHI);
169 double dist = parameter(SurfXYPlane.DISTNORM);
170 return new BSurfXYPlane( dist, phi, _vmin, _vmax, _zmin, _zmax );
171 }
172
173
174
175
176
177
178 public CrossStat status(VTrack trv)
179 {
180 double prec = CrossStat.staticPrecision();
181 double dvtrk = prec;
182 double dztrk = prec;
183 return status(trv,dvtrk,dztrk);
184 }
185
186
187
188
189
190
191 public CrossStat status(ETrack tre)
192 {
193 double nsigma = CrossStat.staticNSigma();
194 double prec = CrossStat.staticPrecision();
195 double dvtrk = nsigma*
196 Math.sqrt(tre.error().get(SurfXYPlane.IV,SurfXYPlane.IV)) + prec;
197 double dztrk = nsigma*
198 Math.sqrt(tre.error().get(SurfXYPlane.IZ,SurfXYPlane.IZ)) + prec;
199 return status(tre,dvtrk,dztrk);
200 }
201
202
203
204
205
206
207 public String toString()
208 {
209 return super.toString() + ", vmin " + _vmin + " and vmax " + _vmax
210 + ", zmin " + _zmin + " and zmax " + _zmax;
211 }
212 }