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 }