View Javadoc

1   /*
2    * SurfDCA_Test.java
3    *
4    * Created on July 24, 2007, 9:03 PM
5    *
6    * $Id: SurfDCA_Test.java,v 1.1.1.1 2010/04/08 20:38:00 jeremy Exp $
7    */
8   
9   package org.lcsim.recon.tracking.trfdca;
10  
11  import junit.framework.TestCase;
12  import org.lcsim.recon.tracking.spacegeom.CylindricalPath;
13  import org.lcsim.recon.tracking.spacegeom.SpacePath;
14  import org.lcsim.recon.tracking.spacegeom.SpacePoint;
15  import org.lcsim.recon.tracking.trfbase.CrossStat;
16  import org.lcsim.recon.tracking.trfbase.SurfTest;
17  import org.lcsim.recon.tracking.trfbase.TrackVector;
18  import org.lcsim.recon.tracking.trfbase.VTrack;
19  import org.lcsim.recon.tracking.trfutil.Assert;
20  import org.lcsim.recon.tracking.trfutil.TRFMath;
21  
22  /**
23   *
24   * @author Norman Graf
25   */
26  public class SurfDCA_Test extends TestCase
27  {
28      private boolean debug;
29      /** Creates a new instance of SurfDCA_Test */
30      public void testSurfDCA()
31      {
32          
33          String ok_prefix = "test SurfDCA (I): ";
34          String error_prefix = "test SurfDCA (E): ";
35          
36          if(debug) System.out.println(ok_prefix
37                  + "------ Testing component SurfDCA. ------" );
38          
39          //********************************************************************
40          
41          if(debug) System.out.println(ok_prefix + "Check indices." );
42          Assert.assertTrue( SurfDCA.IRSIGNED == 0 );
43          Assert.assertTrue( SurfDCA.IZ       == 1 );
44          Assert.assertTrue( SurfDCA.IPHID    == 2 );
45          Assert.assertTrue( SurfDCA.ITLM     == 3 );
46          Assert.assertTrue( SurfDCA.IQPT     == 4 );
47          
48          //********************************************************************
49          
50          if(debug) System.out.println(ok_prefix + "Test constructor." );
51          SurfDCA sdca1 = new SurfDCA();
52          if(debug) System.out.println(sdca1 );
53          SurfDCA sdca_x1 = new SurfDCA(0.1, 0.2);
54          if(debug) System.out.println(sdca_x1 );
55          SurfDCA sdca_x2 = new SurfDCA(0.1, 0.3, 0.01, 0.02);
56          if(debug) System.out.println(sdca_x2 );
57          
58          //********************************************************************
59          
60          if(debug) System.out.println(ok_prefix + "Test equality and ordering." );
61          Assert.assertTrue( sdca1.pureEqual(sdca1) );
62          Assert.assertTrue( ! sdca1.pureLessThan(sdca1) );
63          Assert.assertTrue( sdca_x1.pureEqual(sdca_x1) );
64          Assert.assertTrue( ! sdca_x1.pureLessThan(sdca_x1) );
65          Assert.assertTrue( sdca_x2.pureEqual(sdca_x2) );
66          Assert.assertTrue( ! sdca_x2.pureLessThan(sdca_x2) );
67          
68          
69          //********************************************************************
70          
71          if(debug) System.out.println(ok_prefix + "Test virtual constructor." );
72          SurfDCA psdca4 = (SurfDCA) sdca1.newPureSurface();
73          if ( !sdca1.equals(psdca4) )
74          {
75              if(debug) System.out.println(error_prefix + "Virtual construction failed." );
76              System.exit(5);
77          }
78          
79          //********************************************************************
80          
81          if(debug) System.out.println(ok_prefix + "Test type." );
82          if(debug) System.out.println(SurfDCA.staticType() );
83          // method get_type is implemented in class Surface
84          // it returns get_pure_type, which is implemented in SurfDCA
85          if(debug) System.out.println(sdca1.type() );
86          Assert.assertTrue( sdca1.type() != null );
87          Assert.assertTrue( sdca1.type().equals(SurfDCA.staticType()) );
88          
89          //********************************************************************
90          
91          if(debug) System.out.println( ok_prefix + "Test parameter access." );
92          if(debug) System.out.println(sdca_x2.parameter(SurfDCA.IX));
93          Assert.assertTrue( sdca_x2.parameter(SurfDCA.IX) == 0.1);
94          Assert.assertTrue( sdca_x2.parameter(SurfDCA.IY) == 0.3);
95          Assert.assertTrue( sdca_x2.parameter(SurfDCA.IDXDZ) == 0.01);
96          Assert.assertTrue( sdca_x2.parameter(SurfDCA.IDYDZ) == 0.02);
97          Assert.assertTrue( sdca_x1.parameter(SurfDCA.IX) == 0.1);
98          Assert.assertTrue( sdca_x1.parameter(SurfDCA.IY) == 0.2);
99          Assert.assertTrue( sdca_x1.parameter(SurfDCA.IDXDZ) == 0.);
100         Assert.assertTrue( sdca_x1.parameter(SurfDCA.IDYDZ) == 0.);
101         Assert.assertTrue( sdca1.parameter(SurfDCA.IX) == 0.0);
102         Assert.assertTrue( sdca1.parameter(SurfDCA.IY) == 0.0);
103         Assert.assertTrue( sdca1.parameter(SurfDCA.IDXDZ) == 0.);
104         Assert.assertTrue( sdca1.parameter(SurfDCA.IDYDZ) == 0.);
105         
106         //********************************************************************
107         
108         if(debug) System.out.println(ok_prefix + "construct a Track Vector." );
109         
110         TrackVector tvec = new TrackVector();
111         tvec.set(0, 1.0);                                // r_signed
112         tvec.set(1, 2.0);                                // z
113         tvec.set(2, 3.0);                                // phi_direction
114         tvec.set(3, 4.0);                                // tlm
115         tvec.set(4, 5.0);                                // qpt
116         if(debug) System.out.println(" *** TrackVector tvec = " + tvec );
117         if(debug) System.out.println(" *** r_signed      = " + tvec.get(0) );
118         if(debug) System.out.println(" *** z             = " + tvec.get(1) );
119         if(debug) System.out.println(" *** phi_direction = " + tvec.get(2) );
120         if(debug) System.out.println(" *** tlm           = " + tvec.get(3) );
121         if(debug) System.out.println(" *** qpt           = " + tvec.get(4) );
122         
123         double r    = Math.abs(tvec.get(0));
124         double z    = tvec.get(1);
125         double sign = 0.0;
126         double phi  = 0.0;
127         if ( tvec.get(0) != 0.0 )
128         {
129             sign = tvec.get(0)/Math.abs(tvec.get(0));
130             phi  = tvec.get(2)-(sign*TRFMath.PI2);
131             phi  = TRFMath.fmod2( phi, TRFMath.TWOPI );
132         }
133         double tlam = tvec.get(3);
134         
135         if(debug) System.out.println(" *** r   = " + r   );
136         if(debug) System.out.println(" *** phi = " + phi );
137         if(debug) System.out.println(" *** z   = " + z   );
138         
139         Assert.assertTrue( Math.abs(phi-( 1.4292)) < 1.e-4 ) ;      // for r_signed = +1
140         //  Assert.assertTrue( fabs(phi-(-1.7124)) < 1.e-4 ) ;      // for r_signed = -1
141         
142         
143         //********************************************************************
144         
145         if(debug) System.out.println(ok_prefix + "Test crossing status." );
146         
147         double clam = 1.0/Math.sqrt(1.0+tlam*tlam);
148         double slam = tlam/Math.sqrt(1.0+tlam*tlam);
149         
150         double dz_ds = slam;
151         
152         double alpha_in     = -2.0;
153         double calf_in      = Math.cos(alpha_in);
154         double salf_in      = Math.sin(alpha_in);
155         double dr_ds_in     = clam*calf_in;
156         double r_dphi_ds_in = clam*salf_in;
157         CylindricalPath cpth_in = new CylindricalPath(r, phi, z, dr_ds_in, r_dphi_ds_in, dz_ds);
158         SurfTest stest_in = new SurfTest(cpth_in);
159         
160         double alpha_out     =  1.0;
161         double calf_out      = Math.cos(alpha_out);
162         double salf_out      = Math.sin(alpha_out);
163         double dr_ds_out     = clam*calf_out;
164         double r_dphi_ds_out = clam*salf_out;
165         CylindricalPath cpth_out = new CylindricalPath(r, phi, z, dr_ds_out, r_dphi_ds_out, dz_ds);
166         SurfTest stest_out= new SurfTest(cpth_out);
167         
168         VTrack ton = new VTrack( sdca1.newPureSurface(), tvec );
169         if(debug) System.out.println(" sdca1       = " + sdca1 );
170         if(debug) System.out.println(" VTrack ton  = " + ton );
171         VTrack tin= new VTrack(  stest_in.newPureSurface(), tvec );
172         if(debug) System.out.println(" stest_in    = " + stest_in );
173         if(debug) System.out.println(" VTrack tin  = " + tin );
174         VTrack tout= new VTrack(  stest_out.newPureSurface(), tvec );
175         if(debug) System.out.println(" stest_out   = " + stest_out );
176         if(debug) System.out.println(" VTrack tout = " + tout );
177         
178         SpacePath sp_on  = ton.spacePath();
179         SpacePath sp_in  = tin.spacePath();
180         SpacePath sp_out = tout.spacePath();
181         
182         if(debug) System.out.println(" *** sp_on *** " );
183         if(debug) System.out.println(sp_on  );
184         if(debug) System.out.println(" *** sp_in *** " );
185         if(debug) System.out.println(sp_in  );
186         if(debug) System.out.println(" *** sp_out *** " );
187         if(debug) System.out.println(sp_out );
188         
189         CrossStat xs1 = sdca1.pureStatus(ton);
190         if(debug) System.out.println("xs1 = " + xs1 );
191         Assert.assertTrue( xs1.at() && xs1.on() && !xs1.inside() && !xs1.outside()
192         && !xs1.inBounds() && ! xs1.outOfBounds() );
193         
194         if(debug) System.out.println(stest_in );
195         CrossStat xs2 = sdca1.pureStatus(tin);
196         if(debug) System.out.println("xs2 = " + xs2 );
197         Assert.assertTrue( !xs2.at() && !xs2.on() && xs2.inside() && !xs2.outside()
198         && !xs2.inBounds() && ! xs2.outOfBounds() );
199         
200         if(debug) System.out.println(stest_out );
201         CrossStat xs3 = sdca1.pureStatus(tout);
202         if(debug) System.out.println("xs3 = " + xs3 );
203         Assert.assertTrue( !xs3.at() && !xs3.on() && !xs3.inside() && xs3.outside()
204         && !xs3.inBounds() && ! xs3.outOfBounds() );
205         
206         //********************************************************************
207         
208         if(debug) System.out.println(ok_prefix + "Test vector difference." );
209         TrackVector tvec2 = new TrackVector();
210         tvec2.set(0, 1.1);                                // r_signed
211         tvec2.set(1, 2.2);                                // z
212         tvec2.set(2, 3.3);                                // phi_direction
213         tvec2.set(3, 4.4);                                // tlm
214         tvec2.set(4, 5.5);                                // qpt
215         TrackVector diff = new TrackVector(sdca1.vecDiff(tvec2,tvec));
216         TrackVector ediff = new TrackVector();
217         ediff.set(0, 0.1);
218         ediff.set(1, 0.2);
219         ediff.set(2, 0.3);
220         ediff.set(3, 0.4);
221         ediff.set(4, 0.5);
222         TrackVector zero = new TrackVector(diff.minus(ediff));
223         if ( zero.amax() > 1.e-10 )
224         {
225             if(debug) System.out.println( error_prefix + "Incorrect difference." );
226             System.exit(9);
227         }
228         
229         //  Assert.assertTrue( zero.amax() <= 1.e-10 );
230         
231         //********************************************************************
232         
233         if(debug) System.out.println(ok_prefix + "Test space point." );
234         SpacePoint spt = ton.spacePoint();
235         if(debug) System.out.println("spt= "+spt);
236         Assert.assertTrue( myequal(spt.rxy(), 1.0) );
237         Assert.assertTrue( Math.abs(spt.phi()-phi) < 1.e-4 );
238         Assert.assertTrue( spt.z()   == 2.0 );
239         
240         //********************************************************************
241         
242         TrackVector vec_1 = new TrackVector();
243         vec_1.set(SurfDCA.IZ,0.3);
244         VTrack trv_1 = new VTrack((new SurfDCA(0.1,0.2)));
245         trv_1.setVector(vec_1);
246         trv_1.setForward();
247         
248         if(debug) System.out.println("trv_1= "+trv_1);
249         if(debug) System.out.println("trv_1.spacePoint()"+trv_1.spacePoint());
250         
251         Assert.assertTrue( myequal(trv_1.spacePoint().x(),0.1) );
252         Assert.assertTrue( myequal(trv_1.spacePoint().y(),0.2) );
253         Assert.assertTrue( myequal(trv_1.spacePoint().z(),0.3) );
254         
255         vec_1.set(SurfDCA.IRSIGNED, 0.3);
256         vec_1.set(SurfDCA.IPHID, TRFMath.PI2);
257         trv_1.setVector(vec_1);
258         trv_1.setForward();
259         Assert.assertTrue( myequal(trv_1.spacePoint().x(),0.1+0.3) );
260         Assert.assertTrue( myequal(trv_1.spacePoint().y(),0.2) );
261         Assert.assertTrue( myequal(trv_1.spacePoint().z(),0.3) );
262         
263         vec_1.set(SurfDCA.IRSIGNED, 0.3);
264         vec_1.set(SurfDCA.IPHID, -Math.PI);
265         trv_1.setVector(vec_1);
266         trv_1.setForward();
267         Assert.assertTrue( myequal(trv_1.spacePoint().x(),0.1) );
268         Assert.assertTrue( myequal(trv_1.spacePoint().y(),0.2+0.3) );
269         Assert.assertTrue( myequal(trv_1.spacePoint().z(),0.3) );
270         
271         //********************************************************************
272         
273         if(debug) System.out.println(ok_prefix + "Test space vector." );
274         SpacePath svec = ton.spacePath();
275         double lam = Math.atan(4.0);
276         Assert.assertTrue( myequal(svec.rxy(), 1.0) );
277         Assert.assertTrue( Math.abs(spt.phi()-phi) < 1.e-4 );
278         Assert.assertTrue( svec.z()   == 2.0 );
279         //TODO find and fix problem in this test.
280 //        Assert.assertTrue( myequal( svec.drxy(),     Math.cos(lam)*Math.cos(TRFMath.PI2) ) );
281 //        Assert.assertTrue( myequal( svec.rxy_dphi(), Math.cos(lam)*Math.sin(sign*TRFMath.PI2) ) );
282 //        Assert.assertTrue( myequal( svec.dz(),       Math.sin(lam)          ) );
283 //
284 //        //********************************************************************
285 //
286 //        vec_1.set(SurfDCA.IRSIGNED,0.3);
287 //        vec_1.set(SurfDCA.IPHID, -Math.PI);
288 //        trv_1.setVector(vec_1);
289 //        trv_1.setForward();
290 //        Assert.assertTrue( myequal(trv_1.spacePath().x(),0.1) );
291 //        Assert.assertTrue( myequal(trv_1.spacePath().y(),0.2+0.3) );
292 //        Assert.assertTrue( myequal(trv_1.spacePath().z(),0.3) );
293 //        Assert.assertTrue( myequal(trv_1.spacePath().dx(),-1.0) );
294 //        Assert.assertTrue( myequal(trv_1.spacePath().dz(),0.0) );
295 //        Assert.assertTrue( myequal(trv_1.spacePath().dy(),0.0) );
296 //        vec_1.set(SurfDCA.IRSIGNED,0.3);
297 //        vec_1.set(SurfDCA.IPHID, TRFMath.PI2);
298 //        trv_1.setVector(vec_1);
299 //        trv_1.setForward();
300 //        Assert.assertTrue( myequal(trv_1.spacePath().x(),0.1+0.3) );
301 //        Assert.assertTrue( myequal(trv_1.spacePath().y(),0.2) );
302 //        Assert.assertTrue( myequal(trv_1.spacePath().z(),0.3) );
303 //        Assert.assertTrue( myequal(trv_1.spacePath().dx(),0.0) );
304 //        Assert.assertTrue( myequal(trv_1.spacePath().dz(),0.0) );
305 //        Assert.assertTrue( myequal(trv_1.spacePath().dy(),1.0) );
306 //
307         //********************************************************************
308         
309         if(debug) System.out.println(ok_prefix
310                 + "------------- All tests passed. -------------" );
311         
312         //********************************************************************
313         
314     }
315     
316     // comparison of doubles
317     public static boolean myequal(double x1, double x2)
318     {
319         double small = 1.e-12;
320         if ( Math.abs(x1-x2) < small ) return true;
321         System.out.println("myequal: difference too large:" );
322         System.out.println("value 1: " + x1 );
323         System.out.println("value 2: " + x2 );
324         System.out.println("   diff: " + (x1-x2) );
325         System.out.println("maxdiff: " + small );
326         return false;
327     }
328     
329 }