1 /* 2 * HitXYPlane2_Test.java 3 * 4 * Created on July 24, 2007, 10:24 PM 5 * 6 * $Id: HitXYPlane2_Test.java,v 1.1.1.1 2010/04/08 20:38:00 jeremy Exp $ 7 */ 8 9 package org.lcsim.recon.tracking.trfxyp; 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 HitXYPlane2_Test extends TestCase 28 { 29 private boolean debug; 30 31 // calculate hm from a track vector 32 static HitVector calc_hm(TrackVector vec) 33 { 34 double v_track = vec.get(SurfXYPlane.IV); 35 double z_track = vec.get(SurfXYPlane.IZ); 36 37 return new HitVector( v_track, z_track ); 38 } 39 40 // calculate dhm from error matrix 41 static HitError calc_dhm(TrackError err) 42 { 43 double evv_track = err.get(SurfXYPlane.IV,SurfXYPlane.IV); 44 double evz_track = err.get(SurfXYPlane.IV,SurfXYPlane.IZ); 45 double ezz_track = err.get(SurfXYPlane.IZ,SurfXYPlane.IZ); 46 47 return new HitError( evv_track, evz_track, ezz_track); 48 } 49 50 // compare HitError and error matrix of the cluster 51 52 static boolean hiteqsm( HitError lhs, HitError rhs) 53 { 54 if ( lhs.size() != rhs.size() || lhs.size()!=2 ) return false; 55 return ( (lhs.get(0,0) == rhs.get(ClusXYPlane2.IV,ClusXYPlane2.IV)) && 56 (lhs.get(0,1) == rhs.get(ClusXYPlane2.IV,ClusXYPlane2.IZ)) && 57 (lhs.get(1,1) == rhs.get(ClusXYPlane2.IZ,ClusXYPlane2.IZ)) ); 58 } 59 60 // compare HitVector and vector of the cluster 61 62 static boolean hiteqvec( HitVector lhs, HitVector rhs) 63 { 64 if ( lhs.size() != rhs.size() || lhs.size()!=2 ) return false; 65 return ( (lhs.get(0) == rhs.get(ClusXYPlane2.IV)) && 66 (lhs.get(1) == rhs.get 67 (ClusXYPlane2.IZ)) ); 68 } 69 /** Creates a new instance of HitXYPlane2_Test */ 70 public void testHitXYPlane2() 71 { 72 String component = "HitXYPlane2"; 73 String ok_prefix = component + " (I): "; 74 String error_prefix = component + " test (E): "; 75 76 if(debug) System.out.println( ok_prefix 77 + "-------- Testing component " + component 78 + ". --------" ); 79 80 if(debug) System.out.println( ok_prefix + "Test cluster constructors." ); 81 82 int IV = ClusXYPlane2.IV; 83 int IZ = ClusXYPlane2.IZ; 84 85 86 List mcids = new ArrayList(); 87 mcids.add(new Integer(1)); 88 mcids.add(new Integer(2)); 89 90 double dist1 = 10.0; 91 double phi1 = Math.PI/3.; 92 double v1 = 1.0; 93 double z1 = 1.1; 94 HitError dhm1 = new HitError(2); 95 dhm1.set(ClusXYPlane2.IV,ClusXYPlane2.IV, 0.02); 96 dhm1.set(ClusXYPlane2.IV,ClusXYPlane2.IZ, 0.01); 97 dhm1.set(ClusXYPlane2.IZ,ClusXYPlane2.IZ, 0.03); 98 SurfXYPlane szp1 = new SurfXYPlane(dist1,phi1); 99 ClusXYPlane2 hcp1 = new ClusXYPlane2(dist1,phi1,v1,z1,dhm1.get(ClusXYPlane2.IV,ClusXYPlane2.IV),dhm1.get(ClusXYPlane2.IZ,ClusXYPlane2.IZ),dhm1.get(ClusXYPlane2.IV,ClusXYPlane2.IZ)); 100 ClusXYPlane2 hcp1a = new ClusXYPlane2(dist1,phi1,v1,z1,dhm1.get(ClusXYPlane2.IV,ClusXYPlane2.IV),dhm1.get(ClusXYPlane2.IZ,ClusXYPlane2.IZ),dhm1.get(ClusXYPlane2.IV,ClusXYPlane2.IZ),mcids); 101 102 Assert.assertTrue(hcp1.equals(hcp1a)); 103 Assert.assertTrue(hcp1.v() == v1 ); 104 // Assert.assertTrue(hcp1.get_dhm().equals(dhm1) ); 105 // Assert.assertTrue(hcp1.get_hm().equals(HitVector(v1,z1)) ); 106 Assert.assertTrue(hcp1.z() == z1 ); 107 Assert.assertTrue(hcp1.dV2() == 0.02 ); 108 Assert.assertTrue(hcp1.dZ2() == 0.03 ); 109 Assert.assertTrue(hcp1.dVdZ() == 0.01 ); 110 Assert.assertTrue(hcp1a.v() == v1 ); 111 Assert.assertTrue(hcp1a.z() == z1 ); 112 Assert.assertTrue(hcp1a.dV2() == 0.02 ); 113 Assert.assertTrue(hcp1a.dZ2() == 0.03 ); 114 Assert.assertTrue(hcp1a.dVdZ() == 0.01 ); 115 Assert.assertTrue(hcp1.mcIds().size()==0); 116 Assert.assertTrue(hcp1a.mcIds().size()==2); 117 118 double dist2 = 20.0; 119 double phi2 = Math.PI/5.; 120 double v2 = 2.0; 121 double z2 = 2.2; 122 HitVector hm2 = new HitVector(2); 123 hm2.set(ClusXYPlane2.IV, v2); 124 hm2.set(ClusXYPlane2.IZ, z2); 125 HitError dhm2 = new HitError(2); 126 dhm2.set(ClusXYPlane2.IV,ClusXYPlane2.IV, 0.022); 127 dhm2.set(ClusXYPlane2.IV,ClusXYPlane2.IZ, 0.012); 128 dhm2.set(ClusXYPlane2.IZ,ClusXYPlane2.IZ, 0.032); 129 /* 130 ClusXYPlane2 hcp2 = new ClusXYPlane2(dist2,phi2,v2,z2,dhm2); 131 ClusXYPlane2 hcp2a = new ClusXYPlane2(dist2,phi2,v2,z2,dhm2); 132 Assert.assertTrue( hcp2.equals(hcp2a) ); 133 // ClusterPtr phcp2 = &hcp2; 134 Assert.assertTrue(hcp2.get_v() == v2 ); 135 Assert.assertTrue(hcp2.get_z() == z2 ); 136 Assert.assertTrue(hcp2.get_dv2() == 0.022 ); 137 Assert.assertTrue(hcp2.get_dz2() == 0.032 ); 138 Assert.assertTrue(hcp2.get_dvdz() == 0.012 ); 139 Assert.assertTrue(hcp2a.get_v() == v2 ); 140 Assert.assertTrue(hcp2a.get_z() == z2 ); 141 Assert.assertTrue(hcp2a.get_dv2() == 0.022 ); 142 Assert.assertTrue(hcp2a.get_dz2() == 0.032 ); 143 Assert.assertTrue(hcp2a.get_dvdz() == 0.012 ); 144 */ 145 HitVector hm1 = new HitVector(2); 146 hm1.set(ClusXYPlane2.IV, v1); 147 hm1.set(ClusXYPlane2.IZ, z1); 148 149 ClusXYPlane2 hcp1b = new ClusXYPlane2(hcp1); 150 if(debug) System.out.println( ok_prefix + "test copy constructor"); 151 152 Assert.assertTrue( hcp1b.equals(hcp1) ); 153 //******************************************************************** 154 ClusXYPlane2 hcp2 = new ClusXYPlane2(dist2,phi2,v2,z2,dhm2.get(ClusXYPlane2.IV,ClusXYPlane2.IV),dhm2.get(ClusXYPlane2.IZ,ClusXYPlane2.IZ),dhm2.get(ClusXYPlane2.IV,ClusXYPlane2.IZ),mcids); 155 156 if(debug) System.out.println( ok_prefix + "Test cluster type ID." ); 157 if(debug) System.out.println( hcp1.type() ); 158 if(debug) System.out.println( hcp2.type() ); 159 Assert.assertTrue( hcp1.type() != null ); 160 Assert.assertTrue( hcp1.type().equals(hcp2.type()) ); 161 162 //******************************************************************** 163 164 if(debug) System.out.println( ok_prefix + "Test cluster accessors." ); 165 if(debug) System.out.println( hcp1 ); 166 if(debug) System.out.println( hcp1.surface() ); 167 Assert.assertTrue( hcp1.surface().equals(szp1) ); 168 169 //******************************************************************** 170 171 if(debug) System.out.println( ok_prefix + "Generate a hit." ); 172 TrackVector vec = new TrackVector(); 173 TrackError err = new TrackError(); 174 HitDerivative der_expect = new HitDerivative(2); 175 der_expect.set(0,0, 1.); 176 der_expect.set(1,1, 1.); 177 vec.set(SurfXYPlane.IV, 1.1); 178 vec.set(SurfXYPlane.IZ, 40.0); 179 err.set(SurfXYPlane.IV,SurfXYPlane.IV, 0.04); 180 err.set(SurfXYPlane.IV,SurfXYPlane.IZ, 0.03); 181 err.set(SurfXYPlane.IZ,SurfXYPlane.IZ, 0.02); 182 ETrack tre1 = new ETrack(szp1.newPureSurface(),vec,err); 183 List tclus11 = hcp1.predict(tre1,hcp1); 184 Assert.assertTrue( tclus11.size() == 1 ); 185 Hit pre11 = (Hit) tclus11.get(0); 186 double maxdiff = 1.e-12; 187 if(debug) System.out.println( pre11.size() ); 188 Assert.assertTrue( pre11.size() == 2); 189 if(debug) System.out.println( pre11.measuredVector() ); 190 Assert.assertTrue( ((HitXYPlane2)pre11).v() == pre11.predictedVector().get(IV) ); 191 Assert.assertTrue( ((HitXYPlane2)pre11).z() == pre11.predictedVector().get(IZ) ); 192 Assert.assertTrue( ((HitXYPlane2)pre11).dV2() == pre11.predictedError().get(IV,IV) ); 193 Assert.assertTrue( ((HitXYPlane2)pre11).dZ2() == pre11.predictedError().get(IZ,IZ) ); 194 Assert.assertTrue( ((HitXYPlane2)pre11).dVdZ() == pre11.predictedError().get(IZ,IV) ); 195 Assert.assertTrue( hiteqvec(pre11.measuredVector(), hm1) ); 196 if(debug) System.out.println( pre11.measuredError() ); 197 Assert.assertTrue( hiteqsm(pre11.measuredError(), dhm1) ); 198 if(debug) System.out.println( pre11.predictedVector() ); 199 Assert.assertTrue( pre11.predictedVector().equals(calc_hm(vec)) ); 200 if(debug) System.out.println( pre11.predictedError() ); 201 Assert.assertTrue( pre11.predictedError().equals(calc_dhm(err)) ); 202 if(debug) System.out.println( pre11.dHitdTrack() ); 203 Assert.assertTrue( pre11.dHitdTrack().equals(der_expect) ); 204 if(debug) System.out.println( pre11.differenceVector() ); 205 Assert.assertTrue( Math.abs(pre11.differenceVector().get(0) - 206 calc_hm(vec).get(0) + hm1.get(0)) < maxdiff ); 207 Assert.assertTrue( Math.abs(pre11.differenceVector().get(1) - 208 calc_hm(vec).get(1) + hm1.get(1)) < maxdiff ); 209 //******************************************************************** 210 211 if(debug) System.out.println( ok_prefix + "Generate hit for a different track." 212 ); 213 vec.set(SurfXYPlane.IV, 1.2); 214 ETrack tre2 = new ETrack(szp1.newPureSurface(),vec,err); 215 List tclus12 = hcp1.predict(tre2,hcp1); 216 Assert.assertTrue( tclus12.size() == 1 ); 217 Hit pre12 = (Hit)tclus12.get(0); 218 if(debug) System.out.println( pre12.size() ); 219 Assert.assertTrue( pre12.size() == 2); 220 if(debug) System.out.println( pre12.measuredVector() ); 221 Assert.assertTrue( hiteqvec(pre12.measuredVector(), hm1) ); 222 if(debug) System.out.println( pre12.measuredError() ); 223 Assert.assertTrue( hiteqsm(pre12.measuredError(), dhm1) ); 224 if(debug) System.out.println( pre12.predictedVector() ); 225 Assert.assertTrue( pre12.predictedVector().equals(calc_hm(vec)) ); 226 if(debug) System.out.println( pre12.predictedError() ); 227 Assert.assertTrue( pre12.predictedError().equals(calc_dhm(err)) ); 228 if(debug) System.out.println( pre12.dHitdTrack() ); 229 Assert.assertTrue( pre12.dHitdTrack().equals(der_expect) ); 230 if(debug) System.out.println( pre12.differenceVector() ); 231 Assert.assertTrue( Math.abs(pre12.differenceVector().get(0) - 232 calc_hm(vec).get(0) + hm1.get(0)) < maxdiff ); 233 Assert.assertTrue( Math.abs(pre12.differenceVector().get(1) - 234 calc_hm(vec).get(1) + hm1.get(1)) < maxdiff ); 235 // same cluster ==> same hit (even though track changes) 236 Assert.assertTrue( pre11.equals(pre11) ); 237 Assert.assertTrue( ! ( pre11.notEquals(pre11) ) ); 238 Assert.assertTrue( pre11.equals(pre12) ); 239 240 //******************************************************************** 241 242 if(debug) System.out.println( ok_prefix + "Generate hit for a different cluster." 243 ); 244 List tclus22 = hcp2.predict(tre2,hcp2); 245 Assert.assertTrue( tclus22.size() == 1 ); 246 Hit pre22 = (Hit)tclus22.get(0); 247 if(debug) System.out.println( pre22.size() ); 248 Assert.assertTrue( pre22.size() == 2); 249 if(debug) System.out.println( pre22.measuredVector() ); 250 Assert.assertTrue( hiteqvec(pre22.measuredVector(), hm2) ); 251 if(debug) System.out.println( pre22.measuredError() ); 252 Assert.assertTrue( hiteqsm(pre22.measuredError(), dhm2) ); 253 if(debug) System.out.println( pre22.predictedVector() ); 254 Assert.assertTrue( pre22.predictedVector().equals(calc_hm(vec)) ); 255 if(debug) System.out.println( pre22.predictedError() ); 256 Assert.assertTrue( pre22.predictedError().equals(calc_dhm(err)) ); 257 if(debug) System.out.println( pre22.dHitdTrack() ); 258 Assert.assertTrue( pre22.dHitdTrack().equals(der_expect) ); 259 if(debug) System.out.println( pre22.differenceVector() ); 260 Assert.assertTrue( Math.abs(pre22.differenceVector().get(0) - 261 calc_hm(vec).get(0) + hm2.get(0)) < maxdiff ); 262 Assert.assertTrue( Math.abs(pre22.differenceVector().get(1) - 263 calc_hm(vec).get(1) + hm2.get(1)) < maxdiff ); 264 // different cluster ==> different hit 265 Assert.assertTrue( pre22.notEquals(pre11) ); 266 Assert.assertTrue( ! ( pre22.equals(pre11) ) ); 267 Assert.assertTrue( pre22.notEquals(pre12) ); 268 269 //******************************************************************** 270 271 if(debug) System.out.println( ok_prefix + "Update hit." ); 272 if(debug) System.out.println( pre11 ); 273 pre11.update(tre2); 274 if(debug) System.out.println( pre11 ); 275 Assert.assertTrue( pre11.size() == 2); 276 if(debug) System.out.println( pre11.measuredVector() ); 277 Assert.assertTrue( hiteqvec(pre11.measuredVector(), hm1) ); 278 if(debug) System.out.println( pre11.measuredError() ); 279 Assert.assertTrue( hiteqsm(pre11.measuredError(), dhm1) ); 280 if(debug) System.out.println( pre11.predictedVector() ); 281 Assert.assertTrue( pre11.predictedVector().equals(calc_hm(vec)) ); 282 if(debug) System.out.println( pre11.predictedError() ); 283 Assert.assertTrue( pre11.predictedError().equals(calc_dhm(err)) ); 284 if(debug) System.out.println( pre11.dHitdTrack() ); 285 Assert.assertTrue( pre11.dHitdTrack().equals(der_expect) ); 286 if(debug) System.out.println( pre11.differenceVector() ); 287 Assert.assertTrue( Math.abs(pre11.differenceVector().get(0) - 288 calc_hm(vec).get(0) + hm1.get(0)) < maxdiff ); 289 Assert.assertTrue( Math.abs(pre11.differenceVector().get(1) - 290 calc_hm(vec).get(1) + hm1.get(1)) < maxdiff ); 291 //******************************************************************** 292 293 if(debug) System.out.println( ok_prefix + "Check hit type and equality." ); 294 if(debug) System.out.println( HitXYPlane2.staticType()); 295 if(debug) System.out.println( pre11.type() ); 296 if(debug) System.out.println( pre12.type() ); 297 Assert.assertTrue( pre11.type() != null ); 298 Assert.assertTrue( pre11.type().equals(HitXYPlane2.staticType()) ); 299 Assert.assertTrue( pre11.type().equals(pre12.type()) ); 300 301 302 //******************************************************************** 303 304 if(debug) System.out.println( ok_prefix 305 + "------------- All tests passed. -------------" ); 306 } 307 308 }