View Javadoc

1   /*
2    * HitVector_Test.java
3    *
4    * Created on July 24, 2007, 2:49 PM
5    *
6    * $Id: HitVector_Test.java,v 1.1.1.1 2010/04/08 20:38:00 jeremy Exp $
7    */
8   
9   package org.lcsim.recon.tracking.trfbase;
10  
11  import junit.framework.TestCase;
12  import org.lcsim.recon.tracking.trfutil.Assert;
13  
14  /**
15   *
16   * @author Norman Graf
17   */
18  public class HitVector_Test extends TestCase
19  {
20      private boolean debug;
21      /** Creates a new instance of HitVector_Test */
22      public void testHitVector()
23      {
24          String ok_prefix = "HitVector (I): ";
25          String error_prefix = "HitVector test (E): ";
26          
27          if(debug) System.out.println("-------- Testing component HitVector. --------" );
28          
29          //********************************************************************
30          
31          if(debug) System.out.println("Test constructor." );
32          // vector
33          HitVector hv1 = new HitVector(3);
34          if(debug) System.out.println(hv1 );
35          Assert.assertTrue( hv1.size() == 3 );
36          Assert.assertTrue( hv1.amax() == 0.0 );
37          
38          // error
39          HitError he1 = new HitError(3);
40          if(debug) System.out.println(he1 );
41          Assert.assertTrue( he1.size() == 3 );
42          Assert.assertTrue( he1.amax() == 0.0 );
43          
44          // derivative
45          HitDerivative hd1 = new HitDerivative(3);
46          if(debug) System.out.println(hd1 );
47          Assert.assertTrue( hd1.size() == 3 );
48          Assert.assertTrue( hd1.amax() == 0.0 );
49          
50          //********************************************************************
51          
52          if(debug) System.out.println("Test accessors and copy constructor." );
53          // vector
54          hv1.set(0,1.0);
55          hv1.set(1,-2.0);
56          hv1.set(2,3.0);
57          if(debug) System.out.println(hv1 );
58          
59          HitVector hv2 = new HitVector(hv1);
60          Assert.assertTrue( hv2.get(0) == 1.0 );
61          Assert.assertTrue( hv2.get(1) == -2.0 );
62          Assert.assertTrue( hv2.get(2) == 3.0 );
63          
64          // error
65          he1.set(0,0,11.0);
66          he1.set(0,1,-12.0);
67          he1.set(1,1,22.0);
68          he1.set(0,2,31.0);
69          he1.set(2,1,-32.0);
70          he1.set(2,2,33.0);
71          if(debug) System.out.println(he1 );
72          HitError he2 = new HitError(he1);
73          if(debug) System.out.println(he2 );
74          Assert.assertTrue( he2.get(0,0) == 11.0 );
75          Assert.assertTrue( he2.get(0,1) == -12.0 );
76          Assert.assertTrue( he2.get(1,1) == 22.0 );
77          Assert.assertTrue( he2.get(2,0) == 31.0 );
78          Assert.assertTrue( he2.get(1,2) == -32.0 );
79          Assert.assertTrue( he2.get(2,2) == 33.0 );
80          // derivative
81          hd1.set(0,0,1.0);
82          hd1.set(0,1,0.1);
83          hd1.set(0,2,0.0);
84          hd1.set(0,3,0.0);
85          hd1.set(0,4,0.0);
86          hd1.set(1,0,-0.1);
87          hd1.set(1,1,1.0);
88          hd1.set(1,2,0.0);
89          hd1.set(1,3,0.0);
90          hd1.set(1,4,0.001);
91          hd1.set(2,0,0.0);
92          hd1.set(2,1,0.0);
93          hd1.set(2,2,1.0);
94          hd1.set(2,3,-0.2);
95          hd1.set(2,4,0.2);
96          if(debug) System.out.println(hd1 );
97          
98          HitDerivative hd2 = new HitDerivative(hd1);
99          Assert.assertTrue( hd2.get(0,0) == 1.0 );
100         Assert.assertTrue( hd2.get(0,1) == 0.1 );
101         Assert.assertTrue( hd2.get(0,2) == 0.0 );
102         Assert.assertTrue( hd2.get(0,3) == 0.0 );
103         Assert.assertTrue( hd2.get(0,4) == 0.0 );
104         Assert.assertTrue( hd2.get(1,0) == -0.1 );
105         Assert.assertTrue( hd2.get(1,1) == 1.0 );
106         Assert.assertTrue( hd2.get(1,2) == 0.0 );
107         Assert.assertTrue( hd2.get(1,3) == 0.0 );
108         Assert.assertTrue( hd2.get(1,4) == 0.001 );
109         Assert.assertTrue( hd2.get(2,0) == 0.0 );
110         Assert.assertTrue( hd2.get(2,1) == 0.0 );
111         Assert.assertTrue( hd2.get(2,2) == 1.0 );
112         Assert.assertTrue( hd2.get(2,3) == -0.2 );
113         Assert.assertTrue( hd2.get(2,4) == 0.2 );
114         
115         //********************************************************************
116         
117         if(debug) System.out.println("Test min and max." );
118         // vector
119         if(debug) System.out.println(hv1.min() + ' ' + hv1.max() + ' '
120                 + hv1.amin() + ' ' + hv1.amax() );
121         Assert.assertTrue( hv1.min() == -2.0 );
122         Assert.assertTrue( hv1.max() ==  3.0 );
123         Assert.assertTrue( hv1.amin() == 1.0 );
124         Assert.assertTrue( hv1.amax() == 3.0 );
125         // errorr
126         if(debug) System.out.println(he1.min() + ' ' + he1.max() + ' '
127                 + he1.amin() + ' ' + he1.amax() );
128         Assert.assertTrue( he1.min() == -32.0 );
129         Assert.assertTrue( he1.max() ==  33.0 );
130         Assert.assertTrue( he1.amin() == 11.0 );
131         Assert.assertTrue( he1.amax() == 33.0 );
132         // vector
133         if(debug) System.out.println(hd1.min() + ' ' + hd1.max() + ' '
134                 + hd1.amin() + ' ' + hd1.amax() );
135         Assert.assertTrue( hd1.min() == -0.2 );
136         Assert.assertTrue( hd1.max() ==  1.0 );
137         Assert.assertTrue( hd1.amin() == 0.0 );
138         Assert.assertTrue( hd1.amax() == 1.0 );
139         
140         //********************************************************************
141         
142         if(debug) System.out.println("Test equality." );
143         // vector
144         HitVector hv3 = new HitVector(3);
145         hv3.set(0,2.0);
146         hv3.set(1,4.0);
147         hv3.set(2,6.0);
148         if(debug) System.out.println(hv1 );
149         if(debug) System.out.println(hv2 );
150         
151         Assert.assertTrue( hv1.equals(hv2) );
152         Assert.assertTrue( ! (hv1.notEquals(hv2)) );
153         if(debug) System.out.println(hv3 );
154         if(debug) System.out.println(hv2 );
155         Assert.assertTrue( hv3.notEquals(hv2) );
156         Assert.assertTrue( ! (hv3.equals(hv2)) );
157         HitVector hv4 = new HitVector(2);
158         hv4.set(0,hv1.get(0));
159         hv4.set(1,hv1.get(1));
160         if(debug) System.out.println(hv4 );
161         if(debug) System.out.println(hv1 );
162         Assert.assertTrue( hv4.notEquals(hv1) );
163         
164         // error
165         HitError he3 = new HitError(3);
166         if(debug) System.out.println(he1 );
167         if(debug) System.out.println(he2 );
168         Assert.assertTrue( he1.equals(he2) );
169         if(debug) System.out.println(he3 );
170         if(debug) System.out.println(he2 );
171         Assert.assertTrue( he3.notEquals(he2) );
172         Assert.assertTrue( ! (he3.equals(he2)) );
173         
174         HitError he4 = new HitError(2);
175         he4.set(0,0,he1.get(0,0));
176         he4.set(0,1,he1.get(0,1));
177         he4.set(1,1,he1.get(1,1));
178         if(debug) System.out.println(he4 );
179         if(debug) System.out.println(he1 );
180         Assert.assertTrue( he4.notEquals(he1) );
181         Assert.assertTrue( ! (he4.equals(he1)) );
182         
183         // derivative
184         HitDerivative hd3 = new HitDerivative(3);
185         if(debug) System.out.println(hd1 );
186         if(debug) System.out.println(hd2 );
187         Assert.assertTrue( hd1.equals(hd2) );
188         if(debug) System.out.println(hd3 );
189         if(debug) System.out.println(hd2 );
190         Assert.assertTrue( hd3.notEquals(hd2) );
191         Assert.assertTrue( ! (hd3.equals(hd2)) );
192         
193         HitDerivative hd4 = new HitDerivative(2);
194         hd4.set(0,0,hd1.get(0,0));
195         hd4.set(0,1,hd1.get(0,1));
196         hd4.set(1,1,hd1.get(1,1));
197         if(debug) System.out.println(hd4 );
198         if(debug) System.out.println(hd1 );
199         Assert.assertTrue( hd4.notEquals(hd1) );
200         Assert.assertTrue( ! (hd4.equals(hd1)) );
201         
202         //********************************************************************
203 /*
204   if(debug) System.out.println("Test assignment." );
205   // vector
206   hv3 = hv2;
207   if(debug) System.out.println(hv2 );
208   if(debug) System.out.println(hv3 );
209   Assert.assertTrue( hv2 == hv3 );
210   // error
211   he3 = he2;
212   if(debug) System.out.println(he2 );
213   if(debug) System.out.println(he3 );
214   Assert.assertTrue( he2 == he3 );
215   // derivative
216   hd3 = hd2;
217   if(debug) System.out.println(hd2 );
218   if(debug) System.out.println(hd3 );
219   Assert.assertTrue( hd2 == hd3 );
220  */
221         //********************************************************************
222         
223         if(debug) System.out.println("Test addition and subtraction." );
224         double diff;
225         double maxdiff = 1.e-12;
226         // vector
227         hv3 = new HitVector(hv2);    // hv1
228         hv3.plusEquals(hv2);         // 2*hv1
229         HitVector hv5 = new HitVector(hv3.plus(hv2));   // 3*hv1
230         if(debug) System.out.println(hv5 );
231         if(debug) System.out.println(hv1 );
232         
233         Assert.assertTrue( hv5.notEquals(hv1) );
234         hv5 = new HitVector(hv5.minus(hv2));
235         hv5.minusEquals(hv2);
236         if(debug) System.out.println(hv5 );
237         
238         diff = (hv5.minus(hv1)).amax();
239         if(debug) System.out.println(diff );
240         Assert.assertTrue( diff < maxdiff );
241         
242         // error
243         he3 = new HitError(he2);                   // he1
244         he3.plusEquals(he2);                  // 2*he1
245         HitError he5 = new HitError(he3.plus(he2));    // 3*he1
246         if(debug) System.out.println(he5 );
247         if(debug) System.out.println(he1 );
248         Assert.assertTrue( he5.notEquals(he1) );
249         he5 = new HitError(he5.minus(he2));
250         he5.minusEquals(he2);
251         if(debug) System.out.println(he5 );
252         diff = (he5.minus(he1)).amax();
253         if(debug) System.out.println(diff );
254         Assert.assertTrue( diff < maxdiff );
255         
256         // derivative
257         hd3 = new HitDerivative(hd2);                       // hd1
258         hd3.plusEquals(hd2);                      // 2*hd1
259         HitDerivative hd5 = new HitDerivative(hd3.plus(hd2));   // 3*hd1
260         if(debug) System.out.println(hd5 );
261         if(debug) System.out.println(hd1 );
262         Assert.assertTrue( hd5.notEquals(hd1) );
263         
264         hd5 = new HitDerivative(hd5.minus(hd2));
265         hd5.minusEquals(hd2);
266         if(debug) System.out.println(hd5 );
267         diff = (hd5.minus(hd1)).amax();
268         if(debug) System.out.println(diff );
269         Assert.assertTrue( diff < maxdiff );
270         
271         //********************************************************************
272         
273         if(debug) System.out.println("Test construction from an array." );
274         double[] tmp = new double[100];
275         int i, j, ij;
276         int sz;
277         // vector
278         sz = he1.size();
279         for ( i=0; i<sz; ++i ) tmp[i] = hv1.get(i);
280         HitVector hv6 = new HitVector( hv1.size(), tmp );
281         if(debug) System.out.println(hv1 );
282         if(debug) System.out.println(hv6 );
283         Assert.assertTrue( hv1.equals(hv6) );
284         
285         // error
286         sz = he1.size();
287         ij = 0;
288         for ( i=0; i<sz; ++i )
289             for ( j=0; j<=i; ++j ) tmp[ij++] = he1.get(i,j);
290         if(debug) System.out.println(he1 );
291         if(debug) System.out.println("he1.size()= "+he1.size());
292         HitError he6 = new HitError( he1.size(), tmp );
293         if(debug) System.out.println(he6 );
294         Assert.assertTrue( he1.equals(he6) );
295         
296         // derivative
297         sz = hd1.size();
298         ij = 0;
299         for ( i=0; i<sz; ++i )
300             for ( j=0; j<5; ++j ) tmp[ij++] = hd1.get(i,j);
301         if(debug) System.out.println(hd1 );
302         HitDerivative hd6 = new HitDerivative( hd1.size(), tmp );
303         if(debug) System.out.println(hd6 );
304         Assert.assertTrue( hd1.equals(hd6) );
305         
306         //********************************************************************
307         
308         if(debug) System.out.println("Test 1D construction values." );
309         // vector
310         HitVector hv01 = new HitVector(1.0);
311         if(debug) System.out.println(hv01 );
312         Assert.assertTrue( hv01.size() == 1 );
313         Assert.assertTrue( hv01.get(0) == 1.0 );
314         // error
315         HitError he01 = new HitError(0.11);
316         if(debug) System.out.println(he01 );
317         Assert.assertTrue( he01.size() == 1 );
318         Assert.assertTrue( he01.get(0,0) == 0.11 );
319         
320         //********************************************************************
321         
322         if(debug) System.out.println("Test 2D construction values." );
323         // vector
324         HitVector hv02 = new HitVector(1.0,2.0);
325         if(debug) System.out.println(hv02 );
326         Assert.assertTrue( hv02.size() == 2 );
327         Assert.assertTrue( hv02.get(0) == 1.0 );
328         Assert.assertTrue( hv02.get(1) == 2.0 );
329         // error
330         HitError he02 = new HitError(0.11,0.21,0.22);
331         if(debug) System.out.println(he02 );
332         Assert.assertTrue( he02.size() == 2 );
333         Assert.assertTrue( he02.get(0,0) == 0.11 );
334         Assert.assertTrue( he02.get(1,0) == 0.21 );
335         Assert.assertTrue( he02.get(1,1) == 0.22 );
336         
337         //********************************************************************
338         
339         if(debug) System.out.println("Test 3D construction values." );
340         // vector
341         HitVector hv03 = new HitVector(1.0,2.0,3.0);
342         if(debug) System.out.println(hv03 );
343         Assert.assertTrue( hv03.size() == 3 );
344         Assert.assertTrue( hv03.get(0) == 1.0 );
345         Assert.assertTrue( hv03.get(1) == 2.0 );
346         Assert.assertTrue( hv03.get(2) == 3.0 );
347         // error
348         HitError he03 = new HitError(0.11,0.21,0.22,0.31,0.32,0.33);
349         if(debug) System.out.println(he03 );
350         Assert.assertTrue( he03.size() == 3 );
351         Assert.assertTrue( he03.get(0,0) == 0.11 );
352         Assert.assertTrue( he03.get(1,0) == 0.21 );
353         Assert.assertTrue( he03.get(1,1) == 0.22 );
354         Assert.assertTrue( he03.get(2,0) == 0.31 );
355         Assert.assertTrue( he03.get(2,1) == 0.32 );
356         Assert.assertTrue( he03.get(2,2) == 0.33 );
357         
358         //********************************************************************
359         
360         if(debug) System.out.println("Test constructing hit error from track error."
361                 );
362         TrackError terr = new TrackError();
363         HitDerivative hder = new HitDerivative(2);
364         double der = 1.0;
365         for ( i=0; i<5; ++i )
366         {
367             terr.set(i,i,(i+1));
368             hder.set(0,i,Math.sqrt(der));
369             hder.set(1,i,2.0*hder.get(0,i));
370             der /= 10.0;
371         }
372         double e11 = 1.2345;
373         HitError expected_err = new HitError(e11,2.0*e11,4.0*e11);
374         HitError calculated_err = new HitError(hder,terr);
375         HitError diff_err = calculated_err.minus(expected_err);
376         if(debug) System.out.println( hder );
377         if(debug) System.out.println( terr );
378         if(debug) System.out.println( expected_err );
379         if(debug) System.out.println( calculated_err );
380         if(debug) System.out.println( diff_err );
381         Assert.assertTrue( diff_err.amax() < 1.e-12 );
382         
383         //********************************************************************
384         
385         if(debug) System.out.println("Test inversion." );
386         HitError test_err = new HitError(2.0,1.0,3.0);
387         HitError inverted_err = new HitError(test_err);
388         if(debug) System.out.println(inverted_err );
389         int stat = inverted_err.invert();
390         if(debug) System.out.println(stat );
391         Assert.assertTrue( stat == 0 );
392         
393         HitError original_err = new HitError(inverted_err);
394         stat = original_err.invert();
395         if(debug) System.out.println(stat );
396         Assert.assertTrue( stat == 0 );
397         if(debug) System.out.println(inverted_err );
398         if(debug) System.out.println(original_err );
399         Assert.assertTrue( (original_err.minus(test_err)).amax() < 1.e-12 );
400         
401         //********************************************************************
402         
403         if(debug) System.out.println("Test fetching underlying representation."
404                 );
405         Jama.Matrix uvec = hv1.matrix();
406         Jama.Matrix usma = he1.matrix();
407         Jama.Matrix umtx = hd1.matrix();
408         
409         //********************************************************************
410         
411         if(debug) System.out.println(ok_prefix
412                 + "------------- All tests passed. -------------" );
413         //********************************************************************        
414     }
415     
416 }