Print

Print


Commit in lcsim/src/org/lcsim/util/step on MAIN
TrackStepper.java+32-271.7 -> 1.8
 CM+GL increase precision in definitions for Mass and clight 

lcsim/src/org/lcsim/util/step
TrackStepper.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- TrackStepper.java	12 Dec 2005 05:46:55 -0000	1.7
+++ TrackStepper.java	18 Dec 2005 16:40:10 -0000	1.8
@@ -17,17 +17,19 @@
  * Particle assumed is a Muon, but can be changed by setting rp[6] at input
  * Units are Tesla, cm, GeV/c
  * @author C. Milstene.
- * @version $Id: TrackStepper.java,v 1.7 2005/12/12 05:46:55 lima Exp $
+ * @version $Id: TrackStepper.java,v 1.8 2005/12/18 16:40:10 caroline Exp $
  */
 public class TrackStepper
 {
+    double mm = 0.001;
+    boolean debug = false;
     private static AIDA aida = AIDA.defaultInstance();
     private static CalHitMapMgr evtptr = null;
     // constants
-    private static final double clight = 2.9979e08; // m/s
+    private static final double clight = 2.99792458e08; // m/s
     private static final double halfpi = 0.5 * Math.PI;
-    private static final double m_default = 0.106     ;
-    private static final double BField_default=5.0;
+    private static final double m_default = 0.105658369;  // mu mass in GeV
+    private static final double BField_default=5.0; // in Tesla
     //   Instance field
     private TrkParams tpar   = new TrkParams(0.,0.,0.,0.,0.);
     private TrkPhaseSpace trakPs = new TrkPhaseSpace();
@@ -37,7 +39,7 @@
     protected double [] p_ints   = new double[3];
     private double [] dpField  = new double[3];
     private double [] dpFordL  = new double[3];
-    private double [] vxyz     = new double[3];
+    private double [] vxyz     = new double[3]; // velocity in mm/s
     private double dTof;
     private double dL ;
 
@@ -85,7 +87,7 @@
      */
     public void tkSteps(double r,double zmax,double[]stpcd)
     {
-	System.out.println("Stepper.tkSteps() called: rstep: r="+r+", zmax="+zmax);
+	if(debug) System.out.println("Stepper.tkSteps() called: rstep: r="+r+", zmax="+zmax);
 // 	for(int i=0; i<6; ++i) {
 // 	    System.out.print("["+i+"] = )");
 // 	}
@@ -101,7 +103,6 @@
         mass_i = (rpn[6] ==-1.)?m_default:rpn[6];
         atZmax = (Math.abs(rpn[2])>a_zmax)? 1 :0;
         atR    = (Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1])>(a_r+0.001))?1:0;  // add 0.001 in mm now-Sept05
-
         if(atZmax==1 || stopTkElow) return;
 
         // access values of dE/dx & number of steps from stpcd
@@ -111,26 +112,29 @@
         materDeDx_i= stpcd[2]/d ;
 
         // Call stepBy to do the stepping && update array[] rp
-        double a_dc = d/numSteps_i  ;
-	System.out.println("Before "+numSteps_i+" steps particle Radius="+partR()+" Pabs="+ partPabs());                    ;
+        double steplen = d/numSteps_i  ;
+	if(debug) System.out.println("Before "+numSteps_i+" steps particle Radius="+partR()+" Pabs="+ partPabs());                    ;
 
-        for( int i=0; (i<numSteps_i);i++)
+        for( int i=0; i<numSteps_i; i++)
         {
-            rpn = stepBy(a_dc,materDeDx_i)     ; // rpn  each step
+            rpn = stepBy(steplen,materDeDx_i)     ; // rpn  each step
 	   // System.out.println("Stpr:rpn[0..2]=( "+rpn[0]+", "+rpn[1]+", "+rpn[2]+" )");
            // System.out.println("stpr:rpn[3..5]=( "+rpn[3]+", "+rpn[4]+", "+rpn[5]+" )");
 
             // Check boundaries after each step
             atZmax = (Math.abs(rpn[2])>a_zmax)? 1 :0; //each step
-            atR    = (Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1])>(a_r+0.001))?1:0; //each step
+	    double aux = Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1]);
+            atR    = ( Math.abs(aux-a_r) < 1.e-3 ) ? 1 : 0; //each step
             if(atZmax ==1 || stopTkElow )
             {
+	      if(debug) {
                 if(atZmax==1)System.out.println(" break For z>zMax of the Detector ");
                 if(stopTkElow)System.out.println("The Track is left with too little energy to continue");
-                break;
+	      }
+	      break;
             }
         }
