View Javadoc

1   /*
2    * HitZPlane2_Test.java
3    *
4    * Created on July 24, 2007, 11:03 PM
5    *
6    * $Id: HitZPlane2_Test.java,v 1.1.1.1 2010/04/08 20:38:00 jeremy Exp $
7    */
8   
9   package org.lcsim.recon.tracking.trfzp;
10  
11  import java.util.ArrayList;
12  import java.util.List;
13  import junit.framework.TestCase;
14  import org.lcsim.recon.tracking.trfbase.ETrack;
15  import org.lcsim.recon.tracking.trfbase.Hit;
16  import org.lcsim.recon.tracking.trfbase.HitDerivative;
17  import org.lcsim.recon.tracking.trfbase.HitError;
18  import org.lcsim.recon.tracking.trfbase.HitVector;
19  import org.lcsim.recon.tracking.trfbase.TrackError;
20  import org.lcsim.recon.tracking.trfbase.TrackVector;
21  import org.lcsim.recon.tracking.trfutil.Assert;
22  
23  /**
24   *
25   * @author Norman Graf
26   */
27  public class HitZPlane2_Test extends TestCase
28  {
29      private boolean debug;
30      // calculate hm from a track vector
31      static HitVector calc_hm(TrackVector vec)
32      {
33          double x_track = vec.get(SurfZPlane.IX);
34          double y_track = vec.get(SurfZPlane.IY);
35          
36          return new HitVector( x_track, y_track );
37      }
38      
39      // calculate dhm from error matrix
40      static HitError calc_dhm(TrackError err)
41      {
42          double exx_track = err.get(SurfZPlane.IX,SurfZPlane.IX);
43          double exy_track = err.get(SurfZPlane.IX,SurfZPlane.IY);
44          double eyy_track = err.get(SurfZPlane.IY,SurfZPlane.IY);
45          
46          return new HitError( exx_track, exy_track, eyy_track);
47      }
48      
49      // compare HitError and error matrix of the cluster
50      
51      static boolean hiteqsm(  HitError lhs,   HitError rhs)
52      {
53          if ( lhs.size() != rhs.size() || lhs.size()!=2 ) return false;
54          return ( (lhs.get(0,0) == rhs.get(ClusZPlane2.IX,ClusZPlane2.IX)) &&
55                  (lhs.get(0,1) == rhs.get(ClusZPlane2.IX,ClusZPlane2.IY)) &&
56                  (lhs.get(1,1) == rhs.get(ClusZPlane2.IY,ClusZPlane2.IY)) );
57      }
58      
59      // compare HitVector and vector of the cluster
60      
61      static boolean hiteqvec(  HitVector  lhs,   HitVector  rhs)
62      {
63          if ( lhs.size() != rhs.size() || lhs.size()!=2 ) return false;
64          return ( (lhs.get(0) == rhs.get(ClusZPlane2.IX)) &&
65                  (lhs.get(1) == rhs.get(ClusZPlane2.IY)) );
66      }
67      
68      
69      //**********************************************************************
70      
71      /** Creates a new instance of HitZPlane2_Test */
72      public void testHitZPlane2()
73      {
74          String component = "HitZPlane2";
75          String ok_prefix = component + " (I): ";
76          String error_prefix = component + " test (E): ";
77          
78          if(debug) System.out.println( ok_prefix
79                  + "-------- Testing component " + component
80                  + ". --------" );
81          
82          
83          int IX = ClusZPlane2.IX;
84          int IY = ClusZPlane2.IY;
85          
86          
87          if(debug) System.out.println( ok_prefix + "Test cluster constructors." );
88          List mcids = new ArrayList();
89          mcids.add(new Integer(1));
90          mcids.add(new Integer(2));
91          
92          double zpos1 = 10.0;
93          double x1 = 1.0;
94          double y1 = 1.1;
95          HitError dhm1 = new HitError(2);
96          dhm1.set(ClusZPlane2.IX,ClusZPlane2.IX, 0.02);
97          dhm1.set(ClusZPlane2.IX,ClusZPlane2.IY, 0.01);
98          dhm1.set(ClusZPlane2.IY,ClusZPlane2.IY, 0.03);
99          SurfZPlane szp1 = new SurfZPlane(zpos1);
100         ClusZPlane2 hcp1 = new ClusZPlane2(zpos1,x1,y1,dhm1.get(ClusZPlane2.IX,ClusZPlane2.IX),dhm1.get(ClusZPlane2.IY,ClusZPlane2.IY),dhm1.get(ClusZPlane2.IX,ClusZPlane2.IY));
101         ClusZPlane2 hcp1a = new ClusZPlane2(zpos1,x1,y1,dhm1.get(ClusZPlane2.IX,ClusZPlane2.IX),dhm1.get(ClusZPlane2.IY,ClusZPlane2.IY),dhm1.get(ClusZPlane2.IX,ClusZPlane2.IY),mcids);
102         
103         Assert.assertTrue( hcp1.equals(hcp1a));
104         Assert.assertTrue(hcp1.x() == x1 );
105         Assert.assertTrue(hcp1.y() == y1 );
106         Assert.assertTrue(hcp1.dX2() == 0.02 );
107         Assert.assertTrue(hcp1.dY2() == 0.03 );
108         Assert.assertTrue(hcp1.dXdY() == 0.01 );
109         Assert.assertTrue(hcp1a.x() == x1 );
110         Assert.assertTrue(hcp1a.y() == y1 );
111         Assert.assertTrue(hcp1a.dX2() == 0.02 );
112         Assert.assertTrue(hcp1a.dY2() == 0.03 );
113         Assert.assertTrue(hcp1a.dXdY() == 0.01 );
114         Assert.assertTrue(hcp1.mcIds().size()==0);
115         Assert.assertTrue(hcp1a.mcIds().size()==2);
116         
117         if(debug) System.out.println( hcp1 );
118         
119         double zpos2 = 20.0;
120         double x2 = 2.0;
121         double y2 = 2.2;
122         HitVector hm2 = new HitVector(2);
123         hm2.set(ClusZPlane2.IX, x2);
124         hm2.set(ClusZPlane2.IY, y2);
125         HitError dhm2 = new HitError(2);
126         dhm2.set(ClusZPlane2.IX,ClusZPlane2.IX,  0.022);
127         dhm2.set(ClusZPlane2.IX,ClusZPlane2.IY,  0.012);
128         dhm2.set(ClusZPlane2.IY,ClusZPlane2.IY,  0.032);
129         ClusZPlane2 hcp2 = new ClusZPlane2(zpos2,x2,y2,dhm2.get(ClusZPlane2.IX,ClusZPlane2.IX),dhm2.get(ClusZPlane2.IY,ClusZPlane2.IY),dhm2.get(ClusZPlane2.IX,ClusZPlane2.IY));
130         ClusZPlane2 hcp2a = new ClusZPlane2(zpos2,x2,y2,dhm2.get(ClusZPlane2.IX,ClusZPlane2.IX),dhm2.get(ClusZPlane2.IY,ClusZPlane2.IY),dhm2.get(ClusZPlane2.IX,ClusZPlane2.IY),mcids);
131         
132         Assert.assertTrue(hcp2.equals(hcp2a));
133         Assert.assertTrue(hcp2.mcIds().size()==0);
134         Assert.assertTrue(hcp2a.mcIds().size()==2);
135         Assert.assertTrue(hcp2.x() == x2 );
136         Assert.assertTrue(hcp2.y() == y2 );
137         Assert.assertTrue(hcp2.dX2() == 0.022 );
138         Assert.assertTrue(hcp2.dY2() == 0.032 );
139         Assert.assertTrue(hcp2.dXdY() == 0.012 );
140         Assert.assertTrue(hcp2a.x() == x2 );
141         Assert.assertTrue(hcp2a.y() == y2 );
142         Assert.assertTrue(hcp2a.dX2() == 0.022 );
143         Assert.assertTrue(hcp2a.dY2() == 0.032 );
144         Assert.assertTrue(hcp2a.dXdY() == 0.012 );
145         
146         HitVector hm1 = new HitVector(2);
147         hm1.set(ClusZPlane2.IX, x1);
148         hm1.set(ClusZPlane2.IY, y1);
149         ClusZPlane2 hcp3 = new ClusZPlane2(zpos1,x1,y1,dhm1.get(ClusZPlane2.IX,ClusZPlane2.IX),dhm1.get(ClusZPlane2.IY,ClusZPlane2.IY),dhm1.get(ClusZPlane2.IX,ClusZPlane2.IY));
150         ClusZPlane2 hcp3a = new ClusZPlane2(zpos1,x1,y1,dhm1.get(ClusZPlane2.IX,ClusZPlane2.IX),dhm1.get(ClusZPlane2.IY,ClusZPlane2.IY),dhm1.get(ClusZPlane2.IX,ClusZPlane2.IY),mcids);
151         
152         ClusZPlane2 hcp3b = new ClusZPlane2(hcp3a);
153         ClusZPlane2 hcp3c =  new ClusZPlane2(hcp3);
154         
155         Assert.assertTrue(hcp3.x() == x1 );
156         Assert.assertTrue(hcp3.y() == y1 );
157         Assert.assertTrue(hcp3.dX2() == 0.02 );
158         Assert.assertTrue(hcp3.dY2() == 0.03 );
159         Assert.assertTrue(hcp3.dXdY() == 0.01 );
160         Assert.assertTrue(hcp3a.x() == x1 );
161         Assert.assertTrue(hcp3a.y() == y1 );
162         Assert.assertTrue(hcp3a.dX2() == 0.02 );
163         Assert.assertTrue(hcp3a.dY2() == 0.03 );
164         Assert.assertTrue(hcp3a.dXdY() == 0.01 );
165         
166         // test two diferent constructors
167         Assert.assertTrue(hcp3b.equals(hcp3a));
168         Assert.assertTrue(hcp3.equals(hcp3c));
169         Assert.assertTrue(hcp3.mcIds().size()==0);
170         Assert.assertTrue(hcp3a.mcIds().size()==2);
171         Assert.assertTrue(hcp3c.mcIds().size()==0);
172         Assert.assertTrue(hcp3b.mcIds().size()==2);
173         
174         Assert.assertTrue( hcp3.equals(hcp1) );
175         
176         //********************************************************************
177         
178         if(debug) System.out.println( ok_prefix + "Test cluster type ID." );
179         if(debug) System.out.println( hcp1.type() );
180         if(debug) System.out.println( hcp2.type() );
181         Assert.assertTrue( hcp1.type() != null );
182         Assert.assertTrue( hcp1.type().equals(hcp2.type()) );
183         
184         //********************************************************************
185         
186         if(debug) System.out.println( ok_prefix + "Test cluster accessors." );
187         if(debug) System.out.println( hcp1 );
188         if(debug) System.out.println( hcp1.surface() );
189         
190         Assert.assertTrue( hcp1.surface().equals(szp1) );
191         
192         //********************************************************************
193         
194         if(debug) System.out.println( ok_prefix + "Generate a hit." );
195         TrackVector vec = new TrackVector();
196         TrackError err = new TrackError();
197         HitDerivative der_expect = new HitDerivative(2);
198         der_expect.set(0,0,  1.);
199         der_expect.set(1,1,  1.);
200         vec.set(SurfZPlane.IX,  1.1);
201         vec.set(SurfZPlane.IY,  40.0);
202         err.set(SurfZPlane.IX,SurfZPlane.IX,  0.04);
203         err.set(SurfZPlane.IX,SurfZPlane.IY,  0.03);
204         err.set(SurfZPlane.IY,SurfZPlane.IY,  0.02);
205         ETrack tre1 = new ETrack(szp1.newPureSurface(),vec,err);
206         List tclus11 = hcp1.predict(tre1,hcp1);
207         Assert.assertTrue( tclus11.size() == 1 );
208         Hit pre11 = (Hit)tclus11.get(0);
209         double maxdiff = 1.e-12;
210         if(debug) System.out.println( pre11.size() );
211         Assert.assertTrue( pre11.size() == 2);
212         if(debug) System.out.println( pre11.measuredVector() );
213         Assert.assertTrue( (( HitZPlane2)pre11).x() == pre11.predictedVector().get(IX) );
214         Assert.assertTrue( (( HitZPlane2)pre11).y() == pre11.predictedVector().get(IY) );
215         Assert.assertTrue( (( HitZPlane2)pre11).dX2() == pre11.predictedError().get(IX,IX) );
216         Assert.assertTrue( (( HitZPlane2)pre11).dY2() == pre11.predictedError().get(IY,IY) );
217         Assert.assertTrue( (( HitZPlane2)pre11).dXdY() == pre11.predictedError().get(IX,IY) );  Assert.assertTrue( hiteqvec(pre11.measuredVector(), hm1) );
218         if(debug) System.out.println( pre11.measuredError() );
219         Assert.assertTrue( hiteqsm(pre11.measuredError(), dhm1) );
220         if(debug) System.out.println( pre11.predictedVector() );
221         Assert.assertTrue( pre11.predictedVector().equals(calc_hm(vec)) );
222         if(debug) System.out.println( pre11.predictedError() );
223         Assert.assertTrue( pre11.predictedError().equals(calc_dhm(err)) );
224         if(debug) System.out.println( pre11.dHitdTrack() );
225         Assert.assertTrue( pre11.dHitdTrack().equals(der_expect) );
226         if(debug) System.out.println( pre11.differenceVector() );
227         Assert.assertTrue( Math.abs(pre11.differenceVector().get(0) -
228                 calc_hm(vec).get(0) + hm1.get(0)) < maxdiff );
229         Assert.assertTrue( Math.abs(pre11.differenceVector().get(1) -
230                 calc_hm(vec).get(1) + hm1.get(1)) < maxdiff );
231         
232         //********************************************************************
233         
234         if(debug) System.out.println( ok_prefix + "Generate hit for a different track."
235                 );
236         vec.set(SurfZPlane.IX, 1.2);
237         ETrack tre2 = new ETrack(szp1.newPureSurface(),vec,err);
238         List tclus12 = hcp1.predict(tre2,hcp1);
239         Assert.assertTrue( tclus12.size() == 1 );
240         Hit pre12 = (Hit)tclus12.get(0);
241         if(debug) System.out.println( pre12.size() );
242         Assert.assertTrue( pre12.size() == 2);
243         if(debug) System.out.println( pre12.measuredVector() );
244         Assert.assertTrue( hiteqvec(pre12.measuredVector(), hm1) );
245         if(debug) System.out.println( pre12.measuredError() );
246         Assert.assertTrue( hiteqsm(pre12.measuredError(), dhm1) );
247         if(debug) System.out.println( pre12.predictedVector() );
248         Assert.assertTrue( pre12.predictedVector().equals(calc_hm(vec)) );
249         if(debug) System.out.println( pre12.predictedError() );
250         Assert.assertTrue( pre12.predictedError().equals(calc_dhm(err)) );
251         if(debug) System.out.println( pre12.dHitdTrack() );
252         Assert.assertTrue( pre12.dHitdTrack().equals(der_expect) );
253         if(debug) System.out.println( pre12.differenceVector() );
254         Assert.assertTrue( Math.abs(pre12.differenceVector().get(0) -
255                 calc_hm(vec).get(0) + hm1.get(0)) < maxdiff );
256         Assert.assertTrue( Math.abs(pre12.differenceVector().get(1) -
257                 calc_hm(vec).get(1) + hm1.get(1)) < maxdiff );
258         // same cluster ==> same hit (even though track changes)
259         Assert.assertTrue( pre11.equals(pre11) );
260         Assert.assertTrue( ! ( pre11.notEquals(pre11) ) );
261         Assert.assertTrue( pre11.equals(pre12) );
262         
263         //********************************************************************
264         
265         if(debug) System.out.println( ok_prefix + "Generate hit for a different cluster."
266                 );
267         List tclus22 = hcp2.predict(tre2,hcp2);
268         Assert.assertTrue( tclus22.size() == 1 );
269         Hit pre22 = (Hit)tclus22.get(0);
270         if(debug) System.out.println( pre22.size() );
271         Assert.assertTrue( pre22.size() == 2);
272         if(debug) System.out.println( pre22.measuredVector() );
273         Assert.assertTrue( hiteqvec(pre22.measuredVector(), hm2) );
274         if(debug) System.out.println( pre22.measuredError() );
275         Assert.assertTrue( hiteqsm(pre22.measuredError(), dhm2) );
276         if(debug) System.out.println( pre22.predictedVector() );
277         Assert.assertTrue( pre22.predictedVector().equals(calc_hm(vec)) );
278         if(debug) System.out.println( pre22.predictedError() );
279         Assert.assertTrue( pre22.predictedError().equals(calc_dhm(err)) );
280         if(debug) System.out.println( pre22.dHitdTrack() );
281         Assert.assertTrue( pre22.dHitdTrack().equals(der_expect) );
282         if(debug) System.out.println( pre22.differenceVector() );
283         Assert.assertTrue( Math.abs(pre22.differenceVector().get(0) -
284                 calc_hm(vec).get(0) + hm2.get(0)) < maxdiff );
285         Assert.assertTrue( Math.abs(pre22.differenceVector().get(1) -
286                 calc_hm(vec).get(1) + hm2.get(1)) < maxdiff );
287         // different cluster ==> different hit
288         Assert.assertTrue( pre22.notEquals(pre11) );
289         Assert.assertTrue( ! ( pre22.equals(pre11) ) );
290         Assert.assertTrue( pre22.notEquals(pre12) );
291         
292         //********************************************************************
293         
294         if(debug) System.out.println( ok_prefix + "Update hit." );
295         if(debug) System.out.println( pre11 );
296         pre11.update(tre2);
297         if(debug) System.out.println( pre11 );
298         Assert.assertTrue( pre11.size() == 2);
299         if(debug) System.out.println( pre11.measuredVector() );
300         Assert.assertTrue( hiteqvec(pre11.measuredVector(), hm1) );
301         if(debug) System.out.println( pre11.measuredError() );
302         Assert.assertTrue( hiteqsm(pre11.measuredError(), dhm1) );
303         if(debug) System.out.println( pre11.predictedVector() );
304         Assert.assertTrue( pre11.predictedVector().equals(calc_hm(vec)) );
305         if(debug) System.out.println( pre11.predictedError() );
306         Assert.assertTrue( pre11.predictedError().equals(calc_dhm(err)) );
307         if(debug) System.out.println( pre11.dHitdTrack() );
308         Assert.assertTrue( pre11.dHitdTrack().equals(der_expect) );
309         if(debug) System.out.println( pre11.differenceVector() );
310         Assert.assertTrue( Math.abs(pre11.differenceVector().get(0) -
311                 calc_hm(vec).get(0) + hm1.get(0)) < maxdiff );
312         Assert.assertTrue( Math.abs(pre11.differenceVector().get(1) -
313                 calc_hm(vec).get(1) + hm1.get(1)) < maxdiff );
314         //********************************************************************
315         
316         if(debug) System.out.println( ok_prefix + "Check hit type and equality." );
317         if(debug) System.out.println( HitZPlane2.staticType());
318         if(debug) System.out.println( pre11.type() );
319         if(debug) System.out.println( pre12.type() );
320         Assert.assertTrue( pre11.type() != null );
321         Assert.assertTrue( pre11.type().equals(HitZPlane2.staticType()) );
322         Assert.assertTrue( pre11.type().equals(pre12.type()) );
323         
324         
325         //********************************************************************
326         
327         if(debug) System.out.println( ok_prefix
328                 + "------------- All tests passed. -------------" );
329         
330         //********************************************************************
331     }
332     
333 }