View Javadoc

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 }