-	System.out.println(" After "+numSteps_i+" steps, particle Radius="+partR()+" Pabs="+partPabs());
+	if(debug) System.out.println(" After "+numSteps_i+" steps, particle Radius="+partR()+" Pabs="+partPabs());
     }
     /**
      * make a step along this track
@@ -154,17 +158,18 @@
         double dpFromMat2 = dpM[0]*dpM[0]+dpM[1]*dpM[1]+dpM[2]*dpM[2];
         double pAvalaible2= rpn[3]*rpn[3]+rpn[4]*rpn[4]+rpn[5]*rpn[5];
         stopTkElow = (pAvalaible2 < dpFromMat2);
-        for(int i=0;i<3;i++)
-        {
-            tmpxyz   = rpn[i]  ; tmpp    = rpn[i+3];
-            rpn[i]    = tmpxyz + vstep[i]*dTof;
-            if(!stopTkElow)
-                rpn[i+3]  = tmpp   + dpF[i]; // - dpM[i];
-        }
+	if(!stopTkElow) {
+	    for(int i=0;i<3;i++)
+	    {
+		tmpxyz   = rpn[i]  ; tmpp    = rpn[i+3];
+		rpn[i]    = tmpxyz + vstep[i]*dTof;
+                rpn[i+3]  = tmpp   + dpF[i] - dpM[i];
+	    }
+	}
 	//System.out.println("stepBy end: rpn[0..2]=( "+rpn[0]+", "+rpn[1]+", "+rpn[2]+" )");
-	String evtnum = Integer.toString( evtptr.getEvent().getEventNumber() );
+// 	String evtnum = Integer.toString( evtptr.getEvent().getEventNumber() );
 // 	System.out.println("filling cloud2D, rpn: "+rpn[0]+" "+rpn[1]);
-	aida.cloud2D("y vs x, evt "+evtnum).fill(rpn[0],rpn[1]);
+// 	aida.cloud2D("y vs x, evt "+evtnum).fill(rpn[0],rpn[1]);
 // 	Histogram.find("py vs px").fill(rpn[3],rpn[4]);
         return trakPs.upDateRp(rpn);
     }
@@ -183,12 +188,12 @@
         double a_En    = Math.sqrt(pabs2 + mass_i*mass_i);
         double a_q     = rpn[7];
 
-        //dpField[0]=a_q*0.3*(rpn[4]/a_En) * clight*(-BField_i)*dTof;
-        //dpField[1]=-a_q*0.3*(rpn[3]/a_En)* clight*(-BField_i)*dTof;
+        //dpField[0]=a_q*(clight*1e-9)*(rpn[4]/a_En) * clight*(-BField_i)*dTof;
+        //dpField[1]=-a_q*(clight*1e-9)*(rpn[3]/a_En)* clight*(-BField_i)*dTof;
 
 // 	assert BField_i > 4.0 : "BField too small!";
 
-	alpha = a_q*0.3*(1./a_En)*(clight*dTof);
+	alpha = a_q*(clight*1e-9)*(1./a_En)*(clight*dTof);
 	delta =1.+0.25*alpha*alpha*BField_i*BField_i; mainTerm=alpha/delta;
 	adjust = 0.5*(1./delta)*alpha*alpha*BField_i*BField_i;
 	//	dpField[0]=mainTerm*rpn[4]*(-BField_i)  - adjust*rpn[3];
@@ -249,7 +254,7 @@
         this.tpar =tkprm       ;
         df.setMaximumFractionDigits(5);
 	BField_i=(BField_i==-10.)?BField_default:BField_i;
-	System.out.println("stpr:rpFromTrk:BField="+BField_i);
+	if(debug) System.out.println("stpr:rpFromTrk:BField="+BField_i);
         trakPs.trkRpFromParams(tpar,inMass, BField_i);
         return  trakPs.getRp();
     }
CVSspam 0.2.8