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 }