View Javadoc

1   /*
2    * ZPlaneEloss_Test.java
3    *
4    * Created on September 10, 2007, 11:05 AM
5    *
6    * $Id: ZPlaneEloss_Test.java,v 1.1.1.1 2010/04/08 20:38:00 jeremy Exp $
7    */
8   
9   package org.lcsim.recon.tracking.trfzp;
10  
11  import junit.framework.TestCase;
12  import org.lcsim.recon.tracking.trfbase.ETrack;
13  import org.lcsim.recon.tracking.trfbase.PropDir;
14  import org.lcsim.recon.tracking.trfbase.Surface;
15  import org.lcsim.recon.tracking.trfbase.TrackError;
16  import org.lcsim.recon.tracking.trfbase.TrackVector;
17  import org.lcsim.recon.tracking.trfeloss.DeDx;
18  import org.lcsim.recon.tracking.trfeloss.DeDxFixed;
19  
20  
21  import static java.lang.Math.abs;
22  import static java.lang.Math.sqrt;
23  /**
24   *
25   * @author Norman Graf
26   */
27  public class ZPlaneEloss_Test extends TestCase
28  {
29      private boolean debug;
30      /** Creates a new instance of ZPlaneEloss_Test */
31      public void testZPlaneEloss()
32      {
33          String component = "ZPlaneEloss";
34          String ok_prefix = component + " (I): ";
35          String error_prefix = component + " test (E): ";
36          
37          if(debug) System.out.println( ok_prefix
38                  + "---------- Testing component " + component
39                  + ". ----------" );
40          
41          //********************************************************************
42          TrackVector trv = new TrackVector();
43          trv.set(0,1.0);
44          trv.set(1, 1.0);
45          trv.set(2, 0.1);
46          trv.set(3, 0.2);
47          trv.set(4, 0.0);
48          
49          double density = 1.0; // g/cm^3
50          double thickness = 1.0; // cm
51          
52          DeDx dedx = new DeDxFixed(density);
53          ZPlaneEloss passIt = new ZPlaneEloss(thickness, dedx);
54          
55          TrackError initialError = new TrackError();
56          
57          Surface srf = new SurfZPlane( 20.0 );
58          
59          ETrack tmpTrack = new ETrack( srf, trv, initialError );
60          
61          tmpTrack.setError( initialError );
62          
63          TrackVector initialVector = tmpTrack.vector();
64          passIt.interact_dir( tmpTrack, PropDir.FORWARD );
65          
66          TrackError finalError = tmpTrack.error();
67          TrackVector finalVector = tmpTrack.vector();
68          
69          double particleMass = 0.13957;
70          double ptmax = 10000.; // GeV
71          
72          double pinv = abs(trv.get(4));
73          
74          // make sure pinv is greater than a threshold (1/ptmax)
75          // in this case assume q = 1, otherwise q = q/pt/abs(q/pt)
76          
77          int sign = 1;
78          if(pinv < 1./ptmax)
79              pinv = 1./ptmax;
80          else
81              sign = (int) (trv.get(4)/abs(trv.get(4)));
82          
83          double initialEnergy = sqrt(1./pinv/pinv + particleMass*particleMass);
84          double finalEnergy = initialEnergy;
85          
86          double d = thickness * sqrt(1. + trv.get(2)*trv.get(2) + trv.get(3)*trv.get(3));
87          
88          dedx.loseEnergy(finalEnergy, d);
89          double sigmaEnergy = dedx.sigmaEnergy(initialEnergy, d);
90          
91          if(finalEnergy<particleMass) finalEnergy=initialEnergy;
92          
93          // now evaluate the final q/p and error(4,4)
94          double finalQoverP = sign/sqrt(finalEnergy*finalEnergy - particleMass*particleMass);
95          double finalEr = sigmaEnergy*trv.get(4)*trv.get(4);
96          finalEr *= finalEr;
97          
98          assertTrue(abs(finalVector.get(4)-finalQoverP)<0.00001);
99          assertTrue(abs(finalError.get(4,4)-finalEr)<0.00001);
100         
101     }
102     
103 }