1 /* 2 * HitCylPhiZ2DGenerator_Test.java 3 * 4 * Created on July 24, 2007, 8:43 PM 5 * 6 * $Id: HitCylPhiZ2DGenerator_Test.java,v 1.1.1.1 2010/04/08 20:38:00 jeremy Exp $ 7 */ 8 9 package org.lcsim.recon.tracking.trfcyl; 10 11 import java.util.ArrayList; 12 import java.util.Iterator; 13 import java.util.List; 14 import junit.framework.TestCase; 15 import org.lcsim.recon.tracking.trfbase.Cluster; 16 import org.lcsim.recon.tracking.trfbase.ETrack; 17 import org.lcsim.recon.tracking.trfbase.Hit; 18 import org.lcsim.recon.tracking.trfbase.Surface; 19 import org.lcsim.recon.tracking.trfbase.TrackError; 20 import org.lcsim.recon.tracking.trfbase.TrackVector; 21 import org.lcsim.recon.tracking.trfbase.VTrack; 22 import org.lcsim.recon.tracking.trfutil.Assert; 23 import org.lcsim.recon.tracking.trfutil.TRFMath; 24 25 /** 26 * 27 * @author Norman Graf 28 */ 29 public class HitCylPhiZ2DGenerator_Test extends TestCase 30 { 31 private boolean debug; 32 /** Creates a new instance of HitCylPhiZ2DGenerator_Test */ 33 public void testHitCylPhiZ2DGenerator() 34 { 35 String component = "HitCylPhiZ2DGenerator"; 36 String ok_prefix = component + " (I): "; 37 String error_prefix = component + " test (E): "; 38 39 if(debug) System.out.println( ok_prefix 40 + "---------- Testing component " + component 41 + ". ----------" ); 42 43 int IPHI = SurfCylinder.IPHI; 44 int IZ = SurfCylinder.IZ; 45 46 //******************************************************************** 47 48 if(debug) System.out.println( ok_prefix + "Test constructor." ); 49 double radius = 25.0; 50 double dphi = 0.01; 51 double dz = 0.1; 52 double dphidz = -0.0005; 53 SurfCylinder scyl = new SurfCylinder(radius); 54 HitCylPhiZ2DGenerator gen = new HitCylPhiZ2DGenerator(scyl, dphi, dz, dphidz); 55 if(debug) System.out.println( gen ); 56 57 //******************************************************************** 58 59 if(debug) System.out.println( ok_prefix + "Generate a list of hits." ); 60 double phi0 = 1.2345; 61 double z0 = 6.7; 62 Surface srf = new SurfCylinder(radius); 63 TrackVector vec = new TrackVector(); 64 vec.set(SurfCylinder.IPHI, phi0); 65 vec.set(SurfCylinder.IZ, z0 ); 66 TrackError err = new TrackError(); 67 VTrack trv = new VTrack(srf,vec); 68 ETrack tre = new ETrack(trv,err); 69 List clusters = new ArrayList(); 70 int nclus = 20; 71 for ( int i=0; i<nclus; ++i ) 72 clusters.add( gen.newCluster(trv) ); 73 // Verify and display the list. 74 List hits = new ArrayList(); 75 for ( Iterator iclu=clusters.iterator(); iclu.hasNext(); ) 76 { 77 Cluster clu = (Cluster) iclu.next(); 78 Assert.assertTrue( clu != null ); 79 List newhits = clu.predict(tre,clu); 80 Assert.assertTrue( newhits.size() == 1 ); 81 hits.add( newhits.get(0) ); 82 } 83 Assert.assertTrue( hits.size() == nclus ); 84 85 //******************************************************************** 86 87 if(debug) System.out.println( ok_prefix + "Generate list of measured values." ); 88 double avgphi = 0.0; 89 double sdevphi = 0.0; 90 double avgz = 0.0; 91 double sdevz = 0.0; 92 double sdevphiz = 0.0; 93 for ( Iterator ihit=hits.iterator(); ihit.hasNext(); ) 94 { 95 Hit hit = (Hit) ihit.next(); 96 Assert.assertTrue( hit != null ); 97 // phi 98 double mvalphi = hit.measuredVector().get(IPHI); 99 double merrphi = hit.measuredError().get(IPHI,IPHI); 100 double pvalphi = hit.predictedVector().get(IPHI); 101 double perrphi = hit.predictedError().get(IPHI,IPHI); 102 Assert.assertTrue( TRFMath.isEqual(pvalphi,phi0) ); 103 Assert.assertTrue( TRFMath.isEqual(merrphi,dphi*dphi) ); 104 if(debug) System.out.println( mvalphi ); 105 avgphi += mvalphi; 106 sdevphi += (mvalphi-pvalphi)*(mvalphi-pvalphi); 107 // z 108 double mvalz = hit.measuredVector().get(IZ); 109 double merrz = hit.measuredError().get(IZ,IZ); 110 double pvalz = hit.predictedVector().get(IZ); 111 double perrz = hit.predictedError().get(IZ,IZ); 112 Assert.assertTrue( TRFMath.isEqual(pvalz,z0) ); 113 Assert.assertTrue( TRFMath.isEqual(merrz,dz*dz) ); 114 if(debug) System.out.println( mvalz +"\n"); 115 avgz += mvalz; 116 sdevz += (mvalz-pvalz)*(mvalz-pvalz); 117 // phiz 118 sdevphiz += (mvalphi-pvalphi)*(mvalz-pvalz); 119 } 120 //phi 121 avgphi /= nclus; 122 sdevphi = Math.sqrt(sdevphi/nclus); 123 if(debug) System.out.println( " Phi Avg: " + avgphi ); 124 if(debug) System.out.println( "Phi Sdev: " + sdevphi ); 125 Assert.assertTrue( Math.abs( avgphi - phi0 ) < dphi ); 126 Assert.assertTrue( Math.abs( sdevphi - dphi ) < dphi ); 127 128 // z 129 avgz /= nclus; 130 sdevz = Math.sqrt(sdevz/nclus); 131 if(debug) System.out.println( " Z Avg: " + avgz ); 132 if(debug) System.out.println( " Z Sdev: " + sdevz ); 133 Assert.assertTrue( Math.abs( avgz - z0 ) < dz ); 134 Assert.assertTrue( Math.abs( sdevz - dz ) < dz ); 135 136 // phiz 137 sdevphiz = sdevphiz/nclus; 138 if(debug) System.out.println( "PhiZ Sdev: " + sdevphiz ); 139 // Need to check correlation term... 140 if (dphidz == 0.0 ) 141 { 142 Assert.assertTrue( Math.abs( sdevphiz - dphidz ) < 1E-4 ); 143 } 144 else 145 { 146 // check sign of correlation term 147 Assert.assertTrue( sdevphiz*dphidz >= 0. ); 148 // check magnitude 149 Assert.assertTrue( Math.abs( sdevphiz - dphidz ) < Math.abs(dphidz) ); 150 } 151 152 //******************************************************************** 153 154 if(debug) System.out.println( ok_prefix 155 + "------------- All tests passed. -------------" ); 156 //******************************************************************** 157 158 } 159 160 }