View Javadoc

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