lcsim/src/org/lcsim/util/step
diff -u -r1.10 -r1.11
--- TrackStepper.java 27 Dec 2005 23:04:12 -0000 1.10
+++ TrackStepper.java 16 Jun 2006 20:45:36 -0000 1.11
@@ -17,7 +17,9 @@
* 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.10 2005/12/27 23:04:12 caroline Exp $
+ * @version $Id: TrackStepper.java,v 1.11 2006/06/16 20:45:36 caroline Exp $
+ *NEXT To BE DONE: get subdet/layer info diretly
+ *get materiel info from a util/step/stepperCondition.class
*/
public class TrackStepper
{
@@ -26,10 +28,12 @@
private static AIDA aida = AIDA.defaultInstance();
private static CalHitMapMgr evtptr = null;
// constants
- private static final double clight = 2.99792458e08; // m/s
+ //private static final double clight = 2.99792458e08; // m/s
+ private static final double clight = 3.0e08; // m/s
private static final double halfpi = 0.5 * Math.PI;
private static final double m_default = 0.105658369; // mu mass in GeV
private static final double BField_default=5.0; // in Tesla
+ private static double dT0=1.0E-13;
// Instance field
private TrkParams tpar = new TrkParams(0.,0.,0.,0.,0.);
private TrkPhaseSpace trakPs = new TrkPhaseSpace();
@@ -42,8 +46,6 @@
private double [] vxyz = new double[3]; // velocity in mm/s
private double dTof;
private double dL ;
-
- double []xy = new double[3];
private double []dpF = new double[3];
private double []dpM = new double[3];
private double []vstep = new double[3];
@@ -57,17 +59,26 @@
private int numSteps_i;
protected double BField_i =-10. ;
private double materDeDx_i ;
+ private boolean curlBack = false;
- // private Detector detNow ;
+ // private Detector detNow ;
// Multiple Local use
- private double tmpxyz ;
- private double tmpp ;
- private double mass_i ;
- private double particleR;
- private double particlePt;
- private double particlePabs;
-
- /** Default Constructor */
+ private double mass_i ;
+ private double pFactor ;
+ private double a_r ;
+ private double a_zmax ;
+ private double dThick ;
+ private double rv ;
+ private int curlBackFlag = 0 ;
+ private double tmpxyz ;
+ private double tmpp ;
+ private double particleR ;
+ private double particlePt ;
+ private double particlePabs ;
+ private double sumdL ;
+ private double sumdpFM ;
+
+ /** Default Constructor */
public TrackStepper()
{
evtptr = CalHitMapMgr.getInstance();
@@ -81,102 +92,156 @@
* calculated to reach the r boundary is exhausted. Allow a
* Delta_r = 0.001mm for round_off differences in r.
*
- * @param r
+ * @param r
* the radial boundary to aim for- generally r next layer
- * @param zmax
+ * @param zmax
* the z boundary of the detector
- * @param stpcd
+ * @param stpcd
* an array ={xNumberOfSteps, BField, Mean_dE/dx_this layer}
*/
public void tkSteps(double r,double zmax,double[]stpcd)
{
+
if(debug) System.out.println("Stepper.tkSteps() called: rstep: r="+r+", zmax="+zmax);
-// for(int i=0; i<6; ++i) {
-// System.out.print("["+i+"] = )");
-// }
// put all values used in comparison to calculations in cm
// put all values returned in mm
// put values of x,y,z,px,py,pz,q,amass in rp
// Check if at boundary at entry, if so return with old values
-
- rpn=trakPs.getRp(); // get phaseSpace at entry
-
- double a_r = r;
- double d=Math.abs(Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1])-a_r) ;
- double a_zmax=zmax;
- numSteps_i =(int) stpcd[0]; BField_i = stpcd[1];
- double steplen = d/numSteps_i ;
- mass_i = (rpn[6] ==-1.)?m_default:rpn[6];
- atZmax = (Math.abs(rpn[2])>(a_zmax+(steplen/40)) )? 1 :0;
- atR = (Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1])>(a_r+(steplen/20)))?1:0; // add 0.001 in mm now-Sept05
- if(atZmax==1 || stopTkElow) return;
-
+ double[]vv=new double[3];
+ double rv; double drLength;
+ rpn=trakPs.getRp(); // get phaseSpace at entry
+ setVelocity(rpn) ; // particle velocity
+ double pabsEntry =partPabs(rpn) ;
+ a_r = r;
+ a_zmax=zmax;
+ dThick = stpcd[0]; BField_i = stpcd[1];
+
+ sumdL =0. ;
+ sumdpFM=0. ;
+ mass_i = (rpn[6] ==-1.)?m_default:rpn[6];
+ pFactor=(partPabs(rpn)>=1.)?1.:(5*partPabs(rpn));
+ drLength =(dThick>=1200.)?6.:((dThick/10)*pFactor);
+ materDeDx_i=(stpcd[2]/stpcd[0]) ; //mean per mmm multiplied by dL-in dPFromMatter
+ numSteps_i =(dThick>=1200.)?210:(int)(dThick/drLength);
+ System.out.println("dThick="+dThick+" rpn-012="+rpn[0]+" "+rpn[1]+" "+rpn[2]);
+ System.out.print("drLength="+drLength+"numSteps_i="+numSteps_i);
+ System.out.println("materDeDx_i"+materDeDx_i);
+ setDTOF(rpn,drLength);
+ vv=getVelocity();
+ rv=((rpn[0]*vv[0]+rpn[1]*vv[1]))/(partR(rpn)*Math.sqrt(vv[0]*vv[0]+vv[1]*vv[1]));
+ double vv1=Math.sqrt(vv[0]*vv[0]+vv[1]*vv[1]);
+ aida.cloud1D("Evolution vradial ").fill(vv1);
+ atZmax = (Math.abs(rpn[2])>(a_zmax+(drLength/10)) )? 1 :0;
+ atR = ((Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1])-(a_r))<(drLength))?1:0; // add 0.001 in mm now-Sept05
+ if(atZmax==1 || stopTkElow) return;
// access values of dE/dx & number of steps from stpcd
-
-
- // Check if distance cm or distance mm !!!!
- materDeDx_i= stpcd[2]/d ;
-
+ // Check if distance cm or distance mm !!!!
// Call stepBy to do the stepping && update array[] rp
-
- if(debug) System.out.println("Before "+numSteps_i+" steps particle Radius="+partR()+" Pabs="+ partPabs()); ;
-
- for( int i=0; i<numSteps_i; i++)
- {
- 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+(steplen/40)))? 1 :0; //each step
- double aux = Math.sqrt(rpn[0]*rpn[0]+rpn[1]*rpn[1]);
- atR = ( Math.abs(aux-a_r) < steplen/20) ? 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;
- }
- }
- if(debug) System.out.println(" After "+numSteps_i+" steps, particle Radius="+partR()+" Pabs="+partPabs());
+ System.out.println("Before "+numSteps_i+" steps:Px Py x y Radius (r.v)" );
+ System.out.println(rpn[3]+" "+rpn[4]+" "+rpn[0]+" "+rpn[1]+" "+partR(rpn)+" "+rv);
+ if(partR(rpn)<2.)dT0=getDTOF();
+ System.out.println("Before bigloop DTOF="+getDTOF());
+ int nLoop=0;
+ atR=0;
+ System.out.print("Loop Entry:atZmax=" +atZmax+" stopTkElow="+stopTkElow);
+ System.out.println(" curlBack="+curlBack+" atR="+atR);
+ System.out.println(" RLIMIT="+a_r);
+
+ bigLoop:while(((atZmax!=1)&&!stopTkElow)&&((nLoop<=10)||((a_r>1000)&&(nLoop<=1270)))){
+ nLoop++;
+ if(nLoop==1)System.out.println("HERE: numSteps_i"+numSteps_i+"drLength="+drLength+"R="+partR(rpn));
+ if(partR(rpn)==0)break;
+ System.out.println(" ENTRY OF BIGLOOP nLoop="+nLoop+" drLength="+drLength+" dt="+getDTOF()+" dTof="+dTof);
+ if(nLoop==1)System.out.println(" ENTRY OF FOR LOOP numsteps_i="+numSteps_i);
+ rpn = stepBy(drLength,materDeDx_i) ; // rpn each step
+ pFactor=(partPabs(rpn)>=1.)?1.:(5*partPabs(rpn));
+ setVelocity(rpn); vv=getVelocity();
+ rv = (rpn[0]*vv[0]+rpn[1]*vv[1])/(partR(rpn)*Math.sqrt(vv[0]*vv[0]+vv[1]*vv[1]));
+ setDTOF(rpn,drLength);
+ aida.cloud2D("behavior of rv in loop").fill(getDTOF(),rv);
+ pFactor=(partPabs(rpn)>=1.)?1.:(5*partPabs(rpn));
+ setCurlBack(rv<=0.35);
+ if((rv<0.35) && (Math.abs(rv)>0.35)&&(curlBackFlag==1)){
+ curlBackFlag=2; break;
+ }
+ if(( (curlBackFlag==0) && (rv<=0.35) )||(getDTOF()>1.5*dT0))
+ {
+ if(rv<=0.35)curlBackFlag=1 ;
+ drLength =(dThick>1200.)?6.:((dThick/100)*pFactor);
+ numSteps_i =(dThick>1200.)?210:(int)(dThick/drLength);
+ }
+ // Check boundaries after each step
+ atZmax = (Math.abs(rpn[2])>(a_zmax+(drLength/10)))? 1 :0; //each step
+ atR = ( Math.abs(partR(rpn)-a_r) < drLength) ? 1 : 0; //each step
+ if((atZmax==1)||stopTkElow||(atR==1)) break;
+ }
+ if(atZmax ==1 || stopTkElow ||curlBack)
+ {
+ if((atZmax==1)||stopTkElow){
+ 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");
+ }else if(curlBack){
+ System.out.println(" The track curls back go to a smaller radius");
+ }
+ }
+ double pabsExit = partPabs(rpn);
+ double dpFromDedxLay =sumdpFM;
+// {
+ //System.out.print("meanDeDx="+stpcd[2]+" dpFromDedxLay="+dpFromDedxLay+" sumdL="+sumdL);
+ //System.out.println(" pEntry"+pabsEntry+" pExit="+pabsExit+" pExit-PEntry="+(pabsExit-pabsEntry));
+// }
+ System.out.println("After "+numSteps_i+"Px Py x y En Radius r.v DTOF" );
+ rv=((rpn[0]*vv[0]+rpn[1]*vv[1]))/(partR(rpn)*Math.sqrt(vv[0]*vv[0]+vv[1]*vv[1]));
+ aida.cloud1D("Evolution of scalar productrv ").fill(rv);
+ setDTOF(rpn,drLength);
+ System.out.print(rpn[3]+" "+rpn[4]+" "+rpn[0]+" "+rpn[1]+" "+partR(rpn)+" "+rv);
+ System.out.println(getDTOF());
}
/**
* make a step along this track
* @return position after step
* rp[0-5]={x,y,z,px,py,pz}after step&trp[6-7]={mass,q}
*/
- public double [] stepBy(double dc,double matDeDx)
+
+ private double [] stepBy(double dc,double matDeDx)
{
//System.out.println("stepBy: rpn[0..2]=( "+rpn[0]+", "+rpn[1]+", "+rpn[2]+" )");
- setVelocity();
+ setVelocity(rpn);
tmpxyz=0.; tmpp=0.;
- setDTOF(dc);
- setPathLength(dc);
- dTof = getDTOF();
+ if(!curlBack){
+ setDTOF(rpn,dc);
+ dTof=getDTOF();
+ if(dTof>1.5*dT0)dTof=dT0;
+ } else{
+ dTof=dT0;
+ }
+ setPathLength(rpn,dc);
+ // dTof = getDTOF();
dL = getPathLength();
dpF = dpFromField(dc);
dpM = dpFromMatter(dc,matDeDx);
-
+ sumdL = sumdL+dL; // Jan30-06
//System.out.println(" !!!=> px,dpF0,dpM0="+rpn[3]+" "+dpF[0]+" "+dpM[0]);
//System.out.println("!!!=> py,dpF1,dpM1="+rpn[4]+" "+dpF[1]+" "+dpM[1]);
vstep = getVelocity();
+ double vt = Math.sqrt(vstep[0]*vstep[0]+vstep[1]*vstep[1]);
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);
- 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];
- }
- }
+ setStopTkELow(pAvalaible2 < dpFromMat2);
+ 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];
+ }
+ sumdpFM = sumdpFM +Math.sqrt(dpFromMat2);
+ }
//System.out.println("stepBy end: rpn[0..2]=( "+rpn[0]+", "+rpn[1]+", "+rpn[2]+" )");
// 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 ").fill(rpn[0],rpn[1]);
+ aida.cloud2D("py vs px,evt").fill(rpn[3],rpn[4]);
// Histogram.find("py vs px").fill(rpn[3],rpn[4]);
return trakPs.upDateRp(rpn);
}
@@ -189,48 +254,44 @@
private double[] dpFromField(double dc)
{
+ double [] dpField = new double[3];
double alpha; double delta; double adjust; double mainTerm;
double pabs2 = rpn[3]*rpn[3]+rpn[4]*rpn[4]+rpn[5]*rpn[5];
mass_i = rpn[6];
double a_En = Math.sqrt(pabs2 + mass_i*mass_i);
double a_q = rpn[7];
- //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;
+ // 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*(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];
- // dpField[1]=-mainTerm*rpn[3]*(-BField_i) - adjust*rpn[4];
- dpField[0]=mainTerm*rpn[4]*(BField_i) - adjust*rpn[3];
- dpField[1]=-mainTerm*rpn[3]*(BField_i) - adjust*rpn[4];
-
- dpField[2]=0.;
+ alpha = a_q*0.3*(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];
+ dpField[1]=-mainTerm*rpn[3]*(BField_i) - adjust*rpn[4];
+ dpField[2]=0.;
return dpField;
}
/** Return dpx,dpy,dpz after pathLength in Material this step
*@param dc steplength
- *@param meanDeDx this layer, namely sum(dedx)*dx, on all the materiels
+ *@param meanDeDx this layer, namely sum(dedx)*dx, on all the materiels
*/
private double[] dpFromMatter(double dc,double materMeanDeDx)
{
-
+ double [] dpFordL = new double[3];
double pabs2= rpn[3]*rpn[3]+rpn[4]*rpn[4]+rpn[5]*rpn[5];
materDeDx_i = materMeanDeDx;
double tempdpoverdl;
double mass_i = rpn[6];
double a_En = Math.sqrt(pabs2 + mass_i*mass_i);
-
for (int i =0; i<3;i++)
{
// Change in Momentum due to material
tempdpoverdl = (materDeDx_i*a_En*(rpn[i+3]/pabs2));
dpFordL[i] = tempdpoverdl*dL;
}
-
return (dpFordL);
}
@@ -238,7 +299,7 @@
* Return vector rp(x,y,z,px,py,pz,mass_i=MuonMass,charge,BField)
* from the information at the Interaction Point given by TrkParams.
*
- * @param tkprm
+ * @param tkprm
*TrkParams at Interaction Point (IP)
*/
public double[] rpFromTrkParams(TrkParams tkprm)
@@ -255,7 +316,7 @@
/**
* Return vector rp(x,y,z,px,py,pz,mass_i=inMass,charge,BField)
* from the information at the Interaction Point given by TrkParams.
- * @param tkprm
+ * @param tkprm
* TrkParams at Interaction Point(IP
* @param inMass
*/
@@ -270,18 +331,19 @@
return trakPs.getRp();
}
- /** set velocity vx,vy,vz of the particle this step
+ /** set velocity vx,vy,vz of the particle this step-mm/sec
*/
- public void setVelocity()
+ public void setVelocity(double []vectRp)
{
double tempV ;
+ for(int i=0;i<8;i++){rpn[i]=vectRp[i];}
//rpn = trakPs.getRp();
mass_i=(rpn[6]==-1.)?m_default:rpn[6] ; // Default Muon mass
double En = Math.sqrt(rpn[3]*rpn[3]+rpn[4]*rpn[4]+rpn[5]*rpn[5]+mass_i*mass_i);
for(int i=0;i<3;i++)
{
tempV = (rpn[i+3]/En)*clight*1000. ;
- vxyz[i]=tempV ;
+ vxyz[i]=tempV ;
}
}
/**
@@ -293,16 +355,20 @@
}
/**
* Set dTimeOfFlight for the step dc
- * @param dc
+ * @param dc
* @param step
*/
- public void setDTOF(double dc)
+ public void setDTOF(double [] vectRp,double dc)
{
double a=0.;double b=0.; double c=0.;
double a_dc = dc ;
- xy[0]=rpn[0]; xy[1]=rpn[1];xy[2]=rpn[2];
+ double [] xy=new double[3] ;
+ for(int i=0;i<8;i++){rpn[i]=vectRp[i];}
+ xy[0]=rpn[0]; xy[1]=rpn[1];xy[2]=rpn[2];
+ setVelocity(rpn);
vstep=getVelocity();
+ // System.out.println("DTOF:velocity="+vstep[0]+" "+vstep[1]+" "+vstep[2]);
for(int i=0;i<2;i++)
{
a += vstep[i]*vstep[i] ;
@@ -310,7 +376,13 @@
c += xy[i]*xy[i];
}
c = Math.sqrt(c)*2*a_dc + a_dc*a_dc ;
+ if((b*b+a*c)<=0 || a==0){ // put a default value
+ dTof=dT0;
+ }else{
+ double fornow=Math.sqrt(b*b+a*c);
dTof = (-b + Math.sqrt(b*b+a*c))/a;
+ aida.cloud2D(" -b vs discri").fill(-b,fornow);
+ }
}
/** @return TOF this step
*/
@@ -320,14 +392,20 @@
}
/**
* Set path length (x,y,z) after step dc
- * @param dc
+ * @param dc
* steplength
*/
- public void setPathLength(double dc)
+ public void setPathLength(double [] vectRp,double dc)
{
+ setVelocity(vectRp);
vstep = getVelocity();
- double vabs = Math.sqrt(vstep[0]*vstep[0]+vstep[1]*vstep[1]);
- dL = dTof * vabs;
+ double vabs = vstep[0]*vstep[0]+vstep[1]*vstep[1]+vstep[2]*vstep[2];
+ vabs=Math.sqrt(vabs);
+ //setDTOF(vectRp,dc); -- In order to deal with undefined DTOF
+ //getDTOF(); -- use default
+ dL = dTof* vabs;
+ if(curlBack)System.out.println(" PL : vabs="+vabs+" dTof="+dTof+" dL="+dL);
+ // System.out.println("SPL: vabs="+vabs+" dL="+dL);
}
/** @return change in pathLength this step
@@ -351,15 +429,15 @@
}
/** Dec-25-05-
* Set New Phase Space point setNewRp
- * @param []rp
- * containing x,y,z,px,py,pz,q,m
+ * @param []rp
+ * containing x,y,z,px,py,pz,q,m
*/
public void setNewRp(double[] rpv)
{
for(int i=0; i<6;i++)
{
rpn[i]=rpv[i];
- }
+ }
rpn[7]=(rpv[7]<0)? m_default:rpv[7];
trakPs.upDateRp(rpn);
}
@@ -370,31 +448,32 @@
return rpn= trakPs.getRp();
}
- /**
- * @return Radius
+ /**
+ * @return Radius
* at which the particle is
*/
- public double partR()
+ public double partR(double []vectRp)
{
+ for(int i=0;i<2;i++){rpn[i]=vectRp[i];}
particleR= rpn[0]*rpn[0]+rpn[1]*rpn[1];
if(particleR!=0.)particleR = Math.sqrt(particleR);
return particleR;
}
/** @return The Pt of the particle
*/
- public double partPt()
+ public double partPt(double [] vectRp)
{
-
+ for(int i=3;i<5;i++){rpn[i]=vectRp[i];}
particlePt= rpn[3]*rpn[3]+rpn[4]*rpn[4];
if(particlePt!=0.) particlePt=Math.sqrt(particlePt);
return particlePt;
}
/** @return the absolute momentum pabs
*/
- public double partPabs()
+ public double partPabs(double[]vectRp)
{
-
- particlePabs= rpn[3]*rpn[3]+rpn[4]*rpn[4]+rpn[5]*rpn[5];
+ for(int i=3;i<5;i++){rpn[i]=vectRp[i];}
+ particlePabs= rpn[3]*rpn[3]+rpn[4]*rpn[4]+rpn[5]*rpn[5];
if(particlePabs!=0.) particlePabs= Math.sqrt(particlePabs);
return particlePabs;
}
@@ -405,6 +484,7 @@
{
resetStopTkELow();
resetAtZmax() ;
+ resetCurlBack() ;
int stepFlags = 0;
}
@@ -422,6 +502,20 @@
}
return stepFlags;
}
+
+ /** Set Boolean Indicator If Energy Left
+ */
+ public void setCurlBack(boolean b)
+ { curlBack=b;}
+ /** Reset Boolean Indicator Energy Left for the step
+ */
+ public void resetCurlBack()
+ {setCurlBack(false);}
+ /** Return Boolean Indicator Energy Left for the step
+ */
+ public boolean getCurlBack()
+ {return curlBack;}
+
/** Set Boolean Indicator If Energy Left
*/
public void setStopTkELow(boolean b)
@@ -466,26 +560,30 @@
{
clearTrackStepper();
}
+
/** Reset- put all the 8 vector elements to 0.
*/
public void clearTrackStepper()
{
trakPs.clear();
- BField_i = -10.;
- setDTOF(0.);
- setPathLength(0.);
- dpFromField(0.);
- dpFromMatter(0.,0.);
- resetStepFlags();
+ BField_i = -10.;
+ curlBackFlag=0;
for(int i=0;i<3;i++)
{
r_ints[i]=0.;p_ints[i]=0.;
rpn[i]=0. ;rpn[i+3]=0.;
dpF[i]=0. ; dpM[i]=0. ;
+ dpField[i]=0.; dpFordL[i]=0.;
vxyz[i]=0. ;vstep[i]=0.;
- xy[i]=0.;
}
- rpn[6]=m_default; rpn[7]=0.;
+ rpn[6]=m_default; rpn[7]=0.;
+ setVelocity(rpn);
+ setDTOF(rpn,0.);
+ setPathLength(rpn,0.);
+ dpFromField(0.);
+ dpFromMatter(0.,0.);
+ resetStepFlags();
+
}
}