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 }